• <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <span id="wslfv"></span>
    <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <th id="wslfv"><track id="wslfv"><rt id="wslfv"></rt></track></th>

    <li id="wslfv"><acronym id="wslfv"></acronym></li>
    更多課程 選擇中心

    嵌入式培訓
    達內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號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美一级高清片,一级欧美免费大片视频,欧美三级在线电影免费 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>