訂閱電子報∣ 友善列印字體大小 文章分享-Facebook 文章分享-Plurk 文章分享-Twitter
為什麼說Cortex-M是低功耗應用的首選
獲取產業訊息零時差!立即訂閱電電公會電子報。
雖然Cortex-M處理器家族目標瞄準效能光譜較低端的區域,但是和大多數微控制器(MCU)採用的其他典型處理器相比,Cortex-M的效能依然算相當強悍。舉例來說,像是許多高效能微控制器所採用的Cortex-M4與Cortex-M7處理器,其最高時脈頻率就高達400MHz。

當然在選擇處理器時效能並非唯一考量的因素。在許多應用中,低功耗與成本是顧客最關切的標準。因此,Cortex-M處理器家族納入各種類型的產品來因應不同的需求。
 
Cortex-M和傳統ARM處理器(像是ARM7TDMI、ARM9)大相徑庭之處,就是大幅改造的架構。舉例來說:
僅支援ARM Thumb指令,但在Thumb-2中,已延伸成能支援16位元與32位元元元指令。

中斷處理任務,由名為巢狀向量中斷控制器(NVIC)的內建中斷控制器執行,NVIC提供自動優先排程、中斷遮罩與巢狀配置、以及系統例外處理。

中斷處理常式(Handler)可寫成正規的C語言函式以及向量化中斷處理機制,不須使用軟體去判斷該服務哪個中斷。而中斷的回應則屬於決定性,並具有低延遲特性。

中斷向量表方面,從分支指令改成中斷的起始位元址以及系統例外處理常式。

暫存器區塊(bank)以及程式開發模式的部分細節亦有所變動。

這些改變意謂許多針對傳統ARM處理器撰寫的組合語言程式碼必須進行修改,而舊的Projects檔在移植到Cortex-M時必須進行修改與重新編譯。

指令集概述
在大多數情況中,軟體的程式碼多以C或其他高階語言撰寫。不過,如果對Cortex-M處理器所支援的指令集有基本的認識,能説明判斷特定任務須要用到哪一種Cortex-M處理器。指令集架構(ISA)是處理器架構的一部分,Cortex-M處理器能區分成幾種架構類型。
 
所有Cortex-M處理器都支援名為Thumb的指令集。在Thumb-2技術釋出後,整個Thumb指令集就變得相當龐大。然而,不同Cortex-M處理器支援Thumb ISA裡的指令子集合也不一致。
 
Cortex-M0/M0+/M1處理器以ARMv6-M架構為基礎,其指令集很小,只有56個指令,其中大多數為16位元,如圖1中較小的橢圓形。不過,處理器中的暫存器以及處理的資料依然為32位元元。對於大多數簡單的I/O控制作業以及生成資料處理,這樣的小指令集就已經足夠應付。由於指令集很小,因此僅須用少量的邏輯閘就能建置處理器,像是Cortex-M0與Cortex-M0+處理器僅需1.2萬個邏輯閘。不過,這些指令當中有一些不能用有高位暫存器(R8到R12),而且在即時生成資料方面的能力相當有限。這主要是為了在超低功耗處理器設計以及效能之間作折衷。

Cortex-M3處理器是以ARMv7-M架構為基礎,並支援大上許多的指令集,當中有許多屬於32位元元元指令,讓系統能更有效率地運用高位暫存器。此外,它還支援向量表分支指令與條件執行(使用IT指令)、硬體除法指令、乘加(MAC)運算、可變位元欄位作業。

具更多指令集Cortex-M3效能大提升
更多的指令能透過幾種方式提升效能。例如像32位元元元Thumb指令能提供較大範圍的立即資料值、分支偏移、以及立即偏移以利資料記憶體的存取。另外,它還對DSP作業提供基本支援(像是幾個MAC指令,須用幾個時脈週期,另外還有飽和調整指令)。最後,32位元元元指令允許滾筒移位元器和多個資料處理作業在同一個指令中操作。

然而,更大的指令集,代價就是矽元件面積與耗電都增加。在典型微控制器中,Cortex-M3的邏輯閘數量會比Cortex-M0或Cortex-M0+設計的邏輯閘多兩倍以上。但由於在多數現代微控制器中處理器,只占一小部分的矽元件空間,因此較大的矽元件空間以及功耗產生的影響也變得微不足道。

Cortex-M4處理器在許多層面相當類似Cortex-M3,包括管線與程式開發模式。它除了支援Cortex-M3的所有功能,還額外支援DSP應用方面的指令,像是SIMD、飽和演算法指令、以及各種能在單週期完成的MAC指令(相對於Cortex-M3的多週期指令以及有限部分),選配的浮點運算單元能支援各種單精確度浮點運算。

Cortex-M4的SIMD作業能同時處理兩個16位元元資料或4個8位元元資料。舉例來說,顯示QADD8以及QADD16作業。
 
在某些DSP作業方面,由於計算能同時執行,因此,SIMD能讓系統能更快運算16位元與8位元元資料。然而,在一般程式開發方面,C語言編譯器不太可能用到SIMD功能。這也導致Cortex-M3與Cortex-M4會產生大家常見的效能量測結果。然後,Cortex-M4的內部資料通道和Cortex-M3並不相同,Cortex-M3的通道在一些案例中支援更快的資料處理(像是單週期MAC,能在一個週期內將資料寫回兩個暫存器)。

Cortex-M7處理器的指令集支援類似Cortex-M4,另外還加入:
浮點運算架構方面,以FPv5為基礎而不是FPv4 (Cortex-M4所採用),因此額外加入幾個浮點運算指令。
選配雙精度浮點運算指令。

支援預載資料(PLD)指令,讓系統預先載入快取資料。

Cortex-M7的管線和Cortex-M4有極大差異。它擁有一個6階雙發送管線,發揮更高的效能。大多數針對Cortex-M4撰寫的軟體,都能在Cortex-M7重複使用,不過軟體必須重新編譯,才能針對管線特性的差異做最好的優化,在一些案例中,軟體還需要一些微幅更新,才能利用像是快取在內的新功能。

Cortex-M23處理器的指令集以ARMv8-M基線sub-profile為基礎,同時也是ARMv6-M的超集合。額外增加的指令包括硬體除法指令;比較與分支、以及32位元元元分支指令;TrustZone安全延伸的指令;互斥存取指令(通常用在旗標作業);16位元元元立即生成資料指令;Load acquire與store release指令(配合C11版C語言標準支援)。
在某些情況,這些指令集的加強有助於提升效能。另外,對於內含多個處理器的SoC設計也有助益(像是互斥存取在跨處理器的旗標傳遞相當有用)。

由於Cortex-M33的設計有極高的設定彈性,其中一些指令也屬於選配,例如像是:
DSP指令(包括Cortex-M4與Cortex-M7處理器都有支援)都屬於選配。

單精確度浮點運算的支援能力屬於選配。這項支援以FPv5為基礎,比Cortex-M4浮點運算支援能力多了幾項指令。

此外,Cortex-M33還支援ARMv8-M主線sub-profile,其中包括:
TrustZone安全延伸的指令。

Load Acquire與Store Release 指令(配合C11版C語言標準的支援能力)。
ISA功能比較總結
ARMv6-M、ARMv7-M、以及ARMv8-M架構具有為數眾多的ISA特色,很難逐一詳細介紹,所以在表3彙整其中關鍵的差異。
 
Cortex-M處理器中ISA其中一項關鍵特性就是向上相容性。Cortex-M處理器所支援的指令,系為Cortex-M0/M0+/M1的超集合(Superset)。因此,理論上如果記憶體地圖相同,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也可用軟體執行浮點運算。在這些處理器中,當使用程式處理浮點運算資料,編譯程式在鏈結階段會插入所需的執行階段函式庫函數。使用軟體來執行浮點運算,除了運算時間變長,程式碼長度也會略為增長。但如果沒有頻繁執行浮點運算,所開發的應用也適合採用這種類型的處理器。
訂閱電子報 友善列印 字體大小:
獲取產業訊息零時差!立即訂閱電電公會電子報。