7.1 馮·諾依曼結構
7.1.1 馮·諾依曼結構的組成部分
(1)輸入、輸出設備
1)輸入設備:向計算機輸入數據,比如,
·通過攝像頭、MIC,將圖像/聲音等轉成二進制數據給計算機
·從網卡輸入數據給計算機等
·其它
2)輸出設備:從計算機輸出數據,比如,
·通過顯示器、揚聲器,將二進制數據翻譯稱爲圖片/視頻/聲音等供人能夠識別
·或者通過網卡輸出數據給別的計算機
·其它
(2)存儲器:存儲程序和數據
(3)運算器:進行算術運算和邏輯運算
(4)控制器:解釋程序指令,將程序指令轉爲對應的一條一條的微指令,這些微指令會控制運算器等部件工作,進行比如,
·數據的算術、邏輯運算
·數據的搬移,比如從CPU的寄存器搬移到內存,或者從內存的某個位置搬移到內存的另一個位置。
·等等
7.1.2 結構圖
7.2 哈佛結構
與馮諾·依曼結構相對應的是哈佛結構,我們會在後面詳細講解這兩種結構之間的異同和優缺,爲了便於講解的方便,這邊還是以經典的馮諾·依曼結構爲例,進行計算機組成結構的介紹。
7.3 詳細結構
7.3.1 詳細結構圖(PC)
7.3.2 各部分簡述
計算機的詳細組成總體上可以分爲三大部分,CPU,總線與接口、外部設備,核心部分主要就是cpu/總線,外部設備總體上分爲輸入設備和輸出設備,而核心部分與外部設備通過接口連接。
(1) cpu
1)運算器
(a)作用:根據指令要求,對數字電信號的二進制數據,進行算術運算和邏輯運算,
(b)運算器組成
·ALU:Arithmetic Logic Unit,算術運算單元,進行算數運算和邏輯運算
·(通用)寄存器組:用於存放ALU在進行算術/邏輯運算時,運算過程中涉及到的一些中間值和計算結果值。
·乘商寄存器:專門用於存放乘法和除法運算中間值和結果值。
·CVZS:各種ALU運算需要用到的標誌位
C:進位、借位標誌,如果有進位或者借位,C=1,否則C=0。
C的應用舉例:請寫彙編代碼計算13208 + 34535相加後的值。
答:爲了便於編程時好理解,我們先將這兩個二進制的數,轉爲16進制,即OX3398+0X86E7。
彙編實現這兩個數的相加的大致步驟如下圖所示。
總結:從這個例子就可以看出,C進位/借位標誌位的作用,有關借位作用同理,就不再贅述。如果你想了解跟多,我們在 後面嵌入式技術課程中,在講有關彙編時,還會將這方面的內容。當然我們這裏在強調一點,我們學習彙編並不是爲了
使用會變來進行開發,而是通過彙編理解計算機的工作原理。
有些同學說,我用C語言的等高級語言寫代碼,這些標誌位也會用的上嗎,也會用得上,百年一起在編譯時,C語言會被翻譯爲彙編,翻譯爲彙編後,進行加法的算術運算時,同樣會按照同樣的方式使用C進/借位標誌位。
Z:運算結果是否爲零標誌,如果結果爲0,Z=1,否者Z=0。
應用舉例:比較兩數是否相等,比如a=3,b=3,判斷兩數是否相等,寫成彙編程序的話,實際上就是將兩數相減(算術運算),
如果Z=1表示a和b的值相等,否則不相等。
V:溢出標誌,有溢出,V=1,V=0
(1)什麼是溢出
比如一個32位的寄存器,只有32位,所能裝的二進制的數的最大情況就是32個1,即11111111 11111111 11111111 11111111,如果再往裏面加一個1的話,就向33爲進1了,但是寄存器只有32爲,不存在33爲,溢出的哪個1不存在了,寄存器中的32個bit,全部是0,即00000000 00000000 00000000 00000000,因此溢出回事數值發生巨大突變,在真實的計算機中,溢出會導致數據的值發生錯誤,導致計算結果產生很大的問題。
(2)爲什麼要檢查溢出
從上面的描述中,不難看出,溢出的檢查很有意義,通過基礎標誌V的檢查,就可以知道數據有無溢出,如果沒有溢出證明數據是沒問題的,否者數據的值可能存在問題,需要做相應的處理。
高級語言,比如C語言實現兩個很大數計算時,如果數據計算機結果因爲太大而溢出,當你使用這個溢出的數據時,會有溢出提醒,這個溢出提醒就是通過,C語言程序被編譯後的彙編程序,檢查V這個溢出標誌位得到的,我們在後面將C語言時,還會講到有關溢出事情。
S:有時用是N,當兩個有符號數進行運算時,S=1表示運算的結果爲負數,S=0表示運算的結果爲正數或零。
應用舉例:比較a、b兩數的大小,寫成程序的話,我們會讓兩個數進行減法減法運算,如果S=1,表示是一個負數,說明a<b,如果S=0,說明a等於或者大於b,這個時候需要在查詢Z標誌位,如果Z標誌位爲1,表示a等於b,否者說明a小於b。
2)cpu的控制器
(a)作用:最重要的功能就是對指令進行譯碼,然後將指令轉成微指令,再由微指令控制計算機工作,比如
· 控制ALU,讓ALU進行數據的算術、邏輯運算
· 進行數據的移動,比如從CPU的寄存器移到內存中,或者從內存的某個位置搬移到內存的另一個位置。
· 等等
(b)控制器組成
· 程序計數器(PC):Program Counter,程序最開始運行時,PC裏面放的是程序第一條指令在內存中所在的地址,每運行一
條指令,PC裏面的地址就會加1,指向下一個指令,如果一個指令的存放需要4個字節,pc中的地址加1,實際上加的是4個字節。
· 指令寄存器(IR):Instruction Register,臨時存放從內存中取得的,即將要被解釋運行的指令,指令由兩部分組成,
- 第一部分:操作碼,指明計算機需要執行一個什麼樣的動作,比如有些操作碼錶示做加運算,有些表示要進行數據搬移。
- 第二部分:地址碼,
+ 直接是要被操作碼操作的數
+ 要被操作的數在內存中所在的地址。
MOV
僞指令 101001 1001010101
操作碼 地址碼
· 指令譯碼器(ID):Instruction Decoder,解釋指令,解釋指令的過程爲,
- 第一步:檢查指令的格式是否合法,是否夾有非法字符、或者非法詞組,有的話,譯碼將不會通過
- 第二步:如果指令被檢查合格了,會提取出操作碼,將操作碼翻譯爲微指令,控制計算機各部分,按照操作碼的要求做事
· 控制存儲器:用於存放微指令程序(或稱微程序),每一操作碼都對應着一個自己的微指令程序,控制存儲器中存放着所有操作碼
所對應的微指令程序。
比如MOV(加運算)操作碼,就有自己的微指令程序,微指令程序是由一條條的微指令構成的,在出廠時,這些微指令程序就被
固化在了控制存儲器中。
· 微指令寄存器:用於臨時存放微指令
(2)總線與io接口
總線與接口的作用就是,將CPU和外部設備連接在一起。-----
1)三大高速總線
(a)作用:高速通信線路,屬於CPU的高速公路
· 地址總線:傳輸地址信號,比如通過傳輸地址信號,找到要操作的內存單元等
· 控制總線:傳輸控制信號
通過地址總線傳輸的地址信號,找到內存的某位置了,接下來到底是往裏面寫數據呢,還是從裏面讀數據呢,那就
要看具體的“指令”了,如果是寫指令,指令經過譯碼器的譯碼後,會被轉爲微指令,微指令會通過控制總線,向內存發
控制信號,表示說,我希望向該內存位置寫數據。
· 數據總線:傳輸數據信號
比如通過地址信號找到內存的某個位置了,控制總線也發出了寫的控制信號,希望對該空間寫數據,那麼寫數據時,就需要
通過數據總線向該內存空間傳輸數據信號的,內存收到這個數據信號後,會將該數據信號鎖存到該內存空間中,那麼這樣就實現了
寫數據的過程。
(b)三大高速總線是分開的
三大高速總線其實是可以合在一起的,但是合成一個的話會忙不過來的,通信的速率會非常低,分成三條總線就好比將高速公
路分成三個車道,不同車走不同的車道,互不相干,效率自然就高。
(c)三大高速總線是並行通信的
使用並行通信的目的也是爲了條通信效率。
(d)三大高速總線所處位置 -------
三大高速總線位於CPU的內部,通過CPU芯片的引腳與外部的IO橋連接在一起。
2)IO接口
(a)作用:負責連接各種的輸入、輸出外部設備
(b)每一個設備都會有屬於自己的IO接口
(c)io接口也有地址、數據、控制三大線,
· io接口的地址線、數據線、控制線,大多數情況都是串行通信的,而且往往是複用的
比如USB通信,usb使用的就是串行通信的,常見的USB2.0有4根線,其中有兩根線,一個是正極電源線,另一個負極電源線,
其它兩根線被複用當作地址線、數據線、控制線使用。
· 不過內存是一個特例,爲了能夠提高內存的訪問速度,內存io接口的地址、數據、控制線都是獨立的,並且使用的是並行通信。
(d)後面的linux驅動課程,主要涉及的就是IO接口相關的內容
linux驅動就是講如何通過編寫驅動程序,去控制這些IO接口,實現與外部設備的通信,有關IO接口這一塊的知識,我們會在後面的
linux驅動技術課程部分詳細講解,所以,io接口是後面Linux驅動課程的核心內容。
(e)io接口所處的位置
· 在芯片的外部:比如pc機(個人電腦),所有IO接口基本都是在CPU芯片的外部
· 集成在芯片內部:比如像單片機,雖然有一部分也是在芯片外部,但是有很大部分IO接口是被直接集成於在了芯片的內部。
3)IO橋
(a)並不是計算機都需要IO橋
IO橋是PC機特有的,除了PC外的其它類的計算機,有些(單片機)就不使用IO橋。---------------
(b)爲什們會使用IO橋
其實是可以不使用IO橋的,沒有IO橋時,所有的“IO接口”都是直接掛接在三大高速總線上的,但是隨着發展,掛接的外部
設備越來越多,直接掛接在總線上,管理是一個麻煩,爲了管理的便利,就加了IO橋,IO接口直接掛接在IO橋上,就由IO橋
來管理衆多的IO接口。
(c)IO橋常常分爲南橋和北橋
南橋對應的就是一個南橋芯片,北橋對應的就是一個北橋芯片,南北橋之間會有相互連接。 -----------
· 南橋:負責CPU與鼠標、鍵盤、磁盤等,通信速率較低的外部設備之間的通信。
· 北橋:負責CPU與內存、顯示器等,通信速率要求較高的外設之間的通信。
(d)io橋所處的位置
io橋指的就是南橋和北橋芯片,位於CPU芯片的外部。
4)地址、數據、控制線相互配合工作
(a)例子:將內存中地址0101字節的內容讀出,寫到CPU通用寄存器R0(地址爲1001)中,假設寄存器R0只有一個字節。
步驟:
第一大步:從內存0101的字節,讀出數據
(1)cpu通過地址線發出0101這個地址信號,內存的0101對應的字節會被選中
(2)cpu解釋並執行“讀指令”,發出“讀”的控制信號
通過控制線發送“讀”控制信號後,之前被選中的0101字節,就被設置爲了可讀,設置爲可讀後,內存0101字節中的數據2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v(11001001)會被讀出,讀的過程,其實就是通過數據線將電信號導出,由於內存的數據、地址、控制線是並行傳輸的,那麼在並行數據線上,此時擁有與2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v相同的電平狀態。
與此同時,哪些掛在地址、數據、控制線上的,與本次操作不相干的其它內存字節,全部爲高阻狀態,爲高阻態時,不會受到數據、地址、控制線上面信號的影響。
第二大步:將數據寫入r0中
(1)cpu通過地址線發出1001地址信號,CPU通用寄存器組中的r0寄存器會被選中
(2)cpu解釋並執行“寫指令”,發出“寫”的控制信號
cpu通過控制線發出“寫”控制信號後,被1001地址選中的r0會被設定會寫狀態,設置爲可寫後,數據線上的數據(電平信號)
2.5v 2.5v 0v 0v 2.5v 0v 0v 2.5v,會被傳輸給r0寄存器,並將電信號鎖存起來,寫過程完畢,而其它寄存器處於高阻態, 不會受到影響。
(b)以上過程,在高級語言程序裏面,只有一條語句
使用高級語言寫程序時,以上過程的過程只需一條a = b就搞定了,但是實際上這句話會被翻譯爲彙編,然後彙編程序被執行時,硬件在指令的控制下,經過以上步驟才能實現數據的讀寫。
(c)疑問
有些同學可能有一個疑問,那就是地址、數據、控制線,在技術上是如何做到只操作想操作哪個字節就操作哪個字節,爲什麼其它直接爲高阻態是不受影響,其個就是我們數字電路里面所學的三態門的工作原理了,具體內容,這裏就不再介紹,後面技術課程涉及到後在講解這樣的問題。
(3)外部設備
1)什麼是外部設備
掛接在外設IO接口上的都是外部設備,與設備在機箱外部還是內部沒關係,不管是在內部還是外部都是外設,外部設備大致分爲三類。
(a)數據的傳輸:比如網卡,負責數據的發送和接收,即是輸入也是輸出設備
(b)數據的存儲:比如像磁盤,SSD(固態硬盤),負責數據的存儲,既能讀數據也能裏寫數據,所以即是輸入也是輸出設備。
(c)數據的翻譯:比如輸入設備MIC,將輸入的聲音翻譯爲電信號的二進制數據。比如顯示器,將電信號的二進制數據翻譯爲人看得見的
圖像和視頻。
2)外部設備所在位置
(a)片內外設
集成在芯片的內部的片內外設,比如xxxxx,後面會講片內外設。只是像PC這種計算機,使用的CPU是一個獨立芯片,很少有片內外設,後面講MCU、SOC時,會提到什麼是片內外設。
(b)片外外設(芯片外部)
·直接在電路板上:內存
·需要通過數據線連接在一起
機殼內:硬盤
機殼外:比如像鼠標,U盤。
3)輸入設備
鍵盤:字符圖形輸入,按下某個按鍵,輸入動作會被翻譯爲ASCII編號數據(以電信號的二進制數形式存在)。
鼠標:光標位置輸入,將鼠標移動轉爲電信號二進制的座標數據
攝像頭:圖形圖像輸入,將其翻譯爲電信號二進制數據
麥克風:聲音輸入,將其翻譯爲電信號二進制數據
觸摸屏:將觸摸位置翻譯爲電信號二進制座標數據
網卡:直接接受別的計算機發送的電信號二進制數據,輸入給計算機
磁盤、SSD:讀取存儲的數據,輸入給計算機
4)輸出設備
顯示器:將CPU按照程序要求處理後的,電信號的二進制的圖形、圖像數據,翻譯成爲圖形圖像給人看
喇叭:將聲數據翻譯成爲人能聽得見的聲音
打印機:將數據輸出到打印機打印,打印機打印
機械手臂:將輸出數據翻譯成爲機械手臂的動作
led燈等:將輸出數據翻譯成爲燈的亮滅
網卡:從計算機輸出數據,傳輸給別的計算機
磁盤、SSD:從計算機輸出數據,寫到磁盤或者SSD中
7.4 爲什們要介紹計算機的組成結構
這裏之所以要介紹計算機的組成結構,主要是有如下兩個原因,
(1)很多同學對於計算機的結構一直是模模糊糊的,都聽說過馮諾·依曼結構,但是沒有多少同學真正的知道這個結構具體是怎樣的,特別是對於計算機較詳細的機構沒有多少同學清楚,所以我們希望給給位同學把這部分的知識補習下。
(2)我們後續的嵌入式技術課程,還會詳細涉及計算機的組成結構,那時會以具體的某個具體的某個開發板爲例進行講解,這裏先籠統的介紹計算機的大體結構,是希望各位同學能有一個基礎的理解,爲我們後面講解更加深入的結構知識時打基礎。
作者:佳嵌工作室
51CTO免費視頻地址:http://edu.51cto.com/lecturer/12941022.html
課程進度諮詢QQ羣:528495268
轉載請說明源地址。