关于mips结构中地址窗口的分析(基于loongson3A平台)

来源:互联网 发布:程序员怎么选择公司 编辑:程序博客网 时间:2024/06/13 06:31

loongson3A(MIPS)地址窗口的使用

总的路线图:

cpu->tlb-xbar1-xbar2-mem           |   |__HT--2Htlb:  代表mmuxbar1:第一级交叉开关xbar2:第二级交叉考官HT:   总线一种2H:   cpu

总概述:
这是loongson3a2h开发板的路线图,其中2H(CPU)是作为桥片使用的。
当CPU访问2H上的一个寄存器时,首先给出寄存器的地址,然后通过tlb映射变为物理地址,之后通过窗口1,在3A上每个窗口作为主端口都有7个从端口可以选择(有些CPU没有这么多从端口,默认就不使用没有的从端口),这时选中HT总线,HT总线和2H相连接,之后到2H后在经过2H的HT和窗口就到了寄存器了。

说明一下:

这里一共分为三篇,第一篇讲解窗口的使用,第二篇讲解tlb的地址映射,第三篇讲解地址经过HT到2H的变换过程。
本节主要讲解窗口,其他的另外讲解。

废话不多说,开始。

首先s说或相关的硬件:
loongson3A的路由主要通过系统的两级交叉开关(xbar)实现。每个XBAR都有8个Master端口和8个Slave端口,每个Master端口有8个地址窗口,每个地址窗口由Base,Mask,Mmap三个64位寄存器组成。

窗口命中公式:(in_addr & mask) == base新地址换算公式:out_Addr = (in_addr & ~mask) | {mmap[63:10],10'h0}

xbar1的寄存器,列举一部分,其他的相似。

xbar2寄存器:



看一下在CPU总的架构图中xbar的作用:


图中连接4个cpu核,以及2级cache和HT的就是xbar1.也就是level-1作为第一级交叉开关,采用6X6的模式,用于连接四个CPU(作为主设备),4个二级cache(作为从设备),一级两个IO端口(HT。每个端口使用一个master和一个slave)。
二级xbar,也就是xbar2用于连接二级cache和内存,配置寄存器以及LPC。其中二级cache作为主设备,两个DDR内存控制器,低速IO(包含pci,LPC,SPI),以及芯片内部控制寄存器模块为从设备。
宗的架构图就是这样。(刚开始可能不明白,可以多看几次)。


其中mmap作为通过窗口以后的基地址,其还有别的作用,就是0-2用作选择从端口,位4,位5,位7表示窗口的读写使能属性。
如图看一下xbar1对从端口的选择




以及xbar2对从端口的选择:


下面是打印出来loongson3Acpu中xbar1寄存器的值:

一级xbar有8个master窗口分别是win0 win1 win2 win4 east south west north八个窗口。

这是win0-3:



这是另外4个:




这里列举出来win0窗口的值,咱们举例时使用:

然后举一个例子来说一下地址的过程:
如CPU要访问一个0x2200-0000的地址。

第一步:cpu要访问这个地址,首先0x2200-0000这是位于用户空间的一段地址,访问这些地址必须使用tlb,这是通过tlb映射,发现有这个表项,映射出来的物理地址是0x2000-0000(这是代码这么配置的,方便程序员进行开发)

第二步:此时已经得到了物理地址0x2000-0000,然后要通过窗口,看看能否命中,如果命中就可以继续访问,如果没有命令就访问失败。这里以win0的窗口进行举例。根据公式:
窗口命中公式:(in_addr & mask) == base
新地址换算公式:out_Addr = (in_addr & ~mask) | {mmap[63:10],10'h0}
咱们首先怎么能命中那个窗口。

第三步:命中窗口计算。
从第一个窗口开始计算:
0x2200-0000 & 0xff00-0000 = 0x2200-0000
得到0x2000-0000!=0x1b00-0000(win_base0),也就是没有命中第一个窗口。
接下来接着这个方法计算下去,
得到命中了win_base4窗口。

第四步:输出地址计算:
out_Addr = (in_addr & ~mask) | {mmap[63:10],10'h0}
     =(0x2200-0000 & (~0xf000-0000) | {0x0000-0e00-0000-0000}
     =0x0000-0e00-0200-0000

第五步:选择那个从端口
    根据mmap[0-2]=7,得到选择的从端口时HT1.而且根据mmap[4,5,7]得到选中的从端口可读可写,且使能

第六步:此时地址0x0000-0e00-0200-0000就发送到HT1总线上,进行访问。


到这里端口的使用就到这里,虽然复杂了一些,但是使用起来更方便了。通过对窗口配置,地址的使用也更加灵活。


原创粉丝点击