verilog 异步fifo设计及仿真

一、核心思想

FIFO即先进先出,不能随机读写随即地址的数据,只能挨个读写。异步fifo是指读写时钟不同,读和写分别在各自的时钟域下,适用于不同时钟域下的数据传输。缓冲等。

二、读写时序

1、写操作

当写信号有效且fifo非满就写到写地址对应的位

2、读操作

当读信号有效且fifo非空既可以进行读地址对应数据

三、设计难点

1、如何判断FIFO的空满

  • 根据网上的例子,常规方法都是在读写地址指针加一个额外的状态位。当读或写够一轮状态位就取反。
  • 当写地址指针与读地址指针低八位完全相等,而写地址领先读地址一轮,则表示写满了。(二进制情况下)
  • 当写地址指针与读地址指针低八位完全相等,而读地址追上了写地址,则表示读空了。(二进制与格雷码情况下)
  • 但是将二进制转换成格雷码后判断满的标志则为,格雷码状态下高两位相反,其余相同

2、如何解决不同时钟下两个地址指针的比较,降低亚稳态

  • 利用格雷码进行地址指针的判断:因为格雷码每加1,只有一位在变。
  • 加两级寄存器,将读地址转换为格雷码再同步到写时钟域下,判断fifo是否为满;将写地址转化为格雷码同步到读时钟域下,判断fifo是否为空。

四、代码

fifo_async.v

module fifo_async#(parameter dwidth = 8,awidth = 4)(
	input 						wclk	,
	input 						rclk	,
	in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值