异步FIFO——结构、Verilog代码实现与仿真

1. FIFO简介

  FIFO(First In First Out)是一种先进先出的数据缓冲器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常方便。但缺点是只能顺序写入数据、顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通地址线那样自动寻址。

用 途 1 : \color{gold}{用途1:} 1

  异步时钟之间的接口电路(在现代集成电路芯片中,随着设计规模的不断扩大,系统中往往含有数个时钟)。异步FIFO用作两个不同时钟域之间的数据缓冲,当写速率高于读速率时,需要使用FIFO来缓存来不及读的数据,确保数据不会丢失。

  所以FIFO的工作模式,应该是数据突发写入形式,Bursts。如果连续写入的话,FIFO的深度需要无限大才不会被写满。

用 途 2 : \color{gold}{用途2:} 2

  用于不同宽度的数据接口。例如单片机为8位数据输出,DSP为16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。

 

2. FIFO分类

  同步FIFO:读时钟和写时钟为同一时钟,在时钟沿来临时同时发生读写操作;

  异步FIFO:读写时钟不一致,读写时钟是相互独立的。

 

3. FIFO的常见参数

  • *** FIFO的宽度*** ** :** 即FIFO一次读写操作的数据位。
  • FIFO的深度 ** :** 指的是FIFO可以存储多少个N位的数据(宽度为N)。
  • 满标志 ** :** FIFO已满或将满时由FIFO的状态电路送出的一个信号,以阻止写操作继续向FIFO写数据造成溢出(overflow)。
  • 空标志 ** :** FIFO已空或将空时由FIFO的状态电路送出的一个信号,以阻止读操作继续从FIFO中读数据造成(underflow)。
  • 读时钟 读操作所遵循的时钟,在每个时钟沿来临时读数据。
  • 写时钟 写操作所遵循的时钟,在每个时钟沿来临时写数据。

 

4. 异步FIFO电路结构

系统的总体框架图如下:

异步FIFO——结构、Verilog代码实现与仿真_第1张图片

a. 双端口RAM

b. 读地址模块

c. 写地址模块

d. 跨时钟模块,产生空/满信号

FIFO设计的关键是产生可靠的读写指针和生成FIFO“空”/“满”状态标志。

 

Ⅰ. “空”状态标志

  当读写指针相等时,表明FIFO为空。(这种情况发生在复位操作,以及当读指针读出FIFO最后一个字时,读指针追上写指针),如下图所示:

异步FIFO——结构、Verilog代码实现与仿真_第2张图片

 

Ⅱ. “满”状态标志

  当读写指针再次相等时,表明FIFO为满。(这种情况发生在写指针多转一圈,再次追上读指针)

异步FIFO——结构、Verilog代码实现与仿真_第3张图片

 

区 分 空 满 状 态 的 方 法 \color{orange}{区分空满状态的方法}

  在指针中增加一个最高位(extra),当指针从FFFF -> 0000跳变时,最高位加1。因此对于深度为 2 n 2^n 2n的FIFO需要读/写指针 ( n + 1 ) (n+1)

你可能感兴趣的:(IC_basic,verilog)