PCIE随笔记
零散随笔
- Non-Posted的Request,是需要对方响应的,对方是通过返回一个Completion TLP来作为响应的。
Replay 有REPLAY_NUM、 REPLAY_TIMER
1.1 仲裁
端口仲裁:决定存进VC中来自不同端口message的顺序,端口仲裁之后进行VC仲裁,也就是输出端口读取VC的顺序
PCle总线规定,系统设计者可以使用以下三种方式进行端口仲裁。
(1) Hardware—fixed仲裁策略。如在系统设计时,采用固化的RR仲裁方法。这种方法的硬件实现原理较为简单,此时系统软件不能对端口仲裁器进行配置。
(2) WRR仲裁策略,即加权的RR仲裁策略,该算法和Time–Based WRR算法的描述见第4.3.3节。
(3) Time–Based WRR 仲裁策略,基于时间片的WRR 仲裁策略, PCIe 总线可以将一个时间段分为若干个时间片(Phase),每个端口占用其中的一个时间片,并根据端口使用这些时间片的多少对端口进行加权的一种方法。使用WRR和Time–Based WRR仲裁策略,可以在某种程度上提高PCle总线的QoS。
PCle设备的Capability寄存器规定了端口仲裁使用的算法,详见第4.3.3 节。有些 PCle设备并没有提供多种端口仲裁算法,可能也并不含有Capability寄存器。此时该PCle设备使用Hardware—fixed 仲裁策略。
摘自第4.3.3节:VC Arbitration Table和Port Arbitration Table- VC Arbitration Table
VC Arbitration Table实现VC仲裁的WRR算法。每一个Entry由4位组成,其中最高位保留,最低三位记录VC号。Entry最小为32,最大为128
VC Arbitration Table 的每一个 Entry 都记录一个 VC 号。假定 VC 仲裁时从Phase0开始使用,该Entry存放的VC号为VC0,则VC仲裁的结果是传送虚通路VC0中的总线事务,当这个总线事务传送结束后,将处理Phase1中的VC;如果该Entry存放的VC号为VC2,则VC仲裁的结果是传送虚通路VC2中的总线事务,并以此类推直到Phase31后,再对Phase0重新进行处理。
WRR算法在支持长度不同的报文时,会出现带宽分配不公平的现象,为此M. Shreedhar与George Varghese提出了DWRR调度算法。DWRR算法给每一个队列分配的权值不是基于报文的个数,而是基于报文的比特数。因此可以使各个队列公平地获得带宽。但是这种算法并不适用于PCle总线,因为PCle总线基于报文进行数据传递,而不是基于数据流。该算法在ATM分组交换网中得到了广泛的应用。
- Port Arbitration Table
在该表中,每一个Entry的大小由该设备支持的端口数目有关,如果一个设备支持N个端口,则该表Entry的大小为「Log2N]。如果一个设备有6个端口,则Port Arbitration Table的Entry大小为3。PCle总线支持RR, WRR和Time–based WRR端口仲裁策略。
在 PCle 总线中使用 WRR 算法每处理完一个总线事务将移动一个Phase,而 Time–based法使用的基准时钟周期在Port VC Capability Register 1的Reference Clock字段中定义。
1.2 VC
VC Resource Capability Register 存放VC所支持的端口仲裁算法,软件都可以对相应的寄存器进行写1来更改端口或者VC仲裁算法
n个VC对应n个VC Resource Control Register,有8bit对应8个TC,置1代表该等级的TC使用该VC进行数据传递
2. TLP
2.1 TLP路由
(1)存储器和I/O读写请求TLP使用基于地址的路由方式,这种方式使用TLP中的Address字段进行路由选径,最终到达目的地。
TLP “从下游端口向上游端口” 与 “从TLP从上游端口向下游端口” 进行传递时,桥片的处理机制有所不同
从上游端口向下游端口传递时,如果桥片配置寄存器的Limit和Base寄存器包含该TLP 的访问地址时,桥片将接收此TLP,否则不接收该TLP。
而从下游端口向上游端口传递时,如果桥片配置寄存器的Limit和Base寄存器不包含该TLP的访问地址时,桥片将接收该TLP,并将其推至桥片的上游PCI总线。PCI总线会首先检查下游是否可以接受,不能接受则传递到上游。这样就能实现下游向另一个下游的传递。值得注意的是,这两种地址译码方式都属于PCI总线的正向译码。
(2) 配置读写报文、“Vendor-Defined Messages”报文、Cpl和CplD报文使用基于ID的路由方式,这种方式使用PCI总线号 (Bus Number)进行路由选径。在Switch或者多端口RC的虚拟PCI-to-PCI桥配置空间中,包含如何使用PCI总线号进行路由选径的信息。
PCle总线规定,在一个PCI总线域空间中,最多只能有256 条 PCI总线,因此在一个TLP 中, Bus Number 由五位组成;而在每一条总线中最多包含 32 个设备;而每一个设备中最多包含8个功能,因此一个TLP的FunctionNumber 由 3 位组成。
在传统 PCI(即并行 PCI)里,配置空间偏移 0x0E 处的 Header Type 寄存器,常见值有 0x00(普通设备)、0x01(PCI–PCI 桥)和 0x02(CardBus 桥)等。RC可以使用Type 00h和Type 01h读写请求TLP,PCle总线的Type 00h类型配置请求TLP不能够穿越桥片,RC可以通过Type 01h配置请求TLP访问下级的P2P桥片
当RC使用Type 01h配置请求TLP,直接访问PCI-to-PCI桥的下游设备时,首先需要检查该TLP的Bus Number是否为1,如果为1表示该TLP的访问目标在PCI Bus 1总线上,此时PCI-to-PCI桥将这个Type 01h类型的TLP转换为Type 00h类型的TLP,然后推至PCI Bus 1总线,并访问其下的设备。
如果介于Secondary 和 Subordinate 之间,桥片将该Type 01h类型的TLP直接透传到PCI Bus 1上,并不改变该TLP的类型,之后Type 01h类型的TLP将继续检查PtoP2和PtoP3桥片的配置空间,决定由PtoP2还是PtoP3接收该TLP。如果TLP的PCI Bus Number为2时, PtoP2桥片将接收该TLP,并将该Type 01h类型TLP转换为Type 00h类型的TLP,然后发送给EP1,并由EP1处 理该TLP。
摘自6.2.2节,Vendor_Defined 消息报文和 Cpl 和 CplD 报文还可能从下游端口向上游端口进行传递
当一个 TLP 从 EP2 传送到 EP1 或者 RC 时,首先检查 PtoP3 桥片的配置空间, PtoP3 桥片发现该 TLP 不是发向自己时,将该 TLP 推至上游总线,即 PCI Bus 1。如果 PCI Bus1 上 PtoP1桥片没有认领该TLP,该TLP将继续向PtoP2桥片传递,并由这个桥片将TLP转发给合适的EP;如果PtoP1桥片认领该TLP,该TLP将继续向上游总线传递,直至RC。
(3)隐式路由方式主要用于Message报文的传递。在PCle总线中定义了一系列消息报文,包括”INTx Interrupt Signaling”, “Power Management Messages”和”Error Signal Messages” 等报文。在这些报文中,除了“Vendor_Defined Messages”报文,其他所有消息报文都使用隐式路由方式,隐式路由方式是指从下游端口到上游端口进行数据传递的使用路由方式,或者用于RC向EP发出广播报文。
当一个报文使用隐式路由向EP发送时, EP将对Route字段进行检查, EP将接收”来自RC的广播报文”,或者是“本地报文”。
本地消息报文,在接收端结束,不再上传或下推。
2.2 各字段的作用
TH 为1表示当前TLP中含有TPH (TLP Processing Hint)信息, TPH是PCIe V2. 1总线规范引入的一个重要功能。TLP的发送端可以使用TPH信息,通知接收端即将访问数据的特性,以便接收端合理地预读和管理数据, TPH的详细介绍见第6.3.6节。
TD 表示TLP中的TLP Digest是否有效,为1表示有效。而EP位表示当前TLP中的数据是否有效。
AT 字段与PCle总线的地址转换相关。在一些PCle设备中设置了ATC (Address Translation Cache)部件,这个部件的主要功能是进行地址转换。只有在支持IOMMU技术的处理器系统中,PCle设备才能使用该字段。AT字段可以用作存储器域与PCI总线域之间的地址转换,但是设置这个字段的主要目的是为了方便多个虚拟主机共享同一个PCle设备。 暂时不用懂
Attr[2:0] ID-Based Ordering | Relaxed-Ordering | No-Snoop
Transaction ID 包含Requester ID和Tag,Requester ID为BDF(Bus Device Func Number)。一个源设备在发送non-Posted数据请求之后,如果并没有收到目标设备回送的完成报文, TLP报文的发送端需要保存这个non-Posted数据请求,此时该设备使用的Transaction ID (Tag字段)不能被再次使用,直到一次数据传送结束,即数据发送端收齐与该TLP对应的所有完成报文。
PCIe 设备在 PCI Express Capability 结构的 Device Control 寄存器中,设置了一个 PhantomFunctions Enable位,该位的详细说明见第4.3.2节。当一个PCle设备仅支持一个Function时, Phantom Functions Enable位可以被设置为1,此时PCle设备可以使用Requester ID的Function Number字段对Tag字段进一步扩展,此时一个PCle设备最多可以支持2048个同类型的数据请求。
- Byte Count 在读请求的完成报文中,Byte Count指代源设备还需要从目标设备中获得多少字节的数据就能完成全部数据传递,当前 TLP 中的有效负载也被 Byte Count 字段统计在内。该字段由 12 位组成。
link training
- polling Bit lock refers to when the receiver locks the clock frequency of the transmitter.
Symbol lock refers to when the receiver is able to decode the valid 10-bit symbol coming from the transmitter.