FPGA FIFO深度怎么计算?读写速率不同时要多深?FPGA面试

浏览量:3
时间: 2026-09-18 09:05:28
一句话答案

FIFO 深度由突发长度决定:写快读慢时,最深瞬间缓存 = 写速率×突发时间 - 读速率×突发时间;双口 RAM 深度要大于这个值并留余量;空满标志用格雷码指针判断。

本文概述

FIFO 是跨时钟和速率匹配常用,面试常考:FIFO 深度怎么算、空满判断、什么时候用 FIFO。回答要现场算深度。

核心要点

  • FIFO 用于跨时钟域或速率匹配:写快读慢时缓存数据

  • 深度公式:D ≥ (Wrate - Rrate) × Tburst,Tburst 是写突发时间

  • 空满标志:写指针和读指针比较,格雷码编码跨时钟

  • 深度太小会溢出(写满),太浪费 RAM

  • 单时钟 FIFO 用普通 RAM,跨时钟用异步 FIFO

屏幕显示 FIFO 读写时钟波形和空满标志,FPGA 开发板连逻辑分析仪

面试官:写时钟 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


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
PCB设计怎么提升ESD抗扰能力?EMC工程师面试ESD防护布局要点与整改思路

本文概述PCB设计层面的ESD抗扰能力提升是EMC工程师面试的经典题目,核心思路是从源头阻止ESD能量进入内部电路。设计要点包括:接口处放置TVS等防护器件并尽... 详情>>

2026-08-25 10:14:01
STM32的I2C外设怎么配置?嵌入式面试I2C通信时序与常见问题排查

STM32的I2C外设怎么配置?嵌入式面试I2C通信时序与常见问题排查分类:嵌入式单片机经验级别:中级难度:中等题型:外设配置题本文概述I2C是嵌入式开发中最常... 详情>>

2026-08-24 10:02:14
RS-485接口电路怎么设计与防护?硬件工程师面试从总线拓扑讲到浪涌防护

硬件设计中级技术基础题本文概述RS-485是工业现场最常用的差分总线接口,面试中需要讲清总线拓扑(总线型vs星型)、终端电阻的计算和位置、偏置电阻(fail-s... 详情>>

2026-08-30 10:53:17
Linux指的是什么,有什么区别?

Linux是指由Linux本人维护并不断更新的内核 。一个嵌入式Linux系统指的是一个基于Linux内核的,但不包含有关这个内核的任何专业的库或是用户工具的嵌... 详情>>

2024-10-16 16:44:13
试解释建立交叉开发平台的必要性?

嵌入式系统的硬件一般有很大的局限性,或者处理器频率很低,或者存储空间很小,或者没有键盘、鼠标设备,所以一般不可能在这种嵌入式目标硬件平台上直接编 译构建L... 详情>>

2024-03-27 11:36:50
开班信息