Verilog之CDC 跨时钟域

跨时钟:单 bit 两级同步,多 bit 格雷码 + FIFO,窄脉冲转电平

1.单比特两级同步器

reg q1,q2;

always@(posedge dst_clk or negedge rst_n)begin

if(!rst_n) begin q1<=0;q2<=0;end

else begin q1<=din; q2<=q1; end

end

assign dout = q2;

  • 信号从慢时钟→快时钟 / 跨时钟,容易亚稳态(采样不稳、跳变)
  • 打两拍:第一拍缓存、第二拍稳定输出
  • 只适合:单 bit 信号(reset、req、busy);不能用于多 bit 数据(会乱码)

2.格雷码转换

  • 格雷码特点:每次只变 1bit
  • 多 bit 跨时钟(FIFO 读写指针),用格雷码 + 两级同步,杜绝多 bit 同时翻转导致亚稳态报错

//如下二进制转格雷码:

assign wr_gray = (wr_ptr >> 1) ^ wr_ptr;

//空:读写指针完全相同

//满:最高2位相反,其余位相同

3.窄脉冲跨时钟(防丢脉冲)

短脉冲只维持 1 个时钟,直接同步会丢;

  • 先在源时钟:把脉冲变成「电平翻转」
    -// 源时钟:脉冲转电平翻转

always@(posedge src_clk) if(pulse_in) toggle <= ~toggle;

  • 目的时钟同步后,检测边沿,还原脉冲

always@(posedge dst_clk){s1,s2} <= {toggle,s1};

assign pulse_out = s1 ^ s2;

  • 用途:中断脉冲、握手短信号跨域
相关推荐
xwz_new1 天前
UVM之sequencer
ic验证
xwz_new1 天前
Verilog之常见时钟分频
ic验证
xwz_new2 天前
system verilog之$cast
ic验证
xwz_new7 天前
数字芯片验证技能树概述(一)
ic验证
不会武功的火柴4 个月前
UVM验证入门(18)-Callback机制
systemverilog·ic验证·uvm方法学
愤怒学习的白菜4 个月前
0 trivial:UVM的空壳平台
学习·uvm·ic验证
不会武功的火柴4 个月前
UVM验证入门(15)-uvm_agent代理
systemverilog·ic验证·uvm方法学
SuperGQB8 个月前
UVM验证(三)—UVM机制(1)
systemverilog·ic验证·uvm方法
-interface1 年前
25届数字IC验证秋招总结
秋招·uvm·ic验证