《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > Cortex-M處理器指令集

Cortex-M處理器指令集

2017-04-19
作者:Joseph Yiu
來源:ARM
關鍵詞: Cortex-M ARM ISA 處理器

2.1 指令集簡介

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

UJ@1RR~THSH`8)CH](FKD3T.png

表 3: Cortex-M 處理器ARM架構規(guī)范的規(guī)范

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

圖片3_conew1.png

圖片4_conew1.png

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

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

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

2.3 Cortex-M3指令集

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

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

· 硬件除法指令

· 乘加指令(MAC)

· 各種位操作指令

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

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

2.4 Cortex-M4指令集

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

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

圖片5_conew1.png   

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

2.5 Cortex-M7指令集

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

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

· 可選的雙精度浮點數(shù)據(jù)處理指令

· 支持緩存數(shù)據(jù)預取指令(PLD)

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

2.6 Cortex-M23指令集

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

· 硬件除法指令

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

· 支持TrustZone安全擴展的指令

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

· 16位立即數(shù)生成指令

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

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

2.7 I 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架構有許多指令集功能特點, 很難介紹到所有的細節(jié)。但是,下面的表格(表4)總結了那些關鍵的差異。

FWB)FJ${]NF{L%0$BZ_94~V.png

6(F6{KW6~NQ$2P%S6X`]O67.png

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

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。