0
我想設計一個簡單的Verilog代碼,其中包含兩個始終阻止,交替執行,如握手。我想用兩個標誌do_A和do_B來控制block_A和block_B這兩個塊。預期的結果必須是ABABAB ...有沒有辦法糾正下面的代碼?感謝您的幫助。如何交替兩個總是塊?
module tb;
reg clock, reset, do_A, do_B;
initial begin clock = 0; reset = 0; #50; reset = 150; #50; reset = 0; end
always #50 clock = ~clock;
always @(posedge clock) begin: block_A
if (reset) do_B <= 0;
else if (do_A) begin
do_B <= 0;
$display("A");
end
end
always @(posedge clock) begin:block_B
if (reset) do_A <= 1;
else if (do_B) begin
do_A <= 0;
$display("B");
end
end
endmodule
感謝Vesiliy,以下代碼適用於理想的結果。
always @(posedge clock) begin: Block_A
if (reset) do_B = 0;
else if (do_A) begin
do_B = 0;
$display("A");
end
else do_B <= 1;
end
always @(posedge clock) begin:Block_B
if (reset) do_A = 1;
else if (do_B) begin
do_A = 1;
$display("B");
end
else do_A <= 0;
這似乎很奇怪,但效果很好。
謝謝Vasiliy。遵循您的建議,我修改了代碼並進行了測試,獲得了ABAB ...序列。 – gnoejh
沒有問題。你需要接受答案。 – Vasiliy