FIFO 深度由突发长度决定:写快读慢时,最深瞬间缓存 = 写速率×突发时间 - 读速率×突发时间;双口 RAM 深度要大于这个值并留余量;空满标志用格雷码指针判断。
本文概述
FIFO 是跨时钟和速率匹配常用,面试常考:FIFO 深度怎么算、空满判断、什么时候用 FIFO。回答要现场算深度。
核心要点
FIFO 用于跨时钟域或速率匹配:写快读慢时缓存数据
深度公式:D ≥ (Wrate - Rrate) × Tburst,Tburst 是写突发时间
空满标志:写指针和读指针比较,格雷码编码跨时钟
深度太小会溢出(写满),太浪费 RAM
单时钟 FIFO 用普通 RAM,跨时钟用异步 FIFO

面试官考察点
这是必考题。面试官看你是否会现场算深度。重点听:写满多少、读走多少、差值。
回答思路
现场算:写 1024 个用多少时间,这段时间读走多少,差值就是深度。
参考回答
第一步,写 1024 个数据用多久。
写时钟 100MHz,写 1024 个数据用:
Tw = 1024 / 100MHz = 10.24μs
第二步,这段时间读走多少。
读时钟 50MHz,10.24μs 读:
Nread = 50MHz × 10.24μs = 512 个
第三步,FIFO 深度。
写完时 FIFO 里剩:
D = 1024 - 512 = 512 个
选标准深度 1024(512 不够,留余量)。
| 参数 | 本例 |
|---|---|
| 写时钟 | 100MHz |
| 读时钟 | 50MHz |
| 突发长度 | 1024 |
| 写时间 | 10.24μs |
| 读走 | 512 |
| 需要深度 | ≥512,选 1024 |
通用公式。
D ≥ (Wrate - Rrate) × Tburst,Wrate/Rrate 是单位时间数据量。
空满判断。
满:写指针追上读指针(写指针比读指针多一圈);
空:写指针等于读指针;
跨时钟时指针用格雷码编码,打两拍同步。
注意。
深度要留余量:计算值×1.5~2;
满标志要在写满前一拍置位,否则写超一个;
异步 FIFO 用双口 RAM,读写独立时钟。

扫码关注




























