FPGA Asynchronous FIFO设计思路(2)

FPGA Asynchronous FIFO设计思路(2编码

首先讨论格雷码的编码方式:spa

 

 

    先看4bit的格雷码,当MSB0时,正向计数,当MSB1时,即指针已经走过一遍了,最高位翻转,此时的格雷码是反向计数,这其中整套数据以最大值(深度)为对称中心,每个数均符合格雷码的要求,即下一个状态比上一个状态只有1bit的变化。设计

3bit的格雷码,在最高位反向后,即指针达到了FIFO最后一个地址,低位开始从新计数,此时存在一个问题是,在最高位跳转的地方,有两bite的数据发生变化,违背了格雷码的规律。3d

 

 

    以上为一种利用格雷码来产生数据指针的模型,使用格雷码来传递FIFO指针数据,那么FIFO的深度必定是pow2,以上模型中,指针ptr先经过gray to binary comb logic 模块,将格雷码转化成二进制数据,而后进行加一操做,获得bnext,而后经过binary to gray comb logic bnext转化为gnext, 而后gnext经过寄存器输出获得新的数据指针ptr.再经过gnext的最高位和次高位,计算出addrmsb.指针

 

    以上是第二种数据指针生成模型,首先是,数据地址即指针去掉最高位后,参与加一运算,获得新的数据地址,采用二进制的形式。blog

  而后加一获得的新数据地址进行格雷码转换,获得gnext的值,而后经过寄存器输出,即此模型同时输出数据指针(采用的格雷码)和数据地址值(采用二进制)。it

 

 以上为FIFO的一种总体设计模型。二进制

 

 实际操做中,空满标志位信号生成的问题im

 

 具体逻辑不用多说d3

 

    关于空信号的生成,最高位,以及数据地址彻底相等,便可以判断为空。

    关于满信号的生成即复杂一些:

 

     若是采用之前的判断依据,指针的最高位不一样,剩下的数据地址彻底相同,若是采用的是格雷码编码方式,就会出现问题。

 

      满信号的判断依据中指出读指针和写指针的最高两位同时不一样,剩下的相同,便可以判断FIFO满。

 

相关文章
相关标签/搜索