【报文数据流中的反压处理】

报文数据流中的反压处理

  • 1 带存储体的反压
    • 1.1 原理图
    • 1.2 Demo

尤其是在NP芯片中,经常涉及到报文的数据流处理;为了防止数据丢失,和各模块的流水处理;因此需要到反压机制;
反压机制目前接触到的有两种:一是基于握手valid-ready信号的反压;二是基于credits的反压;
所谓反压,就是能够压住FIFO前级的发送和本级FIFO源头反压;若是有多个FIFO的话,还会涉及到调度问题;

本篇博客重点介绍带存储体(FIFO)的反压原理和实现;

1 带存储体的反压

1.1 原理图

示意图如下:基本上涉及数据流的处理,会在本级模块前级上放置一个FIFO,首先本级模块会进行处理,由于比如grant或者某些ctrl信号无法及时处理,FIFO无法pop出去,就会积压在本模块前级FIFO中,最终当累积到某种深度上,会向前级模块进行反压;不要在发送;
在这里插入图片描述

1.2 Demo

设计一个并行6输入32bit加法器,输出一个带截断的32bit加法结果,要求用三级流水设计,带反压信号;
本Demo的存储体是存储在本级模块后面中,前提是前级模块都是能够立即使用的,不需要等待什么条件

module pressure_fifo #(parameter	FIFO_DATA_WIDTH = 32,parameter 	FIFO_DEPTH 	= 8
)(input wire clk,input wire rst,input wire valid_i,output logic ready_o,	//给前级信号的准备信号input wire [32 -1:0] a,b,c,d,e,f,//outputinput wire ready_i,output logic [32 -1:0] dout,output logic valid_o
)localparam          WATERLINE = FIFO_DEPTH - 3; //three levels' pipelinelogic               handshake;logic               handshake_ff1;logic               handshake_ff2;logic               wr_en;assign handshake = ready_o & valid_i;	//按理说ready_o拉高后,前级模块不应该进行发数据,在这里就是保险判断,即使valid_i有效,ready_o未准备好的话,会进行丢弃数据;always @ (posedge clk or posedge rst) beginif(rst) beginhandshake_ff1 <= '0;handshake_ff2 <= '0;endelse beginhandshake_ff1 <= handshake;handshake_ff2 <= handshake_ff1;endendreg [31 : 0] r1_ab;always @ (posedge clk or posedge rst) beginif(rst) beginr1_ab <= '0;endelse if(handshake)beginr1_ab <= a + b;endendreg [31 : 0] r1_cd;always @ (posedge clk or posedge rst) beginif(rst) beginr1_cd <= '0;endelse if(handshake)beginr1_cd <= c + d;endendreg [31 : 0] r1_ef;always @ (posedge clk or posedge rst) beginif(rst) beginr1_ef <= '0;endelse if(handshake)beginr1_ef <= e + f;endendreg [31 : 0] r2_abcd;always @ (posedge clk or posedge rst) beginif(rst) beginr2_abcd <= '0;endelse if(handshake_ff1) beginr2_abcd <= r1_ab + r1_cd;endendreg [31 : 0] r2_ef;always @ (posedge clk or posedge rst) beginif(rst) beginr2_ef <= '0;endelse if(handshake_ff1) beginr2_ef <= r1_ef;endendreg [31 : 0] r3;always @ (posedge clk or posedge rst) beginif(rst) beginr3 <= '0;endelse if(handshake_ff2) beginr3 <= r2_ef + r2_abcd;endendalways @ (posedge clk or posedge rst) beginif(rst) beginwr_en <= 1'b0;endelse if(handshake_ff2) beginwr_en <= 1'b1;endelse beginwr_en <= 1'b0;endendalways_ff @(posedge clk)beginif(rst)beginready_o <= 1'b0;endelse if(usedw > WATERLINE)begin	//当使用的深度超过fifo存储体时,就要对上级反压;ready_o <= 1'b0;endelse beginready_o <= 1'b1;endendassign valid_o = ~empty;// 同步FIFO存储体-->看用了多少fifo深度;3级流水线在反压起作用时,会一下子进入3个数据;sync_fifo # (.MEM_TYPE   ("auto"         ),.READ_MODE  ("fwft"         ),.WIDTH      (FIFO_DATA_WIDTH),.DEPTH      (FIFO_DEPTH     ))fifo_inst(.clk    (clk                ), // input  wire.rst_n  (rst_n              ), // input  wire.wren   (wr_en              ), // input  wire.din    (r3                 ), // input  wire [WIDTH-1:0].rden   (ready_i            ), // input  wire.dout   (dout               ), // output reg  [WIDTH-1:0].empty  (empty              ), // output wire.usedw  (usedw              ));endmodule 

这个比较简单,相当于是从入口来我这的每排都有效,不要事先在前面进行先存储住;比如说另一种情况,前级模块给我发过来的数据,但是因为其他条件未准备好,我无法立即进行使用,因此也需要先暂存在本模块最前面的fifo存储体中

基本上划分模块的时候真实应用场景都是采用逐级模块向前反压,在这里简单有个概念:逐级反压和跨级反压;
在这里插入图片描述

逐级反压:流水线深度,好把握,也是项目中最经常用到的;
跨级反压:流水线深度:是waterlie3 + 在途1 + waterline1 + 在途2 + waterline2 + 在途3 (在途means 流水线深度)
【Refer】
1.https://zhuanlan.zhihu.com/p/359330607

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/345045.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口自动化Requests+Pytest基础实现

目录 1. 数据库以及数据库操作1.1 概念1.2 分类1.3 作用 2 python操作数据库的相关实现2.1 背景2.2 相关实现 3. pymysql基础3.1 整个流程3.2 案例3.3 Pymysql工具类封装 4 事务4.1 案例4.2 事务概念4.3 事务特征 5. requests库5.1 概念5.2 角色定位5.3 安装5.4 校验5.5 reques…

吊车报警的工作原理和使用场景_鼎跃安全

在现代建筑施工过程中&#xff0c;经常使用大型机械设备&#xff0c;如挖掘机、吊车、打桩机等&#xff0c;这些设备在施工过程中发挥着越来越重要的作用&#xff1b;同时&#xff0c;这些设备的作业频繁进行作业&#xff0c;对于接触到高压电线的风险也随之增加。大型机械设备…

Application Load Balancer-ALB

Application Load Balancer-ALB 什么是ALB开通ALB服务实现IPv4服务的负载均衡创建ALB实例创建服务器组添加后端服务器配置监听设置域名解析&#xff08;可选&#xff09;释放ALB实例 什么是ALB 在介绍ALB之前首先介绍一下负载均衡SLB&#xff0c;可以说SLB是负载均衡家族之首 …

测试开发之自动化篇 —— 使用Selenium IDE录制脚本!

今天&#xff0c;我们开始介绍基于开源Selenium工具的Web网站自动化测试。 Selenium包含了3大组件&#xff0c;分别为&#xff1a;1. Selenium IDE 基于Chrome和Firefox扩展的集成开发环境&#xff0c;可以录制、回放和导出不同语言的测试脚本。 2. WebDriver 包括一组为不同…

Adobe Illustrator 矢量图设计软件下载安装,Illustrator 轻松创建各种矢量图形

Adobe Illustrator&#xff0c;它不仅仅是一个简单的图形编辑工具&#xff0c;更是一个拥有丰富功能和强大性能的设计利器。 在这款软件中&#xff0c;用户可以通过各种精心设计的工具&#xff0c;轻松创建和编辑基于矢量路径的图形文件。这些矢量图形不仅具有高度的可编辑性&a…

“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“

前言&#xff1a;在Java编程中&#xff0c;深拷贝&#xff08;Deep Copy&#xff09;与浅拷贝&#xff08;Shallow Copy&#xff09;是两个非常重要的概念。它们涉及到对象在内存中的复制方式&#xff0c;对于理解对象的引用、内存管理以及数据安全都至关重要。 ✨✨✨这里是秋…

springboot undertow 文件上传文件过大异常

io.undertow.server.RequestTooBigException: UT000020 Connection terminated as request was larger than xxxx 修改yaml文件中关于undertow的配置项 server:undertow:# HTTP POST请求最大的大小# 默认0&#xff0c;无限制max-http-post-size: ${SERVER_UNDERTOW_MAX_HTTP_…

小白教程--- kali(po解)WIFI密码 (图文教程)

kali学得好&#xff0c;牢饭少不了&#xff01;&#xff01;&#xff01; 原理&#xff1a; 模拟WiFi的已连接设备&#xff0c;强制让其下线重连&#xff0c;获取其握手包&#xff0c;使用密码字典&#xff08;宝丽&#xff09;婆洁。 环境&#xff08;准备工作&#xff09;&a…

跨域、JSONP、CORS、Spring、Spring Security解决方案

概述 JavaScript出于安全方面的考虑&#xff0c;不允许跨域调用其他页面的对象。跨域是浏览器&#xff08;如Chrome浏览器基于JS V8引擎&#xff0c;可以简单理解为JS解释器&#xff09;的一种同源安全策略&#xff0c;是浏览器单方面限制脚本的跨域访问。因此&#xff0c;仅有…

【Java面试】十六、并发篇:线程基础

文章目录 1、进程和线程的区别2、并行和并发的区别3、创建线程的四种方式3.1 Runnable和Callable创建线程的区别3.2 线程的run和start 4、线程的所有状态与生命周期5、新建T1、T2、T3&#xff0c;如何保证线程的执行顺序6、notify和notifyAll方法有什么区别7、wait方法和sleep方…

Flutter Image源码分析

本文用于记录分析Imge图片加载流程源码分析学习笔记 切入点是Image.network,加载网络图片 构造方法会创建NetworkImage,加载图片的实现类,父类是ImageProvider 加载本地图片等等都是类似 下面进入_ImageState类 void resolveStreamForKey(ImageConfiguration configurat…

【云原生】基于windows环境搭建Docker

目录 一、Docker Desktop搭建 二、前置准备 2.1开启 Hyper-V 2.2 Hyper-V选项看不到问题解决 2.3 开启或升级wsl 三、安装过程 3.1 下载安装包 3.2 安装 Docker Desktop 3.2.1 Docker 图标一直处于starting状态问题解决 3.3 配置仓库与镜像 3.4 docker功能测试 四、…

C++中的一些困惑(长期更新中)

C中的一些困惑 文章目录 C中的一些困惑1. using std::具体命名与using namespace std;2. 【int \*p[10] 】与 【int (\*p)[10]】3. main()函数可带参&#xff0c;参从何来&#xff1f;4. constexpr函数的返回值可不为常量&#xff0c;那这时constexpr关键字作用是什么&#xff…

CTF Show MISC做题笔记

MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件&#xff1a;misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息&#xff1a;flag{flag…

一个简单的消息队列

目录 原理 实现代码 示例 原理 消息队列是一个先进先出栈&#xff0c;每次都处理第一项&#xff0c;处理完了过后会删除这个消息&#xff0c;这是一个简单的消息队列图&#xff1a; 实现代码 首先消息队列需要一个队列&#xff0c;我们用Python里的列表&#xff1a; self.…

Shell脚本学习_内置命令

目录 1.内置命令介绍&#xff1a; 2.Shell内置命令&#xff1a;alias设置别名 3.Shell内置命令&#xff1a;echo输出字符串 4.Shell内置命令&#xff1a;read读取控制台输入 5.Shell内置命令&#xff1a;exit退出 6.Shell内置命令&#xff1a;declare设置变量 1.内置命令…

【计算机毕业设计】283基于微信小程序校园订餐

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

用python编撰一个电脑清理程序

自制一个电脑清理程序&#xff0c;有啥用呢&#xff1f;在电脑不装有清理软件的时候&#xff0c;可以解决自己电脑内存不足的情况。 1、设想需要删除指定文件夹中的临时文件和缓存文件。以下是代码。 import os import shutil def clean_folder(folder_path): for root,…

【备战蓝桥杯】蓝桥杯省一笔记:算法模板笔记(Java)

蓝桥杯 0、快读快写模板1、回文判定2、前缀和3、差分4、二分查找5、快速幂6、判断素数7、gcd&lcm8、进制转换9、位运算10、字符串常用API11、n的所有质因子12、n的质因子个数13、n的约数个数14、n阶乘的约数个数15、n的约数和16、阶乘 & 双阶乘17、自定义升序降序18、动…

Java----抽象类和接口

欢迎大家来这次博客-----抽象类和接口。 1.抽象类 1.1 抽象类概念 在Java中我们都是通过类来描述对象&#xff0c;但反过来并不是所有的类都是用来描述对象的。当一个类中没有足够的信息来描述一个具体对象&#xff0c;我们就将该类称为抽象类。 如上图中的Shape类&#xff…