verilog学习心得之六--异步FIFO原理

异步FIFO的设计原理如图:

其中主要的难点在于空满标志的产生,这里采用方法(1),其中地址宽度较FIFO深度所需地址宽度宽1位:

空标志产生:将写地址waddr--> 转换为格雷码waddr_gray-->两级同步至读时钟rclk waddr_gray_rclk -->将同步之后的写格雷码转换为二进制waddr_bin_rclk

                      比较waddr_bin_rclk与读时钟rclk下的读地址raddr,两者完全相等,则空标志有效。

满标志产生:将读地址raddr--> 转换为格雷码raddr_gray--> 两级同步至写时钟wclk raddr_gray_wclk -->将同步之后的写格雷码转换为二进制raddr_bin_wclk

                      比较raddr_bin_wclk与写时钟wclk下的写指针waddr,MSB位相反,其它位都相等,则满标志有效。

格雷码  --> 二进制码

bin(n-1) = gray(n-1)

bin(i) = gray(i) 异或 bin(i+1)   其中 i < n-1

二进制 --> 格雷码

gray(n-1) = bin(n-1)

gray(i) = bin(i) 异或 bin(i+1)    其中 i < n-1

代码如下:

FIFO模型采用寄存器数组实现

module FIFO_MEM #(parameter DATASIZE = 32,parameter ADDRSIZE = 4)
                 (
                  //INPUTS
                  WCLK,
                  RCLK,
                  RSTn,
                  WEN,
                  WADDR,
                  WDATA,
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值