前言

大家好,我是ZhengN。

 

近段嘗試著寫一些科普文。

 

本次來分享一些芯片相關的小科普文。作為嵌入式開發工程師,我們對芯片都需要有一D的了解。

 

指令集

1、指令集的體現

指令集,就是CPU中用來計算和控制計算機系統的一套指令的集合。而指令集的先進與否,也關系到CPU的性能發揮,它也是CPU性能體現的一個重要標志。

 

指令集也作為一種標準規范,用于規范芯片設計工程師及編譯器開發工程師:

 

 

因為芯片與IDE都遵循相同的指令集標準,所以高級語言編寫的程序經指定編譯器編譯后能直接運行在對應的CPU上,反之則不能運行。

 

如arm-linux-gnueabihf-gcc編譯得到的程序并不能運行在X86 CPU上運行:

 

 

2、指令集的分類

從現階段的主流體系結構講,指令集可分為復雜指令集和精簡指令集兩部分:

 

 

(1)復雜指令集

復雜指令集側重于硬件執行指令的功能性,其對應的硬件結構很復雜。

 

復雜指令集的特點是指令長度不固定,執行需要多個周期;其有很多用于特定目的的專用寄存器;處理器能夠直接處理寄存器中的數據。

 

復雜指令集主要應用于電腦的處理器,我們的個人電腦處理器用的是X86:

 

 

(2)精簡指令集

精簡指令集側重于結構簡單、處理速度更加快速上。

 

精簡指令集的特點是:一個周期執行一條指令,指令長度固定,通過簡單指令的組合實現復雜的操作;其寄存器多是通用寄存器。精簡指令集主要用于嵌入式處理器上。

 

我們比較熟知的就是ARM指令集、MIPS指令集及RISC-V指令集。

 

① ARM

其中ARM指令集是目前用得Z多的。ARM家族占比所有32位嵌入式處理器的75%,成為占全世界Z多數的32位架構。

 

ARM處理器廣泛使用在嵌入式系統設計,低耗電節能,非常適用移動通訊領域。

 

消費性電子產品,例如可攜式裝置(PDA、移動電話、多媒體播放器、掌上型電子游戲,和計算機),電腦外設(硬盤、桌上型路由器),甚至導彈的彈載計算機等軍用設施。

 

隨著處理器的不斷發展,應用需求不斷提高,ARM指令集也發展了很多個版本:

 

ARM V1:Z初版本,采用的地址空間是26位的,尋址空間是64MB,這個版本沒有商業化。

 

ARM V2:增加了乘法指令及支持協處理器指令。

 

ARM V3:實現了32位的地址空間。

 

ARM V4:增加了半字指令的讀取和寫入操作,增加了處理器系統模式,增加Thumb指令集。

 

ARM V5:增加了DSP指令、JAVA指令。

 

ARM V6:增加60多條SIMD指令。

 

ARM V7:采用了NEON技術,將DSP和媒體處理能力提高了近4倍。并支持改良的浮點運算。

 

ARM V8:增加64位指令集、寄存器數量增加到31個。

 

② MIPS

在設計理念上MIPS指令集強調軟硬件協同提高性能,同時簡化硬件設計。

 

其指令系統經過通用處理器指令體系MIPS I、MIPS II、MIPS III、MIPS IV到MIPS V,嵌入式指令體系MIPS16、MIPS32到MIPS64的發展已經十分成熟。

 

在嵌入式方面,MIPS K系列微處理器是僅次于ARM的用得Z多的處理器之一(1999年以前MIPS是世界上用得Z多的處理器),其應用領域覆蓋游戲機、路由器、激光打印機、掌上電腦等各個方面。

 

③ RISC-V

RISC-V(讀作“RISC-FIVE”)是基于精簡指令集計算(RISC)原理建立的開放指令集架構(ISA)。

 

RISC-V指令集的設計考慮了小型、快速、低功耗的現實情況來實做,但并沒有對特定的微架構做過度的設計。

 

主流的架構為x86與ARM架構為了能夠保持架構的向后兼容性,其不得不保留許多過時的定義,導致其指令數目多。而RISC-V架構則能完全拋棄包袱,從輕上路。

 

RISC-V基礎指令集則只有40多條,加上其他的模塊化擴展指令總共幾十條指令。

 

RISC-V特點:

  • 完全開源:開源采用寬松的BSD協議,企業完全自由免費使用,同時也容許企業添加自有指令集拓展而不必開放共享以實現差異化發展。架構簡單:RISC-V基礎指令集則只有40多條,加上其他的模塊化擴展指令總共幾十條指令。易于移植:RISC-V提供了詳細的特權級指令規范和用戶級指令規范的詳細信息,使開發者能非常方便的移植linux和unix系統到RISC-V平臺。模塊化設計:RISC-V其不同的部分以模塊化的方式組織在一起,用戶能夠靈活選擇不同的模塊組合,來實現自己定制化設備的需要。完整的工具鏈:芯片設計公司不再擔心工具鏈問題,只需專注于芯片設計,RISC-V社區已經提供了完整的工具鏈。

 

阿里巴巴全資的半導體平頭哥半導體有限公司也有設計出基于RISC-V的芯片,如:

 

 

ARM處理器微架構

指令集是一個很深層次的概念,在這之上我們還需要了解一個與此相關的概念:微架構(Microarchitecture),上面RISC-V的介紹中也有提到這個概念。

 

微架構的概念其實我們并不陌生,我們來看一個框圖:

 

 

這是STM32F103系列芯片的一個框圖。

 

微架構其就是我們常說的xxx內核(注:內核有兩種概念,一種是硬件層面的概念,另一種是軟件層面的概念。這里指的是硬件層面的概念),比如STM32F103的內核是ARM Cortex-M3內核就是一種微架構。

 

一套指令集只能設計出一種微架構?

 

顯然不是的。針對于不同的應用場景如高性能、低功耗等不同的場景,可以基于同一套指令集設計出不同的微架構。

 

比如我們嵌入式中接觸得比較多的應該是基于ARMV7指令集的Cortex系列內核:

 

 

ARM公司授權方式?

 

ARM公司自己并不生產芯片,也不賣芯片,而是靠IP授權盈利。其主要有以下三種授權方式:

 

 

1、架構層級授權

架構層級的授權是芯片廠商在付費獲得指令集授權之后,可以基于該指令集設計自己的內核。

 

架構層級方面,只有幾個手機方面的芯片廠商可以玩得起。目前只有幾個頭部芯片能獲得ARM架構層級的授權:

 

  • 蘋果:Swift架構。高通:Krait微架構、Scorpion微架構。三星:貓鼬微架構。華為:無。采用公版ARM微架構。

 

其中,高通、三星曾采用ARM公版+自研架構的組合,但現在基本放棄自研架構,采用公版ARM微架構。蘋果是目前是唯一一家能跟ARM這種商業模式做到五五開。

 

之前有一個疑問,蘋果實力這么強了,為何不自研指令集完全擺脫對于ARM的依賴?

 

網上查了一下,查到一些回答:

 

1、完全自研,你沒辦法保證上下游的開發者也有設備可用,沒可用設備的話,誰來給開發軟件?

 

2、完全自研,所有核心技術都得很多更專業的人來做,人力成本可能會比授權費還高。

 

3、ARM和蘋果的淵源很深,當年蘋果是ARM的創始股東之一,后來蘋果陸續賣掉了ARM的股票,再后來蘋果基于ARM的架構開始大搞自研芯片。其實蘋果現在就是在自研,可以理解為ARM的花式魔改。

 

華為目前在手機CPU方面現在并無自研微架構。華為麒麟芯片用的還是公版的ARM微架構,但現在已經被卡脖子了(停止內核層級授權),這樣的形式不太樂觀。

 

雖然華為擁有ARMV8指令集永久授權,但之前并沒有基于ARMV8自研出自己的微架構,可能已經在研發中了。

 

雖然在手機CPU方面還沒有自研微架構,但已有自研云端AI芯片“騰(Ascend )”系列,基于自研的達芬奇架構。不知道自研NPU微架構與自研CPU架構的難度差距有多大,但還是希望華為能早點自研出手機CPU微架構。

 

就算能成功自研出了自己的CPU微架構,華為的路也還是不好走啊。

 

假設之后研發成功了,也還需要長期的驗證才敢投入使用,畢竟華為手機市場那么大,搭載自研微架構處理器地手機一旦翻車,損失巨大。另外,這只是擁有ARMV8指令集的永久授權,之后如果指令集更新迭代了,技術豈不是又要落后別人好幾代了~

 

2、內核層級授權

內核層級的授權是ARM公司設計出不同的微架構,其他芯片公司可以購買這些微架構,再添加一些自己的一些外設模塊,就可以設計出一個芯片。比如:

 

 

ST公司購買了了ARM公司的Cortex-M3內核,然后加上圖上的一些外設模塊如TIM、IIC、SPI等這些模塊之后就可以設計出STM32F103系列芯片。

 

ARM的內核層級授權客戶很多,如:ST、TI、三星、海思、瑞芯微、全志等。

 

3、使用層級授權

使用層級的授權就是可以使用封裝好的ARM芯片,而不能進行任何修改。

 

作為Z低的授權等級,擁有使用授權的用戶只能購買已經封裝好的ARM處理器核心,而如果想要實現更多功能和特性,則只能通過增加封裝之外的DSP核心的形式來實現(當然,也可以通過對芯片的再封裝方法來實現)。

 

Z后

以上就是本次的分享。如有錯誤,歡迎指出!

 

碼字不易,如果覺得文章有幫助,麻煩幫忙轉發轉發,謝謝!

 

參考資料:

1、《嵌入式C語言自我修養》

 

2、《ARM嵌入式體系結構與接口技術》

 

3、一文讀懂ARM架構

 

4、三星放棄自研CPU架構采用公版arm架構是明智的選擇 

 

5、其它