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;

  • 用途:中断脉冲、握手短信号跨域
相关推荐
Ether IC Verifier4 天前
IC 验证工程师新手入门指南
systemverilog·ic验证·dpu
暴风雨中的白杨7 天前
cocotb环境安装
ic验证·cocotb
不会武功的火柴9 天前
SystemVerilog语法(8)-有限状态机(FSM)
嵌入式硬件·fpga开发·自动化·ic验证·rtl·uvm方法学
不会武功的火柴10 天前
SystemVerilog语法(7)-接口(interface)
嵌入式硬件·fpga开发·仿真·ic验证·rtl
不会武功的火柴18 天前
ModelSim入门实战(三): 批处理一键仿真与波形调试
嵌入式硬件·fpga·仿真·modelsim·ic验证·rtl
xwz_new23 天前
浅谈NOC
ic验证
xwz_new23 天前
浅谈SOC
ic验证
xwz_new1 个月前
SystemVerilog之每日一问
ic验证
xwz_new1 个月前
数字芯片验证工具之Mac安装Icarus Verily+ GTKWave+VScode(免费)
macos·ic验证
xwz_new1 个月前
UVM之TLM通信基础概念
ic验证