如果你说时钟是a同步的,你就不能随心所欲。
我建议您将“规格”更改为:
“有一个由慢时钟产生的信号。如果有上升沿,我希望在一个不相关的快时钟上有一个1个时钟周期长的脉冲。在慢时钟上的信号变化与在快时钟上产生一个脉冲之间,允许有最大X个快时钟脉冲延迟(X>=2)”。
抱歉,主要编辑:我的大脑没有打开!
使用同步器将信号从慢时钟传输到快时钟。然后在快速时钟域中找到上升沿:
//
// Transfer a signal from a slow clock to a fast clock
// Also detect the rising edge in the fast clock domain
//
module signal_transfer
(
input slow_clock,
input slow_signal,
input reset_n, // reset for fast clock domain
input fast_clock,
output reg fast_signal,
output fast_rising
);
reg signal_meta,signal_delay;
always @(posedge fast_clock or negedge reset_n)
begin
if (!reset_n)
begin
signal_meta <= 1'b0;
fast_signal <= 1'b0;
signal_delay <= 1'b0;
end
else
begin
signal_meta <= slow_signal;
fast_signal <= signal_meta;
signal_delay <= fast_signal;
end
end
assign fast_rising = fast_signal & !signal_delay;
endmodule