Я пытаюсь настроить свой тестовый стенд для iverilog так, чтобы всякий раз, когда какой-либо бит ошибки был установлен на «x», модуль устанавливал некоторую строку с именем «state_string» на «START» и устанавливал «state_string» на другой значение, когда бит ошибки равен 1'b0 или 1'b1.
Я пытался использовать casex для этого, и я проанализировал его с помощью средства просмотра формы волны, но я все еще несколько озадачен тем, что здесь происходит за кулисами. Вот форма волны, которую я вижу ...
Форма волны
![](https://i.stack.imgur.com/3DrbM.png)
Я ожидаю, что всякий раз, когда ошибка равна «x», «state_string» не будет серией x.
Кроме того, вот код внутри моего тестового стенда, который должен контролировать это поведение ...
always @(*) begin
if (error === 1'bx) begin
state_string = "START";
end
if (error === 1'b0) begin
state_string = "RUNNING";
end
if (error === 1'b1) begin
state_string = "ERROR";
end
end
Я понимаю, что мог бы сделать второй бит для обработки большего количества состояний, но я хочу либо узнать, почему этот способ не будет работать, либо что я могу сделать, чтобы этот способ работал.