快时钟域到慢时钟域的展宽打拍-Verilog
Verilog 时钟
2023-09-11 14:20:39 时间
//快时钟域到慢时钟域的展宽打拍
module fast2slow_CDC(
input clk1,
input clk2,
input rst,
input pulse_clk1,
output pulse_syn_clk2
);
reg pulse_wide_clk2;
reg reg1_pulse_wide_clk2;
reg reg1_pulse_wide_clk1;
reg reg2_pulse_wide_clk1;
//生成脉冲展宽信号
reg pulse_wide_clk1;
always @ (posedge clk1 or posedge rst)
begin
if(rst)
begin
pulse_wide_clk1 <= 1'b0;
end
else if (pulse_clk1)
begin
pulse_wide_clk1 <= 1'b1;
end
else if (reg2_pulse_wide_clk1)
begin
pulse_wide_clk1 <= 1'b0;
end
else
begin
pulse_wide_clk1 <= pulse_wide_clk1;
end
end
//在目的时钟域内采样展宽后的信号
always @ (posedge clk2 or posedge rst)
begin
if(rst0)
begin
pulse_wide_clk2 <= 1'b0;
reg1_pulse_wide_clk2 <= 1'b0;
end
else
begin
pulse_wide_clk2 <= pulse_wide_clk1;
reg1_pulse_wide_clk2 <= pulse_wide_clk2;
end
end
//在源时钟域内同步目的时钟域内的展宽信号,以生成反馈信号
always @ (posedge clk1 or posedge rst)
begin
if(rst)
begin
reg1_pulse_wide_clk1 <= 1'b0;
reg2_pulse_wide_clk1 <= 1'b0;
end
else
begin
reg1_pulse_wide_clk1 <= reg1_pulse_wide_clk2;
reg2_pulse_wide_clk1 <= reg1_pulse_wide_clk1;
end
end
assign pulse_syn_clk2 = reg1_pulse_wide_clk2;
endmodule
总结:
1.首先是脉冲展宽(快时钟域下脉冲到来拉高,快时钟域下反馈信号到来拉低)。
2.脉冲展宽在慢时钟域下打两拍,结果作为同步输出。
3.同步输出信号在快时钟域下打两拍,结果作为反馈信号。
相关文章
- 【FPGA教程案例56】深度学习案例3——基于FPGA的CNN卷积神经网络之池化层verilog实现
- 【FPGA教程案例29】基于FPGA的DDS直接数字频率合成器之二——Verilog开发
- 15.verilog可综合语句设计综述
- 基于FPGA的数字时钟verilog开发
- 如何在 macOS 上使用 Verilog 模拟电气模型
- 【校招Verilog进阶挑战】序列检测篇:VL2、含有无关项的序列检测
- 【Verilog基础】同步复位,异步释放 电路设计
- 【Verilog基础】在不同时钟域之间如何安全地传递信号方法总结(2)单比特跨时钟域之结绳法(快到慢)
- 【Verilog基础】同一个时钟域与不同时钟域的概念区分
- 【Verilog基础】CDC跨时钟域问题,个人理解总结(下)(数据丢失、多路扇出、异步复位解决方案)
- 【ASIC设计】Verilog: wire vs. reg
- verilog基础---uart_rx代码