回顾一下,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。对应的寄存器如下图,每个寄存器就不展开讲解了,有兴趣可以翻阅协议或芯片手册。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注