作者:Allen Zhan 修改歷史 08.30, 完成初稿. 09.01, 修改文中錯誤, 全部的 ARMv7 架構(gòu)都實(shí)現(xiàn)了 Thumb-2 技術(shù). 而作為 ARMv7M 子集 的 ARMv6M, 實(shí)現(xiàn)了絕大部分 Thumb, 以及少數(shù)幾個的 Thumb-2, 因此不能直接稱 ARMv6M 實(shí)現(xiàn)了 Thumb-2. 并且為了系統(tǒng)概括, 在最后的部分, 增加了來自 ARM info 的構(gòu)架與產(chǎn)品線對應(yīng)框圖. ARM Architecture 誠如 ARM 幫助文檔所言, 確定所研 uController 的體系構(gòu)架是第一重要的事情. "因?yàn)?ARM 指令集架構(gòu)被第一個研發(fā)出來, 并且會在未來持續(xù)被研發(fā)". 那么今天(這里指2013年8月間), ARM 架構(gòu)的版本號從 v1 排到 v8(這是確認(rèn)無疑的, 因?yàn)榇丝涛覀冋谧⒁曋? ARM Information Center 的 documentation 部分的 "ARM 體系結(jié)構(gòu)"章節(jié)的下拉框). *o* 幸運(yùn)的事情是, 我們不必再關(guān)注 ARM 誕生伊始的 v1, v2, v3. 在 arm A-RM document 中, 注明因過時而廢止的 ARM架構(gòu)包括: ARMv1, ARMv2, ARMv2a, ARMv3, ARMv3G, ARMv3M, ARMv4xM, ARMv4TxM, ARMv5, ARMv5xM, and ARMv5TxM 我們想知道的就是, v1 為啥是 26-bit 的架構(gòu), ARM 設(shè)計(jì)之初面臨著一個怎樣資源稀缺的生產(chǎn)工藝? 而 ARMv3 作為第一個引入 32-bit 架構(gòu)設(shè)計(jì)的時代背景又是如何? -- 但是 anyway, 這些個 story 都以遠(yuǎn)去, 我猜她們的劇情都至少超過了 10 years. 對比作為有效的現(xiàn)存架構(gòu)是: ARMv4, ARMv4T, ARMv5T, (ARMv5TExP), ARMv5TE, ARMv5TEJ, and ARMv6 ARM7TDMI-S 而 ARM7, 作為 ARM 世界在基礎(chǔ)應(yīng)用中的, 小心翼翼的第一步, 這樣進(jìn)入了我們的視野. 我們最初接觸到的 ARM7, 比方以 NXP 的 LPC21XX series 為例, 注意到其ARM core是 ARM7TDMI-S, 其ARM 架構(gòu)為 ARMv4T(參考源于 ARM7TDMI-S 之 A-RM). 這也是一顆 Von Neumann 架構(gòu)的 32-bit 的 RISC. 話說 Von Neumann 架構(gòu)似乎總是為簡單或者基礎(chǔ)的型號而準(zhǔn)備? 因?yàn)? 我們往往不稀奇地在 M3 或者 M4(我們把這些比做更高級的應(yīng)用), 里面發(fā)現(xiàn)定義的是哈佛結(jié)構(gòu). 這可能從另一方面說明了, 這里的 ARM v4T 或者我們后面提到的 Cortex M0/M0+ (v6M) 在 ARM 的設(shè)計(jì)理念中, 是面向低端市場的存在, 且生產(chǎn)工藝更簡單(或者生產(chǎn)成本更低廉). Thumb v4T 的這個變量 T, 在 A-RM document 中, 被當(dāng)作 Thumb 指令集的標(biāo)志. 關(guān)于 Thumb mode, 我想已經(jīng)可能為我們熟知了, 正是因?yàn)槠?16-bit 的寬度, 會顯著地降低我們 firmware 的 size, 而據(jù)說性能同 arm mode 比較沒有太大的損失. 但是應(yīng)該注意的是, Thumb 指令集, 仍然是 ARM 指令集的一個子集, 只是其每條指令, 都被編碼為 16-bit. 另外, 雖然沒有看見類似的說法, 但我個人是有懷疑, 是否 Thumb 指令集被第一次引入, 就是在 ARMv4T 架構(gòu)之上呢? ARM7/ARM9/ARM11 ARM7 series 的 CPU core 包括: ARM7TDMI、ARM7TDMI-S、ARM7EJ-S 和 ARM720T. ARM9/ARM9E series 的 CPU core 包括: ARM926EJ-S、ARM946E-S、ARM966E-S、ARM968E-S、ARM996HS、ARM920T 和 ARM922T ARM11 series 的 CPU core 包括: ARM1136JF-S 和 ARM1126J-S、ARM1156T2-S、ARM1156T2F-S、ARM1176JZF、ARM1176JZ-S、ARM1176JZF-S 以及 ARM11 MPCore 盡管沒有明言, 我們敏感地感覺到, 上述過去年代中, 被我們熟知的 ARM7, ARM9, ARM11, 其體系架構(gòu)可能均屬于前面提到的, ARM 架構(gòu)中的有效部分, 它們是: ARMv4, ARMv4T, ARMv5T, (ARMv5TExP), ARMv5TE, ARMv5TEJ, and ARMv6 (如果我有錯請告訴我). 并且令人精神振作且注意力集中的是: ARM documentation 稱呼上述 ARMv4 ~ v6, 通稱為: ARMv5 架構(gòu). 似乎可以簡單認(rèn)為, 超過 v4~v6, 比方說凡是 v7 就是進(jìn)入 ARM 新時代, 就可以當(dāng)作 ARM 新系列 cortex 之后的實(shí)現(xiàn)架構(gòu)? 答案并非如此, 因?yàn)槲覀冎? 至少 ARMv6M 還屬于新出現(xiàn)的 cortex series. 我想這是不是說, 將對應(yīng)的產(chǎn)品與架構(gòu)進(jìn)行比對才能定論, 比方說, 與上述 ARMv4 ~ v6(通稱v5架構(gòu)) 進(jìn)行比對, 觀察是新時代 cortex 產(chǎn)品, 還是過去的 ARM7/9/11. ARM 新時代 - CORTEX 不管是從技術(shù)引領(lǐng)市場, 還是市場推動技術(shù)的哪個觀點(diǎn)來看, ARM 的架構(gòu)進(jìn)步都讓人屏住呼吸. 我很想代表多位工程師, 呼喊出我們的心聲, "喂喂, 老兄, 節(jié)奏請放慢點(diǎn)兒, 這才2,3年, v4T 我們還熟悉的不夠捏!```" 但沉默的工程師, 總是被動于勢不可擋的科技進(jìn)步與市場需求... 觀察 ARM 版權(quán)所有聲明的年限, 我們注意到在 2008 年, cortex 已經(jīng)進(jìn)入設(shè)計(jì)進(jìn)度或者說可能設(shè)計(jì)成熟階段/計(jì)劃市場推廣了. Anyway, ARM7/9/11 的年代迅速成為記憶中的口號, 我們現(xiàn)在不得不在 ARM 的教育下, 言必稱 Cortex. 正如我們近年來熟知的, Cortex 分成 A, R, M 三個 series, 或者我們理解, 這可能勉強(qiáng)對應(yīng)著, 高端 -> 中端 -> 低端的應(yīng)用需求. 再來回到我們的思路核心: 以 ARM 處理器架構(gòu)為核心區(qū)分 ARM 產(chǎn)品類型. 那么伴隨 cortex 產(chǎn)品系列的出現(xiàn), 伴隨而來的, 新的架構(gòu) ARMv7 浮出水面. P.S, ARM7/9/11 is dead? 似乎不能完全確認(rèn), 盡管今天我們稱呼 ARM7/9/11 為陳舊概念, 但是在 ARMv7-AR 架構(gòu)中, 還特別給出章節(jié), 講解 ARM11 中較新的 ARMv6 的版本. 我們大膽猜測, 這或許是尊重已經(jīng)投放市場的產(chǎn)品線的繼續(xù)延續(xù)? 還是說, ARMv6 (通常 ARM11 實(shí)現(xiàn)的是v6 架構(gòu)) 處于研發(fā)歷史階層的上下銜接階段? 因?yàn)?ARMv6 在通稱的 ARMv5 文檔中, 以及在 ARMv7-AR 文檔中, 都被提及. ARMv7 Cortex A 與 cortex R 似乎被 ARM 統(tǒng)一對待, 它們兩者的指令集架構(gòu)被放在了一個文檔中, ARMv7-AR RM. 我們可以合理想見其架構(gòu)的相似性. 還有就是, 我們這里重視的基礎(chǔ)類型的 application 中常用的 Cortex M 系列實(shí)現(xiàn)的架構(gòu): ARMv7-M. 而 ARMv7-M 指令集架構(gòu)一般由 Cortex-M3 實(shí)現(xiàn). ARMv7-M 僅支持 Thumb-2 任何閱讀過 ARMv7-M A-RM document 的同行諸君, 都會如我們般, 立即注意到 ARM 指令集章節(jié)消失, 只存在 Thumb 指令集章節(jié). 顯然的, ARMv7-M 只支持 Thumb instruction set. 因?yàn)槿康?ARMv7 都支持 Thumb-2(包括大量32-bit 指令), 故 ARMv7-M 僅僅支持 Thumb-2 ISA, 而不支持 ARM ISA. ARMv7類型特點(diǎn) A, 具備內(nèi)存管理模塊的虛擬地址 -- 我們毫不猶豫將它與影音應(yīng)用化等號. R, 有一個實(shí)時的 profile -- 我們似乎感覺到路由器轉(zhuǎn)發(fā)器之類的應(yīng)用在招手. 而且我們似乎也對 R 的來由知道了些什么``` M, 至于M -- 我們想忠實(shí)翻譯出 M 的介紹, "僅僅支持 Thumb, 這里整個兒的 size 和實(shí)現(xiàn)操作的確認(rèn)性, 比純粹的能力表現(xiàn)來得更重要"... 與閃閃發(fā)光 AR 比較, 這個推廣似乎有點(diǎn)讓人垂頭喪氣,``` 不過似乎也非常符合 cortex M 的市場策略``` ^&^ 對于我們感興趣的 ARMv7-M 的特性之一是: 異常句柄僅僅用 c/c+ funcitons 就可以實(shí)現(xiàn), 標(biāo)準(zhǔn)調(diào)用即可. 我們猜測這可能說明, 類似處理中斷之類的 job, 我們或者說 compiler 不需要匯編的代碼的參與. 什么是"高度確定性的操作"(Highly deteerministic operation)? 在 ARMv7M A-TM 中, ARM 試圖向我們解釋, Cotex M series(比如實(shí)現(xiàn) v7M 的 cortex M3), 一個強(qiáng)調(diào)的優(yōu)點(diǎn)就是高度確定性操作, 這可能包括下列優(yōu)點(diǎn): (1) single or low cycle count execution (2) minimal interrupt latency, with short pipeline (3) cacheless operation ARMv7E-M 如果在 ARMv7-M 架構(gòu)中, 加入 ARM DSP 指令, 可以實(shí)現(xiàn) ARMv7E-M. Cortex M4 實(shí)現(xiàn)該架構(gòu)而為我們所知. v5 與 v7M Registers 如果要在通稱 ARMv5 與 ARMv7M 的 Register 進(jìn)行一番比較, 我們能夠發(fā)現(xiàn)一些顯著的不同: ARM registers(通稱 v5) 共 37pcs, 包括: 16pcs 通用registers + 15 pcs(異常加速處理專用 registers) + 6pcs 狀態(tài) registers(CPSR, 5-SPSR) 這 16pcs 通用 registers 中有 3pcs 是特殊的, 它們是: R13(SP), R14(LP), R15(PC) ARMv7-M core registers (我們沒有提及 v7M 新的 SCS registers 與 CPUID registers, 它們屬于 memory mapped system registers) 在 application level 上, (16 + 1)pcs core register, 包括: 13pcs 通用registers + 3pcs specail registers(SP, LR, PC) 以及 application statue register APSR. 在 system level 上, 則增加了 xPCR, MASK, CONTROL registers 如果說 ARMv7-M 的不同特性, 它們或許暗示著: (1) SP, LP, PC currently is specail register for v7M instead of using as general purpose registers sometimes under v5 Architecture. (2) xPCR only manage APSR, IRSP and EPSR, which is different from v5 (it will save any PSR with every proess mode). (3) Add MASK and CONTROL registers. About Control register, we found it should be specail for us to know the privilege mode, sp mode and fp extension. 盡管有這兩者我們總結(jié)出的上述不同, 但是也讓我們感覺到了 arm architecture 的繼承性. 另外, 我們隱約意識到, 因?yàn)?SCS 與 CPUID registers 的存在, 我們很可能對 ARMv7-M 的實(shí)現(xiàn)者(我指 M0 ~ M4) 將有一個更加清晰的了解與支配手段``` Cortex M0/M0+ 實(shí)現(xiàn)的架構(gòu) Cortex M0/M0+ 實(shí)現(xiàn)的架構(gòu)是 ARMv6-M ARMv6-M 架構(gòu) ARMv6-M 是 ARMv7-M 的一個子集(subset) ARMv6-M 架構(gòu)僅支持 Thumb 指令集 ARMv7-M 架構(gòu)支持Thumb-2(該指令集在 v6T2中引入). 作為 ARMv7-M 的 subset, v6M 支持全部的來自 ARMv7-M 的 16-bit Thumb instructions(不包括 CBZ, CBNZ, and IT). 此外還支持 32-bit 的 Thumb Instraction 中的 BL, DMB, DSB, ISB, MRS, MSR. 要提及的就是, 作為 v7-M的 subset, 也同樣的, 并不支持 ARM 指令集 因此, 在上述角度下, Cortex-M0+ 應(yīng)該稱為 Thumb 支持更合適(實(shí)際上, 后面的 ARM info 的 Architecture 框圖也說明了此點(diǎn)). ARMv6-M 只支持特權(quán)模式(除非加入拓展) 與 ARMv7-M 不同, v6-M 只支持特權(quán)模式. 但是如果增加 Unprivileged/Privileged Extension, v6-M 也可以在這樣低的門數(shù)上支持特權(quán)模式. 解惑1: 為何在開發(fā) Cortex-M0+ uController 開發(fā)中無法選擇 arm mode? - 根據(jù)上述分析, 我們已知 Cortex M0/M0+ 實(shí)現(xiàn)的是 ARMv6-M 指令集, 它是 ARMv7-M 的一個子集, 同樣的 v6M 不支持 ARM 指令集(事實(shí)上 M0+ 支持的是 Thumb). 因此, 我們在 build new project 時, 一旦使用了 IDE 選擇了 M0+ uController, 我們很可能發(fā)現(xiàn), IDE 的 config page 不再提供 arm or thumb 的選擇項(xiàng)給我們, 往往表現(xiàn)為 Thumb 默認(rèn)必選. 解惑2: 何為 M0+ uController 喜歡宣稱自己與 M0 兼容并且可向上升級為 M3/M4? - 根據(jù)上述分析, M0+ 與 M0 擁有同樣的 ARMv6-M 指令集架構(gòu), 因此在此意義上, 是兼容的. 并且, M3 實(shí)現(xiàn)了 ARMv7M, M4 實(shí)現(xiàn)了 ARMv7E-M. 而 v6-M 為 v7-M 子集, v7E-M 為 V7 加上 DSP 指令. 均存在子集關(guān)系, 從上述角度理解, 這就是為何使用 M0+ 開發(fā)的系統(tǒng), 可以向上移植到 M0, M3, M4. 解惑3: 為何強(qiáng)調(diào) M0+ 的節(jié)能特性的最大貢獻(xiàn)為 pipeline? - 嚴(yán)格來說, ARMv6M/AMRv7M/ARMv5 的 A-TM 中沒有對 pipeline stage 的定義(更重要的它們定義了指令集架構(gòu)). 我們不清楚在哪里可以找到, M0/M0+ 約定 2-stage pipeline 的定義, 同行讀者們或可告訴我... 但是返回到 uController 的 datasheet, 我們確知, 以 NXP lpc21xx 為例的 ARM7TDMI-S(實(shí)現(xiàn) ARMv4T 架構(gòu)) 的 pipeline 為 3-stage pipeline. 以 FSL kinetis L KL25Z 為例的 Cortex-M0+(實(shí)現(xiàn) ARMv6M 架構(gòu)) 的 pipeline 為 2-stage pipeline. "通過轉(zhuǎn)移到 2-stage pipeline, branch shadow 減少. 作為結(jié)果, 訪問 flash memory 的次數(shù)也降低. 而 flash momery power 常常是一顆 uController 中能耗的大部分, 訪問 flash 次數(shù)的降低, 將直接影響總體能耗". 回顧 在這份隨筆中, 我們在對 cortex-M0+ 了解過程中, 不由得對 ARM uController story 進(jìn)行了一個簡單的追溯. 我們并且非常堅(jiān)持地使用 ARM Architecture 作為核心判斷標(biāo)準(zhǔn), 從 ARMv4 -> ARMv7-M(與其 subset ARMv6-M) 的架構(gòu)發(fā)展過程進(jìn)行解讀, 并作為 ARM uController 發(fā)展的階段性產(chǎn)品區(qū)分標(biāo)準(zhǔn). 并且根據(jù)指令集架構(gòu)的回溯過程, 我們又對現(xiàn)今流行的 Cortex-M0+ 的標(biāo)準(zhǔn)特性, 如僅僅支持 Thumb 指令集進(jìn)行了對照理解, 并加深了對所謂 M0+ 為何向 M4 一路順利遷移的意義的理解. ARM Architecture 產(chǎn)品類型框圖(From ARM Info) 在泛泛隨筆, 談及了 architecture 后, 加上 ARM info 整理的框圖, 這篇隨筆就幾乎完美了, 不是嗎? ![]() 感想 ARM 架構(gòu)的延續(xù)性, 以及目前市場上對 ARM 的服從性, 似乎第一次使我們工程師直起腰桿... 那在開始的每一份新的 MCU system 設(shè)計(jì)任務(wù)時, 也許我們似乎不用再表現(xiàn)的像個新人?... *O* 這種感覺, 我們喜歡. |