基于VHDL的异步FIFO设计
3.3 一种新颖的设计方法产生空满标志
空满标志位是通过比较读/写指针来判断的,空满标志的判断方法:对于二进制地址来说,如果RAM大小为M,那么它需要的地址位宽度为N=log2 M。假设双口RAM大小是8 B,所需寻址地址位宽度是3 b。如果读/写指针均用3位来表示的话,那么当读/写指针相等时,无法判别是读时针追上了写时针造成读空还是写时针追上了读时针造成写满,这样就无法正确判断空、满标志。为了方便的区分空、满,读/写指针各增加1位,取地址指针宽度为log2M+1,寻址中没有使用的最高位地址标记为MSB,即读/写指针为N+1位,寻址范围为2n。表1为格雷码表示的4位地址指针。
仔细观察表1并分析数据,一种新颖的判断空满标志的方法为:当读/写指针的最高位(MSB)不相等且读/写指针的次高位不相等,剩余的N-2位地址相等时,此时写指针追上了读指针,即写指针比读指针多转一圈,状态模块输出满标志;当读/写指针N+1位都相等时,状态模块输出空标志。判断满标志部分的VHDL代码:
3.4 异步FIFO总体设计
通过时针比较产生的异步FIFO框图如图5所示。WCLK和RCLK分别为读时钟和写时钟,wrst_n和rrst_n分别为读/写模块的复位信号。 rdata为数据输出端口,wdata为数据输入端口。异步FIFO通过读/写指针来寻址一个双口RAM来实现对数据的读/写,双口RAM的大小为2nB。读指针被二级同步链到写时钟域,然后与写时针比较产生满标志,读指针产生读地址raddress;写时针被二级同步链同步到读时钟域,然后与读时钟比较产生空标志,写指针产生写地址waddress。需要注意的是此异步FIFO设计中,空满标志是保守的空满标志,比如满标志,当读时针通过二级同步链同步到写时钟域且满足满标志的条件时,写指针停止加1操作,而同步读指针的过程中,读时针则移动到了其他的地址,同样的适合于空标志,当输出空,满时,其实FIFO的真实状态是还有空间没被写满或者读空,这就是保守的空和满,而这正保证了FIFO不会向上会向下溢出,进一步提高了FIFO工作的可靠性。
表2为平均无故障工作时间的对比,C1和C2依赖于器件工艺。
4 结语一个高的平均无故障工作时间表明一个设计是优秀的,提高亚稳态的平均无故障工作时间减少信号传输中导致亚稳态问题的风险。本文通过研究FIFO的基本结构以及FPGA亚稳态的产生机理,提出了利用二级同步链和格雷码计数器指针解决了同步以及空满状态判断的难题,给出了VHDL软件代码,且该设计已经通过QuartusⅡ的时序仿真验证,作为独立模块可以应用到需要异步时钟域传输数据的电路中,大大提高异步数据传输效率及平均无故障工作时间。
- 3D IC设计打了死结?电源完整性分析僵局怎么破(09-21)
- 快速调试嵌入式MCU设计仿真的三大因素浅析(12-12)
- 访问电源参考设计库的众多理由(12-09)
- 开关电源设计中如何选用三极管和MOS管(12-09)
- 一款常见的车载逆变器设计电路图(12-09)
- 电子工程师必备:电源设计及电源测评指南(12-09)