ARM Cortex-M
ARM Cortex-M是ARM架构处理器核心中,低端系列的统称,由安谋控股所授权。这组核心的特点为低成本以及高能源效率的微处理器而优化设计,已有上千万个消费性设备中有此系列的微处理器[1]。此系列核心包括Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M23、Cortex-M33、Cortex-M35P和Cortex-M55。其中Cortex-M4 / M7 / M33 / M35P / M55 核心有浮点运算器的选项,若有浮点运算器的选项,会在型号后面说明,例如Cortex-Mx with FPU或Cortex-MxF,其中x是核心编号。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/3d/ARM_Cortex-M0_and_M3_ICs_in_SMD_Packages.jpg/360px-ARM_Cortex-M0_and_M3_ICs_in_SMD_Packages.jpg)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/STM32F100C4T6B-HD.jpg/220px-STM32F100C4T6B-HD.jpg)
24 MHz ARM Cortex-M3 单片机,有16千字节闪存,4 KB RAM。由意法半导体生产
简介
编辑32-bit | |
---|---|
年份 | 核心 |
2004年 | Cortex-M3 |
2007年 | Cortex-M1 |
2009年 | Cortex-M0 |
2010年 | Cortex-M4 |
2012年 | Cortex-M0+ |
2014年 | Cortex-M7 |
2016年 | Cortex-M23 |
2016年 | Cortex-M33 |
2018年 | Cortex-M35P |
2020年 | Cortex-M55 |
ARM Cortex-M系列是为了单片机、特殊应用集成电路(ASIC)、应用专门标准产品(ASSP)、现场可编程逻辑门阵列(FPGA)及单片系统(SoC)设计的ARM微处理器核心。Cortex-M核心常用在 专用微控制器芯片中,但也会藏在SoC芯片中,例如电源管理制器、输入/输出控制器、系统控制器、触碰屏幕控制器、智能电池控制器以及传感器控制器。
以往8位的微控制器相当流行,但低端的Cortex-M芯片已经降价,占据了一些8位微控制器的市场。在取代8位微控制器时,Cortex-M是常出现的选项,因为有32位数学运算上的优势,也会用来替换一些较旧的ARM核心 ,例如ARM7及ARM9。
授权
编辑安谋控股不会以其自身的技术生产CPU或贩售CPU,而是其将处理器的架构授权给其他有意愿开发的公司。安谋有许多不同的授权条款,差异在成本以及可交付成果。对于所有的授权,安谋都会提出一份可集成的ARM核心硬件描述,也包括完整的软件开发工具组,以及贩售包括ARM CPU在内的集成电路的权利。
硅定制
编辑集成组件制造厂(IDM)收到的ARM处理器知识产权,是可逻辑综合的寄存器传输级(用Verilog所写)。以此型式,集成组件制造商可以进行架构层级的优化以及延伸,可以让制造商达成其客户的设计目的,例如高主频速度、非常低的能耗、指令集延伸(包括浮点数)、针对大小的优化、调试器的支持等。若要确认特定的ARM CPU芯片中已有那些功能,则需确认制造商的资料表以及相关文件。
Cortex-M核心的部分选配机能如下:
- SysTick计时器:24位的系统计时器,延伸了处理器以及嵌套向量中断控制器(Nested Vectored Interrupt Controller、NVIC)的机能。若有此计时器,也可以提供额外的SysTick中断,可以配置其优先权[2][3][4]。虽然SysTick计时器不是必备的,不过几乎没有不支持SysTick的Cortex-M微处理器。若Cortex-M33控制器有安全扩展(Security Extension)选项,会有二个SysTicks,一个是安全的,另一个是一般的。
- 比特带(Bit-Band):比特带区域内存储器中的每一个比特,可以个别映射到一个字符组。例如,写入特定的假名字符组,就代表设置或是清除比特带区域内特定的比特。因此比特带区域内的每一个比特都可以透过字符组对齐的地址来直接读写。而且,每一个比特都可以用C/C++进行设置、清除、反相等功能,不需要透过一连串畗读取-修改-写入的指令顺序[2][3][4]。比特带也不是Cortex-M一定会有的功能,不过不支持比特带的Cortex-M3或Cortex-M4微处理器较不常见。有些Cortex-M0及Cortex-M0+微处理器也会有比特带。
- 存储器保护单元(MPU):透过强制的权限以及访问规则,可以保护特定区域的存储器。最多可以支持八个不同的存储器区域,每个还可以分成八个等大小的子区域[2][3][4]。
- 紧密耦合存储器(Tightly-Coupled Memory、TCM):是低延迟的RAM,可以保存关键性的程序、资料及堆栈。紧密耦合存储器一般会是微处理器中最快的RAM,仅次于缓存存储器。
ARM Core | Cortex M0[5] |
Cortex M0+[6] |
Cortex M1[7] |
Cortex M3[8] |
Cortex M4[9] |
Cortex M7[10] |
Cortex M23[11] |
Cortex M33[12] |
Cortex M35P |
---|---|---|---|---|---|---|---|---|---|
SysTick 24位计时器 | 选配 (0,1) |
选配 (0,1) |
选配 (0,1) |
是 (1) |
是 (1) |
是 (1) |
选配 (0,1,2) |
是 (1,2) |
是 (1,2) |
单周期I/O端口 | 否 | 选配 | 否 | 否 | 否 | 否 | 选配 | 否 | 否 |
比特带存储器 | 否[13] | 否[13] | 否* | 选配 | 选配 | 选配 | 否 | 否 | 否 |
存储器保护单元 (MPU) |
否 | 选配 (0,8) |
否 | 选配 (0,8) |
选配 (0,8) |
选配 (0,8,16) |
选配 (0,4,8,12,16) |
选配 (0,4,8,12,16) |
选配 * |
安全属性单元(SAU) 及堆栈限制 |
否 | 否 | 否 | 否 | 否 | 否 | 选配 (0,4,8) |
选配 (0,4,8) |
选配 * |
指令TCM | 否 | 否 | 选配 | 否 | 否 | 选配 | 否 | 否 | 否 |
资料TCM | 否 | 否 | 选配 | 否 | 否 | 选配 | 否 | 否 | 否 |
指令缓存 | 否[14] | 否[14] | 否[14] | 否[14] | 否[14] | 选配 | 否 | 否 | 选配 |
资料缓存 | 否[14] | 否[14] | 否[14] | 否[14] | 否[14] | 选配 | 否 | 否 | 否 |
向量表位移寄存器 (VTOR) |
否 | 选配 (0,1) |
选配 (0,1) |
选配 (0,1) |
选配 (0,1) |
选配 (0,1) |
选配 (0,1,2) |
是 (1,2) |
是 (1,2) |
- 注:大部分Cortex-M3及M4的微处理器有比特带及存储器保护单元。M0/M0+可以用Cortex-M系统开发工具加入比特带选项[13]
- 注:软件在试图使用特定机能时,需要先确认该机能是否有效[4]
- 注:Cortex-M35P的公开资料不多,一直到其技术参考手册发行后才有改善。
- 字节序:小端序(Little-endian)或大端序(big-endian)。Cortex-M和其他早期的ARM核心不同,在制作芯片时就要选用小端序或大端序。
- 中断:1至32个(M0/M0+/M1)、1至240个(M3/M4/M7/M23)、1至480个(M33/M35P)
- 唤醒中断控制器:选配
- 向量表位移寄存器:选配(M0没有此选项)
- 指令访问宽度:只有16位,或几乎是32位
- 支持用户/特取模式:选配
- 重置所有的寄存器:选配
- 单一周期的I/O端口:选配(M0+/M23)
- 调试访问端口(DAP):无、SWD、JTAG及SWD(所有Cortex-M核心都有此选项)
- 支持Halting调试:选配
- 监控点比较器数量:0至2个(M0/M0+/M1),0至4个(M3/M4/M7/M23/M33/M35P)
- 中断点比较器数量:0至4个 (M0/M0+/M1/M23),0至8个(M3/M4/M7/M33/M35P)
指令集
编辑Cortex-M0 / M0+ / M1实现的是ARMv6-M架构[2],Cortex-M3实现的是ARMv7-M架构[3],Cortex-M4 / Cortex-M7实现的是ARMv7E-M架构[3]。Cortex-M23 / M33 / M35P实现的是ARMv8-M架构[15],Cortex-M55实现的是ARMv8.1-M架构[16]。这些架构是二进制的脚本,可以和ARMv6-M、 ARMv7-M、ARMv7E-M向上兼容。Cortex-M0 / Cortex-M0+ / Cortex-M1的脚本不用修改就可以在Cortex-M3 / Cortex-M4 / Cortex-M7上执行。Cortex-M3上可以执行的二进制代码不需修改就可以在Cortex-M4 / Cortex-M7 / Cortex-M33 / Cortex-M35P上执行[2][3]。Cortex-M架构中支持Thumb-1和Thumb-2的指令集,不支持早期的32-bit ARM指令集。
所有Cortex-M的核心都有一个共通的指令子集,包括大部分Thumb-1指令、一些Thumb-2指令,以及结果为32位的乘法。Cortex-M0 / Cortex-M0+ / Cortex-M1 / Cortex-M23设计目的就是希望让硅晶面积最小,因此其指令集也是Cortex-M家族中最少的。
Cortex-M0 / M0+ / M1中有Thumb-1指令,不过没有ARMv7-M架构才加入的指令(CBZ, CBNZ, IT)。Cortex-M0 / M0+ / M1包括一小部分的Thumb-2指令(BL, DMB, DSB, ISB, MRS, MSR)。Cortex-M3 / M4 / M7 / M33 / M35P 有所有基本的Thumb-1和Thumb-2指令。Cortex-M3加上了三个Thumb-1指令、所有的Thumb-2指令、硬件的整体除法、以及饱和运算指令。Cortex-M4加上了数字信号处理(DSP)指令,以及可选的单精度浮点运算器(VFPv4-SP)。Cortex-M7加上了可选的双精度浮点运算器(VFPv5)[2][3]。Cortex-M23 / M33加上了TrustZone指令。
Arm Core | Cortex M0[5] |
Cortex M0+[6] |
Cortex M1[7] |
Cortex M3[8] |
Cortex M4[9] |
Cortex M7[10] |
Cortex M23[11] |
Cortex M33[12] |
Cortex M35P |
Cortex M55 |
---|---|---|---|---|---|---|---|---|---|---|
ARM架构 | ARMv6-M[2] | ARMv6-M[2] | ARMv6-M[2] | ARMv7-M[3] | ARMv7E-M[3] | ARMv7E-M[3] | ARMv8-M Baseline[15] |
ARMv8-M Mainline[15] |
ARMv8-M Mainline[15] |
Armv8.1-M |
计算机系统结构 | Von Neumann | Von Neumann | Von Neumann | Harvard | Harvard | Harvard | Von Neumann | Harvard | Harvard | Harvard |
指令流水线 | 3层 | 2层 | 3层 | 3层 | 3层 | 6层 | 2层 | 3层 | 3层 | 4到5层 |
Thumb-1指令 | 大部分 | 大部分 | 大部分 | 全部 | 全部 | 全部 | 大部分 | 全部 | 全部 | 全部 |
Thumb-2指令 | 部分 | 部分 | 部分 | 全部 | 全部 | 全部 | 部分 | 全部 | 全部 | 全部 |
乘法指令 32x32, 输出32-bit |
是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
乘法指令 32x32, 输出64-bit |
否 | 否 | 否 | 是 | 是 | 是 | 否 | 是 | 是 | 是 |
除法指令 32/32,商32-bit |
否 | 否 | 否 | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
饱和指令 | 否 | 否 | 否 | 部分 | 是 | 是 | 否 | 是 | 是 | 是 |
DSP指令 instructions | 否 | 否 | 否 | 否 | 是 | 是 | 否 | 可选 | 可选 | 可选 |
单精度浮点数(SP) 浮点运算指令 |
否 | 否 | 否 | 否 | 可选 | 可选 | 否 | 可选 | 可选 | 可选 |
双精度浮点数(DP) 浮点指令 |
否 | 否 | 否 | 否 | 否 | 可选 | 否 | 否 | 否 | 可选 |
半精度(HP) | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 可选 |
TrustZone指令 | 否 | 否 | 否 | 否 | 否 | 否 | 可选 | 可选 | 可选 | 可选 |
辅助处理器指令 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 可选 | 可选 | 可选 |
Helium技术 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 可选 |
中断延迟 (若用零等待状态的RAM) |
16 cycles | 15 cycles | 23 for NMI 26 for IRQ |
12 cycles | 12 cycles | 12 cycles | 15 no security ext 27 security ext |
TBD | TBD | TBD |
- 注:Cortex-M0/M0+/M1不包括以下16位的Thumb-1指令:CBZ, CBNZ, IT[2][3]。
- 注:Cortex-M0/M0+/M1只包括以下32位的Thumb-2指令:BL, DMB, DSB, ISB, MRS, MSR.[2][3]
- 注:Cortex-M0/M0+/M1/M23只有乘积结果为32位的乘法指令(32bit × 32bit = lower 32bit),而Cortex-M3/M4/M7/M33/M35P有32位相乘,结果为32位的乘法指令(32bit × 32bit = 64bit)。Cortex-M4/M7(M33/M35P可选)包括DSP乘法指令 (16bit × 16bit = 32bit)、(32bit × 16bit = upper 32bi)、(32bit × 32bit = upper 32bit)ref name="ARMv6-M-Manual"/>[3]
- 注:要计算完乘法及除法的周期数依ARM Cortex-M的核心设计而不同。有些核心有较快速度或是较小尺寸的硅智财选项,因此核心可能用较少的硅面积,但需要的周期数较长。在执行除法指令或慢速迭代乘法指令时发生的中断会让处理器放弃其指令,在中断结束后再继续。
- Cortex-M0/M0+/M23中,结果为32位的乘法可以选择是1个周期或是32个周期。Cortex-M1可以选择是3个周期或是33个周期。Cortex-M3/M4/M7/M33/M35P都是一个周期。.
- Cortex-M3中,结果为32位的乘法指令,可能是3–5个周期(视数值而定)。Cortex-M4/M7/M33/M35P是一个周期。
- Cortex-M3/M4的除法指令是2–12个周期(视数值而定)。Cortex-M7是3–20个周期(视数值而定)。Cortex-M23有17个周期或34个周期的选项。Cortex-M33是2–11个周期(视数值而定)。Cortex-M35P的资料还不确定。
- 注:Cortex-M4 / M7 / M33 / M35P有不含FPU的硅智财选项,或是单精度(SP)的FPU,Cortex-M7加上第三个硅智财选项,可以支持单精度以及双精度(DP)的FPU。若Cortex-M4 / M7 / M33 / M35P有FPU,其型号会是Cortex-M4F / Cortex-M7F / Cortex-M33F / Cortex-M35PF.[2][3]。
- 注:Cortex-M系列包括三个新的16位睡眠模式Thumb-1指令:SEV, WFE, WFI。
- 注:中断延迟周期计数假设
- 1.堆栈放在零等待状态RAM
- 2.没有在执行其他的中断
- 3.没有安全延伸机能选项(因为会增加周期)
- 注:哈佛架构的Cortex-M,其中断延迟周期计数会比较短。
Group | Instr bits |
Instructions | Cortex M0,M0+,M1 |
Cortex M3 |
Cortex M4 |
Cortex M7 |
Cortex M23 |
Cortex M33,M35P |
Cortex M55 |
---|---|---|---|---|---|---|---|---|---|
Thumb-1 | 16 | ADC, ADD, ADR, AND, ASR, B, BIC, BKPT, BLX, BX, CMN, CMP, CPS, EOR, LDM, LDR, LDRB, LDRH, LDRSB, LDRSH, LSL, LSR, MOV, MUL, MVN, NOP, ORR, POP, PUSH, REV, REV16, REVSH, ROR, RSB, SBC, SEV, STM, STR, STRB, STRH, SUB, SVC, SXTB, SXTH, TST, UXTB, UXTH, WFE, WFI, YIELD | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
Thumb-1 | 16 | CBNZ, CBZ | 否 | 是 | 是 | 是 | 是 | 是 | 是 |
Thumb-1 | 16 | IT | 否 | 是 | 是 | 是 | 否 | 是 | 是 |
Thumb-2 | 32 | BL, DMB, DSB, ISB, MRS, MSR | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
Thumb-2 | 32 | SDIV, UDIV | 否 | 是 | 是 | 是 | 是 | 是 | 是 |
Thumb-2 | 32 | ADC, ADD, ADR, AND, ASR, B, BFC, BFI, BIC, CDP, CLREX, CLZ, CMN, CMP, DBG, EOR, LDC, LDM, LDR, LDRB, LDRBT, LDRD, LDREX, LDREXB, LDREXH, LDRH, LDRHT, LDRSB, LDRSBT, LDRSH, LDRSHT, LDRT, LSL, LSR, MCR, MCRR, MLA, MLS, MOV, MOVT, MRC, MRRC, MUL, MVN, NOP, ORN, ORR, PLD, PLDW, PLI, POP, PUSH, RBIT, REV, REV16, REVSH, ROR, RRX, RSB, SBC, SBFX, SEV, SMLAL, SMULL, SSAT, STC, STM, STR, STRB, STRBT, STRD, STREX, STREXB, STREXH, STRH, STRHT, STRT, SUB, SXTB, SXTH, TBB, TBH, TEQ, TST, UBFX, UMLAL, UMULL, USAT, UXTB, UXTH, WFE, WFI, YIELD | 否 | 是 | 是 | 是 | 否 | 是 | 是 |
DSP | 32 | PKH, QADD, QADD16, QADD8, QASX, QDADD, QDSUB, QSAX, QSUB, QSUB16, QSUB8, SADD16, SADD8, SASX, SEL, SHADD16, SHADD8, SHASX, SHSAX, SHSUB16, SHSUB8, SMLABB, SMLABT, SMLATB, SMLATT, SMLAD, SMLALBB, SMLALBT, SMLALTB, SMLALTT, SMLALD, SMLAWB, SMLAWT, SMLSD, SMLSLD, SMMLA, SMMLS, SMMUL, SMUAD, SMULBB, SMULBT, SMULTT, SMULTB, SMULWT, SMULWB, SMUSD, SSAT16, SSAX, SSUB16, SSUB8, SXTAB, SXTAB16, SXTAH, SXTB16, UADD16, UADD8, UASX, UHADD16, UHADD8, UHASX, UHSAX, UHSUB16, UHSUB8, UMAAL, UQADD16, UQADD8, UQASX, UQSAX, UQSUB16, UQSUB8, USAD8, USADA8, USAT16, USAX, USUB16, USUB8, UXTAB, UXTAB16, UXTAH, UXTB16 | 否 | 否 | 是 | 是 | 否 | 可选 | 是 |
单精度浮点数 | 32 | VABS, VADD, VCMP, VCMPE, VCVT, VCVTR, VDIV, VLDM, VLDR, VMLA, VMLS, VMOV, VMRS, VMSR, VMUL, VNEG, VNMLA, VNMLS, VNMUL, VPOP, VPUSH, VSQRT, VSTM, VSTR, VSUB | 否 | 否 | 可选 | 可选 | 否 | 可选 | 可选 |
双精度浮点数 | 32 | VCVTA, VCVTM, VCVTN, VCVTP, VMAXNM, VMINNM, VRINTA, VRINTM, VRINTN, VRINTP, VRINTR, VRINTX, VRINTZ, VSEL | 否 | 否 | 否 | 可选 | 否 | 否 | 可选 |
TrustZone | 16 | BLXNS, BXNS | 否 | 否 | 否 | 否 | 可选 | 可选 | 可选 |
TrustZone | 32 | SG, TT, TTT, TTA, TTAT | 否 | 否 | 否 | 否 | 可选 | 可选 | 可选 |
辅助处理器 | 16 | CDP, CDP2, MCR, MCR2, MCRR, MCRR2, MRC, MRC2, MRRC, MRRC2 | 否 | 否 | 否 | 否 | 否 | 可选 | 可选 |
- 注:针对Cortex-M4 / M7 / M33 / M35P,单精度(SP)浮点运算器指令只有在硅智财中有SP FPU选项时才有效。
- 注:针对Cortex-M7,双精度(DP)浮点运算器指令只有在硅智财中有DP FPU选项时才有效。
停用机能
编辑ARM Cortex-M系列的ARM架构,已停用一些早期核心的穖能[2][3]:
- Cortex-M核心中没有32位的ARM指令集。
- 字节序在硅智财实现时就需要决定。早期的核心允许依MCU资料字节序模式设置而调整。
- Cortex-M核心不支持辅助处理器,一直到ARM Cortex-M33/M35P核心的ARMv8-M Mainline才重新支持此一选项。
32位ARM指令的能力和Thumb-1和Thumb-2指令集有很多地方重叠了,不过有些ARM的特征找不到类似的特性。
- SWP和SWPB(swap)ARM架构在Cortex-M中没有类似的架构。
16位Thumb-1指令集最早是出现在早期ARMv4T架构的ARM7T核心,随着时代而演进。在ARMv5 / ARMv6 / ARMv6T2 架构问世时,Thumb-1指令集也有扩展。不过也有移除一些Thumb-1指令。
- 不存在BLX <immediate>指令,此指令是用来从Thumb-1切换到ARM的指令集。BLX <register>指令在Cortex-M系列仍然支持。
- 不存在SETEND指令,因为不允许在执行时切换字节序。
- 不支持辅助处理器指令,一直到ARM Cortex-M33/M35P核心的ARMv8-M Mainline才重新支持此些指令。
- SWI指令更名为SVC,虽二进制码相同。不过SVC的处理程序和SWI的处理程序在例外模式的处理上差很多。
Cortex-M0
编辑微架构 | ARMv6-M |
---|---|
指令集架构 | Thumb-1(大部分) Thumb-2(少数) |
Cortex-M0核心是依小硅芯片面积以及最低价芯片进行优化的核心。
Cortex-M0核心的主要特点有[5]:
- ARMv6-M架构[2]
- 三层流水线
- 指令集:
- Thumb-1(大部分),但没有CBZ, CBNZ, IT
- Thumb-2(少部分),只有BL, DMB, DSB, ISB, MRS, MSR
- 32-bit硬件整数乘法,结果也是32-bit
- 1到32个中断,以及不可遮罩中断
硅智财选项:
- 硬件整数乘法速度:1周期或32周期。
Cortex-M0+
编辑微架构 | ARMv6-M |
---|---|
指令集架构 | Thumb-1 (most), Thumb-2 (some) |
Cortex-M0+是以Cortex-M0再进行优化的版本。Cortex-M0+支持所有Cortex-M0的指令,因此可以用相同的编译器以及调试工具。Cortex-M0+的流水线由三层变成二层,因此耗能较少。除了Cortex-M0已有的调试功能外,Cortex-M0+增加了称为微追踪缓冲器(Micro Trace Buffer、MTB)的选项,有简易的指令追踪缓冲器。Cortex-M0+也有加入Cortex-M3和Cortex-M4的一些特点,是以硅智财选项的方式加入,例如存储器保护单元(MPU),以及中断向量表重新定位[6]。
Cortex-M0+核心的主要特点有[6]:
- ARMv6-M架构[2]
- 二层流水线(比Cortex-M0少一层)
- 指令集(和Cortex-M0)相同
- Thumb-1(大部分),但没有CBZ, CBNZ, IT
- Thumb-2(少部分),只有BL, DMB, DSB, ISB, MRS, MSR
- 32-bit硬件整数乘法,结果也是32-bit
- 1到32个中断,以及不可遮罩中断
硅智财选项:
- 硬件整数乘法速度:1周期或32周期。
- 八个区块的存储器保护单元(MPU)(和M3、M4相同)
- 中断向量表重新定位(和M3、M4相同)
- 单一周期的I/O端口(在M0+/M23上有此机能)
- 微追踪缓冲器(Micro Trace Buffer、MTB)(在M0+/M23/M33/M35P上有此机能)
Cortex-M1
编辑微架构 | ARMv6-M |
---|---|
指令集架构 | Thumb-1 (most), Thumb-2 (some) |
The Cortex-M1是特别设计可以放入FPGA芯片的内核。
Cortex-M1内核的主要特点有[7]:
- ARMv6-M架构[2]
- 二层流水线
- 指令集
- Thumb-1(大部分),但没有CBZ, CBNZ, IT.
- Thumb-2(少部分),只有BL, DMB, DSB, ISB, MRS, MSR.
- 32-bit硬件整数乘法,结果也是32-bit
- 1到32个中断,以及不可遮罩中断
硅智财选项:
- 硬件整数乘法速度:3或33周期。
- 选配的紧密耦合存储器(TCM)0 to 1 MB 指令TCM,0 to 1 MB 资料TCM,都可以选择要不要ECC.
- 外部中断:0, 1, 8, 16, 32.
- 调试模式:无,简易功能,完整
- 字节序:little-endian或BE-8 big-endian.
- 操作系统延伸:可以选择
Cortex-M3
编辑微架构 | ARMv7-M |
---|---|
指令集架构 | Thumb-1, Thumb-2, 饱和运算(部分),除法 |
- ARMv7-M架构[3]:
- 三层流水线以及分支预测
- 指令集:
- Thumb-1(完整)
- Thumb-2(完整)
- 32-bit硬件整数乘法,结果可以是32-bit或64-bit,有号或无号,在乘法后允许加法或减法。32-bit乘法是一个周期,64-bit乘法和乘积累加(MAC)需要的周期较多
- 32-bit硬件整数除法(2–12周期)
- 支持饱和运算
- 12个周期的中断延迟
- 集成休眠模式
硅智财选项:
- 可选的存储器保护单元(MPU):0个区或8个区
Cortex-M4
编辑微架构 | ARMv7E-M |
---|---|
指令集架构 | Thumb-1, Thumb-2, 饱和运算, 数字信号处理, 除法、浮点运算器(SP) |
在概念上,Cortex-M4是Cortex-M3加上数字信号处理(DSP)指令、可选的浮点运算器。若有浮点运算器,会称为Cortex-M4F。
Cortex-M4内核的主要特点有[9]:
- ARMv7E-M架构[3]
- 三层流水线以及分支预测
- 指令集:
- 12个周期的中断延迟
- 集成休眠模式
硅智财选项:
- 可选的浮点运算器(FPU):只有单精度IEEE-754的,称为FPv4-SP延伸
- 可选的存储器保护单元(MPU):0个区或8个区
Cortex-M7
编辑微架构 | ARMv7E-M |
---|---|
指令集架构 | Thumb-1, Thumb-2, 饱和运算, 数字信号处理, 除法、浮点运算器(SP、DP) |
Cortex-M7是高性能的内核,其运算性能是Cortex-M4的二倍。其中包括六层的超标量流水线有分支预测,有可选的单精度浮点运算器或双精度浮点运算器[18][19]。指令集以及资料总线已由32-bit宽度增加到64-bit宽度。若内核中有FPU,会称为Cortex-M7F,不然会称为Cortex-M7。
Cortex-M7内核的主要特点有[10]:
- ARMv7E-M架构
- 6阶流水线以及分支预测。在ARM Cortex-M内核中是最多的。
- 指令集:
- 1至240个中断,以及不可遮罩中断
- 12个周期的中断延迟
- 集成休眠模式
硅智财选项:
Cortex-M23
编辑微架构 | ARMv8-M Baseline |
---|---|
指令集架构 | Thumb-1 (most), Thumb-2 (some), 除法、TrustZone |
Cortex-M23内核在2016年10月上市[20],以2015年11月发布的ARMv8-M架构为基础[21]。在概念上Cortex-M23类似Cortex-M0+,加上整数除法指令、TrustZone安全特性、也是二层流水线。
- ARMv8-M基线架构[15]
- 二层流水线(类似Cortex-M0+)
- TrustZone安全指令(只有在M23/M33/M35P)
- 32-bit硬件整数除法(17 或 34 周期)(M0/M0+/M1没有)
- 堆栈边界限制(只有在SAU选项开启时才有)(M23/M33/M35P才有)
硅智财选项:
- 硬件整数乘法速度:1周期或32周期。
- 硬件整数除法速度:最长17周期或34周期,依除数而定,指令有可能会提早完成。
- 可选的存储器保护单元(MPU):0, 4, 8, 12, 16个区块
- 可选的安全属性单元(SAU):0, 4, 8个区块
- 单一周期的I/O端口(在M0+/M23上有此机能)
- 微追踪缓冲器(Micro Trace Buffer、MTB)(在M0+/M23/M33/M35P上有此机能)
Cortex-M33
编辑微架构 | ARMv8-M Mainline |
---|---|
指令集架构 | Thumb-1, Thumb-2, 饱和运算、数字信号处理 除法、浮点运算器(SP) TrustZone、协处理器 |
Cortex-M33内核是在2016年10月发布[20],是以2015年11月发布的ARMv8-M架构为基础[21]。概念上类似Cortex-M4和Cortex-M23的交集,也有三阶的指令管道。
- ARMv8-M架构[15]:
- 三阶管道
- TrustZone安全指令(只有在M23/M33/M35P才有)
- 32-bit硬件整数除法(最长11个周期)(M0/M0+/M1无此选项)
- 堆栈边界限制(只有在SAU选项开启时才有)(M23/M33/M35P才有)
硅智财选项:
- 可选的浮点运算器(FPU):只有单精度IEEE-754的,称为FPv5延伸
- 可选的存储器保护单元(MPU):0, 4, 8, 12, 16个区块
- 可选的安全属性单元(SAU):0, 4, 8个区块
- 微追踪缓冲器(Micro Trace Buffer、MTB)(在M0+/M23/M33/M35P上有此机能)
Cortex-M35P
编辑微架构 | ARMv8-M Mainline |
---|---|
指令集架构 | Thumb-1, Thumb-2, 饱和运算、数字信号处理 除法、浮点运算器(SP) TrustZone、协处理器 |
Cortex-M35P内核是在2018年5月发布的,在概念上是Cortex-M33内核加上新的指令集,以及来自ARM SecurCore系列,新的防篡改硬件、可选的同比特以及ECC功能[22]。
目前此芯片的公开资料不多,只有技术参考手册。到2020年2月为止,尚未看到各厂商推出此系列的微处理器。
Cortex-M55
编辑微架构 | ARMv8.1-M Mainline Helium |
---|---|
指令集架构 | Thumb-1, Thumb-2, Saturated, 数字信号处理, 除法, 浮点运算器(VFPv5), TrustZone, 协处理器, MVE |
Cortex-M55是在2020年2月发布,是以2019年2月发布的Armv8.1-M架构为基础,有四阶指令管道。
Cortex-M55核心的主要特点有:
- ARMv8.1-M Mainline/Helium内核[15]
- 四阶管道
- 堆栈边界限制(只有在SAU选项开启时才有)
硅智财选项:
- Helium (M-Profile Vector Extension, MVE)
- 单精度和双精度的浮点运算器
- 可选的DSP延伸
- 可选的TrustZone安全延伸
- 支持RAS(Safety and reliability)功能
- 支持协处理器
- 区分安全区和非安全区的MPU,可以分为0, 4, 8, 12或16个区
- 安全属性单元可以分为0, 4或8个区
- 指令缓存,大小可以设置为4KB, 8KB, 16KB, 32KB, 64KB
- 资料缓存,大小可以设置为4KB, 8KB, 16KB, 32KB, 64KB
- 缓存及TCM支持ECC
- 1–480个中断
- 3–8个例外优先比特
- 内部和外部的唤醒中断控制器(WIC)选项,可选的CTI, ITM及DWT
- ARM客制指令(未来发布的版本中会支持)
文件
编辑ARM芯片的文件很多。 过去八比特的微处理器只有一份文件,不过随着微处理器的进步,许多功能都需要支持。ARM芯片的文件包一般会包括IC制造商以及CPU内核供应商(Arm)的文件。
典型的文件结构如下:
- 文件树(从上到下)
- IC制造商网页
- IC制造商宣传投影片
- IC制造商实际芯片的数据表
- IC制造商该芯片家族的参考手册,其中有常用周边以及特点
- ARM内核网站
- ARM内核通用使用手册
- ARM内核技术参考手册
- ARM架构参考手册
IC制造商可能会有其他资料,例如开发板使用手册、应用指南、快速手册、软件函数库文件、已知问题等。
参考资料
编辑- ^ ARM Cortex-M website; arm.com. [2020-09-22]. (原始内容存档于2018-07-27).
- ^ 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 2.12 2.13 2.14 2.15 2.16 ARMv6-M Architecture Reference Manual; Arm Holdings.
- ^ 3.00 3.01 3.02 3.03 3.04 3.05 3.06 3.07 3.08 3.09 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 ARMv7-M Architecture Reference Manual; Arm Holdings.
- ^ 4.0 4.1 4.2 4.3 Cortex-M3 Embedded Software Development; App Note 179; Arm Holdings. (PDF). [2020-10-01]. (原始内容存档 (PDF)于2020-06-19).
- ^ 5.0 5.1 5.2 Cortex-M0 r0p0 Technical Reference Manual; Arm Holdings. (PDF). [2020-11-30]. (原始内容存档 (PDF)于2020-06-22).
- ^ 6.0 6.1 6.2 6.3 Cortex-M0+ r0p0 Technical Reference Manual; Arm Holdings. (PDF). [2020-11-30]. (原始内容存档 (PDF)于2020-06-19).
- ^ 7.0 7.1 7.2 Cortex-M1 r1p0 Technical Reference Manual; Arm Holdings. (PDF). [2020-12-09]. (原始内容存档 (PDF)于2020-06-19).
- ^ 8.0 8.1 8.2 Cortex-M3 r2p1 Technical Reference Manual; Arm Holdings. (PDF). [2020-12-09]. (原始内容存档 (PDF)于2015-02-16).
- ^ 9.0 9.1 9.2 Cortex-M4 r0p1 Technical Reference Manual; Arm Holdings. (PDF). [2020-12-09]. (原始内容存档 (PDF)于2015-02-16).
- ^ 10.0 10.1 10.2 Cortex-M7 r0p2 Technical Reference Manual; Arm Holdings. (PDF). [2020-12-09]. (原始内容存档 (PDF)于2020-06-19).
- ^ 11.0 11.1 11.2 Cortex-M23 r1p0 Technical Reference Manual; Arm Holdings. (PDF). [2020-12-09]. (原始内容存档 (PDF)于2020-06-20).
- ^ 12.0 12.1 12.2 Cortex-M33 r0p3 Technical Reference Manual; Arm Holdings. (PDF). [2020-12-09]. (原始内容存档 (PDF)于2020-06-19).
- ^ 13.0 13.1 13.2 Cortex-M System Design Kit; Arm Holdings.. [2020-10-01]. (原始内容存档于2017-03-16).
- ^ 14.00 14.01 14.02 14.03 14.04 14.05 14.06 14.07 14.08 14.09 ARM Cortex-M Programming Guide to Memory Barrier Instructions; Section 3.6 System implementation requirements; AppNote 321; arm.com. [2021-01-26]. (原始内容存档于2020-01-26).
- ^ 15.0 15.1 15.2 15.3 15.4 15.5 15.6 ARMv8-M Architecture Reference Manual; Arm Holdings.. [2020-10-20]. (原始内容存档于2020-06-20).
- ^ ARMv8.1-M Architecture Reference Manual; Arm Holdings.. [2020-10-06]. (原始内容存档于2020-06-29).
- ^ Sadasivan, Shyam. An Introduction to the ARM Cortex-M3 Processor (PDF). Arm Holdings. [2020-12-09]. (原始内容 (PDF)存档于2014-07-26).
- ^ Cortex-M7 Processor. Arm Holdings. [2014-09-24]. (原始内容存档于2017-03-16).
- ^ ARM Supercharges MCU Market with High Performance Cortex-M7 Processor. arm.com (新闻稿). September 24, 2014 [2020-12-09]. (原始内容存档于2018-07-16).
- ^ 20.0 20.1 20.2 20.3 New ARM Cortex-M processors offer the next industry standard for secure IoT; Arm Holdings; October 25, 2016. (PDF). [2020-12-09]. (原始内容存档 (PDF)于2017-12-01).
- ^ 21.0 21.1 ARMv8-M Architecture Simplifies Security for Smart Embedded Devices; Arm Holdings; November 10, 2015.. [2020-12-09]. (原始内容存档于2019-01-01).
- ^ Cortex-M35P Processor. Arm Holdings. [2018-06-04]. (原始内容存档于2018-06-22).
延伸阅读
编辑- Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C; 3rd Ed; Yifeng Zhu; 738 pages; 2017; ISBN 978-0982692660.
- Designer's Guide to the Cortex-M Processor Family; 2nd Ed; Trevor Martin; 490 pages; 2016; ISBN 978-0081006290.
- ARM Assembly for Embedded Applications; 3rd Ed; Daniel Lewis; 318 pages; 2017; ISBN 978-1543908046.
- Definitive Guide to the ARM Cortex-M0 and Cortex-M0+ Processors; 2nd Ed; Joseph Yiu; 784 pages; 2015; ISBN 978-0128032770.
- Definitive Guide to the ARM Cortex-M3 and Cortex-M4 Processors; 3rd Ed; Joseph Yiu; 600 pages; 2013; ISBN 978-0124080829.
- Digital Signal Processing and Applications Using the ARM Cortex-M4; 1st Ed; Donald Reay; 250 pages; 2014; ISBN 978-1118859049.
- Embedded Systems: Introduction to ARM Cortex-M Microcontrollers; 5th Ed; Jonathan Valvano; 506 pages; 2012; ISBN 978-1477508992.
- Assembly Language Programming: ARM Cortex-M3; 1st Ed; Vincent Mahout; 256 pages; 2012; ISBN 978-1848213296.