本文主要是介绍PCIE-TLP路由,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
TLP路由存在三种形式,基于地址、基于ID、隐式路由。
(1)关于TLP路由方式的划分:
cpl/cpld ; cfgwr/cfgrd -> ID routing
Mwr/Mrd[lock]/atomicop ; Iowr/Iord -> address routing
Msg/MsgD -> 三种均可
(2)关于posted/non-posted
mwr/message -> posted
其他 -> non-posted
(3)3DW/4DW
ID路由:仅message路由中出现4DW;
地址路由:
Memory请求的目标地址小于4GB(32bit地址)->3DW
大于4GB(64bit地址) ->4DW
Header中的type字段决定了路由方式、posted与否。
ID路由(256*32*8)
1.EP(进行一次检查):
在收到type0配置写过程中会从配置写事务中捕获自己BDF号,EP只会简单的根据自己的BDF来检查TLP Header中的ID字段。
2. Switch(每个端口进行两次检查):
(1)将端口自身的BDF与TLP Header中的目标ID进行比较;
(2)通过检查Secondary Bus Number 和Subordinate Bus Number来查看TLP的目标总线号是否在Switch端口下方的从属总线范围内;
注意:(1)对于步骤1来说,如果是自己用,type01h类型的TLP会转化成type00h的TLP;对于步骤2,bus number在两个范围之间,type01h类型的TLP不改变类型,只有确定是那个EP使用后才会转化类型。(2)上行端口转发到下行端口后,所有下行端口都会在此执行两次检查,也就是一次检查是不是属于自己,另一次检查是否属于从属总线范围。
三种结果:(1)端口自身消耗;(2)端口转发到其他端口;(3) Unsupported Request处理;
在消息传送、Cpl、CplD中可能会存在下游端口向上游端口传递的过程。p-p3桥片发现tlp不是发给自己的以后会推到上游总线bus1,bus1上的p-p1认领的话就发给RC,不认领的话就会发给p-p2桥片,并由这个桥片转发给相应的EP。
地址路由
1.EP:
EP将会用其自身配置Header中的每一个BAR(Base Address Register)与TLP Header中的Address字段进行比对。
2.Switch:
(1)将Switch端口自身Type 1 Header中的两个BAR与TLP Header中的Address进行比对;
(2)如果并未匹配任何一个BAR的地址范围,那么Switch端口将会检查Base/Limit寄存器对(IO地址空间,memory地址空间),以此来确定这个TLP的目标Function是否在本端口之下。
向上移动(次级接口接收并且向上转发):
(1)如果TLP的目标地址与当前Switch次级接口的其中一个BAR地址范围相匹配->自身消耗;
(2)如果TLP的目标地址落在端口的Base/Limit寄存器所表示的范围内->该TLP被次级接口当作UR处理(除非这个端口是Switch的上行端口,在这种情况下,这个数据包可能是一个Peer-to-Peer的事务,它将会被转发至下行的另一个端口上,而不是之前接收这个TLP的端口)。
(3)若以上两个条件都不符->转发到主接口(既不是当前的端口Bridge,也不是这个Bridge之下的任何一个Function)
message路由
1.Message的Type字段
[4:3] -> 10;
[2:0] -> message具体使用的路由方式;
2. EP
EP会简单的检查路由子字段(sub-field)是否适合它;
3.Switch
(1)上行端口可以合法的接收一个广播Message(011),上行端口将会把这个广播Message复制一份,并向它的所有下行端口都转发;下行端口不能接收一个隐式路由的广播Message,也就是这个Message将会向上行移动,会将其认为是一个Malformed TLP。
(2)下行端口可以接收隐式路由目的地为RC的Message(000),下行端口将会把这个Message转发给上行端口,因为路由元件知道RC永远在上行。而Switch的上行端口并不会从外界接受一个隐式路由目的地为RC的Message,因为这意味着它会向下转发,但是RC却在拓扑结构的上方。
(3) 如果隐式路由Message表示它会终止在其接收者的位置(100),那么接收它的Switch端口将会消耗掉这个Message,而不是将其转发。
(4)对于使用地址路由或者ID路由的Message来说,Switch会按照类似于地址或ID的路由规则。
问题:000和101都是去RC,区别是什么?
不同路由方式下请求的格式:
地址路由:有两种地址格式,使用 4 DW header的 64 位格式和使用 3 DW header的 32 位格式。
ID路由:两种,non-ARI Routing IDs和ARI Routing IDs
这篇关于PCIE-TLP路由的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!