路由和寻址规则
TLP路由有三种主要机制:地址、ID和隐式路由。
基于地址的路由规则
•地址路由用于内存和I/O请求。
•指定了两种地址格式,64位格式使用4 DW报头,32位格式使用3 DW报头
对于Memory Read、Memory Write和AtomicOp请求,地址类型字段的编码如下所示。对于所有其他请求,除非另有明确说明,否则AT字段是保留的。LN读和LN写有特殊要求。
•当“TH”为“Set”时,PH字段编码如表2-15所示。TH为Clear,表示PH字段为Reserved。
•TLP报头的地址映射如下表所示。
•内存读、内存写和AtomicOp请求可以使用任意一种格式。
◦对于4GB以下的地址,请求者必须使用32位格式。如果接收到地址低于4GB的64位格式请求(即地址的上32位全为0),则不指定接收方的行为。
•I/O读请求和I/O写请求使用32位格式。
•所有代理必须解码报头中的所有地址位-地址混叠是不允许的。
基于ID的路由规则
•ID路由使用Bus、Device和Function Number(根据需要)来指定TLP的目的地址:
◦对于非ari路由ID, Bus、Device和(3-bit) Function Number到TLP报头的映射如下所示。
•指定两种ID路由格式,一种是4DW,另一种是3DW
◦对于ARI路由id, Bus和(8位)Function Number到TLP报头的映射如下所示。(只有Bus和Function Number,无Device Number)
非ARI与ARI设备
Alternative Routing-ID Interpretation(ARI),一种要把Routing ID的部分或全部替换掉的机制。我们常说的BDF由Bus Number, Device Number, Function Number 3个字段组成,其中总线号Bus Number 8-bit,设备号Device Number 5-bit,功能号Function Number 3-bit,一共16-bit。即最多支持256个Bus、32个Device及8个Function。由于PCIe采用端到端的传输方式,每一个链路仅挂载一个设备,Device数量为1,Device Number恒为0,采用5-bit宽的Device Number没有意义;此外3-bit Function Number最高支持8个Function,对有多个VM的SR-IOV系统而言,8个Function稍显不足。
基于以上原因,PCIe Gen3提供了一种ARI机制,取消了Device Number字段,合并到Function Number字段中,这样Routing ID便变成了8-bit Bus Number + 8-bit Function Number的格式,最多支持的Bus数量不变,支持的Function数量增大到256个。另须注意:ARI扩展能力结构仅适用于Device,不适用于RP、Switch下行端口、RCiEP、RC事件收集器等。
此处参考:https://blog.csdn.net/weixin_40357487/article/details/120533638
详情可查阅原文。