Address Routing
回顾一下,PCIe的设备有三种资源(ID、Memory、IO),前一篇讲了ID路由,本文我们讨论地址路由(Address Routing),即按照后两种资源(Memory和IO)的地址进行路由。
报文头里面包含着目的IO或者目的Memory的地址。报文在总线上路由,就是寻找系统里的某个PCIe设备,而这个设备的资源范围包含这个地址。我们以Memory为例来看看这个过程:
当报文到达Switch时,情况稍微复杂一点。当下行的报文到达Switch某个port时,这个报文的目的地址必须是在这个port的资源窗口内,Switch才会把这个报文向下一级转发。
当上行的报文到达port时,情况相反,报文的目的地址必须是在这个port的资源窗口之外Switch才会把这个报文向上一级转发。
那么问题来了,这个窗口是在哪儿定义的呢?
PCIe Spec定义了三类窗口:Memory Base and Limit、Prefetchable Memory Base and Limit、IO Base and Limit。对应的寄存器如下图,每个寄存器就不展开讲解了,有兴趣可以翻阅协议或芯片手册。