PCIe学习笔记(19)

news/2024/9/23 5:03:04/

TLP Prefix(前缀)规则

以下规则适用于任何包含TLP Prefix的TLP:

•对于任何TLP, TLP第0字节的Fmt[2:0]字段值为100b表示存在TLP Prefix, Type[4]位表示TLP Prefix的类型。

◦Type[4]位的值为0b表示存在Local TLP Prefix

◦Type[4]位的值为1b表示存在End-End TLP Prefix

•TLP Prefix的第1到第3字节的格式由其TLP Prefix类型定义。

包含TLP前缀的TLP必须有一个底层的TLP报头。收到的违反此规则的TLP将作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

允许一个TLP包含多个任何类型的TLP前缀(那么Type字段怎么标?)

◦当TLP中存在Local和End-End TLP前缀的组合时,需要所有Local TLP前缀位于任何End-End TLP前缀之前。收到的违反此规则的TLP将作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

•每个TLP前缀的大小为1DW。可以重复使用TLP前缀,以便为附加数据提供空间。

Local TLP Prefix Processing

•本地TLP前缀类型由Type字段的L[3:0]子字段确定;

Type[4]必须为0b;

◦本地TLP前缀L[3:0]的定义如表2-36所示

大小、路由和流量控制规则根据不同的Local TLP Prefix类型而不同

•接收到不支持的本地TLP前缀类型的TLP是一个错误。如果设置了扩展Fmt字段支持位,除非在另一规格中明确另有规定,违反此规则的TLP将被视为畸形TLP。这是一个与接收端口相关联的报告错误(见第6.2节)。如果清除了扩展Fmt字段支持位,行为是设备定义的。

•,即使底层TLP受ECRC保护,没有本地TLP前缀受ECRC保护。(这个主要是和End-End TLP前缀的区别

Vendor Defined Local TLP Prefix

VendPrefixL0”和“VendPrefixL1”类型保留作为厂商自定义的本地TLP前缀。为了最大限度地提高互操作性和灵活性,以下规则应用于这些前缀:

•组件不得发送包含供应商定义的本地TLP前缀的TLP,除非已明确启用(使用供应商特定的机制)。

•支持任何供应商定义的本地TLP前缀的组件必须支持Fmt字段的3位定义,并具有扩展Fmt字段支持位集。

•建议组件是可配置的(使用供应商特定的机制),以便所有供应商定义的前缀都可以使用两种供应商定义的本地TLP前缀编码中的任何一种发送。这样的配置不必是对称的(例如,链路的每一端可以使用不同的编码传输相同的前缀)。

End-End TLP Prefix Processing

•End-End TLP前缀类型由Type字段的子字段E[3:0]确定

Type[4]必须为1b

◦End-End TLP前缀E[3:0]的值定义如表2-37所示

•在一个TLP中允许的最大End-End TLP前缀数为4:

◦支持TLP前缀的Receiver必须检查此规则。如果接收方认定该TLP违反了此规则,则该TLP为畸形TLP。这是一个与接收端口相关的报告错误。

•End-End TLP前缀的存在不会改变该TLP的路由。

•功能通过Device Capabilities 2寄存器中的Max End-End TLP Prefixes字段表示它们支持多少个End-End TLP前缀。

◦对于RC,允许Max End-End TLP前缀字段返回一个值,表示支持比根端口硬件实际实现的更少的End-End TLP前缀;但是,错误处理语义仍然必须基于字段中包含的值。收到的TLP包含的End-End TLP前缀数超过根端口支持的数目时,处理方法如下。建议将请求作为不受支持的请求处理,否则它们必须作为畸形的tlp处理。建议将Completions作为意外Completions处理,否则必须作为畸形tlp处理。对于入端口收到的TLPs,这是一个与入端口相关的报告错误。对于内部接收到的要从出口端口发送出去的tlp,这是一个与出口端口相关的报告错误。

◦对于所有其他功能类型,收到的TLP包含更多的End-End TLP前缀,而不是一个功能所支持的,必须作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

•如果设置了End-End TLP前缀支持位,SW必须支持转发最多4个End-End TLP前缀的TLP

•不同根端口的End-End TLP前缀支持位集允许报告不同的最大End-End TLP前缀值。

•如果底层TLP受ECRC保护,则所有End-End TLP前缀都受ECRC保护。

•接收不支持End-End TLP前缀的接收器收到带有End-End TLP前缀的TLP会出错。违反此规则的TLP将作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

软件应确保包含End-End TLP前缀的TLP不会发送到不支持它们的组件。扩展Fmt字段支持位为Clear的组件可能会误认为包含TLP前缀的TLP。

•如果上游端口的某个功能设置了End-End TLP前缀支持位,则该上游端口的所有功能都必须将收到的包含不支持的End-End TLP前缀类型的请求作为不支持的请求处理(UR)。这是一个与接收端口相关的报告错误(参见6.2节)。

•如果上游端口的某个功能设置了End-End TLP前缀支持位,则该上游端口的所有功能都必须将收到的包含不支持的End-End TLP前缀类型的Completion处理为Unexpected Completion(UC)这是一个与接收端口相关的报告错误(参见6.2节)。

•对于路由元素,每个出口端口的End-End TLP前缀阻塞位决定包含End-End TLP前缀的TLP是否可以通过该出口端口传输。如果转发被阻断,则整个TLP被丢弃,并报告TLP Prefix blocked Error。如果被阻塞的TLP是一个Non-Posted请求,则出口端口返回一个带有Unsupported Request Completion Status的Completion。TLP前缀阻塞错误是一个与出口端口相关的报告错误(参见6.2节)。

•对于启用多播的路由元素(参见6.14节)。End-End TLP前缀在一个TLP的所有组播副本中被复制。TLP前缀Egress组播报文的阻塞在每个Egress端口独立进行。

Vendor Defined End-End TLP Prefix

“VendPrefixE0”和“VendPrefixE1”类型保留作为厂商自定义的端到端TLP前缀。为了最大限度地提高互操作性和灵活性,以下规则应用于此类前缀:

•组件不得发送包含供应商定义的End-End TLP前缀的TLP,除非已明确启用(使用供应商特定的机制)。

•建议组件可配置(使用供应商特定的机制),以使用两种供应商定义的End-End TLP前缀编码中的任何一种。这样做允许在单个PCI Express拓扑中同时使用两个不同的供应商定义的端到端TLP前缀,而不要求每个源都了解其发送的每个TLP的最终目的地。

Root Ports with End-End TLP Prefix Supported

支持根端口之间包含End-End TLP前缀的TLP对等路由是可选的,依赖于具体实现。如果RC支持两个或多个根端口之间的End-End TLP前缀路由能力,则必须通过Device Capabilities 2寄存器中的End-End TLP前缀支持位在每个关联的根端口中指出该能力。

对于所有设置了“End-End TLP前缀支持位”的根端口对,RC不需要支持End-End TLP前缀路由。带有End-End TLP前缀的请求需要在不支持的根端口对之间进行路由,必须作为UR(Unsupported Request)处理。带有End-End TLP前缀的Completion需要在不支持的根端口对之间进行路由,必须作为Unexpected Completion(UC)处理。在这两种情况下,该错误都由“发送”端口报告。

对于支持转发由主机软件或rciep (Root Complex Integrated Endpoints)发起的带有End-End TLP前缀的TLP的根端口,必须设置“End-End TLP前缀支持位”。对于支持将入端口接收到的带有End-End TLP前缀的TLP转发到rciep的根端口,必须设置“End-End TLP前缀支持位”。

设置了End-End TLP前缀支持位集的不同根端口允许报告不同的最大End-End TLP前缀值。

当RC在根端口之间进行点对点路由时,如果将一个TLP拆分为更小的TLP,则必须在每个更小的TLP中复制原TLP的End-End TLP前缀


http://www.ppmy.cn/news/1509104.html

相关文章

如何应对PCDN调度算法中的数据传输延迟问题?

针对PCDN调度算法中的数据传输延迟问题,可以采取以下应对策略: 1.优化网络基础设施: 提升服务器和网络基础设施的性能,包括增加带宽、优化路由器配置和更换高性能设备,以减少延迟。 2.使用CDN技术: 内容分发网络(CDN)可以将数据缓存在离用…

鸿蒙开发入门day05-ArkTs语言(接口与关键字)

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 ArkTS语言介绍 接口 接口属性 接口继承 泛型类型和函数 泛型…

ssh免输密码的运行方式

在使用SSH时,通过命令直接传递密码并不是一个安全的做法。但是,如果你确实需要自动化登录,可以使用sshpass工具。请注意,使用这种方法可能会暴露密码,需谨慎使用。 使用sshpass传递密码: 安装sshpass&…

java之UDP的发送数据和接收数据

public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//创建Datagramsocket对象(快递公司)//细节://绑定端口,以后我们就是通过这个端口往外发送//空参:所有可用的端…

后端如何接收前端发出的请求中的参数?

后端接收请求中的参数 1.将参数接收到后端的实体类中1.1如果前端发出的参数在URL中1.2如果前端发出的参数在请求体中 2.将URL中的单个参数绑定到后端的单个参数中 1.将参数接收到后端的实体类中 1.1如果前端发出的参数在URL中 如果前端发出的参数在URL中,你可以使…

负载均衡器:LVS、Nginx、HAproxy如何选择?

目录 根据流量(并发量)来选型LVSNginxHAProxy总结参考 实际应用中,Web 服务器集群的上层要有一台负载均衡服务器,负载均衡设备的任务就是作为 Web 服务器流量的入口,挑选最合适的一台 Web 服务器,将客户端的…

记录|C#主界面设计【Web风格】

目录 前言一、页面效果二、布局设计2.1 左边菜单栏搭建框架Step1. panelMenu :Step2. panelLogoStep3. button模板Step4. 复制buttonStep5. 微调Button 2.2 界面颜色变换Step1. ThemeColor类Step2. From1.csStep3. 更换按钮点击颜色效果 2.3 按钮点击事件2.4 顶部ti…

Unity 编写自己的aar库,接收Android广播(broadcastReceiver)并传递到Unity

编写本文是因为找了很多文章,都比较片段,不容易理解,对于Android新手来说理解起来不友好。我这里写了一个针对比较小白的文章,希望有所帮助。 Android端 首先还是先来写Android端,我们新建一个Android空项目&#xf…