Я видел пример в интернете, где им присвоили «Неизвестное значение». Это улучшает производительность? В каком-то смысле это опасно?
Нет, это не опасно. Присвоение неизвестного значения дает инструменту синтеза еще одну степень свободы для оптимизации. Однако важно иметь в виду, что в кремнии не существует неизвестного состояния. Другими словами, инструмент синтеза примет значение во время этого состояния. Единственное, что вы указываете, это то, что вас это не волнует.
Однако назначение неизвестного состояния в вашем коде не является действительно необходимым. Поскольку вас не волнует состояние 2'b11
(поскольку оно недоступно), вы можете просто сделать следующее:
reg [1:0] state;
reg [7:0] out;
always @(state) begin
case (state)
2'b00: out = 8'hAA;
2'b01: out = 8'hBB;
default: out = 8'hCC;
endcase
end
Это, вероятно, похоже на то, что будет делать инструмент синтеза.
Пожалуйста, имейте в виду, что, хотя присвоение неизвестного состояния является синтезируемым, сравнение с неизвестным состоянием - нет! Язык описания оборудования Verilog (5-е издание) Томаса и Мурби объясняет на странице 39, каким образом можно использовать неизвестный оператор во время логического синтеза.