凡亿教育-思敏
凡事用心,一起进步打开APP
公司名片FPGA FIFO深度怎么计算?读写速率不同时要多深?FPGA面试
浏览量:312
2026-09-18 09:05:28
一句话答案
FIFO 深度由突发长度决定:写快读慢时,最深瞬间缓存 = 写速率×突发时间 - 读速率×突发时间;双口 RAM 深度要大于这个值并留余量;空满标志用格雷码指针判断。
本文概述
FIFO 是跨时钟和速率匹配常用,面试常考:FIFO 深度怎么算、空满判断、什么时候用 FIFO。回答要现场算深度。
核心要点
FIFO 用于跨时钟域或速率匹配:写快读慢时缓存数据
深度公式:D ≥ (Wrate - Rrate) × Tburst,Tburst 是写突发时间
空满标志:写指针和读指针比较,格雷码编码跨时钟
深度太小会溢出(写满),太浪费 RAM
单时钟 FIFO 用普通 RAM,跨时钟用异步 FIFO

面试官:写时钟 100MHz 数据 8bit,读时钟 50MHz,写突发 1024 个数据,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,读写独立时钟。
面试官可能追问
追问 1:为什么深度不是写速率×时间?
因为读也在走,FIFO 里剩的是差值。写满瞬间不是 1024,是 1024-读走的。
追问 2:读写同频还要 FIFO 吗?
同频不用 FIFO,直接接。FIFO 是为了跨时钟或速率不匹配。
追问 3:FIFO 空了会怎样?
读空时读数据是旧值或不定。设计要让读在不空时读,用 empty 标志控制。
追问 4:为什么用格雷码?
指针跨时钟打两拍时,格雷码每次只变一位,不会拼出错位二进制。
追问 5:单时钟 FIFO 怎么设计?
单时钟读写同步,普通双口 RAM+读写指针,不需要格雷码。
常见失分表达
✗ 深度随便选 16 — 不算法,写快读慢会溢出丢数据。
✗ 深度 = 突发长度 — 没算读走多少,浪费 RAM。
✗ 跨时钟 FIFO 用二进制指针 — 跨时钟打两拍会拼出错位,用格雷码。
准备动作
1
现场算一次 FIFO 深度
2
写一个异步 FIFO(格雷码指针)
3
准备一个 FIFO 溢出丢数据的案例
4
了解 Xilinx FIFO IP 核配置
核心关键词
FIFO深度异步FIFO空满标志格雷码速率匹配双口RAM
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。
侵权投诉












