cdc(clock domain crossing)

1. CDC

CDC要解决的问题是由于不同时钟域导致的数据采样不稳定。

Mentor 0-in工具报告了三种类型的CDC问题,如下所示:

·两个时钟域之间不同步

·异步复位无同步

·同步器之前的组合逻辑

·重聚(Reconvergence)

2.两个时钟域之间不同步

时钟域的设计的具有时钟异步的(或在ISA截面具有

可变的相位关系)设计中的另一个时钟。例如,假设一个时钟通过时钟分频器从另一个时钟输出。这两个时钟具有恒定的相位关系 ;因此,使用这些时钟的两部分设计实际上属于同一个时钟域(图2-1 A)。但是,supposet的时钟频率为50 MHz和33 MHz。这些时钟的相位关系随时间而变化; 因此,他们计时两个不同的时钟域(图2-1 B)。

图2-1。时钟域

cdc(clock domain crossing)_第1张图片

2.1.One-bit syn

cdc(clock domain crossing)_第2张图片cdc(clock domain crossing)_第3张图片

cdc(clock domain crossing)_第4张图片

2.1。DMUXSynchronizer(数据总线同步器)

从传输域控制信号由2DFF同步器同步,此时数据可认为稳定,此时可用tx_sel_r2来采样数据。

cdc(clock domain crossing)_第5张图片

2.2.异步FIFO同步器

多锁,多访问FIFO将传输的数据排队。

cdc(clock domain crossing)_第6张图片

cdc(clock domain crossing)_第7张图片

2.3。多位数据同步器

2DFF同步器对每个位进行同步,但是在任何接收时钟周期内,一次只能改变一个同步位。同时改变的两个数据,在经过D触发器采样后,由于不同的delay,采样后的数据可能会存在一个CLK的位差。

cdc(clock domain crossing)_第8张图片

cdc(clock domain crossing)_第9张图片

2.4.Handshakes

先将数据同步到新的时钟域,然后反馈ACK信号至数据源,然后数据源发出使信号使能数据。

cdc(clock domain crossing)_第10张图片

3.异步重置无同步

保证同一个d触发器的d端,RESET端,SET端等都是同一个时钟域。

cdc(clock domain crossing)_第11张图片 

cdc(clock domain crossing)_第12张图片

总是@(posedge clk,negedge rst_async_n) 
如果(!rst_async_n) 
开始
     rst_s1 <= 1'b0;  
结束
其他的开始
     rst_s1 <= 1'b1;  
结束
总是@(posedge clk,negedge rst_async_n)  
如果(!rst_async_n)开始
    rst_s2 <= 1'b0;  
结束
其他的开始
    rst_s2 <= rst_s1;  
结束
分配rst_sync_n = rst_s2;   

4.同步器之前的组合逻辑

异步路径中的组合逻辑对同步信号来说是一个重大问题,因为用于确定同步路径上可接受的故障率的数据在每个时钟周期期间都会在CDC信号上进行单个转换。但是如果将组合逻辑放在路径上,那么这个假设由于毛刺传播而是错误的结果,错误率显着上升为了解决这个问题,你应该从逻辑路径中删除所有组合逻辑。在设计中,一般在模块的输出端用D触发器作模块间的隔离,既可以取消跨时钟域的组合逻辑,又减少了模块间的布线延迟。

cdc(clock domain crossing)_第13张图片

5.重聚(Reconvergence)

cdc(clock domain crossing)_第14张图片

该字的各个位与接收时钟域同步,但每个位都受到可变延迟的影响。同样,FSM next_state输入可以表示与当前状态不一致的命令。

cdc(clock domain crossing)_第15张图片

好的方案当相应的异步FIFO读取数据值被保证准备好时,仲裁器选择接收数据值。即用同步过的选通信号去选取稳定的数据。

cdc(clock domain crossing)_第16张图片

不好的实现会导致模拟或硬件实现中的不可恢复的错误。在下面的不良方案的例子中,可变延迟会导致将错误的命令应用于数据。

cdc(clock domain crossing)_第17张图片



 
  

你可能感兴趣的:(FPGA)