怎樣辨別一個處理器的架構?

怎樣辨別一個處理器的架構是哈佛結構還是馮·諾依曼結構結構呢?

先看定義。網上隨便搜

傳統計算機採用馮·諾依曼(Von Neumann)結構,也稱普林斯頓結構,是一種將程序指令存儲器和數據存儲器並在一起的存儲器結構。馮·諾依曼結構的計算機其程序和數據公用一個存儲空間,程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置;採用單一的地址及數據總線,程序指令和數據的寬度相同。處理器執行指令時,先從儲存器中取出指令解碼,再取操作數執行運算,即使單條指令也要耗費幾個甚至幾十個週期,在高速運算時,在傳輸通道上會出現瓶頸效應。
目前使用馮·諾依曼結構的 CPU 和微控制器有很多。其中包括英特爾公司的8086及其他CPU ,ARM公司的ARM7、MIPS公司的MIPS處理器也採用了馮·諾依曼結構。
這裏寫圖片描述

哈佛(Harvard)結構是一種將程序指令存儲和數據存儲分開的存儲器結構。哈佛結構是一種並行體系結構,它的主要特點是將程序和數據存儲在不同的存儲空間中,即程序存儲器和數據存儲器是兩個相互獨立的存儲器,每個存儲器獨立編址、獨立訪問。與兩個存儲器相對應的是系統中的4套總線:程序的數據總線與地址總線,數據的數據總線與地址總線。這種分離的程序總線和數據總線可允許在一個機器週期內同時獲取指令字(來自程序存儲器)和操作數(來自數據存儲器),從而提高了執行速度,是數據的吞吐率提高了1倍。又由於程序和數據存儲器在兩個分開的物理空間中,因此取指和執行能完全重疊。
這裏寫圖片描述




看完了,懂了?那我們來看個例子

這是Cortex-M0處理器的內部架構圖。
這裏寫圖片描述
這是是基於cortex-M0+內核的stm32L053的內部架構圖。
這裏寫圖片描述

請問Cortex-M0是什麼處理器架構?

系統起來後,指令是放在Flash中的,而全局變量 靜態變量是在RAM中(系統初始化會將Flash中的變量RW搬到RAM中)。數據和指令放在不同的存儲空間,明顯的哈佛結構嘛。。。


隨便搜一下,權威資料 網上博客都說是馮·諾依曼結構啊?怎麼回事???



其實啊,能否同時得到指令和數據纔是區別哈佛結構還是馮·諾依曼結構結構的關鍵

請問Cortex-M0中,你能同時讀取到指令和數據嗎???

顯然不行啊,他們都掛在System Bus(AHB Lite)上,你怎麼可能同時發送一個指令的地址和一個數據的地址,然後同時返回指令和數據呢!對吧?




好了,下面我們來看看Cortex-M3是啥架構

這是Cortex-M3權威指南里給出的總線連接示範圖
這裏寫圖片描述

可以看到Cortex-M3有I-Code總線和D-Code總線,它們分別來獲取指令和數據。(看圖,它們都是雙向的,發出地址接受指令數據或數據)

注:
因爲代碼存儲區既可以由指令指令總線(I‐Code)訪問(當從此區取指時),也可以被數據總線(D‐Code)訪問(當在此區訪問數據時),需要在中間插入一個總線開關,稱爲“總線矩陣[注3]”;或者使用一個AHB 總線複用器。如果使用了總線矩陣,則閃存和附加的 SRAM(如果有的話)可以被both I‐Code 和D‐Code 訪問。
也就是有下面各個顏色的指令和數據讀取組合:
這裏寫圖片描述

紅色下,指令讀取和數據讀取並行不悖。符合哈佛的並行概念。(速度快)
而,藍色和綠色下,又符合馮·諾依曼的指令讀取和數據讀取異步的概念。

那Cortex是哈佛還是馮·諾依曼啊?

答案當然是哈佛,人傢俱備同時吞吐的能力。正常情況下,都是哈佛狀態(指令讀取和數據讀取並行不悖)。

哈佛結構可以在某些情況下(RAM下debug程序)成爲諾依曼架構;但諾依曼不能平滑過渡到哈佛上去。




看看經典的STM32F103(Cortex-M3)系列的架構

這裏寫圖片描述

首先D-bus可以訪問主SRAM(112K)和FLASH的D-code區
I-bus可以訪問主SRAM區的和FLASH的I-code區
然後主SRAM可以被D-bus I-bus 和S-bus訪問。

注:
感覺上圖是有問題的,I-Code總線應該是可以訪問SRAM的。不然RAM中調試代碼就沒法實現了。

好啦,再看看Cortex-M4

這是STM32F405xx系列的系統存儲和總線框圖
這裏寫圖片描述
一看四個圓圈,果斷可以同時訪問指令和數據,妥妥的哈佛架構。




總結

判斷架構,是看CPU周邊的總線架構,不是關於存儲器本身。
只要具備同時讀取指令和數據的能力的處理器就是哈佛處理器,如果不是就是諾依曼。

疑問

這個I-code是雙向總線嗎?

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