Armv8.1-M架構是針對現行的Armv8-M架構的強化版本。它帶來許多新功能,包括供信號處理與機器學習應用的M- 設定檔向量延伸(MVE)。針對Arm Cortex-M系列推出的MVE (M-Profile Vector Extension),則稱為Arm Helium技術。
本白皮書針對包括Helium在內的Arm8.1-M架構許多強化處,提供綜述。
Armv8.1-M架構是什麼?
Armv8.1-M是Armv8-M 架構的延伸,包括下列許多功能:
◆名稱為Helium的全新向量延伸指令集
◆針對迴路與分支的額外指令集強化 (低負擔分支延伸) 半精度浮點支援的指令
◆針對浮點單元(FPU) TrustZone 管理的指令集強化記憶體保護裝置(MPU)內全新的記憶屬性
◆除錯的強化,包括效能監視單元(PMU)、非特權除錯延伸,以及專注在信號處理與應用開發的額外除錯支援
◆可靠性、可用性與可服務性(RAS)的延伸
最後,此架構針對不可預測案例的規格,也已經完成清理。
M-Profile Vector Extension (MVE)是一個可以帶來更高信號處理能力的任選的架構延伸。供Arm Cortex-M處理器使用的MVE,則稱為Helium。
Helium:
MVE是一個可以帶來更高信號處理能力的任選的架構延伸。供Arm Cortex-M處理器使用的MVE,則稱為Helium。
Neon是針對A系列處理器的架構延伸,包括Arm Cortex-A與Neoverse,它可以賦予高效能的先進SIMD技術。
Helium與Neon雖然有類似之處,但Helium是從最基礎重新展開的新設計,可以為小型處理 器帶來高效的信號處理效能。它提供許多新的架構功能,可以強化嵌入式使用案例的計算效能,原因是它針對區域與電力進行優化,可為M系列架構帶來Neon的能力(針對Cortex-A的SIMD指令)。
Helium 與Neon在下列領域相當類似:
◆128-位元向量大小
◆使用浮點單元中的暫存器,成為向量暫存器
◆Helium 與Neon都可以使用某些向量處理指令
不過,Helium 與Neon仍有許多不同的關鍵處:
◆Helium設計上用來將所有可用之硬體的使用極大化,且與Neon相比,使用較少的向量暫存器
◆某些Helium的運作同時利用向量暫存器,以及純量暫存器庫中的暫存器
◆與Neon相比,Helium支援更多的資料類型
◆Helium 支援許多新功能,如迴路預測、巷道預測、複雜數學與分散-集中記憶存取
Helium 新增超過150個新的純量與向量指令。從架構上來看,同時也有許多的實施選項:
◆省略Helium選項 – 具備任選純量FPU (雙倍精度支援性也可任選)的Armv8.1-M整數核心
◆只支援向量整數的Helium,並具有任選的純量FPU (雙倍精度支援性也可任選)
◆具有向量整數+浮點(支援向量單倍精度與半精度)的Helium,並具備純量FPU(雙倍精度支援性也可任選)
有鑒於Helium涵蓋的指令數量極為龐大,這份檔案裡不可能全部交代。以下是除了向量處理能力以外的一些精華部份:
◆交錯與去交錯載入與儲存指令(VLD2/VST2 的跨步為2;VLD4/VST4 的跨步則為4)
◆向量集中載入與向量分散儲存–向量暫存器中的元件記憶體存取,且向量中每個元件都 有定址位移,並使用另一個向量暫存器的元件加以定義。這可以讓軟體應付任意的記憶體存取型樣,並可用來模仿常使用在信號處理、諸如循環定址等特別的定址模式。它也可以在各種資料處理任務中,協助加速陣列資料元件的非順序存取。
◆向量複合值處理支援整數(8位元、16位元與 32位元) 與浮點(32位元) – 例如 VCADD、VCMUL、VCMLA 指令。
◆巷道預測– 這部份將在後面談到
◆位元整數支援–這部份將在後面談到
為了降低處理器的面積與耗電,系統會再度使用FPU中的暫存庫來進行向量處理:
Helium的整數支援,可以讓8位元、16位元與32位元的定點資料計算效率更高。16與32位元 定點格式,在傳統信號處理應用中使用相當廣泛,譬如音效處理。8位元的定點格式對於機器學習處理可能相當重要,例如神經網路計算,以及影像處理。
Armv8.1-M處理器結合Helium與新型的低負擔分支延伸後,信號處理的效能與使用Armv7-M 與Armv8.0-M內的傳統SIMD指令集相比,好上好幾倍,同時可以讓處理器尺寸不致於過大,同時保有優異的能源效率。
Helium 可以讓Arm Cortex-M 處理器解決下列(但不侷限於)計算上的挑戰:
◆音響設備
◆感測器集線器(感測器融合)、情境集線器(環境感測)以及穿戴式裝置
◆關鍵字萃取及語音命令控制
◆電力電子學與控制 (信號處理)
◆通訊(如窄頻物聯網)
◆靜止圖像處理(如相機)
有了Helium許多之前使用帶有專屬DSP的Cortex-M處理器的應用,就可以將兩套處理器系統整併成單一處理器。
有了Helium,許多之前使用帶有專屬DSP的Cortex-M 處理器的應用,就可以將兩套處理器系統整併成單一處理器。這樣做有許多優點:
◆簡化軟體開發--僅需要單一的工具鏈與單一架構,降低兩套處理器系統間溝通的軟體負擔。
◆降低晶片設計的複雜性-僅需單一記憶體系統,因此可以帶來更快的單晶片系統設計週期,並降低成本。
也有可能取代嵌入式系統中,某些舊有的分立DSP產品:
◆Cortex-M處理器具有眾多各式各樣功能,與許多舊有DSP相比,可以用更高的效能執行一般非DSP的工作負荷。
◆Cortex-M處理器的高程式碼密度,讓替換此類DSP時,可以降低系統成本。
Helium 功能– 巷道預測:
Helium包括MVE功能,可為向量中的每個巷道提供條件式執行。此一優化的機制,稱為巷道 預測。為了要開啟此一功能,必需加入稱為向量預測狀態與控制暫存器(VPR)的新型、特殊用途暫存器,以便為每個巷道保持原有條件。此一暫存器內部的預測條件,會透過如向量比較(VCMP)等向量運作,進行更新。在設定完成條件旗標後,向量預測 (VPT)/向量預測集 (VPST) 指令可在次序列向量指令內,為每個巷道設定條件式執行(向量預測塊最高達4個指令,類似IF-THEN指令塊)。
VPR的狀態會使用位於延伸異常堆疊框內的一個保留字,以異常事件自動進行儲存與復原。
Helium 功能–大整數支援:
為了發揮128位元向量暫存器的最大功能,Helium同時也導入以MVE定義的大整數處理指令(VADC、VSBC 與VSHLC),它們可以與128位元、或更高的整數資料類型,一起鍊接運作。
低負擔分支延伸:
為了讓信號處理效率更高,Armv8.1-M導入低負擔迴路與額外的分支指令。簡單的迴路結構從WLS(while-loop-start)指令開始,它會規定迴路數與branch back位址,而此迴路結構在迴路結束(LE)指令出現時結束。
迴路第一次執行時,WLS與LE指令都會執行,而迴路位址則快取在處理器內,至於次順序迴路疊代則不必再次執行這兩個指令。迴路計數由鏈接暫存器(LR/r14)與迴路出口處理,同時 迴路計數器則達到零。
倘若在低負擔迴路期出現中斷,此迴路的位址快取將會清除掉,而LE指令則在完成中斷服務常式(ISR)回來後,重新執行。
把處理精度由單倍精度改為半精度後,處理器利用Helium技術,在同樣期間內可以處理兩倍的資料量。
除了while-loop-start(WLS),另外還有類似的do-loop-start(DLS)指令。do-loop總會執行迴路本體的第一個疊代,但while-loop在條件沒有被滿足時,會在第一個疊代前跳至迴路的最後。
另外還有一個可以帶來迴路尾預測的低負擔迴路指令(WLSTP與DLSTP)-倘若資料處理任務需要在N要件上執行,而N不是向量巷道寬度的倍數(例如,倘若要處理的元件是32位元,Helium每個向量指令可以處理四個巷道的元件),那麼迴路尾預測會讓最後的迴路疊代, 用條件式執行機制處理剩下的元件,而不會處理其它東西。使用WLSTP/DLSTP時,具備尾預測的迴路結束(LETP),必須用來標示此迴路的結束。WLSTP與DLSTP要標示處理中向量元件的大小時,必須要有尾置,且LR裡的值包含要處理元件的數量,而不是迴路的數量。
如果必要的話,一個稱為清除尾預測迴路(LCTP)的額外指令,可以讓帶尾預測的低負擔迴路提早終止。
不管Helium有無落實,WLD、DLS與LE指令都可用。迴路尾預測指令(WLSTP、DLSTP與 LETP) 都需要Helium這個選項。另外還有導入Armv8.1-M架構的額外分支微量指令,它們可以利用低負擔迴路導入的硬體,以便賦予更佳的分支效能。
其它Armv8.1-M 主線延伸強化:
Armv8.1-M 導入許多條件式的執行指令:
◆CINC–條件式增量
◆CINV– 條件式反轉
◆CNEG–條件式否定
◆CSEL–條件式選擇
◆CSET–條件式地將暫存器設為1
◆CSETM–條件式地將暫存器中的所有位元數設為1
◆CSINC–條件式選擇/增量
◆CSINV–條件式選擇/按位元反轉
◆CSNEG –條件式選擇/否定
Armv8.1-M 也新增加:
◆64位元算數與邏輯移位指令 (ASRL、LSLL、LSRL + 飽合/ 帶捨入 變體),這些指令中某些的平分變體也可用
◆帶正負與無符號捨入/32位元與64位元資料的飽合移位指令
◆這些唯有當Helium落實時,才可用。
浮點處理強化:
正如同Armv8.0-M架構,Armv8.1-M支援任選純量單倍精度(32位元)與雙倍精度(64位元)浮 點計算(支援所有FPv5指令)。此外,Armv8.1-M也支援:
◆任選純量半精度(16位元) 浮點
◆任選向量半精度 (16位元) 浮點 (Helium的一部份)
◆任選向量單倍精度 (32位元) 浮點(Helium的一部份)
半精度浮點支援,對於關鍵字萃取與語音命令控制應用的音訊預處理,相當有幫助。在這些應用中,音訊不需要很高的解析度,但卻非常需要良好的動態範圍支援。把處理精度由單倍精度改為半精度後,處理器利用Helium技術,在同樣期間內可以處理兩倍的資料量。使用半精度浮點格式,也可以幫助減少資料所需的記憶體大小需求(例如:過濾器係數)。
安全相關的強化– FPU 上下文保存/復原:
Armv8.0-M導入TrustZone安全延伸,可以讓新世代的保全解決方案在低成本、低電力嵌入式系統上,利用Cortex-M處理器實施。Armv8-M的TrustZone最關鍵的特性之一,就是它可以允許安全軟體(受保護的環境)與非安全軟體(一般環境)彼此間進行高效、直接的函數呼叫,而Armv8.1-M則持續在此一領域增加更多的強化。為了支援Armv8-M使用的TrustZone,Arm C語言延伸(ACLE)為需要的各種C語言編譯器功能進行定義,也就是Cortex-M安全延伸。需求之一,就是當非安全軟體呼叫安全API時,安全的函數結尾(安全API結尾插入C語言編譯器的編碼)需要清除浮點數控制與狀態暫存器(FPSCR) 裡的內容,以避免資料外洩至非安全方。這對安全固然很好,但對於非安全軟體也可能帶來問題,特別是有關ABI相容性-FPU組態的可能改變(例如:捨入模式組態)。
Armv8.1-M則增加了此一指令集的強化,以允許安全API導言的非安全FPSCR狀態(FPCXT_ NS)的上下文保存,以及結尾的上下文復原。強化的指令,包括FPU記憶體存取指令 (VLDR與VSTR)以及FPU暫存器存取指令(VMRS與VMSR)。要利用此一新功能,必須更新A與C語言的 編譯器。也因此,Armv8.1-M為了清除暫存庫(CLRM與VSCCLRM)裡的上下文,也增加了新的 指令。
安全相關的強化– MPU的Privileged eXecute Never (PXN) 屬性:
另一個安全強化,則位於記憶體保護裝置(MPU)裡面-一個名為特權永不執行(PXN)的新MPU 區域屬性。倘若MPU區域擁有PXN屬性集,且處理器試圖執行裡面帶有特權層級的程式碼, 記憶體管理故障例外則會被觸發,而MemManage Fault狀態暫存器裡的IACCVIOL位元數, 也會設成1
PXN的屬性位元,在MPU_RLAR (區域限制位址暫存器)以及其別名暫存器的第四位元內。保全與非保全MPU都可取用,且此一位元之前在Armv8.0-M環境中,被固定為0。.
PXN的屬性位元,在MPU_RLAR(區域限制位址暫存器)以及其別名暫存器的第四位元內。安 全的與非安全的MPU都可取用,且此一位元之前在Armv8.0-M環境中,被固定為0。
對於具有各軟體商提供之安全韌體元件、並擁有TrustZone功能的系統,這個功能特別有用。在那些案例中,部份的安全韌體元件可能不能完全信任,且必須限制成只能非特權執行。倘若如此系統實施Armv8.0-M,非特權軟體元件必須不能被允許擁有可以從非安全狀態呼叫出來的自己的安全入口點,因為這些軟體元件如果從非安全處置器模式直接呼叫出來,會在特權狀態下執行。也因此,入口點必須進行安全檢查且分開實施,但這也會增加軟體的負擔。有了在Armv8.1-M環境下可用的PXN屬性,這些非特權軟體元件都會有自己的安全API入口點, 而且只有當API被非安全處置器呼叫,MemManage訛誤例外處置器才會攔截,並將處理器切 換至非特權狀態,以便讓保全的API可被執行。
安全相關的強化 – 非特權除錯延伸:
對於具有第三方提供的安全軟體庫的系統,有些情況下軟體開發人員可能必須針對非特權軟體庫進行除錯,但他可能並未取得其它安全韌體元件商的充份信任。在Armv8.0-M環境中,倘若安全除錯功能開啟,軟體開發人員不管是特權或非特權軟體,都擁有完整的除錯存取,但在這個案例中,這卻是我們不想要的。儘管限制除錯存取是可能的(安全的特權軟體, 可以使用具有如CoreSight SDC-600等溝通管道除錯監視器,以便對安全的非特權人員提供有限的除錯存取,而毋需透過除錯存取埠來提供完整的安全除錯存取),但這需要更多的軟體負擔。
Armv8.1-M透過非特權的除錯延伸,提供全新的除錯賦能機制模式。當安全除錯功能關閉後, 安全的特權軟體可透過除錯鑑別控制暫存器(DAUTHCTRL),允許非特權的除錯延伸。
在應對數個安全韌體庫時,對應安全世界(例如:PSA中的安全的分區管理員)上下文交換的安全特權軟體,在不同的上下文切換時,應該針對DAUTHCTRL暫存器進行程式撰寫。例如,在下列的圖表中,軟體開發人員針對所有的非安全軟體與X程式庫(兩者皆為安全但非特權),擁有除錯存取權。處理器在運行此軟體時,停機要求是可以被接受的,但在運行程式庫管理員或Y及Z程式庫時則不行。
當處理器正在運行並具有非特權的除錯延伸,當前的安全狀態(除了處理器內部某些除錯元件)的記憶體除錯存取會被阻擋下來;但當非特權的除錯功能開啟,且處理器於非特權狀態下 停機時(DAUTHCTRL的UIDEN位元設為1),存取則會被允許。當非特權除錯於當下狀態下使 用時,除錯存取也會與該狀態中的MPU許可進行交互檢查。根據圖表中的範例:
◆軟體開發人員可以存取非安全的記憶體,並在處理器處於非安全狀態下,中止其運行。
◆唯有當處理器在運行X程式庫(DAUTHCTRL由上下文交換的程式庫管理員設定組態)時,
◆軟體開發人員才可以中止處理器,並且可以存取可透過X程式庫存取的記憶空間 (許可則依據安全MPU)。
對於安全與非安全世界(DAUTHCTRL內UIDEN與UIDAPEN的位元,則在兩個保全狀態間排成一行),非特權的除錯延伸都可用。若要支援非特權除錯,除錯工具與程式庫管理員必須進行更新。不過,非特權除錯是除錯架構的延伸,且既有的除錯功能(當舊有的鑑別控制信號已打開),並不受影響。
除錯強化 – 效能監視單元 (PMU):
在Armv8.1-M環境下,資料監視點與追蹤(DWT)獲得延伸,以便支援效能監視單元(PMU)功 能,這跟在Cortex-A處理器上出現的情況一樣。這可以允許先進的設定表示功能,包括分析快取命中/未中的能力。之前的設定表示功能仍然可用,但若要讓軟體開發人員可以發揮架構的最大功能,除錯器需要進行更新。
請注意,PMU使用與DWT分離、且不同的位址空間,不過設定表示計數器雖然實體上相同(位 址別名),但除錯工具不能同時使用PMU與舊有的DWT的設定表示。
除錯強化 – 信號處理應用功能:
Armv8.1-M同時也包括數個除錯架構的強化,更進一步強化信號處理應用的除錯效率。這些包括:
◆帶有位元遮罩的資料監視點,以便進行價值匹配。對於偵測信號範圍,特別有用。
◆帶有計數器的斷點–斷點只有在到達特定的某些計數值後才會觸發(停止)。當數位濾波器穩定後,這對於想要停止處理器,可能特別有用。
信賴度、可用性與可服務性(RAS)的延伸:
RAS延伸在Armv8-A架構下的Cortex-A處理器上已經推出。RAS是一套系統可靠性的三個面向:
◆可靠性、正確服務的持續
◆可用性、正確服務的備妥狀態
◆可服務性、可進行修改與維修的能力。RAS的延伸需求,原本來自伺服器/企業應用–RAS 技術降低非計劃中斷,原因是:
◎在造成應用或系統失效前,暫態誤差可被檢測出來,並進行改正
◎可找出故障的元件,並進行替換
◎故障可以事前預測,以便在計劃性保養時進行更換
Cortex-M處理器雖然大多部署於嵌入式與汽車等應用,但汽車與工業使用的功能性安全需求,也讓RAS成為次世代Cortex-M處理器順理成章的選擇,而RAS的許多技術也在功能性安全層面上有所裨益。
對於與Armv8.1-M一起設計的處理器,RAS延伸則涵蓋:
◆增加了錯誤同步屏障(ESB)指令
◆錯誤報告暫存器 (例如:Error Corrected Code快取的錯誤)
◆匯流排介面強化,例如匯流排轉移完整性檢查的同位或錯誤校正碼(ECC)信號,以及匯流排介面的毒化信號
Armv8.1-M同時也包括數個錯架構的強化,更進一步強化信號處理應用的除錯效率。
毒化信號對於嵌入式處理器,是全新的功能。其中之一共用的使用案例,就是處理資料快取中的毀壞資料:
1.快取列毀損(例如:因為電壓不穩定)。倘若錯誤超過一個位元,當位於毀損快取列的資料正在使用時,ECC將無法修正錯誤。
2.稍後,快取列出現移出,這會沖洗掉已毀損的資料。ECC錯誤在此階段會被偵測出,並觸發匯流排上的毒化側頻帶信號出現判斷提示。此毒化狀態將保存在記憶體系統中。在這個階段,故障例外不會發生。
3.當資料(帶有毒化狀態)被處理器讀取(可能是另一個處理器,或是系統上不同的匯流排主 控器),此毒化資訊會跟著傳送,並在處理器上觸發一個錯誤例外。
此一方式,有好幾個優點:
◆倘若毀損的資料沒有被任何匯流排主控器使用(例如:隨後被其它資料覆寫),就沒有必要觸發錯誤例外。
◆當資料正在使用、且與遭受影響的應用出現同步,錯誤例外則會被觸發,倘若毒化信號不可用,此例外必須在快取列移出時觸發,且處理器可運行完全不相關的應用,這會讓判斷哪一個應用受到影響,變得相當困難。
RAS延伸的使用,同時也可以在Cortex-M與Cortex-A處理器之間,帶來更佳的一致性;這對於必須應付具有Cortex-A 與Cortex-M等異質多處理器系統的錯誤情況的軟體,是一個優點。
軟體遷移至Armv8.1-M:
Armv8.1-M 處理器保有Arm Cortex-M 處理器之前具有的關鍵特性,包括:
◆使用簡單
◆快速且確定性的中斷回應時間
◆針對低耗電嵌入式應用完成優化
既有的Armv8-M軟體也可以在Armv8.1-M上運作,這讓軟體遷移相當簡便。就跟Armv8.0-M一樣,Armv8.1-M支援TrustZone安全延伸,可以解決已連接之產品如物聯網裝置的安全需求。
為了要利用這些新功能,需要各種相關的軟體更新:
◆C語言編譯器–編譯器(與binutils)需要進行更新,以便支援新的指令。Arm C語言延伸 (ACLE)需要為新的指令導入新的內在函數。保全API的導言與結尾,也應該加以強化,以便非保全FPCXT的保存與復原。編譯器販售商也可增加先進優化,以便利用低負擔迴路、新指令,並對可以運行Helium的系統提供自動向量化的潛在支援。
◆除錯工具–除錯器需要進行更新,以支援新功能,以及新的架構暫存器(例如VPR)。
◆RTOS–為了利用如新的MPU屬性等新的安全功能,作業系統需要進行更新。倘若裝置需要非特權除錯,我們同時也必須進行額外的更新,以便支援此一功能。
◆供Armv8-M使用的Arm信賴韌體–這需要進行更新,以便支援新的PXN MPU屬性與非特權除錯延伸。
◆應用程式碼–新的CMSIS-CORE與CMSIS-DSP程式庫將可取用。強化的CMSIS-DSP程式 庫將利用Helium指令集,提供顯著的效能提升。
總結
Helium生態系統具有廣泛的可用工具與軟體程式庫,可以帶來快速且低風險的開發。
AArmv8.1-M包括許多新的強化與優點。對於Armv8.1-M最重大的新增點,是M系列向量延伸(MVE)。Helium是供Arm Cortex-M系列使用的M系列向量延伸,它可以為小型、嵌入式應用帶來高效的信號處理與機器學習。它可以讓原本需要兩個處理器的情況,整併成只需一個單一晶片系統,並降低複雜性與成本。
Armv8.1-M包含其它對指令集、除錯功能的強化,並提升嵌入式系統的可靠性。此外,此架構具有內建TrustZone安全,設計上符合平台安全架構 (PSA)規格。
Helium生態系統具有廣泛的可用工具與軟體程式庫,可以帶來快速且低風險的開發。
(本文作者Joseph Yiu為Arm資深主任工程師)