异步FIFO

本文深入探讨异步FIFO的设计,包括其作为数据存储单元的功能、同步与异步的区别,以及重点解析了异步FIFO的设计思路和关键点,如读空、写满信号的判断,以及跨时钟域问题的解决方案,强调了使用格雷码的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、FIFO简单讲解

  • FIFO的本质是双口RAM, 先进先出,可以同时读写。

  • 重要参数:
    1.fifo深度(简单来说就是需要存多少个数据)
    2.fifo位宽(每个数据的位宽)

  • FIFO有同步和异步两种,同步即读写时钟相同,异步即读写时钟不相同

    • 1.同步FIFO作为数据缓存,例如信号采集的多通道设计系统,各个通道产生有效数据的时机完全时外部时间决定的,这时若两个通道同时有了数据,那就可以用FIFO先缓存一下,在更高的层次设计FIFO的扫查模块来分批进行数据上传。
    • 2.异步FIFO可以解决跨时钟域数据传输的问题,在应用时需根据实际情况考虑好fifo深度即可。
  • 本文主要涉及异步FIFO的设计。

二、总体设计思路

顶层设计思路如下,主要包括双端口的RAM(通过读写控制模块可以等效为FIFO)、读写控制模块、读写指针同步模块:
在这里插入图片描述

  • FIFO:作为存储单元,接收读地址和写地址,写入数据,写使能信号;
  • 写控制模块:在写时钟域时钟的控制下,产生写地址和写满信号;
    接收读控制模块发来的读指针与本模块的写指针进行对比,发出满信号,当FIFO写满后full信号拉高,写地址不再增加,即不能继续向FIFO写入数据;送出写指针到读控制模块;
  • 读控制模块:在目的时钟域时钟的控制下,产生读地址;接收写控制模块发来的写指针与本模块的读指针进行对比,发出读空信号,当FIFO读空后empty信号拉高,读地址不再增加,即不能继续从FIFO读出数据;送出读指针到写控制模块;

三、设计要点解析

  • 1、读空信号如何产生?写满信号如何产生?

    • 读空信号:复位的时候,读指针和写指针相等,读空信号有效(这里所说的指针其实就是读地址、写地址)。当读指针赶上写指针的时候,写指针等于读指针意味着最后一个数据被读完,此时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arist9612

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值