什么包含在verilog总是@*敏感列表?

Fra*_*jay 5 verilog digital-logic

当您在始终块敏感性列表中使用通配符@*时,我对于被视为输入的内容感到有点困惑.例如,在下面的示例中,哪些信号被解释为导致重新评估always块的输入?根据我的理解clkreset不包含在内,因为它们不会出现在always块中任何过程语句的右侧. 包括ab,因为它们都出现在always块中的过程语句的右侧.但我真的很困惑的是enmux.因为它们被用作ifcase语句中的测试条件,它们是否被视为输入?每次enmux改变值时是否重新评估always块?我几乎是一个菜鸟,在我的3本Verilog书中,我找不到令人满意的解释.我总是发现这里的解释真的很有帮助.谢谢

module example
( 
    input wire clk, reset, en, a, b,
    input wire [1:0] mux,
    output reg x,y, z
);

always @*    
begin  
 x = a & b;    
  if (en)
    y= a | b;
  case(mux)
    2'b00: z = 0;
    2'b01: z = 1;
    2'b10: z = 1;
    2'b11: z = 0;
  endcase
end
endmodule
Run Code Online (Sandbox Code Playgroud)

Pau*_*l S 10

任何在块内读取的信号,如果它的值发生变化,可能会导致块的结果发生变化@*.使用的读取信号的任何更改都必须重新评估块,因为它可能导致块的输出发生变化.我相信你知道,如果你没有用过,@*你会手动将这些信号列出来.

对于您提供的代码,它的任何信号都是:

  • 在作业的右侧评估(ab)
  • 作为条件(enmux)的一部分进行评估

......但这是任何因任何原因而被评估的信号.(我现在想不出任何其他原因,但也许其他人可以)

clk并且reset不在敏感列表中,因为它们未被使用.就那么简单.他们没什么特别的; 它们像其他任何信号一样.