跨时钟域处理时需要考虑两个方面:
方面1:不同位宽,处理方式不同
- 位宽为1,可以采用寄存器打两拍的方式;
- 位宽为多位时,需要采用异步FIFO、转换为格雷码、握手等;
异步FIFO:通过异步读写,以及空满标志实现了跨时钟数据同步。
转换为格雷码:利用相邻格雷码仅一位改变的特性,实现跨时钟域数据同步。
握手:在具体实现中,假设 req、ack、data 总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的 req 信号给接收域。接收域在检测到有效的 req 信号后锁存数据总线,然后回送一个有效的 ack 信号表示读取完成应答。发送域在检测到有效 ack 信号后撤销当前的 req 信号,接收域在检测到 req 撤销后也相应撤销 ack 信号,此时完成一次正常握手通信。此后,发送域可以继续开始下一次握手通信,依次循环。但是握手方式效率较低。
方面2:时钟域快慢不同,处理方式不同
时钟从慢到快时:数据一定会被快的时钟采到,信号先在慢时钟域抓一拍,然后打两拍传向快时钟域;

本文详细介绍了FPGA中处理跨时钟域问题的策略,包括位宽不同的处理(异步FIFO、格雷码转换、握手协议)和时钟快慢不同的处理(数据展宽)。同时,强调了亚稳态和MTBF(平均无故障时间)的重要性,指出提高MTBF的方法,如优化工艺和使用打拍技术。
最低0.47元/天 解锁文章
2710

被折叠的 条评论
为什么被折叠?



