Remove ads
来自维基百科,自由的百科全书
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是核心编号。
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核心的部份选配机能如下:
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-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 |
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 | 否 | 否 | 否 | 否 | 否 | 可选 | 可选 |
ARM Cortex-M系列的ARM架构,已停用一些早期核心的穖能[2][3]:
32位元ARM指令的能力和Thumb-1和Thumb-2指令集有很多地方重叠了,不过有些ARM的特征找不到类似的特性。
16位元Thumb-1指令集最早是出现在早期ARMv4T架构的ARM7T核心,随著时代而演进。在ARMv5 / ARMv6 / ARMv6T2 架构问世时,Thumb-1指令集也有扩充。不过也有移除一些Thumb-1指令。
Cortex-M0核心是依小矽晶元面积以及最低价晶片进行最佳化的核心。
Cortex-M0核心的主要特点有[5]:
矽智财选项:
微架构 | 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 |
---|---|
指令集架构 | Thumb-1 (most), Thumb-2 (some) |
The Cortex-M1是特别设计可以放入FPGA晶片的内核。
Cortex-M1内核的主要特点有[7]:
矽智财选项:
矽智财选项:
在概念上,Cortex-M4是Cortex-M3加上数位信号处理(DSP)指令、可选的浮点运算器。若有浮点运算器,会称为Cortex-M4F。
Cortex-M4内核的主要特点有[9]:
矽智财选项:
Cortex-M7是高性能的内核,其运算效能是Cortex-M4的二倍。其中包括六层的超纯量管线有分支预测,有可选的单精度浮点运算器或双精度浮点运算器[18][19]。指令集以及资料汇流排已由32-bit宽度增加到64-bit宽度。若内核中有FPU,会称为Cortex-M7F,不然会称为Cortex-M7。
Cortex-M7内核的主要特点有[10]:
矽智财选项:
微架构 | 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安全特性、也是二层管线。
矽智财选项:
Cortex-M33内核是在2016年10月发布[20],是以2015年11月发布的ARMv8-M架构为基础[21]。概念上类似Cortex-M4和Cortex-M23的交集,也有三阶的指令管道。
矽智财选项:
Cortex-M35P内核是在2018年5月发布的,在概念上是Cortex-M33内核加上新的指令集,以及来自ARM SecurCore系列,新的防篡改硬体、可选的同位元以及ECC功能[22]。
目前此晶片的公开资料不多,只有技术参考手册。到2020年2月为止,尚未看到各厂商推出此系列的微处理器。
Cortex-M55是在2020年2月发布,是以2019年2月发布的Armv8.1-M架构为基础,有四阶指令管道。
Cortex-M55核心的主要特点有:
矽智财选项:
ARM晶片的文件很多。 过去八位元的微处理器只有一份文件,不过随著微处理器的进步,许多功能都需要支援。ARM晶片的文件包一般会包括IC制造商以及CPU内核供应商(Arm)的文件。
典型的文件结构如下:
IC制造商可能会有其他资料,例如开发板使用手册、应用指南、快速手册、软体函式库文件、已知问题等。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.