Я хотел бы создать простой код 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