我想设计一个简单的 Verilog 代码,它包含两个 always 块,交替执行,如握手。我想使用两个标志 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;
这似乎很奇怪,但效果很好。