论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
为了能够在不同的时钟域内直接同步指针,可以对指针使用格雷码的编码方式,也就是指针每次移动只变化一位,这样就避免了由于指针多位同时变化而无法直接同步的问题。图3表示了一个三位地址的内存用于格雷码编码的FIFO。n位地址的内存需要n 1位的格雷码。使用最高位(也就是第n-1位)作为状态位,从第n—2到第0位作为地址的第n-2位到第0位;对状态位(也就是第n-1位)和第n-2位进行位异或运算产生地址的第n-2位(也就是地址的最高位)。通过对图3的观察可以得知,四位格雷码编码的指针和三位二进制加状态位编码的指针具有同样的功能:指针产生的地址循环遍历8个内存地址,每一次遍历后状态位取反。值得注意的一点,是当指针从0100变化到1100的时候,相应的地址由100变为000,状态位和一位地址同时发生了变化,所以不能同步由另一个时钟域格雷码指针产生的状态位和地址位,此时应该直接由另一个时钟域同步指针来完成,由同步后的指针产生相应的状态位和地址位。
3 保守的满空判断
对于异步FIFO设计,无论是采用握手还是直接同步的方法来获取对方时钟域的指针,对满空信号的判断总是“保守”的。
(1)满空信号的复位(满信号复位表示FIFO非满,空信号复位表示FIFO非空)和实际FIFO的情况相比有一定的延迟。例如,空信号是由读者用读指针与同步或握手后得到的写指针进行比较产生的。由于同步或握手需要一定的时间,在这段时间,写者可能向FIFO写入新的数据,写指针发生了变化,此时FIFO已经非空,但此刻空信号仍然没有复位。对于写者而言,满信号的复位也会遇到相同的问题。不过,在通常情况下,FIFO只要确保不会向下溢出或向上溢出,复位的延迟就不会导致向下溢出或向上溢出,是可以接受的。
(2)满空信号的置位(满信号置位表示FIFO满,空信号置位表示FIFO空)和FIFO的实际情况相比没有延迟。例如,同样考虑FIFO为空的情况,读者使用读指针和同步或握手后的写指针进行比较,由于FIFO为空