本文大部分内容来自 Clifford E. Cummings 的《Simulation and Synthesis Techniques for
Asynchronous FIFO Design》,同时加上一些自己的一些理解,有兴趣的朋友可以阅读原文。
一、FIFO 简介
FIFO 是英文 First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别
是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,
其数据地址由内部读写指针自动加 1 完成,不能像普通存储器那样可以由地址线决定读取或写入某个
指定的地址。
用途 1:
异步 FIFO 读写分别采用相互异步的不同时钟。在现代集成电路芯片中,随着设计规模的不断扩
大,一个系统中往往含有数个时钟,多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电
路。异步 FIFO 是这个问题的一种简便、快捷的解决方案,使用异步 FIFO 可以在两个不同时钟系统
之间快速而方便地传输实时数据。
用途 2:
对于不同宽度的数据接口也可以用 FIFO,例如单片机位 8 位数据输出,而 DSP 可能是 16 位数
据输入,在单片机与 DSP 连接时就可以使用 FIFO 来达到数据匹配的目的。
二、分类
同步 FIFO 是指读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写操作;
异步 FIFO 是指读写时钟不一致,读写时钟是互相独立的。
三、FIFO 的常见参数
� FIFO 的宽度:即 FIFO 一次读写操作的数据位;
� FIFO 的深度:指的是 FIFO 可以存储多少个 N 位的数据(如果宽度为 N)。
� 满标志:FIFO 已满或将要满时由 FIFO 的状态电路送出的一个信号,以阻止 FIFO 的写操作
继续向 FIFO 中写数据而造成溢出(overflow)。
� 空标志:FIFO 已空或将要空时由 FIFO 的状态电路送出的一个信号,以阻止 FIFO 的读操作
继续从 FIFO 中读出数据而造成无效数据的读出(underflow)。
� 读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。
� 写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。
===============================分 隔 符
==============================
1. 读写指针的工作原理
读指针:总是指向下一个将要被写入的单元,复位时,指向第 1 个单元(编号为 0)。