Verilog实现FIFO专题(2-FIFO深度计算)

跨时钟域进行数据传输时,可以使用FIFO来避免数据丢失。使用FIFO的场合主要在:读数据的速率小于写数据的速率的突发传输场合,我们不得不将那些来不及读走的数据缓存下来;(思考:读取速度快于写入速度时,还需要FIFO吗?)

我们需要开多大的空间去缓存这些数据是一个值得思考的问题:缓存开大了会浪费FPGA存储资源,缓存开小了会丢失数据,因此如何去计算最小FIFO深度(保证数据不丢失的最小FIFO深度)值得我们讨论。

一、数据突发长度(burst length)

如前所述,FIFO用于缓存较慢模块来不及读取的数据,但是应注意:FIFO仅在数据突发时才有效; 即FIFO并不适用于连续的数据输入和输出的场合, 因为连续的数据流意味着来不及读的数据不断累积,导致所需FIFO的大小无穷大。 因此只有在突发数据传输过程中讨论FIFO深度才是有意义的,有必要先介绍数据突发长度的概念:

数据突发长度:也就是说我们一次传递一包数据完成后再去传递下一包数据,我们把一段时间内传递的数据个数称为数据突发长度(burst length)

二、异步FIFO最小深度计算原理

FIFO的深度的确定,应从FIFO用于缓冲在数据突发场合来不及取走的数据这一本质入手:计算出在突发读写这段时间内有多少个数据没有被读走,就知道了FIFO的最小深度(FIFO的最小深度就等于没有被读走的数据个数


公式:

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Verilog实现FIFO的示例代码: module fifo ( input clk, input reset, input write_enable, input read_enable, input [7:0] data_in, output reg [7:0] data_out, output reg empty, output reg full ); parameter DEPTH = 8; // FIFO深度 reg [7:0] memory [0:DEPTH-1]; // 存储FIFO数据的内存 reg [2:0] write_pointer = 0; // 写指针 reg [2:0] read_pointer = 0; // 读指针 always @(posedge clk) begin if (reset) begin // 复位FIFO write_pointer <= 0; read_pointer <= 0; empty <= 1; full <= 0; data_out <= 0; end else begin if (write_enable) begin // 如果写使能被置位 memory[write_pointer] <= data_in; // 将数据写入内存 write_pointer <= write_pointer + 1; // 写指针指向下一个位置 if (write_pointer == read_pointer) begin // 如果写指针追上了读指针 full <= 1; // FIFO已满 end else begin empty <= 0; // FIFO不为空 end end if (read_enable) begin // 如果读使能被置位 if (read_pointer == write_pointer) begin // 如果读指针追上了写指针 empty <= 1; // FIFO已空 end else begin data_out <= memory[read_pointer]; // 从内存读出数据 read_pointer <= read_pointer + 1; // 读指针指向下一个位置 full <= 0; // FIFO不满 end end end end endmodule 这是一个简单的FIFO实现深度为8,使用单字节数据数据的读写由write_enable和read_enable信号控制。如果FIFO已满,写操作将被忽略,如果FIFO已空,读操作将被忽略。在读/写操作时,相应的指针将指向下一个位置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值