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方面:
R核在功能安全上可支持到Asilb-D,在安全上的设计为锁步、MPU、内存ECC,总线ECC,在线MBIST、LBIST等功能。
如图为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后间隔检测)
(参考: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);
asm ("MRRC p15, 0, r0, r1, c14;" // 读取CNTPCT保存到r0寄存器 "mov %0, r0;" // r0 : "=r"(count_cnt) // 输出r0到count_cnt : ); printf("CNTPCT num = %d \n",count_cnt);
待更新~
GICv3中,为什么选择将cpu interface,从gic中抽离,实现在core内部?
1、为了提高效率,因为一般对于core对中断响应的处理一般的寄存器都在cpu interface内部
GIC模块的介绍可以详看GIC模块–ARM系列
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配置以下的属性:
R52提供了减少动态和静态功耗的feature
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.
如图为ARMv8-a架构中描述的reset复位控制的作用域,在r52中存在corereset/cpuoreset/topreset/presetdbg/mbistreset
该文章主要概述ARM-R系列中的R52,主要包括内部的不同特性。