异步FIFO跨时钟域,写的快、读的慢

DCM逻辑:DATA路径
因为是写得快读得慢,写时钟周期比读周期小,所以在写满以后,等待下一个读周期上升沿就得到读满信号;
异步FIFO跨时钟域问题,读写时钟不同,不能确定,写满信号和读空信号,采用的FIFO策略是,先写满,写的过程通过帧拉高,帧数据有效等来进入写的状态机,确定写的数量并缓存计数,确定写满。
写满信号到来之后,输出,接收读请求,进入读的状态机,读出有效计数等与写的缓存计数时,就可以判定读空了;
值得关注的一个信号是rd_control控制top层的模块读进程,并且因为跨时钟域的原因,需要等待读出的时钟上升沿,所以这个为了避免这个等待出现误判,即信号拉高一直持续到写状态机;

以下是verilog代码,因前端是项目自定义的8位数据后端是UART通信协议;

/*
异步FIFO控制,二进制码转为格雷码;
格雷码判空:直接判断读写地址是否相同;
格雷码判满:最高位不同,次高位也不同,其余位必须相同,
所以需要将信号高两位反抓,其余位不变;
格雷码最高位和次高位为空满标志位,满:读写地址最高位和次高位相反,空:读写地址的最高位与次高位相同;
采用格雷码可以降低亚稳态的发生概率;

读时钟采用0.1536MHZ(uart_clk),写时钟采用81.92MHz,写得快,读得慢;
*/
//fifo 策略改变,106个上行Byte写完,之后再读,不使用格雷码;
module asyfifo_da
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值