当我在iverilog中比较1'bx时,为什么===不能工作?

时间:2019-04-18 21:43:32

标签: verilog

我正在尝试为iverilog设置测试平台,以便每当某个错误位设置为“ x”时,该模块就会将一些名为'state_string'的字符串设置为'START',并将'state_string'设置为其他字符串只要错误位是1'b0或1'b1,就可以得到该值。

我曾尝试使用casex,并使用波形查看器对其进行了分析,但是我仍然有些困惑,这里的幕后发生了什么。这是我看到的波形...

波形

我的期望是,每当错误为“ 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

我知道我可以花一点时间来处理更多的状态,但是我想知道为什么这种方式行不通,或者我可以做些什么来使这种方式行得通。

1 个答案:

答案 0 :(得分:1)

您拥有的是事件驱动模拟器。 为了触发always ( * ),必须更改其中一个信号。 您的error的初始状态为'x',因此它不会更改

尝试一下:

initial
begin
    #100;
    error = 1'b0;
    #100;
    error = 1'b1;
    #100;
    error = 1'bx;
    #100
end

您将获得以下信息: enter image description here