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

问题描述 投票:0回答:1

我正在尝试为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

我知道我可以再做一点来处理更多的状态,但是我想知道为什么这种方式不起作用,或者我能做些什么来使这种方式起作用。

verilog
1个回答
1
投票

你有一个事件驱动的模拟器。为了触发always ( * ),其中一个信号必须改变。你的error的初始状态为'x',所以它不会改变。

试试这个:

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

你会得到这个:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.