嵌入式玩家
从面试官角度聊聊吧。我们考异步FIFO的高阶问题,主要是看候选人有没有真正在项目中踩过坑。你提到的几个点都很关键,我补充一个常考的:FIFO深度非2的幂次时怎么办?
标准格雷码只适用于2的幂次深度,如果深度是10、12这种,指针用格雷码会浪费状态。这时候要么用扩展的格雷码(比如用更多位,但只取有效状态),要么用其他编码(比如独热码加同步器),但后者面积大。笔试可能会让你分析利弊。
还有“空满判断的保守性”问题。因为指针同步有延迟,判断空满时会留有余量(比如快空时提前报空),这会导致FIFO容量不能100%利用。可以算一下最坏情况下会浪费几个entry。
准备方法:别光看代码,多画时序图。假设读写时钟频率比是3:2,突发长度100,手算最小深度。再模拟指针同步延迟,看看空满标志怎么变。网上有Clifford Cummings的经典论文,把附录里的例子都过一遍,基本够用了。
