fifo主要例化参数和标志位

21 篇文章 31 订阅
17 篇文章 16 订阅

一、例化参数
H:fifo深度
TA:fifo上水位线
TB:fifo下水位线
深度H设置过大,浪费资源;H设置过小,无法保证功能性。
TA保证fifo的功能性,TB保证fifo的流水性能。

二、常见的标志位
2.1 arempty
arempty:将空,almost empty flag
假设fifo内存的数据个数为cnt,则cnt=wr_pointer-rd_pointer。当cnt<=TB时,arempty下一拍拉高。
2.2 rempty
rempty:读空
当rempty<=(wr_pointer=rd_pointer)或 ((wr_pointer_next=rd_pointer)&rd_en)。即读指针追上写指针或者读指针差一个数追上写指针但下一拍即将写入时,读空信号下一拍拉高。
2.3 underflow
underflow:下溢出,read when empty
underflow <= (rd_en & repmty);
fifo里面已经没有数据但读使能时,下溢出信号下一拍拉高。
2.4 awfull
awfull:将满,数据超过上水位线。
假设fifo内存的数据个数为cnt,则cnt=wr_pointer-rd_pointer。当cnt>=TA时,awfull下一拍拉高。
2.5 wfull
wfull:写满
假设fifo内存的数据个数为cnt,则cnt=wr_pointer-rd_pointer。当cnt>=H | ((cnt==H-1)& wr_en)时,awfull下一拍拉高。即fifo内存的数据个数大于等于fifo深度或数据个数等于深度减1且写一拍继续写入时,写满信号下一拍拉高。
2.6 overflow
overflow:上溢出,write when full
overflow <= (wr_en & wfull);
fifo已经写满但写使能时,上溢出信号下一拍拉高。

三、指针的处理
3.1 异步fifo 指针跨时钟域cdc需要经过打拍处理。
3.2 指针二进制码转格雷码,避免亚稳态。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同步 FIFO例化 RAM 都可以用于实现数据存储和数据交换,但它们的实现方式不同。以下是一个使用例化 RAM 实现同步 FIFO 的 Verilog 代码示例: ```verilog module sync_fifo( input clk, input rst, input wr_en, input rd_en, input [7:0] data_in, output [7:0] data_out, output full, output empty ); parameter WIDTH = 8; parameter DEPTH = 16; reg [WIDTH-1:0] ram [0:DEPTH-1]; reg [4:0] wr_ptr = 0; reg [4:0] rd_ptr = 0; reg [4:0] count = 0; assign full = (count == DEPTH); assign empty = (count == 0); always @(posedge clk) begin if (rst) begin wr_ptr <= 0; rd_ptr <= 0; count <= 0; end else begin if (wr_en && !full) begin ram[wr_ptr] <= data_in; wr_ptr <= wr_ptr + 1; count <= count + 1; end if (rd_en && !empty) begin data_out <= ram[rd_ptr]; rd_ptr <= rd_ptr + 1; count <= count - 1; end end end endmodule ``` 此代码定义了一个名为 `sync_fifo` 的模块,该模块包含一个时钟输入 `clk`,一个异步复位输入 `rst`,两个写使能输入 `wr_en` 和 `rd_en`,一个 8 位数据输入 `data_in`,一个 8 位数据输出 `data_out`,以及两个状态输出 `full` 和 `empty`。在模块中,使用一个参数 `WIDTH` 和一个参数 `DEPTH` 分别指定数据宽度和 FIFO 深度,并使用一个例化 RAM 实现 FIFO 存储器。 在时钟上升沿时,使用 `always` 块根据写使能和读使能的状态对 FIFO 进行操作。当写使能为高电平且 FIFO 不满时,将输入数据存储到 RAM 中,并更新写指针和计数器。当读使能为高电平且 FIFO 不为空时,从 RAM 中读取数据,并更新读指针和计数器。 需要注意的是,使用例化 RAM 实现同步 FIFO 可以提供更高的性能和更低的功耗,但也需要进行合理的资源规划和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值