您好, 登錄| 注冊|
論壇導航
您好, 登錄| 注冊|
子站:
產品/技術
應用分類

如何根據產品應用選擇正確的Cortex-M處理器?

2019-07-12 16:16 來源:互聯網 編輯:Janet

本文將通過比較Cortex-M系列處理器之間的產品特性,告訴你如何根據產品應用選擇正確的Cortex-M處理器。同時也會詳細地進行Cortex-M系列處理器的指令集和高級中斷處理能力,以及 SoC系統級特性,調試和追蹤功能和性能的比較,歡迎大家一起學習了解。

1、簡介

今天, ARM Cortex-M 處理器家族有8款處理器成員。除此之外,ARM的產品系列還有很多其他的處理器成員。對很多初學者,甚至某些芯片設計經驗豐富但是不熟悉ARM系列處理器的設計者來說,也是很容易混淆這些產品的。不同的ARM 處理器有不同的指令集,系統功能和性能。本文會深入展現Cortex-M系列處理器之間的關鍵區別,以及它們和ARM其他系列處理器的不同。

1.1ARM處理器家族

多年來, ARM已經研發了相當多的不同的處理器產品。 如下圖中(圖1): ARM 處理器產品分為經典ARM處理器系列和最新的Cortex處理器系列。并且根據應用范圍的不同,ARM處理器可以分類成3個系列。

Application Processors(應用處理器)–面向移動計算,智能手機,服務器等市場的的高端處理器。這類處理器運行在很高的時鐘頻率(超過1GHz),支持像Linux,Android,MS Windows和移動操作系統等完整操作系統需要的內存管理單元(MMU)。 如果規劃開發的產品需要運行上述其中的一個操作系統,你需要選擇ARM 應用處理器.

Real-time Processors (實時處理器)–面向實時應用的高性能處理器系列,例如硬盤控制器,汽車傳動系統和無線通訊的基帶控制。多數實時處理器不支持MMU,不過通常具有MPU、Cache和其他針對工業應用設計的存儲器功能。實時處理器運行在比較高的時鐘頻率(例如200MHz 到 >1GHz ),響應延遲非常低。雖然實時處理器不能運行完整版本的Linux和Windows操作系統, 但是支持大量的實時操作系統(RTOS)。

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

如何根據產品應用選擇正確的Cortex-M處理器?

圖 1: 處理器家族

表1總結了三個處理器系列的主要特征。

如何根據產品應用選擇正確的Cortex-M處理器?

表 1: 處理器特性總結

1.2Cortex-M 處理器家族

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

當然,性能不是選擇處理器的唯一指標。在許多應用中,低功耗和成本是關鍵的選擇指標。因此,Cortex-M處理器家族包含各種產品來滿足不同的需求:

如何根據產品應用選擇正確的Cortex-M處理器?

表 2: Cortex-M 處理器家族

不同于老的經典ARM處理器(例如,ARM7TDMI, ARM9), Cortex-M處理器有一個非常不同的架構。例如:

-僅支持ARM Thumb?指令,已擴展到同時支持16位和32位指令Thumb-2版本

-內置的嵌套向量中斷控制負責中斷處理,自動處理中斷優先級,中斷屏蔽,中斷嵌套和系統異常處理。

-中斷處理函數可以使用標準的C語言編程,嵌套中斷處理機制避免了使用軟件判斷哪一個中斷需要響應處理。同時,中斷響應速度是確定性的,低延遲的

-向量表從跳轉指令變為中斷和系統異常處理函數的起始地址。

-寄存器組和某些編程模式也做了改變。

這些變化意味著許多為經典ARM處理器編寫的匯編代碼需要修改,老的項目需要修改和重新編譯才能遷移到Cortex-M的產品上。軟件移植具體的細節記錄在ARM文檔:

ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers

https://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf

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

Cortex-M0, M0+, M3, M4 and M7之間有很多的相似之處,例如:

-基本編程模型  (章節 3.1)

-嵌套向量中斷控制器(NVIC)的中斷響應管理

-架構設計的休眠模式:睡眠模式和深度睡眠模式 (章節 4.1)

-操作系統支持特性 (章節 3.3)

-調試功能 (章節 6)

-易用性

例如,嵌套向量中斷控制器是內置的中斷控制器

如何根據產品應用選擇正確的Cortex-M處理器?

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

支持許多外圍設備的中斷輸入,一個不可屏蔽的中斷請求,一個來自內置時鐘(SysTick)的中斷請求(見章節 3.3)和一定數量的系統異常請求。NVIC處理這些中斷和異常的優先級和屏蔽管理。

NVIC以及異常處理模型的更多的內容在章節3.2描述。其他Cortex-M處理器間的異同點會在本文的其余部分講解。

2、Cortex-M處理器指令集

2.1指令集簡介

大多數情況下,應用程序代碼可以用C或其他高級語言編寫。但是,對Cortex-M 處理器支持指令集的基本了解有助于開發者針對具體應用選擇合適的Cortex-M處理器。指令集(ISA)是處理器架構的一部分,Cortex-M處理器可以分為幾個架構規范。

如何根據產品應用選擇正確的Cortex-M處理器?

表 3: Cortex-M 處理器ARM架構規范的規范

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

如何根據產品應用選擇正確的Cortex-M處理器?

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

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

Cortex-M0/M0+/M1處理器基于ARMv6-M架構。這是一個只支持56條指令的小指令集,大部分指令是16位指令,如圖3所示只占很小的一部分。但是,此類處理器中的寄存器和處理的數據長度是32位的。對于大多數簡單的I/O控制任務和普通的數據處理,這些指令已經足夠了。這么小的指令集可以用很少的電路門數來實現處理器設計,Cortex-M0 和 Cortex-M0+最小配置僅僅12K門。

然而,其中的很多指令無法使用高位寄存器(R8 到R12), 并且生成立即數的能力有限。這是平衡了超低功耗和性能需求的結果。

2.3Cortex-M3指令集

Cortex-M3處理器是基于ARMv7-M架構的處理器,支持更豐富的指令集,包括許多32位指令,這些指令可以高效的使用高位寄存器。另外,M3還支持:

查表跳轉指令和條件執行(使用IT指令)

硬件除法指令

乘加指令(MAC)

各種位操作指令

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

支持更豐富的指令導致了更大的面積成本和更高的功耗。典型的微控制器,Cortex-M3的電路門數是Cortex-M0 和 Cortex-M0+兩倍還多。但是,處理器的面積只是大多數現代微控制器的很小的一部分,多出來的面積和功耗經常不那么重要。

2.4Cortex-M4指令集

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

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

如何根據產品應用選擇正確的Cortex-M處理器?

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

在某些DSP運算中,使用SIMD可以加速更快計算16位和8位數據,因為這些運算可以并行處理。但是,一般的編程中,C編譯器并不能充分利用SIMD運算能力。這是為什么Cortex-M3 和 Cortex-M4典型benchmark的分數差不多。然而,Cortex-M4的內部數據通路和Cortex-M3的不同,某些情況下Cortex-M4可以處理的更快(例如,單周期MAC,可以在一個周期中寫回到兩個寄存器)。

2.5Cortex-M7指令集

Cortex-M7支持的指令集和Cortex-M4相似,添加了:

浮點數據架構是基于FPv5的,而不是Cortex-M4的FPv4,所以Cortex-M7支持額外浮點指令

可選的雙精度浮點數據處理指令

支持緩存數據預取指令(PLD)

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

2.6Cortex-M23指令集

Cortex-M23的指令集是基于ARMv8-M的Baseline子規范,它是ARMv6-M的超集。擴展的指令包括:

硬件除法指令

比較和跳轉指令,32位跳轉指令

支持TrustZone安全擴展的指令

互斥數據訪問指令(通常用于信號量操作)

16位立即數生成指令

載入獲取及存儲釋放指令(支持C11)

在某些情況下,這些增強的指令集可以提高處理器性能,并且對包含多個處理器的SoC設計有用(例如,互斥訪問對多處理器的信號量處理有幫助)

2.7I Cortex-M33指令集

因為Cortex-M33設計是非??膳渲玫?,某些指令也是可選的。例如:

DSP指令(Cortex-M4 和Cortex-M7支持的)是可選的

單精度浮點運算指令是可選的,這些指令是基于FPv5的,并且比Cortex-M4多幾條。

: Cortex-M33也支持那些ARMv8-M Mainline引入的新指令:

支持TrustZone安全擴展的指令

載入獲取及存儲釋放指令(支持C11)

2.8指令集特性比較總結

ARMv6-M, ARMv7-M 和 ARMv8-M架構有許多指令集功能特點, 很難介紹到所有的細節。但是,下面的表格(表4)總結了那些關鍵的差異。

如何根據產品應用選擇正確的Cortex-M處理器?

表 4: 指令集特性總結

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

雖然Cortex-M0/M0+/M1/M3/M23處理器沒有浮點運算單元配置選項,但是處理器仍然可以利用軟件來做浮點數據運算。這也適用于基于Cortex-M4/M7/M33但是沒有配置浮點運算單元的產品。在這種情況下,當程序中使用了浮點數,編譯工具包會在鏈接階段插入需要的運行軟件庫。軟件模式的浮點運算需要更長的運行時間,并且會略微的增加代碼大小。但是,如果浮點運算不是頻繁使用的,這種方案是適合這種應用的。

3、架構特性

3.1編程模型

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

如何根據產品應用選擇正確的Cortex-M處理器?

圖 5: 編程模型

BASEPRI寄存器允許程序阻止指定優先級或者低的優先級中斷和異常。對ARMv7-M來說這是很重要的,因為Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33有大量的優先級等級,而ARMv6-M 和 ARMv8-M Baseline只有有限的4個優先等級。FAULTMASK通常用在復雜的錯誤處理上(查看章節3.4)

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

如何根據產品應用選擇正確的Cortex-M處理器?

圖 6:  CONTROL 寄存器

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

如何根據產品應用選擇正確的Cortex-M處理器?

圖 7: PSR 差異

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

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

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

一些ARMv7-M/ARMv8-M Mainline系列的處理器使用的中斷和系統異常并不被ARMv6-M/ARMv8-M Baseline的產品支持,如圖8. 例如,Cortex-M0, M0+ 和M1的中斷數被限制在32個以下,沒有調試監測異常,錯誤異常也只限于HardFault(錯誤處理細節請參看章節3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7處理器可以支持到多達240個外圍設備中斷。Cortex-M33支持最多480個中斷。

另外一個區別是可以使用的優先等級數量:

ARMv6-M 架構 - ARMv6-M支持2級固定的(NMI 和 HardFault)和4級可編程的(由每個優先等級寄存器的兩個位表示)中斷/異常優先級。這對大多數的微控制器應用來說足夠了。

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

1 2 下一頁 

聲明:本網站原創內容,如需轉載,請注明出處;本網站轉載的內容(文章、圖片、視頻)等資料版權歸原網站所有。如我們采用了您不宜公開的文章或圖片,未能及時和您確認,避免給雙方造成不必要的經濟損失,請電郵聯系我們,以便迅速采取適當處理措施;歡迎投稿,郵箱:[email protected]。

相關閱讀

微信關注
技術專題 更多>>
面對禁令,看華為如何奮起反擊?
IFA2019 德國柏林國際電子消費展

頭條推薦

2019慕尼黑上海電子展
客服熱線
服務時間:周一至周五9:00-18:00
微信關注
免費技術研討會
獲取一手干貨分享

互聯網違法不良信息舉報

Reporting Internet Illegal and Bad Information
400-003-2006
14场胜负彩500w