計算機組成原理-CPU組成


 

1、指令周期

 

   計算機每執行一條指令的過程,可以分解成這樣幾個步驟。

 

    (1).Fetch(取得指令),也就是從 PC 寄存器里找到對應的指令地址,根據指令地址從內存里把具體的指令,加載到指令寄存器中,然后把 PC 寄存器自增,好在未來執行下一條指令。

 

    (2).Decode(指令譯碼),也就是根據指令寄存器里面的指令,解析成要進行什么樣的操作,是 R、I、J 中的哪一種指令,具體要操作哪些寄存器、數據或者內存地址。

 

    (3).Execute(執行指令),也就是實際運行對應的 R、I、J 這些特定的指令,進行算術邏輯操作、數據傳輸或者直接的地址跳轉。

 

    (4). 重復進行 1~3 的步驟。

 

    這樣的步驟,其實就是一個永不停歇的“Fetch - Decode - Execute”的循環,這個循環稱之為指令周期(Instruction Cycle)。

 

    在取指令的階段,指令是放在存儲器里的,通過 PC 寄存器和指令寄存器取出指令的過程,是由控制器操作的。指令的解碼過程,也是由控制器進行的。一旦到了執行指令階段,無論是進行算術操作、邏輯操作的 R 型指令,還是進行數據傳輸、條件分支的 I 型指令,都是由算術邏輯單元(ALU)操作的,也就是由運算器處理的。一個簡單的無條件地址跳轉,可以直接在控制器里面完成,不需要用到運算器。

 

 

2、數據通路

 

    數據通路就是處理器單元。它通常由兩類原件組成。

 

    第一類叫操作元件,也叫組合邏輯元件(Combinational Element),就是 ALU。功能是在特定的輸入下,根據下面的組合電路的邏輯,生成特定的輸出。

 

    第二類叫存儲元件,也有叫狀態元件(State Element)的。比如計算過程中需要用到的寄存器,無論是通用寄存器還是狀態寄存器,其實都是存儲元件。

 

    通過數據總線的方式,把它們連接起來,就可以完成數據的存儲、處理和傳輸了,這就是所謂的建立數據通路

 

 

3、控制器

 

    可以看成只是機械地重復“Fetch - Decode - Execute“循環中的前兩個步驟,然后把最后一個步驟,通過控制器產生的控制信號,交給 ALU 去處理。

 

4、CPU需要的硬件電路

 

    1)ALU 這樣的組合邏輯電路,實際就是一個沒有狀態的,根據輸入計算輸出結果的第一個電路。

 

    2) 用來存儲數據的鎖存器和 D 觸發器電路,能夠進行狀態讀寫的電路元件,也就是寄存器。這個電路能夠存儲到上一次的計算結果。這個計算結果並不一定要立刻拿到電路的下游去使用,但是可以在需要的時候拿出來用。常見的能夠進行狀態讀寫的電路,就有鎖存器、D 觸發器電路。

 

    3)用來實現 PC 寄存器的計數器電路,需要有一個“自動”的電路,按照固定的周期,不停地實現 PC 寄存器自增,自動地去執行“Fetch - Decode - Execute“的步驟。

 

    4)用來解碼和尋址的譯碼器電路,無論是對於指令進行 decode,還是對於拿到的內存地址去獲取對應的數據或者指令,都需要通過一個電路找到對應的數據。

 

    這四類電路,通過各種方式組合在一起,就能最終組成功能強大的 CPU 了。

 

 

 

5、時序邏輯電路

 

    1)實現自動運行。時序電路接通之后可以不停地開啟和關閉開關,進入一個自動運行的狀態。

 

    2)通過時序電路實現的觸發器,能把計算結果存儲在特定的電路里面,而不是像組合邏輯電路那樣,一旦輸入有任何改變,對應的輸出也會改變。

 

    3)解決了各個功能按照時序協調的問題。無論是程序實現的軟件指令,還是到硬件層面,各種指令的操作都有先后的順序要求。時序電路使得不同的事件按照時間順序發生。

 

 

6、反饋電路

 

   看圖,合上開關 A,磁性線圈就會通電,產生磁性,開關 B 就會從合上變成斷開。一旦這個開關斷開了,電路就中斷了,磁性線圈就失去了磁性。於是,開關 B 又會彈回到合上的狀態。這樣一來,電路接通,線圈又有了磁性。電路就會來回不斷地在開啟、關閉這兩個狀態中切換。這個不斷切換的過程,對於下游電路來說,就是不斷地產生新的 0 和 1 這樣的信號。如果在下游的電路上接上一個燈泡,就會發現這個燈泡在亮和暗之間不停切換。這個按照固定的周期不斷在 0 和 1 之間切換的信號,就是時鍾信號(Clock Signal)。這種電路,其實就相當於把電路的輸出信號作為輸入信號,再回到當前電路。這樣的電路構造方式,叫作反饋電路(Feedback Circuit)。

 

7、程序計數器

 

    時鍾信號提供定時的輸入; D 型觸發器可以在時鍾信號控制的時間點寫入數據。把這兩個功能組合起來,就可以實現一個自動的計數器了。加法器的兩個輸入,一個始終設置成 1,另外一個來自於一個 D 型觸發器 A。加法器的輸出結果,寫到這個 D 型觸發器 A 里面。於是,D 型觸發器里面的數據就會在固定的時鍾信號為 1 的時候更新一次。這樣就有了每過一個時鍾周期,就能固定自增 1 的自動計數器了。這個自動計數器,可以拿來當PC 寄存器。也就是程序計數器(Program Counter)。

 

    每次自增之后,可以去對應的 D 型觸發器里面取值,這也是下一條需要運行指令的地址。加法計數、內存取值,乃至后面的命令執行,最終其實都是由時鍾信號,來控制執行時間點和先后順序的,這也是需要時序電路最核心的原因。

 

8、譯碼器

 

   來完成“尋址”的電路,就是譯碼器。在現在實際使用的計算機里面,內存所使用的 DRAM,並不是通過上面的 D 型觸發器來實現的,而是使用了一種 CMOS 芯片來實現的。還是可以把內存芯片,當成是很多個連在一起的 D 型觸發器來實現的。

 

 

    通過一個反相器、兩個與門和一個或門,就可以實現一個 2-1 選擇器。通過控制反相器的輸入是 0 還是 1,能夠決定對應的輸出信號,是和地址 A,還是地址 B 的輸入信號一致。譯碼器的本質,就是從輸入的多個位的信號中,根據一定的開關和電路組合,選擇出自己想要的信號。

 

9、構造CPU過程

  D 觸發器、自動計數以及譯碼器、 ALU,湊齊了一個拼裝一個 CPU 必須要的零件了。

 

    1)自動計數器,這個自動計數器會隨着時鍾主頻不斷地自增,來作為 PC 寄存器。

    2)譯碼器,連在計數器后面。譯碼器還要同時連着內存(通過大量的 D 觸發器組成的)。

    3)自動計數器會隨着時鍾主頻不斷自增,從譯碼器當中,找到對應的計數器所表示的內存地址,然后讀取出里面的 CPU 指令。

    4)讀取出來的 CPU 指令會通過CPU 時鍾控制,寫入到一個由 D 觸發器組成的寄存器,也就是指令寄存器當中。

    5)在指令寄存器后面,再跟一個譯碼器。這個譯碼器是把拿到的指令,解析成 opcode 和對應的操作數。

    6)opcode 和操作數,對應的輸出線路就要連接 ALU,開始進行各種算術和邏輯運算。對應的計算結果,則會再寫回到 D 觸發器組成的寄存器或者內存當中。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM