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

Cortex-M處理器指令集

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

2.1 指令集簡介

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

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

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

       所有的Cortex-M 處理器都支持Thumb指令集。整套Thumb指令集擴(kuò)展到Thumb-2版本時(shí)變得相當(dāng)大,。但是,,不同的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架構(gòu),。這是一個(gè)只支持56條指令的小指令集,大部分指令是16位指令,,如圖3所示只占很小的一部分,。但是,此類處理器中的寄存器和處理的數(shù)據(jù)長度是32位的,。對于大多數(shù)簡單的I/O控制任務(wù)和普通的數(shù)據(jù)處理,,這些指令已經(jīng)足夠了。這么小的指令集可以用很少的電路門數(shù)來實(shí)現(xiàn)處理器設(shè)計(jì),,Cortex-M0 和 Cortex-M0+最小配置僅僅12K門,。然而,其中的很多指令無法使用高位寄存器(R8 到R12), 并且生成立即數(shù)的能力有限,。這是平衡了超低功耗和性能需求的結(jié)果,。

2.3 Cortex-M3指令集

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

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

· 硬件除法指令

· 乘加指令(MAC)

· 各種位操作指令

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

支持更豐富的指令導(dǎo)致了更大的面積成本和更高的功耗,。典型的微控制器,,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應(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 操作:

圖片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運(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è)周期中寫回到兩個(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級雙發(fā)射流水線,,可以獲得更高的性能。多數(shù)為Cortex-M4設(shè)計(jì)的軟件可以直接運(yùn)行在Cortex-M7上,。但是,,為了充分利用流水線差異來達(dá)到最好的優(yōu)化,軟件需要重新編譯,,并且在許多情況下,,軟件需要一些小的升級,以充分利用像Cache這樣的新功能,。

2.6 Cortex-M23指令集

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

· 硬件除法指令

· 比較和跳轉(zhuǎn)指令,,32位跳轉(zhuǎn)指令

· 支持TrustZone安全擴(kuò)展的指令

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

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

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

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

2.7 I Cortex-M33指令集

因?yàn)镃ortex-M33設(shè)計(jì)是非??膳渲玫模承┲噶钜彩强蛇x的,。例如:

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

· 單精度浮點(diǎn)運(yùn)算指令是可選的,,這些指令是基于FPv5的,并且比Cortex-M4多幾條,。

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

· 支持TrustZone安全擴(kuò)展的指令

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

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

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

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

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

表 4: 指令集特性總結(jié)

Cortex-M處理器指令集的最重要的特點(diǎn)是向上兼容。Cortex-M3的指令是Cortex-M0/M0+/M1的超集,。所以,理論上講,,如果存儲空間分配是一致的,,運(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處理器沒有浮點(diǎn)運(yùn)算單元配置選項(xiàng),但是處理器仍然可以利用軟件來做浮點(diǎn)數(shù)據(jù)運(yùn)算,。這也適用于基于Cortex-M4/M7/M33但是沒有配置浮點(diǎn)運(yùn)算單元的產(chǎn)品,。在這種情況下,,當(dāng)程序中使用了浮點(diǎn)數(shù),編譯工具包會在鏈接階段插入需要的運(yùn)行軟件庫,。軟件模式的浮點(diǎn)運(yùn)算需要更長的運(yùn)行時(shí)間,,并且會略微的增加代碼大小。但是,,如果浮點(diǎn)運(yùn)算不是頻繁使用的,,這種方案是適合這種應(yīng)用的。

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