4.6SR(Segment Registers)寄存器
OEA定义了16个32位的SR寄存器,段寄存器SR可以使用mtsr/mfsr,mtsrin/mfsrin指令进程访问。
随着CR[0]位(我们称之为T位)的值的不同,CR寄存器有两种不同的格式。
当T位为1时格式如下:

CR[1]位:系统模式保护位
CR[2]位:用户模式保护位
CR[3]位:不可执行保护位
CR[4:7]位:保留位
CR[8:31]位:VSID位,我们在4.5节页面地址映射中已经看到该位段的作用。
当T位为0时格式如下:

CR[1]位:系统模式保护位
CR[2]位:用户模式保护位
CR[3]位:不可执行保护位
CR[3:11]位:Bus unit ID
CR[12:31]位:Device-specific data for I/O controller
备注:这个位段,我现在不清楚,暂时附上datasheet原文,以后再修改O(∩_∩)O~
4.7 DAR(Data Address Register)寄存器
存放访存指令产生的引发中断的有效地址,比较简单。
格式如下:

4.8 SPRG0–SPRG3寄存器
提供给操作系统使用,格式如下:

SPRG0:操作系统可能会加载一个独立的物理地址到该寄存器中,来标识一个内存区域是第一级的中断句柄专用的。
SPRG2:可以被第一级的中断来保存通用寄存器的内容,该内容可以作为内存中保存其它通用寄存器的基地址。
SPRG2和SPRG3可以在操作系统需要时使用!
备注:E600有8个SPRGs寄存器。
4.9 DSISR寄存器
用来决定DSI中断的中断源,格式如下:

4.10 SRR0(Machine Status Save/Restore Register 0)寄存器
当发生中断时,SRR0用来保持中断发生的那一刻MSR的状态,当中断返回结束执行rfi指令时,SRR0用来恢复MSR寄存器的值,它也可以用来保持系统调用之前的那条指令的有效地址,当系统中断结束时会执行rfi指令,汇编SPR0保持的地址赋值给NIA(Next Instruction Address)寄存器(也就是我们通常说的PC寄存器)
格式如下:

4.11 SRR1(Machine Status Save/Restore Register 1)
该寄存器同4.10
4.12 FPECR(Floating-Point Exception Cause Register)
FPECR寄存器用来支持产生浮点中断的原因。
备注:E600没有浮点预算单元,因而也就没有FPECR寄存器
4.13 TB(Time Base Facility)寄存器组
TB寄存器组提供了一个可以被执行相关的频率驱动的长周期的计数器。
VEA定义用户模式下的程序可以读取TB寄存器的值,而在系统模式下的程序,比如操作系统或者一些系统引导例程可以修改该寄存器。
OEA定义系统模式可以写入值到TB寄存器。
备注:TB寄存器是一种易失性(volatile)资源,可以在系统重启的时候初始化,但是并不能保证在处理器重启的时,一定会初始化该寄存器。
我们可以使用mttbl 和mttbu指令来修改TB寄存器的低32位TBL寄存器和高32位TBU 寄存器。
mttbl ,mttbu和mtspr把TBL和TBU当做普通的32位寄存器来处理,修改一个寄存器的值时不会影响到另一个寄存器。
写入TB寄存器组的指令序列如下:
lwz rx,upper #load 64-bit value for
lwz ry,lower # TB into rx and ry
li rz,0
mttbl rz #force TBL to 0
mttbu rx #set TBU
mttbl ry #set TBL,
备注:
我们假设后面三条指令执行时,没有中断产生。同时我们应该下赋值TBL寄存器,这样可以防止进位的产生。
读取TB寄存器组的值可以使用下面的指令序列如下:
loop:
mftbu rx #load from TBU
mftb ry #load from TBL
mftbu rz #load from TBU
cmpw rz,rx #see if ‘old’ = ‘new’
bne loop #loop if carry occurred
备注:循环比较也是为了防止进位产生!
4.14 DEC(Decrementer Register)寄存器
32位的DEC寄存器包含一个32位的递减计数器,它提供了一种机制为可编程的软件延迟提供了递减中断,递减的频率和TB寄存器组一样,也是基于通用的系统实现的时钟频率。DEC寄存器的格式如下:

在MSR[EE]=1情况下,当DEC寄存器的值递减到0时,会引发一个中断操作,下面的任何一个条件程序都会引发一个DEC中断:
1:对TB寄存器组的操作和对DEC的操作是一致的,因为他们的计数器的更新基于相同的时钟源;
2:从DEC寄存器中取一个值到通用寄存器GPRs中,对DEC寄存器的计数器没有任何影响;
3:可用一个GPRs中的值来更新DEC寄存器的值
4:当DEC寄存器的第0位从0变到1,就会产生一个递减中断请求;
5:DEC寄存器的内容可以被被软件修改,并且DEC寄存器的第0位从0变为1,将会引发DEC中断。
我们可以使用处在系统模式下的mfspr和mtspr指令来读和写DEC寄存器器,这两条指令都有他们的简写形式,例如:
mtdec rA
解释:把rA寄存器的内容写入DEC寄存器,相当于使用mtspr指令
mfdec rA
解释:读取DEC寄存器的值到rA寄存器,相当于使用mfdec指令
4.15 DABR(Data Address Breakpoint Register)寄存器
DABR寄存器控制着数据断点的功能,该功能对PowerPC构架来说是可选的,但是PowerPC 构架推荐执行该功能,但是并不是必须的。
数据断点功能用来探测对双字的读取,对地址的比较使用的是有效地址(EA),并且仅用于取数据,不用于取指令!
DABR寄存器的格式如下:

DABR[0:28]:数据地址断点
DABR[29]:开启断点映射
DABR[30]:开启断点写
DABR[31]:开启断点读
使用条件:
该指令仅用于load和store指令,当下面条件都满足是,数据断点探测机制将会开启:
1:EA[0:28]= DABR[0:28]
2:MSR[DR]=DARB[29]
3:如果是store指令时,DABR[30]=1;如果是取指令时DABR[31]=1;
4.16 EAR(External Access Register)寄存器
32位的EAR寄存器为外部控制操作指定外部设备,为用户模式下的指令和指定外部设备的通信提供了一种机制。
格式如下:
EAR[0]:使能位
为0禁用该寄存器,当使用eciwx或者ecowx指令时会引发DSI中断
位1开始改寄存器,当使用eciwx或者ecowx指令时将会执行指定的外部操作EAR指令可以被mtspr和mfspr读取。
备注一:
EAR寄存器指定支持eciwx(External Control In Word Indexed)指令,和ecowx(External Control Out Word Indexed)指令,虽然该指令的使用是系统级的,但是操作系统可以决定哪一个可以使用这两条指令。
需要指出的eciwx和ecowx使用的有效地址EA的转换,以及对ecowx所传输的32bit的字的内容并不是有操作系统决定的,而是有目标外部设备决定的,尽管内存方位模式WIMG 被设置为0b0101(该位表示禁用Cache,CPU不保证由它发起的每一条访问指令都保证内存一致性),这两条指令仍然可以正常执行。
备注二:关于WIMG位
所有取指和取数指令都是由WIMG控制的内存和Cache访问控制模式之下:
1:写通过模式(Write-Through)W属性
W=1:采用写通过模式
该模式下处理器在执行store指令时,同时更新Cache和主存中的数据来保证数据的一致性。W=0:采用写回模式
在写回模式(Write-Back)中,当CPU执行store指令时,仅仅更新Cache中的块,而只有Cache中的块被替换时才写入主存中;写回方式可以提供系统性能,尤其是CPU产生store 指令的速度和主存出来store指令的速度一样快或者更快时。
2:禁止Cache模式(Caching-Inhibit)I属性
I=1时内存访问将完全使用主存中的地址,完全绕过Cache机制
I=0时使用Cache机制
3:内存一致模式(Memory-Coherency Required)M属性
如果M=1,表示对此数据区的访问需要经过存储一致性处理,该位对于单PowerPC处理器而言没有什么意义。但是对于SMP结构的系统中,由Memory Coherence引起的Cache共享一致性的问题十分复杂,维护Cache一致性的访问也比较多,比如:
Example1:写更新法
在写操作完成之后,其数据在其它Cache中无效;
Example2:读请求法
如果Cache中出现了一个脏拷贝,则需要回写操作在读之前完成
上述两种方法都需要硬件支持完成,比如总线监听法保证SMP结构处理器的Cache一致性在SMP结构的处理器中,有些内存区域需要多个处理器共享,此时在使用MMU进行虚实地址映射时将WIMG字段的M位置1,此时当SMP中的一个处理器对该字段进行访问时一定会通知SMP中的其它处理器,实现存储器的共享一致性。
4:保护模式(Guarded)G属性
此位为1,表示对相应的存储区域进行保护。
操作系统为每一个块和页设置内存和Cache访问属性,WIMG属性在BATs寄存器和PTE 页表项中各占据了四个bit,具体设置如下:
操作系统用mtspr指令来设置BA Ts寄存器中的WIMG位,IBA Ts只设置了WG位,任何试图修改IBATs寄存器中的这两个位都将引发边界没有定义(boundedly-undefined)的结果。操作系统在建立页表的时候,为每个页表项PTE都设置了WIMG位。
需要注意的是在实模式下的数据访问(MSR[DR]=0),WIMG被设置成0b0011(数据可写回,开启Cache,强制内存一致性,内存被保护);
在实模式的指令访问(MSR[IR]=0),WIMG被设置成0b0001(数据可写回,开启Cache,禁止Cache一致性,内存保护)
第五部分小结
至此,PowerPC构架下所有相关的寄存器我们系统的介绍一下,由于我也是首次接触PowerPC体系结构,对于各个寄存器的功能上的理解肯定有不到位的地方,我会在后面的学习中陆续的修正,也欢迎大家指出其中的不足的地方!O(∩_∩)O~
第六部分参考资料
[1] Programming Environments Manual for 32-Bit Implementations of the PowerPC Architecture
[2] PowerISA_V2.06_PUBLIC
[3] e600 PowerPC(TM)Core Reference Manual
[4] Computer Organization and Design(The Hardware/Software Interface, Third Edition). David A. Patterson John L.Hennessy
本文详细介绍了PowerPC架构中的SR、CR、DAR、SPRGs、DSISR、SRR、FPECR、TB、DEC、DABR、EAR等寄存器的功能、格式和使用场景,包括保护位、中断控制、地址映射和系统控制等内容。
2985

被折叠的 条评论
为什么被折叠?



