FPGA基础知识15(CDC问题的解决方案总结--异步时钟 )
来源:互联网 发布:软件药品库 编辑:程序博客网 时间:2024/05/17 17:43
需求说明:IC设计基础
内容 :异步时钟数据交互
来自 :时间的诗
原文:http://blog.csdn.net/verylogic/article/details/38640871
CDC(不同时钟之间传数据)问题是ASIC/FPGA设计中最头疼的问题。CDC本身又分为同步时钟域和异步时钟域。这里要注意,同步时钟域是指时钟频率和相位具有一定关系的时钟域,并非一定只有频率和相位相同的时钟才是同步时钟域。异步时钟域的两个时钟则没有任何关系。这里假设数据由clk1传向clk2。
单bit传输时,同步时钟域因为频率和相位关系都是已知的,可以推导的,所以不需要采用额外的硬件电路就可以解决CDC问题,只需要源数据在clk1端保持足够长时间即可。让其保持足够长时间有两个好处:即便出现亚稳态,也可以在两个clk2时钟周期后数据变得稳定下来,从而采到正确的结果。还可以防止低频采高频时,因为频率跟不上而导致数据丢失。
单bit传输时,异步时钟域的传输就必须使用额外的电路模块(同步器)来保证数据正确的传输。最基本的同步器是双锁存结构的电平同步器,其余的同步器都是由其衍生而来。该同步器的基本原理,也是让数据至少在clk2的时钟下保存两个周期,消除亚稳态。当然同步器能解决异步时钟域的同步问题,自然也可以拿来解决同步时钟域的问题,毕竟同步时钟域更简单一些。
实际的电路设计中,才不会管那么多细节,不管你是同步时钟域还是异步时钟域,只要是不同的时钟之间传数据,就加上同步器的结构,这当然是一种偷懒的解决办法。脉冲同步器就是这么一种万能的结构,对于单bit跨时钟域传输而言,使用脉冲同步器就够了,不需要区分时钟有没有关系,也不需要区分是高频采低频还是低频采高频,毕竟也很少有人能掌握这么全的细节。
对于多bit传输,不能采用单bit传输的方法。原因在于,单bit传输时,不能确定该数据到底经过1个clk2时钟周期之后有效还是两个clk2时钟周期之后才有效。所以对多个bit各自采用单bit的同步机制,会导致输出一些错误的中间状态。对于多bit传输,只能使用握手信号或者异步fifo。
总结如下:
1、有关系的时钟之间传单bit数据,理论上只需要源数据保持足够长的时间(clk2的两个周期)即可;
2、无关系的时钟之间传单bit数据,必须要使用同步器;
3、不管有无关系的时钟进行单bit传输,脉冲同步器都可以解决这个问题;
4、多bit传输只能使用握手机制或者异步fifo;
5、低频采高频,为防止数据不丢失,应当让源数据变慢,多保持一些周期;高频采低频则不需要,但是高频采低频得到的结果可能带有很多冗余。
- FPGA基础知识15(CDC问题的解决方案总结--异步时钟 )
- CDC问题的解决方案总结
- FPGA基础知识14(跨时钟域处理--异步时钟)
- FPGA基础知识19(FPGA异步时钟设计中的同步策略 异步时钟 打两拍 握手机制)
- FPGA基础知识20(FPGA设计异步时钟处理分类及百度文库资料)
- FPGA 中时钟信号的总结
- FPGA 异步时钟处理方
- FPGA异步时钟同步化
- 关于FPGA的时钟分频问题
- FPGA时钟问题
- 单片机与FPGA通信的跨时钟域问题多种解决方法总结
- FPGA基础知识4(FPGA DCM时钟管理单元的理解--BUFG SKEW)
- Verilog基础知识8(异步FIFO的FPGA实现)
- FPGA异步时钟设计中的同步策略
- FPGA跨时钟域设计的一点总结
- FPGA设计中的时钟问题
- 异步时钟域的信号通信问题
- FPGA中跨时钟域的信号处理--异步FI…
- STM32 应用
- [个人收藏]成为iOS顶尖高手,你必须来这里(这里有最好的开源项目和文章)
- Java追加文件内容的三种方法
- RelativeLayout
- android自定义LinearLayout和View
- FPGA基础知识15(CDC问题的解决方案总结--异步时钟 )
- 浅谈JavaEE中的JDBC模板类的封装实现以及合理的建立项目包结构
- Node.js 函数
- 加减乘除验证码
- ChromeBook 折腾<->:安装ubuntu系统,已经常用软件(smplyer/guake)安装问题整理
- centos6.4安装mysql
- iPad/iPhone登陆iOS Beta页提示"Your session has expired"解决办法
- jsp页面el表达式失效
- c# 连接 mysql 以及实现简易增删改查