Renesas-RH850 CPU System - CPU - Register Set
Renesas学习笔记
CPU System : CPU - Register Set
本章介绍此CPU上的程序寄存器和系统寄存器。
1 Program Registers
程序寄存器包括通用寄存器(r0到r31)和程序计数器(PC)。r0始终保持为0。复位后,通用寄存器r1到r31的值未定义。复位后PC的值为RBASE寄存器的值。
名称 | 功能 | 描述 |
---|---|---|
r0 | 零寄存器 | 始终保持为0 |
r1 | 汇编程序保留寄存器 | 用作生成地址的工作寄存器 |
r2 | 地址和数据变量寄存器 | 当使用的实时操作系统不使用此寄存器时使用 |
r3 | 堆栈指针(SP) | 用于在调用函数时生成堆栈帧 |
r4 | 全局指针(GP) | 用于访问数据区域中的全局变量 |
r5 | 文本指针(TP) | 用作指示文本区域开始的寄存器(放置程序代码的区域) |
r6到r29 | 地址和数据变量寄存器 | |
r30 | 元素指针(EP) | 用作访问内存时生成地址的基指针 |
r31 | 连接指针(LP) | 编译器调用函数时使用 |
PC | 程序计数器 | 在程序执行期间保持指令地址 |
r30 | 元素指针(EP) | 用作访问内存时生成地址的基指针 |
r31 | 链接指针(LP) | 编译器调用函数时使用 |
PC | 在程序执行期间保留指令地址 |
1.1 通用寄存器
提供了总共32个通用寄存器(r0到r31)。所有这些寄存器都可以用于数据变量或地址变量。 在软件开发环境中,假定通用寄存器r0到r5、r30和r31用于特殊用途,因此在使用它们时需要注意以下几点:
r0、r3和r30 这些寄存器由指令隐式使用。 r0是始终保持为0的寄存器。它用于使用0进行操作,以0为基地址的寻址等。 r3由PREPARE、DISPOSE、PUSHSP和POPSP指令隐式使用。 r30在SLD指令或SST指令访问内存时用作基指针。
r1、r4、r5和r31 这些寄存器由汇编器和C编译器隐式使用。 在使用这些寄存器时,必须首先保存寄存器内容,以便在使用后不丢失并且可以恢复。
r2 这个寄存器在某些情况下由实时操作系统使用。如果正在使用的实时操作系统不使用r2,则r2可以用作地址变量或数据变量的寄存器。
1.2 程序计数器(PC)
PC 保持正在执行的指令的地址。
PC的第0位固定为0,并且禁用分支(branching)到奇数地址。
2 Basic System Registers
基本系统寄存器用于控制CPU状态并保存异常信息。基本系统寄存器通过使用LDSR和STSR指令并指定系统寄存器号(由寄存器编号和selection ID组成)进行读写。
寄存器号 (regID, selID) | 符号 | 功能 | 访问权限 |
---|---|---|---|
SR0, 0 | EIPC | 确认EI级异常时的状态保存寄存器 | SV |
SR1, 0 | EIPSW | 确认EI级异常时的状态保存寄存器 | SV |
SR2, 0 | FEPC | 确认FE级异常时的状态保存寄存器 | SV |
SR3, 0 | FEPSW | 确认FE级异常时的状态保存寄存器 | SV |
SR5, 0 | PSW | 程序状态字 | *1 |
SR6, 0 | FPSR | 参见第3.2.3.4节,FPU功能寄存器 | CU0和SV |
SR7, 0 | FPEPC | 参见第3.2.3.4节,FPU功能寄存器 | CU0和SV |
SR8, 0 | FPST | 参见第3.2.3.4节,FPU功能寄存器 | CU0 |
SR9, 0 | FPCC | 参见第3.2.3.4节,FPU功能寄存器 | CU0 |
SR10, 0 | FPCFG | 参见第3.2.3.4节,FPU功能寄存器 | CU0 |
SR13, 0 | EIIC | EI级异常原因 | SV |
SR14, 0 | FEIC | FE级异常原因 | SV |
SR16, 0 | CTPC | CALLT执行状态保存寄存器 | UM |
SR17, 0 | CTPSW | CALLT执行状态保存寄存器 | UM |
SR20, 0 | CTBP | CALLT基指针 | UM |
SR21, 0 | SNZCFG | SNOOZE控制寄存器 | SV |
SR28, 0 | EIWR | EI级异常工作寄存器 | SV |
SR29, 0 | FEWR | FE级异常工作寄存器 | SV |
SR0, 1 | SPID | 系统保护标识符 | SV |
SR1, 1 | SPIDLIST | 可在SPID中指定的系统保护标识符列表 | SV |
SR2, 1 | RBASE | 复位向量基地址 | SV |
SR3, 1 | EBASE | 异常处理程序向量地址 | SV |
SR4, 1 | INTBP | 中断处理程序“地址”表的基地址 | SV |
SR5, 1 | MCTL | CPU控制 | SV |
SR6, 1 | PID | 处理器ID | SV |
SR8, 1 | SVLOCK | 监督锁定 | SV |
SR11, 1 | SCCFG | SYSCALL操作设置 | SV |
SR12, 1 | SCBP | SYSCALL基指针 | SV |
SR0, 2 | PEID | 处理器元件标识符 | UM |
SR1, 2 | BMID | 总线主控标识符 | UM |
SR6, 2 | MEA | 内存错误地址 | SV |
SR8, 2 | MEI | 内存错误信息 | SV |
SR15, 2 | RBCR0 | 寄存器组控制0 | SV |
SR16, 2 | RBCR1 | 寄存器组控制1 | SV |
SR17, 2 | RBNR | 寄存器组编号 | SV |
SR18, 2 | RBIP | 寄存器组初始指针 | SV |
*1:访问权限因位的不同而有所不同。有关详细信息,请参见第3.2.4.1(3)节,“异常类型”。
2.1 EIPC — 确认EI级异常时的状态保存寄存器
当确认EI级异常时,发生异常时正在执行的指令地址或下一条指令地址会保存到EIPC寄存器中(参见第3.2.4.1(3)节,异常的类型)。
由于只有一对EI级异常状态保存寄存器,在处理多个异常时,必须通过程序保存这些寄存器的内容。
请确保向EIPC寄存器设置一个偶数地址,不得指定奇数地址。
位位置 | 位名称 | 功能 | 读/写 (R/W) | 复位后的值 |
---|---|---|---|---|
31到1 | EIPC31到EIPC1 | 这些位表示在确认EI级异常时保存的PC。 | R/W | 未定义 |
0 | EIPC0 | 该位表示在确认EI级异常时保存的PC。 始终将该位设置为0,即使设置为1,在执行EIRET指令时传输到PC的值仍然是0。 | R/W | 未定义 |
2.2 EIPSW — 确认EI级异常时的状态保存寄存器
当确认EI级异常时,当前的PSW设置将被保存到EIPSW寄存器中。 由于只有一对EI级异常状态保存寄存器,在处理多个异常时,必须通过程序保存这些寄存器的内容。
位位置 | 31 | — | 30 | — | 29至26 | — | 25至20 | — | 19 | — | 18至16 | — | 15 | — | 14至8 | — | 7 | — | 6 | — | 5 | — | 4 | — | 3 | — | 2 | — | 1 | — | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
位名称 | - | — | UM | — | - | — | EIMASK | — | - | — | CU2至CU0 | — | EBV | — | - | — | NP | — | EP | — | ID | — | SAT | — | CY | — | OV | — | S | — | Z |
位 | 位名称 | 描述 | R/W | 复位后的值 |
---|---|---|---|---|
31 | — | (保留以供将来扩展。请确保设置为0) | R | 0 |
30 | UM | 当确认EI级异常时,此位存储PSW.UM位设置。 | R/W | 0 |
29至26 | — | (保留以供将来扩展。请确保设置为0) | R | 0 |
25至20 | EIMASK | 当确认EI级异常时,此位存储PSW.EIMASK位设置。*1 | R/W | 0 |
19 | — | (保留以供将来扩展。请确保设置为0) | R | 0 |
18至16 | CU2至CU0 | 当确认EI级异常时,这些位存储PSW.CU2-0字段设置。*2 | R/W | 0 |
15 | EBV | 当确认EI级异常时,此位存储PSW.EBV位设置。 | R/W | 0 |
14至8 | — | (保留以供将来扩展。请确保设置为0) | R | 0 |
7 | NP | 当确认EI级异常时,此位存储PSW. NP位设置。 | R/W | 0 |
6 | EP | 当确认EI级异常时,此位存储PSW.EP位设置。 | R/W | 0 |
5 | ID | 当确认EI级异常时,此位存储PSW. ID位设置。 | R/W | 1 |
4 | SAT | 当确认EI级异常时,此位存储PSW.SAT位设置。 | R/W | 0 |
3 | CY | 当确认EI级异常时,此位存储PSW.CY位设置。 | R/W | 0 |
2 | OV | 当确认EI级异常时,此位存储PSW.OV位设置。 | R/W | 0 |
1 | S | 当确认EI级异常时,此位存储PSW.S位设置。 | R/W | 0 |
0 | Z | 当确认EI级异常时,此位存储PSW.Z位设置。 | R/W | 0 |
注意:
- *1: 只有当INTCFG.EPL设置为1时,该字段才可以设置为非零值。如果INTCFG.EPL清零,该字段的值也变为0。请注意,如果在该字段值为非零时清零INTCFG.EPL,该字段的值将变为0。
- *2: CU2保留用于未来兼容该CPU的CPU。在该CPU中,它始终设置为0。
2.3 FEPC — 确认FE级异常时的状态保存寄存器
当确认FE级异常时,发生FE级异常时正在执行的指令或下一条指令的地址会被保存到FEPC寄存器(参见第3.2.4.1(3)节,异常类型)。由于只有一对FE级异常状态保存寄存器,因此在处理多个异常时,必须由程序保存这些寄存器的内容。
务必将偶数地址设置到FEPC寄存器。不得指定奇数地址。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | FEPC31至1 | 这些位指示确认FE级异常时保存的PC。 | R/W | *1 |
0 | FEPC0 | 此位指示确认FE级异常时保存的PC。始终将此位设置为0。即使将其设置为1,在执行FERET指令时传输到PC的值也是0。 | R/W | *1 |
注 *1:当复位发生时,在复位发生之前完成执行的指令中,最后执行的指令的程序计数器值被保存。如果在复位发生之前没有完成执行的指令,则复位后的值未定义。没有信息表明复位后的值是执行完成的指令的程序计数器值还是未定义的值。
2.4 FEPSW — 确认FE级异常时的状态保存寄存器
当确认FE级异常时,当前的PSW设置会被保存到FEPSW寄存器。由于只有一对FE级异常状态保存寄存器,因此在处理多个异常时,必须由程序保存这些寄存器的内容。
2.5 PSW — 程序状态字
PSW(程序状态字)是一组标志,用于指示程序状态(指令执行结果)和CPU的操作状态(标志是PSW中的位,由条件指令(Bcond、CMOV等)引用)。
注意事项:
当使用LDSR指令更改此寄存器的内容时,更改后的内容从后续指令开始生效。有关详细信息,请参见第3.2.7.3节,系统寄存器更新后的危害管理。
PSW寄存器的访问权限因位而异。所有位都可以读取,但某些位只能在特定条件下写入。有关每个位的访问权限,如下标所示:
位 | 名称 | 读取时的访问权限 | 写入时的访问权限 |
---|---|---|---|
30 | UM | UM | SV*1 |
25至20 | EIMASK | UM | SV*1 |
18至16 | CU2至CU0 | UM | SV*1 |
15 | EBV | UM | SV*1 |
7 | NP | UM | SV*1 |
6 | EP | UM | SV*1 |
5 | ID | UM | SV*1 |
4 | SAT | UM | UM |
3 | CY | UM | UM |
2 | OV | UM | UM |
1 | S | UM | UM |
0 | Z | UM | UM |
注 *1:整个PSW寄存器的访问权限是UM,因此即使在PSW.UM为1时使用LDSR指令写入寄存器,也不会发生PIE异常。在这种情况下,写入操作被忽略。
PSW寄存器内容:
位位置 | 位名称 | 描述 | 读/写 | 复位后的值 |
---|---|---|---|---|
31 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
30 | UM | 此位指示CPU处于用户模式(UM模式)。 | R/W | 0 |
0:监督模式 | ||||
1:用户模式 | ||||
29至26 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
25至20 | EIMASK | 此字段指示启用和禁用中断(EIINTn)确认的中断优先级边界。对于优先级高于此字段设置值的中断(EIINTn),启用确认。对于优先级低于或等于此字段设置值的中断(EIINTn),禁用确认。 | R/W | 0 |
0:所有优先级不可接受 | ||||
1:可接受优先级为0 | ||||
2:可接受优先级为0至1 | ||||
… | ||||
62:可接受优先级为0至61 | ||||
63:可接受优先级为0至62 | ||||
只有在INTCFG.EPL设置为1时,中断确认控制才会按此字段的值进行。如果INTCFG.EPL清除为0,则不会按此字段的值进行中断确认控制*1。 | ||||
如果INTCFG.EPL设置为1且确认中断(EIINTn),则中断优先级将作为PSW更改的一部分保存在此字段中,以确认中断(EIINTn)。指定优先级为63的中断(EIINTn)始终被禁用。 | ||||
但是,由于HALT或SNOOZE引起的CPU停机状态也会被优先级为63的中断(EIINTn)释放。 | ||||
19 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
18至16 | CU2至CU0 | 这些位指示协处理器使用权限。当对应于协处理器的位为0时,如果执行协处理器指令或访问协处理器资源(系统寄存器),则会发生协处理器不可用异常。 | R/W | 000 |
位18(CU2):固定为0*2。 | ||||
位17(CU1):FXU | ||||
位16(CU0):FPU | ||||
在没有相应协处理器的设备中,CU2至CU0固定为0。 | ||||
15 | EBV | 此位指示复位向量和异常向量操作。参见第3.2.3.2(16)节,RBASE — 复位向量基地址和第3.2.3.2(17)节,EBASE — 异常处理程序向量地址。 | R/W | 0 |
14至8 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
7 | NP | 此位禁用FE级异常的确认。当确认FE级异常时,此位设置为1以禁用EI级和FE级异常的确认。有关NP位禁用确认的异常,请参见表3.102,异常原因列表。 | R/W | 0 |
0:启用FE级异常的确认。 | ||||
1:禁用FE级异常的确认。 | ||||
6 | EP | 此位指示正在服务除中断以外的异常。当发生相应异常时,它被设置为1。即使设置为1,此位也不影响确认异常请求。 | R/W | 0 |
0:没有正在服务的中断以外的异常。 | ||||
1:正在服务除中断以外的异常。 | ||||
5 | ID | 此位禁用EI级异常的确认。当确认EI级或FE级异常时,此位设置为1以禁用EI级异常的确认。有关ID位禁用确认的异常,请参见表3.102,异常原因列表。此位还用于在服务普通程序或中断时禁用EI级异常的确认,作为关键区。在执行DI指令时设置为1,执行EI指令时清除为0。通过EI或ID指令更改ID位将在下一条指令生效。 | R/W | 1 |
0:启用EI级异常的确认。 | ||||
1:禁用EI级异常的确认。 | ||||
4 | SAT*3 | 此位指示饱和算术运算指令导致溢出并对结果应用饱和处理。这是一个累积标志,即一旦发生饱和,它被设置为1,并且不会被后续没有饱和结果的指令清除为0。此位由LDSR指令清除。请注意,执行算术运算指令既不会设置也不会清除此标志。 | R/W | 0 |
0:结果没有饱和 | ||||
1:结果饱和。 | ||||
3 | CY | 此位指示操作结果是否发生了进位或借位。 | R/W | 0 |
0:未发生进位和借位。 | ||||
1:发生了进位或借位。 | ||||
2 | OV*3 | 此位指示操作期间是否发生了溢出。 | R/W | 0 |
0:未发生溢出。 | ||||
1:发生了溢出。 | ||||
1 | S*3 | 此位指示操作结果是否为负数。 | R/W | 0 |
0:操作结果为正或0。 | ||||
1:操作结果为负。 | ||||
0 | Z | 此位指示操作结果是否为0。 | R/W | 0 |
0:操作结果不为0。 | ||||
1:操作结果为0。 |
备注:
*1:只有当INTCFG.EPL = 1时,该字段中才可以设置非0值。如果INTCFG.EPL = 0,该字段的值变为0。请注意,如果当该字段的值为非0时INTCFG.EPL被清除为0,该字段的值变为0。
*2:协处理器使用权限CU2保留用于将来与此CPU兼容的CPU。
*3:饱和处理根据OV和S标志的内容应用于操作结果。只有在饱和算术操作中OV标志设置为1时,SAT标志才会设置为1。
2.6 EIIC - EI Level Exception Cause
EIIC(EI级异常原因)寄存器用于保存发生任何EI级异常时的异常原因。保存在该寄存器中的值是对应特定异常原因的异常代码(参见表3.102,异常原因列表)。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | EIIC31至EIIC0 | 当发生EI级异常时,这些位存储异常原因代码。EIIC15-0字段存储表3.102中显示的异常原因代码。EIIC31-16字段存储为每个异常单独定义的详细异常原因代码。如果没有特别的定义,这些位将设置为0。 | R/W | 0 |
2.7 FEIC — FE Level Exception Cause
FEIC(FE级异常原因)寄存器用于保存发生任何FE级异常时的异常原因。保存在该寄存器中的值是对应特定异常原因的异常代码(参见表3.102,异常原因列表)。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | FEIC31至FEIC0 | 当发生FE级异常时,这些位存储异常原因代码。FEIC15-0字段存储表3.102中显示的异常原因代码。FEIC31-16字段存储为每个异常单独定义的详细异常原因代码。如果没有特别的定义,这些位将设置为0。 | R/W | 0 |
2.8 CTPC — 执行 CALLT 时的状态保存寄存器
当执行 CALLT 指令时,CALLT 指令之后的下一条指令的地址会被保存到 CTPC 寄存器中。
确保将偶数地址设置到 CTPC 寄存器。不得指定奇数地址。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | CTPC31至CTPC1 | 这些位表示 CALLT 指令之后的指令的 PC。 | R/W | 未定义 |
0 | CTPC0 | 此位表示 CALLT 指令之后的指令的 PC。始终将此位设置为0。即使将其设置为1,在执行 CTRET 指令时传输到 PC 的值也是0。 | R/W | 未定义 |
2.9 CTPSW — 执行 CALLT 时的状态保存寄存器
当执行 CALLT 指令时,部分 PSW(程序状态字)的设置会被保存到 CTPSW 寄存器中。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至5 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
4 | SAT | 此位存储执行 CALLT 指令时的 PSW. SAT 位设置。 | R/W | 0 |
3 | CY | 此位存储执行 CALLT 指令时的 PSW. CY 位设置。 | R/W | 0 |
2 | OV | 此位存储执行 CALLT 指令时的 PSW. OV 位设置。 | R/W | 0 |
1 | S | 此位存储执行 CALLT 指令时的 PSW. S 位设置。 | R/W | 0 |
0 | Z | 此位存储执行 CALLT 指令时的 PSW. Z 位设置。 | R/W | 0 |
2.10 CTBP — CALLT 基指针
CTBP 寄存器用于指定 CALLT 指令的表地址并生成目标地址。
确保将 CTBP 寄存器设置为半字地址。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | CTBP31至CTBP1 | 这些位表示 CALLT 指令的基指针地址。这些位表示 CALLT 指令使用的表的起始地址。 | R/W | 0 |
0 | CTBP0 | 此位表示 CALLT 指令的基指针地址。始终将此位设置为0。 | R | 0 |
2.11 SNZCFG — SNOOZE 配置
SNZCFG 寄存器用于配置 SNOOZE 指令的操作。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至8 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
7至0 | SNZCNT | 这些位指定由 SNOOZE 指令暂时停止执行的时钟周期数。 | R/W | 20H |
2.12 EIWR — EI 级异常工作寄存器
当发生EI级别异常时,EIWR寄存器用作工作寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | EIWR31至EIWR0 | 这些位构成一个工作寄存器,可以在处理 EI 级异常时用于任何用途。使用该寄存器存储通用寄存器的值等。 | R/W | 未定义 |
2.13 FEWR — FE 级异常工作寄存器
FEWR寄存器在发生FE级异常时用作工作寄存器
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | FEWR31至FEWR0 | 这些位构成一个工作寄存器,可以在处理 FE 级异常时用于任何用途。使用该寄存器存储通用寄存器的值等。 | R/W | 未定义 |
2.14 SPID — 系统保护标识符
SPID 寄存器保存 CPU 的系统保护标识符。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至5 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
4至0 | SPID | 这些位表示系统保护标识符。系统保护标识符是一个可变ID,用于在由包括此CPU在内的两个或多个总线主控器组成的产品中进行访问保护。在此CPU中,SPID用于检查MPU的区域匹配,使产品定义的系统规范能够在MPU的保护功能中得到反映。如果尝试设置非法的系统保护标识符,SPID寄存器不会更新并保持原始值。有关其用途和值的约束,请参见第3.9.7节,G4MH寄存器的初始值产品信息。 | R/W | *1 |
注 *1:请参见第3.9.7节,G4MH寄存器的初始值信息。
2.15 SPIDLIST — 合法系统保护标识符列表
SPIDLIST 寄存器包含可以设置到 SPID 寄存器的系统保护标识符列表。
对应于可设置系统保护标识符的位被设置为 1。对应于非法系统保护标识符的位被清除为 0。这些值是在 CPU 外部作为系统规范设置的,不能被此 CPU 修改。
位位置 | 位名称 | SPIDLIST 寄存器内容 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|---|
31 | SL31 | 此位表示 31 是否可以设置为系统保护标识符。 | R | *1 | |
30 | SL30 | 此位表示 30 是否可以设置为系统保护标识符。 | R | *1 | |
29 | SL29 | 此位表示 29 是否可以设置为系统保护标识符。 | R | *1 | |
28 | SL28 | 此位表示 28 是否可以设置为系统保护标识符。 | R | *1 | |
27 | SL27 | 此位表示 27 是否可以设置为系统保护标识符。 | R | *1 | |
26 | SL26 | 此位表示 26 是否可以设置为系统保护标识符。 | R | *1 | |
25 | SL25 | 此位表示 25 是否可以设置为系统保护标识符。 | R | *1 | |
24 | SL24 | 此位表示 24 是否可以设置为系统保护标识符。 | R | *1 | |
23 | SL23 | 此位表示 23 是否可以设置为系统保护标识符。 | R | *1 | |
22 | SL22 | 此位表示 22 是否可以设置为系统保护标识符。 | R | *1 | |
21 | SL21 | 此位表示 21 是否可以设置为系统保护标识符。 | R | *1 | |
20 | SL20 | 此位表示 20 是否可以设置为系统保护标识符。 | R | *1 | |
19 | SL19 | 此位表示 19 是否可以设置为系统保护标识符。 | R | *1 | |
18 | SL18 | 此位表示 18 是否可以设置为系统保护标识符。 | R | *1 | |
17 | SL17 | 此位表示 17 是否可以设置为系统保护标识符。 | R | *1 | |
16 | SL16 | 此位表示 16 是否可以设置为系统保护标识符。 | R | *1 | |
15 | SL15 | 此位表示 15 是否可以设置为系统保护标识符。 | R | *1 | |
14 | SL14 | 此位表示 14 是否可以设置为系统保护标识符。 | R | *1 | |
13 | SL13 | 此位表示 13 是否可以设置为系统保护标识符。 | R | *1 | |
12 | SL12 | 此位表示 12 是否可以设置为系统保护标识符。 | R | *1 | |
11 | SL11 | 此位表示 11 是否可以设置为系统保护标识符。 | R | *1 | |
10 | SL10 | 此位表示 10 是否可以设置为系统保护标识符。 | R | *1 | |
9 | SL9 | 此位表示 9 是否可以设置为系统保护标识符。 | R | *1 | |
8 | SL8 | 此位表示 8 是否可以设置为系统保护标识符。 | R | *1 | |
7 | SL7 | 此位表示 7 是否可以设置为系统保护标识符。 | R | *1 | |
6 | SL6 | 此位表示 6 是否可以设置为系统保护标识符。 | R | *1 | |
5 | SL5 | 此位表示 5 是否可以设置为系统保护标识符。 | R | *1 | |
4 | SL4 | 此位表示 4 是否可以设置为系统保护标识符。 | R | *1 | |
3 | SL3 | 此位表示 3 是否可以设置为系统保护标识符。 | R | *1 | |
2 | SL2 | 此位表示 2 是否可以设置为系统保护标识符。 | R | *1 | |
1 | SL1 | 此位表示 1 是否可以设置为系统保护标识符。 | R | *1 | |
0 | SL0 | 此位表示 0 是否可以设置为系统保护标识符。 | R | *1 |
注 *1:参见第 3.9.7 节,G4MH 寄存器的初始值产品信息。
2.16 RBASE — 复位向量基地址
RBASE 寄存器在复位时指示复位向量地址。如果 PSW.EBV 位为 0,此寄存器还指示异常处理程序向量地址和异常处理程序地址的选择方法。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至9 | RBASE31至RBASE9 | 这些位在复位时指示复位向量。当 PSW.EBV = 0 时,此地址也用作异常向量。 | R | *1 |
8至2 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
1 | DV | 当设置 DV 位时,中断的异常处理程序地址使用直接向量方法确定。详细信息参见第 3.2.4.4(1)(b) 节——表参考方法。此位在 PSW.EBV = 0 时有效。 | R | *1 |
0 | RINT | 当设置 RINT 位时,中断处理的异常处理程序地址减少。详细信息参见第 3.2.4.4(1)(a) 节——直接向量方法。此位在 PSW.EBV = 0 时有效。 | R | *1 |
注 *1:参见第 3.9.7 节,G4MH 寄存器的初始值产品信息。
2.17 EBASE — 异常处理程序向量地址
EBASE 寄存器指示异常处理程序向量地址和异常处理程序地址的选择方法。当 PSW.EBV 位为 1 时,此寄存器有效。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至9 | EBASE31至EBASE9 | 异常处理程序例程地址改变为通过将每个异常的偏移地址添加到此寄存器指定的基地址而得到的地址。EBASE8到EBASE0位不作为名称分配,因为这些位总是0。 | R/W | 未定义 |
8至2 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
1 | DV | 当设置 DV 位时,中断的异常处理程序地址使用直接向量方法确定。详细信息参见第 3.2.4.4(1)(b) 节,表参考方法。 | R/W | 未定义 |
0 | RINT | 当设置 RINT 位时,中断处理的异常处理程序地址简化。详细信息参见第 3.2.4.4(1)(a) 节,直接向量方法。 | R/W | 未定义 |
2.18 INTBP — 中断处理程序地址表的基地址
INTBP 寄存器在选择表参考方法作为中断处理程序地址选择方法时指示表的基地址。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至9 | INTBP31至INTBP9 | 这些位指示在使用表参考方法时中断的基指针地址。 | R/W | 未定义 |
8至0 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
2.19 MCTL — 机器控制
MCTL 寄存器用于控制 CPU。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
0 | UIC | 此位用于控制用户模式下的中断启用/禁用操作。当此位设置为 1 时,可以在用户模式下执行 EI/DI 指令。 | R/W | 0 |
2.20 PID - 处理器ID
PDI寄存器保留了一个唯一标识 CPU 的处理器标识符。PID 寄存器是只读寄存器。
注意: PID 寄存器指示用于识别所包含的 CPU 内核和 CPU 内核配置的信息。不假设软件行为会根据 PID 寄存器信息动态变化。
位位置 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|
31至24 | 体系结构标识符,该标识符指示处理器的体系结构。 | R | *1 |
23至8 | 该标识符指示处理器的功能。这些位指示每个位定义的功能是否实现(1:实现,0:未实现)。位 23至19:保留;位 18:寄存器组;位 17至12:保留;位 11:扩展浮点运算功能;位 10:双精度浮点运算功能;位 9:单精度浮点运算功能;位 8:内存保护单元(MPU)功能。注意:如果实现了双精度浮点运算功能(位 10 为 1),则一定会实现单精度浮点运算功能(位 9 为 1)。 | R | *1 |
7至0 | 该标识符指示处理器的版本。 | R | *1 |
注 *1:详情参见第 3.9.7 节,G4MH 寄存器的初始值产品信息。
2.21 SVLOCK — Supervisor Lock
SVLOCK 寄存器用于限制 CPU 在监督模式下的操作。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
0 | SVL | 此位指定是否在监督模式下限制 CPU 操作。0:不限制;1:限制。如果SVL位设置为1,则以下系统寄存器在CPU处于管理模式时也不能更新:SPID, MPM, MPLA, MPUA, MPAT, MPIDn, MPBK | R/W | 0 |
注意 1:目标系统寄存器是那些与内存访问相关的寄存器。此寄存器防止这些寄存器被不慎重写并防止在 CPU 外部执行无意的内存访问。
2.22 SCCFG — SYSCALL 操作设置
SCCFG 寄存器用于设置与 SYSCALL 指令相关的操作。在使用 SYSCALL 指令之前,请确保为此寄存器设置适当的值。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至8 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
7至0 | SIZE | 这些位指定 SYSCALL 指令引用的表的最大条目数。如果 SIZE 为 0,则最大条目数为 1;如果 SIZE 为 255,则最大条目数为 256。通过根据 SYSCALL 指令分支的功能数量适当地设置最大条目数,可以有效地使用内存区域。果为 SYSCALL 指令指定了超过最大条目数的向量,则选择第一个条目。请将错误处理程序放置在第一个条目。 | R/W | 0 |
2.23 SCBP — SYSCALL 基指针
SCBP 寄存器用于指定 SYSCALL 指令的表地址并生成目标地址。在使用 SYSCALL 指令之前,请确保为此寄存器设置适当的值。
需要确保是将一个字地址(最低两位为0)设置到 SCBP 寄存器。
2.24 PEID — Processor Element Identifier
仅可读,用于获取 CPPU CORE ID。
2.25 BMID — 总线主控标识符
仅可读,用于获取 CPU 的总线主控标识符。
2.26 MEA — 内存错误地址
MEA 寄存器用于记录内存对齐错误(MAE)或内存保护单元(MPU)违规发生时的地址。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | MEA | 这些位保存发生内存对齐错误(MAE)或 MPU 违规的地址。 | R/W | 未定义 |
2.27 MEI — 内存错误信息
MEI 寄存器保存导致未对齐异常(MAE)或内存保护异常(MDP)的指令信息。该信息可用作软件仿真时的提示信息。
注1:即使由于硬件规格的原因,数据被分割并多次访问,指令指示的原始数据类型仍然会被存储。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至28 | LEN | 这些位指示导致异常的指令的代码大小。 0: 非指令因素 2: 16位 4: 32位 6: 48位 8: 64位 其他值保留以供将来使用,并且永不存储在此处。详细信息参见表3.37。 |
R/W | 未定义 |
27至21 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
20至16 | REG | 这些位指示导致异常的指令的源寄存器号或目标寄存器号。详细信息参见表3.37。 | R/W | 未定义 |
15至12 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
11至9 | DS | 这些位指示导致异常的指令的数据类型。 0: 字节(8位) 1: 半字(16位) 2: 字(32位) 3: 双字(64位) 4: 四字(128位) 其他值保留以供将来使用,并且永不存储在此处。详细信息参见表3.37。 |
R/W | 未定义 |
8 | U | 该位指示导致异常的指令的符号扩展方法。 0: 有符号 1: 无符号 详细信息参见表3.37。 |
R/W | 未定义 |
7至6 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
5至1 | ITYPE | 这些位指示导致异常的指令。详细信息参见表3.37。 | R/W | 未定义 |
0 | RW | 该位指示导致异常的指令执行的操作是读取(Load-memory)还是写入(Store-memory)。 0: 读取(Load-memory) 1: 写入(Store-memory) 详细信息参见表3.37。 |
R/W | 未定义 |
2.28 RBCR0 — 寄存器组控制 0
RBCR0 寄存器控制寄存器组功能的操作。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至17 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
16 | MD | 此位指定寄存器组的保存模式。 0: 保存模式 0 1: 保存模式 1 保存的寄存器列表: |
R/W | 0 |
15 | BE15 | 此位指定是否在优先级 15 至 63 的中断(EIINTn)上使用寄存器组。 0: 不在优先级 15 至 63 的中断上使用寄存器组。 1: 在优先级 15 至 63 的中断上使用寄存器组。 当此位设置为 1 时,如果优先级 15 至 63 的 EI 级中断(EIINTn)被确认,可以使用寄存器组功能。 |
R/W | 0 |
14至0 | BE14至BE0 | 这些位指定寄存器组将要使用的中断的优先级级别。 0: 不在与该位对应的级别的中断上使用寄存器组。 1: 在与该位对应的级别的中断上使用寄存器组。 这些位的位置与中断的优先级级别对应如下:当接受到与该级别对应的中断(EIINTn)时,如果该级别的对应位被设置(1),则使用寄存器组。 |
R/W | 0 |
寄存器组的保存模式如下:
✓: 保存
—: 不保存
目标寄存器 | 保存模式 0 | 保存模式 1 |
---|---|---|
PC | ✓ | ✓ |
PSW | ✓ | ✓ |
EIIC | ✓ | ✓ |
FPSR | ✓ | ✓ |
r1-r19 | ✓ | ✓ |
r20-r29 | — | ✓ |
r30 | ✓ | ✓ |
r31 | — | ✓ |
备注:按照该功能的定义,优先级为 63 的中断(EIINTn)包括在内。然而,由于优先级为 63 的中断总是被 PSW.EIMASK 和 PLMR 寄存器屏蔽,因此寄存器组功能不会被优先级为 63 的中断(EIINTn)使用。
2.29 RBCR1 — 寄存器组控制 1
RBCR1 寄存器控制寄存器组功能的操作。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至16 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
15 | NC15 | 当确认优先级为 15 至 63 的中断(EIINTn)时,指定设置在 PSW. ID 位中的值。 0: 为优先级为 15 至 63 的中断确认设置 PSW. ID = 0 1: 为优先级为 15 至 63 的中断确认设置 PSW. ID = 1(初始设置) 然而,只有当中断处理程序地址选择方法为表参考方法且寄存器组可用时,此设置才有效。 |
R/W | 1 |
14至0 | NC14至NC0 | 这些位指定在接受与位位置对应的优先级级别的中断(EIINTn)时设置在 PSW. ID 位中的值。 0: 接受与位位置对应优先级级别的中断时设置 PSW. ID 为 0。 1: 接受与位位置对应优先级级别的中断时设置 PSW. ID 为 1(初始值)。 然而,只有当中断处理程序地址选择方法设置为表参考方法且使用寄存器组时,此设置才有效。 |
R/W | 7FFFH |
注1:按照该功能的定义,优先级为 63 的中断(EIINTn)包括在内。然而,由于优先级为 63 的中断总是被 PSW.EIMASK 和 PLMR 寄存器屏蔽,因此寄存器组功能不会被优先级为 63 的中断(EIINTn)使用。
2.30 RBNR — 寄存器组编号
RBNR 寄存器指示下一个使用的寄存器组功能的编号。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至6 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
5至0 | BN | 这些位指示下一个使用的寄存器组的编号。 当接受使用寄存器组的中断(EIINTn)时,这些位的值加 1。如果 BN 的值大于 INTCFG.ULNR,或 BN 的值为 63,则如果发生使用寄存器组的中断(EIINTn),则会生成 SYSERR 异常。该中断不被接受,并被挂起。 当执行 RESBANK 指令时,BN 的值减 1。如果在 BN 的值为 0 时执行 RESBANK 指令,则指令不被执行并生成 SYSERR 异常。在这种情况下,BN 不会更新,其值保持不变。 |
R/W | 0 |
2.31 RBIP — 寄存器组初始指针
RBIP 寄存器指示寄存器组所在的内存区域的起始地址。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至4 | RBIP31至RBIP4 | 这些位指示寄存器组的初始指针。RBCR0. MD 和 RBNR. BN 的值与此值一起确定要使用的下一个寄存器组分配的内存地址,如下所示: • 保存模式 0 (RBCR0. MD = 0): RBIP − RBNR. BN × 60H • 保存模式 1 (RBCR0. MD = 1): RBIP − RBNR. BN × 90H |
R/W | 未定义 |
3至0 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
3 中断功能寄存器
中断功能系统寄存器通过使用 LDSR 和 STSR 指令并指定系统寄存器号(由寄存器号和选择 ID 组成)进行读写。
寄存器编号 (regID, selID) | 符号 | 功能 | 访问权限 |
---|---|---|---|
SR10, 2 | ISPR | 服务中的中断优先级 | SV |
SR11, 2 | IMSR | 中断屏蔽状态 | SV |
SR12, 2 | ICSR | 中断控制状态 | SV |
SR13, 2 | INTCFG | 中断功能设置 | SV |
SR14, 2 | PLMR | 中断优先级屏蔽 | SV |
3.1 ISPR — 服务中的中断优先级
ISPR 寄存器保存 CPU 处理的 EI 级中断(EIINTn)的中断优先级,当发生多重中断时,按中断优先级进行优先级封顶。
对于 ISPR 寄存器,当 INTCFG.EPL 被清除为 0 时,功能启用。当 INTCFG.EPL 设置为 1 时,ISPR 寄存器的功能被禁用,不控制中断(EIINTn)的确认。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至16 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
15至0 | ISP15至ISP0 | 这些位指示与相关位位置对应的优先级*1的 EIINTn 中断的确认状态。 0: 未确认优先级对应位位置的中断请求。 1: CPU 内核正在服务优先级对应位置的中断请求。 |
R*3 | 0 |
3.2 IMSR — 中断屏蔽状态
IMSR 寄存器用于指示,通知 CPU 的中断是否被 CPU 中的屏蔽功能屏蔽接受。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至5 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
4 | FNP | 此位指定由 PSW. NP 屏蔽接受的 FEINT 是否存在。 0: 不存在由 PSW. NP 屏蔽的 FEINT 1: 存在由 PSW. NP 屏蔽的 FEINT |
R | 0 |
3 | ENP | 此位指定由 PSW. NP 屏蔽接受的 EIINT 是否存在。 0: 不存在由 PSW. NP 屏蔽的 EIINT 1: 存在由 PSW. NP 屏蔽的 EIINT |
R | 0 |
2 | EID | 此位指定由 PSW. ID 屏蔽接受的 EIINT 是否存在。 0: 不存在由 PSW. ID 屏蔽的 EIINT 1: 存在由 PSW. ID 屏蔽的 EIINT |
R | 0 |
1 | EPLM | 此位指定由 PLMR. PLM 屏蔽接受的 EIINT 是否存在。 0: 不存在由 PLMR.PLM 屏蔽的 EIINT 1: 存在由 PLMR.PLM 屏蔽的 EIINT |
R | 0 |
0 | EEIM | 此位指定当 INTCFG. EPL 被清除为 0 时由 ISPR.ISP 屏蔽接受的 EIINT 是否存在,或当 INTCFG.EPL 被设置为 1 时由 PSW.EIMASK 屏蔽接受的 EIINT 是否存在。 0: 不存在由 ISPR.ISP 或 PSW.EIMASK 屏蔽的 EIINT 1: 存在由 ISPR.ISP 或 PSW.EIMASK 屏蔽的 EIINT |
R | 0 |
IMSR 的更新顺序:
在通知 CPU 的中断中,接受条件按 ISPR 或 PSW.EIMASK(由 INTCFG.EPL 选择)、PLMR、PSW. ID、PSW. NP 的顺序确认。如果接受条件设置为屏蔽中断的值,则中断请求在此处被屏蔽,并且不确认后续顺序中的接受条件。注意,根据异常的类型,不属于接受条件的条件的确认不属于接受条件。
3.3 ICSR — 中断控制状态
ICSR 寄存器指示 CPU 中的中断控制状态。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
0 | PMEI | 此位指示存在由 PLMR 寄存器屏蔽优先级级别的中断(EIINTn)。详情参见第 3.2.4.1(5) 节,中断异常优先级和优先级屏蔽。 | R | 0 |
3.4 INTCFG — 中断功能设置
INTCFG 寄存器用于指定与 CPU 内部中断功能相关的设置。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至22 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
21至16 | ULNR | 指定可用寄存器组编号的最大值。 如果 RBNR.BN 的值大于 ULNR,或者 RBNR.BN 的值为 63,并且发生启用寄存器组功能的中断(EIINTn),将发生 SYSERR 异常。注意,该中断(EIINTn)不被接受,并被挂起。 |
R/W | F |
15至2 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
1 | EPL | 对于中断(EIINTn),指定是否启用中断优先级级别扩展功能。 0: 禁用中断优先级级别扩展功能 1: 启用中断优先级级别扩展功能 |
R/W | 0 |
0 | ISPC | 此位更改 ISPR 寄存器的写入方式。 0: ISPR 寄存器自动更新。程序触发的更新(通过执行 LDSR 指令)被忽略。 1: ISPR 寄存器不自动更新。程序触发的更新(通过执行 LDSR 指令)被执行。 |
R/W | 0 |
3.5 PLMR — 中断优先级级别屏蔽
PLMR 寄存器屏蔽优先级不高于这些位指定的级别的中断(EIINTn)。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至6 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
5至0 | PLM | 这些位用于屏蔽优先级不高于这些位指定级别的中断(EIINTn)。 当中断(EIINTn)被此寄存器屏蔽时,不被接受。 由于为该 CPU 定义的中断最高优先级为 0,如果在 PLM 位中指定为 0,则所有中断(EIINTn)均由此寄存器屏蔽。 由于该 CPU 定义的最低中断优先级为 63,优先级为 63 的中断(EIINTn)总是被屏蔽。 无论 INTCFG.EPL 设置如何,通过 PLMR 进行的中断屏蔽由 PLM 位的值和从中断控制器通知的中断优先级值完成。 如果通过 LDSR 指令更改 PLMR 的值,新 PLMR 值将在该 LDSR 指令之后的指令中反映。 |
R/W | 10H |
PLM 位的值与要屏蔽的最高优先级中断的对应关系
PLM 位的值 | 要屏蔽的最高优先级中断 |
---|---|
0 | 优先级 0(所有优先级均不可接受) |
1 | 优先级 1(仅可接受优先级 0) |
… | … |
14 | 优先级 14(可接受优先级 0 到 13) |
15 | 优先级 15(可接受优先级 0 到 14) |
… | … |
62 | 优先级 62(可接受优先级 0 到 61) |
63 | 优先级 63(可接受优先级 0 到 62) |
4 FPU 功能寄存器
浮点寄存器:
FPU 使用 CPU 的通用寄存器(r0 到 r31)。没有仅用于浮点运算的寄存器文件。
单精度浮点指令:
可以指定 32 个 32 位寄存器。这些通用寄存器对应于 r0 到 r31。
双精度浮点指令:
可以指定 16 个 64 位寄存器。成对的通用寄存器作为寄存器对使用({r1, r0}, {r3, r2}…{r31, r30})。在指令格式中,每对寄存器由偶数寄存器指定。因为 r0 是一个零寄存器(总是持有 0),原则上双精度浮点指令不能使用 {r1, r0}。
浮点功能系统寄存器
FPU 可以使用以下系统寄存器来控制浮点运算。浮点功能系统寄存器通过使用 LDSR 和 STSR 指令并指定系统寄存器号(由寄存器号和选择 ID 组成)进行读写。
FPSR:用于控制和监视异常。它还保存比较操作的结果,并设置 FPU 操作模式。其位用于设置条件代码、次正规数冲洗使能、舍入模式控制、原因、异常使能和保存。
FPEPC:存储发生浮点运算异常的指令的程序计数器值。
FPST:反映与操作状态相关的 FPSR 寄存器位的内容。
FPCC:反映 FPSR. CC(7:0)位的内容。
FPCFG:反映与操作设置相关的 FPSR 寄存器位的内容。
寄存器编号 (regID, selID) | 浮点功能系统寄存器 | 符号 | 功能 | 访问权限 |
---|---|---|---|---|
SR6, 0 | FPSR | FPSR | 浮点运算配置/状态 | CU0 和 SV |
SR7, 0 | FPEPC | FPEPC | 浮点运算异常程序计数器 | CU0 和 SV |
SR8, 0 | FPST | FPST | 浮点运算状态 | CU0 |
SR9, 0 | FPCC | FPCC | 浮点运算比较结果 | CU0 |
SR10, 0 | FPCFG | FPCFG | 浮点运算配置 | CU0 |
4.1 FPSR — 浮点配置/状态
FPSR 寄存器指示浮点运算的执行状态和发生的任何异常。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至24 | CC[7:0] | 这些是条件码(condition code)位。保存浮点比较指令的结果。CC7 到 CC0 位不受比较指令和 LDSR 指令之外的任何指令影响。 0: 比较结果为假 1: 比较结果为真 |
R/W | 未定义 |
23 | FN | 此位启用向最近值冲洗模式。当 FN 位设置为 1 时,如果舍入模式为 RN 且操作结果为次正规数,则该数字被冲洗到最近的数字。详情参见第 3.2.6.1 (9) 节,向最近值冲洗。 | R/W | 0 |
22 | IF | 此位累计并指示输入操作数冲洗的信息。有关冲洗次正规数的详细信息,请参见第 3.2.6.1 (8) 节,冲洗次正规数。 | R/W | 0 |
21 | — | (保留以供将来扩展。请确保设置为1。) | R | 1 |
20 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
19至18 | RM | 这些是舍入模式控制位。RM 位定义 FPU 用于所有浮点指令的舍入模式。 RM 位的值: 0 0 向最接近的可表示值舍入。如果值恰好在两个最接近的可表示值之间,则结果舍入到最低有效位为 0 的值。 0 1 向 0 舍入。结果是最接近不超过准确结果绝对值的值。 1 0 向 +∞ 舍入。结果是最接近不小于准确结果的值。 1 1 向 -∞ 舍入。结果是最接近不大于准确结果的值。 |
R/W | 00 |
17 | FS | 此位启用无法标准化的值(次正规数)冲洗。如果 FS 位设置,次正规数的输入操作数和操作结果会被冲洗而不会导致未实现的操作异常。次正规数的输入操作数被冲洗到 0 且符号相同。次正规数的操作结果根据舍入模式要么变成 0,要么变成最小的标准化数。详细信息参见第 3.2.6.1 (9) 节,向最近值冲洗。 | R/W | 1 |
16 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
15至10 | XC (E,V,Z,O,U,I) | 这些是原因位。指示浮点运算异常的发生和原因。详细信息参见第 3.2.3.4 (1) 节,原因位(XC)。 | R | 未定义 |
9至5 | XE (V,Z,O,U,I) | 这些是使能位。启用浮点运算异常。发生由 IEEE754 定义的异常时,如果对应的使能位已设置为 1,则发生浮点运算异常。详细信息参见第 3.2.3.4 (1) 节,使能位(XE)。 | R/W | 0 |
4至0 | XP (V,Z,O,U,I) | 这些是保存位。详细信息参见第 3.2.3.4 (1) 节,保存位(XP)。 | R/W | 未定义 |
**原因位 (XC)**:
FPSR 寄存器中的位 15 至 10 是原因位,指示浮点运算异常的发生及其原因。如果生成 IEEE754 定义的异常,当对应异常的使能位设置为 1 时,原因位设置,随后发生异常。单条指令期间发生两个或多个异常时,各对应位设置为 1。
检测到两个或多个异常时,只要其中一个异常的使能位设置为 1,就会发生异常。在这种情况下,所有检测到的异常的原因位,包括使能位清除为 0 的异常,均设置为 1。
在发生浮点运算异常的浮点指令(TRFSR 指令除外)重写原因位。当需要软件仿真时,E 位设置为 1,否则清除为 0。其他位根据是否发生 IEEE754 定义的异常设置为 1 或清除为 0。
发生浮点运算异常时,操作结果不会存储,只有原因位受到影响。
通过 LDSR 指令将原因位设置为 1 时,不会发生浮点运算异常。
使能位 (XE)
FPSR 寄存器中的位 9 至 5 是使能位,启用浮点运算异常。当发生 IEEE754 定义的异常时,如果对应异常的使能位已设置为 1,则发生浮点运算异常。
未实现的操作异常(E)没有对应的使能位。未实现的操作异常(E)总是作为浮点运算异常发生。
如果对应的使能位未设置为 1,不会发生异常,且存储由 IEEE754 定义的默认结果。
保存位 (XP)
FPSR 寄存器中的位 4 至 0 是保存位。这些位在重置后存储并指示检测到的异常。当发生 IEEE754 定义的异常且未生成浮点运算异常时,保存位设置为 1,否则不会更改。浮点运算不会将保存位清除为 0。然而,当使用 LDSR 指令将新值写入 FPSR 寄存器时,这些位可以由软件设置和清除。
未实现的操作异常(E)没有对应的保存位。未实现的操作异常(E)总是作为浮点运算异常发生。
注意: 有关异常类型及其与特定位的关系的详细信息,请参见图 3.37,FPSR 寄存器的原因、使能和保存位。
实际作用:
原因位 (XC)
- 功能:原因位用于指示浮点运算异常的发生及其原因。当生成 IEEE754 定义的异常时,如果对应的使能位(XE)设置为 1,则原因位会被设置为 1,并且异常发生。每当在单条指令期间发生两个或多个异常时,各个对应的原因位均会被设置为 1。
- 实际使用:在浮点运算过程中,当发生异常时,原因位用于记录具体的异常类型,方便后续的异常处理或调试。这些位在发生异常时由浮点指令(TRFSR 指令除外)重写。
使能位 (XE)
- 功能:使能位用于启用浮点运算异常。当发生 IEEE754 定义的异常时,如果对应的使能位设置为 1,则发生浮点运算异常。
- 实际使用:通过设置使能位,可以控制哪些浮点运算异常会触发异常处理。这在需要对特定类型的异常进行特殊处理或忽略某些类型的异常时特别有用。
保存位 (XP)
功能:保存位用于存储和指示在重置后检测到的异常。当发生 IEEE754 定义的异常且未生成浮点运算异常时,保存位设置为 1,否则不发生变化。保存位不会被浮点运算清除为 0,但可以通过使用 LDSR 指令写入新值时由软件设置和清除。
实际使用:保存位在异常处理过程中,用于记录异常的发生情况,即使异常未触发实际的异常处理程序。通过保存位,可以在后续操作中检测到先前发生的异常,以便进行必要的纠正或日志记录。
4.2 FPEPC — 浮点异常程序计数器
当由使能位启用的异常发生时,存储导致异常的指令的程序计数器 (PC)。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | FPEPC31至FPEPC1 | 当由使能位启用的浮点运算异常发生时,这些位存储导致异常的浮点指令的程序计数器 (PC)。 | R/W | 未定义 |
0 | FPEPC0 | 当由使能位启用的浮点运算异常发生时,这个位存储导致异常的浮点指令的程序计数器 (PC)。 | R | 0 |
4.3 FPST — 浮点运算状态
此寄存器反映与操作状态相关的 FPSR 寄存器位的内容。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至14 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
13至8 | XC (E,V,Z,O,U,I) | 这些是原因位。详细信息参见第 3.2.3.4(1) 节,原因位 (XC)。写入这些位的值会反映在 FPSR.XC 位中。 | R/W | 未定义 |
7, 6 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
5 | IF | 此位累计并指示输入操作数冲洗的信息。有关冲洗次正规数的详细信息,请参见第 3.2.6.1 (8) 节,冲洗次正规数。写入此位的值会反映在 FPSR.IF 位中。 | R/W | 0 |
4至0 | XP (V,Z,O,U,I) | 这些是保存位。详细信息参见第 3.2.3.4(1) 节,保存位 (XP)。写入这些位的值会反映在 FPSR.XP 位中。 | R/W | 未定义 |
备注:FPST寄存器为获取和监控浮点运算状态提供了更简洁和高效的方式,而FPSR寄存器则提供了更多的配置和控制选项。
4.4 FPCC — 浮点运算比较结果
此寄存器反映 FPSR.CC7 到 FPSR.CC0 位的内容。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至8 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
7至0 | CC[7:0] | 这些是条件码 (CC) 位。它们存储浮点比较指令的结果。除比较指令和 LDSR 指令外,CC7 到 CC0 位不受任何指令影响。写入这些位的值反映在FPSR的CC7到CC0位中。 0: 比较结果为假 1: 比较结果为真 |
R/W | 未定义 |
4.5 FPCFG — 浮点运算配置
此寄存器反映 FPSR 寄存器中与操作设置相关的位的内容。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至10 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
9, 8 | RM | 这些是舍入模式控制位。RM 位定义 FPU 用于所有浮点指令的舍入模式。写入这些位的值会反映在 FPSR 的 RM 位中。 | R/W | 0 |
7至5 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
4至0 | XE (V,Z,O,U,I) | 这些是使能位。详细信息参见第 3.2.3.4(1) 节,使能位 (XE)。写入这些位的值会反映在 FPSR 的 XE 位中。 | R/W | 0 |
RM 位
RM 位 | 助记符 | 描述 |
---|---|---|
0 0 | RN | 向最接近的可表示值舍入。如果值恰好在两个可表示值之间,则结果舍入到最低有效位为 0 的值。 |
0 1 | RZ | 向 0 舍入。结果是最接近不超过结果绝对值的值。 |
1 0 | RP | 向 +∞ 舍入。结果是最接近不小于准确结果的值。 |
1 1 | RM | 向 -∞ 舍入。结果是最接近不大于准确结果的值。 |
4.6 总结:
FPSR(浮点配置/状态寄存器)中的信息被拆分到多个寄存器中,以便更加专门化地处理和监控浮点运算的不同方面。这样做有以下几个好处:
专门化:
FPSR(浮点配置/状态寄存器):依然是主要的配置和状态寄存器,包含了操作模式(如舍入模式、次正规数处理模式)和整体状态(如条件码、异常使能、异常原因等)。
FPEPC(浮点异常程序计数器):专门用于存储发生异常的浮点指令的程序计数器值,便于在异常处理时快速定位问题指令。
FPST(浮点运算状态寄存器):反映操作状态相关的FPSR内容,便于简化状态监控和处理。
FPCC(浮点运算比较结果寄存器):反映FPSR中的条件码(CC)位,专门用于存储和读取浮点比较指令的结果。
FPCFG(浮点运算配置寄存器):反映FPSR中的操作设置相关位,便于配置和调整浮点运算模式。
简化和优化:
性能优化:通过将不同类型的信息分散到多个寄存器中,可以避免频繁读取和解析单一寄存器,提高系统的性能和效率。
简化监控和调试:在需要监控特定状态或处理特定异常时,可以直接访问相应的寄存器,而无需处理大量无关的信息。
灵活性增强:这种设计使得系统在进行浮点运算配置和状态管理时更加灵活,能够根据具体需求进行定制和优化。
5 FXU 功能寄存器
提供 32 个向量寄存器(wr0-wr31)作为专用于扩展浮点运算单元(FXU)的数据寄存器。所有这些寄存器都可以用于存储数据变量。这些寄存器的数据宽度为 128 位。复位后,向量寄存器 wr0 至 wr31 的值是未定义的。
一个向量寄存器由 4 个操作方式组成。一个单精度浮点数据存储在一个操作方式中。这允许一个扩展浮点操作指令执行四个单精度浮点操作。
向量寄存器 | 操作方式 3 | 操作方式 2 | 操作方式 1 | 操作方式 0 |
---|---|---|---|---|
WR[0] | w3 | w2 | w1 | w0 |
WR[1] | w3 | w2 | w1 | w0 |
WR[2] | w3 | w2 | w1 | w0 |
WR[3] | w3 | w2 | w1 | w0 |
WR[4] | w3 | w2 | w1 | w0 |
WR[5] | w3 | w2 | w1 | w0 |
WR[6] | w3 | w2 | w1 | w0 |
… | … | … | … | … |
WR[31] | w3 | w2 | w1 | w0 |
名称 | 位 | 功能 |
---|---|---|
W0 | [31:0] | 操作方式 0 的数据 |
W1 | [63:32] | 操作方式 1 的数据 |
W2 | [95:64] | 操作方式 2 的数据 |
W3 | [127:96] | 操作方式 3 的数据 |
扩展浮点功能系统寄存器:
FXU 可以使用以下系统寄存器来控制算术运算。扩展浮点功能系统寄存器通过使用 LDSR 和 STSR 指令并指定由寄存器号和选择 ID 组成的系统寄存器号进行读写。
- FXSR:用于控制和监视扩展浮点运算异常。还用于设置 FXU 的操作模式。它有用于次正规数冲洗使能、舍入模式控制、异常原因、异常使能和保存的位。
- FXST:反映与操作状态相关的 FXSR 寄存器位的内容。
- FXINFO:反映关于 FXU 配置的信息。
- FXCFG:反映与操作设置相关的 FXSR 寄存器位的内容。
- FXXC:保存每个操作方式的扩展浮点运算异常的 XC(原因)位。
- FXXP:保存每个操作方式的扩展浮点运算异常的 XP(保存)位。
寄存器编号 (regID, selID) | 名称 | 功能 | 访问权限 |
---|---|---|---|
SR6, 10 | FXSR | 扩展浮点运算配置/状态 | CU1 和 SV |
SR8, 10 | FXST | 扩展浮点运算状态 | CU1 |
SR9, 10 | FXINFO | FXU 配置信息 | CU1 |
SR10, 10 | FXCFG | 扩展浮点运算配置 | CU1 |
SR12, 10 | FXXC | 每个操作方式的 XC(原因)位 | CU1 |
SR13, 10 | FXXP | 每个操作方式的 XP(保存)位 | CU1 |
5.1 FXSR — 扩展浮点运算配置/状态
FXSR 寄存器指示扩展浮点运算的执行状态和异常的发生。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至24 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
23 | FN | 此位启用向最近值冲洗模式。当 FN 位设置为 1 时,如果舍入模式为 RN 且操作结果为次正规数,则该数字被冲洗到最近的数字。详情参见第 3.2.6.1 (9) 节,向最近值冲洗。 | R/W | 0 |
22 | IF | 此位累计并指示输入操作数冲洗的信息。有关冲洗次正规数的详细信息,请参见第 3.2.6.2 节,第 3.2.6.1 (8) 节,冲洗次正规数。 | R/W | 0 |
21 | — | (保留以供将来扩展。请确保设置为1。) | R | 1 |
20 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
19, 18 | RM | 这些是舍入模式控制位。RM 位定义 FXU 用于所有扩展浮点指令的舍入模式。 | R/W | 00 |
17 | FS | 此位启用无法标准化的值(次正规数)冲洗。如果 FS 位设置,输入操作数和操作结果次正规数被冲洗而不会导致未实现的操作异常(E)。一个次正规数的输入操作数被冲洗到 0 且符号相同。次正规数的操作结果根据舍入模式要么变成 0,要么变成最小的标准化数。详情参见第 3.2.6.1 (9) 节,向最近值冲洗。 | R/W | 1 |
16 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
15至10 | XC (E,V,Z,O,U,I) | 这些是原因位。详细信息参见第 3.2.3.4(1) 节,原因位 (XC)。 | R/W | 未定义 |
9至5 | XE (V,Z,O,U,I) | 这些是使能位。详细信息参见第 3.2.3.4(1) 节,使能位 (XE)。 | R/W | 0 |
4至0 | XP (V,Z,O,U,I) | 这些是保存位。详细信息参见第 3.2.3.4(1) 节,保存位 (XP)。 | R/W | 未定义 |
舍入模式控制位 (RM Bits)
助记符 | 描述 | 19 | 18 |
---|---|---|---|
RN | 向最接近的可表示值舍入。如果值恰好在两个最接近的可表示值之间,则结果舍入到最低有效位为 0 的值。 | 0 | 0 |
RZ | 向 0 舍入。结果是最接近不超过结果绝对值的值。 | 0 | 1 |
RP | 向 +∞ 舍入。结果是最接近不小于准确结果的值。 | 1 | 0 |
RM | 向 -∞ 舍入。结果是最接近不大于准确结果的值。 | 1 | 1 |
原因位 (XC):
FXSR 寄存器中的位 15 至 10 是原因位,指示扩展浮点运算异常的发生及其原因。FXSR.XC 位保存发生在操作方式中的扩展浮点运算异常的检测结果的“或”(OR)。如果生成 IEEE754 定义的异常,当对应异常的使能位设置为 1 时,原因位会被设置,随后发生异常。单条指令期间发生两个或多个异常时,各对应位均会被设置为 1。
检测到两个或多个异常时,只要其中一个异常的使能位设置为 1,就会发生异常。在这种情况下,所有检测到的异常的原因位,包括使能位清除为 0 的异常,均设置为 1。
发生扩展浮点运算异常的扩展浮点操作指令重写原因位。当需要软件仿真时,E 位设置为 1,否则清除为 0。其他位根据是否发生 IEEE754 定义的异常设置为 1 或清除为 0。
发生扩展浮点运算异常时,操作结果不会存储,只有原因位受到影响。
通过 LDSR 指令将原因位设置为 1 时,不会发生扩展浮点运算异常。
**使能位 (XE)**:
FXSR 寄存器中的位 9 至 5 是使能位,启用扩展浮点运算异常。当发生 IEEE754 定义的异常时,如果对应异常的使能位已设置为 1,则发生扩展浮点运算异常。
未实现的操作异常(E)没有对应的使能位。未实现的操作异常(E)总是作为扩展浮点运算异常发生。
FXSR.XE 位不能按操作方式设置。所有操作方式使用相同的设置。
如果对应的使能位未设置为 1,不会发生异常,且存储由 IEEE754 定义的默认结果。
保存位 (XP)
FXSR 寄存器中的位 4 至 0 是保存位,累积并指示自复位以来检测到的异常。发生 IEEE754 定义的异常时,如果未生成扩展浮点运算异常,则保存位设置为 1,否则不会改变。扩展浮点运算不会将保存位清除为 0。然而,当使用 LDSR 指令将新值写入 FXSR 寄存器时,这些位可以由软件设置和清除。
未实现的操作异常(E)没有对应的保存位。未实现的操作异常(E)总是作为扩展浮点运算异常发生。
5.2 FXST — 扩展浮点运算状态
此寄存器反映 FXSR 寄存器中与操作状态相关的位的内容。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至14 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
13至8 | XC | 这些是原因位。详细信息参见第 3.2.3.4(1) 节,原因位 (XC)。写入这些位的值会反映在 FXSR.XC 位中。 | R/W | 未定义 |
7, 6 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
5 | IF | 此位累计并指示输入操作数冲洗的信息。有关冲洗次正规数的详细信息,请参见第 3.2.6.1 (8) 节,冲洗次正规数。写入此位的值会反映在 FXSR.IF 位中。 | R/W | 0 |
4至0 | XP | 这些是保存位。详细信息参见第 3.2.3.4(1) 节,保存位 (XP)。写入这些位的值会反映在 FXSR.XP 位中。 | R/W | 未定义 |
5.3 FXINFO — FXU 配置信息
此寄存器反映 FXU 的配置信息。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至2 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
1 | NFPU | 此位指示提供了 4-way SIMD 算术单元。 | R | 1 |
0 | RSIZE | 此位指示提供了 32 个 128 位向量寄存器。 | R | 1 |
5.4 FXCFG — 扩展浮点运算配置
此寄存器反映 FXSR 寄存器中与操作设置相关的位的内容。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至10 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
9, 8 | RM | 这些是舍入模式控制位。RM 位定义 FXU 用于所有扩展浮点指令的舍入模式。写入这些位的值会反映在 FXSR 的 RM 位中。 | R/W | 0 |
7至5 | — | (保留以供将来扩展。请确保设置为0。) | R | 0 |
4至0 | XE | 这些是使能位。详细信息参见第 3.2.3.4(1) 节,使能位 (XE)。写入这些位的值会反映在 FXSR 的 XE 位中。 | R/W | 0 |
舍入模式控制位 (RM Bits)
助记符 | 描述 | 9 | 8 |
---|---|---|---|
0 0 | RN | 向最接近的可表示值舍入。如果值恰好在两个可表示值之间,则结果舍入到最低有效位为 0 的值。 | |
0 1 | RZ | 向 0 舍入。结果是最接近不超过结果绝对值的值。 | |
1 0 | RP | 向 +∞ 舍入。结果是最接近不小于准确结果的值。 | |
1 1 | RM | 向 -∞ 舍入。结果是最接近不大于准确结果的值。 |
5.5 FXXC — 各操作方式的 XC(原因)位
此寄存器保存每个操作方式的扩展浮点运算异常的 XC(原因)位。任何尝试写入此寄存器的操作都不会影响 FXSR 寄存器的 XC 位的值。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31, 30 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
29至24 | XC3 | 这些位保存与操作方式 3 相关的原因位(E3,V3,Z3,O3,U3,I3)。 | R/W | 未定义 |
23, 22 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
21至16 | XC2 | 这些位保存与操作方式 2 相关的原因位(E2,V2,Z2,O2,U2,I2)。 | R/W | 未定义 |
15, 14 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
13至8 | XC1 | 这些位保存与操作方式 1 相关的原因位(E1,V1,Z1,O1,U1,I1)。 | R/W | 未定义 |
7, 6 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
5至0 | XC0 | 这些位保存与操作方式 0 相关的原因位(E0,V0,Z0,O0,U0,I0)。 | R/W | 未定义 |
5.6 FXXP — 各操作方式的 XP(保存)位
此寄存器保存每个操作方式的扩展浮点运算异常的 XP(保存)位。任何尝试写入此寄存器的操作都不会影响 FXSR 寄存器的 XP 位的值。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至29 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
28至24 | XP3 | 这些位保存与操作方式 3 相关的保存位(V3,Z3,O3,U3,I3)。 | R/W | 未定义 |
23至21 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
20至16 | XP2 | 这些位保存与操作方式 2 相关的保存位(V2,Z2,O2,U2,I2)。 | R/W | 未定义 |
15至13 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
12至8 | XP1 | 这些位保存与操作方式 1 相关的保存位(V1,Z1,O1,U1,I1)。 | R/W | 未定义 |
7至5 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
4至0 | XP0 | 这些位保存与操作方式 0 相关的保存位(V0,Z0,O0,U0,I0)。 | R/W | 未定义 |
6 MPU 功能寄存器
MPU 功能系统寄存器通过使用 LDSR 和 STSR 指令并指定由寄存器号和选择 ID 组成的系统寄存器号进行读写。
寄存器编号 (regID, selID) | 符号 | 功能 | 访问权限 |
---|---|---|---|
SR0, 5 | MPM | 内存保护操作模式设置 | SV |
SR2, 5 | MPCFG | MPU 配置 | SV |
SR8, 5 | MCA | 内存保护设置检查地址 | SV |
SR9, 5 | MCS | 内存保护设置检查大小 | SV |
SR10, 5 | MCC | 内存保护设置检查命令 | SV |
SR11, 5 | MCR | 内存保护设置检查结果 | SV |
SR12, 5 | MCI | 内存保护设置检查 SPID | SV |
SR16, 5 | MPIDX | 要访问的内存保护设置寄存器索引 | SV |
SR17, 5 | MPBK | MPU bank设置 | SV |
SR20, 5 | MPLA | 保护区最小地址 | SV |
SR21, 5 | MPUA | 保护区最大地址 | SV |
SR22, 5 | MPAT | 保护区属性 | SV |
SR24, 5 | MPID0 | 可以访问保护区的 SPID | SV |
SR25, 5 | MPID1 | 可以访问保护区的 SPID | SV |
SR26, 5 | MPID2 | 可以访问保护区的 SPID | SV |
SR27, 5 | MPID3 | 可以访问保护区的 SPID | SV |
SR28, 5 | MPID4 | 可以访问保护区的 SPID | SV |
SR29, 5 | MPID5 | 可以访问保护区的 SPID | SV |
SR30, 5 | MPID6 | 可以访问保护区的 SPID | SV |
SR31, 5 | MPID7 | 可以访问保护区的 SPID | SV |
6.1 MPM — 内存保护操作模式
内存保护操作模式寄存器用于定义内存保护功能的基本操作模式。
位位置 | 位名称 | 功能 | 读写 | 复位值 |
---|---|---|---|---|
31至2 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
1 | SVP | 在 SV 模式下(当 PSW.UM = 0 时),此位用于指定是否根据每个保护区的 MPAT 寄存器的 SX、SW 和 SR 位限制访问。 0: 在 SV 模式下启用所有访问。 1: 在 SV 模式下根据 SX、SW 和 SR 位限制访问。 |
R/W | 0 |
0 | MPE | 此位用于指定是否启用或禁用 MPU 功能。 0: 禁用 1: 启用 |
R/W | 0 |
注意:
- 当通过 LDSR 指令设置 SVP 位为 1 时,设置从后续指令的操作数访问开始生效。另一方面,由于指令获取访问独立于 SVP 位的设置执行,因此无法确定新设置应用于指令获取访问的时间。在这种情况下,请提前设置保护区,以确保设置 SVP 位的程序本身不会被阻止。
- 如果SVP位设置为1,如果不允许MDP或MIP异常处理程序访问必要的内存区域,则无法执行该异常处理程序。一定要提前设置保护区域,以便异常处理程序可以访问必要的内存区域。
6.2 MPCFG — MPU 配置
此寄存器保存有关 MPU 配置信息。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至22 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
21, 20 | NBK | 值为此CPU上的 MPU bank数量 - 1。由于此 CPU 上的 MPU bank只有一个,因此读取值为 0。 | R | 0 |
19至16 | ARCH | 这些位指示 MPU 架构规范的版本。此 CPU 的读取值为 2。 | R | 2 |
15至5 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
4至0 | NMPUE | 这些位指示此 CPU 实现的 MPU 条目数减 1。由于此 CPU 包含 32 个 MPU 条目,因此读取值为 31。 | R | 31 |
注意:
安装在 MPU 上的 MPU bank数量不少于一个。MPU bank由 MPU 条目(MPAT、MPUA、MPLA)组成,其数量由 NMPUE 指定。如果配备了两个bank,配备的 MPU 条目数量是 NMPUE 指示值的两倍。但是,每个 MPU bank是专用的。只有由 MPBK 寄存器指示的 MPU bank用于内存保护。因此,即使配备了多bank,可同时用于内存保护的 MPU 条目最大数量也不超过 NMPUE 指示的值。
6.3 MCA — 内存保护设置检查地址
此寄存器用于指定要执行内存保护设置检查的区域的基地址。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | MCA31至MCA0 | 这些位用于指定要进行内存保护设置检查的内存区域的起始地址(以字节为单位)。 | R/W | 未定义 |
6.4 MCS — 内存保护设置检查大小
此寄存器用于指定要执行内存保护设置检查的区域大小。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | MCS31至MCS0 | 这些位用于指定内存保护设置检查的内存区域大小(以字节为单位)。由于指定大小被假定为无符号整数,因此无法检查相对于 MCA 寄存器值地址值减小方向的区域。 | R/W | 未定义 |
6.5 MCC — 内存保护设置检查命令
此命令寄存器用于启动内存保护设置检查。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | MCC31至MCC0 | 向 MCC 寄存器写入任何值时,将启动内存保护设置检查。通过设置 MCA/MCS 寄存器,然后写入 MCC 寄存器,结果存储在 MCR 中。因为通过写入任何值启动检查,所以可以使用 r0 作为源寄存器,而不使用任何多余的寄存器。 注意,对于检查,结果根据每个区域设置应用,而不考虑 PSW.UM 位的状态。 此检查适用于由 MPBK 寄存器指定的 MPU bank 的内存保护设置。 读取 MCC 寄存器时,总是返回值 0000 0000H。 |
R/W | 0 |
6.6 MCR — 内存保护设置检查结果
此寄存器用于存储内存保护设置检查的结果。
当写入 MCC 寄存器时,检查每个 MPAT 寄存器的 MPIDn 寄存器(n = 0 到 7)、WMPIDn 位(n = 0 到 7)(用于写权限)和 RMPIDn 位(n = 0 到 7)(用于执行和读权限),以验证由 MCI 寄存器指定的 SPID 是否匹配允许访问的 SPID。
然而,如果 MPAT 寄存器的 WG 位或 RG 位设置为 1,则假定 MCI 寄存器指定的 SPID 匹配允许写或执行和读取访问的 SPID,无论上述 SPID 匹配结果如何。
如果找到 SPID 匹配,包含 MCA 和 MCS 寄存器指定的地址区域的保护区域的保护属性存储在 MCR 寄存器的相应属性位中。如果多个保护区域包括指定的地址区域,并且任何保护区域都允许访问,则 MCR 寄存器的相应属性位中存储表示允许访问的 1。
如果未找到 SPID 匹配或不存在包含指定地址区域的保护区域,则 MCR 寄存器的每个属性位中存储表示不允许访问的 0。
注意:
如果要检查的指定区域跨越 0000 0000H 或 7FFF FFFFH,则判断为区域设置错误,MCR.OV 位设置为 1。这意味着必须读取 MCR.OV 位以确认结果不是无效的(OV = 0)然后参考每个属性位的检查结果。当 MCR.OV 位设置为 1 时,除非 MPM.SVP 位为 0,否则所有属性位被清除为 0。如果 MPM.SVP 位为 0,则即使 MCR.OV 位设置为 1,MCR.SXE、SWE 和 SRE 位也被设置为 1。即使未找到 SPID 匹配,如果区域设置错误,MCR.OV 位也设置为 1。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至9 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
8 | OV | 如果指定区域包括 00000000H 或 7FFFFFFFH,则在此位存储 1。在其他情况下,此位存储 0。 | R/W | 未定义 |
7, 6 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
5 | SXE | 如果指定区域包含在一个保护区域内,并且在管理模式下允许执行,则在此位存储 1。在其他情况下,此位存储 0。 | R/W | 未定义 |
4 | SWE | 如果指定区域包含在一个保护区域内,并且在管理模式下允许写入,则在此位存储 1。在其他情况下,此位存储 0。 | R/W | 未定义 |
3 | SRE | 如果指定区域包含在一个保护区域内,并且在管理模式下允许读取,则在此位存储 1。在其他情况下,此位存储 0。 | R/W | 未定义 |
2 | UXE | 如果指定区域包含在一个保护区域内,并且在用户模式下允许执行,则在此位存储 1。在其他情况下,此位存储 0。 | R/W | 未定义 |
1 | UWE | 如果指定区域包含在一个保护区域内,并且在用户模式下允许写入,则在此位存储 1。在其他情况下,此位存储 0。 | R/W | 未定义 |
0 | URE | 如果指定区域包含在一个保护区域内,并且在用户模式下允许读取,则在此位存储 1。在其他情况下,此位存储 0。 | R/W | 未定义 |
6.7 MCI — 内存保护设置检查 SPID
此寄存器用于指定要执行内存保护设置检查的 SPID。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至5 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
4至0 | SPID | 这些位用于指定要进行内存保护设置检查的 SPID。 | R/W | 未定义 |
6.8 MPIDX — 要访问的内存保护设置寄存器索引
此寄存器用于指定要访问的内存保护设置寄存器的索引。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至5 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
4至0 | IDX | 这些位用于指定 LDSR 或 STSR 指令要访问的 MPLA、MPUA 和 MPAT 寄存器的 MPU 条目索引。更改此寄存器值的结果反映在紧随其后的指令中。可以为 IDX 指定从 0 到 MPCFG.NMPUE 指示的最大条目号的值。如果为 IDX 指定了超过最大条目号的值,并通过 LDSR 或 STSR 指令访问 MPLA、MPUA 或 MPAT 寄存器,则该寄存器被处理为未定义寄存器。 | R/W | 0 |
6.9 MPBK — MPU bank设置
MPBK 寄存器选择 MPU bank。 如果设置了 SVLOCK.SVL 位为 1,则不会更新此寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至2 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
1, 0 | BK | 这些位指定用于内存保护的 MPU bank。 0: MPU bank 0 其他:设置禁止 BK 字段中指定的 MPU bank受内存保护、内存保护设置检查功能、LDM.MP 指令、STM.MP 指令的影响。BK 字段中未指定的每个 MPU bank的寄存器对 MPU 功能没有影响。无法使用 LDSR 和 STSR 指令操作此类寄存器。 无法在 BK 字段中设置超过 MPCFG.NBK 的值。如果尝试写入此类值,该值将被忽略并保留原值。 |
R/W | 0 |
6.10 MPLA — 保护区最小地址
此寄存器指示保护区的最小地址。通过 LDSR 指令写入此寄存器的值被设置为 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的最小地址。通过 STSR 指令从此寄存器读取的值是 MPIDX 寄存器指定的区域 n 的最小地址。无法在不使用 MPIDX 寄存器和此寄存器的情况下操作区域 n 的最小地址。
如果在 MPIDX 寄存器中指定了超过 MPCFG.NMPUE 的值,则将该寄存器视为未定义寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至2 | MPLA31至MPLA2 | 这些位指定由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的最小地址。指定的最小地址包括在区域匹配范围内。 | R/W | 未定义 |
1, 0 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
6.11 MPUA — 保护区最大地址
此寄存器指示保护区的最大地址。通过 LDSR 指令写入此寄存器的值被设置为 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的最大地址。通过 STSR 指令从此寄存器读取的值是 MPIDX 寄存器指定的区域 n 的最大地址。无法在不使用 MPIDX 寄存器和此寄存器的情况下操作区域 n 的最大地址。
如果在 MPIDX 寄存器中指定了超过 MPCFG.NMPUE 的值,则将该寄存器视为未定义寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至2 | MPUA31至MPUA2 | 这些位指定由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的最大地址。指定的最大地址包括在区域匹配范围内。位 1 和 0 的最大地址被视为 1。 | R/W | 未定义 |
1, 0 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
6.12 MPAT — 保护区属性
此寄存器指示保护区的属性。通过 LDSR 指令写入此寄存器的值被设置为 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的保护属性。通过 STSR 指令从此寄存器读取的值是 MPIDX 寄存器指定的区域 n 的保护属性。无法在不使用 MPIDX 寄存器和此寄存器的情况下操作区域 n 的属性。
如果在 MPIDX 寄存器中指定了超过 MPCFG.NMPUE 的值,则将该寄存器视为未定义寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至24 | WMPID7至WMPID0 | 这些位指示 MPIDn(n = 0 到 7)寄存器中指定的 SPID 的写权限。 0: 禁止 SPID 写入 1: 启用 SPID 写入 |
R/W | 未定义 |
23至16 | RMPID7至RMPID0 | 这些位指示 MPIDn(n = 0 到 7)寄存器中指定的 SPID 的执行和读取权限。 0: 禁止 SPID 执行和读取 1: 启用 SPID 执行和读取 |
R/W | 未定义 |
15 | WG | 此位指示任何 SPID 的写权限。 0: 根据 MPIDn 寄存器和 WMPIDn 位的设置启用写入 1: 启用任何 SPID 写入,无论 MPIDn 寄存器和 WMPIDn 位的设置如何 |
R/W | 未定义 |
14 | RG | 此位指示任何 SPID 的执行和读取权限。 0: 根据 MPIDn 寄存器和 RMPIDn 位的设置启用执行和读取 1: 启用任何 SPID 执行和读取,无论 MPIDn 寄存器和 RMPIDn 位的设置如何 |
R/W | 未定义 |
13至8 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
7 | E | 此位指示由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)是启用还是禁用。 0: 区域 n 被禁用 1: 区域 n 被启用 |
R/W | 0 |
6 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
5 | SX | 此位指示管理模式下由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的执行权限。 0: 禁止执行 1: 启用执行 |
R/W | 未定义 |
4 | SW | 此位指示管理模式下由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的写权限。 0: 禁止写入 1: 启用写入 |
R/W | 未定义 |
3 | SR | 此位指示管理模式下由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的读取权限。 0: 禁止读取 1: 启用读取 |
R/W | 未定义 |
2 | UX | 此位指示用户模式下由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的执行权限。 0: 禁止执行 1: 启用执行 |
R/W | 未定义 |
1 | UW | 此位指示用户模式下由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的写权限。 0: 禁止写入 1: 启用写入 |
R/W | 未定义 |
0 | UR | 此位指示用户模式下由 MPIDX 寄存器指定的区域 n(n = 0 到 MPCFG.NMPUE)的读取权限。 0: 禁止读取 1: 启用读取 |
R/W | 未定义 |
注意:
- 如果在 SV 模式下限制访问,则可能无法根据设置执行 MDP 或 MIP 异常处理程序。请务必提前设置保护区,以确保异常处理程序可以访问必要的内存区域。
- 对于 CALLT、SWITCH 和 SYSCALL 指令及中断(表引用方法),如果不允许读取存储表的地址,则会发生 MDP 异常。SYSCAL 指令和表引用方法中的中断的权限在 CPU 切换到管理模式后进行判断。因此,当 MPM.SVP 位设置(1)时,还需要设置 SR 位(1)。
6.13 MPIDn — 可以访问保护区的 SPID
此寄存器指定可以访问保护区的 SPID。指定的 SPID 的可访问性与通过 MPAT 寄存器指定的 WMPIDn 和 RMPIDn 位(n = 0 到 7)相关联。此 CPU 有 8 个 MPID 寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至5 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
4至0 | SPID | 这些位指定可以访问保护区的 SPID。 | R/W | 未定义 |
7 Cache Operation Function Registers
缓存控制功能系统寄存器通过使用 LDSR 和 STSR 指令并指定由寄存器号和选择 ID 组成的系统寄存器号进行读写。
寄存器编号 (regID, selID) | 符号 | 功能 | 访问权限 |
---|---|---|---|
SR16, 4 | ICTAGL | 指令缓存标记低访问 | SV |
SR17, 4 | ICTAGH | 指令缓存标记高访问 | SV |
SR18, 4 | ICDATL | 指令缓存数据低访问 | SV |
SR19, 4 | ICDATH | 指令缓存数据高访问 | SV |
SR24, 4 | ICCTRL | 指令缓存控制 | SV |
SR26, 4 | ICCFG | 指令缓存配置 | SV |
SR28, 4 | ICERR | 指令缓存错误 | SV |
7.1 ICTAGL — 指令缓存标记低访问
此寄存器用于与指令缓存相关的 CIST/CILD 指令。在执行 CIST 指令期间,存储到指令缓存标记 RAM 的值被存储。在执行 CILD 指令期间,从指令缓存标记 RAM 读取的值被存储。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至11 | LPN | 这些位保存地址位 27 到 11。位 31 到 28 必须始终设置为 0。如果缓存大小为 8 Kbytes,则保存位 27 到 11。如果缓存大小为 16 Kbytes,则保存位 27 到 12,位 11 始终设置为 0。如果缓存大小为 32 Kbytes,则保存位 27 到 13,位 12 和 11 始终设置为 0。 | R/W | 未定义 |
10至6 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
5, 4 | LRU | 这些位指示指定缓存线的 LRU 信息。LRU 信息不能通过 CIST 指令自由更改为任何值。 | R/W | 未定义 |
3 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
2 | L | 此位保存锁定信息。 0: 缓存线未锁定 1: 缓存线已锁定 |
R/W | 未定义 |
1 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
0 | V | 此位保存指定缓存线的有效/无效信息。 0: 缓存线已禁用 1: 缓存线已启用 |
R/W | 未定义 |
注意:
- 如果缓存大小为 16 Kbytes,则不能通过 LDSR 指令向位 11 写入任何值。它始终设置为 0。
- 如果缓存大小为 32 Kbytes,则不能通过 LDSR 指令更改位 12 和 11。它们始终设置为 0。
- 如果通过 CIST 指令设置标记 RAM,则只有在启用 V 位时,其他位的设置才有效。当 V 位被禁用时,无论 LPN 位中的值为何,缓存线始终被判断为缓存未命中。此外,当 V 位被禁用时,即使通过设置 L 位锁定缓存线,缓存线仍成为替换目标。
7.2 ICTAGH — 指令缓存标记高访问
此寄存器用于与指令缓存相关的 CIST/CILD 指令。在执行 CIST 指令期间,存储到标记 RAM 和数据 RAM 的 ECC 值被存储。在执行 CILD 指令期间,从标记 RAM 和数据 RAM 的 ECC 读取的值被存储。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31 | WD | 此位指定在执行 CIST 指令期间是否更新缓存的数据 RAM。 0: 缓存的数据 RAM 未更新 1: 缓存的数据 RAM 已更新 |
R/W | 0 |
30 | PD | 此位指定当 WD 位设置为 1 并执行 CIST 指令时要写入数据 RAM 的 ECC 的数据。 0: 自动生成的 ECC 写入数据 RAM 的 ECC 1: DATAECC 字段中的值写入数据 RAM 的 ECC |
R/W | 0 |
29 | WT | 此位指定在执行 CIST 指令期间是否更新缓存的标记 RAM。当此位设置为 1 时,缓存线的 V 位和 L 位也会更新。 0: 缓存的标记 RAM 未更新 1: 缓存的标记 RAM 已更新 |
R/W | 0 |
28 | PT | 此位指定当 WT 位设置为 1 并执行 CIST 指令时要写入标记 RAM 的 ECC 的数据。 0: 自动生成的 ECC 写入标记 RAM 的 ECC 1: TAGECC 字段中的值写入标记 RAM 的 ECC |
R/W | 0 |
27至24 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
23至16 | DATAECC | 这些位保存数据 RAM 的 ECC。 | R/W | 未定义 |
15至8 | TAGECC | 这些位保存标记 RAM 的 ECC。第 15 位固定为 0。 | R/W | 未定义 |
7至0 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
7.3 ICDATL — 指令缓存数据低访问
此寄存器用于与指令缓存相关的 CIST/CILD 指令。在执行 CIST 指令期间,存储到指令缓存数据 RAM 的值被存储。在执行 CILD 指令期间,从指令缓存数据 RAM 读取的值被存储。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | DATAL | 这些位保存指定缓存线块中 64 位指令数据的低 32 位。要保存的位由索引的偏移量指定。 偏移量为 00: 位 31 到 0 偏移量为 01: 位 95 到 64 偏移量为 10: 位 159 到 128 偏移量为 11: 位 223 到 192 |
R/W | 未定义 |
注意:
- 缓存线块中指令数据的对齐与内存的数据对齐不同。详细信息,请参见第 3.2.5.2 (10) 节,指令缓存配置。
- 有关如何指定偏移量的详细信息,请参见第 3.2.5.2 (6) 节,缓存索引指定方法。
- 有关位位置的详细信息,请参见第 3.2.5.2 (10) 节中的图 3.31,指令缓存配置。
7.4 ICDATH — 指令缓存数据高访问
此寄存器用于与指令缓存相关的 CIST/CILD 指令。在执行 CIST 指令期间,存储到指令缓存数据 RAM 的值被存储。在执行 CILD 指令期间,从指令缓存数据 RAM 读取的值被存储。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | DATAH | 这些位保存指定缓存线块中 64 位指令数据的高 32 位。要保存的位由索引的偏移量指定。 偏移量为 00: 位 63 到 32 偏移量为 01: 位 127 到 96 偏移量为 10: 位 191 到 160 偏移量为 11: 位 255 到 224 |
R/W | 未定义 |
注意:
- 缓存线块中指令数据的对齐与内存的数据对齐不同。详细信息,请参见第 3.2.5.2 (10) 节,指令缓存配置。
- 有关如何指定偏移量的详细信息,请参见第 3.2.5.2 (6) 节,缓存索引指定方法。
- 有关位位置的详细信息,请参见第 3.2.5.2 (10) 节中的图 3.31,指令缓存配置。
7.5 ICCTRL — 指令缓存控制
此寄存器用于控制指令缓存。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至17 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
16 | — | (保留以供将来扩展。请确保设置为 1。) | R | 1 |
15至9 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
8 | ICHCLR | 当此位设置为 1 时,整个指令缓存被清除。这将清除 V 和 L 位(置为 0)并初始化 LRU 信息。此位始终读取为 0。 | R/W | 0 |
7至3 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
2 | ICHEIV | 当此位设置为 1 时,每当发生缓存错误时,指令缓存会自动设置为无效(ICHEN 位清除为 0)。 | R/W | 0 |
1 | ICHEMK | 当此位设置为 1 时,在发生缓存错误后,屏蔽 CPU 的缓存错误异常通知。 | R/W | 0 |
0 | ICHEN | 此位指示指令缓存的有效/无效状态。 0: 指令缓存无效 1: 指令缓存有效 |
R/W | 1 |
注意:
- 复位后的值由硬件规格决定。详细信息,请参见第 3.9.7 节,G4MH 寄存器初始值的产品信息。
- 有关缓存错误的详细信息,请参见第 3.2.5.2 (10) 节,指令缓存配置。
7.6 ICCFG — 指令缓存配置
此寄存器指示指令缓存的配置。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至15 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
14至8 | ICHSIZE | 这些位指示指令缓存的大小(以 Kbytes 为单位)。 000 1000: 8 Kbytes 001 0000: 16 Kbytes 010 0000: 32 Kbytes 其他:设置禁止 |
R | 硬件规格决定 |
7至4 | ICHLINE | 这些位指示指令缓存中每个路(way)的行数。 0010: 64 行 0100: 128 行 1000: 256 行 其他:设置禁止 |
R | 硬件规格决定 |
3至0 | ICHWAY | 这些位指示指令缓存中的路数。 0100: 4 路 其他:设置禁止 |
R | 硬件规格决定 |
7.7 ICERR — 指令缓存错误
此寄存器用于存储指令缓存的缓存错误信息。
在设置 ICHERR 位为 1 后,任何后续生成的缓存错误信息将不会存储,直到明确将此设置清除为 0。然而,错误状态信息(ESAFE、ESMH、ESPBSE、ESTE1、ESTE2、ESDC 和 ESDE)将累积。
注意:
- 如果缓存大小为 8 Kbytes,则不能通过 LDSR 指令向位 12 和 11 写入任何值。它们始终设置为 0。
- 如果缓存大小为 16 Kbytes,则不能通过 LDSR 指令向位 12 写入任何值。它始终设置为 0。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31 | CISTW | 此位设置为表示 CISTI 指令指定的目标路有误。尽管条目信息被覆盖以完成写入,但下次读取缓存线时,V 位将被清除(即判断读取未命中缓存)。然而,设置此位不会伴随 CPU 的异常。 | R/W | 未定义 |
30 | ESAFE | 错误状态:地址反馈错误 | R/W | 未定义 |
29 | ESMH | 错误状态:多重命中 | R/W | 未定义 |
28 | ESPBSE | 错误状态:WAY 错误 | R/W | 未定义 |
27 | ESTE1 | 错误状态:标记 RAM 1 位错误 | R/W | 未定义 |
26 | ESTE2 | 错误状态:标记 RAM 2 位错误 | R/W | 未定义 |
25 | ESDC | 错误状态:数据 RAM 1 位错误 | R/W | 未定义 |
24 | ESDE | 错误状态:数据 RAM 2 位错误 | R/W | 未定义 |
23 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
22 | ERMAFE | 错误异常通知屏蔽:地址反馈错误 | R/W | 0 |
21 | ERMMH | 错误异常通知屏蔽:多重命中 | R/W | 0 |
20 | ERMPBSE | 错误异常通知屏蔽:WAY 错误 | R/W | 0 |
19 | ERMTE1 | 错误异常通知屏蔽:标记 RAM 1 位错误 | R/W | 0 |
18 | ERMTE2 | 错误异常通知屏蔽:标记 RAM 2 位错误 | R/W | 0 |
17 | ERMDC | 错误异常通知屏蔽:数据 RAM 1 位错误 | R/W | 0 |
16 | ERMDE | 错误异常通知屏蔽:数据 RAM 2 位错误 | R/W | 0 |
15至13 | ICHEWY | 这些位保存发生缓存错误的路号。位 15 始终设置为 0。 | R/W | 未定义 |
12至5 | ICHEIX | 这些位保存发生缓存错误的缓存索引。 缓存大小为 8 Kbytes 时,保存位 10 到 5,位 12 和 11 固定为 0。 缓存大小为 16 Kbytes 时,保存位 11 到 5,位 12 固定为 0。 缓存大小为 32 Kbytes 时,保存位 12 到 5。 |
R/W | 未定义 |
4 | ICHERQ | 当此位设置为 1 时,表示正在进行缓存错误异常通知。然而,如果已屏蔽缓存错误异常通知,则即使设置为 1,CPU 也不会收到通知。 | R/W | 0 |
3 | ICHED | 此位表示数据 RAM 中发生了错误。 | R/W | 0 |
2 | ICHET | 此位表示标记 RAM 中发生了错误。 | R/W | 0 |
1 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
0 | ICHERR | 当发生缓存错误时,此位设置为 1。 | R/W | 0 |
注意:
当每个错误原因的错误异常通知屏蔽位清除(置为 0)时,如果发生相应错误,则更新 ICHERR、ICHERQ、ICHED/ICHET、ICHEIX 和 ICHEWY 位,并设置相应的错误状态位(置为 1)。当错误异常通知屏蔽位设置(置为 1)时,如果发生相应错误,仅设置相应的错误状态位(置为 1)。
8 Count Function Registers:
计数功能系统寄存器通过使用 LDSR 和 STSR 指令并指定由寄存器号和选择 ID 组成的系统寄存器号进行读写。
注意:通过配置 PMUMCTRL 寄存器,可以在用户模式下进行访问。
寄存器编号 (regID, selID) | 符号 | 功能 | 访问权限 |
---|---|---|---|
SR0, 11 | TSCOUNTL | 时间戳计数低位寄存器 | UM 读, SV 写 |
SR1, 11 | TSCOUNTH | 时间戳计数高位寄存器 | UM 读, SV 写 |
SR2, 11 | TSCTRL | 时间戳计数控制寄存器 | SV |
SR8, 11 | PMUMCTRL | 性能计数器用户模式控制寄存器 | SV |
SR0, 14 | PMCTRL0 | 性能计数控制 0 寄存器 | SV*1 |
SR1, 14 | PMCTRL1 | 性能计数控制 1 寄存器 | SV*1 |
SR2, 14 | PMCTRL2 | 性能计数控制 2 寄存器 | SV*1 |
SR3, 14 | PMCTRL3 | 性能计数控制 3 寄存器 | SV*1 |
SR4, 14 | PMCTRL4 | 性能计数控制 4 寄存器 | SV*1 |
SR5, 14 | PMCTRL5 | 性能计数控制 5 寄存器 | SV*1 |
SR6, 14 | PMCTRL6 | 性能计数控制 6 寄存器 | SV*1 |
SR7, 14 | PMCTRL7 | 性能计数控制 7 寄存器 | SV*1 |
SR16, 14 | PMCOUNT0 | 性能计数 0 寄存器 | SV*1 |
SR17, 14 | PMCOUNT1 | 性能计数 1 寄存器 | SV*1 |
SR18, 14 | PMCOUNT2 | 性能计数 2 寄存器 | SV*1 |
SR19, 14 | PMCOUNT3 | 性能计数 3 寄存器 | SV*1 |
SR20, 14 | PMCOUNT4 | 性能计数 4 寄存器 | SV*1 |
SR21, 14 | PMCOUNT5 | 性能计数 5 寄存器 | SV*1 |
SR22, 14 | PMCOUNT6 | 性能计数 6 寄存器 | SV*1 |
SR23, 14 | PMCOUNT7 | 性能计数 7 寄存器 | SV*1 |
SR0, 15 | PMSUBCND0 | 性能计数子条件 0 寄存器 | SV*1 |
SR1, 15 | PMSUBCND1 | 性能计数子条件 1 寄存器 | SV*1 |
SR2, 15 | PMSUBCND2 | 性能计数子条件 2 寄存器 | SV*1 |
SR3, 15 | PMSUBCND3 | 性能计数子条件 3 寄存器 | SV*1 |
SR4, 15 | PMSUBCND4 | 性能计数子条件 4 寄存器 | SV*1 |
SR5, 15 | PMSUBCND5 | 性能计数子条件 5 寄存器 | SV*1 |
SR6, 15 | PMSUBCND6 | 性能计数子条件 6 寄存器 | SV*1 |
SR7, 15 | PMSUBCND7 | 性能计数子条件 7 寄存器 | SV*1 |
8.1 TSCOUNTL — 时间戳计数低位寄存器
此寄存器与时间戳计数高位寄存器一起实现 64 位计数器。此寄存器作为 64 位计数器的低 32 位。
此寄存器只能在用户模式下读取。如果在用户模式下尝试写入此寄存器,将发生 PIE 异常。在管理模式下可以读取和写入此寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | TSCNTL31至TSCNTL0 | 这些位占 64 位计数器的低 32 位。如果 TSCTRL 寄存器启用计数,则每个时钟周期将此寄存器的值增加 1。当此寄存器从 FFFF FFFFH 计数到 0000 0000H 时,TSCOUNTH 寄存器将作为进位增加 1,并且此寄存器将回绕到 0000 0000H。此寄存器可以在任意时间访问,无论是否启用计数。此外,可以在开始计数前将任意值加载到此寄存器中,以实现从任意计数开始计数。 | R/W*1 | 0000 0000H |
注意:要使用此寄存器组成精确的 64 位计数器,请参见第 3.2.2.12 节,时间戳计数器。
8.2 TSCOUNTH — 时间戳计数高位寄存器
此寄存器与时间戳计数低位寄存器一起实现 64 位计数器。此寄存器作为 64 位计数器的高 32 位。
此寄存器只能在用户模式下读取。如果在用户模式下尝试写入此寄存器,将发生 PIE 异常。在管理模式下可以读取和写入此寄存器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | TSCNTH31至TSCNTH0 | 这些位占 64 位计数器的高 32 位。如果 TSCTRL 寄存器启用计数,当 TSCOUNTL 寄存器计数并生成进位时,此寄存器的值增加 1。如果当此寄存器保持 FFFF FFFFH 值时,TSCOUNTL 寄存器中发生进位,TSCTRL.OVF 位设置为 1,并且此寄存器回绕到 0000 0000H。此寄存器可以在任意时间访问,无论是否启用计数。此外,可以在开始计数前将任意值加载到此寄存器中,以实现从任意计数开始计数。 | R/W*1 | 0000 0000H |
注意:要使用此寄存器组成精确的 64 位计数器,请参见第 3.2.2.12 节,时间戳计数器。
8.3 TSCTRL — 时间戳计数控制
此寄存器用于控制通过组合 TSCOUNTH 和 TSCOUNTL 寄存器实现的 64 位时间戳计数器。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至2 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
1 | OVF | 此位用作溢出标志。当 TSCOUNTH 寄存器因其计数操作发生溢出时,此位设置为 1。此位不会自动清除为 0。要重置溢出状态,请将 0 写入此位。由于此位可以写入 1,因此无论计数操作如何,它都可以成为溢出条件。尽管它不影响计数器操作,但必须注意不要将该条件视为溢出。 | R/W | 0 |
0 | CEN | 此位用于启用或禁用通过组合 TSCOUNTH 和 TSCOUNTL 寄存器实现的 64 位时间戳计数器的计数操作。 0: 禁用计数操作 1: 启用计数操作 如果此位在设置为 0 时写入 1,则计数器立即开始计数。如果此位在设置为 1 时写入 0,则计数器停止立即计数。如果此位为 0,则保留 TSCOUNTH 和 TSCOUNTL 寄存器的值。没有任何因素会自动改变这个位的值。 |
R/W | 0 |
8.4 PMUMCTRL — 性能计数器用户模式控制
此寄存器指定在用户模式下访问性能测量功能系统寄存器的权限。系统寄存器的可访问性是针对性能测量功能的每个对应通道指定的。
当用户模式下访问被禁用时,任何尝试访问这些系统寄存器的操作都会生成 PIE 异常。当用户模式下访问被启用时,可以读写系统寄存器。
性能测量功能本身在用户模式下运行,无论此寄存器的设置如何。即使通过此寄存器禁用了用户模式下的所有通道访问,如果在主管模式下完成设置,仍然可以在用户模式下进行性能测量。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至8 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
7 | PMUE7 | 此位指定在用户模式下访问 PMCTRL7、PMCOUNT7 和 PMSUBCND7 寄存器的权限。 0: 禁用用户模式下对 PMCTRL7/PMCOUNT7/PMSUBCND7 的访问 1: 启用用户模式下对 PMCTRL7/PMCOUNT7/PMSUBCND7 的访问 |
R/W | 0 |
6 | PMUE6 | 此位指定在用户模式下访问 PMCTRL6、PMCOUNT6 和 PMSUBCND6 寄存器的权限。 0: 禁用用户模式下对 PMCTRL6/PMCOUNT6/PMSUBCND6 的访问 1: 启用用户模式下对 PMCTRL6/PMCOUNT6/PMSUBCND6 的访问 |
R/W | 0 |
5 | PMUE5 | 此位指定在用户模式下访问 PMCTRL5、PMCOUNT5 和 PMSUBCND5 寄存器的权限。 0: 禁用用户模式下对 PMCTRL5/PMCOUNT5/PMSUBCND5 的访问 1: 启用用户模式下对 PMCTRL5/PMCOUNT5/PMSUBCND5 的访问 |
R/W | 0 |
4 | PMUE4 | 此位指定在用户模式下访问 PMCTRL4、PMCOUNT4 和 PMSUBCND4 寄存器的权限。 0: 禁用用户模式下对 PMCTRL4/PMCOUNT4/PMSUBCND4 的访问 1: 启用用户模式下对 PMCTRL4/PMCOUNT4/PMSUBCND4 的访问 |
R/W | 0 |
3 | PMUE3 | 此位指定在用户模式下访问 PMCTRL3、PMCOUNT3 和 PMSUBCND3 寄存器的权限。 0: 禁用用户模式下对 PMCTRL3/PMCOUNT3/PMSUBCND3 的访问 1: 启用用户模式下对 PMCTRL3/PMCOUNT3/PMSUBCND3 的访问 |
R/W | 0 |
2 | PMUE2 | 此位指定在用户模式下访问 PMCTRL2、PMCOUNT2 和 PMSUBCND2 寄存器的权限。 0: 禁用用户模式下对 PMCTRL2/PMCOUNT2/PMSUBCND2 的访问 1: 启用用户模式下对 PMCTRL2/PMCOUNT2/PMSUBCND2 的访问 |
R/W | 0 |
1 | PMUE1 | 此位指定在用户模式下访问 PMCTRL1、PMCOUNT1 和 PMSUBCND1 寄存器的权限。 0: 禁用用户模式下对 PMCTRL1/PMCOUNT1/PMSUBCND1 的访问 1: 启用用户模式下对 PMCTRL1/PMCOUNT1/PMSUBCND1 的访问 |
R/W | 0 |
0 | PMUE0 | 此位指定在用户模式下访问 PMCTRL0、PMCOUNT0 和 PMSUBCND0 寄存器的权限。 0: 禁用用户模式下对 PMCTRL0/PMCOUNT0/PMSUBCND0 的访问 1: 启用用户模式下对 PMCTRL0/PMCOUNT0/PMSUBCND0 的访问 |
R/W | 0 |
8.5 PMCTRLn — 性能计数控制
此寄存器控制 PMCOUNTn 寄存器的计数操作。此 CPU 有 8 个性能计数控制寄存器通道 (n = 0 到 7)。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至16 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
15至8 | CND | 这些位指定要计数的事件的编号。如果 CEN 位设置为 1 并指定无效的事件编号,则不会更新 PMCOUNTn 寄存器。 | R/W | 0 |
7至2 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
1 | OVF | 此位用作溢出标志。当 PMCOUNTn 寄存器因其计数操作发生溢出时,此位设置为 1。此位不会自动清除为 0。要重置溢出状态,请将 0 写入此位。由于此位可以写入 1,因此无论计数操作如何,它都可以成为溢出条件。尽管它不影响计数器操作,但必须注意不要将该条件视为溢出。 | R/W | 0 |
0 | CEN | 此位用于启用或禁用 PMCOUNTn 寄存器的计数操作。 0: 禁用计数操作 1: 启用计数操作 如果此位设置为 1,计数器立即开始计数。如果此位设置为 0,计数器立即停止计数。如果此位为 0,则保留 PMCOUNTn 寄存器的值。没有会自动更改此位值的因素。 |
R/W | 0 |
事件编号及详情
编号 | 事件详情 | 推测操作*1 |
---|---|---|
00H | 所有时钟周期数*2 | 无 |
10H | 所有指令的执行次数*3 | 无 |
18H | 引起分支的指令数*4 | 无 |
19H | 条件分支指令的执行次数 (Bcond/Loop)*5 | 无 |
1AH | 条件分支指令的分支预测未命中的次数 (Bcond/Loop)*5 | 无 |
20H | EIINTn 接受次数*6 | 无 |
21H | FEINT 接受次数 | 无 |
22H | 终止型异常接受次数*6 (包括 EIINTn 和 FEINT) | 无 |
23H | 可恢复和挂起型异常接受次数 | 无 |
28H | 无中断处理的时钟周期数 (期间 ISPR 寄存器保持 0000H*7) | 无 |
29H | 无中断处理且禁用中断的时钟周期数 (期间 ISPR 寄存器保持 0000H*7 且 PSW.ID = 1) | 无 |
30H | 指令取回请求数*8 | 是 |
31H | 指令缓存命中数*9 | 是 |
40H | 指令未发射到指令执行单元的停顿周期数*10 | 是 |
50H | 向 Flash ROM 的指令取回请求数*11 | 是 |
51H | 向 Flash ROM 的数据读取请求数*12 | 是 |
注意项:
- *1:对于推测操作列为“是”的事件,执行结果被取消的事件也会被计数。
- *2:所有从开始计数到结束的时钟周期,包括未执行指令的期间,都会被计数。
- *3:开始计数的 LDSR 指令不包括在内,但停止计数的 LDSR 指令包括在内。
- *4:适用指令包括 JR、JMP、Bcond(仅在条件满足时)、JARL、LOOP(仅在条件满足时)、CALLT、DISPOSE、SWITCH、SYSCALL、CTRET、EIRET 和 FERET 指令。其他带有分支处理的指令不计数。如果条件不满足,Bcond 和 LOOP 指令不计数。
- *5:通过测量条件分支指令的执行次数和分支预测未命中的次数,可以获得分支预测未命中率(命中率)。注意,Bcond 指令的无条件分支(BR)计入“条件分支指令的执行次数”(CND = 19H),但不计入“条件分支指令的分支预测未命中次数”(CND = 1AH)。
- *6:对于表引用方法的 EIINTn,如果在读取表或自动保存上下文到寄存器组期间检测到异常,则不计入此数。
- *7:此事件假设在接受和返回中断时自动更新 ISPR 寄存器,如果与 INTCFG.ISPC 位设置为 1 一起使用,则无法正确测量。
- *8:此 CPU 以 64 位单位获取指令代码。每次 64 位获取计为一次指令取回请求。请注意,这不是指令的数量。CACHE 指令和 PREF 指令的指令取回不计数。
- *9:在此 CPU 中,缓存命中表示单次指令取回请求数,而不是指令数量。CACHE 指令的缓存操作不计数。
- *10:当 CPU 满足以下条件之一时,指令发射停顿发生:
– 在执行读取 PSW 寄存器的 STSR 指令时,指令的发射停顿直到所有前面的指令完成。
– 在执行 SYNCP、SYNCM 或 SYNCI 指令时,指令的发射停顿直到指令的等待条件清除。详细信息参见第 3.2.7.1 节,同步处理。
– 在执行操作缓存控制功能系统寄存器的 LDSR 或 STSR 指令时,指令的发射停顿直到所有前面的 CACHE 指令完成。
– 在执行操作 FPU 系统寄存器的 LDSR 或 STSR 指令时,指令的发射停顿直到所有前面的 FPU 指令完成。
– 在执行操作 FXU 系统寄存器的 LDSR 或 STSR 指令时,指令的发射停顿直到所有前面的 FXU 指令完成。
– 如果 LDSR 指令更新了保证其更新反映到后续指令的系统寄存器,指令的发射停顿直到系统寄存器的更新完成。详细信息参见第 3.2.7.3 节,系统寄存器更新后的冒险管理。
– 如果在开始执行 STSR 指令后开始执行 LDSR 指令,STSR 指令的发射停顿直到 LDSR 指令完成(即使 LDSR 和 STSR 指令的系统寄存器号不匹配)。
– 执行 HALT 指令时,指令的发射停顿直到产生解除暂停状态的条件。
– 执行 SNOOZE 指令时,指令的发射停顿直到产生解除休眠状态的条件。
– 当执行以下包含分支的指令时,指令的发射停顿直到分支完成并取消后续指令的执行。
SYSCALL、CALLT、EIRET、FERET、CTRET、TRAP、FETRAP、SYNCI
– 当检测到以下任何异常时,指令的发射停顿直到确认异常并取消后续指令的执行。
MIP、SYSERR(可恢复)、RIE、UCPOP、PIE - *11:实际的 Flash ROM 访问请求会被计数。如果指令取回请求命中指令缓存,则不计数。CACHE 和 PREF 指令对 Flash ROM 的指令取回请求会被计数。Flash ROM 的指令预取也会被计数。
- *12:实际的 Flash ROM 访问请求会被计数。如果数据读取请求命中 ROM 数据缓冲区,则不计数。Flash ROM 的预取也会被计
由于指令取回请求数 (30H) 和指令缓存命中数 (31H) 包括推测性指令取回,命中数除以请求数可能不是此 CPU 的准确指令缓存命中率。此 CPU 的指令缓存命中率可以通过指令取回请求数和向 Flash ROM 的指令取回请求数 (50H) 计算。在这种情况下,指令取回请求数减去向 Flash ROM 的指令取回请求数将是指令缓存命中数。然而,即使在这种情况下,指令缓存命中数也包括推测性指令取回。PREF 指令的预取被计算为指令取回请求数,但访问不可缓存区域不计为向 Flash ROM 的指令取回请求数
8.6 PMCOUNTn — 性能计数
此寄存器用于计数由 PMCTRLn 寄存器指定的各种事件的发生次数。此 CPU 有 8 个性能计数寄存器通道(n = 0 到 7)。
表 3.91 PMCOUNTn 寄存器内容
markdown
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | PMCNT31至PMCNT0 | 这些位形成一个 32 位计数器寄存器。 该计数器计数由 PMCTRLn.CND 位指定的事件的发生次数。当此寄存器从 FFFF FFFFH 计数到 0000 0000H 时,PMCTRLn.OVF 位设置为 1,并且寄存器回绕到 0000 0000H。此寄存器可以在任意时间访问,无论是否启用计数。此外,可以在开始计数前将该值加载到此寄存器中,以从任意计数开始计数。 |
R/W | 0000 0000H |
8.7 PMSUBCNDn — 性能计数子条件
PMSUBCNDn 寄存器根据 PMCTRLn.CND 的设置指定计数执行的子条件。在 PMSUBCNDn 寄存器中,配备了 8 个通道 (n = 0 到 7)。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至13 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
12至0 | SUBCND | SUBCND 字段的值如何使用取决于 PMCTRLn.CND 的设置。如果 PMCTRLn.CND 的值不是下标中的值,SUBCND 字段的值不会影响性能计数器的操作。 | R/W | 0 |
PMCTRLn.CND 的值 | 性能计数器操作 |
---|---|
20H | 可以限制计数的中断(EIINTn)的通道号。操作由第 12 位的值指定。 0: 不限制计数的通道号 1: 限制计数的通道号 如果第 12 位设置为 1,仅当接受的中断(EIINTn)的通道号 n 与位 11 到 0 指定的值匹配时,性能计数器才计数。 |
21H | 可以限制计数的中断(FEINTm)的通道号。操作由第 4 位的值指定。 0: 不限制计数的通道号 1: 限制计数的通道号 如果第 4 位设置为 1,仅当接受的中断(FEINTm)的通道号 m 与位 3 到 0 指定的值匹配时,性能计数器才计数。位 12 到 5 的值不影响性能计数器的操作。 |
9 Hardware Function Registers
硬件功能系统寄存器通过使用 LDSR 和 STSR 指令并指定由寄存器号和选择 ID 组成的系统寄存器号进行读写。
寄存器编号 (regID, selID) | 符号 | 功能 | 访问权限 |
---|---|---|---|
SR0, 12 | LSTEST0 | 锁步功能自检寄存器 0 | SV |
SR1, 12 | LSTEST1 | 锁步功能自检寄存器 1 | SV |
SR2, 12 | LSCFG | 锁步功能配置 | SV |
SR5, 12 | IFCR | 指令取回控制寄存器 | SV |
SR8, 12 | BRPCTRL0 | 分支预测功能控制寄存器 | SV |
SR12, 13 | L1RCFG | L1RAM 配置 | SV |
SR24, 13 | RDBCR | ROM 数据缓冲区控制寄存器 | SV |
9.1 LSTEST0 — 锁步功能自检寄存器 0
此寄存器用于锁步功能的自检。可以与 LSTEST1 寄存器组合使用以进行锁步功能的自检。有关锁步功能及其可用性的详细信息,请参见第 44 节,功能安全。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | LSTEST0 31至LSTEST0 0 | [写入] 向 LSTEST0 寄存器的位写入任何值。 [读取] 锁步 CPU 的主 CPU 读取 LSTEST0 中的值。 锁步 CPU 的校验 CPU 读取 LSTEST1 中的值。 |
R/W | 0000 0000H |
9.2 LSTEST1 — 锁步功能自检寄存器 1
此寄存器用于锁步功能的自检。可以与 LSTEST0 寄存器组合使用以进行锁步功能的自检。有关锁步功能及其可用性的详细信息,请参见第 44 节,功能安全。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至0 | LSTEST1 31至LSTEST1 0 | [写入] 向 LSTEST1 寄存器的位写入任何值。 [读取] 锁步 CPU 的主 CPU 读取 LSTEST1 中的值。 锁步 CPU 的校验 CPU 读取 LSTEST0 中的值。 |
R/W | 0000 0000H |
9.3 LSCFG — 锁步功能配置
此寄存器指示锁步功能的配置。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
0 | LSE | 此位指示锁步功能的可用性。 0: 锁步功能不可用 1: 锁步功能可用 |
R | *1 |
9.4 IFCR — 指令取回控制寄存器
此寄存器控制指令取回功能。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至1 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
0 | PLEN | 此位指定是否启用指令取回预加载功能。 0: 禁用 1: 启用*1 |
R/W*2 | 0000 0001H |
注意:
- *1:仅当启用指令缓存且取回到可缓存区域时,才执行指令取回预加载。
- *2:指令取回访问和系统寄存器访问是独立的。因此,即使预加载功能正在运行,也可以更改此寄存器的设置。在这种情况下,当前运行的预加载功能将正常完成旧设置,并从下一次预加载功能操作开始应用新设置。如果希望在更改寄存器设置之前、期间和之后抑制预加载,建议在不可缓存区域执行更改寄存器设置的指令。
“指令取回预加载”功能是一种优化CPU性能的方法,其主要目的是通过预先加载指令来减少指令取回的延迟,从而提高系统的执行效率。具体而言,当启用该功能时,CPU会在需要执行某些指令之前,提前将这些指令加载到缓存中。这样,当实际需要执行这些指令时,它们已经在缓存中就绪,无需再等待从主存中取回,从而显著减少了指令取回的时间。
功能细节
- 启用条件:指令取回预加载功能仅在指令缓存启用且取回的指令存储在可缓存区域时才会执行。
- 独立运行:指令取回访问和系统寄存器访问是独立的。因此,当前运行的预加载功能可以正常完成旧设置,而新设置将在下一次预加载操作中生效。
- 动态控制:即使预加载功能正在运行,也可以动态更改其设置。这提供了灵活性,使系统在运行时可以根据需要启用或禁用预加载功能,以适应不同的工作负载和性能需求。
9.5 BRPCTRL0 — 分支预测功能控制寄存器
此寄存器控制分支预测功能。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至2 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
1 | BRPCLR | 将此位设置为 1 会清除与分支预测功能相关的缓冲区。此位始终读取为 0。 | R/W*2 | 0 |
0 | BRPEN | 此位指定是否启用分支预测功能*1。 0: 禁用 1: 启用 |
R/W*2 | 1 |
注意: |
启用此功能时,根据产品中集成的预测功能预测分支指令的分支目标地址,并从预测地址取回指令。如果禁用此功能,则不会进行分支预测,并且从下一条指令地址取回指令。只有在启用指令缓存且取回到可缓存区域时,才会执行分支预测。
分支预测和系统寄存器访问是独立的。因此,即使分支预测功能正在运行,也可以更改此寄存器的设置。在这种情况下,当前运行的分支预测功能将正常完成旧设置,并从下一次分支预测操作开始应用新设置。如果希望在更改寄存器设置之前、期间和之后抑制分支预测,建议在不可缓存区域执行更改寄存器设置的指令。
9.5 L1RCFG — L1RAM 配置
此寄存器指示 L1RAM 的配置。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31, 30 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
29至8 | L1RSIZE | 此字段指示 L1RAM 的容量(Kbytes)。 例如:000020H: 32 Kbytes |
R | *1 |
7至4 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
3至0 | L1RLNKE | 此字段指示 L1RAM 中可用链接条目的数量。 例如:0010B: 2 entries |
R | *1 |
9.6 RDBCR — ROM 数据缓冲区控制寄存器
此寄存器控制 ROM 数据缓冲区。
位位置 | 位名称 | 功能 | 读/写 | 复位后的值 |
---|---|---|---|---|
31至9 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
8 | — | (保留以供将来扩展。请确保设置为 1。) | R | 1 |
7至2 | — | (保留以供将来扩展。请确保设置为 0。) | R | 0 |
1 | RDBCLR | 将此位设置为 1 会清除 ROM 数据缓冲区并初始化 ROM 数据缓冲区中的 LRU 信息。 如果在加载处理中或预取功能发出的总线请求存在时将此位设置为 1,则加载数据不会注册到 ROM 数据缓冲区。此位始终读取为 0。 |
R/W*1 | 0 |
0 | RDBEN | 此位指定是否启用 ROM 数据缓冲区。 0: 禁用 ROM 数据缓冲区 1: 启用 ROM 数据缓冲区 |
R/W*1 | 1 |
注意:
- *1:此寄存器值的任何变化都独立于使用 ROM 数据缓冲区的任何加载指令进行处理。为了准确反映此寄存器值的变化,建议在完成所有加载操作后操作此寄存器。