赞
踩
CDC要解决的问题是由于不同时钟域导致的数据采样不稳定。
Mentor 0-in工具报告了三种类型的CDC问题,如下所示:
·两个时钟域之间不同步
·异步复位无同步
·同步器之前的组合逻辑
·重聚(Reconvergence)
甲时钟域的设计的具有时钟异步的(或在ISA截面具有
可变的相位关系)设计中的另一个时钟。例如,假设一个时钟通过时钟分频器从另一个时钟输出。这两个时钟具有恒定的相位关系 ;因此,使用这些时钟的两部分设计实际上属于同一个时钟域(图2-1 A)。但是,supposet的时钟频率为50 MHz和33 MHz。这些时钟的相位关系随时间而变化; 因此,他们计时两个不同的时钟域(图2-1 B)。
图2-1。时钟域
从传输域控制信号由2DFF同步器同步,此时数据可认为稳定,此时可用tx_sel_r2来采样数据。
多锁,多访问FIFO将传输的数据排队。
2DFF同步器对每个位进行同步,但是在任何接收时钟周期内,一次只能改变一个同步位。同时改变的两个数据,在经过D触发器采样后,由于不同的delay,采样后的数据可能会存在一个CLK的位差。
先将数据同步到新的时钟域,然后反馈ACK信号至数据源,然后数据源发出使信号使能数据。
保证同一个d触发器的d端,RESET端,SET端等都是同一个时钟域。
<span style="vertical-align:inherit;"><span style="vertical-align:inherit;">总是@(posedge clk,negedge rst_async_n) </span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
如果(!rst_async_n) </span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
开始</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
rst_s1 <= 1'b0; </span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
结束</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
其他的开始</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
rst_s1 <= 1'b1; </span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
结束</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
总是@(posedge clk,negedge rst_async_n) </span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
如果(!rst_async_n)开始</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
rst_s2 <= 1'b0; </span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
结束</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
其他的开始</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
rst_s2 <= rst_s1; </span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
结束</span></span><span style="vertical-align:inherit;"><span style="vertical-align:inherit;">
分配rst_sync_n = rst_s2; </span></span>
异步路径中的组合逻辑对同步信号来说是一个重大问题,因为用于确定同步路径上可接受的故障率的数据在每个时钟周期期间都会在CDC信号上进行单个转换。但是如果将组合逻辑放在路径上,那么这个假设由于毛刺传播而是错误的。结果,错误率显着上升。为了解决这个问题,你应该从逻辑路径中删除所有组合逻辑。在设计中,一般在模块的输出端用D触发器作模块间的隔离,既可以取消跨时钟域的组合逻辑,又减少了模块间的布线延迟。
该字的各个位与接收时钟域同步,但每个位都受到可变延迟的影响。同样,FSM 的next_state输入可以表示与当前状态不一致的命令。
好的方案,当相应的异步FIFO读取数据值被保证准备好时,仲裁器选择接收数据值。即用同步过的选通信号去选取稳定的数据。
不好的实现会导致模拟或硬件实现中的不可恢复的错误。在下面的不良方案的例子中,可变延迟会导致将错误的命令应用于数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。