【credit_based流控机制】

news2024/9/22 21:12:41

credit_based流控机制

  • 1 credit_based way
    • 1.1 Principle
    • 1.3 DFD
    • 1.4 Module
      • 1.4.1 Interface
      • 1.4.2 Code Block

在网络芯片处理大流量报文中,一般主要是两种机制:1.valid–ready反压(backpressure)机制;2.credit信用机制;
credit机制的好处是可以不用考虑链路的延时;帮助能够自适应调整数据的数据速率;
让我联想到了海底捞的门外取号和叫号的概念

1 credit_based way

1.1 Principle

生产者–>消费者模型;即发送端–>接收端;
基于credit流控思路:发送端发送到接收端,需要提前知道信用值(credits);通过在发送端维护credits(本质上是计数器)进行控制发送发送端发送数据;
有credit值才会继续发送数据Data;

基本原理
进一步原理如下图所示:在接收端放buffer,一般也是FiFo;在发送端进行发送数据时,内部会有credit信用机制,发送端每发送一次data,会进行credit–;发送端入队FiFO,拿走一个在返回一个Taken给发送端,发送端内部credit++;
这样发送端内部不断对credit>0进行判断,来判断是否能够发出;
在本质一点,credits维护可以放在发送端也可以接收端;在这里是以放在发送端;
credit基本上等于接收端的FiFo的深度;


1.3 DFD

进一步基本逻辑框图如下图所示,在这里主要是针对credit_tracker模块的原理,用来维护credits来进行流量控制;
通过逻辑框图来指导模块代码;



1.4 Module

1.4.1 Interface

在这里不用表格单独列出来了,如上图所示;

1.4.2 Code Block

在这里给出基本伪代码,没有进行逻辑验证,仅供参考;

//--Auther		:colonel
//--Date		:2024-05-22
//--Function	:credit_based for flow control
//--History		:Description
//--05/22		:Firstly create the file
//

module credit_tracker#(
	parameter WIDTH = 4 
)(
	input clk,
	input rst_n,

	input [WIDTH -1:0] crdt_limit,
	input send,
	input taken,
	
	output reg has_crdt,
	output reg[WIDTH -1:0] crdt_left
);

reg [WIDTH -1:0] crdt_cnt;
wire[WIDTH -1:0] nxt_crdt_cnt = crdt_cnt;//Inital

always@(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		crdt_cnt <= 0;
	end else begin
		crdt_cnt <= nxt_crdt_cnt;
	end
end

always@(*) begin
	if(send && !taken && (crdt_cnt != (1<<WIDTH) -1)) begin
		nxt_crdt_cnt = crdt_cnt + 1;
	end else if(!send && taken && (crdt_cnt!=0)) begin
		nxt_crdt_cnt = crdt_cnt - 1;
	end
end

always@(posedge clk or negedge rst_n) begin
	if(nxt_crdt_cnt < crdt_limit) begin
		has_crdt <= 1'b1;
		crdt_left<= crdt_limit - nxt_crdt_cnt;
	end else begin
		has_crdt <= 1'b0;
		crdt_left<= 0;
	end
end

endmodule

以上仅是我个人的理解和学习,有不对的还请能够帮助指导指正;
Reference:
[1] https://blog.csdn.net/weixin_44260459/article/details/120757630

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Postman快捷功能-批量断言与快速查询替换

大家好&#xff0c;在我们日常的接口测试工作中&#xff0c;经常需要对接口返回的数据进行断言&#xff0c;以确保接口的正确性。当接口数量较多时&#xff0c;逐个编写断言语句会变得非常繁琐。此外&#xff0c;在接口测试过程中&#xff0c;我们还可能需要频繁地查找和替换某…

sql-labs靶场环境搭建(手把手保姆级教学)

文章目录 一、sql-labs靶场简介&#xff1a;二、搭建过程1、资源下载2、配置文件&#xff1b;3、访问网站4、创建数据库 三、使用PhpStudy2018原因 一、sql-labs靶场简介&#xff1a; SQL-Labs 是一个实践环境&#xff0c;旨在用于数据库和 SQL&#xff08;结构化查询语言&…

SAP FS00如何导出会计总账科目表

输入T-code : S_ALR_87012333 根据‘FS00’中找到的总账科目&#xff0c;进行筛选执行 点击左上角的列表菜单&#xff0c;选择‘电子表格’导出即可

docker-compose 搭建 单机版ELK

docker-compose 搭建 单机版ELK 前言 本次部署将使用ElasticSearch官方的镜像和Docker-Compose来创建单节点的ELK&#xff0c;用于学习ELK操作。在k8s集群内&#xff0c;如果每天的日志量超过20G以上&#xff0c;建议部署在k8s集群外部&#xff0c;以支持分布式集群的架构。在…

yolov8报警图片写入minio服务器 Rabbitmq发送地址

OSError [WinError 1455]页面文件太小&#xff0c;无法完成操作”解决方案“_深度学习_yangshejun-GitCode 开源社区 (csdn.net) python对RabbitMQ的简单使用_python rabbitmq-CSDN博客 【Windows安装RabbitMQ详细教程】_rabbitmq windows-CSDN博客 Windows 10安装Minio 文件…

以前:不会用电脑;现在:不会用AI

购买特价商务机票需要一些策略和灵活性。、 提前规划&#xff1a;商务舱票价通常在出发日期的2-3个月前最便宜。尽早规划您的行程并开始关注票价。 使用比价工具&#xff1a;使用Skyscanner、Kayak等比价网站来比较不同航空公司的商务舱票价。这些网站可以显示多个航空公司的价…

IOT技术怎么落地?以宝马,施耐德为例

物联网技术 物联网&#xff08;IoT&#xff09;技术正逐渐成为数字化工厂转型的核心驱动力。本文将通过实际案例&#xff0c;探讨IoT技术如何促进制造业的数字化转型&#xff0c;提高生产效率&#xff0c;降低成本&#xff0c;并提升产品质量。 1. 物联网技术简介 物联网技术通…

Vue项目如何进行XSS防护

前言 在目前主推网络安全的情况下&#xff0c;很多开发项目都需要在上线前进行渗透测试&#xff0c;当符合渗透测试标准及没有安全漏洞即可正常上线&#xff0c;当前还会有代码审计的&#xff0c;这个另当别论。 如何对XSS进行防护 在很多的富文本编辑器项目中&#xff0c;x…

gcc g++不同版本切换命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切换 gcc/g 版本_ubuntu降低g版本-CSDN博客

MDK安装

MDK安装 1 MDK的差异2 切换MDK3 安装芯片支持包注意点 1 MDK的差异 不同版本MDK有略微的差别&#xff0c;比如&#xff1a;MDK536.EXE&#xff0c;支持版本5的交叉编译链。如下图所示&#xff1a; 而MDK539.EXE不支持版本5的交叉编译链&#xff0c;所以工作的时候&#xff0c…

是的,我换logo了!

大家好&#xff0c;我是记得诚。 当你收到推文的时候&#xff0c;会发现记得诚换logo了&#xff01; 之前是这样的。 现在是这样的。 这个新logo&#xff08;头像&#xff09;是2年前在淘宝上请人做的&#xff0c;价值37人民币&#xff0c;但一直没有换上。当时还发了一个朋友…

netcat一键开始瑞士军刀模式(KALI工具系列六)

目录 1、KALI LINUX简介 2、netcat工具简介 3、在KALI中使用netcat 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、命令示例 4.1 测试某IP的端口是否打开 4.2 TCP扫描 4.3 UDP扫描 4.4 端口刺探 4.5 直接扫描 5、即时通信 5.1 单击对话互联 5.2 传…

初中英语优秀作文分析-002Who stole the cupcake-谁偷了纸杯蛋糕?

更多资源请关注纽扣编程微信公众号 记忆树 1 One Sunday afternoon, Leslie was at home with her kids, 3-year-old Angel, 6-year-old Carl, and 7-year-old Tony. 翻译 一个周日的下午&#xff0c;Leslie和她的孩子们在家&#xff0c;他们是3岁的Angel&#xff0c;6岁的…

告别红色波浪线:tsconfig.json 配置详解

使用PC端的朋友&#xff0c;请将页面缩小到最小比例&#xff0c;阅读最佳&#xff01; tsconfig.json 文件用于配置 TypeScript 项目的编译选项。如果配不对&#xff0c;就会在项目中显示一波又一波的红色波浪线&#xff0c;警告你这些地方的类型声明存在问题。 一般我们遇到这…

[LDAP: error code 34 - invalid DN]

目前我的项目版本&#xff1a; Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.InvalidNameException: [LDAP: error code 34 - invalid DN]; nested exception is javax.naming.InvalidNameException: [LDAP: error code 34 - invalid DN]at org.s…

STM32—HAL-PWM-舵机180(每个频率对应每个角度)

1开启时钟 2开启定时器和通道设置为PWM模式 3将定时时间设置为50Hz(20ms)//每25为1ms 4代码编写 4.1开启PWM 4.2改PWM的占空比 4.3效果0~180度在0度 源码 /* USER CODE BEGIN Header */ /******************************************************************************…

OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期

数据库作为绝大多数应用系统储存数据的核心系统&#xff0c;在用户系统需要访问数据时&#xff0c;有着至关重要的作用。在这些交互中&#xff0c;SQL 语言是应用与数据库系统之间“沟通”的桥梁&#xff0c;它负责将应用的指令传达给数据库。因此&#xff0c;SQL 的性能好坏直…

SHAP值加持医学独立危险因素鉴定分析

SHAP值加持医学独立危险因素鉴定分析 医学独立危险因素鉴定是医学数据分析中的重要形式&#xff0c;旨在从众多临床因素中识别出对临床结局产生重大影响的因素&#xff0c;并通过干预这些因素来改善临床结果。例如&#xff0c;通过识别吸烟是肺癌的危险因素&#xff0c;倡导戒…

【数学代码】求两点之间的距离

Hello&#xff01;大家好&#xff0c;今天讲讲求两点之间的距离。 已知点A的坐标为&#xff08;x1,y1&#xff09;,点B的坐标为&#xff08;x2,y2&#xff09;&#xff0c;求两点之间的直线距离。 首先&#xff0c;我先讲明&#xff0c;要解决这个问题&#xff0c;需要用到勾…

信息学奥赛初赛天天练-12-数论-整除问题

更多资源请关注纽扣编程微信公众号 整除的性质 1 整除性 若 &#x1d44e; 和 &#x1d44f; 都为整数&#xff0c; &#x1d44e; 整除 &#x1d44f; 是指 &#x1d44f; 是 &#x1d44e; 的倍数&#xff0c;&#x1d44e; 是 &#x1d44f; 的约数&#xff08;或者叫 因…