久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 行業百科 > 提高嵌入式應(ying)用性價比 該如何選擇適(shi)處理器核心架構

提高嵌入式應用性價比 該如何選擇適處理器核心(xin)架構 時間:2016-05-23      來(lai)源:未(wei)知

現階(jie)段(duan)半導體芯片商多采用ARM的(de)(de)處理(li)器核(he)心,來制造旗下處理(li)器或微(wei)控制器等產品。ARM的(de)(de)核(he)心可分(fen)為(wei)A、R、M三個系列(lie),各(ge)有不同性(xing)能(neng),因此(ci)芯片商也須(xu)依各(ge)自瞄準的(de)(de)市場、功耗需求和作業系統等差異,來選擇較適合的(de)(de)核(he)心,藉以(yi)制造性(xing)價比(bi)佳(jia)的(de)(de)產品。

現(xian)今嵌入(ru)(ru)式(shi)應用內須用到(dao)諸多處(chu)理器,因此半導體廠(chang)商也積極(ji)投入(ru)(ru)布局,舉例來說安(an)謀(ARM)的(de)處(chu)理器便廣泛應用于嵌入(ru)(ru)式(shi)領域。ARM Cortex-A系(xi)列(lie)處(chu)理器經(jing)常使用在需(xu)要(yao)多功能作業系(xi)統(Rich OS)或高(gao)效能的(de)應用中,Cortex-R系(xi)列(lie)處(chu)理器擁有較佳的(de)即(ji)時效能,Cortex-M系(xi)列(lie)處(chu)理器則用于微控制器等類(lei)型的(de)小型應用。

目前 采用(yong)Cortex-M的(de)產品(pin)范圍(wei)涵蓋非常多(duo)樣化的(de)選項(xiang),從外(wai)型設(she)計小(xiao)巧、功耗(hao)低(di)的(de)Cortex-M0,其(qi)使用(yong)在(zai)深(shen)層嵌入、對成本敏感的(de)應用(yong)如(ru)智慧(hui)型感測器 節(jie)點上,到(dao)應用(yong)在(zai)大(da)眾市場的(de)微控制(zhi)器的(de)Cortex-M3及Cortex-M4。佳(jia)的(de)則是Cortex-M7,其(qi)具備(bei)更(geng)高(gao)的(de)效能,可(ke)以執行密集(ji)運算的(de)工 作負(fu)載,像是訊號處理等。

Cortex-M處理(li)器采用的(de)ARMv6-M和ARMv7-M架構,是(shi)更(geng)為(wei)簡易且(qie)邏輯化的(de)程式(shi)設計模型,專為(wei)簡易使用所設計。處理(li)器核心本身在設定(ding)上較(jiao)彈性,能夠用于更(geng)多樣(yang)化的(de)實作。

雖然(ran)Cortex-M核心的(de)簡易(yi)性(xing)對大(da)部分的(de)嵌入式(shi)應(ying)用來說是較(jiao)佳的(de)優勢,但仍有其他應(ying)用需(xu)要(yao)更多功(gong)能(neng)、效(xiao)能(neng)更高的(de)環境。此(ci)(ci)類應(ying)用同樣(yang)重視效(xiao)率和(he)耗電(dian)量,且 經常需(xu)要(yao)Linux或Android等(deng)類型(xing)的(de)平(ping)臺作(zuo)業(ye)系統(tong)。采(cai)用此(ci)(ci)類型(xing)的(de)作(zuo)業(ye)系統(tong),則能(neng)夠使用應(ying)用范圍更廣、更具多功(gong)能(neng)且復雜的(de)軟體生態系統(tong),開發新的(de)契 機。

Cortex-M處理器的(de)(de)設(she)計并非針對這些(xie)高階的(de)(de)作業系統,因此未包含(han)其所需要的(de)(de)特定(ding)必要功能。舉例來說(shuo),這些(xie)處理器未具(ju)備記憶 體管(guan)理單元(MMU),在(zai)無法支援(yuan)虛擬(ni)存儲器環境(jing)的(de)(de)情(qing)況下,當然也(ye)就不支援(yuan)這一類(lei)的(de)(de)作業系統。若某(mou)項應用(yong)需要更(geng)多功能的(de)(de)作業環境(jing),首選(xuan)的(de)(de)通(tong)常是較高效率的(de)(de) Cortex-A核心。這些(xie)核心提供(gong)平臺作業系統所需的(de)(de)較進階功能,同時仍相當重視(shi)功耗,整體來說(shuo)是更(geng)為高階且彈(dan)性化的(de)(de)程式設(she)計模(mo)型。

有鑒(jian)于(yu)此,ARM Cortex-A處理器多部署(shu)于(yu)各種深度嵌入(ru)的應用,尤(you)其(qi)是在需要Linux或其(qi)他多功能(neng)作業系統的市場。

圖1顯示(shi)Cortex-A處理(li)(li)器目前的(de)應用(yong)范圍,重點在于其中(zhong)的(de)較低功耗核心。本文以此一系列(lie)中(zhong)的(de)新型Cortex-A32處理(li)(li)器為(wei)主。

 

如何選擇適處理器核心架構提高嵌入式應用性價比?

 

圖1 Cortex-A處理器與架構

Cortex- A32是(shi)(shi)進入Cortex-A系(xi)列較理想(xiang)的(de)入門(men)款,可(ke)用于需要多功(gong)能作(zuo)業(ye)系(xi)統(tong)環境,或從Cortex-A處(chu)(chu)理器(qi)(qi)所提(ti)供(gong)的(de)效能及功(gong)能中獲益的(de)應用。該處(chu)(chu)理器(qi)(qi) 為目(mu)前擁有(you)低功(gong)耗(hao)的(de)ARMv8-A處(chu)(chu)理器(qi)(qi),為穿戴式裝置(zhi)、物聯網(IoT)和多功(gong)能嵌(qian)入式應用,尤其是(shi)(shi)需要Linux這一類平臺作(zuo)業(ye)系(xi)統(tong)之(zhi)應用的(de)較佳選 擇。

搶攻(gong)32位元(yuan)運算市(shi)場 A系列(lie)新(xin)處理器功耗更低

Cortex-A32在ARM架構(gou)(gou)中扮演著獨特的角色(se)。其采用(yong)ARMv8-A架構(gou)(gou),但(dan)僅支援32位元的運算。圖2顯示Cortex-A32如(ru)何融入ARMv8-A架構(gou)(gou)設定,以及(ji)與Cortex-A35的差異。

 

Cortex-A32與Cortex-A35比較

 

圖2 Cortex-A32與Cortex-A35比較(jiao)

Cortex- A35同時采用32位元(yuan)的(de)(de)AArch32和64位元(yuan)的(de)(de)AArch64兩種執行(xing)狀(zhuang)態(tai),能夠完(wan)整提供ARMv8-A架構的(de)(de)64位元(yuan)功(gong)(gong)能。另一方 面(mian),Cortex-A32則只采用32位元(yuan)的(de)(de)AArch32執行(xing)狀(zhuang)態(tai)。移除了64位元(yuan)的(de)(de)功(gong)(gong)能以(yi)后,不僅體積縮減,對于不需要64位元(yuan)功(gong)(gong)能的(de)(de)使(shi)用來說,更(geng)能 降低其功(gong)(gong)耗。盡(jin)管嵌入式(shi)領域(yu)中(zhong)有許多應(ying)用都可(ke)從64位元(yuan)的(de)(de)執行(xing)中(zhong)獲益,但有許多仍(reng)著重在(zai)32位元(yuan),且將在(zai)可(ke)預(yu)見的(de)(de)未來保持現況,而這些(xie)應(ying)用便是 Cortex-A32的(de)(de)目(mu)標市場。

AArch32執(zhi)行狀態為更早期的(de)(de)Cortex-A處理器(qi)所采用的(de)(de)ARMv7-A架構的(de)(de)進化版。據了(le)解,Cortex-A32即(ji)使不具備64位元(yuan)的(de)(de)功能,但仍提供某些重(zhong)要(yao)的(de)(de)強化,因此功耗還是優于(yu)Cortex-A7和Cortex-A5。

此(ci)外(wai),對于仍采(cai)用這些舊版(ban)ARM處理器的延伸(shen)設計,或以此(ci)相同市場為目標的新設計而言,Cortex-A32仍是理想選擇。

AArch32優于ARMv7-A的特點包括:

.新(xin)增(zeng)許(xu)多新(xin)指令,加(jia)密演算功能效能更佳

.新(xin)加入Load Acquire和Store Release指令,提供(gong)更有效率的存(cun)儲(chu)器(qi)排序功(gong)能,符合新(xin)的C++11存(cun)儲(chu)器(qi)排序語法

.額外的純量與SIMD浮點指(zhi)令

.廣泛的系統控制指令

這些額外功能(neng)提供(gong)更佳(jia)的效能(neng),更勝舊版32位(wei)元ARMv7-A處理器。

Cortex-A32匯流(liu)排介(jie)面加入了先進同步擴展(ACE),因此能(neng)通過Cortex-A32來建構完(wan)全同步的(de)多重處理(li)系統,提高所(suo)需要的(de)更(geng)高效能(neng)。

假如(ru)空間或耗電量(liang)為(wei)主要的(de)限制,Cortex-A32也有(you)變體版本,特別針對單處理器應用佳化,省(sheng)略互連邏輯,以節(jie)省(sheng)更多的(de)功耗。

Cortex-A32透過Large Physical Address Extension(LPAE)擴大了(le)定(ding)址實體存儲器空間(jian),超越Cortex-A5所提供(gong)(gong)的32位(wei)(wei)元(4GB)空間(jian),可提供(gong)(gong)40位(wei)(wei)元定(ding)址空間(jian)。

核心本身也整合其他多項有(you)助于改善功耗的(de)進階功能,包括更(geng)彈性(xing)化的(de)電源管理、更(geng)細微(wei)分布的(de)電力區域,并使用保存功率閘級。

ARMv7-M與ARMv8-A AArch32架構比較

下文(wen)將比(bi)較ARMv7-M與ARMv8-A AArch32的架構特色(se)與差異。

ARMv7-M架構特色

ARM Cortex-M處理器系采用(yong)ARMv7-M架構設定(ding),Cortex-M0和Cortex-M0+則采用(yong)類似的ARMv6-M架構。

此架(jia)構(gou)(gou)與先前的(de)ARM架(jia)構(gou)(gou)有許(xu)多共同的(de)特色,且經(jing)過特殊(shu)設計(ji),以支援深層嵌入(ru)、低成本的(de)即時微控制(zhi)器應用(yong)。所(suo)以移除了舊(jiu)架(jia)構(gou)(gou)的(de)許(xu)多功(gong)能,但(dan)也加(jia)入(ru)新(xin)功(gong)能,制(zhi)造出一(yi)個(ge)更(geng)像類微控制(zhi)器的(de)程式設計(ji)模(mo)型。

舉(ju)體來說,從(cong)舊型處理(li)器(像是常見的ARM7TDMI)的變(bian)動可總結如下:

.作(zuo)業模(mo)(mo)式(shi)(shi)的(de)數(shu)量從七個以上(shang)大幅(fu)減少(shao)到兩個:Handler模(mo)(mo)式(shi)(shi)和Thread模(mo)(mo)式(shi)(shi)。其中一項模(mo)(mo)式(shi)(shi)(Handler模(mo)(mo)式(shi)(shi))具(ju)選擇性優先權(quan)限(xian)。

.暫(zan)存(cun)(cun)器檔經過簡化。雖然開放供程式設計人(ren)員使用(yong)的暫(zan)存(cun)(cun)器基本上仍同樣是十(shi)六個(ge)(ge),舊型(xing)架構中所用(yong)的備份暫(zan)存(cun)(cun)器復制(zhi)機制(zhi)也大(da)幅減少,因此只有Stack Pointer(r13)會在兩個(ge)(ge)作業(ye)模(mo)式中加以暫(zan)存(cun)(cun)。備份暫(zan)存(cun)(cun)器為選擇性使用(yong),甚至可以省略(lve)。

. 大的(de)(de)(de)變(bian)動在(zai)(zai)(zai)于(yu)異(yi)常模式(shi)。由于(yu)一般的(de)(de)(de)微控制(zhi)器應用(yong)可能會有(you)大量(liang)的(de)(de)(de)芯片(pian)周(zhou)邊中斷(duan),所(suo)以標準(zhun)的(de)(de)(de)巢狀向量(liang)中斷(duan)控制(zhi)器(Nested Vectored Interrupt Controller, NVIC)規(gui)(gui)格會包含在(zai)(zai)(zai)架構中,所(suo)有(you)的(de)(de)(de)Cortex-M核(he)心均包含該(gai)規(gui)(gui)格。同樣(yang)地(di),異(yi)常處(chu)理模式(shi)已(yi)在(zai)(zai)(zai)包含處(chu)理常式(shi)位(wei)址的(de)(de)(de)向量(liang)表(biao)上(shang)加以標準(zhun)化。內(nei)容的(de)(de)(de)儲存與 回(hui)復(fu)作(zuo)(zuo)(zuo)業完(wan)全在(zai)(zai)(zai)硬(ying)體(ti)上(shang)實(shi)作(zuo)(zuo)(zuo),簡化寫入中斷(duan)處(chu)理的(de)(de)(de)軟體(ti)工作(zuo)(zuo)(zuo),如此可在(zai)(zai)(zai)實(shi)作(zuo)(zuo)(zuo)時達到非常低且可預測(ce)的(de)(de)(de)中斷(duan)延遲時間(jian)。

.ARMv7-M定義(yi)選(xuan)擇(ze)性的(de)存(cun)儲(chu)器保護架(jia)(jia)構(gou)(gou),該架(jia)(jia)構(gou)(gou)與某(mou)些舊型ARM處理器所用的(de)架(jia)(jia)構(gou)(gou)類(lei)似。裸機系統或在即(ji)時作業系統(RTOS)下運作的(de)系統由(you)于通(tong)常(chang)不(bu)需要虛擬存(cun)儲(chu)器,因(yin)此不(bu)支援虛擬存(cun)儲(chu)器。

.為支援各種(zhong)即(ji)時作業(ye)系統的運(yun)作和執行(xing),有些標準的芯片周邊也會(hui)在架構中(zhong)加以定義(yi),如SysTick Timer。

.為(wei)縮小處理器核心(xin)的大(da)小,ARMv7-M處理器的運行限縮到只有Thumb指令集(包含(han)Thumb-2延(yan)伸),僅執行小的子集,進而實現小的核心(xin)。

ARMv8-A AArch32特色(se)

Cortex- A處理器采用(yong)ARMv7-A或ARMv8-A架構設(she)定。ARMv8-A處理器提(ti)供AArch32執行(xing)狀(zhuang)態(tai),為32位元ARMv7-A架構的(de)向下相(xiang)容(rong)演化(hua) 版。這些(xie)架構可實現專門(men)設(she)計用(yong)來支(zhi)援Linux、Android、Windows等平臺作業系統的(de)功能(neng),而這些(xie)系統需(xu)要虛擬存儲器環境。

其與(yu)Cortex-M處理(li)器核心截然(ran)不同的特定功能包括:

. 有七(qi)個(ge)以上的(de)作業模(mo)(mo)式:User、Supervisor、阻斷(duan)要求(qiu)(IRQ)、快速中(zhong)斷(duan)(Fast Interrupt, FIQ)、Undefined、Abort、System。每一模(mo)(mo)式皆用(yong)于處理(li)特(te)定類型事件(例如(ru)IRQ模(mo)(mo)式便是設計(ji)用(yong)于處理(li)IRQ中(zhong)斷(duan))。 AArch32亦(yi)支援(yuan)Hyp和Monitor這兩個(ge)額外的(de)模(mo)(mo)式,這兩個(ge)模(mo)(mo)式分別用(yong)于虛(xu)擬化及ARM TrustZone技術。

.除了(le)可(ke)用的(de)登錄數(shu)量相(xiang)(xiang)同(16),AArch32還有許(xu)多(duo)與上述(shu)作業模(mo)式(shi)相(xiang)(xiang)關的(de)“備份”暫(zan)存器(qi)。進入相(xiang)(xiang)關的(de)作業模(mo)式(shi)時(shi),這些暫(zan)存器(qi)將取代User模(mo)式(shi)下的(de)暫(zan)存器(qi)。如此(ci)可(ke)簡化許(xu)多(duo)異常處理工作,但也表示機器(qi)的(de)管理和初始化工作將增加。

.其(qi)(qi)異(yi)常模式(shi)極為不(bu)同,其(qi)(qi)原(yuan)型存在于早(zao)的(de)ARM架構裝置中。具體來說(shuo),向(xiang)量表包含一組可執行的(de)指令集(ji),而不(bu)是(shi)位(wei)址,且內容(rong)的(de)儲存與回復(fu)Restore工(gong)作(zuo)幾乎完全交給程(cheng)式(shi)設計人員執行。

.大的差異是加入了(le)存儲(chu)器管(guan)理單元,可執行(xing)核(he)心所核(he)發之(zhi)虛擬位址,以及存儲(chu)器系(xi)(xi)統(tong)所需要的實(shi)體位址間的轉譯。如此便能(neng)實(shi)作完(wan)全的隨選分頁(ye)虛擬存儲(chu)器環境,以供Linux等平(ping)臺作業系(xi)(xi)統(tong)使(shi)用(yong)。

ARMv7-M與AArch32的差(cha)異

從采(cai)用(yong)Cortex-M處(chu)理器的系統(tong)轉(zhuan)換到采(cai)用(yong)Cortex-A32處(chu)理器時,有許(xu)多新功(gong)能值得(de)關注。

雖然這兩(liang)種架構有許多(duo)(duo)類似之(zhi)處(如備份暫存器和指令集之(zhi)間有許多(duo)(duo)相同(tong)點),但重(zhong)要的是(shi)ARMv8-A架構的AArch32執行狀態所含的許多(duo)(duo)功能,均(jun)是(shi)以舊型架構的功能為基礎。

接下來說明AArch32所具備,但為ARMv7-M所無(wu)或差(cha)異(yi)極大的功能。

作業模式

如 圖(tu)3所示,ARMv7-M只定(ding)義(yi)兩個作業模式(shi):Thread模式(shi)與Handler模式(shi)。若(ruo)無需要,Handler模式(shi)可選擇(ze)性取消(xiao)優(you)先權(quan)限(xian),雖(sui)然這(zhe)項功能 未(wei)必須要在(zai)軟(ruan)體內使用(yong)(yong)。Handler模式(shi)適用(yong)(yong)于(yu)處理(li)異(yi)常,Thread模式(shi)則用(yong)(yong)于(yu)使用(yong)(yong)者處理(li)程(cheng)序。這(zhe)兩個模式(shi)轉換基(ji)本上是自(zi)動(dong)的,會(hui)在(zai)特定(ding)事件下發生, 如圖(tu)3所示。例如,發生異(yi)常時會(hui)自(zi)動(dong)進(jin)入Handler模式(shi),異(yi)常處理(li)完成時則會(hui)退出Handler模式(shi)。SVCall指令為(wei)主要的方(fang)法,軟(ruan)體用(yong)(yong)其來進(jin)入 Handler模式(shi)(也(ye)可將啟用(yong)(yong)的IRQ設定(ding)為(wei)待處理(li)狀態(tai),以(yi)執行Handler)。

 

ARMv7-M作業模式

 

圖3 ARMv7-M作業模式

圖4則顯示AArch32執行狀態支援的作業模式。與ARMv7-M相較(jiao),AArch32有(you)七個基(ji)本模式,其中五個指定用于處理特定異(yi)常(chang)。例如,取(qu)得FIQ異(yi)常(chang)時會進入(ru)FIQ模式;若(ruo)發(fa)生未定義(yi)指令(ling)等情形,會進入(ru)Undef模式。

 

AArch32作業模式

 

圖4 AArch32作業模式

模式的轉換(huan)通常為自動發(fa)生,但也可在Current Program Status Register(CPSR)中寫(xie)入Mode欄位,用(yong)軟(ruan)(ruan)體控制來完整切(qie)換(huan)模式。其細節描(miao)述如下。與SVCall指令類似,SVC指令用(yong)于讓軟(ruan)(ruan)體引(yin)發(fa)SVC異常并進入SVC模式。

圖(tu)4中未顯示AArch32所支援(yuan)的另(ling)兩個(ge)模式(shi)(shi)(為節(jie)省空間),也(ye)就(jiu)是Hyp模式(shi)(shi)(用于Hypervisor)與Monitor模式(shi)(shi)(用于TrustZone安全性)。相關主題較為復雜,本文不予討論。

備份暫存器

圖5顯示ARMv7-M和AArch32的備份暫存器(qi)。可看出,許多暫存器(qi)為(wei)共有,因(yin)為(wei)這兩種架構均是沿襲自ARMv6及先前的架構。

 

ARMv7-M登錄集

 

圖(tu)5 ARMv7-M登錄集

多數指令(ling)可(ke)存(cun)(cun)(cun)取(qu)十三個(ge)通用(yong)(yong)型(xing)的暫(zan)(zan)存(cun)(cun)(cun)器(qi)r0-r12。在這兩種架構中,r13保留(liu)為(wei)(wei)Stack Pointer(SP),r14保留(liu)為(wei)(wei)Link Register(LR),r15則保留(liu)為(wei)(wei)Program Counter(PC)。在ARMv7-M中,這些(xie)特殊暫(zan)(zan)存(cun)(cun)(cun)器(qi)的存(cun)(cun)(cun)取(qu)僅限于某些(xie)反(fan)映(ying)這些(xie)暫(zan)(zan)存(cun)(cun)(cun)器(qi)功(gong)能的特定使用(yong)(yong)狀況;在AArch32中,這些(xie)暫(zan)(zan)存(cun)(cun)(cun)器(qi)的存(cun)(cun)(cun)取(qu) 則類似(si)任何其他通用(yong)(yong)的暫(zan)(zan)存(cun)(cun)(cun)器(qi)(雖然變更(geng)Program Counter的數值可(ke)能造(zao)成非預期的副作(zuo)用(yong)(yong))。

 ARMv7-M指(zhi)定小部分額外特殊用途的(de)暫存器PRIMASK、FAULTMASK、xPSR、CONTROL和(he)BASEPRI,用于控制(zhi)及設定處理器,及用于管(guan)理異常處理。

指令集

圖(tu) 5與圖(tu)6分別是ARMv7-M與AArch32登錄集,兩(liang)相比較可看出AArch32也(ye)提(ti)供(gong)許多與特定作業模式(shi)(shi)關(guan)聯的(de)暫(zan)(zan)存(cun)器(qi)。這些暫(zan)(zan)存(cun)器(qi)會(hui)(hui)在進入相關(guan)的(de)模 式(shi)(shi)時(shi)(shi)與其在User模式(shi)(shi)下的(de)暫(zan)(zan)存(cun)器(qi)交(jiao)換。除了少數特殊指令,其他指令均(jun)無法存(cun)取這些暫(zan)(zan)存(cun)器(qi),但(dan)也(ye)無法直接(jie)存(cun)取。其數值在模式(shi)(shi)變更時(shi)(shi)亦會(hui)(hui)保留,有助于處理(li)異 常(chang)。每個異常(chang)模式(shi)(shi)皆有自(zi)己的(de)專(zhuan)屬SP,每個異常(chang)均(jun)可在獨立的(de)堆疊上處理(li),因此異常(chang)處理(li)的(de)程式(shi)(shi)設計更為穩固且安全(quan)。取得異常(chang)時(shi)(shi),相關(guan)模式(shi)(shi)下的(de)LR設定為異常(chang) 傳回位(wei)址。

 

AArch32登錄集

 

圖6 AArch32登錄(lu)集

每(mei)個(ge)異常模式下(xia)會(hui)出現的(de)(de)還有叫SPSR的(de)(de)額外暫存(cun)器。SPSR用于在進入例外時取得目前CPSR數(shu)值的(de)(de)快照(zhao),搭(da)配(pei)LR使用下(xia),可提供自動(dong)化的(de)(de)內(nei)容儲(chu)存(cun)。

AArch32圖中(zhong)未(wei)顯示Mon和(he)Hyp模(mo)式(shi),其各自支援(yuan)備(bei)份暫(zan)存器的R13和(he)R14,如同其他的模(mo)式(shi)。

在Cortex-A中,另有一個(ge)(ge)與ARM NEON SIMD指令集(ji)(如下(xia)所述)相關的(de)備份暫存(cun)(cun)器(qi)(qi),共包含三十二個(ge)(ge)128位(wei)元(yuan)寬度的(de)暫存(cun)(cun)器(qi)(qi)。每(mei)個(ge)(ge)暫存(cun)(cun)器(qi)(qi)均可定址為(wei)字組(zu)、雙字組(zu)或(huo)四字組(zu),且(qie)NEON指令集(ji)從位(wei)元(yuan)組(zu)到四字組(zu)均支援向量(liang)作業。

異常模式

這兩個架構(gou)的異(yi)(yi)常模式有相當大的差異(yi)(yi),兩者均支援內部與(yu)外部異(yi)(yi)常,可由系統(tong)事件或外部周邊中斷所執行。

ARMv7-M支(zhi)援與(yu)傳統微控制器(qi)極(ji)為類似的模型,所有外(wai)部中斷分別透(tou)過包含處理常式(shi)位址的向(xiang)量表來向(xiang)量。

AArch32 支援的模型則類似(si)舊型ARM架構,當(dang)中(zhong)只有(you)八個有(you)獨立向量(liang)的異常(chang)類型。向量(liang)表包含可執行(xing)的指(zhi)令,其(qi)通常(chang)為直接連往合適的異常(chang)處理常(chang)式(shi)(shi)的分支指(zhi)令。僅支援兩 個外(wai)部(bu)中(zhong)斷來源:FIQ和IRQ。一般只會有(you)一個高優先的中(zhong)斷連接至FIQ,其(qi)余則連接至IRQ。亦即系(xi)統(tong)必須整(zheng)合軟體(ti)分配器(qi),或如(ru)同現代化系(xi)統(tong)所常(chang)見 的,包含可用個別(bie)向量(liang)位址進(jin)行(xing)程式(shi)(shi)設計的Vectored Interrupt Controller(VIC)。

許(xu)多 Cortex-A系統包含(han)采(cai)用ARM之(zhi)Generic Interrupt Controller(GIC)架構的(de)標準中(zhong)斷控制器。GIC可作為(wei)許(xu)多實體(ti)中(zhong)斷和(he)ARM核心的(de)兩(liang)個(ge)中(zhong)斷輸入(FIQ和(he)IRQ)之(zhi)間(jian)的(de)介面。其可處理優先(xian) 順序(xu)的(de)決定、遮掩、個(ge)別中(zhong)斷啟用/停用和(he)搶奪。

指令集

ARM指(zhi)令(ling)集自25年前在ARM1首次(ci)推出(chu)后已經過許(xu)多演進。Cortex-A處理器實(shi)際上支(zhi)援兩(liang)個(ge)指(zhi)令(ling)集,每個(ge)指(zhi)令(ling)集均有許(xu)多延伸(shen)。

.ARM指令(ling)集

ARM 指(zhi)(zhi)令(ling)(ling)(ling)集以(yi)第(di)一個ARM處理(li)器(qi)所(suo)支援的原(yuan)始指(zhi)(zhi)令(ling)(ling)(ling)集為基礎,但已經過多(duo)次(ci)延伸。其為load-store指(zhi)(zhi)令(ling)(ling)(ling)集,內(nei)含獨(du)立指(zhi)(zhi)令(ling)(ling)(ling)群(qun)組,可用于資料處理(li)、存儲器(qi)存 取、系統控(kong)制及(ji)控(kong)制流量。現代的ARM指(zhi)(zhi)令(ling)(ling)(ling)集具有高效能,且范圍廣泛。此指(zhi)(zhi)令(ling)(ling)(ling)集中的所(suo)有指(zhi)(zhi)令(ling)(ling)(ling)均以(yi)固定長度的32位(wei)元字組編(bian)碼,且字組邊界(jie)必須對(dui)齊。

.Thumb指令集

Thumb 指(zhi)(zhi)令(ling)集(ji)(ji)(ji)為ARM指(zhi)(zhi)令(ling)集(ji)(ji)(ji)的(de)子集(ji)(ji)(ji),其中每個指(zhi)(zhi)令(ling)均編碼(ma)為16位元的(de)半字組,其半字組邊(bian)界必須(xu)對齊(qi)。Thumb指(zhi)(zhi)令(ling)集(ji)(ji)(ji)的(de)原始概念是為了在編譯C之類的(de)高階語(yu)言 時(shi),縮小常(chang)用指(zhi)(zhi)令(ling)的(de)大(da)小,藉此(ci)改善程式(shi)碼(ma)的(de)密度。指(zhi)(zhi)令(ling)縮小后,由于(yu)指(zhi)(zhi)定(ding)的(de)快取(qu)行內(nei)可(ke)放入更(geng)多指(zhi)(zhi)令(ling),因此(ci)也有助于(yu)從指(zhi)(zhi)令(ling)快取(qu)內(nei)執(zhi)行。

.進階SIMD延伸集

進階SIMD延(yan)伸集(ji)(Advanced SIMD Extensions)亦稱為NEON,是大型的(de)指(zhi)令集(ji),可利用延(yan)伸暫存器(qi)組合提供SIMD向(xiang)量處(chu)理功能。

.向量(liang)浮點(VFP)

VFP指令集在與NEON相(xiang)同的備份(fen)暫存器上執(zhi)行,其可(ke)提供高效(xiao)能的IEEE-754相(xiang)容單一(yi)與雙重(zhong)精準浮(fu)點(dian)作業(ye)。

.Thumb-2技術

Thumb-2為延伸(shen)集(ji)(ji)(ji)的(de)(de)名稱,在(zai)ARMv6T2(首先出現在(zai)ARM1156T2-S處理器(qi))加入到Thumb指(zhi)令集(ji)(ji)(ji)內。其為混合長度(du)的(de)(de)指(zhi)令集(ji)(ji)(ji),結合Thumb的(de)(de)程式碼密度(du)與ARM指(zhi)令集(ji)(ji)(ji)的(de)(de)較高效能與彈性。

假 如(ru)使用(yong)者已(yi)利(li)用(yong)Cortex-M微控(kong)制(zhi)器(qi)進行開(kai)發(fa),應該(gai)會對Thumb-2很熟悉。這些程(cheng)式碼在從小(Cortex-M0和Cortex-M0+)到 大(Cortex-M7)的各種子集中僅支援Thumb-2。轉移到Cortex-A處理(li)器(qi),能為程(cheng)式碼生(sheng)成開(kai)啟許多可能性。

一般來說,多數針(zhen)對(dui)Cortex-A處理器編譯的(de)(de)高(gao)階程式(shi)碼(ma)將(jiang)以Thumb(含Thumb-2)為目標。因此編譯人員可獲得大(da)的(de)(de)自(zi)由,在有多重選(xuan)擇下合理選(xuan)擇所要使(shi)用(yong)的(de)(de)指令(ling),在針(zhen)對(dui)程式(shi)碼(ma)空(kong)間進行(xing)編譯與針(zhen)對(dui)效能進行(xing)編譯兩種情況下實現(xian)高(gao)的(de)(de)差異(yi)。

ARM指(zhi)令集通(tong)常用于必須要達到高效能的程式碼區(qu)段。這些區(qu)段有時(shi)可在組譯(yi)器內手(shou)動編碼,而ARM指(zhi)令集通(tong)常會是好的選擇。

NEON指(zhi)令集可用下列多種方式存取:

.有程式(shi)庫支援常見的數(shu)學與分析功能(neng)及演(yan)算法。

.編譯器支援完整的內部功能集,允許(xu)從C直(zhi)接存取完整的NEON指令集。透過這種(zhong)方法,NEON作(zuo)業便(bian)能以便(bian)利的方式(shi)與(yu)C程式(shi)碼交錯處(chu)理(li)。

.NEON可直接在組譯(yi)器內手動執行(xing)。

.編譯器亦支援反覆回(hui)路的(de)(de)自動向量(liang)。只要(yao)遵循一些簡單的(de)(de)指(zhi)示來(lai)編寫(xie)程式碼,即使(shi)是稍顯復雜的(de)(de)回(hui)路,編譯器也能(neng)有效執(zhi)行及向量(liang)化。

如果使用者熟悉(xi)ARMv7-A處理器,應(ying)該(gai)也會注意到ARMv8-A加入(ru)一些額外(wai)的指令。

.密碼編(bian)譯延(yan)伸(shen)模組(Cryptographic Extensions)

這些(xie)指令(ling)為ARMv8-A新加(jia)入,目(mu)的是(shi)為了有效(xiao)實作常見的加(jia)密功(gong)能建構區塊(kuai)演(yan)算法(fa)。這些(xie)延伸是(shi)在(zai)NEON備份暫(zan)存(cun)器上(shang)運作。

.Load-Acquire和Store-Release

這些新(xin)指(zhi)令(ling)符合C++11存(cun)儲器(qi)排(pai)序語(yu)法,能提升編(bian)譯效率。也可用來減少對(dui)資料側存(cun)儲器(qi)局限的(de)(de)需求,并部分減少與其相關(guan)的(de)(de)工作(zuo)量。

還有(you)一些其(qi)他與浮點和限(xian)制指令(ling)有(you)關的(de)小型延伸。

虛(xu)擬存(cun)儲(chu)器支援

支(zhi)(zhi)援完整虛擬(ni)存儲器環境為(wei)ARMv8-A主要功能之一,正是透過這項功能,這些裝置才能支(zhi)(zhi)援Linux和Android等平臺作(zuo)業系統。因此(ci),虛擬(ni)存儲器功能經(jing)常也是在這些核心中進行選(xuan)擇時(shi)為(wei)關鍵的條件。

虛擬存(cun)儲(chu)器(qi)(qi)環境可(ke)(ke)讓(rang)作業系(xi)統管理(li)存(cun)儲(chu)器(qi)(qi)時更富彈(dan)性,像是使個(ge)(ge)別(bie)處理(li)程(cheng)序動(dong)態延伸堆疊區(qu),啟用(yong)個(ge)(ge)別(bie)的(de)程(cheng)式碼,讓(rang)資料區(qu)能視需(xu)要在外(wai)部(bu)儲(chu)存(cun)空間內部(bu)和外(wai)部(bu)進行分(fen)頁,讓(rang)個(ge)(ge)別(bie)的(de)使用(yong)者(zhe)處理(li)程(cheng)序可(ke)(ke)以檢視完全相(xiang)同的(de)系(xi)統存(cun)儲(chu)器(qi)(qi)配置圖。

為(wei)(wei)發(fa)揮作用,虛擬存(cun)儲(chu)器(qi)在處理(li)器(qi)所配發(fa)的(de)每個(ge)位(wei)址(zhi)上(shang)加入了“轉譯”,如圖7所示(shi)。軟(ruan)體會在“虛擬位(wei)址(zhi)空間”執行,還有一個(ge)名為(wei)(wei)存(cun)儲(chu)器(qi)管理(li)單元的(de)區塊會將其(qi)轉譯為(wei)(wei)實(shi)體位(wei)址(zhi)空間。

 

如何選擇適處理器核心架構提高嵌入式應用性價比?

 

圖7 虛擬存儲器(qi)

為了使(shi)作(zuo)業系統(tong)完(wan)整控制存取權限等內(nei)容(rong),以針(zhen)對系統(tong)內(nei)的(de)(de)各項使(shi)用者工(gong)作(zuo)及作(zuo)業系統(tong)本身建(jian)立新的(de)(de)虛擬(ni)存儲(chu)器配置(zhi)圖。每(mei)項工(gong)作(zuo)可當作(zuo)系統(tong)內(nei)唯(wei)一的(de)(de)工(gong)作(zuo),在(zai)自己的(de)(de)虛擬(ni)存儲(chu)器空間內(nei)執行。只有作(zuo)業系統(tong)知道工(gong)作(zuo)程式碼及資料區在(zai)外(wai)部實體(ti)存儲(chu)器內(nei)的(de)(de)實體(ti)位置(zhi)。

在(zai)切換工(gong)作(zuo)(zuo)時,作(zuo)(zuo)業系統的其(qi)中一項任務就是重新(xin)設(she)定存儲器管(guan)理單元,以啟用傳入工(gong)作(zuo)(zuo)所(suo)用的程式碼及資料(liao),同時讓傳出工(gong)作(zuo)(zuo)的存儲器暫時無法存取。如此可強制區分工(gong)作(zuo)(zuo),為安全且(qie)彈性的系統的必要元素。

此 處(chu)(chu)不會提供完整說明,ARM處(chu)(chu)理器(qi)內的(de)(de)(de)(de)存儲器(qi)管理單元使(shi)用(yong)保(bao)留在外(wai)部存儲器(qi)中的(de)(de)(de)(de)“分(fen)頁表”所(suo)含的(de)(de)(de)(de)資(zi)料來帶動及控(kong)制轉譯。系統(tong)整合多項佳化(hua)作業(例如,包(bao) 含Translation Lookaside Buffers,或簡稱為TLB,能為近使(shi)用(yong)過的(de)(de)(de)(de)轉譯建立快取(qu),以減少讀(du)取(qu)分(fen)頁表的(de)(de)(de)(de)工作量(liang)),可盡(jin)量(liang)縮小轉譯處(chu)(chu)理程(cheng)序的(de)(de)(de)(de)工作量(liang)。

從ARMv7-M到(dao)ARMv7-A的(de)軟(ruan)體轉移

多數(shu)的(de)高階軟(ruan)體(ti)(ti)皆須(xu)要簡單的(de)重(zhong)新編譯。下列(lie)區(qu)域的(de)軟(ruan)體(ti)(ti)則須(xu)詳加注意(yi):

.重置程式碼及其他例外處(chu)理常式

如(ru)果使用作業系統,這部(bu)分的(de)工作將由作業系統所提(ti)供的(de)工具(ju)來處(chu)理。多數情(qing)況下,常見作業系統的(de)連接埠(bu)將透過公開網域散(san)布或裝置(zhi)供應商提(ti)供。

因異(yi)常(chang)模式差異(yi)較大,因此須重新(xin)(xin)寫入中斷處理常(chang)式。作業(ye)系(xi)統同樣會提供(gong)基(ji)礎架構(gou)來完(wan)成這部(bu)分(fen)工作,藉以簡單(dan)地重新(xin)(xin)編譯多(duo)數中斷處理常(chang)式的主體。

.周(zhou)邊驅(qu)動程式(shi)

從RTOS轉(zhuan)移到Linux這(zhe)類(lei)的多(duo)功(gong)能平臺作業系統時,應用程式(shi)(shi)碼及周邊(bian)驅動程式(shi)(shi)須更(geng)明確地(di)加(jia)以區(qu)隔。

.系(xi)統組態功能

采 用(yong)Cortex-M與(yu)Cortex-A的(de)裝置在提供(gong)系(xi)(xi)(xi)(xi)統(tong)組態與(yu)控制(zhi)功(gong)能(neng)(neng)存(cun)取(qu)(qu)方面有(you)較大的(de)差異。Cortex-M處理器(qi)(qi)通常透(tou)過具名(ming)或(huo)存(cun)儲器(qi)(qi)對(dui)映的(de)暫(zan)存(cun)器(qi)(qi)來 設(she)(she)定(ding),可直接讀(du)取(qu)(qu)及(ji)寫入,以(yi)達成所要的(de)功(gong)能(neng)(neng)。Cortex-A處理器(qi)(qi)(為Cortex-A32所支援(yuan)的(de)AArch32執行狀態)則是透(tou)過“系(xi)(xi)(xi)(xi)統(tong)控制(zhi)協同(tong)處 理器(qi)(qi)”來支援(yuan)設(she)(she)定(ding)。概念性的(de)“協同(tong)處理器(qi)(qi)15”包含大量的(de)設(she)(she)定(ding)暫(zan)存(cun)器(qi)(qi)集,使(shi)用(yong)專屬的(de)指令進行讀(du)取(qu)(qu)及(ji)寫入。非由(you)作業系(xi)(xi)(xi)(xi)統(tong)執行的(de)系(xi)(xi)(xi)(xi)統(tong)組態功(gong)能(neng)(neng)則須(xu)重新寫入,以(yi) 完成這(zhe)部分的(de)工作。也(ye)就是說,作業系(xi)(xi)(xi)(xi)統(tong)通常會提供(gong)應(ying)用(yong)程式介面(API),以(yi)用(yong)于須(xu)要由(you)使(shi)用(yong)者介面存(cun)取(qu)(qu)的(de)功(gong)能(neng)(neng)。

.匯編程式碼

很 明顯地(di),匯編(bian)(bian)程(cheng)式碼(ma)(ma)也(ye)須特(te)別(bie)注(zhu)意。因(yin)為寫入(ru)匯編(bian)(bian)程(cheng)式碼(ma)(ma)的(de)其中(zhong)一個(ge)主(zhu)要原因(yin),便是為了獲得高的(de)效能(neng)(neng),因(yin)此必須詳加檢驗這些功能(neng)(neng),確(que)定重新寫入(ru)能(neng)(neng)在存取(qu) NEON等某些延伸(shen)指(zhi)令集(ji)功能(neng)(neng)時提供好處。若舊(jiu)型的(de)匯編(bian)(bian)程(cheng)式碼(ma)(ma)已使用“Uniform Assembler Language(UAL)”語法(fa)寫入(ru),則多數程(cheng)式碼(ma)(ma)將簡(jian)單地(di)重新匯編(bian)(bian)為ARM或Thumb指(zhi)令。

上一篇:集成電路設計及集成電路系統的就業發展前景及方向

下一篇:IT男郭天祥的那些事

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點(dian)新(xin)聞推薦
前臺專線:010-82525158 企業培訓洽(qia)談專(zhuan)線(xian):010-82525379 院校(xiao)合作洽(qia)談專(zhuan)線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部