飞道的博客

【Verilog】CDC跨时钟域同步处理

684人阅读  评论(0)

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场