0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

异步fifo详解

h1654155355.6033 来源:未知 作者:朱常 2022-12-12 14:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

异步fifo详解

一. 什么是异步FIFO

FIFO即First in First out的英文简称,是一种先进先出的数据缓存器,与普通存储器的区别在于没有外部读写的地址线,缺点是只能顺序的读取和写入数据(对于大型数据存储,在性能上必然缓慢),其数据地址是由内部读写指针自动加一完成的,不能像普通的存储器一样,由地址线决定读取或者写入某个特定地址的数据,按读写是否为相同时钟域分为同步和异步FIFO,这里主要介绍异步FIFO,主要用于跨时钟域传输数据。

FIFO是一种数据缓冲器,用来实现数据先入先出的读/写方式。FIFO有一个写端口和一个读端口,外部无需使用者控制地址,使用方便。FIFO与普通的Block RAM有一个很明显的区别就是使用Block RAM来做数据缓存处理,使用者必须自己控制读和写地址的管理,必须保证写的数据不把Block RAM中未被读出的内容覆盖掉从而造成数据错误,同时保证读的时候要读出未被写入的地址。而采用FIFO时,只需要关注FIFO控制器给出的空满状态信号即可知道当前有没有错误的操作了FIFO,使FIFO的数据写溢出或读空。

异步FIFO读写分别采用相互异步的不同时钟,使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据

FIFO的常见参数

FIFO的宽度:即FIFO一次读写操作的数据位;

FIFO的深度:指的是FIFO可以存储多少个N位的数据(如果宽度为N)。

满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。

空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。

读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。

写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。

二、设计原理

2.1结构框图

如上图所示的同步模块synchronize to write clk,其作用是把读时钟域的读指针rd_ptr采集到写时钟(wr_clk)域,然后和写指针wr_ptr进行比较从而产生或撤消写满标志位wr_full;类似地,同步模块synchronize to read clk的作用是把写时钟域的写指针wr_ptr采集到读时钟域,然后和读指针rd_ptr进行比较从而产生或撤消读空标志位rd_empty。

另外还有写指针wr_ptr和写满标志位wr_full产生模块,读指针rd_ptr和读空标志位rd_empty产生模块,以及双端口存储RAM模块。

2.2 二进制计数器存在的问题

异步FIFO读写指针需要在数学上的操作和比较才能产生准确的空满标志位,但由于读写指针属于不同的时钟域及读写时钟相位关系的不确定性,同步模块采集另一时钟域的指针时,此指针有可能正处在跳变的过程中,如下图所示,那么采集到的值很有可能是不期望的值,当然,不期望的错误结果也会随之发生。

上图中,rd_ptr2sync 3和4以及4和5之间的中间态是由于到各寄存器的时钟rd_clk存在偏差而引起的。二进制的递增操作,在大多数情况下都会有两位或者两以上的bit位在同一个递增操作内发生变化,但由于实际电路中会存在时钟偏差和不同的路径延时,二进制计数器在自增时会不可避免地产生错误的中间结果,如下图。

由于rd_clk上升沿到达三寄存器的时间各不相同,这就导致了rd_ptr2sync的值从3’b011跳变3’b100的过程中经历了3’b111和3’b101,直到最后一个时钟(rd_clk0)沿的到来后rd_ptr2sync才跳变到正确结果3’b100。中间结果的持续的时间虽然相对短暂,但是这些不正确的中间结果完全有可能被其它时钟域的同步模块采集到而产生错误的动作,见上图。

由此可见,要避免中间结果的产生,其中一个可行的方案就是使被同步模块采集的数据递变时,每次只有一个bit位发生改变格雷码计数器就是一个不错的选择。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • fifo
    +关注

    关注

    3

    文章

    409

    浏览量

    46016
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    高性能异步CMOS存储器Async SRAM存储方案

    高性能异步CMOS存储器Async SRAM存储方案详解 在各类嵌入式、工控及低功耗电子设备的存储方案中,Async SRAM(异步SRAM)凭借稳定的性能、简洁的接口与低功耗优势,成为众多轻量化存储场景的优选器件。
    的头像 发表于 06-02 16:03 76次阅读

    陀螺仪LSM6DSV80X开发(4)----FIFO 读取陀螺仪数据

    本文介绍如何在 LSM6DSV80X 上配置 FIFO(Stream 模式 + Watermark),并在 FIFO 达到阈值后批量读出数据,通过 TAG 解析出陀螺仪样本并完成单位换算与输出。该方法适合连续采样、降低 MCU 读取开销的应用场景。
    的头像 发表于 06-02 11:25 136次阅读
    陀螺仪LSM6DSV80X开发(4)----<b class='flag-5'>FIFO</b> 读取陀螺仪数据

    【黑金云课堂】FPGA技术教程FPGA基础:FIFO与Uart通信

    FIFO 知识总结 一、FIFO 基础概念 定义 :FIFO(First In First Out)是一种先进先出的数据缓冲结构,先写入的数据先被读出。 1. 核心特性 读写顺序一致 支持同时读写
    的头像 发表于 06-02 09:17 183次阅读
    【黑金云课堂】FPGA技术教程FPGA基础:<b class='flag-5'>FIFO</b>与Uart通信

    UMFT602A/X模块:FIFO总线与USB 3.1的高效桥梁

    UMFT602A/X模块:FIFO总线与USB 3.1的高效桥梁 在电子设计领域,模块的选择对于项目的成功至关重要。今天,我们就来深入了解一下Future Technology Devices
    的头像 发表于 05-15 15:15 152次阅读

    UMFT240XE:USB 到 8 位 245 FIFO 开发模块详解

    UMFT240XE:USB 到 8 位 245 FIFO 开发模块详解 在电子设计领域,一款性能出色且功能丰富的开发模块能为工程师们带来极大的便利。今天,我们就来深入了解一下 Future
    的头像 发表于 05-15 15:05 143次阅读

    FT2232H Mini模块:USB转串口/FIFO开发的理想之选

    FT2232H Mini模块:USB转串口/FIFO开发的理想之选 在电子工程师的日常开发工作中,拥有一款高效、稳定的USB转串口/FIFO开发模块至关重要。今天我们就来详细了解一下Future
    的头像 发表于 05-15 15:05 179次阅读

    UM245R USB - 并行FIFO开发模块:特性、配置与应用解析

    FTDI的FT245RL芯片的开发模块。FT245R作为USB到并行FIFO的接口,具备新的FTDIChip - ID™安全加密狗功能,同时支持异步和同步位操作模式。该模块将外部EEPROM、时钟电路和USB电阻完全
    的头像 发表于 05-15 14:30 201次阅读

    淘宝券后价异步数据

    淘宝 券后价异步数据 ,核心是 非阻塞、批量、延迟获取 商品券后价(原价 - 优惠券),适合大规模商品监控、比价、选品场景。淘宝官方无直接 “券后价异步接口”,需通过 官方 API 组合 + 异步
    的头像 发表于 03-25 15:39 221次阅读

    详解SRC4192和SRC4193:专业音频领域的异步采样率转换器

    详解SRC4192和SRC4193:专业音频领域的异步采样率转换器 在专业音频和广播应用的领域中,对音频信号处理的精度和灵活性要求极高。SRC4192和SRC4193这两款异步采样率转换器(ASRC
    的头像 发表于 02-03 16:00 915次阅读

    FIFO存储器的种类、IP配置及应用

    FIRST IN FIRST OUT (先入先出)。顾名思义,FIFO是一个数据具有先进先出的存储器。
    的头像 发表于 01-13 15:15 739次阅读
    <b class='flag-5'>FIFO</b>存储器的种类、IP配置及应用

    探索TL16C550D/DI:高性能异步通信元件的技术剖析

    探索TL16C550D/DI:高性能异步通信元件的技术剖析 在当今的电子通信领域,异步通信元件扮演着至关重要的角色。今天,我们将深入探讨德州仪器(TI)的TL16C550D和TL16C550DI这
    的头像 发表于 01-04 16:20 481次阅读

    详解TL16C550C:高性能异步通信芯片的卓越之选

    详解TL16C550C:高性能异步通信芯片的卓越之选 在电子工程师的日常工作中,选择合适的通信芯片对于实现稳定、高效的异步通信至关重要。今天,我们就来深入探讨一款功能强大的异步通信芯片
    的头像 发表于 01-04 16:20 694次阅读

    探索TL16C752D:具有64字节FIFO的双路UART的卓越性能与应用

    探索TL16C752D:具有64字节FIFO的双路UART的卓越性能与应用 在电子设计的广阔领域中,UART(通用异步收发器)作为实现串行通信的关键组件,一直扮演着重要角色。今天,我们将深入探讨TI
    的头像 发表于 12-19 11:50 1221次阅读

    求助,关于串口设备驱动fifo问题

    的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,buf的size设置为2048; 问题: 1、数据接收存在粘包
    发表于 09-12 08:18

    从底层解读labview的TDMS高级异步写入的工作原理

    在 LabVIEW 的 TDMS 高级异步写入中,“异步写入”指的是 写入操作的调用方式 ,而不是指允许多个线程同时直接操作同一个文件的物理内容。 理解这个概念需要区分几个层面: 异步调用 vs.
    发表于 08-14 17:05