国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

ARM Cortex-M處理器入門(mén):ARM Cortex-M 處理器家族介紹和比較

發(fā)布時(shí)間:2017-4-19 14:42    發(fā)布者:eechina
關(guān)鍵詞: Cortex-M , ARM
作者:Joseph Yiu, 高級(jí)嵌入式技術(shù)經(jīng)理, ARM
William Gao, ARM 中國(guó)應(yīng)用工程師與Gabriel Wang,ARM中國(guó)嵌入式應(yīng)用工程師對(duì)于本文中文版亦有幫助

概要

ARM Cortex-M處理器家族現(xiàn)在有8款處理器成員。在本文中,我們會(huì)比較Cortex-M系列處理器之間的產(chǎn)品特性,重點(diǎn)講述如何根據(jù)產(chǎn)品應(yīng)用選擇正確的Cortex-M處理器。本文中會(huì)詳細(xì)的對(duì)照Cortex-M 系列處理器的指令集和高級(jí)中斷處理能力,以及 SoC系統(tǒng)級(jí)特性,調(diào)試和追蹤功能和性能的比較。

1    簡(jiǎn)介

今天, ARM Cortex-M 處理器家族有8款處理器成員。除此之外,ARM的產(chǎn)品系列還有很多其他的處理器成員。對(duì)很多初學(xué)者,甚至某些芯片設(shè)計(jì)經(jīng)驗(yàn)豐富但是不熟悉ARM系列處理器的設(shè)計(jì)者來(lái)說(shuō),也是很容易混淆這些產(chǎn)品的。不同的ARM 處理器有不同的指令集,系統(tǒng)功能和性能。本文會(huì)深入展現(xiàn)Cortex-M系列處理器之間的關(guān)鍵區(qū)別,以及它們和ARM其他系列處理器的不同。


1.1    ARM處理器家族

多年來(lái), ARM已經(jīng)研發(fā)了相當(dāng)多的不同的處理器產(chǎn)品。 如下圖中(圖1): ARM 處理器產(chǎn)品分為經(jīng)典ARM處理器系列和最新的Cortex處理器系列。并且根據(jù)應(yīng)用范圍的不同,ARM處理器可以分類(lèi)成3個(gè)系列。

Application Processors(應(yīng)用處理器)–面向移動(dòng)計(jì)算,智能手機(jī),服務(wù)器等市場(chǎng)的的高端處理器。這類(lèi)處理器運(yùn)行在很高的時(shí)鐘頻率(超過(guò)1GHz),支持像LinuxAndroid,MS Windows和移動(dòng)操作系統(tǒng)等完整操作系統(tǒng)需要的內(nèi)存管理單元(MMU)。 如果規(guī)劃開(kāi)發(fā)的產(chǎn)品需要運(yùn)行上述其中的一個(gè)操作系統(tǒng),你需要選擇ARM 應(yīng)用處理器.

Real-time Processors (實(shí)時(shí)處理器)–面向?qū)崟r(shí)應(yīng)用的高性能處理器系列,例如硬盤(pán)控制器,汽車(chē)傳動(dòng)系統(tǒng)和無(wú)線通訊的基帶控制。多數(shù)實(shí)時(shí)處理器不支持MMU,不過(guò)通常具有MPU、Cache和其他針對(duì)工業(yè)應(yīng)用設(shè)計(jì)的存儲(chǔ)器功能。實(shí)時(shí)處理器運(yùn)行在比較高的時(shí)鐘頻率(例如200MHz 到 >1GHz ),響應(yīng)延遲非常低。雖然實(shí)時(shí)處理器不能運(yùn)行完整版本的Linux和Windows操作系統(tǒng), 但是支持大量的實(shí)時(shí)操作系統(tǒng)(RTOS)。

Microcontroller Processors(微控制器處理器)–微控制器處理器通常設(shè)計(jì)成面積很小和能效比很高。通常這些處理器的流水線很短,最高時(shí)鐘頻率很低(雖然市場(chǎng)上有此類(lèi)的處理器可以運(yùn)行在200Mhz之上)。 并且,新的Cortex-M處理器家族設(shè)計(jì)的非常容易使用。因此,ARM 微控制器處理器在單片機(jī)和深度嵌入式系統(tǒng)市場(chǎng)非常成功和受歡迎。


圖 1: 處理器家族

表1總結(jié)了三個(gè)處理器系列的主要特征。

 Application  processorsReal-time  processorsMicrocontroller  processors
設(shè)計(jì)特點(diǎn)高時(shí)鐘頻率,長(zhǎng)流水線,高性能,對(duì)媒體處理支持(NEON指令集擴(kuò)展) 高時(shí)鐘頻率,較長(zhǎng)的流水線,高確定性(中斷延遲低)通常較短的流水線,超低功耗
,
系統(tǒng)特性內(nèi)存管理單元 (MMU),  cache memory,內(nèi)存保護(hù)單元 (MPU), cache memory, 緊耦合內(nèi)存 (TCM)內(nèi)存保護(hù)單元(MPU), 嵌套向量中斷控制器 (NVIC), 喚醒中斷控制器 (WIC), 最新ARM TrustZone® 安全擴(kuò)展.
ARM TrustZone® 安全擴(kuò)展
目標(biāo)市場(chǎng)移動(dòng)計(jì)算,智能手機(jī),高能效服務(wù)器,高端微處理器工業(yè)微控制器,汽車(chē)電子,硬盤(pán)控制器,基帶微控制器,深度嵌入系統(tǒng)(例如,傳感器MEMS,混合信號(hào)IC,  IoT)
表 1: 處理器特性總結(jié)

1.2    Cortex-M 處理器家族

Cortex-M處理器家族更多的集中在低性能端,但是這些處理器相比于許多微控制器使用的傳統(tǒng)處理器性能仍然很強(qiáng)大。例如,Cortex-M4和Cortex-M7處理器應(yīng)用在許多高性能的微控制器產(chǎn)品中,最大的時(shí)鐘頻率可以達(dá)到400Mhz。

當(dāng)然,性能不是選擇處理器的唯一指標(biāo)。在許多應(yīng)用中,低功耗和成本是關(guān)鍵的選擇指標(biāo)。因此,Cortex-M處理器家族包含各種產(chǎn)品來(lái)滿(mǎn)足不同的需求:

處理器描述
Cortex-M0面向低成本,超低功耗的微控制器和深度嵌入應(yīng)用的非常小的處理器(最小12K門(mén)電路
Cortex-M0+針對(duì)小型嵌入式系統(tǒng)的最高能效的處理器,與Cortex-M0處理器接近的尺寸大小和編程模式,但是具有擴(kuò)展功能,如單周期I/O接口和向量表重定位功能
Cortex-M1針對(duì)FPGA設(shè)計(jì)優(yōu)化的小處理器,利用FPGA上的存儲(chǔ)器塊實(shí)現(xiàn)了緊耦合內(nèi)存(TCM)。和Cortex-M0有相同的指令集
Cortex-M3針對(duì)低功耗微控制器設(shè)計(jì)的處理器,面積小但是性能強(qiáng)勁,支持可以處理器快速處理復(fù)雜任務(wù)的豐富指令集。具有硬件除法器和乘加指令(MAC).并且,M3支持全面的調(diào)試和跟蹤功能,使軟件開(kāi)發(fā)者可以快速的開(kāi)發(fā)他們的應(yīng)用
Cortex-M4不但具備Cortex-M3的所有功能,并且擴(kuò)展了面向數(shù)字信號(hào)處理(DSP)的指令集,比如單指令多數(shù)據(jù)指令(SMID)和更快的單周期MAC操作。此外,它還有一個(gè)可選的支持IEEE754浮點(diǎn)標(biāo)準(zhǔn)的單精度浮點(diǎn)運(yùn)算單元
Cortex-M7針對(duì)高端微控制器和數(shù)據(jù)處理密集的應(yīng)用開(kāi)發(fā)的高性能處理器。具備Cortex-M4支持的所有指令功能,擴(kuò)展支持雙精度浮點(diǎn)運(yùn)算,并且具備擴(kuò)展的存儲(chǔ)器功能,例如Cache和緊耦合存儲(chǔ)器(TCM)
Cortex-M23面向超低功耗,低成本應(yīng)用設(shè)計(jì)的小尺寸處理器,和Cortex-M0相似,但是支持各種增強(qiáng)的指令集和系統(tǒng)層面的功能特性。M23還支持TrustZone安全擴(kuò)展
Cortex-M33主流的處理器設(shè)計(jì),與之前的Cortex-M3和Cortex-M4處理器類(lèi)似,但系統(tǒng)設(shè)計(jì)更靈活,能耗比更高效,性能更高。M33還支持TrustZone安全擴(kuò)展
表 2: Cortex-M 處理器家族

不同于老的經(jīng)典ARM處理器(例如,ARM7TDMI, ARM9), Cortex-M處理器有一個(gè)非常不同的架構(gòu)。例如:
-    僅支持ARM Thumb®指令,已擴(kuò)展到同時(shí)支持16位和32位指令Thumb-2版本
-    內(nèi)置的嵌套向量中斷控制負(fù)責(zé)中斷處理,自動(dòng)處理中斷優(yōu)先級(jí),中斷屏蔽,中斷嵌套和系統(tǒng)異常處理。
-    中斷處理函數(shù)可以使用標(biāo)準(zhǔn)的C語(yǔ)言編程,嵌套中斷處理機(jī)制避免了使用軟件判斷哪一個(gè)中斷需要響應(yīng)處理。同時(shí),中斷響應(yīng)速度是確定性的,低延遲的
-    向量表從跳轉(zhuǎn)指令變?yōu)橹袛嗪拖到y(tǒng)異常處理函數(shù)的起始地址。
-    寄存器組和某些編程模式也做了改變。

這些變化意味著許多為經(jīng)典ARM處理器編寫(xiě)的匯編代碼需要修改,老的項(xiàng)目需要修改和重新編譯才能遷移到Cortex-M的產(chǎn)品上。軟件移植具體的細(xì)節(jié)記錄在ARM文檔:

ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers
http://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf

1.3    Cortex-M系列處理器的共同特性

Cortex-M0, M0+, M3, M4 and M7之間有很多的相似之處,例如:
-    基本編程模型  (章節(jié) 3.1)
-    嵌套向量中斷控制器(NVIC)的中斷響應(yīng)管理
-    架構(gòu)設(shè)計(jì)的休眠模式:睡眠模式和深度睡眠模式 (章節(jié) 4.1)
-    操作系統(tǒng)支持特性 (章節(jié) 3.3)
-    調(diào)試功能 (章節(jié) 6)
-    易用性

例如,嵌套向量中斷控制器是內(nèi)置的中斷控制器


圖 2: Cortex-M處理器的嵌套向量中斷控制器

支持許多外圍設(shè)備的中斷輸入,一個(gè)不可屏蔽的中斷請(qǐng)求,一個(gè)來(lái)自?xún)?nèi)置時(shí)鐘(SysTick)的中斷請(qǐng)求(見(jiàn)章節(jié) 3.3)和一定數(shù)量的系統(tǒng)異常請(qǐng)求。NVIC處理這些中斷和異常的優(yōu)先級(jí)和屏蔽管理。

NVIC以及異常處理模型的更多的內(nèi)容在章節(jié)3.2描述。其他Cortex-M處理器間的異同點(diǎn)會(huì)在本文的其余部分講解。

2    Cortex-M處理器指令集

2.1    指令集簡(jiǎn)介

大多數(shù)情況下,應(yīng)用程序代碼可以用C或其他高級(jí)語(yǔ)言編寫(xiě)。但是,對(duì)Cortex-M 處理器支持指令集的基本了解有助于開(kāi)發(fā)者針對(duì)具體應(yīng)用選擇合適的Cortex-M處理器。指令集(ISA)是處理器架構(gòu)的一部分,Cortex-M處理器可以分為幾個(gè)架構(gòu)規(guī)范

架構(gòu)描述
ARMv6-MCortex-M0,  Cortex-M0+ 和 Cortex-M1支持的架構(gòu)
ARMv7-MCortex-M3,  Cortex-M4 和 Cortex-M7支持的架構(gòu).ARMv7-M擴(kuò)展的DSP類(lèi)型指令(SMID)也被稱(chēng)為ARMv7E-M.
ARMv8-M這個(gè)架構(gòu)進(jìn)一步分為:
Baseline子規(guī)范–  Cortex-M23對(duì)應(yīng)的架構(gòu)
Mainline子規(guī)范–  Cortex-M33對(duì)應(yīng)的架構(gòu)
For more  information about ARMv8-M architecture, please see in  ARMv8-M關(guān)于ARMv8-M架構(gòu)的更多信息,請(qǐng)參見(jiàn)ARMv8-M 的ARMv8-M Architecture Technical Overview  [url]https://community.arm.com/docs/DOC-10896[/url]
表 3: Cortex-M 處理器ARM架構(gòu)規(guī)范的規(guī)范

所有的Cortex-M 處理器都支持Thumb指令集。整套Thumb指令集擴(kuò)展到Thumb-2版本時(shí)變得相當(dāng)大。但是,不同的Cortex-M處理器支持不同的Thumb 指令集的子集,如圖3所示




圖 3: Cortex-M 處理器的指令集

2.2    Cortex-M0/M0+/M1指令集

Cortex-M0/M0+/M1處理器基于ARMv6-M架構(gòu)。這是一個(gè)只支持56條指令的小指令集,大部分指令是16位指令,如圖3所示只占很小的一部分。但是,此類(lèi)處理器中的寄存器和處理的數(shù)據(jù)長(zhǎng)度是32位的。對(duì)于大多數(shù)簡(jiǎn)單的I/O控制任務(wù)和普通的數(shù)據(jù)處理,這些指令已經(jīng)足夠了。這么小的指令集可以用很少的電路門(mén)數(shù)來(lái)實(shí)現(xiàn)處理器設(shè)計(jì),Cortex-M0 和 Cortex-M0+最小配置僅僅12K門(mén)。然而,其中的很多指令無(wú)法使用高位寄存器(R8 到R12), 并且生成立即數(shù)的能力有限。這是平衡了超低功耗和性能需求的結(jié)果。

2.3    Cortex-M3指令集

Cortex-M3處理器是基于ARMv7-M架構(gòu)的處理器,支持更豐富的指令集,包括許多32位指令,這些指令可以高效的使用高位寄存器。另外,M3還支持:
•    查表跳轉(zhuǎn)指令和條件執(zhí)行(使用IT指令)
•    硬件除法指令
•    乘加指令(MAC)
•    各種位操作指令

更豐富的指令集通過(guò)幾種途徑來(lái)增強(qiáng)性能;例如,32位Thumb指令支持了更大范圍的立即數(shù),跳轉(zhuǎn)偏移和內(nèi)存數(shù)據(jù)范圍的地址偏移。支持基本的DSP操作(例如,支持若干條需要多個(gè)時(shí)鐘周期執(zhí)行的MAC指令,還有飽和運(yùn)算指令)。最后,這些32位指令允許用單個(gè)指令對(duì)多個(gè)數(shù)據(jù)一起做桶型移位操作。

支持更豐富的指令導(dǎo)致了更大的面積成本和更高的功耗。典型的微控制器,Cortex-M3的電路門(mén)數(shù)是Cortex-M0 和 Cortex-M0+兩倍還多。但是,處理器的面積只是大多數(shù)現(xiàn)代微控制器的很小的一部分,多出來(lái)的面積和功耗經(jīng)常不那么重要。

2.4    Cortex-M4指令集

Cortex-M4在很多地方和Cortex-M3相同:流水線,編程模型。Cortex-M4支持Cortex-M3的所有功能,并額外支持各種面向DSP應(yīng)用的指令,像SIMD, 飽和運(yùn)算指令,一系列單周期MAC指令(Cortex-M3只支持有限條MAC指令,并且是多周期執(zhí)行的),和可選的單精度浮點(diǎn)運(yùn)算指令。

Cortex-M4的SIMD操作可以并行處理兩個(gè)16位數(shù)據(jù)和4個(gè)8位數(shù)據(jù)。例如,圖4展示的QADD8 和 QADD16 操作:
            

圖 4: SIMD指令例子: QADD8 and QADD16

The uses of SIMD enable much faster computation of 16-bit and 8-bit data in certain DSP operations as the calculation can be parallelized. However, in general programming, C compilers are unlikely to utilize the SIMD capability. That is why the typical benchmark results of the Cortex-M3 and Cortex-M4. However, the internal data path of the Cortex-M4 is different from Cortex-M3, which enable faster operations in a few cases (e.g. single cycle MAC, and allow write back of two registers in a single cycle).在某些DSP運(yùn)算中,使用SIMD可以加速更快計(jì)算16位和8位數(shù)據(jù),因?yàn)檫@些運(yùn)算可以并行處理。但是,一般的編程中,C編譯器并不能充分利用SIMD運(yùn)算能力。這是為什么Cortex-M3 和 Cortex-M4典型benchmark的分?jǐn)?shù)差不多。然而,Cortex-M4的內(nèi)部數(shù)據(jù)通路和Cortex-M3的不同,某些情況下Cortex-M4可以處理的更快(例如,單周期MAC,可以在一個(gè)周期中寫(xiě)回到兩個(gè)寄存器)。

2.5    Cortex-M7指令集

Cortex-M7支持的指令集和Cortex-M4相似,添加了:
•    浮點(diǎn)數(shù)據(jù)架構(gòu)是基于FPv5的,而不是Cortex-M4的FPv4,所以Cortex-M7支持額外浮點(diǎn)指令
•    可選的雙精度浮點(diǎn)數(shù)據(jù)處理指令
•    支持緩存數(shù)據(jù)預(yù)取指令(PLD)

Cortex-M7的流水線和Cortex-M4的非常不同。Cortex-M7是6級(jí)雙發(fā)射流水線,可以獲得更高的性能。多數(shù)為Cortex-M4設(shè)計(jì)的軟件可以直接運(yùn)行在Cortex-M7上。但是,為了充分利用流水線差異來(lái)達(dá)到最好的優(yōu)化,軟件需要重新編譯,并且在許多情況下,軟件需要一些小的升級(jí),以充分利用像Cache這樣的新功能。

2.6    Cortex-M23指令集

Cortex-M23的指令集是基于ARMv8-M的Baseline子規(guī)范,它是ARMv6-M的超集。擴(kuò)展的指令包括:
•    硬件除法指令
•    比較和跳轉(zhuǎn)指令,32位跳轉(zhuǎn)指令
•    支持TrustZone安全擴(kuò)展的指令
•    互斥數(shù)據(jù)訪問(wèn)指令(通常用于信號(hào)量操作)
•    16位立即數(shù)生成指令
•    載入獲取及存儲(chǔ)釋放指令(支持C11)

在某些情況下,這些增強(qiáng)的指令集可以提高處理器性能,并且對(duì)包含多個(gè)處理器的SoC設(shè)計(jì)有用(例如,互斥訪問(wèn)對(duì)多處理器的信號(hào)量處理有幫助)

2.7    I Cortex-M33指令集

因?yàn)镃ortex-M33設(shè)計(jì)是非常可配置的,某些指令也是可選的。例如:
•    DSP指令(Cortex-M4 和Cortex-M7支持的)是可選的
•    單精度浮點(diǎn)運(yùn)算指令是可選的,這些指令是基于FPv5的,并且比Cortex-M4多幾條。
: Cortex-M33也支持那些ARMv8-M Mainline引入的新指令:
•    支持TrustZone安全擴(kuò)展的指令
•    載入獲取及存儲(chǔ)釋放指令(支持C11)

2.8    指令集特性比較總結(jié)

ARMv6-M, ARMv7-M 和 ARMv8-M架構(gòu)有許多指令集功能特點(diǎn), 很難介紹到所有的細(xì)節(jié)。但是,下面的表格(表4)總結(jié)了那些關(guān)鍵的差異。

 Cortex-M0/M0+Cortex-M1Cortex-M3Cortex-M4Cortex-M7Cortex-M23Cortex-M33
ArchitectureARMv6-MARMv6-MARMv7-MARMv7E-MARMv7E-MARMv8-M BaselineARMv8-M Mainline
v4T,v5T, v6-M Thumb ISAYYYYYYY
v7-M Thumb ISA--YYY-Y
Low power / Sleep mode : WFE, WFI, SEVYExecute as NOPYYYYY
Single cycle Multiply (32-bit result)YYYYYYY
Bit field processing--YYY-Y
Hardware divide (integer)--YYYYY
Unaligned data access--YYY-Y
Table branch--YYY-Y
Conditional execution (IT)--YYY-Y
Compare & branch (CBZ, CBNZ)--YYYYY
Floating point---Single precision  (optional)Single precision  / Single + double precision (optional)-Single precision  (optional)
MAC--Y (multi-cycle,  limited)Y (single cycle)Y (single cycle)-Y (single cycle)
SIMD---YY-Y
Saturation--USAT, SSAT onlyYY-Y
Exclusive access--YYYYY
Load acquire, store release-----YY
Memory barrierYYYYYYY
SVCYOptionalYYYYY
TrustZone support-----YY
表 4: 指令集特性總結(jié)

Cortex-M處理器指令集的最重要的特點(diǎn)是向上兼容。Cortex-M3的指令是Cortex-M0/M0+/M1的超集。所以,理論上講,如果存儲(chǔ)空間分配是一致的,運(yùn)行在Cortex-M0/M0+/M1上的二進(jìn)制文件可以直接運(yùn)行在Cortex-M3上。同樣的原理也適用于Cortex-M4/M7和其他的Cortex-M處理器;Cortex-M0/M0+/M1/M3支持的指令也可以運(yùn)行在Cortex-M4/M7上。

雖然Cortex-M0/M0+/M1/M3/M23處理器沒(méi)有浮點(diǎn)運(yùn)算單元配置選項(xiàng),但是處理器仍然可以利用軟件來(lái)做浮點(diǎn)數(shù)據(jù)運(yùn)算。這也適用于基于Cortex-M4/M7/M33但是沒(méi)有配置浮點(diǎn)運(yùn)算單元的產(chǎn)品。在這種情況下,當(dāng)程序中使用了浮點(diǎn)數(shù),編譯工具包會(huì)在鏈接階段插入需要的運(yùn)行軟件庫(kù)。軟件模式的浮點(diǎn)運(yùn)算需要更長(zhǎng)的運(yùn)行時(shí)間,并且會(huì)略微的增加代碼大小。但是,如果浮點(diǎn)運(yùn)算不是頻繁使用的,這種方案是適合這種應(yīng)用的。

3    架構(gòu)特性


3.1    編程模型

Cortex-M處理器家族的編程模型是高度一致的。例如所有的Crotex-M處理器都支持R0到R15,PSR, CONTROL 和 PRIMASK。兩個(gè)特殊的寄存器— FAULTMASK 和 BASEPRI—只有Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33支持;浮點(diǎn)寄存器組和FPSCR(浮點(diǎn)狀態(tài)和控制寄存器)寄存器,是Cortex-M4/M7/M33可選的浮點(diǎn)運(yùn)算單元使用的。


圖 5: 編程模型

BASEPRI寄存器允許程序阻止指定優(yōu)先級(jí)或者低的優(yōu)先級(jí)中斷和異常。對(duì)ARMv7-M來(lái)說(shuō)這是很重要的,因?yàn)镃ortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33有大量的優(yōu)先級(jí)等級(jí),而ARMv6-M 和 ARMv8-M Baseline只有有限的4個(gè)優(yōu)先等級(jí)。FAULTMASK通常用在復(fù)雜的錯(cuò)誤處理上(查看章節(jié)3.4)

非特權(quán)級(jí)別的實(shí)現(xiàn)對(duì)ARMv6-M處理器是可選的,對(duì)ARMv7-M 和ARMv8-M處理器一直支持的。對(duì)Cortex-M0+處理器,它是可選的, Cortex-M0 and Cortex-M1不支持這個(gè)功能。這意味著在各種Cortex-M處理器的CONTROL 寄存器是稍微不同的。FPU的配置也會(huì)影響到CONTROL寄存器,如圖6所示。


圖 6:  CONTROL 寄存器

另外一個(gè)編程模型之間的不同是PSR寄存器(程序狀態(tài)寄存器)的細(xì)節(jié)。所有的Cortex-M處理器,PSR寄存器都被再分成應(yīng)用程序狀態(tài)寄存器(APSR),執(zhí)行程序狀態(tài)寄存器(EPSR)和中斷程序狀態(tài)寄存器(IPSR)。 ARMv6-M 和 ARMv8-M Baseline系列的處理器不支持APSR的Q位和EPSR的ICI/IT位。ARMv7E-M系列 ( Cortex-M4, Cortex-M7) 和ARMv8-M Mainline (配置了DSP擴(kuò)展的Cortex-M33 )支持GE位。另外,ARMv6-M系列處理器IPSR的中斷號(hào)數(shù)字范圍很小,如圖7所示。


圖 7: PSR 差異

請(qǐng)注意Cortex-M的編程模型和ARM7TDMI等這些經(jīng)典的ARM處理器是不一樣的。除了寄存器組不同外,經(jīng)典ARM處理器中“模式”和“狀態(tài)”的定義與Cortex-M中的也是不同的。Cortex-M只有兩個(gè)模式:線程模式(Thread)和管理者模式(Handler),并且Cortex-M處理器一直運(yùn)行在Thumb狀態(tài)(不支持ARM指令)

3.2    異常處理模型和嵌套向量中斷控制器NVIC

所有的Cortex-M處理器都包含了NVIC模塊,采用同樣的異常處理模型。如果一個(gè)異常中斷發(fā)生,它的優(yōu)先等級(jí)高于當(dāng)前運(yùn)行等級(jí),并且沒(méi)有被任何的中斷屏蔽寄存器屏蔽,處理器會(huì)響應(yīng)這個(gè)中斷/異常,把某些寄存器入棧到當(dāng)前的堆棧上。這種堆棧機(jī)制下,中斷處理程序可以編寫(xiě)為一個(gè)普通的C函數(shù),許多小的中斷處理函數(shù)可以立即直接響應(yīng)工作而不需要額外的堆棧處理花銷(xiāo)。

一些ARMv7-M/ARMv8-M Mainline系列的處理器使用的中斷和系統(tǒng)異常并不被ARMv6-M/ARMv8-M Baseline的產(chǎn)品支持,如圖8. 例如,Cortex-M0, M0+ 和M1的中斷數(shù)被限制在32個(gè)以下,沒(méi)有調(diào)試監(jiān)測(cè)異常,錯(cuò)誤異常也只限于HardFault(錯(cuò)誤處理細(xì)節(jié)請(qǐng)參看章節(jié)3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7處理器可以支持到多達(dá)240個(gè)外圍設(shè)備中斷。Cortex-M33支持最多480個(gè)中斷。

另外一個(gè)區(qū)別是可以使用的優(yōu)先等級(jí)數(shù)量:

ARMv6-M 架構(gòu) - ARMv6-M支持2級(jí)固定的(NMI 和 HardFault)和4級(jí)可編程的(由每個(gè)優(yōu)先等級(jí)寄存器的兩個(gè)位表示)中斷/異常優(yōu)先級(jí)。這對(duì)大多數(shù)的微控制器應(yīng)用來(lái)說(shuō)足夠了。

ARMv7-M 架構(gòu) - ARMv7-M系列處理器的可編程優(yōu)先級(jí)等級(jí)數(shù)范圍,根據(jù)面積的限制,可以配置成8級(jí)(3位)到256級(jí)(8位)。ARMv7-M處理器還有一個(gè)叫做中斷優(yōu)先級(jí)分組的功能,可以把中斷優(yōu)先級(jí)寄存器再進(jìn)一步分為組優(yōu)先級(jí)和子優(yōu)先級(jí),這樣可以詳細(xì)地制定搶占式優(yōu)先級(jí)的行為。

ARMv8-M Baseline – 類(lèi)似 ARMv6-M,M23也有2位的優(yōu)先級(jí)等級(jí)寄存器。借助可選的TrustZone安全擴(kuò)展組件,安全軟件可以把非安全環(huán)境中的中斷的優(yōu)先等級(jí)轉(zhuǎn)換到優(yōu)先等級(jí)區(qū)間的下半?yún)^(qū),這就保證了安全環(huán)境中的某些中斷/異常總是比非安全環(huán)境中的優(yōu)先級(jí)要高。

ARMv8-M Mainline – 類(lèi)似于 ARMv7-M。 可以支持8到256個(gè)中斷優(yōu)先等級(jí)和中斷優(yōu)先級(jí)分組。還支持ARMv8-M Baseline具有的優(yōu)先等級(jí)調(diào)整功能。


圖 8: Cortex-M 處理器異常中斷類(lèi)型

所有的Cortex-M處理器在異常處理是都要依靠向量表。向量表保存著異常處理函數(shù)的起始地址(如圖8所示)。向量表的起始地址由名為向量表偏移寄存器(VTOR)決定。

•    Cortex-M0+, Cortex-M3 and Cortex-M4 processors: by default the vector table is located in the starting of the memory map (address 0x0). Cortex-M0+, Cortex-M3 and Cortex-M4: 向量表默認(rèn)放在存儲(chǔ)空間的起始地址(地址 0x0)。
•    In Cortex-M7, Cortex-M23 and Cortex-M33 processors: the default value for VTOR is defined by chip designers. Cortex-M23 and Cortex-M33 processors can have two separated vector tables for Secure and Non-secure exceptions/interrupts. Cortex-M7, Cortex-M23 and Cortex-M33:VTOR的初始值由芯片設(shè)計(jì)者定義。Cortex-M23 and Cortex-M33處理器面向安全和非安全的異常/中斷有兩個(gè)獨(dú)立的向量表。
•    Cortex-M0 and Cortex-M1 does not implement programmable VTOR and vector table starting address is always 0x00000000. Cortex-M0 and Cortex-M1沒(méi)有實(shí)現(xiàn)可編程的VTOR,向量表起始地址一直為0x00000000。
Cortex-M0+ 和 Cortex-M23處理器的VTOR是可選項(xiàng)。如果VTOR被實(shí)現(xiàn)了,向量表的起始地址可以通過(guò)設(shè)置VTOR來(lái)改變,這個(gè)功能對(duì)下列情況有用:
•    重定位向量表到SRAM來(lái)實(shí)現(xiàn)動(dòng)態(tài)改變異常處理函數(shù)入口點(diǎn)
•    重定位向量表到SRAM來(lái)實(shí)現(xiàn)更快的向量讀取(如果flash存儲(chǔ)器很慢)
•    重定位向量表到ROM不同位置(或者Flash),不同的程序運(yùn)行階段可以有不同的異常處理程序

不同的Cortex-M處理器之間的NVIC編程模型也有額外的不同。差異點(diǎn)總結(jié)在表 5中:

 Cortex-M0Cortex-M0+Cortex-M1Cortex-M3/M4/M7Cortex-M23Cortex-M33
Number of InterruptsUp to 32Up to 32Up to 32Up to  240Up  to 240Up to 480
NMIYYYYYY
SysTickY (optional)Y (optional)Y (optional)YY (optional)Y
Fault handlers1 (HardFault)1 (HardFault)1 (HardFault)
4
1 (HardFault)
4
VTOR-Y (optional)-YY (optional)Y
Dbg Monitor---Y-Y
Programmable priority levels
4
4
4
8 to  256
4
8 to 256
Software trigger interrupt register---Y-Y
Interrupt Active status---YYY
Register accesses32-bit32-bit32-bit8/16/32-bit32-bit8/16/32-bit
Dynamic priority change---YYY
表 5: NVIC 編程模型和特性差異

大部分情況下,對(duì)NVIC的中斷控制特性的操作都是通過(guò)CMSIS-CORE提供的APIs處理的,他們?cè)谖⒖刂破鲝S商提供的設(shè)備驅(qū)動(dòng)程序庫(kù)里。對(duì)Cortex-M3/M4/M7/M23/M33處理器,即使中斷被使能了,它的優(yōu)先級(jí)也可以被改變。ARMv6-M處理器不支持動(dòng)態(tài)優(yōu)先等級(jí)調(diào)整,當(dāng)你需要改變中斷優(yōu)先等級(jí)是,需要暫時(shí)的關(guān)掉這個(gè)中斷。

3.3    操作系統(tǒng)支持特性

Cortex-M處理器架構(gòu)在設(shè)計(jì)時(shí)就考慮到了操作系統(tǒng)的支持。針對(duì)操作系統(tǒng)的特性有:
•    影子堆棧指針
•    系統(tǒng)服務(wù)調(diào)用(SVC)和可掛起系統(tǒng)調(diào)用(PenSV)異常
•    SysTick – 24位遞減計(jì)時(shí)器,為操作系統(tǒng)的計(jì)時(shí)和任務(wù)管理產(chǎn)生周期性的異常中斷
•    Cortex-M0+/M3/M4/M7/M23/M33支持的非特權(quán)執(zhí)行和存儲(chǔ)保護(hù)單元(MPU)

系統(tǒng)服務(wù)調(diào)用(SVC)異常由SVC指令觸發(fā),他可以讓運(yùn)行在非特權(quán)狀態(tài)的應(yīng)用任務(wù)啟動(dòng)特權(quán)級(jí)的操作系統(tǒng)服務(wù)。可掛起系統(tǒng)調(diào)用異常在操作系統(tǒng)中像上下文切換這樣的非關(guān)鍵操作的調(diào)度非常有幫助。

為了能把Cortex-M1放到很小的FPGA器件中,所有用來(lái)支持操作系統(tǒng)的特性對(duì)Cortex-M1都是可選的。對(duì)Cortex-M0, Cortex-M0+ 和Cortex-M23處理器,系統(tǒng)時(shí)鐘SysTick是可選的。

通常,所有的Cortex-M處理器都支持操作系統(tǒng)。執(zhí)行在Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33的應(yīng)用可以運(yùn)行在非特權(quán)運(yùn)行狀態(tài),并且可以同時(shí)利用可選的存儲(chǔ)器管理單元(MPU)以避免內(nèi)存非法訪問(wèn)。這可以增強(qiáng)系統(tǒng)的魯棒性。

3.4    TrustZone安全擴(kuò)展

近幾年來(lái), 物聯(lián)網(wǎng)(IoT)成為了嵌入式系統(tǒng)開(kāi)發(fā)者們的熱門(mén)話題。IoT系統(tǒng)產(chǎn)品變得更加復(fù)雜,上市時(shí)間的壓力也與日俱增。嵌入式系統(tǒng)產(chǎn)品需要更好的方案來(lái)保證系統(tǒng)的安全,但是同時(shí)又要方便軟件開(kāi)發(fā)者開(kāi)發(fā)。傳統(tǒng)的方案是通過(guò)把軟件分成特權(quán)和非特權(quán)兩部分解決的,特權(quán)級(jí)軟件利用MPU防止非特權(quán)的應(yīng)用訪問(wèn)包含安全敏感信息在內(nèi)的的關(guān)鍵的系統(tǒng)資源。這種方案對(duì)一些IoT系統(tǒng)非常適合,但是在一些情況下,只有兩層劃分是不夠的。特別是那些包含很多復(fù)雜特權(quán)級(jí)別的軟件組件的系統(tǒng),特權(quán)級(jí)的代碼的一個(gè)缺陷就可以導(dǎo)致黑客徹底的控制這個(gè)系統(tǒng)。

ARMv8-M架構(gòu)包含了一個(gè)叫做TrustZone的安全擴(kuò)展,TrustZone導(dǎo)入了安全和非安全狀態(tài)的正交劃分。

•    普通應(yīng)用是非安全態(tài)
•    軟件組件和安全相關(guān)的資源(例如,安全存儲(chǔ),加密加速器,正隨機(jī)數(shù)發(fā)生器(TRNG))處在安全狀態(tài)。


圖 9: 安全狀態(tài)和非安全狀態(tài)的隔離

非安全狀態(tài)的軟件只能訪問(wèn)非安全狀態(tài)的存儲(chǔ)空間和外圍設(shè)備,安全軟件可以訪問(wèn)兩種狀態(tài)下的所有資源。

用這種方案,軟件開(kāi)發(fā)者可以用以往的方式開(kāi)發(fā)非安全環(huán)境下的應(yīng)用程序。同時(shí),他們可以借助芯片廠商提供的安全通訊軟件庫(kù)執(zhí)行安全物聯(lián)網(wǎng)連接。并且即使運(yùn)行在非安全環(huán)境的特權(quán)級(jí)的程序有漏洞,TrustZone安全機(jī)制可以阻止黑客控制整個(gè)設(shè)備,限制了攻擊的影響,還可以實(shí)現(xiàn)系統(tǒng)遠(yuǎn)程恢復(fù)。此外,ARMv8-M架構(gòu)也引入了堆棧邊界檢查和增強(qiáng)的MPU設(shè)計(jì),促使額外安全措施的采用。

安全架構(gòu)定義也擴(kuò)展到了系統(tǒng)級(jí)別,每個(gè)中斷都可以被設(shè)置為安全或者非安全屬性。中斷異常處理程序也會(huì)自動(dòng)保存和恢復(fù)安全環(huán)境中的寄存器數(shù)據(jù)以防止安全信息泄露。所以,TrustZone安全擴(kuò)展讓系統(tǒng)能夠支持實(shí)時(shí)系統(tǒng)的需求,為IoT應(yīng)用提供了堅(jiān)實(shí)的安全基礎(chǔ),并且容易讓軟件開(kāi)發(fā)在此技術(shù)上開(kāi)發(fā)應(yīng)用程序。

TrustZone模塊對(duì)Cortex-M23 and Cortex-M33處理器是可選的。關(guān)于ARMv8-M TrustZone更多的信息請(qǐng)查找The Next Steps in the Evolution of Embedded Processors for the Smart Connected Era。更多的TrustZone的資源請(qǐng)查看community.arm.com網(wǎng)站上的“TrustZone for ARMv8-M Community”。

3.5    錯(cuò)誤處理

ARM處理器和其他架構(gòu)的微控制器的一個(gè)區(qū)別是錯(cuò)誤處理能力。當(dāng)錯(cuò)誤被檢測(cè)到時(shí),一個(gè)錯(cuò)誤異常處理程序被觸發(fā)去執(zhí)行恰當(dāng)?shù)奶幚怼S|發(fā)錯(cuò)誤的情況可能是:
•    未定義的指令(例如,F(xiàn)lash存儲(chǔ)器損壞)
•    訪問(wèn)非法地址空間(例如,堆棧指針崩潰)或者M(jìn)PU非法訪問(wèn)
•    非法操作(例如,當(dāng)處理器已經(jīng)在優(yōu)先級(jí)高于SVC的中斷中試圖觸發(fā)SVC異常)

錯(cuò)誤處理機(jī)制使嵌入式系統(tǒng)能夠更快的響應(yīng)各種問(wèn)題。否則,如果系統(tǒng)死機(jī)了,看門(mén)狗定時(shí)需要非常長(zhǎng)的時(shí)間重啟系統(tǒng)。

ARMv6-M架構(gòu)中,所有的錯(cuò)誤事件都會(huì)觸發(fā)HardFault處理程序,它的優(yōu)先級(jí)是-1(優(yōu)先級(jí)比所有的可編程異常都高,但是僅低于非屏蔽中斷NMI)。 所有的錯(cuò)誤事件都被認(rèn)為是不可恢復(fù)的,通常我們?cè)贖ardFault處理程序中僅運(yùn)行錯(cuò)誤報(bào)告然后進(jìn)一步觸發(fā)自動(dòng)復(fù)位。

ARMv8-M Baseline架構(gòu)和ARMv6-M類(lèi)似,只有一個(gè)錯(cuò)誤異常(HardFault)。但是ARMv8-M Baseline的HardFault優(yōu)先級(jí)可以是-1或者當(dāng)實(shí)現(xiàn)了TrustZone安全擴(kuò)展時(shí)優(yōu)先級(jí)是-3.

ARMv7-M 和 ARMv8-M Mainline產(chǎn)品除了HardFault還有幾個(gè)可配置的錯(cuò)誤異常:
•    Memmanage(內(nèi)存管理錯(cuò)誤)
•    總線錯(cuò)誤(總線返回錯(cuò)誤的響應(yīng))
•    用法錯(cuò)誤(未定義指令或者其他的非法操作)
•    SecureFault(只用ARMv8-M Mainline產(chǎn)品支持,處理TrustZone安全擴(kuò)展中的安全非法操作)

這些異常的優(yōu)先級(jí)可以編程改變,可以單獨(dú)的打開(kāi)和關(guān)掉。如果需要,它們也可以利用FAULTMASK寄存器把它們的優(yōu)先級(jí)提高到和HardFault相同的級(jí)別。ARMv7-M 和 ARMv8-M Mainline產(chǎn)品還有幾個(gè)錯(cuò)誤狀態(tài)寄存器可以提供關(guān)于觸發(fā)錯(cuò)誤異常事件的線索和錯(cuò)誤地址的寄存器,用來(lái)確定觸發(fā)這個(gè)錯(cuò)誤異常的訪問(wèn)地址,使調(diào)試更加容易。

ARMv7-M 和 ARMv8-M Mainline產(chǎn)品子規(guī)范中額外的錯(cuò)誤處理程序提供了靈活的錯(cuò)誤處理能力,錯(cuò)誤狀態(tài)寄存器讓錯(cuò)誤事件的定位和調(diào)試更加容易。很多商業(yè)開(kāi)發(fā)套件中的調(diào)試器已經(jīng)內(nèi)嵌了使用錯(cuò)誤狀態(tài)寄存器來(lái)診斷錯(cuò)誤事件的功能。此外,錯(cuò)誤處理程序可以在運(yùn)行時(shí)做一些修復(fù)工作。

 ARMv6-M (Cortex-M0,  Cortex-M0+, Cortex-M1)ARMv7-M (Cortex-M3, Cortex-M4, Cortex-M7) and  ARMv8-M Mainline (Cortex-M33)
and ARMv8-M Baseline (Cortex-M23)
HardFaultYY
MemManage-Y
Usage Fault-Y
Bus Fault-Y
SecureFault-ARMv8-M Mainline  only
Fault Status Registers-  (one Debug FSR for debug only)Y
Fault Address Register-Y
表 6: 錯(cuò)誤處理特性比較總結(jié)

4    系統(tǒng)特性

4.1    低功耗

低功耗是Cortex-M處理器的一個(gè)關(guān)鍵優(yōu)點(diǎn)。低功耗是其架構(gòu)的組成部分:
•    WFI和WFE指令
•    架構(gòu)級(jí)的休眠模式定義

此外,Cortex-M支持許多其他的低功耗特性:
•    休眠和深度休眠模式:架構(gòu)級(jí)支持的特性,通過(guò)設(shè)備特定的功耗管理寄存器可以進(jìn)一步擴(kuò)展。
•    Sleep-on-exit模式:中斷驅(qū)動(dòng)的應(yīng)用的低功耗技術(shù)。開(kāi)啟設(shè)置后,當(dāng)異常處理程序結(jié)束并且沒(méi)有其他等待處理的異常中斷時(shí),處理器自動(dòng)進(jìn)入到休眠模式。這樣避免了額外的線程模式中指令的執(zhí)行從而省電,并且減少了不必要的堆棧讀寫(xiě)操作。
•    喚醒中斷控制器(WIC):一個(gè)可選的特性,在特定的低功耗狀態(tài),由一個(gè)獨(dú)立于處理器的小模塊偵測(cè)中斷情況。例如,在狀態(tài)保留功耗管理(SRPG)設(shè)計(jì)中,當(dāng)處理器被關(guān)電的設(shè)計(jì)。
•    時(shí)鐘關(guān)閉和架構(gòu)級(jí)時(shí)鐘關(guān)閉:通過(guò)關(guān)閉處理器的寄存器或者子模塊的時(shí)鐘輸入來(lái)省電
所有這些特性都被Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33支持。此外,各種低功耗設(shè)計(jì)技術(shù)被用來(lái)降低處理器功耗。

因?yàn)楦俚碾娐罚珻ortex-M0 and Cortex-M0+處理器比Cortex-M3, Cortex-M4 和 Cortex-M7功耗低。此外,Cortex-M0+額外優(yōu)化減少了程序存取(例如跳轉(zhuǎn)備份)來(lái)保持系統(tǒng)層級(jí)的低功耗。

Cortex-M23沒(méi)有Cortex-M0 和 Cortex-M0+那么小,但是在相同的配置下,仍然和Cortex-M0+能效一樣。
由于更好性能和低功耗優(yōu)化,在相同配置下,Cortex-M33比Cortex-M4能效比更好。

4.2    Bit-band feature位段

Cortex-M3 和Cortex-M4處理器支持一個(gè)叫做位段的可選功能,允許有兩段通過(guò)位段別名地址實(shí)現(xiàn)可以位尋址的1MB的地址空間(一段在從地址0x20000000起始的SRAM空間。另一段是從地址0x40000000起始的外圍設(shè)備空間)。Cortex-M0, M0+ 和 Cortex-M1不支持位段(bit-band)功能,但是可以利用ARM Cortex-M系統(tǒng)設(shè)計(jì)套件(CMSDK)中的總線級(jí)組件在系統(tǒng)層面實(shí)現(xiàn)位段(bit-band)功能。Cortex-M7不支持位段(bit-band),因?yàn)镸7的Cache功能不能與位段一塊使用(Cache控制器不知道內(nèi)存空間的別名地址)。

ARMv8-M的TrustZone 不支持位段, 這是由于位段別名需要的兩個(gè)不同的地址可能會(huì)在不同的安全域中。對(duì)于這些系統(tǒng),外圍設(shè)備數(shù)據(jù)的位操作反而可以在外圍設(shè)備層面處理(例如,通過(guò)添加位設(shè)置和清除寄存器)。

4.3    存儲(chǔ)器保護(hù)單元(MPU)

除了Cortex-M0, 其他的Cortex-M處理器都有可選的MPU來(lái)實(shí)現(xiàn)存儲(chǔ)空間訪問(wèn)權(quán)限和存儲(chǔ)空間屬性或者存儲(chǔ)區(qū)間的定義。運(yùn)行實(shí)時(shí)操作系統(tǒng)的嵌入式系統(tǒng), 操作系統(tǒng)會(huì)每個(gè)任務(wù)定義存儲(chǔ)空間訪問(wèn)權(quán)限和內(nèi)存空間配置來(lái)保證每個(gè)任務(wù)都不會(huì)破壞其他的任務(wù)或者操作系統(tǒng)內(nèi)核的地址空間。Cortex-M0+, Cortex-M3 和 Cortex-M4都有8個(gè)可編程區(qū)域空間和非常相似的編程模型。主要的區(qū)別是Cortex-M3/M4的MPU允許兩級(jí)的存儲(chǔ)空間屬性(例如,系統(tǒng)級(jí)cache類(lèi)型),Cortex-M0+僅支持一級(jí)。Cortex-M7的MPU可以配置成支持8個(gè)或者16個(gè)區(qū)域,兩級(jí)的存儲(chǔ)空間屬性。Cortex-M0 和 Cortex-M1不支持MPU.

Cortex-M23 和 Cortex-M33也支持MPU選項(xiàng),如果實(shí)現(xiàn)了TrustZone安全擴(kuò)展(一個(gè)用于安全軟件程序,另一個(gè)用于非安全軟件程序)可以有最多兩個(gè)MPU。

4.4    單周期I/O接口

單周期I/O接口是Cortex-M0+處理器獨(dú)特的功能,這使Cortex-M0+可以很快的運(yùn)行I/O控制任務(wù)。Cortex-M大多數(shù)的處理器的總線接口是基于AHB Lite或者AHB 5協(xié)議的,這些接口都是流水實(shí)現(xiàn)總線協(xié)議,運(yùn)行在高時(shí)鐘頻率。但是,這意味著每個(gè)傳輸需要兩個(gè)時(shí)鐘周期。單時(shí)鐘周期I/O接口添加了額外的簡(jiǎn)單的非流水線總線接口,連接到像GPIO(通用輸入輸出)這樣的一部分設(shè)備特定的外設(shè)上。結(jié)合單周期I/O和Cortex-M0+天然比較低的跳轉(zhuǎn)代價(jià)(只有兩級(jí)流水線),許多I/O控制操作都會(huì)比大多數(shù)其他微控制器架構(gòu)的產(chǎn)品運(yùn)行的更快。

5    性能考慮


5.1    通用數(shù)據(jù)處理能力

在通用微控制器市場(chǎng),benchmark數(shù)據(jù)經(jīng)常用來(lái)衡量微控制器的性能,表7是Cortex-M處理器常用benchmark測(cè)試的性能數(shù)據(jù):

 Dhrystone  DMIPS/MHz (v2.1) – officialDhrystone  DMIPS/MHz (v2.1) – full optimizationCoremark/MHz  (v1.0)
Cortex-M0
0.84
1.21
2.33
Cortex-M0+
0.94
1.31
2.42
Cortex-M3
1.25
1.89
3.32
Cortex-M4
1.25
1.95
3.4
Cortex-M7
2.14
2.55
5.01
Cortex-M23
0.98
-
2.5
Cortex-M33
1.5
-
3.86
表 7: Cortex-M處理器常用benchmakr的性能分?jǐn)?shù)
(來(lái)源:CoreMark.org 網(wǎng)站 and ARM 網(wǎng)站)

關(guān)于Dhrystone需要注意的是用來(lái)測(cè)試的Dhrystone是由官方源程序在沒(méi)有啟用inline and 和multi-file compilation編譯選項(xiàng)的情況編譯出來(lái)的(官方分?jǐn)?shù))。但是,很多微控制器廠商引用的是完全優(yōu)化編譯的Dhrystone測(cè)試出來(lái)的數(shù)據(jù)。

但是,benchmark工具的性能測(cè)試數(shù)據(jù)可能無(wú)法準(zhǔn)確反應(yīng)你的應(yīng)用能達(dá)到的性能。例如,單周期I/O接口和DSP應(yīng)用中使用SIMD,或者Cortex-M4/M7中使用FPU的加速效果并沒(méi)有在這些測(cè)試數(shù)據(jù)中體現(xiàn)出來(lái)。

通常,Cortex-M3 和 Cortex-M4由于以下原因提供了更高的數(shù)據(jù)處理性能:
•    更豐富的指令集
•    哈佛總線架構(gòu)
•    寫(xiě)緩存(單周期寫(xiě)操作)
•    跳轉(zhuǎn)目標(biāo)的預(yù)測(cè)取指

Cortex-M33也是基于哈佛總線的架構(gòu),有豐富的指令集。但是不像Cortex-M3 和 Cortex-M4,Cortex-M33處理器流水線是重新設(shè)計(jì)的高效流水線,支持有限的指令雙發(fā)射(可以在一個(gè)時(shí)鐘周期中執(zhí)行最多兩條指令)。

Cortex-M7支持更高的性能,這是因?yàn)镸7擁有雙發(fā)射六級(jí)流水線并支持分支預(yù)測(cè)。而且,通過(guò)支持指令和數(shù)據(jù)Cache,和即便使用慢速內(nèi)存(例如,嵌入式Flash)也能避免性能損失的緊耦合內(nèi)存,來(lái)實(shí)現(xiàn)更高的系統(tǒng)級(jí)性能。

但是,某些I/O操作密集的任務(wù)在Cortex-M0+上運(yùn)行更快,這是因?yàn)椋?br /> •    更短的流水線(跳轉(zhuǎn)只需要兩個(gè)周期)
•    單周期I/O端口
當(dāng)然也有設(shè)備相關(guān)的因素。例如,系統(tǒng)級(jí)設(shè)計(jì),內(nèi)存的速度也會(huì)影響到系統(tǒng)的性能。

你自己的應(yīng)用程序經(jīng)常是你需要的最好的benchmark。CoreMark分?jǐn)?shù)是另外一個(gè)處理器兩倍的處理器并不意味著執(zhí)行你的應(yīng)用也快一倍。對(duì)I/O密集操作的應(yīng)用來(lái)說(shuō),設(shè)備相關(guān)的系統(tǒng)級(jí)架構(gòu)對(duì)性能有巨大的影響。

5.2    中斷延遲

性能相關(guān)的另外一個(gè)指標(biāo)是中斷延遲。這通常用從中斷請(qǐng)求到中斷服務(wù)程序第一條指令執(zhí)行的時(shí)鐘周期數(shù)來(lái)衡量。表8列出了Cortex-M處理器在零等待內(nèi)存系統(tǒng)條件下的中斷延遲比較。

 Interrupt latency  (number of clock cycles)
Cortex-M0
16
Cortex-M0+
15
Cortex-M23
15
Cortex-M3
12
Cortex-M4
12
Cortex-M7Typically 12,  worst case 14
Cortex-M33
12
表 8: 零等待內(nèi)存系統(tǒng)條件下的中斷延遲比較

事實(shí)上,真正的中斷延遲受到內(nèi)存系統(tǒng)等待狀態(tài)的影響。例如,許多運(yùn)行頻率超過(guò)100Mhz的微控制器搭配的是非常慢的Flash存儲(chǔ)器(例如30到50MHz)。雖然使用了Flash訪問(wèn)加速硬件來(lái)提高性能,中斷延遲仍然受到Flash存儲(chǔ)系統(tǒng)等待狀態(tài)的影響。所以完全有可能運(yùn)行在零等待內(nèi)存系統(tǒng)Cortex-M0/M0+系統(tǒng)比Cortex-M3/M4/M7有更短的中斷延遲。

當(dāng)評(píng)估性能的時(shí)候,不要忘記把中斷處理程序的執(zhí)行時(shí)間考慮在內(nèi)。某些8位或者16位處理器架構(gòu)可能中斷延遲很短,但是會(huì)花費(fèi)數(shù)倍的時(shí)鐘周期完成中斷處理。非常短的中斷響應(yīng)時(shí)間和很短的中斷處理時(shí)間才是實(shí)際有效的。

6    調(diào)試和跟蹤特性

6.1    調(diào)試和跟蹤特性簡(jiǎn)介

不同Cortex-M處理器之間有若干區(qū)別。總結(jié)在表9中。

 Cortex-M0/M1Cortex-M0+Cortex-M3/M4Cortex-M7Cortex-M23Cortex-M33
Protocol of debug connectionJTAG / Serial  WireJTAG / Serial  WireJTAG / Serial  Wire / bothJTAG / Serial  WireJTAG / Serial  WireJTAG / Serial  Wire
Protocol of trace connection--Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, one pin)Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, 1 pin)Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, 1 pin)Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, 1 pin)
Hardware Breakpoint comparatorsUp to 4Up to 4Up to 8 (6 for  instruction addresses, 2 literal addresses)Up to 8 (all for  instruction addresses)Up to 4Up to 8 (all for  instruction addresses)
Software breakpoint (bkpt instruction)YYYYYY
Data Watchpoint comparatorsUp to 2Up to 2Up to 4Up to 4Up to 4Up to 4
Instruction Trace-Limited history  using MTBETM trace with  unlimited historyETM trace with  unlimited historyETM / MTBETM / MTB
Data Trace--Selective data  trace using DWTSelective data  trace using DWT, full data trace via ETM (optional)-Selective data  trace using DWT
Event & profiling Trace--Using DWTUsing DWT-Using DWT
Instrumentation (Software) trace--Instrumentation  Trace Macrocell (ITM)Instrumentation  Trace Macrocell (ITM)-Instrumentation  Trace Macrocell (ITM)
Trace timestamp--YYY (ETM)Y
On the fly memory accessesYYYYYY
Debug using software agent (Debug monitor)--YY-Y
Multi-core debug synchronizationYYYYYY
PC samplingY (via debug  connection)Y (via debug  connection)Y (via debug  connection or by trace)Y (via debug  connection or by trace)Y (via debug  connection)Y (via debug  connection or by trace)
表9: 調(diào)試和跟蹤特性比較

Cortex-M處理器的調(diào)試架構(gòu)是基于ARM CoreSight調(diào)試架構(gòu)設(shè)計(jì)的,它是個(gè)非常容易擴(kuò)展的架構(gòu),支持多處理器系統(tǒng)。

表9列出的是典型設(shè)計(jì)需要考慮的。在CoreSight架構(gòu)下,調(diào)試接口和跟蹤接口模塊是和處理器分離的。因此你采用的設(shè)備的調(diào)試和跟蹤連接和表9的可能不一樣。也可能通過(guò)添加一些額外的CoreSight調(diào)試組件來(lái)增加一些調(diào)試特性。

6.2    Debug connections調(diào)試接口

調(diào)試接口可以讓調(diào)試者實(shí)現(xiàn)
-    訪問(wèn)控制調(diào)試和跟蹤特性的寄存器。
-    訪問(wèn)內(nèi)存空間。對(duì)Cortex-M系列處理器,及時(shí)當(dāng)處理器運(yùn)行時(shí)也可以執(zhí)行內(nèi)存空間訪問(wèn)。這被稱(chēng)作實(shí)時(shí)內(nèi)存訪問(wèn)。
-    訪問(wèn)處理器核心寄存器。這只能當(dāng)處理器停止的時(shí)候才可以操作。
-    訪問(wèn)Cortex-M0處理器中微跟蹤緩存(MTB)生成的跟蹤歷史記錄。
另外,調(diào)試接口也會(huì)用作:
-    Flash 編程

Cortex-M系列處理器可以選擇傳統(tǒng)的4到5個(gè)引腳(TDI, TDO, TCK, TMS 和可選的 nTRST)的JTAG接口,或者選擇新的只需要兩個(gè)引腳的串行調(diào)試協(xié)議接口,串行調(diào)試接口對(duì)有限數(shù)目引腳的設(shè)備是非常適合的。


圖 10: 串口線或者JTAG調(diào)試接口allows access to processor’s debug features and memory space including peripherals

串行線調(diào)試協(xié)議接口可以處理JTAG支持的所有特性,支持奇偶校驗(yàn)。串行調(diào)試協(xié)議被ARM工具廠商廣泛的采用,許多調(diào)試適配器兩種協(xié)議都支持,串行線型號(hào)共享調(diào)試接口上TCK和TMS針腳。

6.3    跟蹤接口

跟蹤接口讓調(diào)試者可以在程序執(zhí)行時(shí)實(shí)時(shí)的(很小的延時(shí))收集程序運(yùn)行的信息。收集的信息可以是Cortex-M3/M4/M7/M33支持的嵌入式跟蹤單元(ETM)生成的程序指令流信息(指令跟蹤),可以是數(shù)據(jù)跟蹤單元(DWT)生成的數(shù)據(jù)/事件/性能分析信息,或者是軟件控制數(shù)據(jù)跟蹤單元(ITM)生成的信息。

有兩種類(lèi)型的跟蹤接口可用:
-    跟蹤端口(Trace port)– 多個(gè)數(shù)據(jù)線加上時(shí)鐘信號(hào)線。比SWV有更高的跟蹤帶寬,可以支持SWV的所有跟蹤類(lèi)型加上指令跟蹤。Cortex-M3/M4/M7或者 Cortex-M33的設(shè)備上,跟蹤端口通常有4個(gè)數(shù)據(jù)線和一個(gè)時(shí)鐘線。(圖11)
-    串行監(jiān)視器(SWV)– 單引腳線跟蹤接口,可以選擇性的支持?jǐn)?shù)據(jù)跟蹤,事件跟蹤,性能分析和測(cè)量跟蹤。(圖 12)


圖 11: Trace port 支持指令跟蹤和其他跟蹤功能必要的帶寬

跟蹤接口提供了在處理器運(yùn)行的時(shí)候獲取大量有用信息的能力。例如嵌入式跟蹤單元(ETM)可以獲取指令運(yùn)行歷史記錄,數(shù)據(jù)跟蹤單元(ITM)讓軟件產(chǎn)生消息(例如,通過(guò)printf)并利用Trace接口獲取。另外,Cortex-M3/M4/M7/M33支持?jǐn)?shù)據(jù)跟蹤單元(DWT)模塊。

-    可選的數(shù)據(jù)跟蹤:內(nèi)存地址的信息(例如,地址,數(shù)據(jù)和時(shí)間戳的組合)可以在處理器訪問(wèn)這個(gè)地址的時(shí)候采集
-    性能分析跟蹤:CPU在不同操作任務(wù)使用的時(shí)鐘周期數(shù)(例如,內(nèi)存訪問(wèn),休眠)
-    事件跟蹤:提供服務(wù)器響應(yīng)的中斷/異常的運(yùn)行時(shí)間和歷史


圖 12: Serial wire viewer 提供了低成本,少引腳的跟蹤方案

這些跟蹤特性被各種工具廠商廣泛采用,采集的信息也被以各種方式直觀的展現(xiàn)出來(lái)。例如DWT獲取的數(shù)據(jù)可以在Keil µVision調(diào)試器中以波形的方式展現(xiàn)出來(lái)(Keil微控制器開(kāi)發(fā)工具的一部分)如圖 13所示。


Figure 13: Keil µVision 調(diào)試器的邏輯分析器

雖然Cortex-M0 和 Cortex-M0+不支持跟蹤接口,Cortex-M0+支持叫做微跟蹤緩存的特性(MTB,圖14)。MTB讓用戶(hù)分配一小塊系統(tǒng)SRAM作為存儲(chǔ)指令的緩存,通常設(shè)置為循環(huán)緩存,這樣可以抓取最新的指令執(zhí)行歷史并在調(diào)試器上顯示出來(lái)。

這個(gè)MTB跟蹤特性也被Cortex-M23 and Cortex-M33支持。


圖 14: Cortex-M0+/M23/M33 的MTB提供了低成本指令跟蹤方案

7    基于Cortex-M處理器的產(chǎn)品開(kāi)發(fā)

7.1    為什么Cortex-M系列處理器容易使用

雖然Cortex-M系列處理器有非常多的特性,但是很容易使用的。例如,差不多所有的開(kāi)發(fā)都可以用像C語(yǔ)言這樣的高級(jí)編程語(yǔ)言。雖然,基于Cortex-M系列處理器產(chǎn)品都大不相同(例如,有不同大小的內(nèi)存,不同的外設(shè),性能和封裝等等),架構(gòu)的一致性讓開(kāi)發(fā)者一旦對(duì)他們其中的一塊有開(kāi)發(fā)經(jīng)驗(yàn),就很容易開(kāi)始使用新的Cortex-M處理器。

為了實(shí)現(xiàn)更容易的軟件開(kāi)發(fā),更好的軟件重用性和可移植性,ARM開(kāi)發(fā)了CMSIS-CORE,這兒CMSIS表示Cortex-Microcontroller Software Interface Standard,CMSIS-CORE通過(guò)一組APIs為處理器的各種特性像終端管理控制提供了一個(gè)標(biāo)準(zhǔn)的硬件抽象層(HAL), CMSIS-CORE集成在各種微處理器廠商提供的設(shè)備驅(qū)動(dòng)程序庫(kù)里,被各種開(kāi)發(fā)工具套件支持。

除了CMSIS-CORE, CMSIS還包含一個(gè)DSP軟件庫(kù)(CMSIS-DSP)。這個(gè)庫(kù)提供了為Cortex-M4 和 Cortex-M7優(yōu)化過(guò)的各種DSP函數(shù),當(dāng)然也支持其他的Cortex-M系列處理器。CMSIS-CORE 和 CMSIS-DSP庫(kù)都是免費(fèi)的,可以從GitHub (CMSIS 4, CMSIS 5)下載到,并被許多工具廠商支持。

7.2    處理器選擇

對(duì)大多數(shù)微控制器用戶(hù)來(lái)說(shuō),微控制器設(shè)備的選擇標(biāo)準(zhǔn)主要取決于成本和外設(shè)的支持情況。但是,你們中間的很多人可能是為下個(gè)芯片產(chǎn)品選擇處理器核心芯片設(shè)計(jì)者,這種情況下,處理器 本身會(huì)是考慮的焦點(diǎn)。

明顯的,在這樣的情況下,性能,芯片面積,功耗和成本會(huì)是至關(guān)重要的因素。同時(shí),還有各種其他的因素需要考慮。例如,如果你在開(kāi)發(fā)一款互聯(lián)網(wǎng)連接產(chǎn)品,你也許需要選擇有TrustZone安全擴(kuò)展和MPU的處理器,這樣你可以用TrustZone保護(hù)關(guān)鍵的安全特性數(shù)據(jù),運(yùn)行某些任務(wù)在非特權(quán)級(jí)別并用MPU來(lái)保護(hù)內(nèi)存空間。另一方面,如果你需要在某些方面認(rèn)證你的產(chǎn)品,Cortex-M23, Cortex-M33, Cortex-M3, Cortex-M4 和 Cortex-M7支持的ETM生成的指令跟蹤會(huì)對(duì)代碼覆蓋率認(rèn)證非常有幫助。

在其他的芯片設(shè)計(jì)領(lǐng)域,如果你正在設(shè)計(jì)可以運(yùn)行在能量采集設(shè)備供電的小傳感器,那么Cortex-M23 和 Cortex-M0+會(huì)是最好的選擇,因?yàn)樗麄兎浅P〔⑶易隽俗钕冗M(jìn)的功耗優(yōu)化。

7.3    生態(tài)系統(tǒng)

使用ARM Cortex-M系列處理器的關(guān)鍵優(yōu)勢(shì)之一是廣泛的成熟設(shè)備,開(kāi)發(fā)工具鏈和軟件庫(kù)的支持。目前有
-    超過(guò)15家微控制器廠商正在銷(xiāo)售基于ARM Cortex-M系列內(nèi)核的微控制器產(chǎn)品
-    超過(guò)10種開(kāi)發(fā)套件支持ARM Cortex-M系列處理器
-    40多家操作系統(tǒng)廠商的操作系統(tǒng)支持Cortex-M系列處理器

這給了你大量選擇,讓你可以獲得適合目標(biāo)應(yīng)用的最好的設(shè)備,開(kāi)發(fā)工具和中間件組合。

8    總結(jié)


性能,特性和芯片面積,功耗之間總是需要平衡。為此,ARM開(kāi)發(fā)了各種Cortex-M處理器,擁有不同級(jí)別的指令集特性,性能,系統(tǒng)和調(diào)試特性。本文介紹了Cortex-M處理器家族各種異同。

雖然存在這差別,但架構(gòu)的一致性和CMSIS-CORE標(biāo)準(zhǔn)化的APIs都讓Cortex-M系列處理器軟件有更好的移植性和可重用性。同時(shí),Cortex-M系列處理器非常方便使用。因此,Cortex-M系列處理器很快成為微控制器市場(chǎng)的最受歡迎的32位處理器架構(gòu)。

額外的資源

Cortex-M系列處理器產(chǎn)品信息可以查找https://developer.arm.com/products/processors/cortex-m
一系列有用的Cortex-M資源存在下面的網(wǎng)址https://community.arm.com/proces ... /cortex-m-resources

關(guān)于ARMv8-M TrustZone的其他的有用的資源可以查找ARM社區(qū)(community.arm.com)的“TrustZone for ARMv8-M Community”。ARM社區(qū)是為開(kāi)發(fā)者和開(kāi)發(fā)工具廠商,產(chǎn)品方案商之間提供的一個(gè)免費(fèi)的,開(kāi)放的,非正式的交流區(qū)

本文中出現(xiàn)的商標(biāo)是ARM有限公司(或其子公司)在歐盟和/或其他地方注冊(cè)的/或未注冊(cè)的商標(biāo)。保留所有權(quán)利。文中所有其他標(biāo)志可能是其他所有人的商標(biāo)。欲了解更多信息,請(qǐng)?jiān)L問(wèn)arm.com/about/trademarks。

本文地址:http://m.qingdxww.cn/thread-361479-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
bijinyi 發(fā)表于 2018-6-1 10:47:47
學(xué)習(xí)了!
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • 利用SAM E54 Xplained Pro評(píng)估工具包演示CAN轉(zhuǎn)USB橋接器以及基于CAN的主機(jī)和自舉程序應(yīng)用程序
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 手机免费看黄在线高清视频 | 国产香蕉网 | 91麻豆国产香蕉久久精品 | 天天爽夜夜爽一区二区三区 | 五月月色开心婷婷久久合 | 亚洲图片在线播放 | 国产午夜视频在线观看 | 狠狠综合视频精品播放 | 免费视频一区二区三区四区 | 国产精品自拍一区 | 亚洲影院在线播放 | 妈妈的朋友在线观看韩国 | 日韩欧免费一区二区三区 | 2022av视频 | 老外一级毛片免费看 | 欧美另类亚洲一区二区 | 国产成人精品亚洲日本在线 | 久久免费资源福利资源站 | 久热这里只精品99国产6_99 | 欧美大片日韩精品四虎影视 | 免费在线观看日韩 | 九九视频高清视频免费观看 | 午夜爱 | 男人天堂网站 | 成人黄色一级片 | 九一视频在线观看 | 色在线视频免费 | 欧美精品一区二区三区四区 | 欧美一区二区三区不卡片 | 亚洲精品动漫在线 | 欧美成人中文字幕 | 成人毛片18女人毛片免费96 | 午夜秒播 | 欧美视频在线观看一区 | 牛牛精品国内免费一区 | 色老头综合网 | 成视频年人黄网站免费动漫 | 粉嫩在线 | 国产欧美亚洲另类第一页 | 不卡中文字幕在线观看 | 辛芷蕾三级在线视频无删减 |