微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 怎么用flip flop 实现 两个不同 clock domain 的数据交换?

怎么用flip flop 实现 两个不同 clock domain 的数据交换?

时间:10-02 整理:3721RD 点击:
问题是这样的:
D 是 clock A domain 的数据, 怎样把 D 转换到 clock B domain? 就是怎样在clock B domain 采样到 D?

1  asyncronous FIFO
2  握手信号,req&ack
3  转换成gray码再打两拍过来再变回来(如果是数据用这个方法估计有点不现实。)
你如果就用ff实现应该就是用第2个方法吧

通过两个d触发器来实现!

是要用2 个DFF, 但到底怎么连接好?
能不能给出连接方式,比如 Q1 --> D2 ,  Q2 AND X --> D1 什么的。
我实在想不出来。
多谢了。

楼上说的有道理

长见识了,呵呵


1. 首先保证Clock B能够采样到信号D,即必要时先扩展信号D的宽度(如果Clock A比Clock B频率高)。如果两个时钟的频率关系未知,那么可以采用B->A的反馈形式来扩展信号D的宽度;
2. 在Clock B domain中用多级串联FF同步信号D,一般情况下两级足以,但是如果极为强调可靠性,可以采用两级以上的串联结构;
3. 如果D是一组信号(例如总线),那么要用到异步FIFO,否则并列的同步电路会导致错误输出。注意异步FIFO要用格雷码来传递指针信息。

btw,搞明白亚稳态问题是解决跨时钟域问题的关键所在。

真是好心人!
再次感谢!

要考虑,两个时钟域速度,决定是用fifo还是简单的同步装置,搂主,可以再详细一些说明


在需要跨时钟域传递并行信号时,如果并行信号之间没什么相关性,那么就可以采用简单的多个同步电路,否则必须采用异步FIFO来保证信号间的关系。

建议去看一篇文章"Crossing the abyss_asynchronous signals in synchronous world",里面讲了不少实用的东西

dddddddddddddddddddddd

ddddddddddddddddd

ddddddddddddddddd

好像 要用到FIFO吧

多学习啊!

单纯的用寄存器打是不能保证数据正确,只能防止亚稳态往后传播。
如果出现多位数据同时变化,而刚好打到变化的边沿是,有的信号采到沿前的,有的信号才到沿后的,就会出现错误的数据

嗯,如果被传递的多位信号之间有相关性,就要用异步FIFO来帮忙了

如果是数据,估计应该不止一位,还是不要用触发器来同步,可能会产生错误,可以用以下方法
1.异步FIFO
2.可以的话,加一个使能信号,将使能信号同两个串连的触发器同步

小编说问题要详细点

今天面世的一个问题,clka中的一个8bit控制信号,传到clkb中,怎么处理亚稳态呢?不要用fifo,简单的逻辑实现

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

网站地图

Top