CPU功能與結構
CPU功能
- 指令控制:完成取指令、分析指令和執行指令的操作,即程序的順序控制。
- 操作控制:一條指令的功能往往是由若干操作信號的組合來實現的。CPU管理並產生由內存取出的每條指令的操作信號,把各種操作信號,把各種操作信號送往相應的部件,從而控制這些部件暗指令的要求進行動作。
- 時間控制:對各種操作加以時間上的控制。時間控制要為每條指令按時間順序提供應有的控制信號。
- 數據加工:對數據進行算術和邏輯運算。
- 中斷處理:對計算機運行過程中出現的異常情況和特殊請求進行處理。
運算器和控制器的功能
運算器
對數據進行加工
控制器
協調並控制計算機各部件執行程序的指令序列,基本功能包括去指令、分析指令、執行指令。
取指令:自動形成指令地址;自動發出取指令的命令。
分析指令:操作碼譯碼(分析本條指令要完成什么操作);產生操作數的有效地址。
執行指令:根據分析指令得到的"操作命令"和"操作數地址",形成操作信號控制序列,控制運算器、存儲器以及I/O設備完成相應的操作。
中斷指令:管理總線以及輸入輸出;處理異常情況(如掉電)和特殊情況(如打印機請求打印一行字符)
基本結構
運算器的基本結構
-
算術邏輯單元:主要功能是進行算術/邏輯運算。
-
通用寄存器組:如AX、BX、CX、DX、SP等,用於存放操作數(包括源操作數、目的操作數以及中間結果)和各種地址信息等。SP是堆棧指針,用於指示棧頂的地址。
-
暫存寄存器:用於暫存從主存讀來的數據,這個數據不能存放在通用寄存器中,否則會破壞其原有內容。
-
累計寄存器:它是一個通用寄存器,用於暫時存儲ALU運算的結果信息,用於實現加法運算。
如:兩個操作數分別來自主存和\(R_0\),最后結果存回\(R_0\),那么從主存取來的操作數直接放入暫存器,就不會破壞運算器前\(R_0\)的內容。
-
程序狀態字寄存器(PSW):保留由算術邏輯運算指令或測試指令的結果二建立的各種狀態信息,如溢出標志(OP)、符號標志(SF)、零標志(ZF)、進位標志(CF)等。PSW中的這些參與並決定微操作的形成。
-
移位器:對運算結果進行移位運算。
-
計數器:控制乘除運算的操作步數。
數據通路方式
專用數據通路方式:根據指令執行過程中的數據和地址的流動方法安排連接線路。
性能較高,基本不存在數據沖突現象,但結構復雜,硬件量大,不易實現。
如果直接使用導線連接,相當於多個寄存器同時並且一直向ALU傳輸數據。解決方法如下:
-
使用多路選擇器根據控制信號選擇一路輸出
-
使用三態門可以控制每一路是否輸出
如:ROout為1時\(R_0\)中的數據輸出到A端,ROout為0時\(R_0\)中的數據無法輸出到B端,
CPU單總線方式:將所有寄存器的輸入端和輸出端都連接到一條公共的通路上。
結構簡單,容易實現,但數據傳輸存在較多的沖突現象,性能較低。
控制器的基本結構
-
程序計數器:用於指出下一條指令在主存中的存放地址。CPU就是根據PC的內容去主存中取指令的。應程序中指令(通常)時順序執行的,所以PC有自增的功能。
-
指令寄存器(IR):用於保存當前正在執行的那條指令。
-
指令譯碼器:僅對操作碼字段進行譯碼,向控制器提供特定的操作信號。
-
微操作信號發生器:根據IR的內容(指令)、PSW的內容(狀態信息)及時序信號,產生控制整個計算機系統所需的各種控制信號,其結構有組合邏輯型和存儲邏輯型兩種。
-
時序系統:用於產生各種時序信號,它們都是由統一時鍾(CLOCK)分頻得到。
-
存儲器地址寄存器(MAR):用於存放所要訪問的主存單元地址。
-
存儲器數據寄存器(MDR):用於存放向主存寫入的信息或從主存中讀出的信息。
CPU基本結構
用戶可見寄存器:通用寄存器組、程序狀態字寄存器PSW、程序計數器PC
用戶不可見寄存器:MAR、MDR、IR、暫存寄存器。
指令執行過程
指令周期
指令周期:CPU從主存中每取出並執行一條指令所需的全部時間。
指令周期常常用若干機器周期來表示,機器周期又叫CPU周期。
一個機器周期又包含若干時鍾周期(也稱為節拍、T周期或CPU時鍾周期,它是CPU操作的最基本單位)。
每個指令周內機器周期數可以不等,每個周期內的節拍數也可以不等。
指令周期流程
實現方式:通過觸發器實現
四個工作周期都有CPU訪存操作,只是訪存的目的不同。取指周期是為了取指令,間址周期是為了取有效地址,執行周期是為了取操作數,中斷周期是為了保存程序斷點。
指令周期的數據流
取值周期
- 當前指令地址送至存儲器地址寄存器,記做:(PC)->MAR
- CU發出控制信號,經控制總線傳到主存,這里是讀信號,記做:1->R
- 將MAR所指主存中的內容經數據總線送入MDR,記做:M(MAR)->MDR
- 將MDR中的內容(此時是指令)送入IR,記做:(MDR)->IR
- CU發出控制信號,形成下一條指令地址,記做:(PC)+1->PC
間址周期
一次間址為例:
- 將指令的地址碼送入MAR,記做:Ad(IR)->MAR或Ad(MDR)->MAR
- CU發出控制信號,啟動主存做讀操作,記做:1->R
- 將MAR所指主存中的內容經數據總線送入MDR,記做:M(MAR)->MDR
將有效地址送至指令的地址碼字段,記做:MDR->Ad(IR)
執行周期
執行周期的任務是根據IR中的指令字的操作碼和操作數通過ALU操作產生執行結果。不同指令的執行周期操作不同,因此沒有同一的數據流向。
中斷周期
中斷:暫停當前任務去完成其他任務。為了能夠恢復當前任務,需要保存斷點。一般使用堆棧來保存斷點,這里用SP表示棧頂地址,假設SP指向棧頂元素,進棧是先修改指針,后存入數據。
-
CU控制將SP減1,修改后的地址送入MAR,記做:(SP)-1>SP.(SP)->MAR
本質是將斷點存入某個存儲單元,假設其地址為a,故可記做:a->MAR
-
CU發出控制信號,啟動主存做寫操作,記做:1->W
-
將斷點(PC內容)送入MDR,記做:(PC)->MDR
-
CU控制將中斷服務程序的入口地址(由向量地址形成部件產生)送入PC,記做:向量地址->PC
指令執行方案
-
方案1.單指令周期
對所有指令都選用相同的執行時間來完成。
指令之間串行執行;指令周期取決於執行最執行時間最長的指令的執行時間。
對於那些本來可以在更短時間內完成的指令,要使用這個較長的周期來完成,會降低整個系統的運行速度。
-
方案2.多指令周期
對不同類型的指令選用不同的執行步驟來完成。
指令之間串行執行;可選用不同個數的時鍾周期來完成不同指令的執行過程。
需要更復雜的硬件設計。
-
方案3.流水線方案
在每一個時鍾周期啟動一條指令,盡量讓多條指令同時運行,但各自處在不同的執行步驟中。指令之間並行執行。
數據通路
數據通路:數據在功能部件之間的傳送的路徑。
基本結構
CPU內部單總線方式
內部總線是指同一部件,如CPU內部連接各寄存器及運算部件之間的總線;
系統總線是指同一台計算機系統的各部件,如CPU、內存、通道和各類IO接口間互相連接的總線。
數據傳送方式:
-
寄存器之間數據傳送
比如把PC內容送至MAR,實現傳送數據的流程及控制信號為:
(PC)->Bus PCout有效,PC內容送總線
Bus->MAR MARin有效,總線內容送MAR
-
主存與CPU之間的數據傳送
比如CPU從主存讀取指令,實現傳送操作的流程及控制信號為:
(PC)->Bus->MAR PCout和MARin有效,現行指令地址->MAR
1->R CU發讀命令(通過控制總線發出)
M(MAR)->MDR MDRin有效(通過地址線與數據線)
MDR->Bus->IR MDRout和IRin有效,現行指令->IR
-
執行算術或邏輯運算
比如一條加法指令,微操作序列及控制信號為:
Ad(IR)->Bus->MAR AdIout(MDRout)和MARin有效
1->R CU發讀命令
M(MAR)->數據線->MDR MDRin有效
MDR->Bus->Y MDRout和Yin有效,操作數->Y
(ACC)+(Y)->Z ACCout和ALUin有效,CU向ALU發送加命令
Z->ACC Zout和ACCin有效,結果->ACC
專用數據通路
以取指周期為例:
(PC)->MAR \(C_0\)有效
(MAR)->主存 \(C_1\)有效
1->R 控制單元向主存發送讀命令
M(MAR)->MDR \(C_2\)有效
(MDR)->IR \(C_3\)有效
(PC)+1->PC
Op(IR)->CU \(C_4\)有效
控制器設計
控制單元的輸入輸出
輸入
- 指令寄存器: OP(IR)->CU 控制信號的產生和操作碼有關
- 時鍾:一個時鍾脈沖發一個操作命令或一組需要同時執行的操作命令。
- 標志:如條件轉移指令,根據相應的標志位決定下一步操作
- 外來信號:如中斷請求信號INTR,總線請求信號HRQ
輸出
-
CPU內部的控制信號:寄存器之間的數據傳輸、PC的修改、控制ALU進行相應的運算
-
到控制總線的控制信號:
到存儲器:訪存控制信號\(\overline{MREQ}\),讀命令\(\overline{RD}\)、寫命令\(\overline{WR}\)
到IO設備:訪問I/O設備的控制信號\(\overline{IO}\)
z中斷響應信號INTA,總線響應信號HLDA
CPU控制方式
產生不同微操作命令序列所用的時序控制方式。
-
同步控制方式
整個系統所有的控制信號均來自一個統一的時鍾信號。
同步控制方式的優點是控制電路簡單,缺點是運行速度慢。
-
異步控制方式
異步控制方式不存在基准時標信號。
各部件按自身固有的速度工作,通過應答方式進行聯絡。
異步控制方式的優點是運行速度塊,缺點是控制電路比較復雜。
-
聯合控制方式
對各種不同的指令的微操作實行大部分采用同步控制、小部分采用異步控制的方法。
安排微操作時序的原則
- 原則一:微操作的先后順序不得隨意更改
- 原則二:被控對象不同的微操作盡量安排在一個節拍內完成
- 原則三:占用時間較短的為微操作盡量安排在一個節拍內完成並允許有先后順序
硬布線工作原理:微操作控制信號由組合邏輯電路根據當前的指令碼、狀態和時序,即時產生
硬布線控制器
微操作單元設計
設計步驟:
- 分析每個階段得微操作序列
- 選擇CPU的控制方式
- 安排微操作時序
- 電路設計
- 列出操作時間表
- 寫出微操作命令的最簡表達式
- 畫出邏輯圖
特點:
指令越多,設計和實現就越復雜,因此一般用於RISC。
如果擴充一條新的指令,則控制器的設計就需要大改,因此擴充指令較困難。
由於使用純硬件實現控制,因此執行速度很快。微操作控制信號由組合邏輯電路即時產生。
微程序控制器
微程序工作原理:事先把微操作控制信號存儲在一個專門的存儲器(控制存儲器)中,將每一條機器指令編寫成一個微程序,這些微程序可以存到一個控制存儲器中,用尋址用戶程序機器指令的辦法來尋址每個微程序的微指令。
基本思想
相容性微命令:可以同時產生、共同完成某一些微操作的微命令。
互斥性微命令:在機器中不允許同時出現的微命令。
基本結構
微地址形成部件:產生初始微地址和后繼微地址,以保證微指令的連續執行。
順序邏輯:控制微指令的順序。
CMAR(uPC):微地址寄存器,接收微地址形成部件送來的微地址,為在CM中讀取微指令作准備。
地址譯碼:將地址碼轉化為存儲單元控制信號。
控制存儲器:用於存放各指令對應的微程序,控制存儲器可用只讀存儲器ROM構成。
CMDR(uIR):用於存放從CM中取出的微指令,它的位數同微指令字長相等。
微指令控制的基本概念
-
微命令與微操作
微命令是微操作的控制信號,
微操作是微命令的執行過程。
-
微指令與微周期
微指令是若干微命令的集合。
微周期通常指從控制存儲器中讀取一條微指令並執行相應的微操作所需的時間。
-
主存儲器與控制存儲器
主存儲器用於存放程序和數據,在CPU外部,用RAM實現;
控制存儲器(CM)用於存放微程序,在CPU內部,用ROM實現。
-
程序與微程序
程序是指令的有序集合,用於完成特定的功能;
微程序是微指令的有序集合,一條指令的功能由一段微程序來實現。
若指令系統具有n種機器指令,則控制存儲器中的微程序數至少是n+1個
微指令的格式
-
水平型微指令:一次能定義並執行多個並行操作。
基本格式:
微操作碼 微地址碼 操作控制 順序控制 優點:微程序短,執行速度快;
缺點:微指令長,編寫微程序較麻煩。
-
垂直型微指令:類似機器指令操作碼的方式,一條微指令只能定義一個微命令,由微操作碼字段規定指令的功能。
基本格式:
\(\mu OP\) \(Rd\) \(Rs\) 微操作碼 目的地址 源地址 優點:微指令短、簡單、規整,便於編寫微程序;
缺點:微程序長,執行速度慢,工作效率低。
-
混合型微指令:在垂直型的基礎上增加一些不太復雜的並行操作。
微指令短,仍便於編寫;微程序也不長,執行速度加快。
微指令的編碼方式
微指令的編碼方式又稱為微指令的控制方式,它是指如何對微指令的控制字段進行編碼,以形成控制信號。編碼的目標是保證速度的情況下,盡量縮短微指令字長。
-
直接編碼(直接控制)方式
在微指令的操作控制字段中,每一位代表一個微操作命令。
某位為"1"表示該控制信號有效。
優點:簡單、直觀,執行速度快,操作並行性好。
缺點:微指令字長過長,n個微命令就要求微指令的操作字段有n位,造成控存容量極大。
-
字段直接編碼方式
將微指令的控制字段分成若干"段",每端經譯碼后發出控制信號。
微命令字段分段的原則:
- 互斥性微命令分在同一段內,相容性微命令分在不同段內。
- 每個小段中包含的信息位不能太多,否則將增加譯碼線路的復雜性和譯碼時間。
- 一般每個小段還要留出一個狀態,表示本字段不發出任何微命令。因此,單某字段的長度為3位時,最多只能表示7個互斥的微命令.通常用000表示不操作。
優點:可以縮短微指令字長。
缺點:要通過譯碼電路再發出微命令,因此筆直接編碼方式慢。
-
字段間接編碼方式
一個字段的某個微命令需由微命令來解釋,由於表示考字段直接譯碼發出的微命令.故稱為字段間接編碼,又稱隱式編碼。
優點:可進一步縮短微指令字長。
缺點:削弱了微指令的並行控制能力,故通常作為字段直接編碼方式的一種輔助手段。
微指令的地址形成方式
-
微指令的下地址字段指出
微指令格式中設置一個下地址字段,有微指令的下地址字段直接指出后繼微指令的地址,這種方式又稱為斷定方式。
-
根據機器指令的操作碼形成
當機器指令取至指令寄存器后,微指令的地址由操作碼經微地址形成部件形成。
-
增量計數器法
(CMAR)+1-->CMAR
-
分支轉移
轉移方式:指明判別條件;轉移地址:指明轉移成功后的去向。
操作控制字段 轉移方式 轉移地址 -
通過測試網絡
-
由硬件產生微程序入口地址
第一條微指令地址由專門硬件產生
中斷周期由硬件產生中斷周期微程序首地址
微程序控制單元設計
設計步驟:
-
分析每個階段的微操作序列
-
寫出對應機器指令的微操作命令及節拍安排
- 寫出每個周期所需要的微操作(參考硬布線)
- 補充微程序控制器特有的微操作:
- 取指周期:Ad(CMDR)->CMAR OP(IR)->微地址形成部件->CMAR
- 執行周期:Ad(CMDR)->CMAR
-
確定微指令格式(操作碼,下地址)
-
編寫微指令碼點
微程序設計分類
-
靜態微程序設計和動態微程序設計
靜態 微程序無需改變,采用ROM
動態 通過改變微指令和微程序改變機器指令,有利於仿真,采用EPROM
-
毫微程序設計
毫微程序設計的基本概念
微程序設計 用 微程序解釋機器指令
毫微程序設計 用 毫微程序解釋微程序
毫微指令與微指令 的關系好比 微指令和機器指令
硬布線和微程序的比較
對比項目 類型 | 微程序控制器 | 硬布線控制器 |
---|---|---|
工作原理 | 微操作控制信號以微程序的形式存放在控制存儲器中,執行指令時讀出即可 | 微操作控制信號由組合邏輯電路根據當前的指令碼、狀態和時序,即時產生 |
執行速度 | 慢 | 快 |
規整性 | 較規整 | 煩瑣、不規整 |
應用場合 | CISC CPU | RISC CPU |
易擴充性 | 易擴充修改 | 困難 |
指令流水線
指令流水定義
一條指令的執行過程可以分成多個階段(或過程)。根據計算機的不同,具體的分法也不同。
取指 | 分析 | 執行 |
---|
取指:根據PC內容訪問主存儲器,取一條指令送到IR中
分析:對指令操作碼進行譯碼,按照給定的尋址方式和地址字段中的內容形成操作數的有效地址EA,並從有效地址EA中取出操作數。
執行:根據操作碼字段,完成指令規定的功能,即把運算結構寫到通用寄存器或主存中。
設取指、分析、執行3個階段的時間都相等,用t表示,按一下幾種執行方式分析n條指令的執行時間:
-
順序執行方式: 總耗時\(T=n \times 3t=3nt\)
傳統馮·諾伊曼機采用順序執行方式,又稱串行執行方式。
優點:控制簡單,硬件代價小。
缺點:執行指令的速度較慢,在任何時刻,處理機中只有一條指令在執行,各功能部件的利用率很低。
-
一次重疊執行方式: 總耗時\(T=3t+(n-1)\times 2t=(1+2n)t\)
優點:程序的執行時間縮短了1/3,各功能部件的利用率明顯提高。
缺點:需要付出硬件上較大開銷的代價,控制過程也比順序執行復雜了。
-
二次重疊執行方式: 總耗時\(T=3t+(n-1)\times t=(2+n)t\)
注:也可以把每條指令的執行過程分成4個或5個階段,分成5個階段是比較常見的做法。
與順序執行相比,指令的執行時間縮短近2/3。這是一種理想的指令執行方式,在正常情況下,處理機中同時有3條指令在執行。
流水線的表示方法
-
指令執行過程圖
主要用於分析指令執行過程以及影響流水線的因素。
-
時空圖
主要用於分析流水線的性能。
流水線的性能指標
吞吐量(率)
吞吐率是指在單位時間內流水線所完成的任務數量,或是輸出結果的數量。
設任務數為n;處理完成n個任務所用的時間為\(T_k\)
則計算流水線吞吐率(TP)的最基本公式為\(TP=\frac{n}{T_k}\)
理想情況下,流水線的時空圖如下:
注:一條指令從開始到結束的時間稱為裝入時間;最后一條指令從開始到結束的時間為排空時間。
一條指令的執行分為k個階段,每個階段耗時\(\Delta t\),一般取\(\Delta t\)=一個時鍾周期。 \(T_k=(k+n-1)\Delta t\)
流水線的實際吞吐率為\(TP=\frac{n}{(k+n-1)\Delta t}\)
當連續輸入的任務\(n\to\infty\),得最大吞吐率為\(TP_{max}=1/\Delta t\)
加速比
完成同樣一批任務,不使用流水線所用的時間與使用流水線所用的時間之比。
設\(T_0\) 表示不使用流水線時的執行時間,即順序執行所用的時間;\(T_k\)表示使用流水線的執行時間
則計算流水線加速比(S)的基本公式為\(S=\frac{T_0}{T_k}\)
理想情況下,單獨完成一個任務耗時為\(k\Delta t\),則順序完成n個任務耗時\(T_0=nk\Delta t\),則實際加速比為
當連續輸入的任務\(n\to\infty\)時,最大加速比為\(S_{max}=k\)。
效率
流水線的設備利用率稱為流水線的效率。
在時空圖上,流水線的效率定義為完成n個任務占用的時空區有效面積與n個任務所用的時間與k個流水段所圍成的時空區總面積之比。
則流水線效率(E)的一般公式為
理想情況下,當連續輸入的任務\(n\to\infty\)時,最高效率為\(E_{max}=1\)。
指令流水線影響因素
機器周期的設置
為了方便流水線的設計,將每個階段的耗時取成一樣,以最長耗時為准。
流水線每一個功能段部件后面都要有一個緩沖寄存器,或稱為鎖存器,其作用是保存本流水段的執行結果,提供給下一流水段使用。
結構相關(資源沖突)
由於多條指令在同一時刻爭用同一資源而形成的沖突稱為結構相關。
解決辦法:
- 后一相關指令暫停一周期
- 資源重復配置:數據存儲器+指令存儲器
數據相關(數據沖突)
數據相關指在一個程序中,存在必須等前一條指令執行完才能執行后一條指令的情況。
數據的基本操作:讀(R)、寫(W)
沖突的基本類型:RAW、WAR、WAW
解決辦法:
- 把遇到數據相關的指令及其后續指令都暫停一至幾個時鍾周期,直到數據相關問題消失后再繼續執行。可分為硬件阻塞(stall)和軟件插入"NOP"兩種辦法。
- 數據旁路技術。(轉發機制)
- 編譯優化:通過編譯器調整指令順序來解決數據相關。
控制相關(控制沖突)
當流水線遇到轉移指令和其他改變PC值的指令而造成斷流時,會引起控制相關。
解決辦法:
- 轉移指令分支預測。簡單預測(永遠猜true或false),動態預測(根據歷史情況動態調整)
- 預取轉移成功和不成功兩個控制流方向上的目標指令
- 加快和提前形成條件碼
- 提高轉移方向的猜准率
流水線的分類
部件功能級、處理機級和處理機間級流水線
根據流水線使用的級別的不同,流水線可分為部件功能級、處理機級和處理機間級流水線。
-
部件功能級流水就是將復雜的算術邏輯運算組成流水線工作方式。例如,可將浮點加法操作分成求階差、對階、尾數相加以及結果規格化等4個子過程。
-
處理機級流水線是把一條指令解釋過程分成多個子過程,如前面提到的取指、譯碼、執行、訪存及寫回5個子過程。
-
處理機間級流水線是一種宏流水,其中每一個處理機完成某一專門任務,各個處理機所得到的結果需存放在於下一個處理機所共享的存儲器中。
單功能流水線和多功能流水線
按流水線可以完成的功能,流水線可分為單功能流水線和多功能流水線。
-
單功能流水線指只能實現一種固定的專門功能的流水線;
-
多功能流水線指通過各段間的不同連接方式可以同時或不同時地實現多種功能的流水線。
動態流水線和靜態流水線
按同一時間內各段之間的連接方式,流水線可分為動態流水線和靜態流水線。
-
靜態流水線指在同一時間內,流水線的各段只能按同一種功能的連接方式工作。
-
動態流水線指在同一時間內,當某些段正在實現某種運算時,另一些段卻正在進行另一種運算。這樣對提高流水線的效率很有好處,但會使流水線控制變得復雜。
線性流水線和非線性流水線
按流水線的各個功能段之間是否有反饋信號,流水線可分為線性流水線和非線性流水線。
-
線性流水線中,從輸入到輸出,每個功能段只允許經過一次,不存在反饋回路。
-
非線性流水線存在反饋回路,從輸入到輸出過程中,某些功能段將數次通過流水線,這種流水線適合線性遞歸的運算。
流水線的多發技術
超標量技術
每個時鍾周期內可並發多條獨立指令,要配置多個功能部件;
不能調整指令的執行順序,通過編譯優化技術,把可並行執行的指令搭配起來。
超流水技術
流水線速度是原來速度的3倍。
在一個時鍾周期內再分段(三段)
在一個時鍾周期內一個功能部件使用多次(3次)
不能調整指令的執行順序,靠編譯程序解決優化問題。
超長指令字
由編譯程序挖掘出指令間潛在的並行性,將多條能並行操作的指令組合成一條。
具有多個操作碼字段的超長指令字(可達幾百位)
采用多個處理部件
五段式指令流水線
考試中常見的五類指令
-
運算類指令
-
Load指令
-
Store指令
-
條件轉移指令
-
無條件轉移指令