https://blog.csdn.net/qq_40456702/article/details/123312706?spm=1001.2014.3001.5506
慢到快时钟域:
单bit数据 延迟打拍法
// 慢时钟域到快时钟域 单bit数据 延迟打拍法
// 一般设计中使用两级触发器进行缓存即可满足设计时序需求
// 两级触发器延迟打拍并检测信号上升沿的 Verilog 描述如下
module slow2fast_delay_clap(
input clk1, // 异步慢时钟
input sig1, // 异步信号
input rstn, // 复位
input clk2, // 目的快时钟
output sig2); // 快时钟域同步后的信号
reg[2:0] sig2_r; // 寄存三拍,前两级用于同步,后一级用于边沿检测
always@(posedge clk2 or negedge rstn)begin
if(~rstn) sig2_r <= 3'b0;
else sig2_r <= {sig2_r[1:0], sig1}; // 缓存
end
assign sig2 = sig2_r[1] && !sig2_r[2]; // 上升沿检测
endmodule
//---------testbench--------
`timescale 1ns/10ps
module slow2fast_delay_clap_tb;
reg clk1,clk2,rstn,sig1;
wire sig2;
slow2fast_delay_clap m(
clk1,
sig1,
rstn,
clk2,
sig2);
initial begin
clk1=0; clk2=0; sig1=0; rstn=0;
#20 rstn=1;
#30 sig1=1;
#20 sig1=0; // 一个慢时钟周期后sig1=0
#400 $stop;
end
always #10 clk1 = ~clk1; // 慢时钟
always #5 clk2 = ~clk2; // 快时钟
endmodule