1. 特征
- 三十二个或十六个 32/64 位通用寄存器——OpenRISC 1000 实现优化用于嵌入式和类似环境中的 FPGA 和 ASIC,可能只实现三十二个寄存器中的前十六个。
- 所有其他寄存器都是为每个单元单独定义的专用寄存器,可通过 l.mtspr/l.mfspr 指令访问*
2. 分类
OpenRISC 1000 处理器包括几种类型的寄存器:用户级通用和专用寄存器、管理级专用寄存器和单元相关寄存器。
- 用户级通用和专用寄存器在用户模式和管理员操作模式下均可问。
- 管理员级专用寄存器只能在管理员操作模式下访问(SR[SM]=1)。
- 单元相关寄存器通常只能在管理员模式下访问,但这条规则也有例外。
2.1 专用寄存器 (Special-Purpose Registers)
所有单元的专用寄存器分为三十二组。根据该特定组中寄存器的最大理论数量,每个组可以具有不同的寄存器地址解码。一个组可以包含来自多个不同单元或进程的寄存器。 SR[SM] 位也用于寄存器地址解码,因为一些寄存器只能在管理员模式下访问。 l.mtspr 和 l.mfspr 指令用于读取和写入寄存器。
未实施的 SPR 应读作零。写入未实现的 SPR 不会有任何效果,l.mtspr 指令实际上是一个空操作。
GROUP # | UNIT DESCRIPTION |
---|---|
0 | 系统控制和状态寄存器 |
1 | 数据 MMU(在单个统一 MMU 的情况下,第 1 组和第 2 组解码到一组寄存器中) |
2 | 指令 MMU(在单个统一 MMU 的情况下,第 1 组和第 2 组解码为一组寄存器) |
3 | 数据缓存(在单个统一缓存的情况下,第 3 组和第 4 组解码为一组寄存器) |
4 | 指令缓存(在单个统一缓存的情况下,第 3 组和第 4 组解码为一组寄存器) |
5 | MAC单元 |
6 | Debug单元 |
7 | Performance counters unit(程序计数器) |
8 | Power Management |
9 | Programmable Interrupt Controller |
10 | Tick Timer |
11 | Floating Point unit |
12-23 | Reserved for future use |
24-31 | Custom units |
OpenRISC 1000 处理器实现至少需要实现第 0 组中的专用寄存器。所有其他组都是可选的,只有当实现具有相应的单元时,才会实现这些组中的寄存器。
可以通过读取组 0 中的 UPR 寄存器来确定实际实现了哪些单元。
一个 16 位 SPR 地址由 5 位组索引(位 15-11)和 11 位寄存器索引(位 10-0)组成。
表2列出了每个特殊用途寄存器的名称、寄存器地址、位域描述、访问权限等信息。




2.2 通用寄存器
三十二个通用寄存器标记为 R0-R31,在 32 位实现中为 32 位宽,在 64 位实现中为 64 位宽。它们保存标量整数数据、浮点数据、向量或内存指针。表3包含通用寄存器列表。 GPR 可以作为源寄存器和目标寄存器被 ORBIS、ORVDX 和 ORFPX 指令访问。

R0 应始终保持零值。初始化它是软件的责任。
一个实现可能有几组 GPR,并将它们用作影子寄存器,每当出现新的异常时在它们之间切换。当前集合由 SR[CID] 值标识。
在重置过程中,不需要实施将 GPR 初始化为零。重置异常处理程序负责在必要时将 GPR 初始化为零。
2.3 Support for Custom Number of GPRs
2.4 状态寄存器Supervision Register (SR)
状态寄存器(Status Register,SR)是一种特殊的寄存器,用于存储处理器的状态信息。在OpenRISC处理器架构中,SR寄存器是一个32位的寄存器,其中的位域(bit field)表示了处理器的各种状态信息,如特权级别、中断使能、条件码等,如下表所示。


- IE(Interrupt Enable):中断使能位,用于控制处理器是否响应中断请求。当IE位为1时,处理器响应中断请求,当IE位为0时,处理器不响应中断请求。
- SM(Supervisor Mode):特权级别位,用于控制处理器的特权级别。当SM位为0时,处理器处于用户模式(User Mode),只能执行非特权指令,没有访问特殊寄存器的权限;当SM位为1时,处理器处于特权模式(Supervisor Mode),可以执行所有指令,并且具有访问特殊寄存器的权限。
- TEE(Tick Timer Exception Enable):时钟中断使能位,用于控制处理器是否响应时钟中断请求。当TEE位为1时,处理器响应时钟中断请求,当TEE位为0时,处理器不响应时钟中断请求。
- DCE(Data Cache Enable):数据缓存使能位,用于控制处理器的数据缓存是否启用。当DCE位为1时,处理器的数据缓存启用,当DCE位为0时,处理器的数据缓存禁用。
- ICE(Instruction Cache Enable):指令缓存使能位,用于控制处理器的指令缓存是否启用。当ICE位为1时,处理器的指令缓存启用,当ICE位为0时,处理器的指令缓存禁用。
- DME(Data MMU Enable):数据MMU(Memory Management Unit)使能位,用于控制处理器的数据MMU是否启用。当DME位为1时,处理器的数据MMU启用,当DME位为0时,处理器的数据MMU禁用。
- IME(Instruction MMU Enable):指令MMU使能位,用于控制处理器的指令MMU是否启用。当IME位为1时,处理器的指令MMU启用,当IME位为0时,处理器的指令MMU禁用。
- LE(Little-Endian):大小端模式位,用于控制处理器的大小端模式。当LE位为1时,处理器采用小端模式(Little-Endian),当LE位为0时,处理器采用大端模式(Big-Endian)。