Advertisement

时钟域交叉信号处理(二)——异步FIFO的Verilog实现(附同步FIFO的设计与实现)

阅读量:

需要解决以下几个问题:

  1. 什么是异步FIFO,其具备哪些功能?
    用于实现不同时钟域之间的数据传输,有效避免亚稳态的出现。

  2. 在生成写满与读空信号的过程中,如何处理跨时钟域的问题,并确保空满状态的准确指示?
    采用寄存器打两拍的方式结合格雷码进行处理。
    格雷码的具体作用1
    写入和读取地址通常以二进制形式表示,仅在将地址同步至对方时钟域时转换为格雷码 ,这是因为格雷码相邻数值之间仅有一位发生变化。即便在同步过程中出现错误,例如000→001,错误的结果也只会将原状态同步过去。比如读操作同步到写操作时,可能在未满的情况下提前触发写满信号,从而避免数据被覆盖:<=满。读操作的情况类似。

  3. 异步FIFO中如何通过格雷码正确生成写满与读空信号?

格雷码的具体作用2
另一个关键点是判断空满状态的实现方式。假设FIFO容量为8个单元,地址范围为0-7。当读地址为0000时,若写地址达到8,则实际写入地址为1000,对应的格雷码是1100。此时表明FIFO已写满。此时读地址的格雷码为0000,而写地址的格雷码为1100,二者最高位与次高位存在差异,其余位相同 ,这一特征可作为判断写满的依据。
当读取和写入的格雷码完全一致时,则表示FIFO为空。这种情形较为直观:因为读指针始终跟随在写指针之后,即使读操作速度较快也能够及

全部评论 (0)

还没有任何评论哟~