跨时钟域问题

2020-02-28 18:20发布

我需要将clka的八位数据传递给clkb时钟域,除了用FIFO外还有什么可靠的方法?
因为我这数据只是偶尔才会发生变化,那么如果我直接用寄存器打两拍是否可靠?
如果用握手的话怎样用?有很多人讲这个问题但是还是没搞清楚。麻烦知道的人讲讲。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
ococ
1楼-- · 2020-02-28 21:57
1.clka,clkb分别为多少M?
2.数据偶尔变化,变化的数据保持多少个时钟周期?
Backkom80
2楼-- · 2020-02-29 00:27
还有,数据是多少位的,1bit,还是多bit?
钻研的鱼
3楼-- · 2020-02-29 03:57
          直接打两拍也是不可靠的。譬如在clka时钟域,数据开始是0x00,下一个数据是0x03,注意bit0和bit1发生变化,但每个bit到clkb时钟域的路径长度不一样,有可能bit0的路径比bit1短,因此clkb采样到的数据是0x00->0x01->0x03,从clka时钟域来看,只有两个数据,0x00和0x03,但对于clkb来讲,是是三个数据0x00 0x01 0x03,所以一个简单的解决方法是clka在输出数据的时候,也输出有效信号,有效信号在数据中央,当clkb检测到有效信号,数据此时肯定有效。这种方法还需要很多改进,譬如要考虑clka和clkb的频率差等。上传两篇经典异步fifo设计,其实这个异步fifo设计就是解决不同时钟域数据传输问题,而且考虑更全面,可仔细研读
winkle.zhang
4楼-- · 2020-02-29 08:08
搬个板凳

一周热门 更多>