目录
一、设计原理
FIFO是一种先进先出的数据缓存器,与普通存储器的区别在于没有外部读写地址线,只能顺序写入和读取数据。同步FIFO(First In First Out,先进先出)指的是读时钟和写时钟为同一个时钟,即读写操作在同一时钟沿发生。
时钟同步:
- 同步FIFO的核心在于读写操作都在同一个时钟信号的控制下进行。这意味着读使能、写使能、数据输入、数据输出以及满/空状态信号等都在时钟的同一沿(如上升沿或下降沿)发生变化。
内部指针:
- 同步FIFO内部通常包含两个指针:读指针(Read Pointer)和写指针(Write Pointer)。读指针指向下一个要读取的数据位置,写指针指向下一个要写入的数据位置。
- 读写指针在时钟的驱动下自动递增,以追踪数据的读写位置。当写指针追上读指针时(考虑到FIFO的循环特性),表示FIFO已满;当读指针追上写指针时,表示FIFO为空。
数据储存:
- FIFO通常使用双口RAM(Random Access Memory)或类似的存储结构来存储数据。双口RAM允许在同一时间内进行读写操作,适合FIFO的应用场景。
空满状态检测:
- 设计同步FIFO时,需要解决的一个重要问题是如何准确检测FIFO的空和满状态。这通常通过比较读写指针的位置来实现。为了避免读写指针在FIFO满或空时重叠导致的混淆,有时会在指针设计中加入额外的位(如格雷码中的MSB位)来区分这种情况。
读写控制:
- 写操作:当写使能有效且FIFO未满时,数据被写入由写指针指示的位置,随后写指针递增。
- 读操作:当读使能有效且FIFO非空时,数据从由读指针指示的位置读出,随后读指针递增。
二、架构框图
简单同步fifo,仅供参考
三、参考代码
top
// -----------------------------------------------------------------------------
// Item:
// ----