哈佛架構、馮諾依曼架構、指令集

1、CISC與RISC的區別:

 
CISC(複雜指令集):複雜指令集就是CPU在工作的時候需要有很多的彙編指令來完成,它可以用一個彙編指令來完成一件複雜的工作。例如:乘法,加法,乘加,乘減等處理的時候,他會每個處理方式用一條指令來完成。因此這種設計實際上是很強大的,因爲同樣處理一個運算,它可以用一個機器週期就可以完成了。但是其內部的硬件設計就相對而言的比較複雜了一些。而且,這樣的設計勢必就會遭成功耗的增加。例如現在的大部分PC機的處理器都是這種的。51單片機也是這種方式的。

 

RISC(精簡指令集):相對於複雜指令集而言,精簡指令集所需要的彙編指令就會少很多了。例如:在完成(1+1)×(2-1)這樣的運算的時候,第一次先算1+1等於2然後再算2-1等於1,最後在算2×1等於2。這樣他就要經歷好幾個機器週期才能完成一次運算。而如果用複雜指令集的話可能一次就可以算出來結果了。由於現在的CPU主頻基本上在原料不變的情況下是很難再提高他的(主頻)運算速度了。所以,精簡指令集的CPU在單核的效率上是遠不如複雜指令集的CPU的。因此,爲了達到與複雜指令集的CPU同樣的運算效率,現在的手機經常會增加內核的數量來提升自身的處理效率。

 

2、地址總線、數據總線和控制總線的區別(這裏的總線主要指外部總線,不包括內核的總線):

 

地址總線(Address Bus):當CPU要處理數據的時候首先地址總線會根據要處理的數據的地址在內存中找到要處理的數據,然後再對其進行相應的處理。也就是說,地址總線的寬度決定了CPU能夠處理的數據地址的總量的大小。由於地址總線總是由CPU發起的尋址要求,因此數據總線只能由CPU主動向外部尋找它所需要的地址,而不能被外部的IO主動使用。因此,地址總線是單向(只能由CPU主動去讀而不會對其進行寫)三態(高電平、低電平、高阻態)的。

 

數據總線(Data Bus):當CPU需要讀取或寫入數據的時候由地址總線先去尋址,然後再由數據總線對所讀到的地址進行讀或寫操作(CPU一次讀寫的數據總量由數據總線的寬度決定)。最終實現CPU所要實現的相應功能。由於CPU會通過數據總線對所要處理的地址進行讀和寫兩種方式的操作。因此,數據總線是雙向三態的。

 

控制總線(Control Bus):當CPU要對外部的外設(IO設備或內存)進行操作的時候,控制總線會對相應的外設發出相應的控制指令,然後再由數據總線對其進行操作。由於控制總線要對所有的外設進行控制,因此,他是雙向的且十分的靈活,而其總線的寬度也是不確定的,主要有外設的數量決定其寬度。

3、統一編址和獨立編址的區別:

要明白統一編址和獨立編址的區別首先要知道CPU在處理數據的時候其實是要先由控制總線發送控制指令,然後再對外設(這裏的外設包括IO設備和內存)進行尋址的操作,只有找到了要操作的硬件或內存的地址之後才能對其進行相應的操作。而這個尋址的方式是由CPU對地址的編址方式決定的。而編址方式就分爲統一編址和獨立編址。

 

統一編址:統一編址就是當CPU要對IO設備進行操作的時候,就直接由地址總線進行尋址,因爲地址總線的寬度是一定的,也就是所尋址的範圍是一定的。而如果由它直接對IO設備進行尋址,那勢必會佔用有限的地址,進而會導致對其能夠操作的內存大小就會有所限制。這也就導致了地址總線所能尋到的內存地址並不和自己的總線寬度對應上。(假如一個32位寬度的地址總線本來可以尋址4GB的內存地址,但是由於它一般分外設佔用了他的地址,因此,他所能使用的內存就會小於4GB。)

 

獨立編址:獨立編址的CPU在對IO設備進行操作的時候會有專門的操作指令,而不會用內存操作指令,這樣就會使地址總線僅服務於內存,而不會被其他IO外設佔用。也因此會使內存的大小等於地址總線的寬度。

4、哈佛結構和馮諾依曼結構的區別:

要理解哈弗結構和馮諾依曼結構的區別,首先要知道我們在編寫程序的時候其實可以對程序的代碼劃分爲兩個部分,一部分是程序編寫完成後就不再需要對其進行修改了的(也就是邏輯代碼部分)另一部分就是在程序編寫完畢後其內容會隨着程序的運行而不斷變化的部分(也就是定義變量)。而哈佛結構和馮諾依曼結構就是對於這個兩部分代碼的存儲方式的區別。

 

哈佛結構:哈佛結構就是將程序的邏輯代碼和變量分開存放的一種結構,而他們存放的位置可以是形同的也可以是不同的,總是隻要是分成兩個部分單獨訪問的結構都可以叫哈佛結構。(例如:51的程序的邏輯代碼段放在ROM中,而變量部分則放在ROM中;而ARM的邏輯代碼和變量都是存放在RAM(內存)中的,但是,它在內存中劃分了兩部分的空間,其中一部分放邏輯代碼,另一部分方變量。之間不會相互干擾)哈佛結構的優點就是邏輯代碼和變量單獨存放,使之不會相互干擾,進而當程序出BUG的時候,最多隻會修改變量的值,而不會修改程序的執行順序(邏輯關係)。因此,這種結構大量應用在嵌入式編程當中。

 

馮諾依曼結構:馮諾依曼結構則是將邏輯代碼段和變量統一都存儲在內存當中,他們之間一般是按照代碼的執行順序依次存儲。這樣就會導致一個問題,如果當程序出現BUG的時候,由於程序沒有對邏輯代碼段的讀寫限定,因此,他將擁有和普通變量一樣的讀寫操作權限。於是就會很容易的死機,一旦他的邏輯執行出現一點該變就會出現非常嚴重的錯誤。但是,馮諾依曼結構的好處是可以充分利用有限的內存空間,並且會使CPU對程序的執行十分的方便,不用來回跑。

4.1

一、哈佛結構

       哈佛結構(Harvard architecture)是一種將程序指令儲存和數據儲存分開的存儲器結構。中央處理器首先到程序指令儲存器中讀取程序指令內容,解碼後得到數據地址,再到相應的數據儲存器中讀取數據,並進行下一步的操作(通常是執行)。程序指令儲存和數據儲存分開,數據和指令的儲存可以同時進行,可以使指令和數據有不同的數據寬度,如Microchip公司的PIC16芯片的程序指令是14位寬度,而數據是8位寬度。

       哈佛結構的微處理器通常具有較高的執行效率。其程序指令和數據指令分開組織和儲存的,執行時可以預先讀取下一條指令。

       目前使用哈佛結構的中央處理器微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,還有摩托羅拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安謀公司的ARM9、ARM10和ARM11。大多數DSP是哈佛結構的。

二、馮·諾伊曼結構

       馮.諾伊曼結構(von Neumann architecture),也稱普林斯頓結構,是一種將程序指令存儲器和數據存儲器合併在一起的電腦設計概念結構。該結構隱約指導了將儲存裝置與中央處理器分開的概念,因此依該結構設計出的計算機又稱儲存程式型電腦。

       最早的計算機器僅內涵固定用途的程式。現代的某些計算機依然維持這樣的設計方式,通常是爲了簡化或教育目的。例如一個計算器僅有固定的數學計算程式,它不能拿來當作文書處理軟件,更不能拿來玩遊戲。若想要改變此機器的程式,你必須更改線路、更改結構甚至重新設計此機器。當然最早的計算機並沒有設計的那個可編程化。當時所謂的“重寫程式”很可能指的是紙筆設計程式步驟,接着制訂工程細節,再施工將機器的電路配線或結構改變。

       而儲存程式型電腦的概念改變了這一切。藉由創造一組指令集結構,並將所謂的運算轉化成一串程式指令的執行細節,讓此機器更有彈性。藉着將指令當成一種特別型態的靜態資料,一臺儲存程式型電腦可輕易改變其程式,並在程控下改變其運算內容。馮·諾伊曼結構儲存程式型電腦是互相通用的名詞,其用法將於下述。而哈佛結構則是一種將程式資料與普通資料分開儲存的設計概念,但是它並未完全突破馮.諾伊曼架構。

       儲存程式型概念也可讓程式執行時自我修改程式的運算內容。本概念的設計動機之一就是可讓程式自行增加內容或改變程式指令的內存位置,因爲早期的設計都要使用者手動修改。但隨着索引暫存器與間接位置存取變成硬件結構的必備機制後,本功能就不如以往重要了。而程式自我修改這項特色也被現代程式設計所棄揚,因爲它會造成理解與除錯的難度,且現代中央處理器的管線與快取機制會讓此功能效率降低。

       從整體而言,將指令當成資料的概念使得組合語言編譯器與其他自動編程工具得以實現;可以用這些“自動編程的程式”,以人類較易理解的方式編寫程式;從局部來看,強調I/O的機器,例如Bitblt,想要修改畫面上的圖樣,以往是認爲若沒有客製化硬件就辦不到。但之後顯示這些功能可以藉由“執行中編譯”技術而有效達到。

       此結構當然有所缺陷,除了下列將述的馮·諾伊曼瓶頸之外,修改程式很可能是非常具傷害性的,無論無意或設計錯誤。在一個簡單的儲存程式型電腦上,一個設計不良的程式可能會傷害自己、其他程式甚或是操作系統,導致當機緩衝區溢位就是一個典型例子。而創造或更改其他程式的能力也導致了惡意軟件的出現。利用緩衝區溢位,一個惡意程式可以覆蓋呼叫堆棧(Call stack)並覆寫程式碼,並且修改其他程式檔案以造成連鎖破壞。內存保護機制及其他形式的存取控制可以保護意外或惡意的程式碼更動。大多數CPU和GPU是馮諾依曼結構的。

 

5、單片機和CPU的區別

在嵌入式領域ARM芯片和CPU有什麼區別呢?其實隨着嵌入式科技的不斷髮展,單片機(像ARM芯片)和CPU的界限越來越模糊,我們暫且可以認爲ARM芯片就是一個CPU,或者暫且認爲單片機就相當於一個CPU。

6、:什麼是ARM芯片

凡是採用ARM內核的芯片(或者凡是採用ARM內核的CPU)都是ARM芯片。例如高通的OMAP36X0系列處理器(Droid 2和Droid X用的OMAP3630),採用的就是ARM內核,所以在概念上我們也可以將其稱爲ARM芯片

/7、:什麼是ARM內核

所謂內核,就是CPU裏面實現運算的核心,我們也可以將內核稱之爲CPU(注意,該CPU是真正意義上的CPU,因爲它實現了數據的運算與處理)。而問題一中所說的單片機和芯片相當於一個CPU只是指宏觀意義上的CPU。ARM內核只是一個統稱,它有以下幾個系列:ARM7,ARM9,ARM11,CORTEX等幾個內核家族,每個內核家族都有不同的內核種類,比如CORTEX內核家族就有:Cortex-A8內核、Cortex-A9內核、Cortex-R4內核、Cortex-M0內核、Cortex-M1、Cortex-M3、Cortex-M4內核等,目前使用最廣的STM32系列芯片使用的就是Cortex-M3內核。具體內核家族分類見:http://hardware.mydrivers.com/2/223/223488_all.htm

8、什麼是架構

片面上講,我們可以將架構理解爲內核所使用的指令集。例如:用於高端的(手機等)Cortex-A8,Cortex-A9等內核用的是ARMv7-A架構,或者說用的是ARMv7-A指令集架構,我們常用到的STM32的Cortex-M3內核用到的是ARMv7-M架構。

9、:什麼是指令集

所謂指令集就是一整套底層指令的統稱。分爲RISC(簡單指令集)和CISC(複雜指令集),相比較而言RISC指令集的指令格式統一,種類比較少,尋址方式也比複雜指令集少,而CISC指令集的效率比較高。拿STM32系列芯片使用的ARMv7指令集來講,ARMv7意思是ARM的第七個版本的指令,採用的RISC。


 

CPU的中間就是我們平時稱作核心芯片或CPU內核的地方,這顆由單晶硅做成的芯片可以說是電腦的大腦了,所有的計算、接受/存儲命令、處理數據都是在這指甲蓋大小的地方進行的。

目前絕大多數CPU都採用了一種翻轉內核的封裝形式,也就是說平時我們所看到的CPU內核其實是這顆硅芯片的底部,它是翻轉後封裝在陶瓷電路基板上的,這樣的好處是能夠使CPU內核直接與散熱裝置接觸。這種技術也被使用在當今絕大多數的CPU上。而CPU核心的另一面,也就是被蓋在陶瓷電路基板下面的那面要和外界的電路相連接。現在的CPU都有以千萬計算的晶體管,它們都要連到外面的電路上,而連接的方法則是將每若干個晶體管焊上一根導線連到外電路上。例如Duron核心上面需要焊上3000條導線,而奔騰4的數量爲5000條,用於服務器的64位處理器Itanium則達到了7500條。這麼小的芯片上要安放這麼多的焊點,這些焊點必須非常的小,設計起來也要非常的小心。由於所有的計算都要在很小的芯片上進行,所以CPU內核會散發出大量的熱,核心內部溫度可以達到上百度,而表面溫度也會有數十度,一旦溫度過高,就會造成CPU運行不正常甚至燒燬,因此很多電腦書籍或者雜誌都會常常強調對CPU散熱的重要性。CPU還應有確定的主板,如:i7的CPU就只能用專用的主板。 核心(Die)又稱爲內核,是CPU最重要的組成部分。CPU中心那塊隆起的芯片就是核心,是由單晶硅以一定的生產工藝製造出來的,CPU所有的計算、接受/存儲命令、處理數據都由核心執行。各種CPU核心都具有固定的邏輯結構,一級緩存、二級緩存、執行單元、指令級單元和總線接口等邏輯單元都會有科學的佈局 
存儲在Active Directory 中的對象類別和屬性的描述。對於每一個對象類別來說,該架構定義了對象類必須具有的屬性,它也可以有附加的屬性,並且該對象可以是它的父對象。 
可以動態更新的Active Directory 架構。例如,應用程序可以使用新的屬性和類擴展該架構,並能立刻使用該擴展。通過在Active Directory 中創建或修改存儲在 Active Directory 中的架構對象來完成架構的更新。與Active Directory 中的所有對象一樣,架構對象能訪問控制列表,因此只有授權的用戶纔可以更改架構。

 

 

 

指令集架構如:ARMv5、ARMv6、ARMv7-A/R、ARMv8-A [28]

       ARM內核如:ARM7、ARM9、ARM11(v6)、到cortex-A7、A8、A9、A12、A15(v7-A/R)、到cortex-A53、A57(V8)、A72、A73。緩存(cache)就是在內核中的[4]。這些內核又名公版架構,即ARM推出的通用的架構。

       SoC芯片如:高通(Qualcomm)的驍龍(Snapdragon)820、821,835;麒麟950(4XCortex-A72+4XCortex-A53)、960(4*Cortex-A73+4*Cortex-A53);聯發科的HelioX20、X25、X30;三星的Exynos8890、7420、5433等。還有如STM32(基於ARM cortex M3內核)

       再次,現在我們口中所說的處理器,已經不是過去那種單指cpu的年代了,確切的說應該是指SoC。SoC(System on Chip): 稱爲系統級芯片,也稱爲片上系統,意指它是一個產品,是一個有專有目標的集成電路,其中包含完整系統並嵌入軟件的全部內容。官方定義爲將微處理器、模擬IP核、數字IP核和存儲器(或者片外存儲接口)集成在單一芯片上。——簡單的比喻一下,如果把CPU看成人體的大腦,那麼SoC就是我們人的身體總成(還要包括各種器官、組織)。即GPU、總線、顯示加速器、ISP、視頻編解碼器、音頻處理器、Memory控制器、傳感器處理單元,以及DDR、Flash、顯示接口、Camera接口、射頻RF、USB等對外接口。要把這些元器件集成在一起,構成一個整體。而且還要保證各個元器件之間能夠協調、穩定的運行,這樣的設計技術所投入的研發費用並不是每個廠商能夠接受的[2]。

       ARM公司本身並不參與終端處理器芯片的製造和銷售,而是通過向其它芯片廠商授權設計方案,來獲取收益。——舉個例子,如果處理器相當於一棟完整的建築, ARM就像是建築的框架,至於最後建造出來的房子長什麼樣,舒適度如何,就是由處理器廠商自己決定了。但是採用相同架構的處理器,性能基本上已經鎖定在一定的範圍之內,不會有本質的區別。所以,看處理器的性能要先看微架構[3]。

       ARM公司提供兩類CPU授權:核心指令集授權,以及現成的CPU內核設計方案授權[2][3]。業內多數手機處理器廠商選擇直接購買ARM CPU內核設計方案,然後與其它組件(比如GPU、多媒體處理、調制解調器等等)整合,製造出完整的SoC片上系統。這些現成的CPU都是基於ARM Cortex A5、A8、A9,甚至A15微架構的。或是基於現有的架構進行二次定製修改的,比如三星的蜂鳥Hummingbird核心等都是在Cortex-A8的基礎上修改的。2011年,三星正式推出Exynos4 Dual 4210芯片(Dual代表雙核)和對應的新旗艦手機Galaxy SII,同時也將“蜂鳥”改名爲Exynos3 Single 3110(single代表單核),這正是之後Exynos家族的開端。2016年第一季度,三星發佈了Exynos8 Octa 8890(Octa代表8核),它有一個非常重大的意義在於——這是三星第一款擁有自研架構的ARM芯片[22]。注意,經過我的調研,所謂的自研架構,也可以稱爲自研微架構,其實就是自己研究出來類似於cortex-A53,A73等類似的這些公版的核,也稱爲公版微架構。

       但也有少數手機處理器廠商,如高通,直接在ARM v7指令集的基礎上深度開發自己的處理器微架構,如高通公司的Scorpion和Krait,進而設計自主的CPU,具有更大的靈活性。Scorpion和Krait的角色就和cortex A53和cortex A57的角色類似和ARMv7、v8的角色類似[6]。Scorpion(蠍子)是高通根據Cortex-A8修改的,關鍵的特點是同頻下更加節能約30%左右,現在的驍龍820以及835採用的是Kryo架構[27],其中820是Kryo,835是其升級版Kryo280。

       

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章