一种简单的异步fifo

本文探讨了异步FIFO的设计,特别是如何处理双时钟域中的地址同步问题。通过使用格雷码和两级寄存器同步,确保了读写操作的正确性。即使在时钟域不匹配的情况下,也能有效避免数据错误。此外,还分析了读写时钟域中可能出现的错误情况及其对系统的影响。

部分还是跟同步fifo相同的,可以看我的上一篇博客:两种简单的同步fifo(不同的输出时序)

直接上代码:

module fifo#(
    parameter RAM_WIDTH     = 6'd32,
    parameter RAM_DEPTH     = 4'd8,
    parameter ADDR_WIDTH    = 4'd4
)(
    input                            wclk,
    input                            rclk,
    input                            resetn,
    input       [RAM_WIDTH-1:0]      data_in,
    input                            write_en,
    input                            read_en,
    output      [RAM_WIDTH-1:0]      data_out,
    output                           full,
    output                           empty
);
    reg     [RAM_WIDTH-1:0]         ram[RAM_DEPTH-1:0];
    reg     [ADDR_WIDTH-1:0]        write_addr_wclk;
    reg     [ADDR_WIDTH-1:0]        read_addr_rclk;

    wire    [ADDR_WIDTH-1:0]        write_addr_gray_wclk;
    reg     [ADDR_WIDTH-1
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值