混合位宽FIFO的数据拼接功能,其本质是实现一个"数据宽度转换器"。 它允许数据以较窄的位宽顺序写入,再以较宽的位宽顺序读出(或反之),核心原理是在FIFO内部自动将多个连续的窄数据打包成一个宽数据,或将一个宽数据解包成多个连续的窄数据,同时严格保持数据的先后顺序。
工作原理详解(以"窄写宽读"为例)
这是最常见的使用场景,例如将8位宽的ADC采样数据存入FIFO,然后由32位宽的处理器总线一次性读取处理。
- 写入侧(窄数据流入)
● 数据流入:外部电路在写时钟控制下,将窄位宽数据(如8位)依次写入FIFO。
● 内部存储:FIFO的物理存储单元通常是基于宽位宽构建的。例如,一个深度为1024、支持8位写32位读的FIFO,其内部实际的存储单元可能是 256 x 32bit。
● 自动拼接:当第一个8位数据写入时,它被放置在目标32位存储单元的低8位。后续的第二个、第三个、第四个8位数据会依次填充到同一个32位单元的中高字节位。这个过程对用户是透明的,由FIFO的写控制逻辑自动管理。
● 状态更新:仅当凑够一个完整的宽字(本例中是4个8位数据)时,这个32位的"数据包"才被视为一个有效条目,FIFO的可读条目计数器才会增加1。在凑齐之前,这个部分填充的单元对读出侧是不可见的。 - 读出侧(宽数据流出)
● 数据流出:当外部电路执行读操作时,FIFO会一次性输出一个完整的宽位宽数据(32位)。
● 顺序保证:读出的32位数据,其字节顺序严格对应写入时的先后顺序。即 Dout[7:0]是最早写入的数据,Dout[31:24]是最近写入的第四个数据。
● 状态同步:每读出一个32位数据,FIFO的可读条目数减1。 - 关键控制信号与机制
● 空/满标志:这是FIFO正常工作的关键。full标志在物理存储空间耗尽时置起,与位宽无关。empty标志在没有完整的宽字可供读取时置起。这意味着,即使FIFO里有1-3个未凑齐的字节,读出侧看到的依然是"空"。
● 非对称位宽比:读写位宽可以是任意整数比,如 5:8、16:128 等。FIFO控制器会计算最小公倍数,并以此为单位管理内部数据的打包与解包。
● 跨时钟域:大多数此类FIFO是异步FIFO,读写侧使用不同的时钟。其内部通过格雷码同步器来安全地传递"写指针"和"读指针",从而在跨时钟域时也能正确生成空满标志,这是该功能能稳定工作的基石。
应用场景与优势 - 数据总线宽度匹配:连接不同位宽的总线或IP核(如处理器、DMA、外设)。
- 数据吞吐量优化:将低速串行数据流打包成高速宽数据块,提高总线传输效率,减少事务开销。
- 数据缓冲与重组:在协议转换或数据帧重组中非常有用,例如将字节流的网络包组装成完整的数据包再处理。
总结
混合位宽FIFO的数据拼接功能,通过其内部精妙的指针管理、数据打包逻辑和跨时钟域同步机制,在用户无感知的情况下,自动完成了数据宽度的转换和顺序的保持。它就像一个有智能的"数据收纳盒",负责将零散的小物品(窄数据)整齐地打包进标准箱子(宽数据),并按放入顺序将整箱货物送出,极大地简化了系统互联的设计复杂度。