<nobr id="eeyoh"><big id="eeyoh"></big></nobr>

  • <button id="eeyoh"><acronym id="eeyoh"><cite id="eeyoh"></cite></acronym></button>

    <dd id="eeyoh"></dd>
    1. <dd id="eeyoh"><center id="eeyoh"></center></dd>

      <th id="eeyoh"></th>
      1. <span id="eeyoh"></span>
        更多課程 選擇中心

        嵌入式培訓
        達內IT學院

        400-111-8989

        ARM到底是馮諾依曼結構還是哈佛結構

        • 發布:朱有鵬
        • 來源:朱老師IT充電站
        • 時間:2020-03-27 16:08

        嵌入式的學習中ARM處理器是主題,這些年產業界除了PC和服務器市場外,以手機、pad、家電控制等為代表的嵌入式領域都被ARM幾乎壟斷了。所以學習嵌入式處理器,其實等同于學習ARM

        ARM到底是馮諾依曼結構還是哈佛結構呢?這個問題困惑了很多人,包括我。我很明確的記得我在一本書上看到過:ARM是哈佛結構的。所以我一直記得這個結論,也沒深思,在講課時直接就把這個結論講出來了。直到有同學看了課程產生疑問找我,我才去深入思考了這個問題,這其實是一個很值得思考和討論的問題。

        CPU和指令數據的關系

        大家知道CPU的核心是運算器和控制器,CPU就好像一個數據加工機器,你給他原材料數據,他按照機器指令的指示幫你做加工(加法減法,左移等),再將加工后的數據返回給你。所以CPU需要與外界建立優質的數據通道,而這2種結構就是CPU和外界存儲器建立數據通道的2種不同思路。

        大家注意CPU和外界對接的數據一共有2組。一組是指令,也就是機器碼,也就是你寫的軟件代碼被編譯器轉化成的二進制指令。另一組是數據,也就是軟件中的變量,譬如放在全局數據區的全局變量,放在stack中的局部變量等,都是數據。

        指令和數據加起來構成了整個程序,指令是指導CPU如何加工數據的,所以你可以簡單理解為數據是原材料,指令是加工流程說明。CPU工作時要不斷同時吞吐指令和數據,所以這2項內容(本質其實都是數據,指令也是二進制數據的形式)必須都有途徑能和CPU進行交換。

        什么是哈佛結構和馮諾依曼結構?

        這2種結構其實就是CPU如何同時獲取指令和數據的2種不同設計思路。

        哈佛結構認為CPU應該分別通過2組獨立的總線來對接指令和數據,而馮諾依曼結構認為CPU通過1組總線來分時獲取指令和數據即可。

        舉個栗子形象說明下。你把CPU想象成一個蒸饅頭的廚房,蒸饅頭需要面粉和水,那你怎么送面粉和水進去呢?哈佛結構認為這個廚房應該開2個門,一個專門送面粉,一個專門送水。這樣面粉和水可以通過2條路走2個門同時送給廚房。

        這樣做的好處是顯而易見的。首先速度就快啊,因為面粉和水可以同時送,不必耽擱。其次,不容易搞錯,面粉走面粉的門而水走水的門,怎么搞錯?而且還安全啊,譬如送水的把水桶打翻了就不會影響到面粉,是吧?有壞處嗎?當然有了。你開2個門修2條路得花雙份的成本啊,是門不要錢還是路不要錢啊?其實這個也不算壞處,叫成本更合適。記住,考慮任何事的好壞評價時,一定要考慮各自的成本。不考慮成本就評價好壞純屬耍流氓。

        馮諾依曼結構就覺得開一個門修一條路就夠了,分時復用嘛。譬如運送一次面粉或者水都需要1秒鐘,那就這一秒送面粉,下一秒送水。然后下一秒再送面粉,下一秒再送水。這樣做的好處當然就是省成本了。壞處呢?顯然意見,一個是效率低,一個是容易弄混弄錯嘛。所以這2種結構其實分別對應的是高成本高效率高可靠性,和低成本低效率低可靠度這2種不同思路。很好區分。

        MCU也就是單片機中幾乎都是用哈佛結構,譬如廣泛使用的51單片機、典型的STM32單片機(核心是ARM Cortex-M系列的)都是哈佛結構。為什么MCU要使用哈佛結構呢?我個人認為有幾個原因。

        一個是哈佛結構更加穩定安全,MCU使用的壞境對穩定性和安全性要求都比較高,所以使用哈佛結構更有保障。另一個是速度會更快一些,因為傳統的MCU主頻都很低所以速度不高,使用哈佛結構多少能提高一些系統性能。還有一個考量就是MCU的指令和數據需求量都不大,配置不高,所以內存往往使用SRAM而不使用DRAM,這樣就導致他更適合哈佛結構。如果MCU用馮諾依曼結構反而不好設計。當然這些都是我自己的理解,做不得準,我畢竟不是做CPU設計工作的,而只是使用CPU做產品這一段的,理解難免不到位,各位帶著批判的眼光看即可。

        PC和服務器芯片(譬如Intel AMD那些出的),ARMCortex-A系列嵌入式芯片(譬如核心是ARM CortexA8的三星S5PV210,譬如華為的麒麟970等手機芯片)等都是馮諾依曼結構。這些系統都需要大量內存,所以工作內存都是DRAM,因為他們更適合使用馮諾依曼系統。

        混合和純粹結構

        這2種結構的定義都是很純粹的,修2個門2條路,和修1個門1條路肯定是大不相同的。但是實際上CPU內部的設計遠比給廚房修門和路要復雜的多。

        譬如說寄存器和Cache,這2個就是在CPU和存儲器之間做中轉的,所以考慮了這2個之后你發現CPU和存儲器并不直接相連,這就增加了復雜性了。

        所以實際上存在這2種結構混用的情況,而且現代的CPU(準確說叫SoC)基本都不是純粹的哈佛結構或馮諾依曼機構,而都是混合結構的。

        譬如說咱們嵌入式linux核心課程中講到的三星S5PV210吧,這家伙使用ARM的Cortex-A8核心,按道理應該是馮諾依曼結構吧。實際上確實是這樣,咱們使用的X210/Study210開發板上配備了512MB的DDR SDRAM,和8GB的EMMC。正常工作時所有的程序和數據都從EMMC中加載到DDR中,也就是說不管你是指令還是數據,存儲都是在EMMC中,運行時都在DDR中,再通過cache和寄存器送給CPU去加工處理。這就是典型的馮諾依曼系統嘛。

        但是,S5PV210內部仍然有一定容量的irom和96kb的iram,這些irom和iram是用于SoC引導和啟動的,大家學習過我們嵌入式linux核心課程的ARM裸機部分就知道,芯片上電后首先會執行內部irom中固化的代碼,其實執行這些代碼時210就好像一個MCU一樣,irom就是他的flash,iram就是他的SRAM,這又是典型的哈佛結構。

        這就是混合式結構設計,而非純粹設計。

        為什么要混合式設計?很簡單,為了各取所長而已。不管什么架構,我覺得好,適合解決我當前的問題那就用了。

        最后

        現在可以回答本文的主題問題了,ARM到底是哈佛結構還是馮諾依曼結構?

        應該這么說:有一些ARM(Cortex-M系列)是哈佛結構,而另一些ARM(Cortex-A)是馮諾依曼結構(或者更準確說是混合結構)。

        最后我還在再啰嗦一句,其實不管是什么機構,這些問題應該是設計CPU的人去考慮的事,對于我們使用CPU來做嵌入式開發的人來說,究竟是什么結構并沒有本質影響。但是如果能深入理解這個問題,對我們提升功力,尤其提高自己的思辨能力是有益處的。

        免責聲明:整理文章為傳播相關技術,版權歸原作者所有,如有侵權,請聯系刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:嵌入式培訓:關鍵字static的作用是什么?
        下一篇:單片機的狀態機框架

        單片機:寫1清零,寫0清零,有什么區別?

        嵌入式工程師一定不要亂用全局變量

        嵌入式培訓靠譜嗎?就業怎么樣?

        新手如何學習單片機?

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        黑龍江省

        吉林省

        河北省

        湖南省

        貴州省

        云南省

        廣西省

        海南省

        中文第一社区天天射干20191024香蕉视频1024香蕉视频操逼逼网 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>