异步FIFO设计代码

异步FIFO的RTL代码主要包含6个module:

(1)fifo_top.v、(2)fifo_mem.v、(3)sync_w2r.v、

(4)sync_r2w.v、(5)wptr_full.v、(6)rptr_empty.v

(1)fifo_top.v:顶层模块,主要例化其余各个功能模块

其中端口名:input:wclk(写时钟),wrst_n(写复位、低有效),winc(写使能、高有效),wdata(写数据),rclk(读时钟),rrst_n(读复位),rinc(读使能)

output:rdata(即wdata经过异步FIFO从rdata端口输出),wfull(写满拉高)、rempty(读空拉高)

(2)fifo_mem.v:memory存储实体

可以通过例化一个双端口的RAM实现fifo的存储功能  vendor_raw  mem

也可以通过数组的方式实现:reg [7:0] mem [7:0] ------>深度为8的存储体

 (3)sync_w2r.v:写时钟域的写指针同步到读时钟域

该模块功能是实现写时钟域(wclk)的写指针(写到哪儿了?)的同步,其中采用2级寄存器的同步将写指针同步到读时钟域(rclk),从而与当下读指针的地址进行对比,去判断是否读空。

 

(4)sync_r2w.v:读时钟域的读指针同步到写时钟域

该模块功能是实现读时钟域(rclk)的读指针(读到哪儿了?)的同步,其中采用2级寄存器的同步将读指针同步到写时钟域(rclk),从而与当下写指针的地址进行对比,去判断是否写满。

 

(5)wptr_full.v:写满状态位的得出

用格雷码来判断空满状态位时,还要考虑次高位。
当最高位和次高位相同,其余位相同认为是读空。
当最高位和次高位不同,其余位相同认为是写满。

(6)rptr_empty.v:读空状态位的得出

 当最高位和次高位相同,其余位相同认为是读空。

​​​​​​​

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值