CDC(Clock Domain Crossing)
由于当下的IC/FPGA设计全是基于同步设计,而一个系统不可能只有一个时钟,所以跨时钟域无可避免,而跨时钟域同步处理则是每一个IC/FPGA设计工程师所必须掌握的基础技能。
CDC主要从几个方面考虑:
单bit数据/多bit数据、快时钟域/慢时钟域
常用CDC同步方案有以下三种:
1.两级寄存器同步
直接对“打两拍”,适用于单bit信号;
但如果需要同步的信号是脉冲信号,就要考虑“快到慢”,还是“慢到快”;如果是快到慢,则要脉冲展宽;如果是慢到快,则要“采沿”;同时还要考虑采样定理(2倍速率)。
2.握手同步
适用于:多bit数据的非连续异步传输;握手过程需要消耗时间;
待补充:示意图,示例代码
握手过程:
1) clk1的数据准备好后,放到数据总线上,同时发出请求req;
2) req同步到clk2;
3)clk2检测到同步后的req信号(沿),将总线上的数据锁存,并给出响应ack;
4) ack同步到clk1;
5)clk1检测到同步后的ack信号,拉低请求req;
6)clk2拉低响应ack;
7)开始新的数据传输。
3.异步FIFO
双口RAM+格雷码地址;适用于所有情况。
代码下一篇详细介绍。
IC工具:SpyGlass可进行CDC规则检查
一句话:要同步,而不重复同步
复位信号
采用异步复位同步释放,代码略。
转载:https://blog.csdn.net/m0_52840978/article/details/123413712