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