【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;//Initalalways@(posedge clk or negedge rst_n) beginif(!rst_n) begincrdt_cnt <= 0;end else begincrdt_cnt <= nxt_crdt_cnt;end
endalways@(*) beginif(send && !taken && (crdt_cnt != (1<<WIDTH) -1)) beginnxt_crdt_cnt = crdt_cnt + 1;end else if(!send && taken && (crdt_cnt!=0)) beginnxt_crdt_cnt = crdt_cnt - 1;end
endalways@(posedge clk or negedge rst_n) beginif(nxt_crdt_cnt < crdt_limit) beginhas_crdt <= 1'b1;crdt_left<= crdt_limit - nxt_crdt_cnt;end else beginhas_crdt <= 1'b0;crdt_left<= 0;end
endendmodule

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

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

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

相关文章

idea、datagrip注册记录下

一、DataGrip注册 DataGrip版本号&#xff1a;DataGrip 2023.2 访问地址&#xff1a;https://3.jetbra.in/ 点击“hardbin.com”&#xff0c;下载“jetbra.zip” 在vm里面添加上&#xff1a; -javaagent:D:\work\idea\jetbra\ja-netfilter.jarjetbrains重启datagrip 在刚刚…

英飞凌24GHz毫米波雷达-BGT24LTR11N16家用机器人应用

BGT24LTR11N16基础描述&#xff1a; 关于BGT24LTR11N16&#xff0c;它是一款用于信号生成和接收的硅锗雷达MMlC&#xff0c;工作频率为24.00GHz至24.25GHz ISM频段。它基于24GHz基本电压控制振荡器&#xff08;VCO&#xff09;。 这颗芯片是属于1T1R&#xff0c;也就是一发一收…

真实机安装完Centos7没有网卡驱动,ifconfig后,只有lo

文章目录 前言一、1查看网卡型号2 下载相应的驱动程序3、参考官方说明 二、总结 前言 参考1 参考2](https://blog.csdn.net/weixin_46945904/article/details/136365222?spm1001.2101.3001.6650.2&utm_mediumdistribute.pc_relevant.none-task-blog-2defaultYuanLiJiHuaP…

检索字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字符串对象提供了很多应用于字符串查找的方法&#xff0c;这里主要介绍以下几种方法。 &#xff08;1&#xff09;count()方…

【busybox记录】【shell指令】rmdir

目录 内容来源&#xff1a; 【GUN】【rmdir】指令介绍 【busybox】【rmdir】指令介绍 【linux】【rmdir】指令介绍 使用示例&#xff1a; 删除空目录 - 默认 删除dirname下的所有空目录&#xff0c;包括因删除其他目录而变为空的目录 常用组合指令&#xff1a; 指令不…

多激光雷达ip与端口配置

首先是雷达的ip 我们连上雷达&#xff0c;想要进入雷达的上位机的时候&#xff0c;需要对本机ip进行一些配置&#xff1a; 第一个是ip&#xff0c;第二个是掩码&#xff0c;第三个是网关。 其中ip可以通过wireshark来进行读取&#xff0c;一般就是192.168.102(雷达默认) 然后掩…

自定义数据集上的3D目标检测:使用OpenPCDet训练CenterPointPillar模型

前言 在自动驾驶和机器人领域&#xff0c;3D目标检测是关键技术之一。它能够提供关于周围环境中物体的精确位置和尺寸信息。OpenPCDet是一个基于PyTorch的开源3D目标检测框架&#xff0c;支持多种3D检测网络。在本文中&#xff0c;我们将探讨如何使用OpenPCDet框架和CenterPoi…

树莓派4B 学习笔记1:TF卡系统盘烧录_初次启动_远程端连接配置

今日开始学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; TF卡系统盘烧录_初次启动_远程端连接配置 目录 格式化SD卡&#xff1a; 烧录系统Win32DiskImager&#xff1a; Raspberry Pi Imager镜像烧写&#xff1a; 树莓派官网资料…

合约之间调用-如何实现函数静态调用?

合约之间的函数调用 EOA&#xff0c;external owned account&#xff0c;外部账号&#xff0c;例如metamask调用最终总是由EOA发起的合约之间的调用使得一次完整的调用成为一个调用链条 合约间调用过程 调用者须持有被调用合约的地址得到被调用合约的信息将地址重载为被调用合…

使用swagger2做测试,报java.lang.NumberFormatException: For input string: ““ 的异常

文章目录 一、问题描述二、原因分析三、解决方案3.1、方案一&#xff1a;手动添加example值&#xff08;费时费力不推荐&#xff09;3.2、方案二&#xff1a;导入1.5.21(及之后)版本的swagger-models&#xff08;推荐&#xff09; 本文基于swagger2.9.2进行讲解 <!--swagge…

HTTP Digest Access Authentication Schema

HTTP Digest Access Authentication Schema 背景介绍ChallengeResponse摘要计算流程总结参考 背景 本文内容大多基于网上其他参考文章及资料整理后所得&#xff0c;并非原创&#xff0c;目的是为了需要时方便查看。 介绍 HTTP Digest Access Authentication Schema&#xff…

基础—SQL—DQL(数据查询语言)基础查询

一、引言 1、介绍&#xff1a; 分类全称描述DQL英文全称&#xff1a;Data Query Language(数据查询语言)主要是学习对数据库表中的记录进行查询的语句 2、讲解 日常的开发中或者对于一个正常的业务系统中&#xff0c;对于查询的操作次数是远远多于数据的增删改的频次。例如…

哪里能下载到合适的衣柜3D模型素材?

室内设计师在进行家居设计时&#xff0c;衣柜3D模型素材是非常重要的工具。那么&#xff0c;哪里能下载到合适的衣柜3D模型素材呢? 一、建e网&#xff1a; ①建e网是一个专注于3D模型素材分享的平台&#xff0c;上面可以找到大量的衣柜3D模型。 ②该网站提供的模型种类丰富&am…

Remix IDE 创建和部署第一个合约HelloWorld

Remix IDE 地址 https://remix.ethereum.org/ 流程步骤&#xff1a; 创建一个新文件 输入文件名保存 在文件资源管理器中&#xff0c;点击新建文件图标创建一个新文件&#xff0c;并给它命名。在 Remix 中&#xff0c;默认的文件扩展名是 .sol &#xff0c;如果文件名没有…

外企如何有效面对日益严格的跨境数据传输法律?

在当今这个数据驱动的时代&#xff0c;随着全球化步伐的加快&#xff0c;企业跨国界的数据交流已成为常态。但随之而来的&#xff0c;是各国政府对跨境数据传输日益严格的规定和监管&#xff0c;这让众多外资企业&#xff08;简称“外企”&#xff09;在享受全球市场红利的同时…

Spring Cache自定义缓存key和过期时间

一、自定义全局缓存key和双冒号替换 使用 Redis的客户端 Spring Cache时&#xff0c;会发现生成 key中会多出一个冒号&#xff0c;而且有一个空节点的存在。 查看源码可知&#xff0c;这是因为 Spring Cache默认生成key的策略就是通过两个冒号来拼接。 同时 Spring Cache缓存…

Kong网关的负载均衡

安装java环境 查询 java安装包 196 yum list java* 安装java8197 yum install -y java-1.8.0-openjdk.x86_64 检验java8是否安装成功。198 java -version2个tomcat准备 另外一个tomcat区别在于&#xff1a;配置文件。conf/server.xml 启动tomcat [rootlocalhost bin]# ./…

C++之单链表与双链表逆序实例(二百七十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

拥塞控制的微观行为与力学解释

本文以 tcptrace 图为基&#xff0c;描述传输的微观行为&#xff0c;并给出一个初中几何描述的压水井模型。 统计复用网络的拥塞控制&#xff0c;宏观看 inflight&#xff0c;微观看 pacing rate&#xff0c;宏观大方向不对&#xff0c;微观再正确也不行。 而网络的统计动力学…

AI 驱动的低代码平台-网易CodeWave 低代码平台 AI 智能化实践

一、实践背景&#xff1a; 随着低代码赛道的蓬勃发展&#xff0c;越来越多的低代码产品如雨后般春笋涌出开始进入市场&#xff0c;面对市场的考验&#xff0c;低代码平台也在面临两大问题&#xff1a; 定制开发的使用门槛太高&#xff0c;效率太低。低代码产品进入到企业当中…