Я хотел бы задержать входной сигнал на один полный тактовый цикл.
У меня есть приведенный ниже код, который в основном пытается изменить сигнал при установке часов.
Однако испытательный стенд показывает, что это не всегда задержка на 1 цикл.
В некоторых случаях она изменяется одновременно с изменением входного сигнала.
Есть ли способ решить такую проблему?
module delay_one_cycle(
input clk,
input[3:0] original_signal,
output reg[3:0] delayed_signal
);
always @(posedge clk) begin
delayed_signal <= original_signal;
end
endmodule
module delay_one_cycle_tb();
reg clk;
reg[3:0] original_signal;
wire[3:0] delayed_signal;
delay_one_cycle doc_inst (clk, original_signal, delayed_signal);
// Initial setup
initial begin
clk = 0;
original_signal = 4'd9;
#5 original_signal = 4'd10;
#5 original_signal = 4'd11;
#4 original_signal = 4'd12;
#3 original_signal = 4'd13;
// finish the simulation
#5 $finish;
end
// clock
always begin
#1 clk = !clk;
end
endmodule
Вот форма волны: Форма волны показывает, например, что когда входной сигнал изменяется на фронте тактового сигнала на 1010, одновременно изменяется и выходной сигнал.
delayed_signal на самом деле не отложено до следующего цикла!