异步fifo fpga实现

目录

原理

异步fifo:先进先出的存储单元,读写使用不同的时钟
不同于ram,fifo不能指定地址读写
两个难点:
1)读写时钟同步可能产生亚稳态,如果不加以处理,可能让亚稳态在整个fifo系统中传递,导致严重的错误。
2)空满标志的确定
解决:
1)二级寄存加格雷码转换
2)由格雷码的特性确定空满标志
读写指针的定义在考虑空满状态的情况下,需比地址多定义一位,用以判断空满

实现

代码
参考的网上大佬的代码
个人感觉代码非常精简

module my_fifo #(parameter DATA_WIDTH = 4,parameter DATA_DEPTH = 128)(
    rst         ,               //复位
    wr_clk      ,               //写时钟
    wr_en       ,               //写使能
    rd_clk      ,               //读时钟
    rd_en       ,               //读使能
    din         ,               //输入数据
    dout        ,               //输出数据
    vld         ,               //输出有效信号
    empty       ,               //满标注
    full                        //空标志
);

//求底数为2的对数的值 求位宽
function integer log2b(input integer data);
    begin
        for(log2b = 0; data > 0 ; log2b = log2b + 1)begin
            data = data >> 1;
        end
    end
endfunction

//接口定义
input                           		rst         		;//复位
input                           		wr_clk      		;//写时钟
input                           		wr_en       		;//写使能
input                           		rd_clk      		;//读时钟
input                           		rd_en      		    ;//读使能
input       	[DATA_WIDTH - 1:0]  	din         		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值