读书笔记------------------异步FIFO设计

本文深入探讨异步FIFO的设计,包括空满信号判断、格雷码的应用以及整体架构。通过理解格雷码计数器和同步问题,阐述如何避免虚空和虚满现象,实现有效的异步FIFO设计。
摘要由CSDN通过智能技术生成

FIFO经常用在跨时钟域处理多位位宽数据,实际使用中,我们一般是直接例化FIFO的IP核,通过调用IP核来实现FIFO的控制,很少有亲自下手写FIFO的。不过掌握如何自己写FIFO更能加深自己对FIFO的工作原理的理解。

一、FIFO的设计

FIFO包括同步FIFO和异步FIFO,对于FIFO的设计最大的难点在于如何准确的产生空满信号,使其空而不读,满而不写。

对于同步FIFO来说,由于读写时钟相同,空满信号的产生就比较简单。通过判断er_en和rd_en来控制ptr的增减,当ptr=0,表示FIFO空;当ptr=FIFO的最大指针,表示FIFO满。

但是,对于异步FIFO,空满信号的判断就没有这么简单,由于异步FIFO读时钟rclk和写时钟wclk不同,因此就不能通过直接比较读指针和写指针来产生空满信号。这是因为,空信号是在读时钟域产生的,由于读写时钟不同,若要将写指针与读指针在读时钟域进行比较,需要将写指针同步到读时钟域,由于多位信号不能通过两级触发器直接同步,否则可能会产生亚稳态或中间结果。

二、异步FIFO空满信号判断

空信号的产生:当读指针追上写指针时,此时FIFO为空;

满信号的产生:当写地址追上读地址时,此时FIFO为满。

有一个问题:如何判断是写指针追上读指针还是读指针追上写指针呢?

为进行区分,在设计中,我们通过增加一位指针,来进行空满信号的判断。如对于深度为8的FIFO,我们将读写指针的位宽设置成4位,当读指针追赶上写指针时,最高位为0,当写指针追赶上读指针时,

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值