代码改变世界

3A2H地址路由详解

2014-07-23 19:28  cmLighters  阅读(756)  评论(0编辑  收藏  举报

接着上一篇文章所说。前一篇重点说了地址划分、3A内部结构包括内部节点结构和与系统架构以及二级XBAR的地址路由和转换情况。这篇主要讲解3A2H的系统结构。将会结合3A2H的窗口寄存器具体值来分析其地址路由情况。

 

3A2H系统结构


3A2H的系统框图如下所示:

图1-3  3A2H系统结构图

image
可以看出3A和2H通过HT连接起来,3A四核处理器作为板卡上的主处理器,2H芯片作为桥片扩展外部接口。结合上篇文章中所提3A内部结构,可知3A的HT连接在一级XBAR上,而地址经过HT后发送到2H端,然后在经过2H端的XBAR窗口地址转换路由到所挂载的从设备上。

如下图左为3A端系统结构:

                                       图1-2  3A节点结构图                                                                              图1-3  3A2H的2H端结构图

imageimage

下面对3A的一级XBAR做分析。

 

3A一级XBAR地址解析


3A一级XBAR是8*8结构的,具体说有8个主设备8个从设备。一级交叉开关可以对每个 Master端口接收到的请求进行路由配置,每个Master端口都拥有 8个地址窗口,可以完成 8 个地址窗口的目标路由选择。每个地址窗口由 BASE、MASK和 MMAP三个 64 位寄存器组成,BASE以K字节对齐;MASK采用类似网络掩码高位为1的格式;MMAP的低三位表示对应目标Slave端口的编号,MMAP[4]表示允许取指,MMAP [5]表示允许块读,MMAP [7]表示窗口使能。其地址窗口转换寄存器见3A用户手册表2-5。

如下是我的3A2H一级交叉开关第一个主设备core0的窗口寄存器,查3A用户手册表2-5可知其基址为0x3ff02000:

                              图2-1  core0窗口寄存器

1
第一个窗口win0: win0_base = 0x0000 0000 1b00 0000, win0_mask = 0xffff ffff ff00 0000,win0_mmap = 0x0000 0e00 1f00 00f7。 按照窗口命中公式: (IN_ADDR & MASK) == BASE和地址换算公式: OUT_ADDR = (IN_ADDR & ~MASK) | {MMAP[63:10],10’h0},可得IN_ADDR = 0x0000 0000 1b** ****,OUT_ADDR = 0x0000 0e00 1f** ****。因为MMAP最低3位为7,所以选择HT1从设备,且由OUT_ADDR中的第43~41为7可以看出地址路由到HT1中可知最终一级XBAR将地址为0x1b** ****的地址映射成0x1f** ****的地址并路由到HT1上发射到2H端。按照上述运算方法,第二个窗口win1将IN_ADDR为0x0000 0000 18** **** 的范围为16M的地址映射成0x0000 0000 18** ****的地址路由到HT1上发射到2H端。第三个窗口win2将地址为0x0000 0000 1000 0000 ~ 0x0000 0000 17ff ffff的大小为128M的地址空间映射到2H端。第四个窗口win3将IN_ADDR为0x0000 0000 4000 0000 ~ 0x0000 0000 7fff ffff转换成OUT_ADDR为0x0000 0e00 0000 0000 ~ 0x0000 0e00 3fff ffff的大小为1G的地址空间映射到2H端。第五个窗口不可用。第六、七、八三个窗口用于将发射到HT0或者节点1、2、3的地址重映射到HT1上,避免出现上述地址时CPU不知如何处理而死机。其中第六个窗口由于其入口地址为0x0000 0c** **** ****,参照3A用户手册表2-3,将HT0的地址映射到HT1上。第七个窗口,其入口地址为0x 0000 (001*)*** **** ****,参照3A用户手册表2-2,将节点2、3的地址重映射到HT1上。第八个窗口其入口地址为0x0000 1*** **** ****,参照3A用户手册表2-2,将节点1的地址重映射到HT1上。不在上述入口地址范围的有效地址会不经转换直接进入二级XBAR进行地址再路由。

core1 ~ core3以及HT0的地址窗口寄存器情况和core0的情况相同,因为其窗口寄存器值打印出来和core0的一样。主设备号为5和6的窗口寄存器值全为0,不可用。HT1的窗口寄存器前面5个窗口都不可用,后三个窗口与core0的后三个窗口寄存器值相同。也即把发射到HT0,节点1、2、3的地址重映射到HT1上。

地址经过HT1到达2H端后又会经过怎样的转换和路由最终到达各设备呢?下面接着分析。

 

2H端地址路由解析


从图1-1可以看出地址经过HT到达2H端。下图为2H端系统结构:

image

地址到达2H的一级XBAR后经过地址窗口进行路由,一级XBAR是2*2的交叉开关。其结构如下表所示:

Num Master Slave
0 CPUIP(GS464) Scache
1 IODMA(HT) HT

对照2H用户手册表5-6,查找一级XBAR的窗口基地址。2H用户手册中有m6_win0_base,其基地址为0x1fd8,2600,在图2-1中提到过,3A的1级XBAR会将0x1b**,****地址映射为0x1f**,****地址发送到2H端,所以这里读2H端m6的地址应为0x1bd8,2600。这里一级XBAR两个主设备共用这八个窗口。窗口寄存器值如下图所示:2

上图窗口0将入口地址IN_ADDR 为0x0000 0010 80** ****的地址转换为0x0000 0000 00** ****发送到6号slave去,可以看出6号slave是HT。窗口1将入口地址为0x0000 0010 (10**)*** ****的入口地址转换为OUT_ADDR为0x0000 0001 (00**)*** **** 的地址发送到HT端送到3A。直到窗口4都是将入口地址转换成出口地址发射到HT端进入3A。窗口5除了mmap[7:4]=f,其他窗口寄存器位都为0,可知将其他地址不经转换发送到slave0去,这里slave0就是Scache二级缓存。这样3A2H的2H端一级XBAR就分析完了。接下来分析2H端二级XBAR的地址解析情况。

二级XBAR有6个主设备,5个从设备。少的一个从设备可以看图3-1中DC/GPU有两个入箭头,一个出箭头。二级XBAR结构如下:

 

 

 

 

 

 

 

 

 

Num Master Slave
0 Scache(GS464) DDR
1 SB SB
2 GPU GPU/DC
3 DC IODMA
4 PCIE PCIE
5 MEDIA(GS232)  

查看2H用户手册表5-6可知其涉及m0到m5共六个主设备。其中m0_win0_base基址为0x1fd8,0000,按照一级XBAR中所提,读m0的地址应为0x1bd8,0000。由于有6个主设备,这里挑选4号主设被PCIE,m4窗口寄存器值如下所示:

3

窗口0将入口地址为0x0000 0000 (00**)*** ****的范围为1G的地址转换为0x0000 0010 (10**)*** ****的地址发送到slave3即IODMA中发送到3A端。窗口1将入口地址为0x0000 0000 (01**)*** ****的地址转换为0x0000 0020 (10**)*** ****的地址发送到IODMA。窗口2将入口地址为0x0000 0000 (10**)*** ****的地址转换为0x0000 0030 (10**)*** ****的地址发送到IODMA。窗口3将入口地址为0x0000 0000 (11**)*** ****的地址转换为0x0000 0040 (10**)*** ****的地址发送到IODMA。窗口4将入口地址为0xffff ffff (10**)*** ****的地址转换为0x0000 0030 (10**)*** ****的地址发送到IODMA。窗口5将入口地址为0xffff ffff (11**)*** ****的地址转换为0x0000 0040 (10**)*** ****的地址发送到IODMA中。窗口6和7不可用。

以上是PCIE设备经过2H二级XBAR发送到IODMA的过程。再经过HT地址即可到达3A端。