怎么用flip flop 实现 两个不同 clock domain 的数据交换?
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,简单的逻辑实现
