Fra*_*jay 5 verilog digital-logic
当您在始终块敏感性列表中使用通配符@*时,我对于被视为输入的内容感到有点困惑.例如,在下面的示例中,哪些信号被解释为导致重新评估always块的输入?根据我的理解clk和reset不包含在内,因为它们不会出现在always块中任何过程语句的右侧. 包括a和b,因为它们都出现在always块中的过程语句的右侧.但我真的很困惑的是en和mux.因为它们被用作if和case语句中的测试条件,它们是否被视为输入?每次en和mux改变值时是否重新评估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
任何在块内读取的信号,如果它的值发生变化,可能会导致块的结果发生变化@*.使用的读取信号的任何更改都必须重新评估块,因为它可能导致块的输出发生变化.我相信你知道,如果你没有用过,@*你会手动将这些信号列出来.
对于您提供的代码,它的任何信号都是:
a和b)en和mux)的一部分进行评估......但这是任何因任何原因而被评估的信号.(我现在想不出任何其他原因,但也许其他人可以)
clk并且reset不在敏感列表中,因为它们未被使用.就那么简单.他们没什么特别的; 它们像其他任何信号一样.