微控制器的核心與架構(結構)

2022-09-23 21:48:17 字數 4483 閱讀 9101

微控制器的核心有很多種,如51,**r,arm,pic,power pc, riscv阿,有很多種的,網上的解釋說核心包含**運算單元+內部匯流排+指令解析,還有提到cpu的核心分為兩部分運算器和控制器。不管怎麼說吧,核心肯定是軟體或者硬體最核心的部分,可以包含軟體,如linux核心就是軟體的。對軟體核心不太了解,下面還是說說微控制器把,對微控制器來說,個人覺得最重要的只要是核心一樣,其彙編指令集也就一樣,**基本不太需要改變。

現在再來討論下架構,架構有哈佛架構:兩個獨立的儲存模組或區域,程式空間與資料空間分開,便於程式與資料同時訪問,另乙個位普林斯頓架構,程式空間和資料空間使用同乙個儲存器,即我們熟知的馮諾依曼體系結構,既然提到了馮諾依曼體系結構,就不得不說一下該體系結構是如何發展來的,這很有啟發意義。最早的計算器(也就相當於今天的計算機),它是不可以程式設計的,內部僅有固定用途的程式,當然那時候可能程式的概念都沒有,有的就是一堆連線線,若要改變這個機器的功能必須要重新設計和連線線路,顯然這很不靈活,相當費力氣。於是人們開始想到最好可以靈活的設計乙個計算器,它能根據我的需要做出改變而產生不同的功能,這時人們就差不多萌芽了程式的想法,通過一種手段來實現不同的功能(今天的不同程式實現不同功能)。計算機的組成不需要改變,但需要安裝不同的軟體(相當於不同程式)就實現了不同的功能,產生了這個想法,那人們就開始琢磨了,如何將這想法付諸於實踐,人們想到編寫**的確是乙個好方法(這裡可能有待考究,也可能是受到了圖靈機那個無限長的紙帶的啟發),那這樣的話,機器的結構肯定要面臨大的改變了,人們就開始爭論了,你說你的想法好,他說我的想法比較妙,還有到底是十進位制阿,八進位制,還是其它進製呢。這時候,印證了那句話:偉大的時代造就偉大的人物或偉大的人物造就偉大的時代,這個偉大的人物就是馮諾依曼,他提出來拋棄十進位制,採用二進位製作為數字計算機的數制基礎。同時他還強調了得預先編制電腦程式,然後由計算機來按照人們事先制定來完成數值計算。既然需要將程式寫到計算機裡,那肯定得有地方放這個程式把,於是便又提出了一種叫做儲存器的概念,用於存放程式和資料用的。於是人們按照馮諾依曼所說的理論造出了電子計算機,人們稱這類計算機為馮諾依曼體系結構計算機(其實準確的還是稱之為馮諾依曼體系結構處理器cpu更為準確)

馮諾依曼結構處理器特點:

1. 必須有乙個儲存器

2. 必須有乙個控制器

3. 必須有乙個運算器(算術運算+邏輯運算)

4. 必須有輸入與輸出裝置

5. 最突出的一點,程式和資料在乙個儲存區不分開,經由同一匯流排傳輸

馮諾依曼的主要貢獻就是提出並實現了「儲存程式」的概念,由於指令和資料都是二進位制的,指令和運算元的位址又密切相關,因此當初想到的是將指令和資料共享同一儲存空間(資料與**區不作區分),且指令和資料共享同一匯流排,類似於下面這張圖:

指令和資料儲存為同一空間,因此具有相同的資料寬度

早期的計算機大多採用這種馮諾依曼結構,如x86等等。但馮諾依曼體系結構都存在同一儲存空間,由於共享同一匯流排,該計算機取指令與取資料不能同時進行,只有乙個完成後再進行下乙個,這顯然會降低程式執行的速度(網上的說法為訪存瓶頸),而且由於資料和程式都存放在同一儲存空間,可能會修改程式的執行順序,那就會引起宕機(這個地方,宕機問題還有待進一步理解,目前我也理解不夠不敢謬論)

鑑於馮諾依曼結構的不足,人們開始考慮是否可以提出一種新的結構來解決此問題,於是人們提出來了哈佛結構,哈佛結構是一種將程式指令儲存和資料儲存分開的儲存器結構,

cpu首先到程式指令儲存器中讀取程式指令內容(取指),解碼後得到資料位址(這裡只是比喻,真正解碼還需要區分是啥指令,是取資料指令才會去得到資料位址),然後執行,再到相應的資料儲存器讀取資料(訪存,這個步驟也不一定是訪問儲存器,也可能是暫存器),最後將相應的結果寫到通用暫存器(這裡很容易忽視的,不是寫到儲存器),關於cpu這幾個步驟(現在也是按這個來劃分幾級流水線),目前不扯太多了,後面有機會我拿個實際cpu設計咱們分個細節接著嘮嗑,非給整明白不可。回來繼續聊哈佛結構,這個結構將程式指令儲存和資料儲存分開,這可使得指令和資料有不同的資料寬度,這就可以充分利用計算資源了(想到這一點就很nice),附圖:

圖xx哈佛結構相比上面講到的馮諾依曼結構,明顯多了兩條匯流排,這解決了上面馮諾依曼結構的訪存瓶頸問題,不過它由於匯流排更為複雜,成本也就上公升了(古人說有所得必有所失),由於這種哈佛結構取指令和取資料匯流排獨立,可同時進行,那麼自然其處理能力和速度肯定很高了,所以當今的dsp和arm家族,這裡還有近年來興起的riscv,大多採用此體系結構。講到現在,晶元中哈佛結構的運用,其實嚴格意義上來講應該算是一種改進型的哈佛結構,因為在其內部匯流排並沒有增加,像51是匯流排分時復用。現在的x86 cpu的記憶體ram,指令和資料還是還是放在一起,沒有增加匯流排,還有現今的arm處理器和x86 處理器一樣,ram也就只有兩條匯流排,資料匯流排與位址匯流排並沒有像哈佛結構那樣,分成四條匯流排(資料儲存的位址匯流排,資料儲存的資料匯流排,程式儲存器的位址匯流排,程式儲存器的資料匯流排),但要注意的是,特別要注意一點,它們的cpu核中,也就是快取的cache中還是區分了指令快取(i-cache)和資料快取(d-cache),所以最終執行的時候,指令和資料還都是從不同地方取出的,所以可以這麼來說,cpu的外部為馮諾依曼模型,而cpu內部採用的是哈佛結構,兩個cache(快取)獨立,可以同時訪問資料和指令,也就是實現了哈佛結構的功能,這種二者合一的稱之為改進型的哈佛結構,附圖:

至於為什麼要設計改進型的哈佛結構呢,因為原來馮諾依曼結構雖然執行效率不高,但其匯流排結構簡單,成本也低,而哈佛結構其匯流排複雜,成本高,效率也高,於是結合兩者長處,但又為了降低成本,於是就有了今天的珠聯璧合。另外,值得一說的是,cpu也難以完全採用哈佛結構,原因在於哈佛結構匯流排過於複雜導致對cpu來說不適應儲存器的擴充套件,而對微處理器mcu來說則不一樣,它是整合化了的,儲存器都已整合好了,很少會擴充套件,所以它可能會採用全哈佛,但其成本又限制了這個,所以其大多也採用改進型的哈佛結構。

最後總結一下,哈佛結構和馮諾依曼結構都是一種儲存器結構(這裡肯定不是指的物理結構,形象意義上的邏輯結構),哈佛結構是將指令儲存器和資料儲存器分開的一種儲存器結構(**與資料獨立編址),而馮諾依曼結構則是將指令儲存器和資料儲存器合在一起的儲存器結構(**與資料統一編址)

前面說了哈佛和馮諾依曼結構,接下來我們再來說下架構,說到架構,我們就來說一哈,risc和cisc。英文注釋,risc和cisc都是一種指令集的設計,早期是沒有像今天這樣區分cisc和risc的,risc也是後來才出現的。在早期的計算機中,編譯器還沒出現,程式都是以機器語言或組合語言來完成的(像現在很多高階語言都是依賴於編譯器,但這在早期根本就沒有),當時的看法是硬體比編譯器更容易設計,於是工程師們設計了很複雜的硬體,但都是基於複雜的指令的,這些複雜的指令可以直接陳述高階的功能,比如乘加,乘減,就一條指令就搞定,這當然給程式設計人員帶來了極大的便利,另乙個加速複雜化的原因是缺乏大的記憶體,當時的記憶體每乙個位元組都非常珍貴,因此促使這種複雜編碼,長度不等的執行多個操作的複雜指令的誕生,即cisc(comlex instruction set computer)。早期的x86,c51都是cisc,其指令集很豐富,使得編譯器只做很少的事情(基本不做事情),這樣會使得設計的程式指令數很少,所佔的記憶體也就很少了。

但發展就是這樣,從來沒有乙個最好的,只有更好的或者更適合的,人們在研究指令系統合理性的時候發現不能在這麼下去了,指令的複雜導致硬體設計也變得更加複雜,也會使得整合和功耗都很難得到進一步的發展,而且也會使得指令過於冗餘。於是人們想設計乙個新的指令系統來解決這種問題,鐺鐺鐺,這時risc就誕生了。

risc既然登場了,就有必要介紹一下,它是如何解決上述問題的,首先它對指令做了精簡,究竟是去掉哪些複雜指令,或者留下哪些呢,這裡肯定有個取捨的問題,這時就聯想到了二八原則,實際程式設計中大多只會用到20%的指令,剩下的幾乎很少用到。於是就將這20%的指令作為了精簡下來的指令,而且使這些指令具有同等大小的位元組長度,只留下了很少的複雜指令(也是常用的),對於一些不常用的複雜指令採用將多個指令拼湊方式實現(比如前面提到的乘加,原先是乙個指令現在可能就拆分成乘法和加法兩個指令進行實現)。這種改變之下對編譯器的要求就高了,對於乙個複雜指令,得學會去翻譯成多個指令,另外,由於翻譯的指令多了,這樣也會使得程式變得大了,相應的就會占用cpu更多的記憶體空間,cpu對記憶體的訪問也會更多,這也會使得計算機的執行效率打個折扣。針對這以上問題,人們採用了增加暫存器的方法,當然相當於增加了額外的儲存空間(記憶體),只有載入和儲存指令可以訪問記憶體,資料處理指令只對暫存器進行操作。

講到risc指令系統的另乙個優勢,就是它本身指令長度一致,指令長度一致的指令執行所需要的機器週期相同,很好降低了指令設計成流水線的複雜度,非常適合搞平行計算。

最後總結下,cisc架構指令雖然複雜,但其很明顯程式執行的速度更快,就是比較費材,而且由於老牌cpu廠商intel等,早就採用了cisc,為了考慮向下相容,也不得不在現有的cpu中採用cisc,而risc則沒有太多歷史包袱,不用考慮向下相容,所以其設計可以很簡單放的開,不過目前cisc和risc正在走向融合,正如前面介紹的哈佛與馮諾依曼那樣。pentitum(intel 的奔騰系列)是乙個例子,它們的cpu核心是基於risc的,但是它們也能識別cisc,可將其分解為risc指令指令,這也挺有意思了。

ARM微控制器與ARM核心

人們常常把arm架構和arm微控制器混淆,其實使用arm核心的微控制器有很多,比如st公司的stm32f103,它就是使用arm cortext m3核心,那麼究竟什麼是arm核心呢?mcu microcontrol unit 俗稱微控制器,它有cpu,rom,ram,i o,中斷系統,定時器,時鐘...

微控制器學習筆記二(微控制器的儲存結構)

8051微控制器在物理結構上有4個儲存空間 1.片內程式儲存器 2.片外程式儲存器 3.片內資料儲存器 4.片外資料儲存器 邏輯上,8051微控制器有三個儲存空間 1.片內外統一編址的64k的程式儲存器位址空間 movc 2.256b的片內資料儲存器的位址空間 mov 3.64k片外資料儲存器的位址...

51微控制器系列知識1 微控制器的內外結構

一 微控制器的典型結構 0.微控制器mcs 51原理及應用開發教程 晁陽。清華大學出版社 1 微控制器的內部結構 處理器 儲存器內部匯流排 i o介面 並行介面 穿行介面 中斷系統 特殊功能部件 時鐘電路 布林處理器 定時器 計數器 a d d a轉換器 直接儲存器訪問通道dma.pwm.wdt 內...