ARM Cortex-M 處理器家族發(fā)展至今(2016),已有 5 代產(chǎn)品,分別是 CM0/CM0+、CM1、CM3、CM4、CM7。
1.Cortex-M 兼容特性
為了能做到 Cortex-M 軟件重用,ARM 公司在設(shè)計(jì) Cortex-M 處理器時(shí)為其賦予了處理器向下兼容、軟件二進(jìn)制向上兼容特性。
首先看什么是二進(jìn)制兼容,這個(gè)特性主要是針對軟件而言,這里指的是當(dāng)某軟件(程序)依賴的頭文件或庫文件分別升級(jí)時(shí),軟件功能不受影響。要做到二進(jìn)制兼容,被軟件所依賴的頭文件或庫文件升級(jí)時(shí)必須是二進(jìn)制兼容的。
那么什么又是向上兼容,向上兼容又叫向前兼容,指的是在較低版本處理器上編譯的軟件可以在較高版本處理器上執(zhí)行。
跟向上兼容相對的另一個(gè)概念叫向下兼容,向下兼容又叫向后兼容,指的是較高版本處理器可以正確運(yùn)行在較低版本處理器上編譯的軟件。
所以其實(shí)既可以用向上兼容,也可以用向下兼容來形容 Cortex-M 特性,只不過描述的主語不一樣,我們可以說 Cortex-M 程序是向上兼容的,也可以說 Cortex-M 處理器是向下兼容的。
具體到 Cortex-M 處理器時(shí),這個(gè)兼容特性表現(xiàn)為:
從處理器角度看:CM0 指令集和功能模塊是最精簡的,CM7 指令集和功能模塊是最豐富的。不存在低版本處理器上存在的特性是高版本處理器所沒有的。
從軟件角度來看:CMSIS 提供的頭文件和功能函數(shù)是二進(jìn)制向上兼容的,比如某 CM0 軟件 App 使用的是 core_cm0.h 頭文件,而這個(gè) App 要在 CM7 上運(yùn)行時(shí),不需要使用 core_cm7.h 再重新編譯一次(當(dāng)然使用新頭文件編譯后的 App 也是正常的。)
2.Cortex-M 功能模塊差異
由于 CM1 主要是用在 FPGA 產(chǎn)品中,故下面對比忽略 CM1。我們知道 CM 處理器是向下兼容的,故 CM 功能模塊是隨著版本的升級(jí)而逐步增加的,我們逐步從最低版本開始對比。
2.1 CM0 vs CM0+
先來聊聊 CM0 與 CM0+,從最基準(zhǔn)的 CM0 模塊看起:
ARMv6-M CPU 內(nèi)核:ARM 公司于 2007 年推出的內(nèi)核。馮·諾依曼體系結(jié)構(gòu),3 級(jí)流水線,支持大部分 Thumb 和小部分 Thumb-2 指令集,所有指令一共 57 條。此外還內(nèi)嵌 32-bit 返回結(jié)果的硬件乘法器。
NVIC 嵌套向量中斷控制器:用于 CPU 在正常 Run 模式下中斷管理。最大支持 32 個(gè)外部中斷,外部中斷可設(shè) 4 級(jí)搶占優(yōu)先級(jí)(2bit)。
WIC 喚醒中斷控制器:用于 CPU 在低功耗 Sleep 模式下中斷管理。
AHB-Lite 總線:一條 32bit AMBA-3 標(biāo)準(zhǔn)的高性能 system 總線負(fù)責(zé)所有 Flash、SRAM 指令和數(shù)據(jù)存取。
調(diào)試模塊:0-4 個(gè)硬件斷點(diǎn) Breakpoint,0-2 個(gè)數(shù)據(jù)監(jiān)測點(diǎn) Watchpoint。
DAP 調(diào)試接口:通過 DAP 模塊支持 JTAG 和 SWD 接口。
那么 CM0+到底改進(jìn)了什么?
ARMv6-M CPU 內(nèi)核:流水線改為 2 級(jí)(很多 8bit MCU 都是 2 級(jí)流水線,主要用于降低功耗)
NVIC 嵌套向量中斷控制器:增加了 VTOR 即中斷重定向功能。
那么 CM0+到底增加了什么?
MPU 存儲(chǔ)器保護(hù)單元:提供硬件方式管理和保護(hù)內(nèi)存,控制訪問權(quán)限,最大可將內(nèi)存分為 8*8 個(gè) region。內(nèi)存越權(quán)訪問,將返回 MemManage Fault。
MTB 片上跟蹤單元:用戶體驗(yàn)更好的的跟蹤調(diào)試,優(yōu)化的異常捕獲機(jī)制,可以更快地定位 bug。
Fast I/O:可單周期訪問的快速 I/O 口,更易于 Bit-banging(比如 GPIO 模擬 SPI、IIC 協(xié)議)。
2.2 CM0+ vs CM3
前面比較完了 CM0 與 CM0+,再來看看 CM3 比 CM0+增強(qiáng)在了哪里:
那么 CM3 到底改進(jìn)了什么?
ARMv7-M CPU 內(nèi)核:ARM 公司于 2004 年推出的內(nèi)核。哈佛體系結(jié)構(gòu),3 級(jí)流水線+分支預(yù)測,支持全部的 Thumb 和 Thumb-2 指令集。內(nèi)嵌 32-bit 硬件乘法器可返回 64-bit 運(yùn)算結(jié)果,且新增 32-bit 硬件除法器。
NVIC 嵌套向量中斷控制器:最大支持 240 個(gè)外部中斷,中斷優(yōu)先級(jí)可分組(搶占優(yōu)先級(jí)、響應(yīng)優(yōu)先級(jí)),8bit 優(yōu)先級(jí)設(shè)置(最大 128 級(jí)搶占優(yōu)先級(jí)(對應(yīng)最小 2 級(jí)響應(yīng)優(yōu)先級(jí)),最大 256 級(jí)響應(yīng)優(yōu)先級(jí)(對應(yīng)無搶占優(yōu)先級(jí)))。
3x AHB-Lite 總線:除了原 system 總線負(fù)責(zé) SRAM 存取外,還新增兩條 ICode、DCode 總線分別完成 Flash 上指令和數(shù)據(jù)存取。
調(diào)試模塊:0-8 個(gè)硬件斷點(diǎn) Breakpoint,0-4 個(gè)數(shù)據(jù)監(jiān)測點(diǎn) Watchpoint。
ITM/ETM 跟蹤單元:ITM 更好地支持 printf 風(fēng)格 debug,ETM 提供實(shí)時(shí)指令和數(shù)據(jù)跟蹤。
那么 CM3 到底增加了什么?
額,CM3 相比 CM0+并沒有增加什么獨(dú)有模塊,反倒是少了 Fast I/O Port。
2.3 CM3 vs CM4
前面比較完了 CM0+與 CM3,再來看看 CM4 比 CM3 增強(qiáng)在了哪里:
那么 CM4 到底改進(jìn)了什么?
ARMv7E-M CPU 內(nèi)核:增加了 DSP 相關(guān)指令支持。
那么 CM4 到底增加了什么?
DSP 數(shù)字信號(hào)處理單元:新增支持單周期 16/32-bit MAC、dual 16-bit MAC, 8/16-bit SIMD 算法的數(shù)字信號(hào)處理單元。
FPU 浮點(diǎn)運(yùn)算單元:新增單精度(float 型)兼容 IEEE-754 標(biāo)準(zhǔn)的浮點(diǎn)運(yùn)算單元(VFPv4-SP)。
2.4 CM4 vs CM7
前面比較完了 CM3 與 CM4,再來看看 CM7 比 CM4 增強(qiáng)在了哪里:
那么 CM7 到底改進(jìn)了什么?
ARMv7E-M CPU 內(nèi)核:6 級(jí)流水線+分支預(yù)測。
2x AHB-Lite 總線:精簡為 2 條 AHB 總線,其中 AHB-P 外設(shè)接口完成原來 system 總線功能, AHB-S 從屬接口負(fù)責(zé)外部總線控制器(如 DMA)功能以及與 TCM 接口功能。
MPU 存儲(chǔ)器保護(hù)單元:最大可將內(nèi)存分為 16*8 個(gè) region。
FPU 浮點(diǎn)運(yùn)算單元:新增雙精度(double 型)兼容 IEEE-754 標(biāo)準(zhǔn)的浮點(diǎn)運(yùn)算單元(VFPv5)。
那么 CM7 到底增加了什么?
I/D-Cache 緩存區(qū):即是我們通常理解的 L1 Cache,每個(gè) Cache 大小為 4-64KB。
I/D-TCM 緊密耦合存儲(chǔ)器:緊密的與處理器內(nèi)核相耦合的 RAM,提供與 Cache 相當(dāng)?shù)男阅埽?Cache 更具確定性,memory 最大均為 16MB。
ECC 特性:對 L1 Cache 提供錯(cuò)誤校正和恢復(fù)功能,提高系統(tǒng)的可靠性。
AXI-M 總線:基于 AMBA 4 的 64bit AXI 總線,用于支持掛在系統(tǒng)上的 L2 memory。
?