FPGA时钟进阶2——跨时钟域传递多比特信号处理
跨时钟域传递多比特信号的问题是,在同步多个信号到一个时钟域时将可能发生数据变化歪斜(Skew),这种数据歪斜最终会在第二个时钟域的不同的市长上升沿被采集。
避免歪斜策略:
1、多比特信号融合策略,在可能的情况下,将多比特跨时钟域信号融合成单比特跨时钟域信号;
2、多周期路径规划策略,使用同步加载信号来安全的传递多比特跨时钟域信号;
3、使用格雷码传递多比特跨时钟信号。
1、多比特信号融合:
第一个例子比较简单,加载(load)信号和使能(enable)信号同时有效来加载一个数值寄存器,这两个信号之间可能有一点歪斜,导致没有生效。

解决办法:由于这两个信号是同时起效的,所以可以直接合成一个信号

第二个例子,在发生时钟域先后有两个使能信号(不是同时有效),B_en1信号正好稍微在B_en2有效结束前有效。

解决:将两个使能信号融为一个控制信号,其次要加一个额外的寄存器将同步后的使能控制信号寄存一拍(使其延迟一个时钟周期)。

2、多周期路径规划
多周期路径规划是一种通用的安全传递多比特跨时钟域信号技术。
指在传输非同步数据到接收时钟域时配上一个同步的控制信号,数据和控制信号被同时发送到接收时钟域,同时控制信号在接收时钟域使用两级寄存器同步到接收时钟域。
好处:
1、在时钟域之间发生数据时发生时钟域无须计算对应的脉冲宽度;
2、发送时钟域只需要切换一个使能到接收时钟域来显示数据已经被传递且已准备被加载。使能信号无需返回到原始状态。

异步FIFO处理多比特跨时钟域信号:
网上对于FIFO的用法已经非常多了,我这里就不在多写了。

