同步 FIFO

/*---------深度16,位宽8bit同步fifo-----------*/
module Syn_fifo (
    input       clk,
    input       rst_n,
    input       wr_en,
    input       rd_en,
    input [7:0] din,    //fifo 位宽

    output reg [7:0] dout,
    output      full,empty

);

reg [3:0] wr_ptr;
reg [3:0] rd_ptr;
reg [3:0] cnt;

reg [7:0] mem[0:15];

assign full = (cnt == 4'd15);
assign empty = (cnt == 4'd0);
/*---------cnt;else 中含同时读写--------*/
always@(posedge clk or negedge rst_n)
    if (!rst_n)
        cnt <= 4'd0;
    else if (!full && wr_en) 
        cnt <= cnt + 4'd1;
    else if (!empty && rd_en)
        cnt <= cnt - 4'd1;
    else 
        cnt <= cnt;
/*-------------读数据----------------*/
always@(posedge clk or negedge rst_n)
    if (!rst_n)
        dout <= 8'd0;
    else if (rd_en && !empty)
        dout <= mem[rd_ptr]

/*-------------写数据--------------*/
always@(posedge clk)
    if (wr_en && !full)
        mem[wr_ptr] <=din;

/*-----------更新读写指针-------------*/
always@(posedge clk or negedge rst_n)
    if (!rst_n)
        wr_ptr <= 4'b0;
    else if(!full && wr_en)
        wr_ptr <=wr_ptr + 4'd1;
    else 
        wr_ptr <=wr_ptr;
      
always@(posedge clk or negedge rst_n)
    if (!rst_n)
        rd_ptr <= 4'd0;
    else if(!empty && rd_en)
        rd_ptr <=rd_ptr - 4'd1;
    else 
        rd_ptr <=rd_ptr;

endmodule
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值