异步FIFO设计及测试

       FIFO: First in, First out。代表先进的数据先出 ,后进的数据后出。FIFO按读数据和写数据工作的时钟域是否相同分为同步FIFO和异步FIFO。由于同步FIFO设计较于简单,故本文仅讨论异步FIFO的设计。

一、异步FIFO结构简述

       由图可见,异步FIFO的核心部件就是一个 双端口 RAM ;左右两边的长条矩形是地址控制器,负责控制地址自增、将二进制地址转为格雷码以及产生空满信号;SYN模块为同步器,由两个D触发器构成,负责将写地址同步至读时钟域、将读地址同步至写时钟域。

二、双端口RAM设计

module RAM #(
    parameter DEPTH=256,   //RAM存储深度
    parameter WIDTH_A=8,   //RAM地址总线宽度
    parameter WIDTH_D=16  //RAM数据总线宽度
)
(
    input r_clk,
    input w_clk,
    input rst_n,

    input [WIDTH_A-1:0] w_addr,              //写地址
    input [WIDTH_D-1:0] w_data,              //写数据
    input w_en,                              //写使能

    input [WIDTH_A-1:0] r_addr,              //读地址
    output reg [WIDTH_D-1:0] r_data,         //读数据
    input r_en                               //读使能
);
    reg [WIDTH_D-1:0] mem [DEPTH-1:0];       //16x256存储器


//RAM写数据
    always @ (posedge w_clk or negedge rst_n)begin
        if (!rst_n)
            mem<='{default:0};
        else if (w_en)
            mem[w_addr]<=w_data;
    end


//RAM读数据
    always @ (posedge r_clk or negedge rst_n)begin
        if (!rst_n)
            r_data<=0;
        else if (r_en)
            r_data<=mem[r_addr];
    end

endmodule

三、二进制转格雷码设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值