FPGA入门生
异步FIFO的深度问题,笔试里确实会挖坑。除了你提到的,我遇到和听说的深度考点主要有这些:
一个是深度计算的实际场景题。题目会给读写端的突发数据量、读写时钟频率和带宽,让你算最小深度。这里容易忽略背靠背(back-to-back)突发的最坏情况,直接按平均速率算就错了。关键点是:考虑写最快、读最慢的场景,用公式深度 = 写数据量 - 读数据量(在最坏时间窗口内)。
另一个是深度非2的幂次方的情况。常规格雷码指针适用于深度为2^n,但如果深度是6、10这种,笔试可能会问你怎么处理。这时候指针通常还是按2^n来设计(比如用8存6),但实际有效地址范围是0-5。空满判断逻辑需要调整,比较的是经过转换的有效指针,而不是直接比格雷码。这个细节容易忽略。
还有几乎满/几乎空(almost full/empty)的阈值设置问题。题目可能让你设计一个可配置阈值的FIFO,并问这个阈值设置与深度、同步延迟的关系。比如,almost full的阈值必须留出足够空间,以容纳在满信号传递到写端期间可能继续写入的数据,防止溢出。这涉及到跨时钟域同步带来的延迟。
最后,有些题会问深度过浅导致的性能问题。比如深度只有1或2时,异步FIFO还有没有意义?实际上深度太浅容易频繁满/空,吞吐量低,但设计上仍然需要同步器和格雷码,因为亚稳态风险与深度无关。
建议你重点练练非2幂次深度的指针处理,以及带almost full/empty的可配置设计。笔试往往就考这些变种。
