同步FIFO的设计和验证

您所在的位置:网站首页 fifo模块 同步FIFO的设计和验证

同步FIFO的设计和验证

2023-09-21 18:35| 来源: 网络整理| 查看: 265

1.FIFO是什么?

fifo是一种先进先出的数据缓存器,与普通存储器的区别是没有外部读写地址线,只能顺序读写,不能随机读写。

2.使用场景

(1)数据缓冲:当突然一股数据流突发写入,fifo可以暂时将数据暂存,起到缓冲作用,且使后续处理流程平滑。

(2)时钟域的隔离:主要用于异步FIFO。对于不同时钟域的数据传输,可以通过fifo进行隔离,避免跨时钟域的数据带来的设计和约束上的复杂程度。

(3)用于不同宽度的数据接口。

3.fifo的分类

同步fifo:读时钟与写时钟是同一个时钟

异步fifo:读时钟与写时钟不是同一个时钟

4.fifo的常见参数

fifo的宽度:一次操作读写的数据位;

fifo的深度:可以存储数据位的数量;

满标志:fifo的深度即将满或已经满了有fifo向电路释放的信号,用来阻止继续向fifo写入数据避免数据溢出;

空标志:fifo已空或者将要空由fifo向电路释放的信号,用来阻止继续向fifo读数据避免无效数据的读出;

读时钟:顾名思义,在每个时钟沿临时读数据。

写时钟:顾名思义,在每个时钟沿临时写数据。

5.同步fifo例子

图1.同步fifo的架构

 5.1fifo的空与满

在设计时,不管是同步fifo还是异步fifo最难分析的部分是如何判断fifo的空状态与满状态。

判断fifo空满的方法一:

满操作:在执行写的操作时,两个指针在下个时钟保持相等,则fifo 判断为满,发出fifo_full信号。原理图如下

图2.fifo满条件

 

图3.代码片段

空操作:在执行读的操作时,两个指针在下个时钟保持相等,则fifo 判断为空,发出fifo_empty信号。

判断fifo空满的方法二:

用计数器持续指示fifo中空或满的个数。引入一计数器,任何读的操作将其递增1,任何写的操作将其递减1。若计数器的值为0,则fifo为空状态;若计数器的值等于fifo的深度值,则为满状态。

`timescale 1ns/ 1ps module sync_fifo(); input clk; input rstn; input[7:0] data_in; input write; input read; output[7:0] data_out; output full; output empty; reg [4:0] wp; //写指针 reg [4:0] rp; //读指针 reg [7:0] data_out_reg; //不懂 reg [7:0] RAM [15:0]; //定义存储器 //******************写指令操作******************** always @ (negedge rstn or posedge clk ) begin if (! rstn) begin wp


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3