直接打两拍也是不可靠的。譬如在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设计就是解决不同时钟域数据传输问题,而且考虑更全面,可仔细研读
|