0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RISC和CISC的區(qū)別 ARM架構(gòu)簡(jiǎn)述

454398 ? 來源:博客園 ? 作者:濟(jì)南小老虎 ? 2020-09-30 16:07 ? 次閱讀

基本原理(記住1Byte=8bit):

電子計(jì)算機(jī)本質(zhì)上是通過給三極管 (或MOS管用半導(dǎo)體材料如硅和硒制成的) 的基極輸送不同的電壓(大于或小于0.7伏特,再講就深了,今天先不講了),進(jìn)而控制三極管對(duì)電容進(jìn)行充電和放電,實(shí)際是通過控制電子的流動(dòng)(所以叫做電子計(jì)算機(jī),個(gè)人理解),抽象出0和1的表示。圖1中紅線標(biāo)出的內(nèi)存,每行可以理解為8個(gè)電容,由內(nèi)存控制器控制充放電以及讀取電壓,充電狀態(tài)(與地電壓(電勢(shì)差)大于3.3V)表示1,放電狀態(tài)(電壓小于1.8V)表示0,紅線部分的寬度永遠(yuǎn)是8bit,不會(huì)變。有專門的的電路對(duì)這些電容的充放電狀態(tài)進(jìn)行讀取,比如讀到了某Byte的8個(gè)電容是00000110,就表示十進(jìn)制數(shù)字6,(當(dāng)然也有可能理解為96,比如某些摩托羅拉芯片下,大尾或小尾從左還是從右開始算的區(qū)別,超出本文討論范圍)

驅(qū)動(dòng):

簡(jiǎn)單來說,CPU與內(nèi)存之間通過若干根連線(地址、控制、數(shù)據(jù)總線)來交互信息,比如把0x00F800C這個(gè)內(nèi)存地址的第2個(gè)BIT位寫為1,就會(huì)觸發(fā)顯卡讀取某些內(nèi)存地址里的內(nèi)容并顯示到顯示器上。(實(shí)際上顯示設(shè)備和內(nèi)存之間也有連線,實(shí)現(xiàn)DMA操作,深了今天不講)。當(dāng)然為什么寫第2個(gè)BIT位就能觸發(fā)某種動(dòng)作,這是人為規(guī)定的,叫做架構(gòu)規(guī)范,架構(gòu)后面通過一系列復(fù)雜的電路來實(shí)現(xiàn)這個(gè)規(guī)定,比如intelx86規(guī)定內(nèi)存地址0x00F800C的第2個(gè)BIT位寫1可以觸發(fā)顯示動(dòng)作,而ARMv8架構(gòu)下,雖然同樣都是觸發(fā)顯示動(dòng)作,但不一定是操作這個(gè)位。這就是兩種架構(gòu)的差異。如果你作為程序員,編寫Intelx86架構(gòu)下的顯卡驅(qū)動(dòng)程序,實(shí)際是在編寫程序來操作0x00F800C地址Byte的第2個(gè)BIT位。這個(gè)特定位是通過將基地址+偏移寫進(jìn)芯片的datasheet來告知芯片應(yīng)用者(公司)的。比如這個(gè)例子中,0x00F8000是基地址,而C是偏移,用0x00F8000+0x0C來表示實(shí)際地址。這是一個(gè)極其聰明和有用的規(guī)定,這樣做的好處,后面章節(jié)會(huì)詳細(xì)描述。

64位與32位:是指圖1中的綠線和黃線標(biāo)出的部分,在32位CPU模式下,某個(gè)地址是十六進(jìn)制表示為00F8000C,這里每個(gè)數(shù)字包含4個(gè)二進(jìn)制bite位,共32位。而64位狀態(tài)下,這個(gè)數(shù)字實(shí)際是 0000000000F8000C,有64個(gè)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語(yǔ)言中,64位和32位的差異體現(xiàn)在sizeof(指針)上,實(shí)際代表的是內(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個(gè)地址(指令長(zhǎng)度規(guī)定,指令周期涉及CPU主頻,再講就深了,后面再開貼)中共4Byte長(zhǎng)度的二進(jìn)制數(shù)字,比如讀到了52800e01,這個(gè)數(shù)字實(shí)際上對(duì)應(yīng)的是一套電路編號(hào),執(zhí)行的操作是add r0,r1,意思是將r0和r1中存放的數(shù)字相加,把結(jié)果寫進(jìn)r0,這個(gè)過程實(shí)際上是調(diào)用編號(hào)為52800e01的電路來完成的,而這種不同編號(hào)的電路的集合,就是所謂的指令集。Intel CPU用的是復(fù)雜指令集CISC(Complex Instruction Set Computer),前面說的add r0,r1,這是一個(gè)CPU指令,實(shí)際對(duì)應(yīng)一套復(fù)雜的電路實(shí)現(xiàn)(包含若干電阻電容MOS等)。intel80x86系統(tǒng)有300條指令,就表示至少有300套不同的電路來實(shí)現(xiàn)這300個(gè)功能。 而ARM采用的是精簡(jiǎn)指令集RISC(Reduced Instruction Set Computer),有100條指令,實(shí)際對(duì)應(yīng)100套不同的電路裝置來實(shí)現(xiàn)這100個(gè)功能。我們用一個(gè)簡(jiǎn)單的C語(yǔ)言函數(shù)來剖析RISC和CISC的區(qū)別:

int test_mul(void)

{

return 6*8;

}

這個(gè)函數(shù)算出6乘以8,返回結(jié)果,我們來看看實(shí)際執(zhí)行時(shí),CISC和RISC的差別(此處為了簡(jiǎn)潔明了的闡述我們的問題,實(shí)際過程比這個(gè)復(fù)雜,我們提綱挈領(lǐng),再講就深了,后面有空再開貼)

(圖2

從圖中可以看出,同樣是實(shí)現(xiàn)6乘以8的功能,RISC用加法來實(shí)現(xiàn),把8連續(xù)加了6次,也就是說調(diào)用了6次add電路來實(shí)現(xiàn)的,而CISC直接調(diào)用乘法電路,實(shí)現(xiàn)了6*8,你可以粗淺地理解為RISC很精簡(jiǎn),沒有乘法電路。當(dāng)然,隨著CPU技術(shù)的發(fā)展,RISC和CISC一直在互相學(xué)習(xí),取長(zhǎng)補(bǔ)短慢慢融合了,目前界限已沒有那么明顯。從例子可以看出,CISC程序編碼簡(jiǎn)單。而RISC程序編碼相對(duì)復(fù)雜,因?yàn)殡娐贩N類較少,實(shí)現(xiàn)同樣的功能需要用僅有的電路來變通實(shí)現(xiàn)。C語(yǔ)言編譯器和操作系統(tǒng)共同作用,屏蔽了這種差異中的大部分內(nèi)容,使得不同芯片環(huán)境下,實(shí)現(xiàn)相同功能的代碼變得大同小異(記住是大同小異,實(shí)際還是有差異)。

理解了RISC和CISC,我們?cè)賮碚務(wù)凙RM。在單片機(jī)時(shí)代,有很多設(shè)計(jì)以及制造芯片的公司,比如飛利浦,飛思卡爾,意法半導(dǎo)體,ARM,恩智浦等公司,當(dāng)然,領(lǐng)頭羊還是Intel.這些公司中ARM比較獨(dú)特,他依托牛津劍橋科研實(shí)力,不做具體的芯片,只設(shè)計(jì)指令集(電路),這些人很聰明,他們深知,市面上存在多種芯片,但實(shí)現(xiàn)原理都是大同小異,所以他們專注于研發(fā)各種科學(xué)且合理的指令電路的設(shè)計(jì),并將自己的設(shè)計(jì)形成了規(guī)范,這個(gè)規(guī)范就是ARMvX架構(gòu),從8位時(shí)代的ARMv1,到32位的ARMv7,再到64位的ARMv8又叫ARM64,這些不同的架構(gòu)規(guī)范,后面對(duì)應(yīng)的一整套R(shí)ISC指令集,也就是電路圖,ARM公司的商業(yè)模式是出售指令集授權(quán)。比如ARM公司將ARMv4的指令集(電路圖)工藝以及實(shí)現(xiàn)樣片等打包授權(quán)給賣三星公司,三星拿到的是ARMv3的核心架構(gòu)設(shè)計(jì)圖紙,里面包含了RISC 指令集的實(shí)現(xiàn)電路圖,三星在這個(gè)核架構(gòu)的基礎(chǔ)上添加自己的外設(shè),比如I2C模塊及引腳、GPU顯示增強(qiáng)模塊及引腳、汽車內(nèi)網(wǎng)絡(luò)CAN模塊及引腳,AI人工智能計(jì)算模塊等,將CPU核以及這些外設(shè)模塊集成到一塊芯片中,命名為ARM7-S3C44B0X芯片,另一款基于ARMv5架構(gòu)生產(chǎn)出的芯片產(chǎn)品命名為S5P4418-ARM9等,投放市場(chǎng)出售。

至此,你應(yīng)該明白了ARM,ARMv7以及ARM7的概念了,ARMv7是架構(gòu)名,ARM7是基于ARMv3架構(gòu)生產(chǎn)的一個(gè)芯片的產(chǎn)品名稱。到ARM11芯片之后,ARM公司更改了芯片的命名規(guī)則,由老的ARMx改為 Cortex系列,簡(jiǎn)言之:

Cortex-M系列:M-Profile,即"Microcontroller" -Profile,側(cè)重微控制器單片機(jī)方面的場(chǎng)合。

Cortex-R系列:R-Profile,即"Real-Time"-Profile,側(cè)重于實(shí)時(shí)系統(tǒng)的場(chǎng)合。

Cortex-A系列: A-Profile,即“Application”-Profile,側(cè)重于應(yīng)用功能的場(chǎ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)用程序。一個(gè)典型的場(chǎng)景是linux操作系統(tǒng)的應(yīng)用,華為和三星生產(chǎn)了兩款不同的cortex A53芯片,內(nèi)核架構(gòu)是相同的,不同的是外設(shè)基地址,請(qǐng)參考前面“驅(qū)動(dòng)”章節(jié)的描述。Linux操作系統(tǒng)移植到華為和三星的這兩款芯片上,只需要修改相關(guān)外設(shè)所對(duì)應(yīng)的的頭文件中的基地址就可完成大部分功能的移植(注意是大部分,不是全部),當(dāng)然這依賴于linux開源系統(tǒng)優(yōu)秀的設(shè)計(jì)?;趌inux以及android系統(tǒng)之上的應(yīng)用,也實(shí)現(xiàn)了統(tǒng)一,基本不會(huì)出現(xiàn)一個(gè)app既要開發(fā)基于三星芯片的版本,又要開發(fā)基于華為芯片的另外一個(gè)版本的情況,從而推進(jìn)了移動(dòng)互聯(lián)網(wǎng)生態(tài)鏈的大發(fā)展(請(qǐng)對(duì)比考慮基于X86 linux和基于armv8 linux的確是需要開發(fā)兩套不同的APP版本的情況),ARM統(tǒng)一架構(gòu)的好處是顯而易見的。Intel顯然已經(jīng)意識(shí)到這種優(yōu)勢(shì),自己也買了ARM的授權(quán),推出相應(yīng)的“ARM核”芯片產(chǎn)品。

劃重點(diǎn),有助于理解,試想這樣一個(gè)場(chǎng)景:有四款cpu,分別是1.intel x86_64,2.三星Cortex a57,3.華為Cortex a53,4.博通bcm2837,這4款cpu運(yùn)行的都是64位linux 4.0,現(xiàn)在有個(gè)app要上市,請(qǐng)問這個(gè)app需要上架幾個(gè)不同版本?答案是兩個(gè),intelx86一個(gè),其他三個(gè)同一個(gè)。?為什么是兩個(gè)?根本原因是前面所說的指令集和驅(qū)動(dòng)。

最后,再來談?wù)勎宜就瞥龅腁RM芯片服務(wù)器,從本質(zhì)上來看,我認(rèn)為這種服務(wù)器在功耗方面與Intel x86系列差別不大,這是數(shù)字電路的原理使然,VOH和VOL(請(qǐng)百度)的邏輯電平是一樣的,差別在于電路工藝以及散熱等系統(tǒng)的設(shè)計(jì)。 我個(gè)人粗淺地認(rèn)為,ARM服務(wù)器的優(yōu)勢(shì)有兩點(diǎn):

1.生態(tài)優(yōu)勢(shì),主要是基于ARM linux 之上的應(yīng)用產(chǎn)業(yè)鏈,前文已有闡述。

2.開源優(yōu)勢(shì),因?yàn)锳RM的生態(tài)鏈上公司很多,各個(gè)公司在商業(yè)實(shí)踐過程中會(huì)產(chǎn)生各種新的改良建議和想法,ARM架構(gòu)集中了太多的智慧,而Intel實(shí)際是在單打獨(dú)斗。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 三極管
    +關(guān)注

    關(guān)注

    142

    文章

    3574

    瀏覽量

    121345
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10772

    瀏覽量

    210452
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8853

    瀏覽量

    84954
  • ARM芯片
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    21400
  • 電子計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8130
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RISC-V入門:模塊化開放式的ISA CISCRISC代碼區(qū)別

    本文是RISC-V基礎(chǔ)知識(shí)的入門篇。介紹了開放式架構(gòu)理念,模塊化ISA的技術(shù)描述,以及一些商業(yè)RISC-V微處理器實(shí)現(xiàn)。 RISC-V開放式指令集
    發(fā)表于 07-06 14:52 ?974次閱讀

    CISC(復(fù)雜指令集)與RISC(精簡(jiǎn)指令集)的區(qū)別  

    RISC(Reduced Instruction Set Computer)和CISC(complex instruction set computer)是當(dāng)前CPU的兩種架構(gòu)。 它們的區(qū)別
    發(fā)表于 07-30 17:21

    ARM Intel RISC CISC 單片機(jī) 精髓理解

    ARM intel ADM首先是架構(gòu),Intel是X86架構(gòu),用的CISC 復(fù)雜指令集而ARM(Advanced
    發(fā)表于 12-05 15:48

    RISCCISC有什么區(qū)別

    RISC vs CISC有什么區(qū)別
    發(fā)表于 04-02 06:27

    ARMRISC-V架構(gòu)區(qū)別是什么?

    、 Cortex-M處理器等。 ARM架構(gòu),更主要的是ARM指令集系統(tǒng)。不同于x86架構(gòu)的復(fù)雜指令集(CISC
    發(fā)表于 04-25 09:13

    ARMARM的架構(gòu)ARM架構(gòu)區(qū)別

    目錄文章目錄目錄ARMARM 的架構(gòu)x86 架構(gòu)ARM 架構(gòu)區(qū)別ARM 的技術(shù)實(shí)現(xiàn)ARMA
    發(fā)表于 07-16 06:43

    請(qǐng)問ARMRISC-V架構(gòu)區(qū)別是什么?

    請(qǐng)問ARMRISC-V架構(gòu)區(qū)別是什么?
    發(fā)表于 10-28 08:19

    精簡(jiǎn)指令集架構(gòu)RISC與復(fù)雜指令集架構(gòu)CISC有何區(qū)別

    精簡(jiǎn)指令集架構(gòu)RISC是什么?復(fù)雜指令集架構(gòu)CISC又是什么?精簡(jiǎn)指令集架構(gòu)RISC與復(fù)雜指令集
    發(fā)表于 12-23 10:02

    RISC-V開源架構(gòu)ARM架構(gòu)什么區(qū)別?

    很多公司覺得ARM收費(fèi)太高,決定一起搞RISC-V架構(gòu),是不是這種開源的是不是不收費(fèi)的;那和ARM有啥區(qū)別,能發(fā)展起來嗎
    發(fā)表于 10-30 06:38

    Taking the RISC Out of CISC

    已經(jīng)有一個(gè)模糊的定義之間的RISC(精簡(jiǎn)指令集計(jì)算機(jī))和CISC(復(fù)雜指令集計(jì)算)架構(gòu)的地步,在許多情況下,條款幾乎是毫無意義的。許多現(xiàn)代的RISC處理器比
    發(fā)表于 06-12 10:01 ?5次下載
    Taking the <b class='flag-5'>RISC</b> Out of <b class='flag-5'>CISC</b>

    簡(jiǎn)述risccisc區(qū)別

     我們經(jīng)常談?wù)撚嘘P(guān)“PC”與“Macintosh”的話題,但是又有多少人知道以Intel公司X86為核心的PC系列正是基于CISC體系結(jié)構(gòu),而 Apple公司的Macintosh則是基于RISC體系結(jié)構(gòu),CISC
    發(fā)表于 12-19 11:19 ?2.1w次閱讀

    RISCCISC架構(gòu)6大方面的差異

    首先從字面上理解就能知道, CISC(Complex Instruction SetComputer)架構(gòu)的指令數(shù)肯定是遠(yuǎn)遠(yuǎn)多于RISC(ReducedInstruction Set
    發(fā)表于 05-14 11:58 ?4765次閱讀
    <b class='flag-5'>RISC</b>和<b class='flag-5'>CISC</b><b class='flag-5'>架構(gòu)</b>6大方面的差異

    RISCCISC架構(gòu)有什么區(qū)別

    CISC(復(fù)雜指令集計(jì)算機(jī))和RISC(精簡(jiǎn)指令集計(jì)算機(jī))是當(dāng)前CPU的兩種架構(gòu)。它們的區(qū)別在于不同的CPU設(shè)計(jì)理念和方法。早期的CPU全部是CIS
    的頭像 發(fā)表于 02-07 16:05 ?1.9w次閱讀

    X86架構(gòu)Arm架構(gòu)區(qū)別

    X86架構(gòu)ARM架構(gòu)是主流的兩種CPU架構(gòu),X86架構(gòu)的CPU是PC服務(wù)器行業(yè)的老大,ARM
    的頭像 發(fā)表于 06-16 12:50 ?2.2w次閱讀
    X86<b class='flag-5'>架構(gòu)</b>與<b class='flag-5'>Arm</b><b class='flag-5'>架構(gòu)</b>的<b class='flag-5'>區(qū)別</b>

    ARM處理器和CISC處理器的區(qū)別

    ARM處理器和CISC(復(fù)雜指令集計(jì)算機(jī))處理器在多個(gè)方面存在顯著的區(qū)別。這些區(qū)別主要體現(xiàn)在架構(gòu)原理、性能與功耗、設(shè)計(jì)目標(biāo)、應(yīng)用領(lǐng)域以及市場(chǎng)
    的頭像 發(fā)表于 09-10 11:10 ?267次閱讀