當您在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