两块同步FIFO实现乒乓操作

本文介绍了如何使用两块同步FIFO进行乒乓操作。在fifo1写入数据,fifo2读取(首次可能无数据),当fifo1达到指定深度后,切换写使能到fifo2。这种操作适用于写入速率大于读取速率或单个FIFO容量不足的情况。附带了同步FIFO的测试文件,验证了读写地址的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乒乓操作

同步FIFO实现乒乓

fifo1进行写,fifo2进行读(第一次没有可读,考虑数据流入的第一个周期很短)
fifo控制模块,写完fifo1指定深度后,拉低写使能,转而拉高fifo2的写使能
两块fifo,前提是一个fifo存储不够,或者写速率大于读速率

module fifo_pingpang(
 input rst_n,
 input clk,
 input [7:0]data_in,
 input wr_en,
 output reg fifo1_wr_en,
 output reg fifo2_wr_en,
 output reg fifo1_rd_en,
 output reg fifo2_rd_en,
 output [7:0]data_out
);


wire [8:0] fifo_cnt1;
wire [8:0] fifo_cnt2;

wire [7:0]data_out1;
wire [7:0]data_out2;
assign data_out=fifo1_rd_en?data_out1:data_out2;

parameter idle = 4'b0000,
         start = 4'b0001,
          ping = 4'b0010,
          pang = 4'b0100;
              
reg[3:0]state;
reg[3:0]next_state;
//
always@(posedge clk or negedge rst_n)begin
if(!rst_n) state<= idle;
else state <= next_state;
end
//
always@(posedge clk)begin
 case(state)
  idle:if(wr_en) 
       next_state <= start;
       else next_state <= idle;
  start:if(fifo_cnt1 == 9'd500)
        next_state <= ping;
        else next_state <= start;
  ping:if(fifo_cnt2 == 9'd500)
        next_state <= pang;
	    
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值