当前位置: 首页 > news >正文

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

报文数据流中的反压处理

  • 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

相关文章:

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

报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中&#xff0c;经常涉及到报文的数据流处理&#xff1b;为了防止数据丢失&#xff0c;和各模块的流水处理&#xff1b;因此需要到反压机制&#xff1b; 反压机制目前接触到的有两种&#xff1a;一是基…...

数据挖掘丨轻松应用RapidMiner机器学习内置数据分析案例模板详解(下篇)

RapidMiner 案例模板 RapidMiner 机器学习平台提供了一个可视化的操作界面&#xff0c;允许用户通过拖放的方式构建数据分析流程。RapidMiner目前内置了 13 种案例模板&#xff0c;这些模板是预定义的数据分析流程&#xff0c;可以帮助用户快速启动和执行常见的数据分析任务。 …...

时代巨兽!深度神经网络如何改变我们的世界?

深度神经网络 1、 简介1.1 定义深度神经网络1.2 深度学习的发展历程1.3 深度神经网络的应用领域 2、深度神经网络的基本原理2.1 神经元层2.1.1 神经元2.1.2 神经元层 2.2 前向传播2.3 反向传播2.4 激活函数2.4.1、作用2.4.2、常见激活函数2.4.3、选择激活函数的考虑 2.5 损失函…...

LVS+Keepalived高可用负载均衡群集

目录 一.高可用群集相关概述 1.高可用&#xff08;HA&#xff09;群集与普通群集的比较 普通群集 高可用群集&#xff08;HA&#xff09; 两者比较 2.Keepalived高可用方案 3.Keepalived的体系模块及其作用 4.Keepalived实现原理 二.LVSKeepAlived高可用负载均衡集群的…...

【MySQL】MySQL45讲-读书笔记

1、基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f; 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 mysql -h$ip -P$port -u$user -p输完命令之后&#xff0c;输入密码。 1.2 查询缓存 MySQL 拿到一个查询请求后&#xff0c;会先到查询缓…...

python:faces swap

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a; 两个头像图片之间换脸 # 描述&#xff1a; https://stackoverflow.com/questions/902761/saving-a-numpy-array-as-an-image?answertabvotes # Author : geovindu,Geovin Du 涂聚文. #…...

Android开发之音乐播放器添加排行需求

Music统计功能需求 1.记录歌曲名称与次数(歌曲播放结束算一次)&#xff0c;根据播放次数制作一个排行列表;&#xff08;开始说要记录歌手&#xff0c;后面debug发现这个字段没有&#xff0c;暂时不记录&#xff09; 2.记录播放歌曲的时长&#xff0c;时间累加&#xff1b;&…...

latex 方括号编号

最近在做简历&#xff0c;需要列出发表的论文。 论文编号一般是采用[1]这种样式&#xff0c;但是找了几个简历模板里头没有直接包含这种编号样式。 我只好求助网络。 在CSDN上找了一圈&#xff0c;这篇博客给了一个思路&#xff1a;在\begin{enumerate}后面添加对应的样式即…...

Vue CLI 4与项目构建实战指南

title: Vue CLI 4与项目构建实战指南 date: 2024/6/9 updated: 2024/6/9 excerpt: 这篇文章介绍了如何使用Vue CLI优化项目构建配置&#xff0c;提高开发效率&#xff0c;涉及配置管理、项目部署策略、插件系统定制以及Webpack和TypeScript的深度集成技巧。 categories: 前端…...

深入解析Web通信 HTTP、HTTPS 和 WebSocket

在现代Web开发中,了解和掌握HTTP、HTTPS以及WebSocket协议是非常重要的。这些协议是实现Web应用程序之间通信的基石。本文将详细介绍这三种协议,包括它们的基本概念、工作原理、优缺点以及适用场景。通过深入解析它们的特点和应用,帮助读者更好地理解和使用这些协议。 一、…...

FISCO BCOS x GitLink,为国产开源技术生态注入新活力

作为中国领先的区块链底层平台之一&#xff0c;FISCO BCOS 自成立以来始终致力于推动国产开源区块链技术的应用和普及。近期&#xff0c;FISCO BCOS 将开源代码托管到CCF官方代码托管平台 GitLink &#xff08;确实开源&#xff09;&#xff0c;为国产开源技术生态注入新活力。…...

Linux crontabs定时执行任务

文章目录 前言一、安装二、服务1. 启动crond服务2. 关闭crond服务3. 重启crond服务4. 设置crond开机启动5. 禁用crond开机启动6. 查看crond是否开机启动7. 重新载入配置8. 查看crond运行状态 三、使用1. 查看当前用户的crontab2. 编辑用户的crontab3. 删除用户的crontab的内容 …...

QNX简述

文章目录 前言1. QNX简介1.1 什么是QNX1.2 QNX的应用场景1.3 QNX的优点1.4 QNX的发展史1.5 QNX的商业模式 2. QNX的技术特点3. QNX和其它操作系统的比较3.1 QNX VS LINUX3.2 QNX VS FreeRTOS3.3 QNX VS 鸿蒙操作系统 4. 我的疑问4.1 微内核看起来又稳定又容易调试&#xff0c;为…...

[Llama3] ReAct Prompt 测试实验

ReAct 是一种 LLM 提示和结果处理方法&#xff0c;结合了推理、行动计划和知识源整合&#xff0c;使 LLM 超越其语言模型&#xff0c;并在预测中使用来自现实世界的信息。 ReAct 是推理和行动的结合。 介绍 ReAct 的论文表明它比思维链提示更好。与后者不同的是&#xff0c;Re…...

nodejs 某音douyin网页端搜索接口及x_bogus、a_bogus(包含完整源码)(2024-06-13)

前言 x_bogus或a_bogus算法大概是对数据、ua、时间戳、浏览器的几个指纹进行计算&#xff0c;拿到一个110位大数组&#xff0c;然后转字符&#xff0c;在头部再添加十二位随机字符&#xff0c;再进行魔改的base64加密。 问&#xff1a;抖音的x_bogus、a_bogus值有什么用&#x…...

继承深度剖析

前言 从继承开始就开始C进阶了&#xff0c; 这一块需要好好学习&#xff0c;这块知识很重要&#xff0c; 坑有点多&#xff0c;所以是面试笔试的常客。 基本概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c; 它允许程序员在保持原有…...

使用 Vue 和 Ant Design 实现抽屉效果的模块折叠功能

功能描述&#xff1a; 有两个模块&#xff0c;点击上面模块的收起按钮时&#xff0c;上面的模块可以折叠&#xff0c;下面的模块随之扩展 代码实现&#xff1a; 我们在 Vue 组件中定义两个模块的布局和状态管理&#xff1a; const scrollTableY ref(560); // 表格初始高度…...

Springboot整合SpringCache+redis简化缓存开发

使用步骤&#xff1a; 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency><dependency><groupId>org.springframework.boot</groupI…...

关于EOF标识符

EOF的概念 EOF是C语言中表示文件结束的标志符号&#xff0c;通常被定义为-1&#xff0c;它用于指示已到达文件的末尾或输入流的末尾。 EOF的使用 在输入操作中&#xff0c;EOF常常用于判断是否到达了文件末尾或输入流末尾&#xff0c;以便终止读取操作。例如&#xff0c;在使…...

家用洗地机排行榜前十名:2024十大王牌机型精准种草

最近很多人都在问我洗地机相关的问题&#xff0c;不愧是改善家庭生活品质的“三神器”之一。洗地机依靠其清洁力和清洁效率吸引了越来越多的平时需要做家务人群的兴趣&#xff0c;为了解答大家关于洗地机的各种疑问&#xff0c;我把市面上目前非常火爆的洗地机型号和参数都进行…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...