|
幾個(gè)基礎(chǔ)材料 (源:http://jwc./zq/signal/new/importent/zhang5_6/feng.htm http://jwc./zq/signal/new/importent/zhang5_6/harvard.htm http:///dingjun/html/14/84FB43402106C575.html)
馮.諾曼結(jié)構(gòu)
1945年,馮.諾曼首先提出了“存儲(chǔ)程序”的概念和二進(jìn)制原理,后來(lái),人們把利用這種概念和原理設(shè)計(jì)的電子計(jì)算機(jī)系統(tǒng)統(tǒng)稱為“馮.諾曼型結(jié)構(gòu)”計(jì)算機(jī)。馮.諾曼結(jié)構(gòu)的處理器使用同一個(gè)存儲(chǔ)器,經(jīng)由同一個(gè)總線傳輸,如下圖所示:
圖 馮.諾曼結(jié)構(gòu) 馮.諾曼結(jié)構(gòu)處理器具有以下幾個(gè)特點(diǎn):
馮.諾曼的主要貢獻(xiàn)就是提出并實(shí)現(xiàn)了“存儲(chǔ)程序”的概念。由于指令和數(shù)據(jù)都是二進(jìn)制碼,指令和操作數(shù)的地址又密切相關(guān),因此,當(dāng)初選擇這種結(jié)構(gòu)是自然的。但是,這種指令和數(shù)據(jù)共享同一總線的結(jié)構(gòu),使得信息流的傳輸成為限制計(jì)算機(jī)性能的瓶頸,影響了數(shù)據(jù)處理速度的提高。 在典型情況下,完成一條指令需要3個(gè)步驟,即:取指令、指令譯碼和執(zhí)行指令。從指令流的定時(shí)關(guān)系也可看出馮.諾曼結(jié)構(gòu)與哈佛結(jié)構(gòu)處理方式的差別。舉一個(gè)最簡(jiǎn)單的對(duì)存儲(chǔ)器進(jìn)行讀寫操作的指令,如下圖所示,指令1至指令3均為存、取數(shù)指令,對(duì)馮.諾曼結(jié)構(gòu)處理器,由于取指令和存取數(shù)據(jù)要從同一個(gè)存儲(chǔ)空間存取,經(jīng)由同一總線傳輸,因而它們無(wú)法重疊執(zhí)行,只有一個(gè)完成后再進(jìn)行下一個(gè)。
圖 馮.諾曼結(jié)構(gòu)處理器指令流的定時(shí)關(guān)系示意圖
哈佛結(jié)構(gòu) 數(shù)字信號(hào)處理一般需要較大的運(yùn)算量和較高的運(yùn)算速度,為了提高數(shù)據(jù)吞吐量,在數(shù)字信號(hào)處理器中大多采用哈佛結(jié)構(gòu),如下圖所示
圖 哈佛結(jié)構(gòu) 與馮.諾曼結(jié)構(gòu)處理器比較,哈佛結(jié)構(gòu)處理器有兩個(gè)明顯的特點(diǎn):
后來(lái),又提出了改進(jìn)的哈佛結(jié)構(gòu),如下圖所示
圖 改進(jìn)型哈佛結(jié)構(gòu) 其結(jié)構(gòu)特點(diǎn)為:
在典型情況下,完成一條指令需要3個(gè)步驟,即:取指令、指令譯碼和執(zhí)行指令。從指令流的定時(shí)關(guān)系也可看出馮.諾曼結(jié)構(gòu)與哈佛結(jié)構(gòu)處理方式的差別。舉一個(gè)最簡(jiǎn)單的對(duì)存儲(chǔ)器進(jìn)行讀寫操作的指令,如下圖所示,指令1至指令3均為存、取數(shù)指令,對(duì)馮.諾曼結(jié)構(gòu)處理器,由于取指令和存取數(shù)據(jù)要從同一個(gè)存儲(chǔ)空間存取,經(jīng)由同一總線傳輸,因而它們無(wú)法重疊執(zhí)行,只有一個(gè)完成后再進(jìn)行下一個(gè)。
圖 馮.諾曼結(jié)構(gòu)處理器指令流的定時(shí)關(guān)系示意圖 如果采用哈佛結(jié)構(gòu)處理以上同樣的3條存取數(shù)指令,如下圖所示,由于取指令和存取數(shù)據(jù)分別經(jīng)由不同的存儲(chǔ)空間和不同的總線,使得各條指令可以重疊執(zhí)行,這樣,也就克服了數(shù)據(jù)流傳輸?shù)钠款i,提高了運(yùn)算速度。 哈佛結(jié)構(gòu)強(qiáng)調(diào)了總的系統(tǒng)速度以及通訊和處理器配置方面的靈活性。
圖 哈佛結(jié)構(gòu)處理器指令流的定時(shí)關(guān)系示意圖
------------------------------------------------------- arm7系列的CPU有很多款,其中部分CPU沒(méi)有內(nèi)部cache的,比如arm7TDMI,就是純粹的馮·諾依曼結(jié)構(gòu),其他有內(nèi)部cache、且數(shù)據(jù)和指令的cache分離的cpu則使用了哈弗結(jié)構(gòu)。
哈佛結(jié)構(gòu)是一種將程序指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)分開(kāi)的存儲(chǔ)器結(jié)構(gòu)。中央處理器首先到程序指令存儲(chǔ)器中讀取程序指令內(nèi)容,解碼后得到數(shù)據(jù)地址,再到相應(yīng)的數(shù)據(jù)存儲(chǔ)器中讀取數(shù)據(jù),并進(jìn)行下一步的操作(通常是執(zhí)行)。“程序指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)分開(kāi),可以使指令和數(shù)據(jù)有不同的數(shù)據(jù)寬度”,如Microchip公司的PIC16芯片的程序指令是14位寬度,而數(shù)據(jù)是8位寬度。
馮·諾依曼體系和哈佛總線體系的區(qū)別
-------------------------------------------------------- http://blog.sina.com.cn/s/blog_4c60c6360100f9bs.html 是什么結(jié)構(gòu)要看總線結(jié)構(gòu)的。51單片機(jī)雖然數(shù)據(jù)指令存儲(chǔ)區(qū)是分開(kāi)的,但總線是分時(shí)復(fù)用得,所以頂多算改進(jìn)型的哈佛結(jié)構(gòu)。ARM9雖然是哈佛結(jié)構(gòu),但是之前的版本也還是馮·諾依曼結(jié)構(gòu)。早期的X86能迅速占有市場(chǎng),一條很重要的原因,正是靠了馮·諾依曼這種實(shí)現(xiàn)簡(jiǎn)單,成本低的總線結(jié)構(gòu)。現(xiàn)在的處理器雖然外部總線上看是諾依曼結(jié)構(gòu)的,但是由于內(nèi)部CACHE的存在,因此實(shí)際上內(nèi)部來(lái)看已經(jīng)算是改進(jìn)型哈佛結(jié)構(gòu)的了。至于優(yōu)缺點(diǎn),哈佛結(jié)構(gòu)就是復(fù)雜,對(duì)外圍設(shè)備的連接與處理要求高,十分不適合外圍存儲(chǔ)器的擴(kuò)展。所以早期通用CPU難以采用這種結(jié)構(gòu)。而單片機(jī),由于內(nèi)部集成了所需的存儲(chǔ)器,所以采用哈佛結(jié)構(gòu)也未嘗不可。現(xiàn)在的處理器,依托CACHE的存在,已經(jīng)很好的將二者統(tǒng)一起來(lái)了。
馮諾依曼結(jié)構(gòu)中執(zhí)行取指令后在執(zhí)行譯碼時(shí),還可以再取啊,就像流水線,沒(méi)必要等一條完了再去取指令啊。只不過(guò)哈佛能同時(shí)取數(shù)據(jù)和指令罷了。
-------------------------------------------------------- http://bbs./bbsdetail-271991-18.html PIC系列單片機(jī)與MCS-51系列單片機(jī)的區(qū)別MCS-51單片機(jī)有著嵌入式處理器經(jīng)典的體系結(jié)構(gòu),這種體系結(jié)構(gòu)在當(dāng)前嵌入式處理器的高端ARM系列上仍然在延續(xù),這就是哈佛結(jié)構(gòu)。相對(duì)于大名鼎鼎的馮·諾依曼結(jié)構(gòu),哈佛結(jié)構(gòu)的知名度顯然遜色許多,但在嵌入式應(yīng)用領(lǐng)域,哈佛結(jié)構(gòu)卻擁有著絕對(duì)的優(yōu)勢(shì)。哈佛結(jié)構(gòu)與馮·諾依曼結(jié)構(gòu)的最大區(qū)別在于馮·諾依曼結(jié)構(gòu)的計(jì)算機(jī)采用代碼與數(shù)據(jù)的統(tǒng)一編址,而哈佛結(jié)構(gòu)是獨(dú)立編址的,代碼空間與數(shù)據(jù)空間完全分開(kāi)。 在通用計(jì)算機(jī)系統(tǒng)中,應(yīng)用軟件的多樣性使得計(jì)算機(jī)要不斷地變化所執(zhí)行的代碼的內(nèi)容,并且頻繁地對(duì)數(shù)據(jù)與代碼占有的存儲(chǔ)器進(jìn)行重新分配,這種情況下,馮·諾依曼結(jié)構(gòu)占有絕對(duì)優(yōu)勢(shì),因?yàn)榻y(tǒng)一編址可以最大限度地利用資源,而哈佛結(jié)構(gòu)的計(jì)算機(jī)若應(yīng)用于這種情形下則會(huì)對(duì)存儲(chǔ)器資源產(chǎn)生理論上最大可達(dá)50%的浪費(fèi),這顯然是不合理的。 但是在嵌入式應(yīng)用中,系統(tǒng)要執(zhí)行的任務(wù)相對(duì)單一,程序一般是固化在硬件里。當(dāng)然這時(shí)使用馮·諾依曼結(jié)構(gòu)也完全可以,代碼區(qū)和數(shù)據(jù)區(qū)在編譯時(shí)一次性分配好了而已,但是其靈活性得不到體現(xiàn),所以現(xiàn)在大量的單片機(jī)也還在沿用馮·諾依曼結(jié)構(gòu),如TI的MSP430系列、Freescale的HCS08系列等。 那是為什么說(shuō)哈佛結(jié)構(gòu)有優(yōu)勢(shì)呢?嵌入式計(jì)算機(jī)在工作時(shí)與通用計(jì)算機(jī)有著一些區(qū)別:嵌入式計(jì)算機(jī)在工作期間的絕大部分時(shí)間是無(wú)人值守的,而通用計(jì)算機(jī)工作期間一般是有人操作的;嵌入式計(jì)算機(jī)的故障可能會(huì)導(dǎo)致災(zāi)難性的后果,而通用計(jì)算機(jī)一般就是死死機(jī),重新啟動(dòng)即可。這兩點(diǎn)決定了對(duì)嵌入式計(jì)算機(jī)的一個(gè)基本要求:可靠性。 使用馮·諾依曼結(jié)構(gòu)的計(jì)算機(jī),程序空間不封閉,其程序空間的數(shù)據(jù)在運(yùn)行期理論上可以被修改,此外程序一旦跑飛也有可能運(yùn)行到數(shù)據(jù)區(qū)。雖然都是一些不常見(jiàn)的特殊情況下,但是看看哈佛結(jié)構(gòu)的計(jì)算機(jī)在這些情況下是怎樣的:基于哈佛結(jié)構(gòu)的處理器如MCS-51,不需要可以對(duì)代碼段進(jìn)行寫操作的指令,所以不會(huì)有代碼區(qū)被改寫的問(wèn)題;程序只能在封閉的代碼區(qū)中運(yùn)行,不可能跑到數(shù)據(jù)區(qū),這也是跑飛的幾率減少并且跑飛后的行為有規(guī)律(數(shù)據(jù)區(qū)的數(shù)據(jù)是不斷變化的而代碼區(qū)是不變的)。 所以,相對(duì)于馮·諾依曼結(jié)構(gòu),哈佛結(jié)構(gòu)更加適合于那些程序固化、任務(wù)相對(duì)簡(jiǎn)單的控制系統(tǒng)。
說(shuō)MCS-51是馮-諾依曼型是不正確的,絕大多數(shù)51單片機(jī)都是哈佛結(jié)構(gòu),PIC從12-33都是哈佛結(jié)構(gòu)。
補(bǔ)充一下:【哈佛結(jié)構(gòu)】是不允許同時(shí)訪問(wèn)RAM和FLASH/ROM的。只有【改進(jìn)的哈佛結(jié)構(gòu)】才可以同時(shí)訪問(wèn)RAM和FLASH/ROM。51系列部分單片機(jī)已經(jīng)在低端產(chǎn)品上使用了流水線技術(shù)(但沒(méi)有鎖相環(huán)),而PIC 16位機(jī)都沒(méi)有流水線(有鎖相環(huán))。 在執(zhí)行速度上算是平分秋色吧。
-------------------------------------------------------- 哈佛結(jié)構(gòu)馮諾依曼結(jié)構(gòu)與地址是否復(fù)用沒(méi)有關(guān)系 (源:http://modayu838.blog.163.com/blog/static/6443111920096631450970/) 關(guān)于這個(gè)問(wèn)題,有人說(shuō)51地址線復(fù)用,就是馮諾依曼結(jié)構(gòu)。 很多入門的書上基本上都說(shuō):由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備組成的系統(tǒng)都叫馮氏結(jié)構(gòu)。也有的說(shuō):“程序存儲(chǔ)器的數(shù)據(jù)線地址線”與“數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)線地址線”共用的話,就是馮氏結(jié)構(gòu),所以51是該結(jié)構(gòu)。(我認(rèn)為說(shuō)得太絕對(duì)了)
哈佛結(jié)構(gòu)的微處理器通常具有較高的執(zhí)行效率。其程序指令和數(shù)據(jù)指令分開(kāi)組織和存儲(chǔ)的,執(zhí)行時(shí)可以預(yù)先讀取下一條指令。目前使用哈佛結(jié)構(gòu)的中央處理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,還有摩托羅拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11,51單片機(jī)也屬于哈佛結(jié)構(gòu)
評(píng)論:哈佛結(jié)構(gòu)和馮.諾依曼結(jié)構(gòu)都是一種存儲(chǔ)器結(jié)構(gòu)。哈佛結(jié)構(gòu)是將指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開(kāi)的一種存儲(chǔ)器結(jié)構(gòu);而馮.諾依曼結(jié)構(gòu)將指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合在一起的存儲(chǔ)器結(jié)構(gòu)。 圖2 Harvard architecture 哈佛結(jié)構(gòu)采用數(shù)據(jù)存儲(chǔ)器與程序代碼存儲(chǔ)器分開(kāi),各自有自己的數(shù)據(jù)總線與地址總線。但這是需要CPU提供大量的數(shù)據(jù)線,因而很少使用哈佛結(jié)構(gòu)作為CPU外部構(gòu)架來(lái)使用。但是對(duì)于 CPU內(nèi)部,通過(guò)使用不同的數(shù)據(jù)和指令cache,可以有效的提高指令執(zhí)行的效率,因而目前大部分計(jì)算機(jī)體系都是CPU內(nèi)部的哈弗結(jié)構(gòu)+CPU外部的馮·諾伊曼的結(jié)構(gòu)。
---------------------------------------------------------- http://www./blog/Archive_Thread.asp?SID=18056
RISC vs CISC vs ARM【經(jīng)典】這里介紹兩種主流的計(jì)算機(jī)體系結(jié)構(gòu): 所謂"體系結(jié)構(gòu)",是指程序員在某CPU上進(jìn)行程序設(shè)計(jì)時(shí)能夠使用的“處理器資源”,其中最重要的是處理器所提供的指令系統(tǒng)和寄存器組。注意體系結(jié)構(gòu) (architecture)和組成(structure)的區(qū)別:前者是處理器的邏輯抽象,是程序員關(guān)注的部分。后者是具體實(shí)現(xiàn),一般為計(jì)算機(jī)系統(tǒng)設(shè)計(jì)人員關(guān)注。一般來(lái)說(shuō),arachitecture,structure是不同層次的概念,但兩者也有一定的聯(lián)系。 以指令系統(tǒng)的設(shè)計(jì)為例:相同的指令系統(tǒng)可以通過(guò)“硬連接”或“微程序”的方法來(lái)實(shí)現(xiàn)。前者通過(guò)CPU的硬件電路來(lái)實(shí)現(xiàn),后者通過(guò)"微程序"來(lái)實(shí)現(xiàn)。如果指令集以硬連接實(shí)現(xiàn),那么對(duì)于復(fù)雜指令來(lái)說(shuō),電路設(shè)計(jì)就非常困難;反之,若用微程序來(lái)實(shí)現(xiàn)指令集,可以實(shí)現(xiàn)復(fù)雜指令。現(xiàn)代CISC處理器一般都使用微碼來(lái)實(shí)現(xiàn)。 在使用微碼技術(shù)的處理器中,實(shí)際存在著兩套不同層次的指令:一套是面向程序員的,高層的指令;一套是面向硬件實(shí)現(xiàn)的,底層的微碼。在指令與微碼之間存在著一個(gè)“解釋器”,它將指令翻譯成對(duì)應(yīng)的微碼序列。由此可以想象,指令與微碼之間的關(guān)系實(shí)際上時(shí)“子程序調(diào)用”思想的推廣。
微碼相對(duì)于指令的特點(diǎn): 1,微碼代表的都是非常簡(jiǎn)單的基本操作,而指令可能非常復(fù)雜。 從處理器架構(gòu)來(lái)看,可以將使用微碼技術(shù)的現(xiàn)代CISC的基本單元視為一個(gè)快速的RISC內(nèi)核。這樣問(wèn)題就出來(lái)了:如果不引入“解釋器”,而直接使用 RISC微碼作為指令,那會(huì)怎樣呢?——這正是RISC的思想。 下面我們來(lái)看看使用微碼實(shí)現(xiàn)的CISC指令集的優(yōu)缺點(diǎn):
這方便于復(fù)制數(shù)據(jù)結(jié)構(gòu)。對(duì)于其他的復(fù)雜操作,也可以通過(guò)一條指令就實(shí)現(xiàn)。CISC復(fù)雜指令的尋址方式也種類繁多,操作數(shù)可以直接來(lái)自內(nèi)存。但復(fù)雜指令為現(xiàn)代處理器技術(shù)中廣泛使用的流水線技術(shù)引入了問(wèn)題:在微處理器中指令的執(zhí)行一般分為“預(yù)指”,“取操作數(shù)”,“運(yùn)算”,“存放”等操作。對(duì)于CISC 復(fù)雜指令,他們的執(zhí)行時(shí)間各不相同[note_2](有的可在4,5個(gè)時(shí)鐘周期內(nèi)完成,有的卻需要幾十個(gè),即便對(duì)于簡(jiǎn)單指令,也會(huì)由于尋址方式的不同造成不同的執(zhí)行時(shí)間)。更糟糕的是,指令長(zhǎng)度也不一致,同一指令的長(zhǎng)度也會(huì)因不同的尋址方式而變化。針對(duì)這些指令,如何設(shè)計(jì)流水線長(zhǎng)度呢?若按最短指令設(shè)計(jì)流水線,當(dāng)碰到復(fù)雜指令時(shí)流水線就會(huì)發(fā)生中斷;若按最長(zhǎng)指令設(shè)計(jì)流水線,執(zhí)行較短指令時(shí)就會(huì)跳過(guò)某些工位,使流水線不能完全充滿。 針對(duì)上述情況,以及20-80定律(80%的情況下執(zhí)行的是占指令集20%的常用指令)。多數(shù)復(fù)雜指令很少用到。當(dāng)使用高級(jí)語(yǔ)言進(jìn)行程序設(shè)計(jì)時(shí),編譯器為了兼容早期的CPU,一般不會(huì)生成特殊的復(fù)雜指令。如果舍棄這些不常用的復(fù)雜指令,就能簡(jiǎn)化CPU的設(shè)計(jì)。這正是RISC的出發(fā)點(diǎn)。 RISC的特點(diǎn) 2,指令的操作數(shù)必須預(yù)存于寄存器中,這樣取指操作的時(shí)間也統(tǒng)一了。 3,指令長(zhǎng)度,尋址方式,格式都整齊劃一:這樣可以充分利用流水線,基本上可實(shí)現(xiàn)一個(gè)時(shí)鐘脈沖執(zhí)行一條指令的目標(biāo)。 4,RISC的子程序調(diào)用與CISC的不同:在CISC中,程序調(diào)用、返回時(shí)需將上下文保存在堆棧中,需要內(nèi)存操作。而RISC將它們存放在寄存器中,而且參數(shù)也使用寄存器傳遞。(若存在嵌套的子程序調(diào)用,中間調(diào)用過(guò)程中的上下文還是要從寄存器"濺出"(spill)到堆棧中,而"葉"子程序不需要。) 5,RISC中斷可視為特殊的子程序鏈接:CISC中發(fā)生中斷時(shí),所有的寄存器內(nèi)容都被壓入堆棧,而RISC對(duì)中斷進(jìn)行區(qū)分對(duì)待,分為輕量級(jí)和重量級(jí)。對(duì)輕量級(jí)中斷只保存需要保存的寄存器內(nèi)容;對(duì)重量級(jí)中斷的處理如同常規(guī)中斷。 6,RISC都采用流水線、高速緩存、不使用微碼。 當(dāng)然,RISC也有它的缺點(diǎn):代碼密度不高,可執(zhí)行文件體積較大,匯編代碼可讀性較差。代碼密度不高是個(gè)值得關(guān)注的問(wèn)題:若不使用cache,會(huì)需要更大的指令存儲(chǔ)空間,取指時(shí)也占用更大的存儲(chǔ)器帶寬。若采用cache,又會(huì)降低cache的命中率。 RISC vs ARM ARM的獨(dú)特 1,ARM可提供壓縮形式的指令集:Thumb,它將ARM指令集的一個(gè)子集編碼為16位指令。處理器在執(zhí)行時(shí)可以切換到執(zhí)行Thumb指令模式。 對(duì)RISC,CISC看法的”誤區(qū)“ 1,RISC指令都是簡(jiǎn)單指令。 2,CISC的復(fù)雜指令速度慢、執(zhí)行效率很低。 3,RISC處理器比CISC處理器需要更多的寄存器. 4,RISC都有流水線。 總之,RISC處理器設(shè)計(jì)的簡(jiǎn)單性使得RISC處理器在體積、功耗、散熱、造價(jià)上都有優(yōu)勢(shì)。 [note_1] 哈佛結(jié)構(gòu),馮.諾依曼結(jié)構(gòu)介紹: [note_2] 關(guān)于周期的概念: 時(shí)鐘脈沖的重復(fù)周期稱為時(shí)鐘周期,時(shí)鐘周期是CPU的基本時(shí)間計(jì)量單位,它由計(jì)算機(jī)主頻決定。 一個(gè)CPU同外部設(shè)備和內(nèi)存儲(chǔ)器之間進(jìn)行信息交換過(guò)程所需要的時(shí)間稱為總線周期。 關(guān)于RISC,CISC,看這里!
----------------------------------------------------------------- http://blog./jerryer/12929/message.aspx
RISC與CISC
看RISC CPU的設(shè)計(jì),才發(fā)現(xiàn)自己本科真的什么也沒(méi)有學(xué)過(guò),呵呵,感謝King,正是由于跟她針?shù)h相對(duì)的討論,自己才會(huì)不斷查找資料下去,自己也才總算有了一點(diǎn)點(diǎn)概念,現(xiàn)整理一下。 傳統(tǒng)意義上的精簡(jiǎn)指令集計(jì)算機(jī)(RISC)和復(fù)雜指令集計(jì)算機(jī)(CISC)在基本原理上就存在著差異。但是,現(xiàn)代的微控制器技術(shù)正在不斷縮小著RISC架構(gòu)和CISC架構(gòu)之間的差異。 差異由來(lái)已久 RISC機(jī)型擁有一個(gè)有限的指令集合,并且能夠極快地執(zhí)行每一條指令。但是由于缺乏復(fù)雜指令,因此需要在軟件方面進(jìn)行大量的工作。RISC方案的另一個(gè)優(yōu)勢(shì)在于有限的指令數(shù)量能夠產(chǎn)生一個(gè)很小的核心。但由于使用精簡(jiǎn)指令所編寫出來(lái)的代碼會(huì)更長(zhǎng),所以執(zhí)行任務(wù)所需的內(nèi)存也就更大。因此,對(duì)于復(fù)雜的程序來(lái)說(shuō),由于要考慮到各種可能的情況,最終的程序代碼可能非常大。 RISC指令集有許多特征,其中最重要的有: 指令種類少,指令格式規(guī)范:RISC指令集通常只使用一種或少數(shù)幾種格式。指令長(zhǎng)度單一(一般4個(gè)字節(jié)),并且在字邊界上對(duì)齊,字段位置、特別是操作碼的位置是固定的。 尋址方式簡(jiǎn)化:幾乎所有指令都使用寄存器尋址方式,尋址方式總數(shù)一般不超過(guò)5個(gè)。其他更為復(fù)雜的尋址方式,如間接尋址等則由軟件利用簡(jiǎn)單的尋址方式來(lái)合成。 大量利用寄存器間操作:RISC指令集中大多數(shù)操作都是寄存器到寄存器操作,只以簡(jiǎn)單的Load和Store操作訪問(wèn)內(nèi)存。因此,每條指令中訪問(wèn)的內(nèi)存地址不會(huì)超過(guò)1個(gè),訪問(wèn)內(nèi)存的操作不會(huì)與算術(shù)操作混在一起。 簡(jiǎn)化處理器結(jié)構(gòu):使用RISC指令集,可以大大簡(jiǎn)化處理器的控制器和其他功能單元的設(shè)計(jì),不必使用大量專用寄存器,特別是允許以硬件線路來(lái)實(shí)現(xiàn)指令操作,而不必像CISC處理器那樣使用微程序來(lái)實(shí)現(xiàn)指令操作。因此RISC處理器不必像CISC處理器那樣設(shè)置微程序控制存儲(chǔ)器,就能夠快速地直接執(zhí)行指令。 另一方面,CISC機(jī)型有著豐富的指令集合,使計(jì)算機(jī)能夠利用一兩條指令就能執(zhí)行非常復(fù)雜的操作,原因在于它通過(guò)運(yùn)行一條內(nèi)部微代碼而把匯編指令分解成若干條內(nèi)部微代碼指令。這樣做,設(shè)備的負(fù)擔(dān)就不是很高,而且代碼的分布密度也恰到好處。雖然CISC機(jī)型下的內(nèi)核代碼要比相應(yīng)的RISC機(jī)型大許多,但由于代碼密度分布合理,而且考慮到內(nèi)存的因素,最終所產(chǎn)生的代碼長(zhǎng)度就沒(méi)有RISC產(chǎn)生的那么大。 體系結(jié)構(gòu)的差異更重要 微控制器之間的各種差異要比RISC和CISC種類上的差異重要得多。馮.諾依曼體系結(jié)構(gòu)(Von Neuman)與哈佛體系結(jié)構(gòu)(Harvard)之爭(zhēng)就是此類差異之一。另外一種就是基于寄存器體系結(jié)構(gòu)和基于累加器體系結(jié)構(gòu)的差異。在馮.諾依曼體系結(jié)構(gòu)中,數(shù)據(jù)和程序存儲(chǔ)器是共享數(shù)據(jù)總線的。數(shù)據(jù)總線共享有很多優(yōu)點(diǎn),比如減小總線的開(kāi)銷。另外一個(gè)優(yōu)點(diǎn)在于能夠把RAM映射到程序空間,這樣設(shè)備也能訪問(wèn)EEPROM中的內(nèi)存。 而對(duì)于哈佛體系結(jié)構(gòu)的計(jì)算機(jī),程序和數(shù)據(jù)總線是分開(kāi)的。這種方式的優(yōu)勢(shì)在于能夠在一個(gè)時(shí)鐘周期內(nèi)同時(shí)讀取程序和數(shù)據(jù),這樣就相應(yīng)地減少了執(zhí)行每一條指令所需的時(shí)鐘周期。早期的哈佛架構(gòu)的計(jì)算機(jī)是不能把查找表儲(chǔ)存在程序存儲(chǔ)器中的,而這個(gè)問(wèn)題在現(xiàn)在的大多數(shù)設(shè)備中已經(jīng)解決了。 哈佛體系結(jié)構(gòu)計(jì)算機(jī)中存在的另外一個(gè)問(wèn)題就是,如果要和外部的程序和數(shù)據(jù)存儲(chǔ)器進(jìn)行交互,對(duì)于兩部分存儲(chǔ)器來(lái)說(shuō),由于地址總線和數(shù)據(jù)總線的相互獨(dú)立性,就需要額外增加大量的芯片管腳。因此,只有當(dāng)至少有一種存儲(chǔ)器的類型是內(nèi)部的情況下,微處理器才會(huì)采用哈佛體系結(jié)構(gòu)。 在基于累加器體系結(jié)構(gòu)中,累加器既是數(shù)學(xué)運(yùn)算單元(ALU)的數(shù)據(jù)源之一,又是ALU存放操作結(jié)果的地方。通?;诶奂悠黧w系結(jié)構(gòu)的微處理器,能夠在累加器與程序存儲(chǔ)器中任何位置的存儲(chǔ)單元或是RAM之間進(jìn)行各種數(shù)學(xué)或邏輯操作。這種架構(gòu)的優(yōu)勢(shì)就在于對(duì)于內(nèi)存地址的訪問(wèn)更為方便快捷。 基于寄存器體系結(jié)構(gòu)的微處理器中,會(huì)有一系列的寄存器直接與ALU相連。這種情況的好處在于不需要把所有的數(shù)據(jù)都?jí)哼M(jìn)一個(gè)累加器中,從而減少了許多在累加器架構(gòu)中存在的“move”指令。因此,與把所有數(shù)據(jù)都要推進(jìn)累加器中的情況相比,基于寄存器架構(gòu)的微處理器大大提高了ALU的吞吐能力。 陳舊的體系差異明顯 對(duì)于8位微處理器來(lái)說(shuō),能夠很容易地區(qū)分RISC和CISC之間的不同。最主要的原因就是這些體系結(jié)構(gòu),除了少數(shù)例外,要比相應(yīng)的32位微處理器陳舊得多。CISC體系結(jié)構(gòu)的一個(gè)經(jīng)典例子就是摩托羅拉開(kāi)發(fā)的HC11系列。HC11核心處理器誕生于1984年。這種系列的微處理器擁有300多條指令,代碼密度分布非常合理。HC11使用的是帶有兩個(gè)累加器的馮?諾依曼體系結(jié)構(gòu)。由于所有的復(fù)雜指令都是在核心中完成的,所以執(zhí)行每條指令的時(shí)間就很長(zhǎng)。指令周期從8個(gè)時(shí)鐘周期到164個(gè)時(shí)鐘周期。核心過(guò)大導(dǎo)致處理器的最高主頻不超過(guò)12MHz,這樣的性能要遠(yuǎn)遠(yuǎn)低于某些RISC機(jī)型。 傳統(tǒng)的8位RISC微處理器的一個(gè)例子就是由Microchip開(kāi)發(fā)的PIC16C54。Microchip在1990年的時(shí)候把它推向市場(chǎng)。它采用的是一個(gè)基于單累加器的哈佛體系結(jié)構(gòu)設(shè)備,使用有限指令集合。這樣微處理器在執(zhí)行每一條單個(gè)指令所需時(shí)間就很小。但是33條指令加上一頁(yè)內(nèi)存,生成的代碼長(zhǎng)度幾乎是同種情況下HC11所得代碼的兩倍多。 新技術(shù)使得差異在減小 CISC控制器在實(shí)現(xiàn)了管道技術(shù)之后,使得一條指令基本上在一個(gè)時(shí)鐘周期之內(nèi)就能夠執(zhí)行完,很大地改善了機(jī)器性能。但是,這種流水線操作有個(gè)很大的弊病在于每次的跳轉(zhuǎn)或者執(zhí)行分支指令,又或者是中斷發(fā)生,都有可能導(dǎo)致管道內(nèi)數(shù)據(jù)泛濫,反而導(dǎo)致更長(zhǎng)的指令周期。雖然有一些方法能夠降低這種不良效果,但是基本上都需要在軟件中進(jìn)行大量處理而最終會(huì)降低許多應(yīng)用程序代碼效率。 隨著技術(shù)的進(jìn)步,RISC和CISC機(jī)型之間的鴻溝已經(jīng)越來(lái)越小,特別是對(duì)于市場(chǎng)的高端用戶來(lái)說(shuō),這種差異已經(jīng)逐漸變得難以區(qū)分了。 RISC是精簡(jiǎn)指令集計(jì)算機(jī),現(xiàn)在很多嵌入式微處理器都是RISC,例如常用的ARM,MIPS, POWERPC等。它有一個(gè)特征就是指令是等長(zhǎng)的。這就為提高執(zhí)行指令的效率提供了方便,大部分處理器可以做到平均一個(gè)時(shí)種處理一條指令。CISC是復(fù)雜指令集計(jì)算機(jī)。如X86系列,TI的DSP系列,指令是不等長(zhǎng)的。但是一條指令可以完成RISC的好幾條指令能完成的任務(wù)。這兩種處理器各有所唱,都在發(fā)展當(dāng)中。 哈佛結(jié)構(gòu)和馮.諾依曼結(jié)構(gòu)主要是指存儲(chǔ)器結(jié)構(gòu),而非指令系統(tǒng)結(jié)構(gòu),與指令系統(tǒng)沒(méi)有嚴(yán)格的對(duì)應(yīng)關(guān)系。 馮.諾曼的主要貢獻(xiàn)就是提出并實(shí)現(xiàn)了“存儲(chǔ)程序”的概念。由于指令和數(shù)據(jù)都是二進(jìn)制碼,指令和操作數(shù)的地址又密切相關(guān),因此,當(dāng)初選擇這種結(jié)構(gòu)是自然的。但是,這種指令和數(shù)據(jù)共享同一總線的結(jié)構(gòu),使得信息流的傳輸成為限制計(jì)算機(jī)性能的瓶頸,影響了數(shù)據(jù)處理速度的提高。 哈佛結(jié)構(gòu) 與馮.諾曼結(jié)構(gòu)處理器比較,哈佛結(jié)構(gòu)處理器有兩個(gè)明顯的特點(diǎn): 使用兩個(gè)獨(dú)立的存儲(chǔ)器模塊,分別存儲(chǔ)指令和數(shù)據(jù),每個(gè)存儲(chǔ)模塊都不允許指令和數(shù)據(jù)并存; 使用獨(dú)立的兩條總線,分別作為CPU與每個(gè)存儲(chǔ)器之間的專用通信路徑,而這兩條總線之間毫無(wú)關(guān)聯(lián)
|
|
|