基于VHDL的异步FIFO设计

基于VHDL的异步FIFO设计,第1张

 

  先进先出缓存电路读/写(FIFO)在大规模逻辑设计中被广泛应用,几乎每个芯片都要涉及,同样在空空导d的数据传输体系中也得以大量应用。FIFO类型可以分为两种,第一种为同步FIFO,即读/写时钟是同步的,这里的同步不仅仅是指读/写时钟为同一个时钟,即属于同一个时终域。当读/写时钟频率为倍数关系,即相位关系确定时,也归属同步FIFO的范畴。另一种为异步FIFO,读/写时钟频率不成倍数关系或相位关系不确定,即跨时钟域。异步FIFO可以在不同的时钟域之间快速方便地传输实时数据,因此在遥测数据传输中,异步FIFO实用性更好。然而如何正确地产生空满标志以及如果解决亚稳态问题是异步FIFO设计的难点。

  1 FIFO结构

  首先,典型的FIFO结构框图如图1所示。FIFO的数据存储在具有独立写端口和读端口的RAM中。读指针r0_pointer指向下一个将要读取的位置,写指针wrpointer指向下一个将要写入的位置,每1次写 *** 作后写指针加1,读 *** 作使读指针加1。状态产生模块中,full和empty表示FIFO读/写的临界状态。FIFO设计的关键是产生读/写地址和空满标志。空满标志是基于引起指针相等的 *** 作。如果是复位或者读 *** 作引起

  读/写指针相等,FIFO认为是空;如果原因是写 *** 作,那么FIFO认为是满。异步FIFO设计的难点是如何同步跨时钟域的指针以及空满标志的产生。

  

基于VHDL的异步FIFO设计,第2张

 

  2 亚稳态

  亚稳态是当信号在无关的电路中或异步时钟域之间传输时导致FPGA系统失效的一种现象。包括FPGA在内的所有数字器件的寄存器都定义了信号时序要求,以保证每一个寄存器都能够从输入端获取数据和在输出端产生数据。为了确保可靠的 *** 作,输入信号必须在时钟沿之前稳定一段时间(寄存器建立时间tsu),并且在时钟沿之后稳定一段时间(寄存器保持时间th),然后寄存器输出经过一个特定的时钟到输出延时后有效。满足此要求寄存器才可以正确的在输入端获取数据在输出端产生数据,否则输出有可能是亚稳态。在亚稳态时,寄存器的输出电压在高低电平之间摇摆,即输出将有可能是逻辑0(0 V)或者逻辑1(+5 V),或者是介于0~5 V中间的某个值。亚稳态产生机制图如图2所示,当建立时间或者保持时间不满足时序要求时便会产生亚稳态。

  

基于VHDL的异步FIFO设计,第3张

 

  在同步系统中,输入信号必须总是满足寄存器时序要求,所以亚稳态不会发生。亚稳态问题通常发生在当一个信号在无关的线路中或异步时钟域中传输。一个寄存器进入亚稳态和从亚稳态进入稳态的时间依赖于制造商的制造工艺和使用环境。大部分情况下,寄存器会很快的进入一个定义的稳态中。在异步FIFO设计中就要避免亚稳态的产生。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2467534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存