3 系统控制
本章介绍用于控制处理器运行的各类寄存器,涵盖以下模块内的寄存器:
- 系统控制空间
- 访问控制空间
- 标识信息空间
- 缓存维护空间
3.1 寄存器概览
本节介绍以下为本处理器专属实现的系统控制寄存器:
3.1.1 Auxiliary Control Register(ACTLR)
| 项目 | 内容 |
|---|---|
| 功能用途 | 提供处理器实现自定义的配置与控制选项。 |
| 使用约束 | 无使用约束。 |
| 配置版本 | 所有内核配置版本均支持该寄存器。 |
| 属性说明 | 见下表 |
| 位域 | 名称 | 功能说明 |
|---|---|---|
| [31:29] | — | 保留位 |
| [28] | DISFPUISSOPT | 0:正常工作模式 |
| [27] | DISCRITAXIRUW | 关闭关键 AXI写下读(read-under-write)机制: 0:正常工作,兼容 r0 版本内核; 1:针对设备内存 / 强排序内存的 AXI 读操作、共享内存独占读操作,必须等待 AXI 上所有未完成存储事务全部结束后,才允许在 AXIM AR 通道发起。 |
| [26] | DISDYNADD | 关闭 ADD、SUB 指令动态分配机制: 0:正常工作,部分 ADD、SUB 指令在 EX1 阶段完成运算; 1:所有 ADD、SUB 指令均延迟至 EX2 阶段完成运算。 |
| [25:21] | DISISSCH1 | 0:正常工作; 1:禁止对应类型指令在发射通道 1 派发。 Bit [25]:浮点 VFP 指令 Bit [24]:整数乘累加 MAC、乘法 MUL 指令 Bit [23]:目标为 PC 的加载指令 Bit [22]:间接跳转(不含加载至 PC 场景) Bit [21]:直接跳转指令 |
| [20:16] | DISDI | 0:正常工作; 1:当对应类型指令占用通道 0 时,禁止任何指令双发射。 Bit [20]:浮点 VFP 指令 Bit [19]:整数乘累加 MAC、乘法 MUL 指令 Bit [18]:目标为 PC 的加载指令 Bit [17]:间接跳转(不含加载至 PC 场景) Bit [16]:直接跳转指令 |
| [15] | DISCRITAXIRUR | 关闭关键 AXI读下读(Read-Under-Read)机制: 0:正常工作; 1:若 AXI 存在尚未完成的读事务,则不再发起针对强排序 / 设备内存的 AXI 读,以及共享内存 LDREX 独占读。AXI 事务一旦发起将不可被打断。该位有助于缩短此类事务持续时长、优化最坏情况中断延迟;开启后整体性能下降。 |
| [14] | DISBTACALLOC | 0:正常工作; 1:分支目标地址缓存 BTAC 不再分配新条目,但已有条目仍可更新。 |
| [13] | DISBTACREAD | 0:正常工作; 1:不使用 BTAC 缓存,仅能执行静态分支预测。 |
| [12] | DISITMATBFLUSH | 关闭 ITM 与 DWT 的 ATB 冲刷机制: 1:禁用 ITM、DWT ATB 冲刷,忽略 AFVALID 信号,强制拉高 AFREADY。注释该位硬件固定为 1,属性为读恒 1、写忽略(RAO/WI) |
| [11] | DISRAMODE | 关闭回写 - 写分配(Write-Back Write-Allocate)存储区的动态读分配模式:0:正常工作模式 1:禁用动态读分配 |
| [10] | FPEXCODIS | 禁用FPU异常输出 0:正常工作模式 1:关闭 FPU 异常输出 |
| [9:3] | - | 保留 |
| [2] | DISFOLD | 0:正常工作模式 |
| [1:0] | - | 保留 |
3.1.2 CPUID Base Register(CPUID)
| 项目 | 内容 |
|---|---|
| 功能用途 | ・处理器内核的 ID 编号 ・处理器内核的版本号 ・处理器内核的实现细节 |
| 使用约束 | 无使用约束。 |
| 配置版本 | 所有内核配置版本均支持该寄存器。 |
| 属性说明 | 见下表 |
| 位域 | 名称 | 功能说明 |
|---|---|---|
| [31:24] | IMPLEMENTER | 标识内核设计厂商:0x41 = Arm 公司 |
| [23:20] | VARIANT | 标识处理器变体版本:0x0 = Revision 00x1 = Revision 1 |
| [19:16] | ARCHITECTURE | 固定为0xF |
| [15:4] | PARTNO | 标识器件型号 0xC27 = Cortex‑M7 |
| [3:0] | REVISION | 标识补丁版本: 0x0 = Patch0 0x1 = Patch 1 0x2 = Patch 2 |
3.1.3 Cache Level ID Register(CLIDR)
| 项目 | 内容 |
|---|---|
| 功能用途 | ・标识已实现的缓存层级。从架构层面而言,指令侧与数据侧可配置不同数量的缓存层级。 ・记录一致性点(point-of-coherency) ・记录统一缓存点(point-of-unification) |
| 使用约束 | 只读寄存器且仅在特权模式下可以访问 |
| 配置版本 | 所有内核配置版本均支持该寄存器。 |
| 属性说明 | 见下表 |
| 位域 | 名称 | 功能说明 |
|---|---|---|
| [31:30] | — | 保留位 |
| [29:27] | LoUU | 单核统一缓存层级(Level of Unification Uniprocessor) 0b001:存在任意一类缓存时,统一缓存点位于 L2 缓存。 0b000:未实现指令缓存与数据缓存时,统一缓存点位于 L1 层级。 |
| [26:24] | LoC | 一致性层级(Level of Coherency) 0b001:存在任意一类缓存时,一致性点位于 L2 缓存。 0b000:未实现指令缓存与数据缓存时,一致性点位于 L1 层级。 备注:M7无L2缓存 |
| [23:3] | — | 保留位 |
| [2:0] | Ctype1 | L1 缓存类型 0b000:未实现指令缓存、数据缓存。 0b001:已实现指令缓存。 0b010:已实现数据缓存。 0b011:同时实现指令缓存与数据缓存。 |
3.1.4 Cache Size ID Register(CCSIDR)
| 项目 | 内容 |
|---|---|
| 功能用途 | 提供由CSSELR 寄存器选中的指令缓存或数据缓存的容量与工作特性相关信息。从架构层面,最多可支持八级缓存,包含指令缓存、数据缓存或统一型缓存。本处理器仅包含一级(L1)指令缓存与数据缓存。 |
| 使用约束 | 只读寄存器且仅在特权模式下可以访问 |
| 配置版本 | 所有内核配置版本均支持该寄存器。 |
| 属性说明 | 见下表 |
| 位域 | 名称 | 功能说明 |
|---|---|---|
| [31] | WT | 标识是否支持写直通(Write-Through): 1 = 支持写直通 |
| [30] | WB | 标识是否支持写回(Write-Back): 1 = 支持写回 |
| [29] | RA | 标识是否支持读分配(Read Allocate): 1 = 支持读分配 |
| [28] | WA | 标识是否支持写分配(Write Allocate): 1 = 支持写分配 |
| [27:13] | NumSets | 标识缓存组数量,计算公式:实际组数 = NumSets + 1数值取决于缓存容量配置 |
| [12:3] | Associativity | 标识缓存路数,计算公式:实际路数 = Associativity + 1 0x1 = 2 路组相联 0x3 = 4 路数据缓存相联 |
| [2:0] | LineSize | 标识每条缓存行包含多少个字(word) 0x1 = 缓存行大小 32 字节 备注:计算公式为 |
下表是CCSIDR编码实例说明。
举例说明计算过程:当SIZE=4KB,Numbers=0x001F,Associativity=0x3,LineSize=0x1。首先计算cacheline的大小,根据上面提到的公式,可以计算出x=8word,即cacheline容量为8*4=32B。然后每组有4路(Associativity+1),共32组(Numbers+1)。Cache总容量=X_Linesize*(Associativity+1)*(Numbers+1)=32*4*32=4096B=4KB。
3.1.5 Cache Size Selection Register(CSSELR)
| 项目 | 内容 |
|---|---|
| 功能用途 | 存放处理器用于选择待查询缓存的选择值。 |
| 使用约束 | 可读写,仅特权模式下访问 |
| 配置版本 | 所有内核配置版本均支持该寄存器。 |
| 属性说明 | 见下表 |
| 位域 | 名称 | 功能说明 |
|---|---|---|
| [31:4] | — | 保留位 |
| [3:1] | Level | 选择要查询的缓存层级。固定代表一级缓存(L1)。该字段读取恒为 0,写入忽略(RAZ/WI)。 |
| [0] | InD | 选择指令缓存或数据缓存: 0 = 数据缓存(Data cache) 1 = 指令缓存(Instruction cache) |
3.1.6 Instruction and Data Tightly-Coupled Memory Control Register(CM7_ITCMCR/CM7_DTCMCR)
| 项目 | 内容 |
|---|---|
| 功能用途 | 控制访问请求被映射至 TCM 接口还是 AXIM 接口。 |
| 使用约束 | 仅特权模式下访问 |
| 配置版本 | 所有内核配置版本均支持该寄存器。 |
| 属性说明 | 见下表 |
| 位域 | 名称 | 类型 | 功能说明 |
|---|---|---|---|
| [31:7] | — | — | 保留位 |
| [6:3] | SZ | RO | TCM 容量。标识对应 TCM 的大小: 0b0000 未实现 TCM 0b0011 4KB 0b0100 8KB 0b0101 16KB0 b0110 32KB 0b0111 64KB 0b1000 128KB 0b1001 256KB 0b1010 512KB 0b1011 1MB 0b1100 2MB 0b1101 4MB 0b1110 8MB 0b1111 16MB |
| [2] | RETEN | RW | 重试阶段使能。使能后,处理器保证响应对应 TCM 接口上的重试输出信号,重新执行发起 TCM 访问的指令。 0:禁用重试阶段 1:使能重试阶段复位值由 INITRETRYEN 引脚决定。 重试功能可配合外部逻辑,用于实现 TCM 的检错与纠错。 |
| [1] | RMW | RW | 读 - 修改 - 写(RMW)使能。该位置 1 时,所有非 TCM RAM 完整位宽的 TCM 写访问,都会采用 RMW 操作序列: 0:禁用 RMW 1:使能 RMW复位值由 INITRMWEN 引脚决定。 RMW 功能可配合外部逻辑,用于实现 TCM 的检错与纠错。 |
| [0] | EN | RW | TCM 使能。当 TCM 被禁用时,所有原本指向 TCM 地址区间的访问全部转发至 AXIM 接口。 0:TCM 禁用 1:TCM 使能 复位值由 INITTCMEN 引脚决定。 |
3.1.7 AHBP Control Register(AHBPCR)
| 项目 | 内容 |
|---|---|
| 功能用途 | 控制访问请求路由至AHBP接口还是AXIM接口 |
| 使用约束 | 仅特权模式下访问 |
| 配置版本 | 所有内核配置版本均支持该寄存器。 |
| 属性说明 | 见下表 |
| 位域 | 名称 | 类型 | 功能说明 |
|---|---|---|---|
| [31:4] | — | — | 保留位 |
| [3:1] | SZ | RO | AHBP 地址空间大小: 0b000:0MB,AHBP 接口禁用 0b001:64MB 0b010:128MB 0b011:256MB 0b100:512MB 其余编码值保留。 寄存器复位值由 CFGAHBPSZ 配置引脚决定。 |
| [0] | EN | RW | AHBP 接口使能: 0:AHBP 禁用。接口关闭后,原 AHBP 地址区间的所有访问请求均转发至 AXIM 接口。 1:AHBP 使能。 复位值由 INITAHBPEN 配置引脚决定。 |
3.1.8 L1 Cache Control Register(CACR)
| 项目 | 译文 |
|---|---|
| 用途 | 控制 L1 缓存 ECC 功能以及 L1 缓存一致性使用模式。 |
| 使用约束 | 仅允许在特权模式下访问。 |
| 配置适配 | 所有处理器配置版本均具备该寄存器。 |
| 属性 | 见下表 |
| 位域 | 名称 | 类型 | 功能说明 |
|---|---|---|---|
| [31:3] | — | — | 保留位,读取恒为 0、写入忽略(RAZ/WI) |
| [2] | FORCEWT | RW | 使能数据缓存强制写直通模式: 0:关闭强制写直通 1:开启强制写直通。所有可缓存内存区域一律按照写直通 (Write-Through)处理。若未集成数据缓存,该位读取恒为 0、写入忽略。若集成数据缓存,FORCEWT 上电复位值为 0。 |
| [1] | ECCDIS | RW | 开启指令和数据缓存ECC功能 0:控制指令缓存与数据缓存的 ECC 功能: 1:禁用指令缓存、数据缓存的 ECC 校验功能。 |
| [0] | SIWT | RW | 共享可缓存区域强制 WT(数据缓存)。用于启用受限缓存一致性工作模式:0:常规模式。共享可缓存地址按不可缓存对待,软件配置的内部缓存属性被忽略。此为共享内存默认工作模式。对于这类地址,数据缓存对软件等效透明,无需软件执行缓存维护操作。 1:共享可缓存地址按写直通 (Write-Through)对待,软件配置的内部缓存属性被忽略。所有写操作全局立即可见;其他总线主设备的数据更新,Cortex‑M7 内核软件仍需要执行对应的缓存维护操作才能读取到最新数据。适用于异构多核系统,典型场景:Cortex‑M7 挂接在多核处理器的加速器一致性端口(ACP)。未配置数据缓存时,该位读取恒为 0、写入忽略(RAZ/WI)。 备注:该位的作用是修改 MPU 标记为 Normal / Shared(可共享)内存区域的数据缓存策略。当siwt=0时,标记为shareable的区域访问一律视作Non-cacheable,CPU访问该区域时绕过Dcache,走AXIM/AHBP总线。当siwt=1时,写操作执行WT操作,读操作仍进行缓存操作。 |
3.1.9 Auxiliary Bus Fault Status Register(ABFSR)
| 项目 | 译文 |
|---|---|
| 用途 | 保存异步总线故障的来源信息。在总线故障异常服务程序中,软件读取 BFSR 寄存器;若检测到存在异步故障,则读取 ABFSR 寄存器,确认受故障影响的接口。向 CM7_ABFSR 写入任意数值均可清除该寄存器标志位。关于 BFSR 更多信息,请参阅《ARMv7-M 架构参考手册》。 |
| 使用约束 | 仅可在特权模式下访问。寄存器由系统复位信号nSYSRESET复位;向其写入任意数据都会将寄存器清零。仅当BFSR.IMPRECISERR = 1时,本寄存器内的数据才具备有效定义。 |
| 配置适配 | 见下表 |
| 位域 | 名称 | 功能说明 |
|---|---|---|
| [31:10] | — | 保留位 |
| [9:8] | AXIMTYPE | 标识 AXIM 接口上报的故障响应类型: 0b00:OKAY(正常访问完成,无错误) 0b01:EXOKAY(独占访问成功响应) 0b10:SLVERR(从设备错误,外设返回功能性故障) 0b11:DECERR(译码错误,地址无对应从设备) 仅当 AXIM 位为 1 时,此字段有效。 |
| [7:5] | — | 保留位 |
| [4] | EPPB | EPPB 接口发生异步故障 |
| [3] | AXIM | AXIM 接口发生异步故障 |
| [2] | AHBP | AHBP 接口发生异步故障 |
| [1] | DTCM | DTCM 接口发生异步故障 |
| [0] | ITCM | ITCM 接口发生异步故障 |
3.1.10 Instruction Error bank Register 0-1(IEBR0-1)
| 项目 | 译文 |
|---|---|
| 用途 | 保存指令缓存查找过程中检测到的错误相关信息。 |
| 使用约束 | 仅允许在特权模式下访问。 |
| 配置适配 | 仅当实现了 ECC 可配置选项时,该寄存器有效。 |
| 属性 | 见下表 |
| 位域 | 名称 | 类型 | 描述 |
|---|---|---|---|
| [31:30] | — | RW | 用户自定义。发生新缓存分配时以及上电复位时,错误检测逻辑将此字段置为 0b00 |
| [29:18] | — | RW | 保留位 |
| [17] | Type of error(错误类型) | RW | 标识错误类型: 0:可纠正错误 1:不可纠正错误 |
| [16] | RAM bank(RAM 存储体) | RW | 标识发生错误的 RAM 区域: 0:标签 RAM(Tag RAM) 1:数据 RAM(Data RAM) |
| [15:2] | RAM location(RAM 位置信息) | RW | 标识指令缓存 RAM 内出错位置: [14]:路(Way) [13:4]:组索引(Index) [3:2]:缓存行内双字偏移 |
| [1] | Locked(锁定标志) | RW | 标识该缓存条目是否被锁定: 0:条目未锁定,硬件可用于缓存分配 1:条目由软件锁定,硬件不允许将新内容分配至该条目 上电复位默认值为 0 |
| [0] | Valid(有效标志) | RW | 标识本条记录是否有效: 0:条目无效 1:条目有效 上电复位默认值为 0 |
3.1.11 Data Error bank Register 0-1(DEBR0-1)
| 项目 | 译文 |
|---|---|
| 用途 | 保存数据缓存查找过程中检测到的错误相关信息。 |
| 使用约束 | 仅允许在特权模式下访问。 |
| 配置适配 | 仅当实现 ECC 选配功能时,该寄存器可用。 |
| 属性 | 见下表 |
| 位域 | 名称 | 类型 | 描述 |
|---|---|---|---|
| [31:30] | — | RW | 用户自定义字段。在发生新缓存分配以及上电复位时,错误检测逻辑将此字段置为 0b00 |
| [29:18] | — | RW | 保留位 |
| [17] | Type of error(错误类型) | RW | 标识错误类型: 0:可纠正错误 1:不可纠正错误 |
| [16] | RAM bank(RAM 存储体) | RW | 标识出错所在 RAM 存储体: 0:标签 RAM(Tag RAM) 1:数据 RAM(Data RAM) |
| [15:2] | RAM location(RAM 位置信息) | RW | 标识数据缓存 RAM 内出错位置: [15:14]:路(Way) [13:5]:组索引(Index) [4:2]:缓存行内字偏移 |
| [1] | Locked(锁定标志) | RW | 标识该缓存条目是否处于锁定状态: 0:条目未锁定,硬件可分配使用该条目 1:条目由软件锁定,硬件不允许将新数据分配至该条目 上电复位默认值为 0 |
| [0] | Valid(有效标志) | RW | 标识本条故障记录是否有效: 0:条目无效 1:条目有效 上电复位默认值为 0 |
3.1.12 AHB Slave Control Register(AHBSCR)
| 项目 | 译文 |
|---|---|
| 用途 | 控制内核软件访问与 AHB 从设备访问 TCM 时的优先级。 |
| 使用约束 | 仅允许在特权模式下访问。 |
| 配置适配 | 所有处理器配置版本均具备该寄存器。 |
| 属性 | 见下表 |
| 位域 | 名称 | 类型 | 功能说明 |
|---|---|---|---|
| [31:16] | — | — | 保留位 |
| [15:11] | INITCOUNT | RW | 公平计数器初始值。用于降低由 AHBSCR.CTL 字段选定访问发起方的访问优先级。复位值为 0b01。 ・轮询调度模式下,将 INITCOUNT 设置为 0b01,同时 AHBSCR.CTL 设置为 0b00 或 0b01 ・注意:INITCOUNT禁止配置为 0b00。若设为 0,被降级的访问发起方在总线竞争时将始终获得优先权限,可能引发活锁(livelock)。 当 AHBSCR.CTL = 0b11 时,INITCOUNT 不生效。 |
| [10:2] | TPRI | RW | AHBS 流量降级阈值执行优先级。优先级取值为 TPRI [7:0],编码格式与 NVIC 寄存器保持一致: 0b0xxxxxxx:普通中断优先级 0b11111111:优先级 -1,对应 HardFault 异常 0b11111110:优先级 -2,对应 NMI 异常 |
| [1:0] | CTL | RW | AHBS 优先级控制: 0b00:AHBS 访问优先级被降级(复位默认值) 0b01:CPU 软件侧访问优先级被降级 0b10:当 CPU 当前执行优先级大于等于TPRI 配置阈值时,使用 INITCOUNT 初始化公平计数器,AHBS 访问优先级被降级;当 CPU 执行优先级低于该阈值时,公平计数器初始化为 1(进入轮询仲裁模式)。 ・阈值编码遵循 NVIC 规则:数值越大,逻辑优先级越低; ・处理器当前执行优先级遵循架构定义,自动包含 PRIMASK、BASEPRI、FAULTMASK 特殊寄存器带来的屏蔽效果。 0b11:访问优先级由外部 AHBSPRI 信号控制。 |
知识点:占坑后面更新
1、结合armv7手册,补充其余寄存器的解释
2、详细了解ARM M系列汇总的动态分支预测,投机访问,静态分支预测
3、对于WBWA中的策略,结合MPU属性划分,详细了解Dcache处理机制
4、对于缓存一致性的问题,理解一下POC和POU机制,以及常见的处理方式
5、对于ECC机制,SRAM,FLASH,以及tcm和cache的处理方式分别是什么
6、AHBS从机的仲裁机制需研究一下