具更多指令集Cortex-M3效能大提升
更多的指令能透過幾種方式提升效能。例如像32位元Thumb指令能提供較大范圍的立即資料值、分支偏移、以及立即偏移以利資料記憶體的存取。另外,它還對DSP作業(yè)提供基本支援(像是幾個(gè)MAC指令,須用幾個(gè)時(shí)脈周期,另外還有飽和調(diào)整指令)。最后,32位元指令允許滾筒移位器和多個(gè)資料處理作業(yè)在同一個(gè)指令中操作。
然而,更大的指令集,代價(jià)就是矽元件面積與耗電都增加。在典型微控制器中,Cortex-M3的邏輯閘數(shù)量會(huì)比Cortex-M0或Cortex-M0+設(shè)計(jì)的邏輯閘多兩倍以上。但由于在多數(shù)現(xiàn)代微控制器中處理器,只占一小部分的矽元件空間,因此較大的矽元件空間以及功耗產(chǎn)生的影響也變得微不足道。
Cortex-M4處理器在許多層面相當(dāng)類似Cortex-M3,包括管線與程式開發(fā)模式。它除了支援Cortex-M3的所有功能,還額外支援DSP應(yīng)用方面的指令,像是SIMD、飽和演算法指令、以及各種能在單周期完成的MAC指令(相對于Cortex-M3的多周期指令以及有限部分),選配的浮點(diǎn)運(yùn)算單元能支援各種單精度浮點(diǎn)運(yùn)算。
Cortex-M4的SIMD作業(yè)能同時(shí)處理兩個(gè)16位元資料或4個(gè)8位元資料。舉例來說,圖2顯示QADD8以及QADD16作業(yè)。

圖2 SIMD指令范例:QADD8與QADD16
在某些DSP作業(yè)方面,由于計(jì)算能同時(shí)執(zhí)行,因此,SIMD能讓系統(tǒng)能更快運(yùn)算16位元與8位元資料。然而,在一般程式開發(fā)方面,C語言編譯器不太可能用到SIMD功能。這也導(dǎo)致Cortex-M3與Cortex-M4會(huì)產(chǎn)生大家常見的效能量測結(jié)果。然后,Cortex-M4的內(nèi)部資料通道和Cortex-M3并不相同,Cortex-M3的通道在一些案例中支援更快的資料處理(像是單周期MAC,能在一個(gè)周期內(nèi)將資料寫回兩個(gè)暫存器)。
Cortex-M7處理器的指令集支援類似Cortex-M4,另外還加入:
浮點(diǎn)運(yùn)算架構(gòu)方面,以FPv5為基礎(chǔ)而不是FPv4 (Cortex-M4所采用),因此額外加入幾個(gè)浮點(diǎn)運(yùn)算指令。
選配雙精度浮點(diǎn)運(yùn)算指令。
支援預(yù)載資料(PLD)指令,讓系統(tǒng)預(yù)先載入快取資料。
Cortex-M7的管線和Cortex-M4有極大差異。它擁有一個(gè)6階雙發(fā)送管線,發(fā)揮更高的效能。大多數(shù)針對Cortex-M4撰寫的軟體,都能在Cortex-M7重復(fù)使用,不過軟體必須重新編譯,才能針對管線特性的差異做最好的優(yōu)化,在一些案例中,軟體還需要一些微幅更新,才能利用像是快取在內(nèi)的新功能。
Cortex-M23處理器的指令集以ARMv8-M基線sub-profile為基礎(chǔ),同時(shí)也是ARMv6-M的超集合。額外增加的指令包括硬體除法指令;比較與分支、以及32位元分支指令;TrustZone安全延伸的指令;互斥存取指令(通常用在旗標(biāo)作業(yè));16位元立即生成資料指令;Load acquire與store release指令(配合C11版C語言標(biāo)準(zhǔn)支援)。
在某些情況,這些指令集的加強(qiáng)有助于提升效能。另外,對于內(nèi)含多個(gè)處理器的SoC設(shè)計(jì)也有助益(像是互斥存取在跨處理器的旗標(biāo)傳遞相當(dāng)有用)。
由于Cortex-M33的設(shè)計(jì)有極高的設(shè)定彈性,其中一些指令也屬于選配,例如像是:
DSP指令(包括Cortex-M4與Cortex-M7處理器都有支援)都屬于選配。
單精度浮點(diǎn)運(yùn)算的支援能力屬于選配。這項(xiàng)支援以FPv5為基礎(chǔ),比Cortex-M4浮點(diǎn)運(yùn)算支援能力多了幾項(xiàng)指令。
此外,Cortex-M33還支援ARMv8-M主線sub-profile,其中包括:
TrustZone安全延伸的指令。
Load Acquire與Store Release 指令(配合C11版C語言標(biāo)準(zhǔn)的支援能力)。
ISA功能比較總結(jié)
ARMv6-M、ARMv7-M、以及ARMv8-M架構(gòu)具有為數(shù)眾多的ISA特色,很難逐一詳細(xì)介紹,所以在表3匯整其中關(guān)鍵的差異。

Cortex-M處理器中ISA其中一項(xiàng)關(guān)鍵特性就是向上相容性。Cortex-M處理器所支援的指令,系為Cortex-M0/M0+/M1的超集合(Superset)。因此,理論上如果記憶體地圖相同,Cortex-M0/M0+/M1的二進(jìn)位映像檔就能直接在Cortex-M3上運(yùn)行。Cortex-M4/M7和其他Cortex-M處理器之間也存在這樣的相容性,Cortex-M0/M0+/M1/M3的指令能在Cortex-M4/M7上執(zhí)行。
雖然Cortex-M0/M0+/M1/M3/M23處理器沒有浮點(diǎn)運(yùn)算單元選項(xiàng),但可以用軟體來執(zhí)行浮點(diǎn)運(yùn)算。另外,本身沒有浮點(diǎn)運(yùn)算單元的Cortex-M4/M7/M33也可用軟體執(zhí)行浮點(diǎn)運(yùn)算。在這些處理器中,當(dāng)使用程式處理浮點(diǎn)運(yùn)算資料,編譯程式在鏈結(jié)階段會(huì)插入所需的執(zhí)行階段函式庫函數(shù)。使用軟體來執(zhí)行浮點(diǎn)運(yùn)算,除了運(yùn)算時(shí)間變長,程式碼長度也會(huì)略為增長。但如果沒有頻繁執(zhí)行浮點(diǎn)運(yùn)算,所開發(fā)的應(yīng)用也適合采用這種類型的處理器。
電子發(fā)燒友App




















評(píng)論