PCIe 6.0为什么需要14-bit tag

1.TLP中的tag是什么   

在PCIe TLP(Transaction Layer Packet)中,tag是分配给特定Non-Posted Request的编号,协议要求CPL/CPLD中的tag 与对应non-post request TLP中的tag保持一致,因此Requester可以使用tag来识别CPL/CPLD是哪个请求对应的完成报文。

图片

图片

图1 memory请求头格式

如图1(PCIe 5.0协议图2-17和图2-18)所示,当时使用10-bit tag时,{T9,T8,Tag[7:0]}组成10-bit tag。  

2.tag size 随着PCIe速率的变化  

如果tag数量不足时,则function不允许发送Non-Posted Request,直到之前发起的Non-Posted Request对应的CPL/CPLD返回完成tag回收。

随着PCIe速率的提升,为了能够发挥最佳性能,tag size不断在增加,从8-bit tags、10-bit tags增加到14-bit tags。

          

PCIe 版本

可使用的最大tag size

PCIe 1.0

8-bit tags

PCIe 2.0

8-bit tags

PCIe 3.0

8-bit tags

PCIe 4.0

10-bit tags

PCIe 5.0

10-bit tags

PCIe 6.0

14-bit tags

PCIe 6.0 速率提升到64GT/s,为了保证PCIe系统中实现最佳性能,设计人员需要不同round trip time (RTT)的场景下评估所需的outstanding non-posted requests (NPR)最大数量。round trip time (RTT)即往返时间,是PCIe设备从发起non-posted requests开始到接收到CPLD/CPL的时间间隔。随着RTT的增加,必须保证有足够的outstanding non-posted requests,否则数据路径将会存在空拍气泡,无法保证最佳性能。    

图2描述了PCIe 4.0, 5.0 and 6.0 在不同round-trip times场景中所需要的tag数量。例如,在RTT为1000ns,16Lane的场景中,Gen4 所需要的tag数量大于10-bit tag limit(768),而在此场景中,Gen4所需要的tag数量大于3500。

可能有同学会说PCIe链路本身的延时并不大,远远不到1000ns,是的如果仅仅考虑PCIe 物理层、链路层、事务层的逻辑确实延时有限,在200ns以内。但是考虑到多级PCIe Switch转发延时,主机内部存储读取延时,MMC地址转换延时等等,平均RRT时间会明显大于200ns。

图片

图2 Number of tags needed to achieve maximum throughput for PCIe 4.0 through PCIe 6.0 links      

3.tag size的使用要求  

对于tag size的使用,PCIe 6.0提出了明确的要求:

l所有的function必须支持8-Bit Tag Completer capability.

l支持16.0 GT/s及其以上速率的function必须支持10-Bit Tag Completer capability.

l支持14-Bit Tag Requester capability的前提是必须支持14-Bit Tag Completer capability.

l支持10-Bit Tag Requester capability的前提是必须支持10-Bit Tag Completer capability.

l14-Bit Tags,Tag[13:8]等于6’b0是不合法的数值,Tag[13:8]不等于6’b0是合法数值,即Requester不允许使用数值为0~255的tag。

l10-Bit Tags,Tag[9:8]等于2’b0是不合法的数值,Tag[9:8]不等于2’b0是合法数值,即Requester不允许使用数值为0~255的tag。    

          

4.tag size相关的配置寄存器  

8-Bit Tags和10-Bit Tags相关的配置寄存器均在PCI Express Capability Structure中,而14-Bit Tags相关的配置寄存器均Device 3 Extended Capability Structure中。

相关字段详细描述见本章节截图(截图来自PCI Express® Base Specification Revision 6.2 )

4.1.Extended Tag Field Supported  

图片

图片

4.2.Extended Tag Field Enable  

图片

          

图片

    

4.3.10-Bit Tag Completer Supported 与10-Bit Tag Requester Supported

图片

  

图片

4.4.10-Bit Tag Requester Enable  

图片

图片

4.5.14-Bit Tag Completer Supported 与14-Bit Tag Requester Supported  

              

图片

          

图片

图片

图片

4.6.14-Bit Tag Requester Enable  

图片

图片

    

5.不同tag size的组合  

图片

表2-11显示了三个标签使能位如何确定不同Completers和其相关路径的最大tag大小和允许的标签值范围。对于给定的tag使能设置组合,Requester必须使用在完成者和其相关路径的标签能力对应的允许范围内的标签值。

l当前14-bit Tag Requester Enable、10-bit Tag Requester Enable 、Extended Tag Field Enable分别为0、0、0时,最大tag size为5,此时Requester发送TLP时能使用的tag 范围为0~31

l当前14-bit Tag Requester Enable、10-bit Tag Requester Enable 、Extended Tag Field Enable分别为1、1、1时,最大tag size为14bits,如果使用8-bit Tag,则Requester发送TLP能使用的tag 范围为0~255,如果使用10-bit Tag,则Requester发送TLP能使用的tag 范围为256~1023,如果使用14-bit Tag,则Requester发送TLP能使用的tag 范围为1024~16383,

在表格2-11中可以看出,当存在多个Tag Requester Enable为1时,协议将tag范围进行了划分,其中0~255划分给了8-bit Tag,其中256~1023划分给了10-bit Tag,其中1024~16383划分给了14-bit Tag。此种设计的优点很明显,Requester发送memrd请求后收到CPLD时,能够根据CPLD的tag数值判断CPLD是否有效。例如Requester使用的是14-bit Tag,允许的tag 范围为1024~16383,协议要求Completer返回的CPLD中的tag与memrd中的tag保持一致,但是收到的CPLD数值小于1023,此时判断CPLD无效。          

6.参考文档 

PCIe 6.0 Designs at 64GT/s with IP | DesignWare IP | Synopsys

PCI Express® Base Specification Revision 6.2

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

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

相关文章

免费【2024】springboot 趵突泉景区的智慧导游小程序

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

十、SpringBoot 统⼀功能处理【拦截器、统一数据返回格式、统一异常处理】

十、SpringBoot 统⼀功能处理 1. 拦截器【HandlerInterceptor、WebMvcConfig】1.1 拦截器快速⼊⻔⾃定义拦截器:实现HandlerInterceptor接⼝,并重写其所有⽅法注册配置拦截器:实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法…

堆(c++)

堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。 堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。 常见的堆有二叉堆、斐波那契堆等。 堆是非线性数据结构&#…

初识C++ · map和set的使用

目录 前言: 1 set 2 map 前言: 在前面阶段,我们已经学习了stl里面的部分容器,比如vector,list,deque等,这些容器都被称为序列式容器,也就是每个值之间式没有关联的,那么今天介绍的容器&…

IGV.js | 载入自己下载的gtf文件

1.安装 htslib-1.20 https://www.htslib.org/doc/tabix.html J3$ cd ~/Downloads/ $ wget https://github.com/samtools/htslib/releases/download/1.20/htslib-1.20.tar.bz2 $ tar jxvf htslib-1.20.tar.bz2编译安装: $ cd htslib-1.20/ $ ./configure --prefix/…

vue的三大核心知识点

响应式: 监听data属性getter setter(包括数组)模板编译: 模板到render函数再到vnodevdom: patch(elem, vnode)和patch(vnode, newVnode) vue组件初次渲染过程 解析模板为render函数(或在开发环境已完成,vue-loader&a…

WIX Toolset 3.11 对本地化的支持方案

1.准备主题文件和本地化文件 WIX Toolset种主题文件为xml文件,负责配置控件的布局, 本地化文件为wxl文件,负责配置待加载的字符串,主题文件根据ID加载需要显示的文字内容。考虑到英文和中文字符长度大小不一,所以这里…

渗透测试——prime1靶场实战演练{常用工具}端口转发

文章目录 概要信息搜集 概要 靶机地址:https://www.vulnhub.com/entry/prime-1,358 信息搜集 nmap 扫网段存活ip及端口 找到除了网关外的ip,开放了80端口,登上去看看 是一个网站,直接上科技扫一扫目录 python dirsearch.py -u …

尝试带你理解 - 进程地址空间,写时拷贝

序言 在上一篇文章 进程概念以及进程状态&#xff0c;我们提到了 fork 函数&#xff0c;该函数可以帮我们创建一个子进程。在使用 fork 函数时&#xff0c;我们会发现一些奇怪的现象&#xff0c;举个栗子&#xff1a; 1 #include <stdio.h>2 #include <unistd.h>3 …

跟《经济学人》学英文:2024年07月20日这期 The Russell 2000 puts in a historic performance

Why investors have fallen in love with small American firms The Russell 2000 puts in a historic performance 罗素2000指数&#xff1a; 罗素2000指数&#xff08;英语&#xff1a;Russell 2000 Index&#xff09;为罗素3000指数中收录市值最小的2000家&#xff08;排序…

学习笔记 韩顺平 零基础30天学会Java(2024.7.25)

P425 枚举类引出 举了一个例子&#xff0c;季节类创建对象&#xff0c;但是根据Java的规则&#xff0c;可以设置春夏秋冬以外的对象&#xff0c;而且可以修改&#xff0c;这样就会不符合实际&#xff0c;因此引出枚举 P426 自定义枚举类 1.构造器私有化&#xff0c;使外面没有办…

深入解析 GPT-4o mini:强大功能与创新应用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

C++ 列式内存布局数据存储格式 Arrow

Apache Arrow 优点 : 高性能数据处理&#xff1a; Arrow 使用列式内存布局&#xff0c;这特别适合于数据分析和查询操作&#xff0c;因为它允许对数据进行高效批量处理&#xff0c;减少CPU缓存未命中&#xff0c;从而提升处理速度。 零拷贝数据共享&#xff1a; Arrow …

【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常

问题现象 客户的java日志中有如下异常信息&#xff1a; 问题的风险及影响 对正常的业务流程无影响&#xff0c;但是影响druid的merge sql功能&#xff08;此功能会将sql语句中的字面量替换为绑定变量&#xff0c;然后将替换以后的sql视为同一个&#xff0c;然后用做执行性能统…

Vue3扁平化Tree组件的前端分页实现

大家好&#xff0c;我是小卷。得益于JuanTree的扁平化设计&#xff0c;在数据量很大的情况下除了懒加载&#xff0c;使用前端分页也是一种解决渲染性能问题的可选方案。 用法 要实现的文档&#xff1a; 分页效果&#xff1a; 实现 新增属性&#xff1a; 组件setup方法中新增…

程序员加班现象:成因、影响与应对策略

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 加班的成因 加班的影响 应对策略 结语 我的其他博客 前言 在现代科技行业中&#xff0c;加班现象已成为一个普遍存在的问题…

配置sublime的中的C++编译器(.sublime-build),实现C++20

GCC 4.8: 支持 C11 (部分) GCC 4.9: 支持 C11 和 C14 (部分) GCC 5: 完全支持 C14 GCC 6: 支持 C14 和 C17 (部分) GCC 7: 支持 C17 (大部分) GCC 8: 完全支持 C17&#xff0c;部分支持 C20 GCC 9: 支持更多的 C20 特性 GCC 10: 支持大部分 C20 特性 GCC 11: 更全面地支持 C20 …

ES中的数据类型学习之ARRAY

Arrays | Elasticsearch Guide [7.17] | Elastic 中文翻译 &#xff1a;Array Elasticsearch 5.4 中文文档 看云 Arrays In Elasticsearch, there is no dedicated array data type. Any field can contain zero or more values by default, however, all values in the a…

SpringBoot 自动配置原理

一、Condition Condition 是在 Spring 4.0 增加的条件判断功能&#xff0c;通过这个可以功能可以实现选择性的创建 Bean 操 作。 思考&#xff1a; SpringBoot 是如何知道要创建哪个 Bean 的&#xff1f;比如 SpringBoot 是如何知道要创建 RedisTemplate 的&#xff1f; …

mysql的B+树索引结构介绍

一、B树 特性&#xff1a; 所有的叶子结点中包含了全部关键字的信息&#xff0c;非叶子节点只存储键值信息&#xff0c;及指向含有这些关键字记录的指针&#xff0c;且叶子结点本身依关键字的大小自小而大的顺序链接&#xff0c;所有的非终端结点可以看成是索引部分&#xff0…