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

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

3天内不再提示

常见的流控机制之fifo与带外流控

sakobpqhz6 来源:IC学习 2023-07-26 12:40 次阅读

在数据处理模块中,我们经常会涉及数据流控反压。什么是流控呢?简单来说就是控制数据流停止发送。常见的流控机制分为带内流控和带外流控。带外流控流控比较简单,就是需要一根额外的信号线来表示流控信息,如ready,1表示可以发送数据,0表示不可以发送数据.如果取名为fc(flowcontrol),则0表示可以发送数据,1表示停止发送数据。带内流控机制中,流控信息是通过数据通路传输的,没有额外的流控信号线。带内流控在接口模块非常常见,例如以太MAC的pause帧和PCIe的信用量机制。流控系列文章分为4篇,今天是第一篇。首先将最简单的流控机制,fifo与带外流控。

1、什么是FIFO

FIFO(first in first out)是一种用寄存器reg或者RAM实现的存储结构,常用于存储数据通道中的数据流,采用先入先出的数据,当下游模块无法及时处理上流模块输出的数据时,此时需要用FIFO暂存数据,防止数据丢失。

2、FIFO的流水反压机制

每一个fifo都有一个将满阈值cfg_afull_value(名称随意,看得懂就行),通常由寄存器配置模块cfg_csr提供。当fifo内的数据量达到或超过cfg_afull_value时,将满信号afull从0跳变成1,即fc信号从0跳变1。上游发送模块感知到fc为1时,则停止发送数据,有可能是1~2周期就停止,有可能是一个整包发送完才停止,根据代码实现才能判断。在fc跳变成1后,fifo需要能够缓存路径上的data以及上游发送模块停止发流之前发出的所有data。这就是fifo的流控机制。

894b9626-2b6c-11ee-a368-dac502259ad0.png

图1:fifo流控示意图

3、FIFO深度如何设置

如图2所示,数据data和有效信号vld从模块A产生,经过N拍延时,输入到FIFO,FIFO产生将满信号afull,经过M拍延时反馈到模块A,假设模块A接收到afull=1时,立即停止发送数据。假设FIFO深度为fifo_depth,每拍为一个时钟周期。

897db4b2-2b6c-11ee-a368-dac502259ad0.png

图2:fifo深度计算示意图

1为了保证FIFO不发生溢出,请问将满阈值cfg_afull_value至少应该设置成多少?

2为了充分发挥FIFO的性能,FIFO深度depth应该为多少?

FIFO将满阈值如何设置:

当FIFO中的数据为cfg_afull_value时,产生afull=1,

Afull=1经过M拍到达模块A,此时FIFO中应该有(cfg_afull_value+M)个数据。

Afull=1到达模块A时,模块A立即停止发送数据,此时电路中还存在N拍数据将陆续送到FIFO中,所以最后FIFO中应该为(cfg_afull_value+M+N)个数据,

为了保证数据不会溢出,所以应该满足公式fifo_depth>= cfg_afull_value+M+N,因此,将满阈值应该至少为depth_fifo-(M+N)

FIFO深度depth应该为多少?

若fifo_depth过小,afull有效之后,fifo中存储的数据将很快被下游数据读取,而新的数据又无法及时到达FIFO,因此会造成流水气泡,影响电路性能。

假设M=5 ,N=10,假设fifo_depth=20,则cfg_afull_value=5, 所以在T时刻,fifo中存了5个数据后afull=1会有效,在之后的15个周期内会陆续存入15个数据。假设下游模块B每个周期读取FIFO中的一个数据,因为当FIFO内的数据data_cnt小于5时,afull才会无效(为0),因此在T+15和T+30的时刻内,下游电路B只能读5个数据,因此会造成数据断流,影响电路性能。

899b3bfe-2b6c-11ee-a368-dac502259ad0.jpg

图3:流控信号时序图

为保证电路性能,在T+15到T+30这个时间段内应该有15个数据可读,因此cfg_afull_value应该不小于15(M+N)。所以FIFO深度应该不小于2*(M+N)

结束语

其实FIFO的流控方式有个明显的弊端,一旦反压路径M(见图2)过大,会明显浪费资源。

编辑:黄飞

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

    关注

    30

    文章

    5032

    浏览量

    117746
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1322

    浏览量

    113708
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43074
  • Mac
    Mac
    +关注

    关注

    0

    文章

    1067

    浏览量

    50847

原文标题:4种常见的流控机制(一) FIFO与流控

文章出处:【微信号:IC学习,微信公众号:IC学习】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FIFO队列原理简述

    FIFO是队列机制中最简单的,每个接口上只有一个FIFO队列,表面上看FIFO队列并没有提供什么QoS保证,甚至很多人认为FIFO严格意义上
    发表于 07-10 09:22 1395次阅读

    轿车外流场的数值模拟

    轿车外流场的数值模拟本论文以某轿车为例,车身数据取自实际产品设计数据库,利用目前通用的CAD软件UG,构建本轿车的1:5模型,构件几何模型,导入STAR-CD前处理器时生成轿车表面网格,利用网格自动
    发表于 03-20 11:18

    轿车外流场的数值模拟

    轿车外流场的数值模拟本论文以某国产轿车 1:5 模型为研究对象,车身数据取自实际产品设计数据库。利用大型的CFD 分析软件STAR-CD 进行模型分析。经过STAR-CD前处理生成轿车表面粗网格后
    发表于 12-02 12:41

    基于CFD 的汽车外流场数值模拟的发展概述

    基于CFD 的汽车外流场数值模拟的发展概述摘要: 介绍了国内外在应用计算流体力学(Calculation Fluid Dynamics) 对车身外流场数值模拟的研究发展状况。如今, 国外CFD 软件
    发表于 03-18 22:20

    UCOS任务调度机制

    UCOS任务调度机制
    发表于 05-30 07:56

    例说FPGA连载61:电子点菜单FIFO概述

    例说FPGA连载61:电子点菜单FIFO概述特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1c0nf6Qc 所谓FIFO(First
    发表于 12-23 17:48

    请问串口硬控之间的配合怎么理解?

    发过来的数据, 还有控的FIFO是怎么设定的呢?是软件自己定义一个数组,还是像DMA那样,有一个FIFO寄存器的机制?不太懂,求拍砖。
    发表于 02-25 06:04

    AXIFIFO挂起

    我正在使用AXIFIFO将数据流式传输到Rx端,最终也将通过AXI总线从处理器读回。当我尝试读取“base_address + 0x1C”时,系统挂起......以前有人遇到过这种情况吗?在阅读
    发表于 04-24 12:54

    链接后的RX邮箱的FIFO机制是什么意思?

    你好,有人能解释一下链接后的RX邮箱的FIFO机制吗?我已经注意到,当X是FIFOSIZE时,每X消息只有一个中断。这是否意味着我必须在中断中同时处理所有消息,当下一个中断发生时,完整
    发表于 08-15 14:20

    链接CAN RX邮箱的FIFO机制怎么使用?

    你好,我联系在一起,可以接收邮箱能够使用它背后的FIFO机制。我已经了解基本的原则,像在这里所说的:https://secure.cypress.com/?ID = 4 &;摆脱
    发表于 08-28 10:41

    FIFO的具体设计和常见问题

    FIFO的具体设计和常见问题
    发表于 01-06 06:04

    怎样去设计一种采用覆盖机制FIFO队列模型呢

    FIFO队列是什么?怎样去设计一种采用覆盖机制FIFO队列模型呢?
    发表于 12-08 06:07

    什么是FIFO的OV7670

    什么是FIFO的OV7670?为什么要带FIFO呢?
    发表于 01-19 06:41

    一个简单的RTL同步FIFO设计

    FIFO 是FPGA设计中最有用的模块之一。FIFO 在模块之间提供简单的握手和同步机制,是设计人员将数据从一个模块传输到另一个模块的常用选择。
    发表于 06-14 08:59 258次阅读

    浅谈FIFO设计思路

    FIFO在设计是一个非常常见并且非常重要的模块,很多公司有成熟的IP,所以一部分人并没有人真正研究写过FIFO,本文仅简述FIFO中部分值得保留的设计思路。
    的头像 发表于 09-11 17:05 402次阅读
    浅谈<b class='flag-5'>FIFO</b>设计思路