基本原理(記住1Byte=8bit):
電子計算機本質上是通過給三極管 (或MOS管用半導體材料如硅和硒制成的) 的基極輸送不同的電壓(大于或小于0.7伏特,再講就深了,今天先不講了),進而控制三極管對電容進行充電和放電,實際是通過控制電子的流動(所以叫做電子計算機,個人理解),抽象出0和1的表示。圖1中紅線標出的內存,每行可以理解為8個電容,由內存控制器控制充放電以及讀取電壓,充電狀態(與地電壓(電勢差)大于3.3V)表示1,放電狀態(電壓小于1.8V)表示0,紅線部分的寬度永遠是8bit,不會變。有專門的的電路對這些電容的充放電狀態進行讀取,比如讀到了某Byte的8個電容是00000110,就表示十進制數字6,(當然也有可能理解為96,比如某些摩托羅拉芯片下,大尾或小尾從左還是從右開始算的區別,超出本文討論范圍)
驅動:
簡單來說,CPU與內存之間通過若干根連線(地址、控制、數據總線)來交互信息,比如把0x00F800C這個內存地址的第2個BIT位寫為1,就會觸發顯卡讀取某些內存地址里的內容并顯示到顯示器上。(實際上顯示設備和內存之間也有連線,實現DMA操作,深了今天不講)。當然為什么寫第2個BIT位就能觸發某種動作,這是人為規定的,叫做架構規范,架構后面通過一系列復雜的電路來實現這個規定,比如intelx86規定內存地址0x00F800C的第2個BIT位寫1可以觸發顯示動作,而ARMv8架構下,雖然同樣都是觸發顯示動作,但不一定是操作這個位。這就是兩種架構的差異。如果你作為程序員,編寫Intelx86架構下的顯卡驅動程序,實際是在編寫程序來操作0x00F800C地址Byte的第2個BIT位。這個特定位是通過將基地址+偏移寫進芯片的datasheet來告知芯片應用者(公司)的。比如這個例子中,0x00F8000是基地址,而C是偏移,用0x00F8000+0x0C來表示實際地址。這是一個極其聰明和有用的規定,這樣做的好處,后面章節會詳細描述。
64位與32位:是指圖1中的綠線和黃線標出的部分,在32位CPU模式下,某個地址是十六進制表示為00F8000C,這里每個數字包含4個二進制bite位,共32位。而64位狀態下,這個數字實際是 0000000000F8000C,有64個bit位。在CPU內部有寄存器,intel 80x86架構的寄存器名稱是ax,bx,cx等,而ARM架構下是r0,r1,r2,r3,r4,r5等,寄存器的寬度也分32位和64位。在ARMv7以及以前的架構中,只有32位。在2013年ARM推出64位架構ARMv8,寄存器是64位寬,相應的寄存器名稱為x0,x1,x2,x3等。在C語言中,64位和32位的差異體現在sizeof(指針)上,實際代表的是內存地址的寬度,注意是圖1中綠線標出的寬度,不是紅線,紅線永遠是8bit寬,不要混淆。
指令集:
CPU讀取硬盤或FLASH的上物理位置從0到4K之間的一段二進制流,這段流稱為程序,這段程序的大小就是4K,CPU把這段程序寫入內存地址0x00000000到0x00001000 (這里0x00001000=4096=4K),之后,CPU內的PC寄存器內寫入0x00000000,表示從內存地址0處開始執行機器指令。本質是讀出該地址后4個地址(指令長度規定,指令周期涉及CPU主頻,再講就深了,后面再開貼)中共4Byte長度的二進制數字,比如讀到了52800e01,這個數字實際上對應的是一套電路編號,執行的操作是add r0,r1,意思是將r0和r1中存放的數字相加,把結果寫進r0,這個過程實際上是調用編號為52800e01的電路來完成的,而這種不同編號的電路的集合,就是所謂的指令集。Intel CPU用的是復雜指令集CISC(Complex Instruction Set Computer),前面說的add r0,r1,這是一個CPU指令,實際對應一套復雜的電路實現(包含若干電阻電容MOS等)。intel80x86系統有300條指令,就表示至少有300套不同的電路來實現這300個功能。 而ARM采用的是精簡指令集RISC(Reduced Instruction Set Computer),有100條指令,實際對應100套不同的電路裝置來實現這100個功能。我們用一個簡單的C語言函數來剖析RISC和CISC的區別:
int test_mul(void)
{
return 6*8;
}
這個函數算出6乘以8,返回結果,我們來看看實際執行時,CISC和RISC的差別(此處為了簡潔明了的闡述我們的問題,實際過程比這個復雜,我們提綱挈領,再講就深了,后面有空再開貼)
(圖2
從圖中可以看出,同樣是實現6乘以8的功能,RISC用加法來實現,把8連續加了6次,也就是說調用了6次add電路來實現的,而CISC直接調用乘法電路,實現了6*8,你可以粗淺地理解為RISC很精簡,沒有乘法電路。當然,隨著CPU技術的發展,RISC和CISC一直在互相學習,取長補短慢慢融合了,目前界限已沒有那么明顯。從例子可以看出,CISC程序編碼簡單。而RISC程序編碼相對復雜,因為電路種類較少,實現同樣的功能需要用僅有的電路來變通實現。C語言編譯器和操作系統共同作用,屏蔽了這種差異中的大部分內容,使得不同芯片環境下,實現相同功能的代碼變得大同小異(記住是大同小異,實際還是有差異)。
理解了RISC和CISC,我們再來談談ARM。在單片機時代,有很多設計以及制造芯片的公司,比如飛利浦,飛思卡爾,意法半導體,ARM,恩智浦等公司,當然,領頭羊還是Intel.這些公司中ARM比較獨特,他依托牛津劍橋科研實力,不做具體的芯片,只設計指令集(電路),這些人很聰明,他們深知,市面上存在多種芯片,但實現原理都是大同小異,所以他們專注于研發各種科學且合理的指令電路的設計,并將自己的設計形成了規范,這個規范就是ARMvX架構,從8位時代的ARMv1,到32位的ARMv7,再到64位的ARMv8又叫ARM64,這些不同的架構規范,后面對應的一整套RISC指令集,也就是電路圖,ARM公司的商業模式是出售指令集授權。比如ARM公司將ARMv4的指令集(電路圖)工藝以及實現樣片等打包授權給賣三星公司,三星拿到的是ARMv3的核心架構設計圖紙,里面包含了RISC 指令集的實現電路圖,三星在這個核架構的基礎上添加自己的外設,比如I2C模塊及引腳、GPU顯示增強模塊及引腳、汽車內網絡CAN模塊及引腳,AI人工智能計算模塊等,將CPU核以及這些外設模塊集成到一塊芯片中,命名為ARM7-S3C44B0X芯片,另一款基于ARMv5架構生產出的芯片產品命名為S5P4418-ARM9等,投放市場出售。
至此,你應該明白了ARM,ARMv7以及ARM7的概念了,ARMv7是架構名,ARM7是基于ARMv3架構生產的一個芯片的產品名稱。到ARM11芯片之后,ARM公司更改了芯片的命名規則,由老的ARMx改為 Cortex系列,簡言之:
Cortex-M系列:M-Profile,即"Microcontroller" -Profile,側重微控制器單片機方面的場合。
Cortex-R系列:R-Profile,即"Real-Time"-Profile,側重于實時系統的場合。
Cortex-A系列: A-Profile,即“Application”-Profile,側重于應用功能的場合。
比如我司生產的Hi3798mv200芯片,大的架構基于ARMv8(又叫ARM64)的,而ARMv8中又有Cortex A53分支,準確表達應該是:華為Hi3798mv200是基于ARMv8的Cortex-A53系列的一款芯片。下面是從wiki百科扣的圖,從中可以窺出ARM家族的架構和產品系列的一斑。
基于統一標準的ARMvX架構標準制造出的芯片,好處非常多,生產芯片的目的是顯然是為了運行應用程序。一個典型的場景是linux操作系統的應用,華為和三星生產了兩款不同的cortex A53芯片,內核架構是相同的,不同的是外設基地址,請參考前面“驅動”章節的描述。Linux操作系統移植到華為和三星的這兩款芯片上,只需要修改相關外設所對應的的頭文件中的基地址就可完成大部分功能的移植(注意是大部分,不是全部),當然這依賴于linux開源系統優秀的設計。基于linux以及android系統之上的應用,也實現了統一,基本不會出現一個app既要開發基于三星芯片的版本,又要開發基于華為芯片的另外一個版本的情況,從而推進了移動互聯網生態鏈的大發展(請對比考慮基于X86 linux和基于armv8 linux的確是需要開發兩套不同的APP版本的情況),ARM統一架構的好處是顯而易見的。Intel顯然已經意識到這種優勢,自己也買了ARM的授權,推出相應的“ARM核”芯片產品。
劃重點,有助于理解,試想這樣一個場景:有四款cpu,分別是1.intel x86_64,2.三星Cortex a57,3.華為Cortex a53,4.博通bcm2837,這4款cpu運行的都是64位linux 4.0,現在有個app要上市,請問這個app需要上架幾個不同版本?答案是兩個,intelx86一個,其他三個同一個。?為什么是兩個?根本原因是前面所說的指令集和驅動。
最后,再來談談我司推出的ARM芯片服務器,從本質上來看,我認為這種服務器在功耗方面與Intel x86系列差別不大,這是數字電路的原理使然,VOH和VOL(請百度)的邏輯電平是一樣的,差別在于電路工藝以及散熱等系統的設計。 我個人粗淺地認為,ARM服務器的優勢有兩點:
1.生態優勢,主要是基于ARM linux 之上的應用產業鏈,前文已有闡述。
2.開源優勢,因為ARM的生態鏈上公司很多,各個公司在商業實踐過程中會產生各種新的改良建議和想法,ARM架構集中了太多的智慧,而Intel實際是在單打獨斗。
編輯:hfy
-
三極管
+關注
關注
143文章
3627瀏覽量
122480 -
cpu
+關注
關注
68文章
10911瀏覽量
213150 -
服務器
+關注
關注
12文章
9335瀏覽量
86135 -
ARM芯片
+關注
關注
1文章
126瀏覽量
21590 -
電子計算機
+關注
關注
0文章
16瀏覽量
8225
發布評論請先 登錄
相關推薦
RISC-V入門:模塊化開放式的ISA CISC和RISC代碼區別
CISC(復雜指令集)與RISC(精簡指令集)的區別
什么是RISC-V?以及RISC-V和ARM、X86的區別
ARM Intel RISC CISC 單片機 精髓理解
Taking the RISC Out of CISC
![Taking the <b class='flag-5'>RISC</b> Out of <b class='flag-5'>CISC</b>](https://file.elecfans.com/web2/M00/49/92/pYYBAGKhtGOAco-lAABJJCoSN_E437.png)
評論