归档文章从读写指针解释异步FIFO,也建议实际工程优先使用厂商FIFO。我的阅读顺序是先区分两条路径:数据怎样进入双口存储,状态信息怎样跨时钟域用于判空判满。它们不是把所有数据位逐个打拍的同一条链。
每一端使用自己的时钟和标志
写端按写时钟接受允许的写操作,读端按读时钟完成允许的读操作。full供写端控制写入,empty供读端控制读取;跨域同步有延迟,标志不能当成另一域瞬时占用量的无延迟镜像。
图是阅读结构检查表,不是完整RAM和Gray指针接线图。双口存储负责数据,跨域同步的指针状态负责本域空满判断。
地址相同还要区分是否绕回
对常见二次幂深度结构,指针包含地址与额外绕回信息。原文用额外位说明相同地址可能代表空,也可能代表写端多绕一圈。具体比较条件必须与所选编码、当前或下一指针的判定时机一起核对,不能只凭最高位不同就套用所有实现。
Gray码不是免检查通行证
常见实现把本域注册后的Gray指针同步到另一域。相邻编码只改变一位,有助于控制转换时的信息不一致风险,但仍需要同步链、正确的推进规则及物理约束。源指针连续前进后,目的端可能跨过多个编码,不能要求目的端每次观察都只变一位。
AMD UG903:Bus Skew 将异步FIFO的Gray总线列为适用场景。本文据此把跨域路径偏斜纳入检查,不直接把“Gray码不会出问题”作为结论;约束值要结合实际时钟、结构和工具版本确定。
使用厂商宏也要读清复位与输出模式
XPM_FIFO_ASYNC 对复位时钟域、reset busy期间的读写使能及读模式有明确约定。标准读模式与first-word-fall-through的输出消费方式不同,读使能、数据有效和下游接收边界应逐项对应。
本轮没有构建FIFO或测试容量。后续最小验证应覆盖空读、满写、绕回、不同读写速率、复位中断和随机停顿;用已接受写入序列检查读出顺序,另以CDC与时序报告复核实现。FIFO只能缓冲有限突发,长期写入速率大于读出速率时仍需回压或明确丢弃策略。
阅读来源
原始阅读材料:基于FPGA的异步FIFO设计(附源码) - 腾讯云开发者社区-腾讯云。
本文为原创阅读整理;引用的宏文档有明确器件族与版本,实际实现须核对目标平台。整理日期不是原文发表日期。配图为原创概念示意,未复用原文截图。