前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

浅谈数字电路设计中的异步FIFO(二) -- 空满标志位的产生

qiguaw 2024-09-27 14:43:10 资源文章 27 ℃ 0 评论

异步FIFO是一种可以实现异步读写操作,先进先出(First In First Out)的电路,通常被使用在数据传输接口的部分,用来存储、缓冲数据,解决在两个异步时钟之间的数据传输问题。

前面的文章我们了解到设计异步FIFO有两个难点:如何同步异步信号,抑制亚稳态的发生;如何正确地设计空、满标志位的控制电路。并且解决了第一个问题,今天我们来聊一聊第二个问题,空、满标志位的设计。

空\满标志位产生原则

FIFO空\满标志位的产生部分是FIFO的核心。这一部分逻辑的高效与否,直接决定了FIFO的性能。

一般情况之下,FIFO空满标志位的产生原则是:写满情况下,不能溢出;读空情况下,不能多读。

进一步解释一下这个原则,即在任何情况下,不能出现FIFO的读、写地址,指向同一个地址,进行操作的情况。

当出现读、写地址之间相差一个(阈值自己可以设置)或者位置相同的情况,并且还在进行写操作时,FIFO的满标志位,应该拉高,表示此时FIFO已满,不能再继续接受数据,外部电路应该停止继续发送数据。此时外部电路应该根据实际情况,对数据进行保持、或丢弃等操作。同理,当空标志位拉高,则表示FIFO已空,外部电路不能再继续读数据。

FIFO的设计方法

下面我们给出集中常用的设计方法,不同的设计方法,有对应的优缺点,我们需要根据自己的实际需要,进行选择。

  • 通过比较读、写地址产生空满标志

通过上面的描述,可以知道,最直接的方式就是通过比较读、写地址,来产生空满标志位。过程分为以下两步:

  1. 计算出当前FIFO读、写地址的差值;
  2. 比较差值和预设值,如果两者相等,则将空 、满标志位置位。

这种方法的优点是,逻辑简单,设计方便。但是因为要计算FIFO读写地址的差值,所以如果减法器的位宽较大,则可能要产生一个很大的组合逻辑,这大概率会降低FIFO的速度。

  • 只对比读写地址是否相等

为了解决上面方法中的问题,我们通常只关心读写地址是否相等,来避免减法器的引入。

当读写地址相等时,对应有空或者满两种状态。所以我们需要增加一个区间来区分当前状态时空或者满。将地址空间划分成不同的部分,以此来说明当前读写地址所处的位置。

这种方法,可以提升FIFO的运行速度,但是与此同时,因为读写地址只有相等或者不相等两种状态,所以可能会影响FIFO空满标志位判断的准确性。

  • 对delay后的地址进行比较

上面两种方法,都有一定的使用风险,下面给出一种设计建议。

之前的方法是直接对比当前FIFO的读写地址,现在我们先将地址进行延时,然后再进行比较。进行这样设计的考虑,主要是对地址进行delay之后,本质上是,留出了一个(或多个)地址的余量(余量的大小和延时的多少相关)。通过组合比较当前地址,经过一级Dealy(或者多级delay)的信号组合,可以产生可靠的空满标志位。

小结

今天我们比较了集中常用的FIFO空满标志位的产生方法,实际上,在不同的应用中,根据对FIFO需求的不同(有的需要可靠性高,有的需要速度快),会有不同的设计方法。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表