微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 跨时钟域的异步信号交互问题讨论

跨时钟域的异步信号交互问题讨论

时间:10-02 整理:3721RD 点击:
应该说“跨时钟域的异步信号交互问题”是数字前端设计里面一个重要话题。
这里我总结一下自己对这个问题的一些了接和认识,希望具有实际项目经验和扎实理论基础的EETOPER们热烈讨论。
1. 在两个异步的时钟域之间的信号交互可以分成不同的类别——
    按位数分(一位,多位);
    按作用分(控制信号,数据信号);
    按时钟频率分(快->慢,慢->快)。
2. 采用的方法基本有同步器、格雷码加同步器、握手方法、异步FIFO等。
    当然针对上面的四种分类和实际要求要采用不同的方法。
3. 异步FIFO是采用得比较多的一种方法,异步FIFO本身的设计就涉及到跨时钟域的问题。
上面是我对这个问题一些比较片面和肤浅的看法,希望大家补充和完善,将这些方法具体化。

异步信号需要寄存两拍

我现在有个基本问题还没想明白,异步FIFO当中,要比较两个时钟域的地址,那么快时钟域的地址向慢时钟域传递,如何处理?



    快时钟域的地址转换成格雷码,通过两级寄存器,同步到慢时钟域

1、控制信号的CDC,一般而言都是使用双寄存器方法实现CDC,当然这个也是有限制的,一般来说需要使用快时钟同步慢时钟,如果是慢时钟同步快时钟呢,我们就需要把控制信号展宽(具体展宽有多种方法,可以在设计时延长有效周期等);这种方法在实际中用的比较多;
2、对于数据总线,一般使用握手机制或者是异步fifo来实现,握手机制实际上就是通过控制信号来告诉需要跨越的时钟何时采样数据是稳定的来达到安全可靠的跨越时钟区域。fifo则是在没有握手机制时使用较多,一般异步fifo的结构是写地址控制,双端ram,读地址控制,读地址gray转换以及CDC至写时钟区域然后与写地址进行比较从而产生满信号以及接近满信号,写地址gray转换并CDC至读时钟区域再与读地址进行比较产生空信号以及接近空信号。具体实现时可能还有区别,不过方法应该都是大同小异的。个人觉得在设计的时候遇到CDC问题时,仔细分析两个时钟区域的关系,具体问题具体分析选用合适的方案会比较好些。


我觉得 格雷码加同步器 是不能解决这样的问题的,因为慢时钟域采到的Gray Code可能已经变化多位,所以请高手解答

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top