1. 程式人生 > >豹哥嵌入式講堂:ARM知識概要雜輯(3)- Cortex-M處理器功能模塊

豹哥嵌入式講堂:ARM知識概要雜輯(3)- Cortex-M處理器功能模塊

產品 功能模塊 asp 浮點運算 swd 基準 調試接口 提高 我們


  ARM Cortex-M處理器家族發展至今(2016),已有5代產品,分別是CM0/CM0+、CM1、CM3、CM4、CM7,關於其發展歷史可參考我的另外兩篇博客:ARM內核體系架構編年史(精簡版)、扒一扒ARM Cortex-M各版本的第一款MCU。

1.Cortex-M兼容特性

  為了能做到Cortex-M軟件重用,ARM公司在設計Cortex-M處理器時為其賦予了處理器向下兼容軟件二進制向上兼容特性。

  首先看什麽是二進制兼容,這個特性主要是針對軟件而言,這裏指的是當某軟件(程序)依賴的頭文件或庫文件分別升級時,軟件功能不受影響。要做到二進制兼容,被軟件所依賴的頭文件或庫文件升級時必須是二進制兼容的。

  那麽什麽又是向上兼容,向上兼容又叫向前兼容,指的是在較低版本處理器上編譯的軟件可以在較高版本處理器上執行。

  跟向上兼容相對的另一個概念叫向下兼容,向下兼容又叫向後兼容,指的是較高版本處理器可以正確運行在較低版本處理器上編譯的軟件。

  所以其實既可以用向上兼容,也可以用向下兼容來形容Cortex-M特性,只不過描述的主語不一樣,我們可以說Cortex-M程序是向上兼容的,也可以說Cortex-M處理器是向下兼容的。

  具體到Cortex-M處理器時,這個兼容特性表現為:

  • 從處理器角度看:CM0指令集和功能模塊是最精簡的,CM7指令集和功能模塊是最豐富的。不存在低版本處理器上存在的特性是高版本處理器所沒有的。
  • 從軟件角度來看:CMSIS提供的頭文件和功能函數是二進制向上兼容的,比如某CM0軟件App使用的是core_cm0.h頭文件,而這個App要在CM7上運行時,不需要使用core_cm7.h再重新編譯一次(當然使用新頭文件編譯後的App也是正常的。)

2.Cortex-M功能模塊差異

  由於CM1主要是用在FPGA產品中,故下面對比忽略CM1。我們知道CM處理器是向下兼容的,故CM功能模塊是隨著版本的升級而逐步增加的,我們逐步從最低版本開始對比。

2.1 CM0 vs CM0+

技術分享圖片

  先來聊聊CM0與CM0+,從最基準的CM0模塊看起:

  • ARMv6-M CPU內核:ARM公司於2007年推出的內核。馮·諾依曼體系結構,3級流水線,支持大部分Thumb和小部分Thumb-2指令集,所有指令一共57條。此外還內嵌32-bit返回結果的硬件乘法器。
  • NVIC嵌套向量中斷控制器:用於CPU在正常Run模式下中斷管理。最大支持32個外部中斷,外部中斷可設4級搶占優先級(2bit)。
  • WIC喚醒中斷控制器:用於CPU在低功耗Sleep模式下中斷管理。
  • AHB-Lite總線:一條32bit AMBA-3標準的高性能system總線負責所有Flash、SRAM指令和數據存取。
  • 調試模塊:0-4個硬件斷點Breakpoint,0-2個數據監測點Watchpoint。
  • DAP調試接口:通過DAP模塊支持JTAG和SWD接口。

技術分享圖片

  那麽CM0+到底改進了什麽?

  • ARMv6-M CPU內核:流水線改為2級(很多8bit MCU都是2級流水線,主要用於降低功耗)
  • NVIC嵌套向量中斷控制器:增加了VTOR即中斷重定向功能。

  那麽CM0+到底增加了什麽?

  • MPU存儲器保護單元:提供硬件方式管理和保護內存,控制訪問權限,最大可將內存分為8*8個region。內存越權訪問,將返回MemManage Fault。
  • MTB片上跟蹤單元:用戶體驗更好的的跟蹤調試,優化的異常捕獲機制,可以更快地定位bug。
  • Fast I/O:可單周期訪問的快速I/O口,更易於Bit-banging(比如GPIO模擬SPI、IIC協議)。

2.2 CM0+ vs CM3

技術分享圖片

  前面比較完了CM0與CM0+,再來看看CM3比CM0+增強在了哪裏:

  那麽CM3到底改進了什麽?

  • ARMv7-M CPU內核:ARM公司於2004年推出的內核。哈佛體系結構,3級流水線+分支預測,支持全部的Thumb和Thumb-2指令集。內嵌32-bit硬件乘法器可返回64-bit運算結果,且新增32-bit硬件除法器。
  • NVIC嵌套向量中斷控制器:最大支持240個外部中斷,中斷優先級可分組(搶占優先級、響應優先級),8bit優先級設置(最大128級搶占優先級(對應最小2級響應優先級),最大256級響應優先級(對應無搶占優先級))。
  • 3x AHB-Lite總線:除了原system總線負責SRAM存取外,還新增兩條ICode、DCode總線分別完成Flash上指令和數據存取。
  • 調試模塊:0-8個硬件斷點Breakpoint,0-4個數據監測點Watchpoint。
  • ITM/ETM跟蹤單元:ITM更好地支持printf風格debug,ETM提供實時指令和數據跟蹤。

  那麽CM3到底增加了什麽?

  額,CM3相比CM0+並沒有增加什麽獨有模塊,反倒是少了Fast I/O Port。

2.3 CM3 vs CM4

技術分享圖片

  前面比較完了CM0+與CM3,再來看看CM4比CM3增強在了哪裏:

  那麽CM4到底改進了什麽?

  • ARMv7E-M CPU內核:增加了DSP相關指令支持。

  那麽CM4到底增加了什麽?

  • DSP數字信號處理單元:新增支持單周期16/32-bit MAC、dual 16-bit MAC, 8/16-bit SIMD算法的數字信號處理單元。
  • FPU浮點運算單元:新增單精度(float型)兼容IEEE-754標準的浮點運算單元(VFPv4-SP)。

2.4 CM4 vs CM7

技術分享圖片

  前面比較完了CM3與CM4,再來看看CM7比CM4增強在了哪裏:

  那麽CM7到底改進了什麽?

  • ARMv7E-M CPU內核:6級流水線+分支預測。
  • 2x AHB-Lite總線:精簡為2條AHB總線,其中AHB-P外設接口完成原來system總線功能, AHB-S從屬接口負責外部總線控制器(如DMA)功能以及與TCM接口功能。
  • MPU存儲器保護單元:最大可將內存分為16*8個region。
  • FPU浮點運算單元:新增雙精度(double型)兼容IEEE-754標準的浮點運算單元(VFPv5)。

  那麽CM7到底增加了什麽?

  • I/D-Cache緩存區:即是我們通常理解的L1 Cache,每個Cache大小為4-64KB。
  • I/D-TCM緊密耦合存儲器:緊密的與處理器內核相耦合的RAM,提供與Cache相當的性能,但比Cache更具確定性,memory最大均為16MB。
  • ECC特性:對L1 Cache提供錯誤校正和恢復功能,提高系統的可靠性。
  • AXI-M總線:基於AMBA 4的64bit AXI總線,用於支持掛在系統上的L2 memory。

參考資料

[1]. 維基百科ARM Cortex-M

[2]. Cortex系列M0-4簡單對比

[3]. 使用MTB模塊快速跟蹤定位Cortex-M0+指令執行狀態

[4]. Cortex-M0+單周期GPIO的使用方法

[5]. ARM Cortex-M4和Cortex-M0+中斷優先級及嵌套搶占問題

[6]. STM32中斷優先級概念

[7]. 基於ARM Cortex-M3核的SoC架構設計及性能分析

[8]. ARM調試CoreSight、ETM、PTM、ITM、HTM、ETB等常用術語解析

豹哥嵌入式講堂:ARM知識概要雜輯(3)- Cortex-M處理器功能模塊