FPGA 常用的片上缓存方式
FIFO
1. FIFO的基本概念
FIFO(First In First Out,先进先出队列)是一种关键的数据缓冲结构,主要用于解决数据速率匹配、跨时钟域同步和流量控制等问题。FIFO 按写入顺序存储数据,并按相同顺序读取数据,确保“先进先出”。其核心组件包括存储数据的物理单元(如 Block RAM、分布式 RAM 或寄存器)、指向下一个可写入位置的写指针、指向下一个可读取位置的读指针以及空(empty)、满(full)、几乎空(almost empty)、几乎满(almost full)等状态标志。
2. FIFO的类型
根据时钟域的差异,FIFO 分为同步 FIFO 和异步 FIFO 两类。同步 FIFO 的读写操作使用同一个时钟,适用于同一时钟域内的数据缓冲,如数据生产者和消费者速率不一致时的速率匹配,其设计简单,无需处理跨时钟域问题。异步 FIFO 的读写操作使用两个独立时钟(写时钟 wr_clk 和读时钟 rd_clk),适用于跨时钟域数据传输,如从 100MHz 到 50MHz 的时钟域,其关键挑战是解决跨时钟域的亚稳态问题,通常使用格雷码(Gray Code)传输指针,配合双触发器同步来解决。
3. FIFO的实现方式
在 FPGA 中,FIFO 的实现依赖 Block RAM、分布式 RAM 和寄存器(Register-based)等资源。Block RAM 适合大容量 FIFO(例如深度为 512 或更大),功耗低,但初始化延迟较高;分布式 RAM 适合小容量 FIFO(例如深度为 64 或更小),利用 LUT 资源,访问速度快;寄存器(Register-based)适用于极小的 FIFO(例如深度 ≤ 16),通过触发器实现,速度快但资源消耗高。
4. FIFO的重要参数
FIFO 的重要参数包括数据宽度(Width)、深度(Depth)、将满标志和将空标志。数据宽度是每个存储单元的数据位数,如 8 位、16 位等;深度是 FIFO 可存储的数据量,如 16、64、1024 等;将满标志用于设置一个将满阈值,指针计数达到该标志置 1,表示即将写满,防止 FIFO 工作频率过高时写满时来不及停止导致 overflow 上溢出;将空标志用于设置一个将空阈值,指针计数达到该标志置 1,表示即将读空,防止 FIFO 工作频率过高时读空时来不及停止导致 underflow 下溢出。
5. FIFO的常见应用
FIFO 在 FPGA 设计中有多种常见应用。在跨时钟域同步方面,异步 FIFO 用于在不同时钟域之间安全传输数据,避免亚稳态,例如从高速 ADC 采集数据后,传输到低速处理模块。在数据缓冲方面,FIFO 用于解决生产者和消费者速率不匹配的问题,例如 UART 接收端缓存数据,等待 CPU 读取。在流量控制方面,通过“几乎满”或“几乎空”信

最低0.47元/天 解锁文章
256

被折叠的 条评论
为什么被折叠?



