【credit_based流控机制】

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电商API接口(api商品数据)【电商商品实时数据采集API接口】

众多品牌选择电商API实时数据采集接口进行采购&#xff0c;主要是出于以下几个重要原因&#xff1a; 第一&#xff0c;高效便捷。比价工具通过自动化的方式获取价格信息&#xff0c;避免了繁琐的人工操作&#xff0c;大大节省了时间和精力。 第二&#xff0c;精准比较。API比价…

常见的CSS布局

1 左侧固定宽度&#xff0c;右侧自适应宽度的两列布局实现 HTML: <div className"outer"><div className"left">固定宽度</div><div className"right">自适应宽度</div></div> 方法1&#xff1a;左侧div设…

美发店服务预约会员小程序的作用是什么

美发店不同于美容美甲&#xff0c;男女都是必需且年龄层几乎不限&#xff0c;商家在市场拓展时只要方法得当相对比较容易&#xff0c;当今客户适应于线上信息获取、咨询及实际内容开展&#xff0c;商家也需要赋能和提升自身服务效率&#xff0c;合理化管理。 运用【雨科】平台…

C语言基础(六)

C语言基础 指针与一维数组总结 * p、* (p)、&#xff08;\*p&#xff09;、* p、*(p)、*p区别和用法运算优先级p与p区别*p与 *&#xff08;p&#xff09;与&#xff08;*p&#xff09;*p与 *&#xff08;p&#xff09;与 *p 指针常量与一维数组的关系指针变量与一维数组的关系数…

002 仿muduo库实现高性能服务器组件_整体框架

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言项目框架小结 前言 本文不会包含任何项目模块的代码&#xff0c;旨在向你介绍项目具体分为哪几个模块&am…

文档档案管理系统整体建设方案书(实际项目原件word2024)

1.系统概述 1.1.需求描述 1.2.需求分析 1.3.重难点分析 1.4.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 数据备份技术 3.系统功能设计 3.1.功能清单列表 3.2.基础数据管理 3.3.位置管理 3.4.文档使用 3.5.文档管理 软件全套资料包获取方式①&#xff1a;软件项…

揭秘 淘宝死店采集私信筛选,号称日赚500+

淘宝死店采集工具为电子商务创业者揭示了一个领域的新机遇&#xff0c;通过提供一系列深入分析和资源挖掘的功能&#xff0c;展现了从失败中寻找成功之道的独特方法论。以下是如何通过这种工具寻找电商平台中的隐含机会的几个关键方面&#xff1a; 分析失败的深层原因&#x…

【启程Golang之旅】深入解析函数的奥秘与技巧

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

html5+css3+js学习记录(1)-- html

1 vscode前端插件 1.1 Web标准 2 文档声明与字符编码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

【全开源】海报在线制作系统源码(ThinkPHP+FastAdmin+UniApp)

打造个性化创意海报的利器 引言 在数字化时代&#xff0c;海报作为一种重要的宣传媒介&#xff0c;其设计质量和效率直接影响着宣传效果。为了满足广大用户对于个性化、高效制作海报的需求&#xff0c;海报在线制作系统源码应运而生。本文将详细介绍海报在线制作系统源码的特…

【电子元件】TL431 电压基准

TL431(C23892)是一种常用的可调节精密电压基准和电压调节器。它广泛应用于电源管理、精密参考电压和稳压电路等领域。以下是TL431的一些关键特点和使用方法&#xff1a; 关键特点 可调输出电压&#xff1a;TL431的输出电压可以通过外部电阻网络在2.495V到36V范围内调整。精度高…

【知识图谱】探索攻略:基础、构建、高级应用与相关论文方向

【知识图谱】相关文章汇总 写在最前面一、什么是知识图谱&#xff1f;二、相关历史文章代码实现&#xff1a;简单的知识图谱可视化知识图谱前身&#xff1a;信息抽取知识图谱应用1&#xff1a;社交网络分析知识图谱应用2&#xff1a;威胁情报挖掘知识图谱应用3&#xff1a;Code…

当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

人类最友好语言? YAML 深入解析:从语法到最佳实践

什么是YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。YAML采用了一种简洁、直观的语法&#xff0c;以易于阅读和编写的方式表示数据结构。 YAML广泛应用于配置文…

Elasticsearch的Index sorting 索引预排序会导致索引数据的移动吗?

索引预排序可以确保索引数据按照指定字段的指定顺序进行存储&#xff0c;这样在查询的时候&#xff0c;如果固定使用这个字段进行排序就可以加快查询效率。 我们知道数据写入的过程中&#xff0c;如果需要确保数据有序&#xff0c;可能需要在原数据的基础上插入新的数据&#…

Youngter-drive

BUUCTF逆向题Youngter-drive-CSDN博客 逆向每日一题----Youngter-drive题解-CSDN博客 借鉴博客,写得比我好 upx拖壳 upx -d Youngter-drive.exe 这道题我不知道为什么,我这里是运行不了的,也没有找到原因 int __cdecl main_0(int argc, const char **argv, const char **env…

进程信号(1)

目录 一、信号 1.1、生活中的信号 1.2、Linux中的信号 二、信号处理常见方式 三、信号的产生 3.1、简单理解信号的保存和发送 3.2、键盘产生信号 3.3、核心转储 3.4、系统调用接口产生信号 3.4.1、kill 3.4.2、raise 3.4.3、abort 3.5、软件条件产生信号 3.6、硬…

网络编程-TCP

一、TCP的相关IP 1.1 SeverSocket 这是Socket类,对应到网卡,但是这个类只能给服务器使用. 1.2 Socket 对应到网卡,既可以给服务器使用,又可以给客户端使用. TCP是面向字节流的,传输的基本单位是字节. TCP是有连接的,和打电话一样,需要客户端拨号,服务器来听. 服务器的内核…

【Linux】为 VMware 的 Linux 系统(CentOS 7)设置静态IP地址

文章目录 准备工作查看 子网掩码 和 网关IP确认准备设置的虚拟机端口没有被占用 调整设置编辑配置文件配置文件说明 完成配置&#xff0c;准备测试使用命令终端连接服务器 我是一名立志把细节说清楚的博主&#xff0c;欢迎【关注】&#x1f389; ~ 原创不易&#xff0c; 如果有…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下&#xff0c;上层应用接收到的外部请求后开始处理其当前步骤的操作&#xff0c;在执行完成后将已经完成的操作发送至指定的频道(channel)当中&#xff0c;并由其下层的应用监听…