Cortex-M系列:ARM架構與彙編指令集

本章是花費大好多功夫整理總結的,某種意義上算原創。文中大量內容是引用的,請見諒。

文中比的比較僅到Armv8-M架構的Cortex-M33,沒涉及後續新版本(也沒法預計到)。

目錄

1 ARM處理器分類

2 基於Thumb-2技術的Thumb®指令集

3 參考資料


1 ARM處理器分類

ARM的老產品樹

1、第一級——架構:ARMv4~ARMv6

2、第二級——產品系列:如ARMv4下的部分ARM7、部分ARM9

3、第三級——產品實例:如ARM7下的ARM7TDDMI(編號命名)

可見,這種命名法產品系列和架構處於網狀對應結構,容易引起歧義。而產品實例的編號命名方式個人感覺還行,可以反映處理器的微架構。ARM公司自2004年推出ARMv7內核架構時,摒棄了以往”ARM+數字”這種處理器命名方法(ARM11之前的處理器統稱經典處理器系列),重新啓用Cortex來命名[4]。

 

ARM的新產品矩陣

一維——架構 :Armv6~Armv8

另一維——應用角度下的產品系列:Cortex-M,Cortex-R,Cortex-A

兩個維度交際下生成子架構:如ARMv7下有ARMv7-A、ARMv7-R、ARMv7-M架構。

具體產品實例無法直接根據產品名確定微架構的變化(架構版本),如Cortex-M4使用的是ARMv7E-M。

 

2 基於Thumb-2技術的Thumb®指令集

1、什麼是Thumb?

Thumb指令能夠看做是ARM指令壓縮形式的子集。是針對代碼密度的問題而提出的。它具有16位的代碼密度。Thumb不是一個完整的體系結構,不能指望處理程序僅僅運行Thumb指令而不支持ARM指令集[5]。

 

2、爲什麼要有Thumb2,它與其他指令的關係如何?

注意上面的官方用語,用的是技術而不是說“Thumb-2指令集”。從官方角度說,並沒有“Thumb-2指令集”。但[1]提及了,也算是合理的存在吧。

基於Thumb-2技術的Thumb指令集,不僅在原先的Thumb指令集基礎上又添加了一些與ARM指令集中相同的指令(添加的這些指令大多是4字節編碼的),而且降低了大多數原先Thumb指令集中運行條件的限制[3]。另外,爲了提高架構見的軟件移植性,並使得不同架構的ARM處理器符合同一彙編語言語法[1],基於Thumb-2技術的Thumb指令集引入了全新的彙編語法——“統一彙編語言UAL”,從而實現了對獨立的ARM語法和Thumb語法的代替[3]。

 

3、Cortex-M與Thumb-2

爲了方便設計對成本敏感的設備,Cortex-M7處理器實現了緊密耦合的系統組件,減少了處理器面積,同時顯著提高了中斷處理和系統調試能力。Cortex-M7處理器實現了基於Thumb-2技術的Thumb®指令集的一個版本,確保了高的代碼密度和降低的程序內存需求。Cortex-M7處理器指令集提供了現代32位架構所期望的卓越性能,比大多數8位和16位微控制器具有更好的代碼密度[2]。

由於處理器支持Thumb-2指令集中的16爲和32指令,因此無須在Thumb狀態(16位指令)和ARM狀態(32位指令)間來回切換。

CortexM系列對Thumb-2指令集支持的程度是不同的,具體詳見各自的手冊。可以根據不同處理器支持的特性來初步判斷是否有某些指令,如CortexM4支持浮點運算,因此就有“V”開頭的一些浮點運算指令。

 

一個有趣的現象:Cortex-M4可選擇沒有FPU和有單精度FPU。Cortex-M7可選單精度FPU和雙精度FPU。可能是FPU作爲協處理器是獨立於CPU的存在吧。(高清圖,請到[6]下載)

 

順便提一下,想用DSP加速程序的前提是:不是浮點運算。然後纔是在SIMD和fast MAC中找下原先有幾條基礎指令才能完成但用DSP指令能一條完成的情況。使用時,儘量用CMSIS_DSP庫。

而下圖是Armv8下的CortexM系列的指令[6]。但不是本文的重點,(高清圖,請到[6]下載)

 

3 參考資料

[1] Joseph Yiu. ARM Cortex-M3與Cortex-m4權威指南(第3版)[M]. 吳常玉,曹孟娟,王麗紅,譯. 北京:清華大學出版社,2015.

[2] ARM® Cortex®-M7 Devices Generic User Guide

[3]What is the difference between the ARM, Thumb and Thumb 2 instruction encodings? https://stackoverflow.com/questions/28669905/what-is-the-difference-between-the-arm-thumb-and-thumb-2-instruction-encodings

[4] 扒一扒ARM Cortex-M各版本的第一款MCU   http://blog.sina.com.cn/s/blog_7889f9830102wth7.html

[5] Thumb指令集與ARM指令集的差別   https://www.cnblogs.com/mthoutai/p/7043477.html

[6] Cortex-M for Beginners - 2017_EN_v2  https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/white-paper-cortex-m-for-beginners-an-overview-of-the-arm-cortex-m-processor-family-and-comparison

未引用資料:

[1] ARM架構及ARM指令集、Thumb指令集你瞭解多少? http://www.sohu.com/a/339622340_100281310

[2] arm的一些概念(ARM7、Cortex-M的區別)   https://www.cnblogs.com/locean/p/5710377.html

 

發佈了25 篇原創文章 · 獲贊 5 · 訪問量 8207
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章