当您在always block sensitivity列表中使用通配符@ *时,我对输入被认为是什么感到困惑。例如,在下面的例子中,哪些信号被解释为导致always块被重新评估的输入?据我所知,clk和重置不包括在内,因为它们不会出现在总是块的任何过程语句的右侧。 a和b都包含在内,因为它们都出现在always块的过程语句的右侧。但我真的很困惑的是en和mux。因为和情况下语句是否被视为输入,因此它们被用作中的测试条件?总是阻止每次重新评估en和多路复用器更改值?我几乎是一个noob,在3本Verilog书中,我还没有找到令人满意的解释。我总是发现这里的解释非常有用。感谢verilog always @ *灵敏度列表中包含什么?
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
您发布的模块有语法错误。我假设'x = a&b'应该在'begin'行之后。 – toolic 2012-03-11 23:47:58
@toolic谢谢。我刚刚编辑它。现在应该更加正确。 – 2012-03-12 05:24:48
你应该养成编写你发布的代码的习惯。它仍然有语法错误。 – toolic 2012-03-12 12:29:04