一、ARM 系列core概述
ARM分为三个不同的系列:
1、Cortex-A:面向尖端的基于虚拟内存的操作系统和用户应用
2、Cortex-R:针对实时系统,一般用于车规级芯片
3、Cortex-M:微控制器,替代对应的51单片机
Cortex-A | Cortex-R | Cortex-M | |
---|---|---|---|
运用场景 | 高性能 | 高实时性 | 低功耗/低面积 |
操作系统 | Linux/Rich OS | RTOS | RTOS |
指令级 | 32/64b ARM | 32b ARM | 32b Thumb |
中断 | GIC | GIC(固定延时的中断响应) | NVIC |
Memory | 多级cache | L1 cache and TCM | TCM |
安全等级 | ASIL-B | ASIL-D | ASIL-D |
本文章主要描述R和系列。Arm的R系列专门为严格的实时性设计,实时性主要体现在2方面:
- memory系统的设计:采用MPU保护机制,相比于A系列的MMU会通过读写数据的实时性
- 对中断的响应:R核的设计对应中断处理为确定的几十ns的中断响应时间,其原因是R核中设计了core的私有memory
TCM,中断处理函数可以直接快速运行。
R核在功能安全上可支持到Asilb-D,在安全上的设计为锁步、MPU、内存ECC,总线ECC,在线MBIST、LBIST等功能。
二、ARM核R52概述
1.R52 feature
如图为R52架构图,内部包括GIC、MPU、Generic Timer、debug and trace 模块等,R52支持以下特性:
1、支持最大4个core,支持分支预测功能
2、支持ECC 对于L1 cache 和TCM RAM(64K,512K,128K)
3、针对AXIM,AIXS,LLPP,FLASH interface 进行保护
4、支持armv8-R架构
5、ETM 用于指令和数据的trace功能
6、支持GIC功能(support 32-960 spi的中断)
7、支持CTI multiprocessor debugging 、PMU和Mbist功能(可以在boot前和boot后间隔检测)
2.Generic Timer模块
(参考:architecture - Generic Timer v1.2)
作用:用于给soc中所有core提供公共的时间戳(system counter),用于记录时间的流逝,不会记录日期等信息,在arm架构中一般只需要保证所有的core在SMP的模式下,对于不同的os系统可以不一致
架构图:
1)generic Timer由System Counter和per-core timer组成.(这种架构的设计在于考虑功耗,其工作在不同的power domian,一般架构设计中core可以实现shutdown,而System Counter会在allways on domain 域)
2)system counter 一般为1MHz-50Mhz,64bit的计数器
3)每个core中有一系列的timer,分布如下:
图中CNTCKLEN需要和core中的clk同步,CNTVALUEB 为64bit的计数器,
R52中的timer:
• An EL1 physical timer.
• An EL2 physical timer.
• A virtual timer.
寄存器介绍:
CNTFRQ: 读取system counter 频率寄存器
CNTPCT: 读取system counter计数器的值
asm ("MRC p15, 0, r0, c0, c0, 0;" // 读取CNTFRQ 保存到r0寄存器 "mov %0, r0;" // r0 : "=r"(count_cnt) // 输出r0到count_cnt : ); printf("CNTFRQ num = %d \n",count_cnt);
<span class="token keyword">asm</span> <span class="token punctuation">(</span><span class="token string">"MRRC p15, 0, r0, r1, c14;"</span> <span class="token comment">// 读取CNTPCT保存到r0寄存器 </span> <span class="token string">"mov %0, r0;"</span> <span class="token comment">// r0</span> <span class="token operator">:</span> <span class="token string">"=r"</span><span class="token punctuation">(</span>count_cnt<span class="token punctuation">)</span> <span class="token comment">// 输出r0到count_cnt</span> <span class="token operator">:</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"CNTPCT num = %d \n"</span><span class="token punctuation">,</span>count_cnt<span class="token punctuation">)</span><span class="token punctuation">;</span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3.异常模型
待更新~
4.GIC
GICv3中,为什么选择将cpu interface,从gic中抽离,实现在core内部?
1、为了提高效率,因为一般对于core对中断响应的处理一般的寄存器都在cpu interface内部
GIC模块的介绍可以详看GIC模块–ARM系列
5.MPU 模型
MPU(Memory Protection Unit)提供了内存保护和访问控制的功能,用于实现操作系统的内存隔离和保护。
R52中包括2块MPU,分别为EL1和EL2,地址控制范围为4G,EL1-controlled MPU可以配置16,20,24个region,EL2-controlled MPU可以配置0,16,20,24个region。MPU的region范围:PRBAR.BASE:0b000000 <= address <= PRLAR.LIMIT:0b111111,在MPU可以对不同的region配置以下的属性:
- SH[1:0]:Normal memory的sharebility属性,Non-shareable/Outer Shareable/Inner Shareable
- AP[2:1]:配置数据的读写权限
- XN:配置region是否可以执行
- AttrIndx[2:0]:通过index来选择配置对应的memory和cachebility的属性
在region的属性被配置完成后,会根据属性和异常等级l来决定访问的特权模式,如表格所示。
在没有配置MPU时,会有defalut属性,如表格所示为EL2_MPU的默认属性,相关的属性解释可以参考memory的定义-arm系列
6.Power Management
R52提供了减少动态和静态功耗的feature
- 内部实现自动的clock gating,减少动态功耗
- 使用WFI和WFE状态进入cpu idle,内部实现对每个core的clock gating,power up状态减少动态功耗
- cluster内设计了不同的power domian,实现对单core的power gating,降低静态功耗
cluster内部有2个power domain ,PDCPUx 和 PDTOP
PDTOP 包括:
• GIC distributor, Debug APB slave, CTM, and CTIs.
• AXIS interface.
• MBIST logic.
• Timers.
PDCPU 包括:
• Core x.
• L1 instruction and cache RAMs and TCM RAMs.
• Core-level debug logic.
• ETM logic.
R52内部上下电流程:
下电流程:
1.将需要保存的处理器状态或数据保存到不会断电的存储器中
2.关闭ICC_IGRPEN0和ICC_IGRPEN1的中断使能,设置GIC
distributor中对该core的wake-up request(通过GICR_WAKER 寄存器.
3.执行ISB指令,保证前两步的操作均完成
4.配置SOC中关于本core的power control寄存器
5.执行WFI指令
在上述步骤4中的寄存器被在配置后,PMU将执行以下操作:
1.等待COREPACTIVEx[1]变为0.
2.通过LPI发出使core进入SHUTDOWN状态的request.
- 如果LPI的request成功(具体协议参照reference 1),则可以将该core断电
上电流程: - 将 nCPUPORESETx 和 nCORERESETx 置低。
- 恢复供电
- 向 LPI 发出运行状态请求。该请求在复位前被接受。
- 释放 nCPUPORESETx 和 nCORERESETx。
7.Debug系统
8.reset
如图为ARMv8-a架构中描述的reset复位控制的作用域,在r52中存在corereset/cpuoreset/topreset/presetdbg/mbistreset
- corereset:为warm reset,会影响core内部相关的逻辑和功能
- cpuoreset:为cold reset,会影响core内部的功能和内部debug模块
- topreset:axi slave模块和GIC模块
- presetdbg:影响core 外部的debug模块
- mbistreset:影响dft的mbist
如图为复位场景及对应的reset信号,对应的场景有Powerup/Core Powerup/Core warm/Debug/MBIST。另外在同步复位和解复位时,对应复位没有顺序要求
总结
该文章主要概述ARM-R系列中的R52,主要包括内部的不同特性。