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