計(jì)算機(jī)組成原理(五)中央處理器

5.1 CPU的功能和基本結(jié)構(gòu)

5.1.1 CPU的功能

CPU的功能和基本結(jié)構(gòu).png

CPU由運(yùn)算器和控制器構(gòu)成剥懒°迤控制器負(fù)責(zé)協(xié)調(diào)并控制計(jì)算機(jī)各部件執(zhí)行程序的指令序列,基本功能包括取指令播赁、分析指令颂郎、執(zhí)行指令吼渡;運(yùn)算器的功能是對(duì)數(shù)據(jù)進(jìn)行加工容为。CPU的具體功能有

  1. 指令控制。完成取指令寺酪、分析指令和執(zhí)行指令的操作坎背,即程序的順序控制。
  2. 操作控制寄雀。一條指令的功能往往是由若干操作信號(hào)的組合來實(shí)現(xiàn)的得滤。CPU管理并產(chǎn)生由內(nèi)存取出的每條指令的操作信號(hào),把各種操作信號(hào)送往相應(yīng)的部件盒犹,從而控制這些部件按指令的要求進(jìn)行動(dòng)作懂更。
  3. 時(shí)間控制。對(duì)各種操作加以時(shí)間上的控制急膀。時(shí)間控制要為每條指令按時(shí)間順序提供應(yīng)有的控制信號(hào)沮协。
  4. 數(shù)據(jù)加工。對(duì)數(shù)據(jù)進(jìn)行算術(shù)和邏輯運(yùn)算卓嫂。
  5. 中斷處理慷暂。對(duì)計(jì)算機(jī)運(yùn)行過程中出現(xiàn)的異常情況和特殊請(qǐng)求進(jìn)行處理。

5.1.2 CPU的基本結(jié)構(gòu)

5.1.2.1 運(yùn)算器

運(yùn)算器主要由以下這些組成

  1. 算術(shù)邏輯單元:主要功能是進(jìn)行算術(shù)/邏輯運(yùn)算晨雳。
  2. 通用寄存器組:如AX行瑞、BX、CX餐禁、DX血久、SP等,用于存放操作數(shù)(包括源操作數(shù)帮非、目的操作數(shù)及中間結(jié)果)和各種地址信息等氧吐。SP是堆棧指針,用于指示棧頂?shù)牡刂贰?/li>
  3. 暫存寄存器:用于暫存從主存讀來的數(shù)據(jù)喜鼓,這個(gè)數(shù)據(jù)不能存放在通用寄存器中副砍,否則會(huì)破壞其原有內(nèi)容。
  4. 累加寄存器:它是一個(gè)通用寄存器庄岖,用于暫時(shí)存放ALU運(yùn)算的結(jié)果信息豁翎,用于實(shí)現(xiàn)加法運(yùn)算。
  5. 程序狀態(tài)字寄存器:保留由算術(shù)邏輯運(yùn)算指令或測(cè)試指令的結(jié)果而建立的各種狀態(tài)信息隅忿,如溢出標(biāo)志(OP)心剥、符號(hào)標(biāo)志(SF)邦尊、零標(biāo)志(ZF)、進(jìn)位標(biāo)志(CF)等优烧。PSW中的這些位參與并決定微操作的形成蝉揍。
  6. 移位器:對(duì)運(yùn)算結(jié)果進(jìn)行移位運(yùn)算。
  7. 計(jì)數(shù)器:控制乘除運(yùn)算的操作步數(shù)畦娄。

5.1.2.2 控制器

控制器由以下這些部分組成

  1. 程序計(jì)數(shù)器:用于指出下一條指令在主存中的存放地址又沾。CPU就是根據(jù)PC的內(nèi)容去主存中取指令的。因程序中指令(通常)是順序執(zhí)行的熙卡,所以PC有自增功能杖刷。
  2. 指令寄存器:用于保存當(dāng)前正在執(zhí)行的那條指令。
  3. 指令譯碼器:僅對(duì)操作碼字段進(jìn)行譯碼驳癌,向控制器提供特定的操作信號(hào)滑燃。
  4. 微操作信號(hào)發(fā)生器:根據(jù)IR的內(nèi)容(指令)、PSW的內(nèi)容(狀態(tài)信息)及時(shí)序信號(hào)颓鲜,產(chǎn)生控制整個(gè)計(jì)算機(jī)系統(tǒng)所需的各種控制信號(hào)表窘,其結(jié)構(gòu)有組合邏輯型和存儲(chǔ)邏輯型兩種。
  5. 時(shí)序系統(tǒng):用于產(chǎn)生各種時(shí)序信號(hào)甜滨,它們都是由統(tǒng)一時(shí)鐘(CLOCK)分頻得到乐严。
  6. 存儲(chǔ)器地址寄存器:用于存放所要訪問的主存單元的地址。
  7. 存儲(chǔ)器數(shù)據(jù)寄存器:用于存放向主存寫入的信息或從主存中讀出的信息艳吠。

對(duì)用戶可見的寄存器有PSW,程序寄存器PC,ACC,各種通用寄存器等

對(duì)用戶不可見的寄存器有移位寄存器,暫存寄存器,OP,Ad,IR,存儲(chǔ)器地址寄存器MAR,存儲(chǔ)器數(shù)據(jù)寄存器MDR等

5.2 指令執(zhí)行過程

指令周期:CPU從主存中取出并執(zhí)行一條指令的時(shí)間稱為指令周期麦备。指令周期常常用若干機(jī)器周期來表示,機(jī)器周期又叫CPU周期昭娩。一個(gè)機(jī)器周期又包含若干時(shí)鐘周期(也稱為節(jié)拍凛篙、T周期或CPU時(shí)鐘周期,它是CPU操作的最基本單位)栏渺。

機(jī)器周期.png

一個(gè)完整的指令周期應(yīng)該包括取址呛梆、間址、執(zhí)行和中斷四個(gè)周期磕诊,為了區(qū)別不同的工作周期填物,可以設(shè)置四個(gè)標(biāo)志觸發(fā)器FE,IND,EX和INT來代表哪個(gè)周期是有效的,各個(gè)周期的數(shù)據(jù)流向如下

  • 取址周期
    1. 當(dāng)前指令地址送至存儲(chǔ)器地址寄存器霎终,記做:(PC) → MAR
    2. CU發(fā)出控制信號(hào)滞磺,經(jīng)控制總線傳到主存,這里是讀信號(hào)莱褒,記做:1 → R
    3. 將MAR所指主存中的內(nèi)容經(jīng)數(shù)據(jù)總線送入MDR击困,記做:M(MAR) → MDR
    4. 將MDR中的內(nèi)容(此時(shí)是指令)送入IR,記做:(MDR) → IR
    5. CU發(fā)出控制信號(hào)广凸,形成下一條指令地址,記做:(PC)+1 → PC
  • 間址周期
    1. 將指令的地址碼送入MAR,記做:Ad(IR) → MAR或Ad(MDR) → MAR
    2. CU發(fā)出控制信號(hào)雌澄,啟動(dòng)主存做讀操作,記做:1 → R
    3. 將MAR所指主存中的內(nèi)容經(jīng)數(shù)據(jù)總線送入MDR蹦浦,記做:M(MAR) → MDR
    4. 將有效地址送至指令的地址碼字段,記做:(MDR)→ Ad(IR)
  • 執(zhí)行周期:執(zhí)行周期的任務(wù)是根據(jù)IR中的指令字的操作碼和操作數(shù)通過ALU操作產(chǎn)生執(zhí)行結(jié)果撞蜂。不同指令的執(zhí)行周期操作不同盲镶,因此沒有統(tǒng)一的數(shù)據(jù)流向。
  • 中斷周期
    1. CU控制將SP減1谅摄,修改后的地址送入MAR徒河,記做:(SP)-1 → SP系馆,(SP) → MAR
    2. CU發(fā)出控制信號(hào)送漠,啟動(dòng)主存做寫操作,記做:1 → W
    3. 將斷點(diǎn)(PC內(nèi)容) 送入MDR由蘑,記做:(PC) → MDR
    4. CU控制將中斷服務(wù)程序的入口地址(由向量地址形成部件產(chǎn)生)送入PC闽寡,記做:向量地址→ PC

中斷:暫停當(dāng)前任務(wù)去完成其他任務(wù)。為了能夠恢復(fù)當(dāng)前任務(wù)尼酿,需要保存斷點(diǎn)爷狈。一般使用堆棧來保存斷點(diǎn),這里用SP表示棧頂?shù)刂飞亚妫僭O(shè)SP指向棧頂元素涎永,進(jìn)棧操作是先修改指針,后存入數(shù)據(jù)鹿响。

一個(gè)指令周期通常要包括幾個(gè)時(shí)間段(執(zhí)行步驟)羡微,每個(gè)步驟完成指令的一部分功能,幾個(gè)依次執(zhí)行的步驟完成這條指令的全部功能惶我。

  1. 單指令周期:對(duì)所有指令都選用相同的執(zhí)行時(shí)間來完成妈倔。指令之間串行執(zhí)行;指令周期取決于執(zhí)行時(shí)間最長(zhǎng)的指令的執(zhí)行時(shí)間绸贡。對(duì)于那些本來可以在更短時(shí)間內(nèi)完成的指令盯蝴,要使用這個(gè)較長(zhǎng)的周期來完成,會(huì)降低整個(gè)系統(tǒng)的運(yùn)行速度听怕。
  2. 多指令周期:對(duì)不同類型的指令選用不同的執(zhí)行步驟來完成捧挺。指令之間串行執(zhí)行;可選用不同個(gè)數(shù)的時(shí)鐘周期來完成不同指令的執(zhí)行過程尿瞭。需要更復(fù)雜的硬件設(shè)計(jì)闽烙。
  3. 流水線方案:在每一個(gè)時(shí)鐘周期啟動(dòng)一條指令,盡量讓多條指令同時(shí)運(yùn)行筷厘,但各自處在不同的執(zhí)行步驟中鸣峭。指令之間并行執(zhí)行宏所。

5.3 數(shù)據(jù)通路的功能和基本結(jié)構(gòu)

數(shù)據(jù)通路:數(shù)據(jù)在功能部件之間傳送的路徑。

  1. CPU內(nèi)部單總線模式:將所有寄存器的輸入端和輸出端都連接到一條公共通路上摊溶,這種結(jié)構(gòu)比較簡(jiǎn)單爬骤,但數(shù)據(jù)傳輸存在較多的沖突現(xiàn)象,性能較低莫换。連接各部件的總線只有一條時(shí)霞玄,稱為單總線結(jié)構(gòu);CPU中有兩條或更多的總線時(shí),構(gòu)成雙總線結(jié)構(gòu)或多總線結(jié)構(gòu)拉岁。

內(nèi)部總線是指同一部件坷剧,如CPU內(nèi)部連接各寄存器及運(yùn)算部件之間的總線;

系統(tǒng)總線是指同一臺(tái)計(jì)算機(jī)系統(tǒng)的各部件喊暖,如CPU惫企、內(nèi)存、通道和各類I/O接口間互相連接的總線陵叽。

CPU內(nèi)部單總線方式.png
  • 寄存器之間數(shù)據(jù)傳送

    • 比如把PC內(nèi)容送至MAR狞尔,實(shí)現(xiàn)傳送操作的流程及控制信號(hào)為:
    • (PC)→Bus PCout有效,PC內(nèi)容送總線
    • Bus→MAR MARin有效巩掺,總線內(nèi)容送MAR
  • 主存與CPU之間的數(shù)據(jù)傳送

    • 比如CPU從主存讀取指令偏序,實(shí)現(xiàn)傳送操作的流程及控制信號(hào)為:
    • (PC)→Bus→MAR PCout和MARin有效,現(xiàn)行指令地址→MAR
    • 1→R CU發(fā)讀命令(通過控制總線發(fā)出胖替,圖中未畫出)
    • MEM(MAR)→MDR MDRin有效
    • MDR→Bus→IR MDRout和IRin有效研儒,現(xiàn)行指令→IR
  • 執(zhí)行算術(shù)或邏輯運(yùn)算

    • 比如一條加法指令,微操作序列及控制信號(hào)為:
    • Ad(IR)→Bus→MAR MDRout和MARin有效
    • 1→R CU發(fā)讀命令
    • MEM(MAR)→數(shù)據(jù)線→MDR MDRin有效
    • MDR→Bus→Y MDRout和Yin有效独令,操作數(shù)→Y
  1. CPU內(nèi)部三總線方式

  2. 專用數(shù)據(jù)通路方式:根據(jù)指令執(zhí)行過程中的數(shù)據(jù)和地址的流動(dòng)方向安排連接線路端朵,避免使用共享的總線,性能較高记焊,但硬件量大逸月。

5.4 控制器的功能和工作原理

5.4.1 硬布線控制器的設(shè)計(jì)

根據(jù)指令操作碼、目前的機(jī)器周期遍膜、節(jié)拍信號(hào)碗硬、機(jī)器狀態(tài)條件,即可確定現(xiàn)在這個(gè)節(jié)拍下應(yīng)該發(fā)出哪些“微命令”

微操作控制信號(hào)由組合邏輯電路根據(jù)當(dāng)前的指令碼瓢颅、狀態(tài)和時(shí)序恩尾,即時(shí)產(chǎn)生

硬布線控制器.png

每個(gè)輸出的控制信號(hào)對(duì)應(yīng)一個(gè)微命令,也就是對(duì)應(yīng)一個(gè)微操作

如:要讓C1對(duì)應(yīng)微操作(PC)->MAR挽懦,則將其接到PCout翰意、MARin即可

設(shè)計(jì)步驟:

  1. 分析每個(gè)階段的微操作序列(取值、間址、執(zhí)行冀偶、中斷四個(gè)階段)
  • 取指周期(所有指令都一樣)

PC→MAR
1 →R
M ( MAR ) →MDR
MDR →IR
OP ( IR ) →ID
( PC ) + 1→PC

  • 間址周期(所有指令都一樣)

Ad(IR) →MAR
1→R
M ( MAR )→MDR
MDR→Ad(IR)

  • 執(zhí)行周期(各不相同)

CLA(ACC清零)
COM(ACC取反)
SHR(算術(shù)右移)
CSL(循環(huán)左移)
STP(停機(jī))
ADD X(加法指令)
STA X(存數(shù)指令)
LDA X(取數(shù)指令醒第,把X所指內(nèi)容取到ACC)
JMP X(無條件轉(zhuǎn)移)
BAN X(條件轉(zhuǎn)移,當(dāng)ACC為負(fù)時(shí)轉(zhuǎn)移)

安排微操作時(shí)序的原則:

  • 微操作的先后順序不得隨意更改
  • 被控對(duì)象不同的微操作盡量安排在一個(gè)節(jié)拍內(nèi)完成
  • 占用時(shí)間較短的微操作盡量安排在一個(gè)節(jié)拍內(nèi)完成并允許有先后順序
  1. 選擇CPU的控制方式(采用定長(zhǎng)機(jī)器周期還是不定長(zhǎng)機(jī)器周期进鸠?每個(gè)機(jī)器周期安排幾個(gè)節(jié)拍稠曼?)

  2. 安排微操作時(shí)序(如何用3個(gè)節(jié)拍完成整個(gè)機(jī)器周期內(nèi)的所有微操作?)

微操作信號(hào).png
  1. 電路設(shè)計(jì)(確定每個(gè)微操作命令的邏輯表達(dá)式客年,并用電路實(shí)現(xiàn))

硬布線控制器一般用于RISC(精簡(jiǎn)指令集系統(tǒng))

此擴(kuò)充指令較困難霞幅,執(zhí)行速度很快.

5.4.2 微程序控制器

5.4.2.1 微程序控制器的基本概念

微程序:一個(gè)微程序由微指令序列組成,每一種指令對(duì)應(yīng)一個(gè)微程序

微命令:在微程序控制的計(jì)算機(jī)中量瓜,將控制部件向執(zhí)行部件發(fā)出的各種控制命令稱為微命令

微指令:微指令是若干微命令的集合司恳,一條微指令通常包括

  • 操作控制字段,用于產(chǎn)生某一步操作所需的各個(gè)操作控制信號(hào)绍傲。
  • 順序控制字段扔傅,用于控制產(chǎn)生下一條要執(zhí)行的微指令地址

微命令與微操作一一對(duì)應(yīng)
微指令中可能包含多個(gè)微命令

5.4.2.2 微程序控制器的基本結(jié)構(gòu)

  • 控制存儲(chǔ)器CM:用于存放各指令對(duì)應(yīng)的微程序,控制存儲(chǔ)器可用只讀存儲(chǔ)器ROM構(gòu)成唧取。
  • 微指令寄存器CMDR:用于存放從CM中取出的微指令铅鲤,它的位數(shù)同微指令字長(zhǎng)相等。
  • 微地址形成部件:產(chǎn)生初始微地址和后繼微地址枫弟,以保證微指令的連續(xù)執(zhí)行。
  • 微地址寄存器CMAR:微地址寄存器鹏往,接收微地址形成部件送來的微地址淡诗,為在CM中讀取微指令作準(zhǔn)備。
  • 地址譯碼:將地址碼轉(zhuǎn)化為存儲(chǔ)單元控制信號(hào)伊履。
微程序控制器的基本結(jié)構(gòu).png

5.4.2.3 微程序控制器的工作原理

指令周期=取值周器→間址周期→執(zhí)行周期→中斷周期韩容。其中間址、中斷周期可有可無

處理取指周期唐瀑、間址周期群凶、中斷周期的微指令序列通常是公用的。執(zhí)行周期的微指令序列各不相同

取指周期的微指令序列固定從#0開始存放哄辣。執(zhí)行周期的微指令序列的存放根據(jù)指令操作碼確定

微程序控制器的工作原理.png

取指周期微程序通常是公用的请梢,故如果某指令系統(tǒng)中有n條機(jī)器指令,則CM中微程序的個(gè)數(shù)至少是n+1個(gè)

一些早期的CPU力穗、物聯(lián)網(wǎng)設(shè)備的CPU可以不提供間接尋址和中斷功能毅弧,因此這類CPU可以不包含間址周期、中斷周期的微程序段

物理上当窗,取指周期够坐、執(zhí)行周期看起來像是兩個(gè)微程序,但邏輯上應(yīng)該把它們看作一個(gè)整體。因此元咙,“一條指令對(duì)應(yīng)一個(gè)微程序”的說法是正確的

5.4.2.4 微指令的格式

  1. 水平型微指令:一條微指令能定義多個(gè)可并行的微命令梯影。

優(yōu)點(diǎn):微程序短,執(zhí)行速度快庶香;
缺點(diǎn):微指令長(zhǎng)光酣,編寫微程序較麻煩。

  1. 垂直型微指令:一條微指令只能定義一個(gè)微命令脉课,由微操作碼字段規(guī)定具體功能

優(yōu)點(diǎn):微指令短救军、簡(jiǎn)單、規(guī)整倘零,便于編寫微程序唱遭;
缺點(diǎn):微程序長(zhǎng),執(zhí)行速度慢呈驶,工作效率低拷泽。

  1. 混合型微指令:在垂直型的基礎(chǔ)上增加一些不太復(fù)雜的并行操作。

微指令較短袖瞻,仍便于編寫司致;微程序也不長(zhǎng),執(zhí)行速度加快聋迎。

微指令的格式.png

5.4.2.5 微指令的編碼方式

  1. 直接編碼(直接控制)方式

在微指令的操作控制字段中脂矫,每一位代表一個(gè)微操作命令,某位為“1”表示該控制信號(hào)有效

優(yōu)點(diǎn):簡(jiǎn)單霉晕、直觀庭再,執(zhí)行速度快,操作并行性好牺堰。

缺點(diǎn):微指令字長(zhǎng)過長(zhǎng)拄轻,n個(gè)微命令就要求微指令的操作字段有n位,造成控存容量極大伟葫。

  1. 字段直接編碼方式

將微指令的控制字段分成若干“段”恨搓,每段經(jīng)譯碼后發(fā)出控制信號(hào)

微命令字段分段的原則:

  • 互斥性微命令分在同一段內(nèi),相容性微命令分在不同段內(nèi)筏养。

  • 每個(gè)小段中包含的信息位不能太多斧抱,否則將增加譯碼線路的復(fù)雜性和譯碼時(shí)間。

  • 一般每個(gè)小段還要留出一個(gè)狀態(tài)撼玄,表示本字段不發(fā)出任何微命令夺姑。因此,當(dāng)某字段的長(zhǎng)度為3位時(shí)掌猛,最多只能表示7個(gè)互斥的微命令盏浙,通常用000表示不操作眉睹。

【2012年真題】某計(jì)算機(jī)的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接編碼法废膘,共有33個(gè)微命令竹海,構(gòu)成5個(gè)互斥類,分別包含7丐黄、3斋配、12、5和6個(gè)微命令灌闺,則操作控制字段至少有多少位艰争?

第1個(gè)互斥類有7個(gè)微命令,要留出1個(gè)狀態(tài)表示不操作桂对,所以需要表示8種不同的狀態(tài)甩卓,故需要3個(gè)二進(jìn)制位。
以此類推蕉斜,后面4個(gè)互斥類各需要表示4逾柿、13、6宅此、7種不同的狀態(tài)机错,分別對(duì)應(yīng)2、4父腕、3弱匪、3個(gè)二進(jìn)制位。

故操作控制字段的總位數(shù)為3+2+4+3+3 = 15 位

  1. 字段間接編碼方式

一個(gè)字段的某些微命令需由另一個(gè)字段中的某些微命令來解釋侣诵,由于不是靠字段直接譯碼發(fā)出的微命令痢法,故稱為字段間接編碼,又稱隱式編碼杜顺。

優(yōu)點(diǎn):可進(jìn)一步縮短微指令字長(zhǎng)。

缺點(diǎn):削弱了微指令的并行控制能力蘸炸,故通常作為字段直接編碼方式的一種輔助手段躬络。

5.4.2.6 微指令的地址形成方式

  1. 微指令的下地址字段指出

微指令格式中設(shè)置一個(gè)下地址字段,由微指令的下地址字段直接指出后繼微指令的地址搭儒,這種方式又稱為斷定方式穷当。

  1. 根據(jù)機(jī)器指令的操作碼形成

當(dāng)機(jī)器指令取至指令寄存器后,微指令的地址由操作碼經(jīng)微地址形成部件形成淹禾。

  1. 增量計(jì)數(shù)器法

( CMAR ) + 1 → CMAR

  1. 分支轉(zhuǎn)移

轉(zhuǎn)移方式:指明判別條件馁菜;轉(zhuǎn)移地址:指明轉(zhuǎn)移成功后的去向。

  1. 通過測(cè)試網(wǎng)絡(luò)
  2. 由硬件產(chǎn)生微程序入口地址

第一條微指令地址由專門硬件產(chǎn)生(用專門的硬件記錄取指周期微程序首地址)

中斷周期由硬件產(chǎn)生中斷周期微程序首地址(用專門的硬件記錄)

【2014年真題】某計(jì)算機(jī)采用微程序控制器铃岔,共有32條指令汪疮,公共的取指令微程序包含2條微指令,各指令對(duì)應(yīng)的微程序平均由4條微指令組成,采用斷定法(下地址字段法)確定下條微指令地址智嚷,則微指令中下地址字段的位數(shù)至少是多少位卖丸?

總共需要存儲(chǔ)多少條微指令?

32×4+2 = 130條

標(biāo)注出130個(gè)不同的位置至少需要多少個(gè)二進(jìn)制位盏道?

27= 128稍浆,28 = 256

下地址字段的位數(shù)至少是8位

5.4.2.7 微程序控制單元的設(shè)計(jì)步驟

設(shè)計(jì)步驟:

  1. 分析每個(gè)階段的微操作序列(參照硬布線)

  2. 寫出對(duì)應(yīng)機(jī)器指令的微操作命令及節(jié)拍安排

(1) 寫出每個(gè)周期所需要的微操作(參照硬布線)

(2)補(bǔ)充微程序控制器特有的微操作:

  • a. 取指周期:
    Ad ( CMDR ) → CMAR
    OP ( IR ) → 微地址形成部件→ CMAR

  • b. 執(zhí)行周期:

    Ad(CMDR)→ CMAR

取指周期的最后一條微指令完成后,要根據(jù)指令操作碼確定其執(zhí)行周期的微程序首地址

  1. 確定微指令格式

根據(jù)微操作個(gè)數(shù)決定采用何種編碼方式猜嘱,以確定微指令的操作控制字段的位數(shù)衅枫。根據(jù)CM中存儲(chǔ)的微指令總數(shù),確定微指令的順序控制字段的位數(shù)朗伶。最后按操作控制字段位數(shù)和順序控制字段位數(shù)就可確定微指令字長(zhǎng)弦撩。

  1. 編寫微指令碼點(diǎn)

根據(jù)操作控制字段每一位代表的微操作命令,編寫每一條微指令的碼點(diǎn)腕让。

硬布線與微程序的比較.png

5.5 指令流水線

5.5.1 指令流水線的基本概念

一條指令的執(zhí)行過程可以分為如下三個(gè)過程

  • 取指:根據(jù)PC內(nèi)容訪問主存儲(chǔ)器孤钦,取出一條指令送到IR中。
  • 分析:對(duì)指令操作碼進(jìn)行譯碼纯丸,按照給定的尋址方式和地址字段中的內(nèi)容形成操作數(shù)的有效地址EA偏形,并從有效地址EA中取出操作數(shù)。
  • 執(zhí)行:根據(jù)操作碼字段觉鼻,完成指令規(guī)定的功能俊扭,即把運(yùn)算結(jié)果寫到通用寄存器或主存中。

當(dāng)多條指令在處理器中執(zhí)行時(shí)坠陈,可以采用以下兩種方式

  1. 順序執(zhí)行方式

傳統(tǒng)馮·諾依曼機(jī)采用順序執(zhí)行方式萨惑,又稱串行執(zhí)行方式。前一條指令完后仇矾,才啟動(dòng)下一條指令

順序執(zhí)行方式.png

優(yōu)點(diǎn):控制簡(jiǎn)單庸蔼,硬件代價(jià)小。

缺點(diǎn):執(zhí)行指令的速度較慢贮匕,在任何時(shí)刻姐仅,處理機(jī)中只有一條指令在執(zhí)行,各功能部件的利用率很低刻盐。

總耗時(shí)T = n×3t = 3nt

  1. 流水線執(zhí)行方式

為了提高指令的執(zhí)行速度掏膏,可以把取k+1條指令提前到分析第k條指令的期間完成,而將分析第k+1條指令與執(zhí)行第k條指令同時(shí)進(jìn)行

流水線執(zhí)行方式.png

優(yōu)點(diǎn):程序的執(zhí)行時(shí)間縮短了1/3敦锌,各功能部件的利用率明顯提高馒疹。

缺點(diǎn):需要付出硬件上較大開銷的代價(jià),控制過程也比順序執(zhí)行復(fù)雜了乙墙。

5.5.2 流水線的表示方法

  1. 指令執(zhí)行過程圖颖变,如上小節(jié)提到的圖
  2. 時(shí)空?qǐng)D
時(shí)空?qǐng)D.png

指令執(zhí)行過程圖主要用于分析指令執(zhí)行過程以及影響流水線的因素

時(shí)空?qǐng)D主要用于分析流水線的性能

5.5.3 流水線的性能指標(biāo)

  1. 吞吐率

吞吐率是指在單位時(shí)間內(nèi)流水線所完成的任務(wù)數(shù)量生均,或是輸出結(jié)果的數(shù)量。

設(shè)任務(wù)數(shù)為n悼做;處理完成n個(gè)任務(wù)所用的時(shí)間為Tk疯特,則吞吐率(TP)計(jì)算公式為
TP=\frac{n}{T_k}
當(dāng)各段執(zhí)行時(shí)間均相等、任務(wù)連續(xù)的理想情況下肛走,設(shè)\triangle t為時(shí)鐘周期漓雅,流水線的實(shí)際吞吐率為
TP=\frac{n}{(k+n-1)\triangle t }
連續(xù)輸入的任務(wù)數(shù)趨向于∞時(shí),最大吞吐率TP_{max}=1/\triangle t

流水線的時(shí)空?qǐng)D.png
  1. 加速比

加速比定義為完成同樣一批任務(wù)朽色,不使用流水線所用的時(shí)間與使用流水線所用的時(shí)間之比邻吞。

設(shè)T0表示不使用流水線時(shí)的執(zhí)行時(shí)間,即順序執(zhí)行所用的時(shí)間葫男;Tk表示使用流水線時(shí)的執(zhí)行時(shí)間則計(jì)算流水線加速比(S)的基本公式為
S=\frac{T_0}{T_k}
當(dāng)各段執(zhí)行時(shí)間均相等抱冷、任務(wù)連續(xù)的理想情況下,T_k=(k+n-1)\triangle t梢褐,而不使用流水線旺遮,所需時(shí)間T_0=kn\triangle t,實(shí)際加速比為
S=\frac{kn\triangle t}{(k+n-1)\triangle t}=\frac{kn}{k+n-1}
連續(xù)輸入的任務(wù)數(shù)趨向于∞時(shí)盈咳,S_{max}=k

  1. 效率

流水線的設(shè)備利用率稱為流水線的效率(E)耿眉。在時(shí)空?qǐng)D上,流水線的效率定義為完成n個(gè)任務(wù)占用的時(shí)空區(qū)有效面積與n個(gè)任務(wù)所用的時(shí)間與k個(gè)流水段所圍成的時(shí)空區(qū)總面積之比鱼响。
E=\frac{n個(gè)任務(wù)占用的時(shí)空區(qū)有效面積}{n個(gè)任務(wù)所用的實(shí)際與k個(gè)流水段所圍成的時(shí)空區(qū)總面積}=\frac{T_0}{kT_k}
連續(xù)輸入的任務(wù)數(shù)趨向于∞時(shí)鸣剪,E_{max}=1

5.5.4 影響流水線的因素

  1. 結(jié)構(gòu)相關(guān)(資源沖突)

由于多條指令在同一時(shí)刻爭(zhēng)用同一資源而形成的沖突稱為結(jié)構(gòu)相關(guān)。

解決辦法:

  • 后一相關(guān)指令暫停一周期
  • 資源重復(fù)配置:數(shù)據(jù)存儲(chǔ)器+指令存儲(chǔ)器
  1. 數(shù)據(jù)相關(guān)(數(shù)據(jù)沖突)

數(shù)據(jù)相關(guān)指在一個(gè)程序中丈积,存在必須等前一條指令執(zhí)行完才能執(zhí)行后一條指令的情況筐骇,則這兩條指令即為數(shù)據(jù)相關(guān)

解決辦法:

  • 把遇到數(shù)據(jù)相關(guān)的指令及其后續(xù)指令都暫停一至幾個(gè)時(shí)鐘周期,直到數(shù)據(jù)相關(guān)問題消失后再繼續(xù)執(zhí)行江滨☆跷常可分為硬件阻塞(stall)和軟件插入“NOP”兩種方法。
  • 數(shù)據(jù)旁路技術(shù)唬滑。
  • 編譯優(yōu)化:通過編譯器調(diào)整指令順序來解決數(shù)據(jù)相關(guān)饺鹃。
  1. 控制相關(guān)(控制沖突)

當(dāng)流水線遇到轉(zhuǎn)移指令和其他改變PC值的指令而造成斷流時(shí),會(huì)引起控制相關(guān)间雀。

解決辦法:

  • 盡早判別轉(zhuǎn)移是否發(fā)生,盡早生成轉(zhuǎn)移目標(biāo)地址
  • 預(yù)取轉(zhuǎn)移成功和不成功兩個(gè)控制流方向上的目標(biāo)指令
  • 加快和提前形成條件碼
  • 提高轉(zhuǎn)移方向的猜準(zhǔn)率

5.5.5 流水線的分類

  1. 部件功能級(jí)镊屎、處理機(jī)級(jí)和處理機(jī)間級(jí)流水線

根據(jù)流水線使用的級(jí)別的不同惹挟,流水線可分為部件功能級(jí)流水線、處理機(jī)級(jí)流水線和處理機(jī)間流水線缝驳。

部件功能級(jí)流水就是將復(fù)雜的算術(shù)邏輯運(yùn)算組成流水線工作方式连锯。例如归苍,可將浮點(diǎn)加法操作分成求階差、對(duì)階运怖、尾數(shù)相加以及結(jié)果規(guī)格化等4個(gè)子過程拼弃。

處理機(jī)級(jí)流水是把一條指令解釋過程分成多個(gè)子過程,如前面提到的取指摇展、譯碼吻氧、執(zhí)行、訪存及寫回5個(gè)子過程咏连。

處理機(jī)間流水是一種宏流水盯孙,其中每一個(gè)處理機(jī)完成某一專門任務(wù),各個(gè)處理機(jī)所得到的結(jié)果需存放在與下一個(gè)處理機(jī)所共享的存儲(chǔ)器中祟滴。

  1. 單功能流水線和多功能流水線

按流水線可以完成的功能振惰,流水線可分為單功能流水線和多功能流水線。

單功能流水線指只能實(shí)現(xiàn)一種固定的專門功能的流水線垄懂;

多功能流水線指通過各段間的不同連接方式可以同時(shí)或不同時(shí)地實(shí)現(xiàn)多種功能的流水線骑晶。

  1. 動(dòng)態(tài)流水線和靜態(tài)流水線

按同一時(shí)間內(nèi)各段之間的連接方式,流水線可分為靜態(tài)流水線和動(dòng)態(tài)流水線草慧。

靜態(tài)流水線指在同一時(shí)間內(nèi)桶蛔,流水線的各段只能按同一種功能的連接方式工作。

動(dòng)態(tài)流水線指在同一時(shí)間內(nèi)冠蒋,當(dāng)某些段正在實(shí)現(xiàn)某種運(yùn)算時(shí)羽圃,另一些段卻正在進(jìn)行另一種運(yùn)算。這樣對(duì)提高流水線的效率很有好處抖剿,但會(huì)使流水線控制變得很復(fù)雜朽寞。

  1. 線性流水線和非線性流水線

按流水線的各個(gè)功能段之間是否有反饋信號(hào),流水線可分為線性流水線與非線性流水線斩郎。

線性流水線中脑融,從輸入到輸出,每個(gè)功能段只允許經(jīng)過一次缩宜,不存在反饋回路肘迎。

非線性流水線存在反饋回路,從輸入到輸出過程中锻煌,某些功能段將數(shù)次通過流水線妓布,這種流水線適合進(jìn)行線性遞歸的運(yùn)算。

5.5.6 流水線的多發(fā)技術(shù)

  1. 超標(biāo)量技術(shù)

每個(gè)時(shí)鐘周期內(nèi)可并發(fā)多條獨(dú)立指令宋梧,即以并行操作方式將兩條或多條指令編譯并執(zhí)行匣沼,為此需配置多個(gè)功能部件。

超標(biāo)量計(jì)算機(jī)不能調(diào)整指令的執(zhí)行顧序捂龄,因此通過編譯優(yōu)化技術(shù)释涛,把可并行執(zhí)行的指令搭配起來加叁,挖掘更多的指令并行性

超標(biāo)量技術(shù).png
  1. 超流水技術(shù)

在一個(gè)時(shí)鐘周期內(nèi)再分段,在一個(gè)時(shí)鐘周期內(nèi)一個(gè)功能部件使用多次唇撬。不能調(diào)整指令的執(zhí)行順序它匕,靠編譯程序解決優(yōu)化問題

超流水技術(shù).png
  1. 超長(zhǎng)指令字

由編譯程序挖掘出指令間潛在的并行性,將多條能并行操作的指令組合成一條具有多個(gè)操作碼字段的超長(zhǎng)指令字(可達(dá)幾百位)窖认,為此需要采用多個(gè)處理部件豫柬。

超長(zhǎng)指令字.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市耀态,隨后出現(xiàn)的幾起案子轮傍,更是在濱河造成了極大的恐慌,老刑警劉巖首装,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件创夜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡仙逻,警方通過查閱死者的電腦和手機(jī)驰吓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來系奉,“玉大人檬贰,你說我怎么就攤上這事∪绷粒” “怎么了翁涤?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)萌踱。 經(jīng)常有香客問我葵礼,道長(zhǎng),這世上最難降的妖魔是什么并鸵? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任鸳粉,我火速辦了婚禮,結(jié)果婚禮上园担,老公的妹妹穿的比我還像新娘届谈。我一直安慰自己,他們只是感情好弯汰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布艰山。 她就那樣靜靜地躺著,像睡著了一般咏闪。 火紅的嫁衣襯著肌膚如雪程剥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音织鲸,去河邊找鬼。 笑死溪胶,一個(gè)胖子當(dāng)著我的面吹牛搂擦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哗脖,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瀑踢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了才避?” 一聲冷哼從身側(cè)響起橱夭,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桑逝,沒想到半個(gè)月后棘劣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楞遏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年茬暇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寡喝。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡糙俗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出预鬓,到底是詐尸還是另有隱情巧骚,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布格二,位于F島的核電站劈彪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蟋定。R本人自食惡果不足惜粉臊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驶兜。 院中可真熱鬧扼仲,春花似錦、人聲如沸抄淑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肆资。三九已至矗愧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唉韭。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工夜涕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人属愤。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓女器,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親住诸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驾胆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容