跳到正文
数字电子技术

存储器与 FIFO:地址、冲突与一致性

14 分钟

寄存器、RAM、ROM和FIFO的接口看似都是读写数据,实际同步读延迟、写优先、双口冲突和初始化行为因器件与综合目标而异。可移植RTL必须明确而非依赖仿真默认。

同步与异步读

FPGA块RAM通常同步读,地址打一拍后数据出现;写成异步读可能综合成分布式逻辑。微架构应把延迟纳入握手,不能仿真中一拍即取后期待硬件相同。

同地址读写

read-first、write-first或no-change决定冲突拍输出旧值、新值或保持。不同器件模式不同,若算法依赖具体行为,应显式实现或约束。

FIFO计数

空满可由读写指针与额外翻转位判断。允许同时读写时计数保持;在空读或满写时必须定义是拒绝、报错还是覆盖,默认沉默会丢数据。

水位与背压

almost-full提前考虑流水线中已在路上的写请求,almost-empty服务突发读。阈值由路径延迟和最大在途量推导。

数据完整性

片上存储也可能受软错误,关键数据可用奇偶或ECC。ECC能纠一位不代表地址、控制和多位故障全被覆盖。

初始化文件和字节序也需固定并测试。

练习:设计深度非2次幂的同步FIFO,写空满、同时读写和越界断言。

小纸条

为什么 FIFO 的 almost-full 阈值要考虑流水线中的在途数据?