问答引路 | FIFO这个不起眼的模块,为什么会被称为FPGA跨平台设计中最重要的一步?

同步 FIFO 与异步 FIFO 的核心对比

总结

同步 FIFO 因时钟统一,设计简单且状态判断可靠,适合同一时钟域内的短途数据缓冲;异步 FIFO 通过复杂的指针同步机制解决跨时钟域问题,适用于不同速率模块间的长途数据传输,是跨时钟域通信的核心组件。两者均需根据实际数据量需求设计合适的深度,避免溢出或资源浪费。

█ FPGA中FIFO的两种模式

intel(altera)fpga的开发工具:quartus中的fifo

normal模式(读请求模式): “rdreq”作为读取请求信号,高有效时,data端输出第一个数据; ahead模式(读应答模式): “rdreq”作为已读取确认信号,在rdreq无效时,data端输出第一个数据;高有效时,data端输出第二个数据。

AMD(xilinx)fpga的开发工具:vivado中的fifo

standard fifo就是intel fpga中的normal fifo。

first word fall through就是intel fpga中的ahead。

Normal Mode Waveform

上升沿采样到rdreq或者rden为高后,立刻输出fifo中的数据。

Show-Ahead Mode Waveform

fifo中有数据时,直接输出第一个数据。上升沿采样到rdreq或者rden为高后,立刻输出fifo中的第二个数据。

█ FIFO的实现原理

FIFO的功能说起来很简单:写入时写指针递增,读取时读指针递增,两个指针共同控制空、满状态以及读写操作。

它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。

█ 手写FIFO为何难以实用

资源浪费问题

FPGA内部有两种资源可用于实现FIFO这类存储模块:

自己编写的FIFO很难稳定综合为BRAM。小容量FIFO尚可接受(Distributed RAM占用<10%),但稍大一点的FIFO就可能消耗掉FPGA一半的LUT资源。

性能差距

除了资源消耗,手写FIFO在时序收敛方面也往往不如厂商优化过的IP核。

█ 跨平台设计的痛点

平台依赖的困境

如此简单常用的模块,在跨平台设计时却让无数工程师崩溃:每个平台都必须使用对应的IP核!每换一个平台,就需要:重新配置所有FIFO参数、重新例化、重新连接信号!

仿真时的额外负担

在ModelSim仿真时,要么提前添加各家厂商的仿真库,要么在仿真时替换FIFO为可仿真模型。

而对于喜欢使用iverilog的“小众玩家”(比如我),连仿真库都没有,每次仿真都不得不将FIFO替换为自己编写的仿真模型。

FIFO 是数字系统的 “数据中转站 + 减震器”,做芯片、FPGA、高速电路必须精通,异步 FIFO更是就职面试、项目工程中的高频考点。返回搜狐,查看更多

拼多多增速放缓背后,商业模式陷入多重困境
【版师干货】零基础怎么学服装制版?
Copyright © 2022 全球游戏最新活动中心 All Rights Reserved.