哈弗結構
哈佛結構是一種存儲器並行體系結構,主要特點是將程序和數據存儲在不同的存儲空間中,即程序存儲器和數據存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問。CPU首先到程序指令存儲器中讀取程序指令內容,解碼后得到數據地址,再到相應的數據存儲器中讀取數據,並進行下一步的操作(通常是執行)。程序指令存儲和數據存儲分開,可以使指令和數據有不同的數據寬度。
特點
與兩個存儲器相對應的是系統的4條
總線:程序的數據總線與地址總線,數據的數據總線與地址總線。這種分離的程序總線和數據總線可允許在一個機器周期內同時獲得
指令字(來自程序存儲器)和
操作數(來自數據存儲器),從而提高了執行速度,提高了數據的吞吐率。又由於程序和數據存儲器在兩個分開的物理空間中,因此取指和執行能完全重疊。
哈佛結構的計算機由CPU、程序存儲器和數據存儲器組成,程序存儲器和數據存儲器采用不同的總線,從而提供了較大的存儲器帶寬,使數據的移動和交換更加方便,尤其提供了較高的數字信號處理性能。
哈佛結構的微處理器通常具有較高的執行效率。其程序指令和數據指令分開組織和存儲的,執行時可以預先讀取下一條指令。
哈佛結構的微處理器通常具有較高的執行效率。其程序指令和數據指令分開組織和存儲的,執行時可以預先讀取下一條指令。
哈佛結構是指程序和數據空間獨立的體系結構,目的是為了減輕程序運行時的訪存瓶頸。例如最常見的卷積運算中,一條指令同時取兩個操作數,在流水線處理時,同時還有一個取指操作,如果程序和數據通過一條總線訪問,取指和取數必會產生沖突,而這對大運算量的循環的執行效率是很不利的。
哈佛結構能基本上解決取指和取數的沖突問題.而對另一個操作數的訪問,就只能采用Enhanced哈佛結構了,例如像TI那樣,數據區再split,並多一組總線.或向AD那樣,采用指令cache,指令區可存放一部分數據.。
比較
哈佛結構與馮.諾曼結構處理器相比,處理器有兩個明顯的特點:使用兩個獨立的存儲器模塊,分別存儲指令和數據,每個存儲模塊都不允許指令和數據並存,以便實現並行處理;具有一條獨立的地址總線和一條獨立的數據總線,利用公用地址總線訪問兩個存儲模塊(程序存儲模塊和數據存儲模塊),公用數據總線則被用來完成程序存儲模塊或數據存儲模塊與CPU之間的數據傳輸。兩條總線由程序存儲器和數據存儲器分時共用。
馮·諾依曼結構

馮·諾依曼結構也稱
普林斯頓結構,是一種將程序指令存儲器和數據存儲器合並在一起的存儲器結構。程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數據的寬度相同,如英特爾公司的8086
中央處理器的程序指令和數據都是16
位寬。
特點
馮.諾依曼結構處理器具有以下幾個特點:
1:必須有一個
存儲器;2:必須有一個控制器;3:必須有一個
運算器,用於完成
算術運算和
邏輯運算;4:必須有輸入設備和
輸出設備,用於進行人機通信。:另外,程序和數據統一存儲並在程序控制下自動工作
功能
根據
馮·諾依曼體系結構構成的計算機,必須具有如下功能:
把需要的程序和數據送至計算機中。
必須具有長期記憶程序、數據、中間結果及最終運算結果的能力。
能夠完成各種算術、
邏輯運算和數據傳送等數據加工處理的能力。
能夠按照要求將處理結果輸出給用戶。
為了完成上述的功能,計算機必須具備五大基本組成部件,
包括:
輸入數據和程序的輸入設備;
記憶程序和數據的存儲器;
完成數據加工處理的運算器;
控制程序執行的控制器;
輸出處理結果的
輸出設備。
瓶頸
將CPU與內存分開並非十全十美,反而會導致所謂的馮·諾伊曼瓶頸(von Neumann bottleneck):在CPU與內存之間的流量(資料傳輸率)與內存的容量相比起來相當小,在現代電腦中,流量與CPU的工作效率相比之下非常小,在某些情況下(當CPU需要在巨大的資料上執行一些簡單指令時),資料流量就成了整體效率非常嚴重的限制。CPU將會在資料輸入或輸出內存時閑置。由於CPU速度以及內存容量的成長速率遠大於雙方之間的流量,因此瓶頸問題越來越嚴重。而馮·諾伊曼瓶頸是約翰·巴科斯在1977年ACM圖靈獎得獎致詞時第一次出現,根據巴科斯所言:
“……確實有一個變更儲存裝置的方法,比借由馮·諾伊曼瓶頸流通大量資料更為先進。瓶頸這詞不僅是對於問題本身資料流量的敘述,更重要地,也是個使我們的思考方法局限在‘一次一字符’模式的智能瓶頸。它使我們怯於思考更廣泛的概念。因此編程成為一種計划與詳述通過馮·諾伊曼瓶頸的字符資料流,且大部分的問題不在於資料的特征,而是如何找出資料。”
在CPU與內存間的快取內存抒解了馮·諾伊曼瓶頸的效能問題。另外,
分支預測(branch predictor)算法的建立也幫助緩和了此問題。巴科斯在1977年論述的“智能瓶頸”已改變甚多。且巴科斯對於此問題的解決方案並沒有造成明顯影響。現代的
函數式編程以及面向對象編程已較少執行如早期Fortran一般會“將大量數值從內存搬入搬出的操作”,但平心而論,這些操作的確占用電腦大部分的執行時間。
結構
1945年,
馮·諾依曼首先提出了“存儲程序”的概念和
二進制原理,后來,人們把利用這種概念和原理設計的電子計算機系統統稱為“馮·諾依曼型結構”計算機。馮·諾依曼結構的處理器使用同一個存儲器,經由同一個總線傳輸。
馮·諾曼結構處理器具有以下幾個特點:必須有一個存儲器;必須有一個控制器;必須有一個運算器,用於完成算術運算和邏輯運算;必須有輸入和輸出設備,用於進行人機通信。
哈佛結構
哈佛結構是一種將程序指令存儲和
數據存儲分開的存儲器結構。
中央處理器首先到程序指令存儲器中讀取程序指令內容,解碼后得到數據地址,再到相應的數據存儲器中讀取數據,並進行下一步的操作(通常是執行)。程序指令存儲和數據存儲分開,可以使指令和數據有不同的數據寬度,如Microchip公司的PIC16芯片的程序指令是14位寬度,而數據是8位寬度。
哈佛結構的微處理器通常具有較高的執行效率。其程序指令和數據指令分開組織和存儲的,執行時可以預先讀取下一條指令。使用哈佛結構的中央處理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,還有
摩托羅拉公司的MC68系列、Zilog公司的Z8系列、
ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11。
哈佛結構是指程序和數據空間獨立的體系結構,目的是為了減輕程序運行時的訪存瓶頸。
例如最常見的卷積運算中, 一條指令同時取兩個
操作數, 在流水線處理時, 同時還有一個取指操作,如果程序和數據通過一條總線訪問,取指和取數必會產生沖突,而這對大運算量的循環的執行效率是很不利的。哈佛結構能基本上解決取指和取數的沖突問題。而對另一個操作數的訪問,就只能采用Enhanced哈佛結構了,例如像TI那樣,數據區再split,並多一組總線。或向AD那樣,采用指令cache,指令區可存放一部分數據。
在
DSP算法中,最大量的工作之一是與存儲器交換信息,這其中包括作為輸入信號的
采樣數據、濾波器系數和程序指令。例如,如果將保存在存儲器中的2個數相乘,就需要從存儲器中取3個
二進制數,即2個要乘的數和1個描述如何去做的程序指令。DSP內部一般采用的是
哈佛結構,它在片內至少有4套總線:程序的
數據總線,程序的
地址總線,數據的數據總線和數據的地址總線。這種分離的程序總線和數據總線,可允許同時獲取
指令字(來自
程序存儲器)和
操作數(來自數據存儲器),而互不干擾。這意味着在一個
機器周期內可以同時准備好指令和操作數。有的DSP芯片內部還包含有其他總線,如DMA總線等,可實現單周期內完成更多的工作。這種多
總線結構就好像在DSP內部架起了四通八達的高速公路,保障運算單元及時地取到需要的數據,提高運算速度。因此,對DSP來說,
內部總線是個資源,總線越多,可以完成的功能就越復雜。超級哈佛結構(superHarvard architecture,縮寫為SHARC),它在哈佛結構上增加了指令cache(
緩存)和專用的I/O控制器。
哈佛結構處理器有兩個明顯的特點:使用兩個獨立的存儲器模塊,分別存儲指令和數據,每個存儲模塊都不允許指令和數據並存;使用獨立的兩條總線,分別作為CPU與每個存儲器之間的專用通信路徑,而這兩條總線之間毫無關聯。
改進的哈佛結構,其結構特點為:以便實現
並行處理;具有一條獨立的
地址總線和一條獨立的
數據總線,利用公用地址總線訪問兩個存儲模塊(程序存儲模塊和
數據存儲模塊),公用數據總線則被用來完成程序存儲模塊或數據存儲模塊與CPU之間的數據傳輸。
兩者區別
馮·諾依曼理論的要點是:數字計算機的數制采用二進制;計算機應該按照程序順序執行。人們把
馮諾依曼的這個理論稱為
馮諾依曼體系結構。從ENIAC到當前最先進的計算機都采用的是馮諾依曼體系結構。所以馮諾依曼是當之無愧的數字計算機之父。
根據馮諾依曼體系結構構成的計算機,必須具有如下功能:把需要的程序和數據送至計算機中;必須具有長期記憶程序、數據、中間結果及最終運算結果的能力;能夠完成各種算術、邏輯運算和數據傳送等數據加工處理的能力;能夠根據需要控制程序走向,並能根據指令控制機器的各部件協調操作;能夠按照要求將處理結果輸出給用戶。
哈佛結構是為了高速數據處理而采用的,因為可以同時讀取指令和數據(分開存儲的)。大大提高了
數據吞吐率,缺點是結構復雜。通用微機指令和數據是混合存儲的,結構上簡單,成本低。假設是哈佛結構:你就得在電腦安裝兩塊硬盤,一塊裝程序,一塊裝數據,內存裝兩根,一根儲存指令,一根存儲數據……
是什么結構要看
總線結構的。51單片機雖然數據指令存儲區是分開的,但總線是
分時復用的,所以頂多算改進型的
哈佛結構。ARM9雖然是哈佛結構,但是之前的版本也還是馮·諾依曼結構。早期的X86能迅速占有市場,一條很重要的原因,正是靠了
馮·諾依曼這種實現簡單,成本低的總線結構。處理器雖然
外部總線上看是諾依曼結構的,但是由於內部CACHE的存在,因此實際上內部來看已經算是改進型哈佛結構的了。至於優缺點,哈佛結構就是復雜,對
外圍設備的連接與處理要求高,十分不適合外圍存儲器的擴展。所以早期通用CPU難以采用這種結構。而
單片機,由於內部集成了所需的存儲器,所以采用哈佛結構也未嘗不可。處理器,依托CACHE的存在,已經很好的將二者統一起來了。
哈佛體系架構有個致命的弱點在動態加載程序上面,想象我們從外存中讀取一段程序然后加載到RAM,這個程序是在數據內存當中的,我們需要一種機制將數據內存再傳輸到程序內存當中去,這反而增加了設備復雜度。另外,絕對不允許CPU/DSP讀取程序內存來當作數據,這也是不現實的,程序一般都有只讀數據區和靜態數據區,燒寫程序的時候會當作程序的一部分燒進ROM中,想像一下如果為了把程序和數據分開,而需要設置兩塊ROM,再把其中一塊ROM和RAM通過復用器接起來,這是多么慘烈的景象,更不用說每次燒寫都要分開燒兩塊ROM了。實際上即使是DSP通常也允許從程序內存的總線上讀取一些數據。
對於多任務操作系統來說,管理程序內存是一件非常重要的事情,而且僅僅是保護模式下的頁面映射等等機制就已經足夠復雜了,如果還要求將程序和數據分開管理,復雜度就太高了。這種時候馮諾依曼體系結構就有非常大的優勢了。純的(或者接近純的)哈佛結構只用於非常簡單的硬件系統,這種系統當中通常程序完全運行在ROM中,數據幾乎完全存儲於RAM中,這樣的結構足夠簡單。而要支持多任務的處理器通常引入Cache層,在Cache層實現一個哈佛體系架構,這樣可以兼顧性能和靈活性。
轉自知乎 鏈接:https://www.zhihu.com/question/22406681/answer/109474052
對於多任務操作系統來說,管理程序內存是一件非常重要的事情,而且僅僅是保護模式下的頁面映射等等機制就已經足夠復雜了,如果還要求將程序和數據分開管理,復雜度就太高了。這種時候馮諾依曼體系結構就有非常大的優勢了。純的(或者接近純的)哈佛結構只用於非常簡單的硬件系統,這種系統當中通常程序完全運行在ROM中,數據幾乎完全存儲於RAM中,這樣的結構足夠簡單。而要支持多任務的處理器通常引入Cache層,在Cache層實現一個哈佛體系架構,這樣可以兼顧性能和靈活性。
實際上,絕大多數現代計算機使用的是所謂的“Modified Harvard Architecture”,指令和數據共享同一個 address space,但緩存是分開的。可以說是兩種架構的一種折中吧。
在現實世界中很少有非常純粹的概念,特別是在實際的應用里。教科書里的大多是理想化的模型,便於掌握某個概念的重點和本質,但實際中很難達到這種理想化的狀態。
哈佛結構和馮諾依曼結構主要區別在是否區分指令與數據。在教科書里這是兩種截然不同的做法。
實際上在內存里,指令和數據是在一起的。而在CPU內的緩存中,還是會區分指令緩存和數據緩存,最終執行的時候,指令和數據是從兩個不同的地方出來的。你可以理解為在CPU外部,采用的是馮諾依曼模型,而在CPU內部用的是哈佛結構。
大部分的DSP都沒有緩存,因而直接就是哈佛結構。
哈佛結構設計復雜,但效率高。馮諾依曼結構則比較簡單,但也比較慢。CPU廠商為了提高處理速度,在CPU內增加了高速緩存。也基於同樣的目的,區分了指令緩存和數據緩存。有時為了解決現實問題,究竟是什么主義真的沒那么重要。因而個人認為爭論到底是哪種結構意義不大。轉自知乎 鏈接:https://www.zhihu.com/question/22406681/answer/21264994