32位PowerPC构架通用寄存器分析及总结三

本文详细介绍了PowerPC架构中的SR、CR、DAR、SPRGs、DSISR、SRR、FPECR、TB、DEC、DABR、EAR等寄存器的功能、格式和使用场景,包括保护位、中断控制、地址映射和系统控制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.6SR(Segment Registers)寄存器

OEA定义了1632位的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 DARData Address Register)寄存器

存放访存指令产生的引发中断的有效地址,比较简单。

格式如下:

4.8 SPRG0–SPRG3寄存器

提供给操作系统使用,格式如下:

SPRG0:操作系统可能会加载一个独立的物理地址到该寄存器中,来标识一个内存区域是第一级的中断句柄专用的。

SPRG2:可以被第一级的中断来保存通用寄存器的内容,该内容可以作为内存中保存其它通用寄存器的基地址。

SPRG2SPRG3可以在操作系统需要时使用!

备注:E6008SPRGs寄存器。

4.9 DSISR寄存器

用来决定DSI中断的中断源,格式如下:

4.10 SRR0Machine Status Save/Restore Register 0)寄存器

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

格式如下:

4.11 SRR1Machine Status Save/Restore Register 1

该寄存器同4.10

4.12 FPECRFloating-Point Exception Cause Register

 

FPECR寄存器用来支持产生浮点中断的原因。

备注:E600没有浮点预算单元,因而也就没有FPECR寄存器

4.13 TBTime Base Facility)寄存器组

TB寄存器组提供了一个可以被执行相关的频率驱动的长周期的计数器。

VEA定义用户模式下的程序可以读取TB寄存器的值,而在系统模式下的程序,比如操作系统或者一些系统引导例程可以修改该寄存器。

OEA定义系统模式可以写入值到TB寄存器。

备注:TB寄存器是一种易失性(volatile)资源,可以在系统重启的时候初始化,但是并不能保证在处理器重启的时,一定会初始化该寄存器。

我们可以使用mttbl mttbu指令来修改TB寄存器的低32TBL寄存器和高32TBU 寄存器。

mttbl mttbumtsprTBLTBU当做普通的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,就会产生一个递减中断请求;

5DEC寄存器的内容可以被被软件修改,并且DEC寄存器的第0位从0变为1,将会引发DEC中断。

我们可以使用处在系统模式下的mfsprmtspr指令来读和写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]:开启断点读

使用条件:

该指令仅用于loadstore指令,当下面条件都满足是,数据断点探测机制将会开启:

1EA[0:28]= DABR[0:28]

2MSR[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指令可以被mtsprmfspr读取。

备注一:

EAR寄存器指定支持eciwxExternal Control In Word Indexed)指令,和ecowxExternal Control Out Word Indexed)指令,虽然该指令的使用是系统级的,但是操作系统可以决定哪一个可以使用这两条指令。

需要指出的eciwxecowx使用的有效地址EA的转换,以及对ecowx所传输的32bit的字的内容并不是有操作系统决定的,而是有目标外部设备决定的,尽管内存方位模式WIMG 被设置为0b0101(该位表示禁用CacheCPU不保证由它发起的每一条访问指令都保证内存一致性),这两条指令仍然可以正常执行。

备注二:关于WIMG

所有取指和取数指令都是由WIMG控制的内存和Cache访问控制模式之下:

1:写通过模式(Write-ThroughW属性

W=1:采用写通过模式

该模式下处理器在执行store指令时,同时更新Cache和主存中的数据来保证数据的一致性。W=0:采用写回模式

在写回模式(Write-Back)中,当CPU执行store指令时,仅仅更新Cache中的块,而只有Cache中的块被替换时才写入主存中;写回方式可以提供系统性能,尤其是CPU产生store 指令的速度和主存出来store指令的速度一样快或者更快时。

2:禁止Cache模式(Caching-InhibitI属性

I=1时内存访问将完全使用主存中的地址,完全绕过Cache机制

I=0时使用Cache机制

3:内存一致模式(Memory-Coherency RequiredM属性

如果M=1,表示对此数据区的访问需要经过存储一致性处理,该位对于单PowerPC处理器而言没有什么意义。但是对于SMP结构的系统中,由Memory Coherence引起的Cache共享一致性的问题十分复杂,维护Cache一致性的访问也比较多,比如:

Example1:写更新法

在写操作完成之后,其数据在其它Cache中无效;

Example2:读请求法

如果Cache中出现了一个脏拷贝,则需要回写操作在读之前完成

上述两种方法都需要硬件支持完成,比如总线监听法保证SMP结构处理器的Cache一致性在SMP结构的处理器中,有些内存区域需要多个处理器共享,此时在使用MMU进行虚实地址映射时将WIMG字段的M位置1,此时当SMP中的一个处理器对该字段进行访问时一定会通知SMP中的其它处理器,实现存储器的共享一致性。

4:保护模式(GuardedG属性

此位为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

 

转自:http://blog.sina.com.cn/s/blog_70dd16910100ym0x.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值