51單片機(jī)是什么架構(gòu)?馮諾依曼還是哈佛?
掃描二維碼
隨時(shí)隨地手機(jī)看文章
關(guān)于這個(gè)問(wèn)題,有人說(shuō)51地址線復(fù)用,就是馮諾依曼結(jié)構(gòu)。
很多入門的書(shū)上基本上都說(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ì)了)
我認(rèn)為馮氏結(jié)構(gòu)與哈佛結(jié)構(gòu)的區(qū)別應(yīng)該在存儲(chǔ)器的空間分別上,哈佛結(jié)構(gòu)的數(shù)據(jù)區(qū)和代碼區(qū)是分開(kāi)的,它們即使地址相同,但空間也是不同的,主要表現(xiàn)在數(shù)據(jù)不能夠當(dāng)作代碼來(lái)運(yùn)行。(比如51---注)
口線復(fù)用,就將它認(rèn)為成馮氏結(jié)構(gòu),我認(rèn)為這樣不足取,應(yīng)該是按照空間是否完全重合來(lái)辨 別。比如PC機(jī)的代空間和數(shù)據(jù)空間是同一空間,所以是馮氏結(jié)構(gòu);51由于IO口不夠,但代 碼空間和數(shù)據(jù)空間是分開(kāi)的,所以還是哈佛構(gòu).(此種觀點(diǎn)才是正確的--注)
另外,還有的把CISC RISC 和地址是否復(fù)用與是哪種結(jié)構(gòu) 這3這都混到一起。我認(rèn)為這三者都沒(méi)有必然的關(guān)系。只不過(guò) RISC因?yàn)榫?jiǎn)了指令集,沒(méi)有了執(zhí)行復(fù)雜功能的指令,為了提高性能,常采用哈佛結(jié)構(gòu),并且不復(fù)用地址線。(這種說(shuō)法不具體,有待補(bǔ)充---注)
材料二:
哈佛結(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位寬度。
目前使用哈佛結(jié)構(gòu)的中央處理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,還有摩托羅拉公司的MC68系列、Zilog公 司的Z8系列、ATMEL公司的AVR系列和安謀公司的ARM9、ARM10和ARM11,51單片機(jī)也屬于哈佛結(jié)構(gòu)
馮·諾伊曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合并在一起的存儲(chǔ)器結(jié)構(gòu)。程序指令存儲(chǔ)地址和數(shù)據(jù)存儲(chǔ)地址指向同一個(gè)存儲(chǔ)器的不同物理位置,因此程序指令和數(shù)據(jù)的寬度相同,如英特爾公司的8086中央處理器的程序指令和數(shù)據(jù)都是16位寬。
目前使用馮·諾伊曼結(jié)構(gòu)的中央處理器和微控制器有很多。除了上面提到的英特爾公司的8086,英特爾公司的其他中央處理器、安謀公司的ARM7、MIPS公司的MIPS處理器也采用了馮·諾伊曼結(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)。-----注
材料三:
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)。
總結(jié)::::::::::
馮.諾依曼(Von Neumann)指出:程序只是一種(特殊)的數(shù)據(jù),它可以像數(shù)據(jù)一樣被處理,因此可以和數(shù)據(jù)一起被存儲(chǔ)在同一個(gè)存儲(chǔ)器中——這就是著名的馮.諾依曼原理。注意:數(shù)據(jù)總線和地址總線共用。--注
哈佛結(jié)構(gòu):
哈佛結(jié)構(gòu)是一種并行體系結(jié)構(gòu),它的主要特點(diǎn)是將程序和數(shù)據(jù)存儲(chǔ)在不同的存儲(chǔ)空間中,即程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是兩個(gè)獨(dú)立的存儲(chǔ)器,每個(gè)存儲(chǔ)器獨(dú)立編址、獨(dú) 立訪問(wèn)。與兩個(gè)存儲(chǔ)器相對(duì)應(yīng)的是系統(tǒng)的4條總線:程序的數(shù)據(jù)總線與地址總線,數(shù)據(jù)的數(shù)據(jù)總線與地址總線。這種分離的程序總線和數(shù)據(jù)總線允許在一個(gè)機(jī)器周期 內(nèi)同時(shí)獲得指令字(來(lái)自程序存儲(chǔ)器)和操作數(shù)(來(lái)自數(shù)據(jù)存儲(chǔ)器),從而提高了執(zhí)行速度,使數(shù)據(jù)的吞吐率提高了1倍。又由于程序和數(shù)據(jù)存儲(chǔ)器在兩個(gè)分開(kāi)的物 理空間中,因此取指和執(zhí)行能完全重疊。CPU首先到程序指令存儲(chǔ)器中讀取程序指令內(nèi)容,解碼后得到數(shù)據(jù)地址,再到相應(yīng)的數(shù)據(jù)存儲(chǔ)器中讀取數(shù)據(jù),并進(jìn)行下一 步的操作(通常是執(zhí)行)。
哈佛結(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)
###############################################
呵呵,當(dāng)我們還在研究啥佛與馮諾依曼的區(qū)別的時(shí)候
你卻發(fā)現(xiàn)現(xiàn)實(shí)世界已經(jīng)模糊了他們的概念,半導(dǎo)體廠商已經(jīng)將他們?nèi)嘣诹艘黄穑?差不多就行了...