計(jì)算機(jī)組成原理第6章_第1頁
計(jì)算機(jī)組成原理第6章_第2頁
計(jì)算機(jī)組成原理第6章_第3頁
計(jì)算機(jī)組成原理第6章_第4頁
計(jì)算機(jī)組成原理第6章_第5頁
已閱讀5頁,還剩311頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章中央處理器6.1處理器概述6.2MIPS模型機(jī)的基本構(gòu)成6.3建立模型機(jī)的數(shù)據(jù)通路6.4控制器的實(shí)現(xiàn)6.5多周期CPU6.6流水線CPU習(xí)題

6.1處理器概述

中央處理器(CPU)是計(jì)算機(jī)硬件的核心部分,主要由運(yùn)算器、控制器、寄存器、中斷控制器和內(nèi)部總線構(gòu)成。本章將從理論知識開始,詳細(xì)介紹CPU的工作原理和實(shí)現(xiàn)技術(shù),具體內(nèi)容包括CPU的基本功能、內(nèi)部結(jié)構(gòu)、指令的執(zhí)行過程、控制器的實(shí)現(xiàn)方法,并通過構(gòu)建一個(gè)能實(shí)現(xiàn)基本MIPS指令的處理器實(shí)例,說明了單周期CPU和流水線CPU的實(shí)現(xiàn)過程。

6.1.1CPU功能

CPU在計(jì)算機(jī)中的基本功能可以歸納為以下5個(gè)方面。

1.指令控制

指令控制是指CPU按順序執(zhí)行程序中的指令。程序的功能不同,所包含的指令序列就不同,程序執(zhí)行時(shí)必須嚴(yán)格按照程序規(guī)定的順序執(zhí)行,才能保證計(jì)算機(jī)工作的正確性。

2.操作控制

一條指令的執(zhí)行需要多個(gè)部件相互配合才能完成指令的功能,對每個(gè)部件的具體操作是由操作信號控制的,而操作信號是控制器根據(jù)這條指令的功能自動(dòng)產(chǎn)生的。

3.時(shí)序控制

每一條指令在執(zhí)行的過程中,必須在規(guī)定的時(shí)間給出各部件所需操作控制的信號,才能保證指令功能的正確執(zhí)行。因此,時(shí)序控制就是定時(shí)地給出各種操作信號,使計(jì)算機(jī)系統(tǒng)有條不紊地執(zhí)行程序。

4.數(shù)據(jù)加工

數(shù)據(jù)加工是指對數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算、邏輯運(yùn)算或其他處理。

5.中斷控制

CPU除了執(zhí)行程序外,還需要具備對突發(fā)事件的處理能力。例如,運(yùn)算器出現(xiàn)了結(jié)果溢出、某個(gè)部件出現(xiàn)了異常情況、設(shè)備需要實(shí)時(shí)的數(shù)據(jù)服務(wù)等,這就需要CPU中斷正在處

理的程序,并對這些突發(fā)事件進(jìn)行響應(yīng),以保證計(jì)算機(jī)的正常運(yùn)轉(zhuǎn),這個(gè)能力稱為中斷處理能力。

總體來說,一條指令的執(zhí)行過程就是在控制器的控制下,先從內(nèi)存中取出指令,然后對指令進(jìn)行譯碼,在時(shí)序發(fā)生器和控制器的控制下,在正確的時(shí)間發(fā)出指定部件的控制信號,保證各部件能夠執(zhí)行正確的動(dòng)作,從而保證該指令功能的實(shí)現(xiàn)。

6.1.2CPU的內(nèi)部結(jié)構(gòu)

CPU的體系結(jié)構(gòu)有很多種,傳統(tǒng)的CPU包括控制器和運(yùn)算器兩部分,實(shí)際的CPU內(nèi)部還包含一定數(shù)量的各種功能寄存器,以及為了實(shí)現(xiàn)中斷控制功能的中斷系統(tǒng)。

圖6-1是采用系統(tǒng)總線(單總線系統(tǒng))的計(jì)算機(jī)結(jié)構(gòu)。圖中,CPU由寄存器、ALU、控制器和中斷系統(tǒng)組成。圖6-1單總線系統(tǒng)的計(jì)算機(jī)結(jié)構(gòu)

1.運(yùn)算器

運(yùn)算器是計(jì)算機(jī)中實(shí)現(xiàn)數(shù)據(jù)加工的部件,主要完成數(shù)

據(jù)的算術(shù)和邏輯運(yùn)算,運(yùn)算器主要包括算術(shù)邏輯單元(ALU)、數(shù)據(jù)寄存器、程序狀態(tài)字PSW等。圖6-2所示是一種常見的運(yùn)算器內(nèi)部結(jié)構(gòu)。圖6-2常見的運(yùn)算器內(nèi)部結(jié)構(gòu)

PSW寄存器的每一位都是一個(gè)狀態(tài)標(biāo)志位,用來記錄

程序的運(yùn)行狀態(tài)和工作方式。例如,SF表示ALU結(jié)果的符

號位,ZF表示結(jié)果是否為零,CF表示是否產(chǎn)生了運(yùn)算進(jìn)位,PF為奇偶標(biāo)志位,OF表示溢出位等,除此之外PSW中還有一些其他標(biāo)志位。8086CPU的PSW如圖6-3所示。圖6-38086CPU的PSW

2.寄存器

寄存器是CPU內(nèi)部暫存各種信息和數(shù)據(jù)的部件,按照用戶是否可以操作分為可見寄存器和隱含寄存器。可見寄存器,用戶可以通過指令對其進(jìn)行存取操作,隱含寄存器對用戶是不可用的,是專供控制器使用的。

1)可見寄存器

可見寄存器通常是一組寄存器,這些寄存器可以通過程序進(jìn)行訪問。由于這些寄存器在編程的過程中可以暫存操作數(shù)和運(yùn)算結(jié)果,也可以作為基地址寄存器、變址寄存器、計(jì)

數(shù)器等,通用性較強(qiáng),因此又稱為通用寄存器。

2)隱含寄存器

隱含寄存器是一組特殊的寄存器,這些寄存器中的指令在執(zhí)行過程中由硬件自動(dòng)控制。大多數(shù)機(jī)器都包括程序計(jì)數(shù)器PC、指令寄存器IR、程序狀態(tài)字PSW、存儲(chǔ)器地址寄

存器MAR、存儲(chǔ)器數(shù)據(jù)寄存器MDR等。

(1)程序計(jì)數(shù)器PC:它也稱為指令指針,用來指示將要執(zhí)行的下一條指令在內(nèi)存中的地址。

(2)指令寄存器IR:用來存放當(dāng)前正在執(zhí)行的指令代碼。

(3)程序狀態(tài)字PSW:用來記錄現(xiàn)行程序的運(yùn)行狀態(tài)和當(dāng)前的工作方式。

(4)存儲(chǔ)器地址寄存器MAR:當(dāng)CPU訪問存儲(chǔ)器時(shí),首先要提供訪問存儲(chǔ)單元的地址,這個(gè)地址存放在MAR中,MAR是CPU與系統(tǒng)地址總線相聯(lián)的寄存器。

(5)存儲(chǔ)器數(shù)據(jù)寄存器MDR:用來存放CPU與主存交換的數(shù)據(jù),這個(gè)寄存器是CPU與系統(tǒng)數(shù)據(jù)總線相連的寄存器。

3.控制器

控制器是CPU的重要組成部分,它是整個(gè)計(jì)算機(jī)的控制核心??刂破鞯墓δ芫褪悄軌虬凑粘绦蝾A(yù)定的順序執(zhí)行每一條指令。每一條指令都是在控制器的控制下按照取指令、分析指令和執(zhí)行指令的步驟依次完成的,這就需要控制器必須在正確的時(shí)間準(zhǔn)確地產(chǎn)生各部件的控制信號,使整個(gè)計(jì)算機(jī)能夠有條不紊的完成所有指令的功能??刂破鞯墓δ芫褪?/p>

完成按照每一條指令要求,把數(shù)據(jù)從源端部件準(zhǔn)確地傳輸?shù)侥康亩瞬考?/p>

控制器應(yīng)當(dāng)具有PC、IR、指令譯碼器、節(jié)拍發(fā)生器、微操作信號發(fā)生器等模塊,如圖6-4所示。

圖6-4中節(jié)拍發(fā)生器產(chǎn)生的T0~Tn

信號是計(jì)算機(jī)運(yùn)行時(shí)所需要的節(jié)拍信號,用于標(biāo)識指令執(zhí)行過程中的不同時(shí)間段;指令譯碼器的輸出信號I0

~Im

表示不同的指令;B0~Bk表示條件狀態(tài)或控制標(biāo)志信號;操作信號發(fā)生器是控制器的核心部件,輸出信號C0

~Cl

是微操作控制信號,作為各部件的輸入控制信號被送往計(jì)算機(jī)中的各個(gè)部件,控制著各個(gè)部件的動(dòng)作或功能。圖6-4控制器的內(nèi)部結(jié)構(gòu)

從上面的分析可以知道,控制器的輸出信號Ci

與指令、節(jié)拍和狀態(tài)條件信號密切相關(guān)。

控制器的設(shè)計(jì)方法有兩種,即組合邏輯控制器和微程序控制器:組合邏輯控制器微操作控制信號由觸發(fā)器和邏輯門電路組成;微程序控制器將執(zhí)行中的微命令存放在控制存儲(chǔ)

器CM中,在指令執(zhí)行時(shí)從CM中取出各種微命令。

4.中斷系統(tǒng)

中斷系統(tǒng)是CPU執(zhí)行中斷功能必備的硬件,主要包括中斷使能控制、中斷優(yōu)先控制中斷的執(zhí)行等。

6.1.3CPU的指令周期

程序是指完成特定功能的機(jī)器指令的有序集合,因此程序功能是通過執(zhí)行包含在其中的每一條指令實(shí)現(xiàn)的,處理器一次取出一條指令并完成該指令規(guī)定的操作。

指令的執(zhí)行按照如下順序進(jìn)行:

取指令→分析指令→執(zhí)行指令。

指令周期是指一條指令從取出到執(zhí)行完畢所需要的全部時(shí)間。不同的指令由于功能不同,所涉及的部件不同,執(zhí)行的時(shí)間也會(huì)有很大差異。例如,在MIPS指令中,加法指令A(yù)DD和乘法指令MULT同樣都是R型指令,但是由于加法運(yùn)算的速度比乘法快,乘法指令執(zhí)行時(shí)間要比較長;再如訪存指令的速度一般要比非訪存指令的速度慢一些。

一個(gè)完整的指令周期與CPU周期的關(guān)系如圖6-5所示。其中,間址周期是在間接尋址方式時(shí)才有的,而中斷周期與中斷請求信號有關(guān),因此間址周期和中斷周期不是每個(gè)指令周期都必須包含的。圖6-6所示的是指令周期對CPU周期的包含關(guān)系。圖6-5指令周期流程圖6-6指令周期與CPU周期的包含關(guān)系

6.1.4指令執(zhí)行流程

指令的執(zhí)行是從取指周期開始的。取指周期主要完成從內(nèi)存取出要執(zhí)行的指令,并使指針指向下一條指令,即PC=PC+“1”,這里的“1”表示當(dāng)前這條指令的實(shí)際字長。取指完成后,對指令進(jìn)行譯碼,再轉(zhuǎn)入具體的指令執(zhí)行過程。指令在執(zhí)行過程中如果采用間接尋址方式,還需要增加間址周期,如圖6-5所示。

圖6-7所示是一個(gè)采用總線結(jié)構(gòu)將運(yùn)算器、寄存器連接起來的控制器內(nèi)部數(shù)據(jù)通路。其各部件與內(nèi)部總線IBUS和系統(tǒng)總線ABUS、DBUS的連接方式如圖中所示,圖中的“o”為控制門,在相應(yīng)控制信號(信號名稱標(biāo)在“o”上)的控制下打開,建立各部件之間的連接。GR是通用寄存器組,X和Z是兩個(gè)暫存寄存器。

這里以圖6-7給出的數(shù)據(jù)通路為例,通過三條指令的執(zhí)行說明指令執(zhí)行過程中控制信號產(chǎn)生的條件。假設(shè)每個(gè)機(jī)器周期包含4個(gè)過程時(shí)鐘周期。圖6-7采用總線結(jié)構(gòu)的控制器內(nèi)部數(shù)據(jù)通路

1.指令A(yù)DDR0,(R1)

指令A(yù)DDR0,(R1)是一條RS型加法運(yùn)算指令。該指令涉及的數(shù)據(jù)有寄存器,也有存儲(chǔ)器。該指令的功能是:R

0←(R0)+M((R1)),即把R0的內(nèi)容和存儲(chǔ)器中以R1

內(nèi)容為地址的存儲(chǔ)單元中的內(nèi)容相加,結(jié)果送給R0。這條指令的執(zhí)行過程及其包含的機(jī)器周期如下:

2.指令SUB(R0),A(R1)

指令SUB(R0

),A(R1)是一條SS型的減法運(yùn)算指令。指令的功能是:M((R0))←M((R0))-M((R1)+A),其中:A是指令中的形式地址。該指令中的操作數(shù)都在存儲(chǔ)器中,其中,兩個(gè)源操作數(shù)一個(gè)是寄存器間接尋址、另一個(gè)是變址尋址,目的操作數(shù)是寄存器間接尋址。這條指令的執(zhí)行過程分析如下:

3.指令JMPA

指令JMPA是一條無條件轉(zhuǎn)移指令。該指令的功能是:PC←A,其中,A是指令中的形式地址。這條指令的執(zhí)行過程分析如下:

6.2MIPS模型機(jī)的基本構(gòu)成

這里的模型機(jī)可以執(zhí)行MIPS32指令集中的如下八條指令:

(1)基本算術(shù)邏輯運(yùn)算指令A(yù)DDU、SUBU、AND、ADDIU。

(2)基本程序控制轉(zhuǎn)移指令BNE、J。

(3)基本數(shù)據(jù)存取指令SW、LW。

6.2.1模型機(jī)的基本結(jié)構(gòu)

模型機(jī)的內(nèi)部框圖如圖6-8所示。模型機(jī)中的存儲(chǔ)器將指令和數(shù)據(jù)分開存放,它是由深色背景的CPU以及指令存儲(chǔ)器IM和數(shù)據(jù)存儲(chǔ)器DM構(gòu)成的。按照各部件的功能將模型機(jī)分成以下幾個(gè)主要模塊(部件):

(1)指令存取部件:由程序寄存器PC、指令存儲(chǔ)器IM和PC更新模塊構(gòu)成。

(2)指令譯碼器ID:對當(dāng)前執(zhí)行的指令進(jìn)行譯碼。

(3)寄存器組RF:由32個(gè)32位寄存器組成。

(4)運(yùn)算器ALU:可以實(shí)現(xiàn)算術(shù)和邏輯運(yùn)算。

(5)存儲(chǔ)器:可分為數(shù)據(jù)存儲(chǔ)器DM和指令存儲(chǔ)器IM。

(6)其他部件。圖6-8模型機(jī)的內(nèi)部框圖

6.2.2模型機(jī)主要功能部件

1.指令存取部件

指令存取部件的任務(wù)是從IM中取出當(dāng)前的指令,并自動(dòng)完成對PC的更新。為了方便后面指令執(zhí)行過程的分析和控制器的設(shè)計(jì)說明,我們把這個(gè)部件分為三個(gè)部分:程序計(jì)數(shù)器PC、PC更新模塊NPC和IM。IM的實(shí)現(xiàn)在存儲(chǔ)器部件中討論,這里只討論程序計(jì)數(shù)器PC和PC更新模塊的實(shí)現(xiàn)。

1)程序計(jì)數(shù)器PC

PC是一個(gè)受時(shí)鐘信號控制且具有復(fù)位功能的32位地址寄存器,用于指示指令地址。由于MIPS32的指令長度都是32位的,因此每次從指令存儲(chǔ)器IM中取出的指令長度都是32位的,而存儲(chǔ)器可按字節(jié)(8b)、半字(16b)或字(32b)進(jìn)行訪問,因此PC的值必須是一個(gè)規(guī)則的字地址,即地址低2位必須為00B。因此,PC模塊采用30位數(shù)據(jù)寬度。程序計(jì)

數(shù)器PC模塊的接口定義如表6-1所示,其功能說明如表6-2所示。

例6-1下面給出PC模塊的代碼。

2)PC更新模塊NPC

NPC模塊為PC提供輸入地址。根據(jù)當(dāng)前執(zhí)行的指令計(jì)算下一次PC的值,當(dāng)執(zhí)行非跳轉(zhuǎn)類指令時(shí),自動(dòng)完成PC←(PC)+1,當(dāng)執(zhí)行跳轉(zhuǎn)類指令時(shí),根據(jù)跳轉(zhuǎn)指令的要求計(jì)算

新的PC值。NPC模塊的接口定義如表6-3所示,其功能說明如表6-4所示。

例6-2NPC模塊的代碼。

define.v文件中定義了常用的一些常量、MIPS指令操作碼字段的取值,以及各種部件輸入控制信號的功能取值等,該文件的完整內(nèi)容如例6-3所示。

6-3define.v文件的完整內(nèi)容。

2.指令譯碼器ID

指令譯碼器ID的功能是對從IM取出的機(jī)器碼指令進(jìn)行譯碼輸出,作為寄存器、運(yùn)算器和控制器的控制輸入信號。ID模塊的接口定義如表6-5所示,其功能說明如表6-6所示。

例6-4ID的Verilog描述。

3.寄存器組RF

寄存器組是由32個(gè)32位的寄存器組成的,也就是表6-1中描述的32個(gè)寄存器,其中,$0的值始終為0。寄存器是一個(gè)受時(shí)鐘信號控制的部件,寫入數(shù)據(jù)是在clk的上升沿,讀出數(shù)據(jù)不受clk控制。寄存器組RF模塊的接口定義如表6-7所示,其功能說明如表6-8所示。

例6-5RF的Verilog描述。

5.運(yùn)算器ALU

運(yùn)算器是對輸入數(shù)據(jù)執(zhí)行算術(shù)或邏輯運(yùn)算的部件,除了要有兩個(gè)輸入數(shù)據(jù)和一個(gè)運(yùn)算結(jié)果外,還要確定運(yùn)算器執(zhí)行何種具體的運(yùn)算,這就要分析模型機(jī)指令集中每一條指令對

運(yùn)算功能的要求。模型機(jī)算術(shù)邏輯指令中的ADDU、SUBU、AND要求運(yùn)算器完成加、減、與運(yùn)算;指令BNE對減法運(yùn)算結(jié)果進(jìn)行“為零”判斷,因此運(yùn)算器還需要設(shè)置結(jié)果為零的狀態(tài)標(biāo)志位“ZF”;訪存指令SW和LW需要進(jìn)行加法運(yùn)算,計(jì)算存儲(chǔ)單元的地址;J指令對運(yùn)算器沒有要求。因此模型機(jī)的運(yùn)算器需要實(shí)現(xiàn)加、減和與運(yùn)算的基本功能,并且有一個(gè)標(biāo)志位ZF。運(yùn)算器ALU模塊的接口定義如表6-9所示,其功能說明如表6-10所示。

例6-6ALU的Verilog描述。

6.存儲(chǔ)器

模型機(jī)是將程序和數(shù)據(jù)分開存放的,指令存儲(chǔ)器IM用于存放程序,是只讀存儲(chǔ)器,其實(shí)際容量是128×32位;數(shù)據(jù)存儲(chǔ)器DM用于存儲(chǔ)程序運(yùn)行過程中的數(shù)據(jù),是可讀寫的,其實(shí)際容量是128×32位的。需要說明的是,為了簡化設(shè)計(jì),模型機(jī)中這兩個(gè)存儲(chǔ)器都是以32位編址的。

數(shù)據(jù)存儲(chǔ)器DM模塊的接口定義和功能說明分別如表6-11和表6-12所示,其Verilog模塊代碼如例6-7所示。

指令存儲(chǔ)器IM模塊的接口定義和功能說明分別如表6-13和表6-14所示,其Verilog模塊代碼如例6-8所示。

7.其他部件

模型機(jī)中還有其他部件,如符號擴(kuò)展部件、多路選擇器和控制器等。符號擴(kuò)展部件的功能是對指令中的16位立即數(shù)根據(jù)擴(kuò)展控制信號進(jìn)行有符號數(shù)或無符號數(shù)擴(kuò)展,得到32

位的數(shù)據(jù)。多路選擇器這里不再贅述。

6.3建立模型機(jī)的數(shù)據(jù)通路

按照指令執(zhí)行過程中數(shù)據(jù)從左到右的流向,我們將圖6-8改變成圖6-9的形式。圖6-9模型機(jī)基本數(shù)據(jù)通路

圖中執(zhí)行一條指令采用如下典型的5個(gè)處理過程:

(1)IF:取指令。

(2)ID:指令譯碼。

(3)EXE:取數(shù)據(jù)并執(zhí)行運(yùn)算。

(4)MEM:訪問存儲(chǔ)器。

(5)WB:回寫,即將數(shù)據(jù)寫入寄存器中。

模型機(jī)的指令按照指令功能可以分為以下3類:

(1)基本算術(shù)邏輯運(yùn)算指令A(yù)DDU、SUBU、AND、ADDIU。

(2)基本程序控制轉(zhuǎn)移指令BNE、J。

(3)基本數(shù)據(jù)存取指令SW、LW。

1.ADDU

ADDU是R型指令,執(zhí)行兩個(gè)無符號數(shù)的加法運(yùn)算。無符號加法運(yùn)算指令不考慮運(yùn)算過程中出現(xiàn)的溢出異常情況。

(1)ADDU指令的格式:

(2)指令功能描述:

PC←PC+4

R[$rd]←R[$rs]+R[$rt]

例如,匯編指令A(yù)DDU$1,$2,$3,完成$1=$2+$3的功能,機(jī)器碼各字段的對應(yīng)關(guān)系是:$1對應(yīng)rd字段的編碼00001B,$2對應(yīng)rs字段的編碼00010B,$3對應(yīng)rt字段的編碼00011B,因此,該指令的機(jī)器碼為:

(3)指令執(zhí)行過程分析。若匯編指令A(yù)DDU$1,$2,$3的機(jī)器碼存在IM中地址為0的單元中,即在IM模塊中有如下代碼:

如果目前PC=0x00,那么PC就會(huì)取出這條指令并按照下面的步驟執(zhí)行指令(各功能模塊的實(shí)現(xiàn)代碼見6.2.2):

①取指令:PC=0x00,取出IM中地址為00單元的指令,即取出的機(jī)器碼是00430821。

②分析指令:對機(jī)器碼00430821經(jīng)ID譯碼后,輸出rs=00010B,rt=00011B,rd=00001B,Opcode=00H;Funct=0x21H;分別從RF的數(shù)據(jù)1和數(shù)據(jù)2讀出rs($2)和

rt($3)寄存器的值。

③執(zhí)行指令:將寄存器中讀出的數(shù)據(jù)送至ALU的A、B數(shù)據(jù)輸入端,且使ALUOp=00,使運(yùn)算器執(zhí)行加法運(yùn)算;控制器控制NPCOp=00,執(zhí)行PC=PC+4完成PC更新。

④回寫:控制器控制RFWr=1,將ALU的求和結(jié)果寫入rd寄存器。

ADDU指令周期的信息流程如圖6-10所示。圖6-10ADDU指令周期的信息流程

(4)模型機(jī)的數(shù)據(jù)通路圖。ADDU指令是模型機(jī)可以執(zhí)行的第一條指令,這條指令可以用如圖6-11所示的數(shù)據(jù)通路實(shí)現(xiàn)。圖6-11指令A(yù)DDU一條指令的數(shù)據(jù)通路

(5)控制器控制信號。執(zhí)行ADDU指令時(shí)控制器的輸出控制信號ALUOp、RFWr和NPCOp是由控制器根據(jù)指令中的Opcode和Funct字段產(chǎn)生的。

執(zhí)行ADDU指令控制器的輸入和輸出信號如表6-15所示。

帶有控制器的完整的數(shù)據(jù)通路如圖6-12所示。圖6-12執(zhí)行ADDU指令的完整的數(shù)據(jù)通路

(6)指令執(zhí)行時(shí)序。在ADDU指令執(zhí)行過程中,IF、ID、EXE和WB子任務(wù)段中各部件隨時(shí)間的變化過程如圖6-13所示。圖6-13ADDU指令的執(zhí)行時(shí)序

2.SUBU指令

SUBU指令也是R型指令,它是執(zhí)行兩個(gè)無符號數(shù)的減法運(yùn)算指令。

(1)SUBU指令的格式:

(2)指令功能描述:

PC←PC+4

R[$rd]←R[$rs]-R[$rt]

(3)指令執(zhí)行過程分析。SUBU指令周期的信

息流程如圖6-14所示。圖6-14SUBU指令周期的信息流程

(4)模型機(jī)的數(shù)據(jù)通路圖。SUBU指令是模型機(jī)可以執(zhí)行的第二條指令。它的執(zhí)行過程與ADDU指令的執(zhí)行過程基本相同,只有在EXE階段控制ALU執(zhí)行減法運(yùn)算這一點(diǎn)差別。因此,執(zhí)行ADDU和SUBU兩條指令的數(shù)據(jù)通路不需要改動(dòng),還是如圖6-12所示。

(5)控制器控制信號。執(zhí)行ADDU和SUBU兩條指令控制器的輸入和輸出信號如表6-16所示。

(6)指令執(zhí)行時(shí)序。與ADDU指令相似,只是在EXE階段時(shí),運(yùn)算器執(zhí)行減法操作。

3.AND指令

AND指令同樣是R型指令,實(shí)現(xiàn)對兩個(gè)數(shù)據(jù)邏輯按位與運(yùn)算。

(1)AND指令的格式:

(2)指令功能描述:

PC←PC+4

R[$rd]←R[$rs]&R[$rt]

(3)指令執(zhí)行過程分析。AND指令周期的信息流程如圖6-15所示。

AND指令與前兩條指令的執(zhí)行過程基本相同,只是在EXE階段控制運(yùn)算器執(zhí)行邏輯與運(yùn)算,即使ALU控制信號ALUOp=10圖6-15AND指令周期的信息流程

(4)模型機(jī)的數(shù)據(jù)通路圖。AND指令是模型機(jī)可以執(zhí)行的第三條指令,數(shù)據(jù)通路仍然不需要改動(dòng),如圖6-12所示。

(5)控制器控制信號。執(zhí)行ADDU、SUBU和AND三條指令的控制器的輸入和輸出信號如表6-17所示。

(6)指令執(zhí)行時(shí)序。與ADDU指令相似,只是在EXE階段時(shí),運(yùn)算器執(zhí)行邏輯與運(yùn)算。

4.ADDIU指令

ADDIU指令是I型指令。它是實(shí)現(xiàn)一個(gè)寄存器數(shù)據(jù)和一個(gè)32位立即數(shù)相加的算術(shù)指令,其中,32位的立即數(shù)是將指令字中的16位立即數(shù)字段Imm經(jīng)過符號位擴(kuò)展后得到的。

(1)ADDIU指令的格式:

(2)指令功能描述:

PC←PC+4

R[$rt]←R[$rs]+sign_ext(Imm)

(3)指令執(zhí)行過程分析。ADDIU指令周期的信息流程如圖6-16所示。

這是模型機(jī)可以執(zhí)行的第四條指令,與前3條指令相比,在EXE和WB兩個(gè)過程存在如下差異:

①EXE過程中ALU的數(shù)據(jù)B是指令中立即數(shù)經(jīng)過有符號擴(kuò)展后得到的,即B=ign_Ext(Imm)。

②WB過程中寫入RF的寄存器編號是rt字段,而ADDU和SUBU指示的寫入寄存器編號是rd字段。圖6-16ADDIU指令周期的信息流程

(4)模型機(jī)的數(shù)據(jù)通路圖。在圖6-12的基礎(chǔ)上,需要做如下幾點(diǎn)改動(dòng),才能使模型機(jī)完成4條指令。

①運(yùn)算器的B端前加入一個(gè)二選一的數(shù)據(jù)選擇器,其數(shù)據(jù)選擇控制信號用ALUB_Src表示。

②RF的地址3端前加入一個(gè)二選一的數(shù)據(jù)選擇器,其數(shù)據(jù)選擇控制信號用RegA3_Src表示。

③加入一個(gè)符號擴(kuò)展模塊,實(shí)現(xiàn)對ID輸出的IMM16數(shù)據(jù)進(jìn)行有符號位擴(kuò)展或無符號位擴(kuò)展,其擴(kuò)展方式控制端用SignExt表示。

改動(dòng)后的數(shù)據(jù)通路如圖6-17所示,新增加的三個(gè)控制信號的名稱在圖中用圓角框表示。圖6-17執(zhí)行四條指令的數(shù)據(jù)通路

(5)控制器控制信號。在模型機(jī)中增加部件和控制信號后,可以執(zhí)行ADDU、SUBU、AND和ADDIU這4條指令的控制器輸入和輸出信號,如表6-18所示。

(6)指令執(zhí)行時(shí)序。ADDIU的指令執(zhí)行時(shí)序圖如圖6-18所示。圖6-18ADDIU指令時(shí)序圖

5.BNE指令

BNE指令是I型指令。它是條件判斷轉(zhuǎn)移指令。這條指令判斷兩個(gè)寄存器的內(nèi)容是否相等,決定程序是否轉(zhuǎn)移。

(1)BNE指令的格式:

(3)指令執(zhí)行過程分析。從指令的功能描述中可以看出,BNE指令在執(zhí)行階段對PC的更新操作取決于指令中兩個(gè)寄存器R[rs]和R[rt]是否相等。判斷R[rs]和R[rt]是否相等,需要先使ALU執(zhí)行R[rs]-R[rt]運(yùn)算,若R[rs]=R[rt],則ALU的結(jié)果一定為“0”,此時(shí)可將ZF設(shè)置1,若結(jié)果不為“0”,則將ZF置0。BNE指令在EXE階段首先完成R[rs]-R[rt]的運(yùn)算,但是并不保存運(yùn)算結(jié)果,只是根據(jù)運(yùn)算結(jié)果對標(biāo)志位ZF進(jìn)行設(shè)置,若R[rs]-R[rt]=0,則將ZF置1,并且使PC=PC+4;否則使PC=PC+4+Sign_Ext(4*Offset)。由于BNE指令周期的信息流程如圖6-19所示。BNE指令并沒有將運(yùn)算結(jié)果寫回到寄存器中,因此指令在執(zhí)行時(shí)只有IF、ID和EXE這3個(gè)步驟。ALU部件對ZF的設(shè)置見例6-6。圖6-19BNE指令周期的信息流程圖

(4)模型機(jī)的數(shù)據(jù)通路圖。為了使控制器能夠根據(jù)ZF狀態(tài)實(shí)現(xiàn)對PC更新部件的控制,對圖6-17做了如下兩點(diǎn)改動(dòng):

①將ALU的輸出標(biāo)志位ZF作為控制器的輸入信號,命名為Zero。

②將符號位擴(kuò)展后的32位立即數(shù)送到PC更新部件的數(shù)據(jù)輸入端。

改動(dòng)后的數(shù)據(jù)通路如圖6-20所示。圖6-20執(zhí)行5條指令的數(shù)據(jù)通路

(5)控制器控制信號。執(zhí)行ADDU、SUBU、AND、ADDIU和BNE這5條指令控制器的輸入和輸出信號,如表6-19所示。

(6)指令執(zhí)行時(shí)序。圖6-21所示的是BNE指令執(zhí)行過程的時(shí)序圖。圖中給出的是當(dāng)寄存器不相等,即ZERO=0時(shí),PC發(fā)生跳轉(zhuǎn)的情況。圖6-21BNE指令執(zhí)行時(shí)序圖

6.J指令

J指令是無條件轉(zhuǎn)移指令。它是J型指令,可實(shí)現(xiàn)程序的長距離跳轉(zhuǎn)。

(1)J指令的格式:

(2)指令功能描述:

PC[28:2]←Targetaddr

(3)指令執(zhí)行過程分析。J指令執(zhí)行時(shí)強(qiáng)制將PC字地址的低26位用指令中的26位立即數(shù)進(jìn)行替換。J指令周期的信息流程如圖6-22所示。指令功能比較簡單,只有IF、和EXE這3個(gè)步驟,EXE階段沒有對寄存器和運(yùn)算器的任何操作。圖6-22J指令周期的信息流程

(4)模型機(jī)的數(shù)據(jù)通路圖。分析J指令的信息流程和6.2.2節(jié)中NPC模塊的功能:在實(shí)現(xiàn)J指令時(shí),需要將轉(zhuǎn)移的26位目標(biāo)地址作為NPC部件的輸入信號,并且在J指令的EXE階段,將PC更新部件的控制信號NPCOp設(shè)置為10即可實(shí)現(xiàn)程序轉(zhuǎn)移。因此需要將圖6-20所示的數(shù)據(jù)通路中的譯碼器的IMM26作為NPC部件的輸入信號。改動(dòng)后的數(shù)據(jù)通路如圖6-23所示。圖6-23執(zhí)行6條指令的數(shù)據(jù)通路

(5)控制器控制信號。執(zhí)行ADDU、SUBU、AND、

ADDIU、BNE和J這6條指令控制器的輸入和輸出信號如表6-20所示。

(6)指令執(zhí)行時(shí)序。圖6-24所示是J指令執(zhí)行過程的時(shí)序圖。圖6-24J指令執(zhí)行時(shí)序圖

7.LW指令

MIPS機(jī)器是典型的RISC指令系統(tǒng),這類指令系統(tǒng)為了提高機(jī)器速度,降低硬件復(fù)雜度,只有存數(shù)和取數(shù)指令才訪問存儲(chǔ)器,其他指令的數(shù)據(jù)都在寄存器之間傳送。LW指令

是一條存儲(chǔ)器讀出指令。

(1)LW指令的格式:

(2)指令功能描述:

PC←PC+4

R[rt]←MEM[R[rs]+sign_ext(Offset)]

(3)指令執(zhí)行過程分析。LW指令需要從數(shù)據(jù)存儲(chǔ)器DM中取出地址為R[rs]+Sign_Ext(Offset)的單元中的數(shù)據(jù),在EXE階段由ALU計(jì)算出存儲(chǔ)單元的地址,在MEM階段將數(shù)據(jù)從DM中取出,再在WB階段將該數(shù)據(jù)回寫到寄存器R[rt]中。相比前面幾條指令,LW指令功能最為復(fù)雜,包含了IF、ID、EXE、MEM和WB所有5個(gè)步驟。LW指令周期的信息流程圖如圖625所示。圖6-25LW指令周期的信息流程圖

(4)模型機(jī)的數(shù)據(jù)通路圖。分析LW指令的信息流程,圖6-23需要做如下幾點(diǎn)改動(dòng):

①需要增加一個(gè)數(shù)據(jù)存儲(chǔ)器,即DM部件,其寫入控制信號的名稱為DMWr。DM模塊的實(shí)現(xiàn)見例6-7。

②寄存器寫入數(shù)據(jù)端的數(shù)據(jù)來自DM的輸出,因此需要在RF的數(shù)據(jù)輸入端增加一個(gè)二選一的數(shù)據(jù)選擇器,其選擇控制信號名稱為RegD_Src。

改動(dòng)后的數(shù)據(jù)通路如圖6-26所示。

(5)控制器控制信號。LW指令在MEM階段中增加了DM寫控制信號DMWr以及WB的階段寄存器寫入數(shù)據(jù)源選擇信號RegD_Src。由此,執(zhí)行ADDU、SUBU、AND、

ADDIU、BNE、J和LW這7條指令控制器的輸入和輸出信號如表6-21所示。

(6)指令執(zhí)行時(shí)序。圖6-27所示的是LW指令執(zhí)行過程中5個(gè)階段數(shù)據(jù)變化的時(shí)序圖。圖6-27LW指令執(zhí)行時(shí)序圖

8.SW指令

SW指令是一條將數(shù)據(jù)寫入存儲(chǔ)器的指令。寫入存儲(chǔ)器的單元地址需要由ALU計(jì)算得到。

(1)SW指令的格式:

(2)指令功能描述:

PC←PC+4

MEM[R[rs]+Sign_Ext(Offset)]←R[rt]

(3)指令執(zhí)行過程分析。SW指令的功能是將寄存器R[rt]的內(nèi)容寫入DM存儲(chǔ)器中地址為R[rs]+Sign_Ext(Offset)的單元中去,在EXE階段需要由ALU計(jì)算存儲(chǔ)單元的地址,在MEM階段將取自R[rt]的數(shù)據(jù)寫入DM中。SW指令包含了IF、ID、EXE、MEM這4個(gè)步驟。SW指令周期的信息流程圖如圖6-28所示。

6-28SW指令周期的信息流程圖

(4)模型機(jī)的數(shù)據(jù)通路圖。分析SW指令的信息流程,在圖6-26的基礎(chǔ)上需要將RF的輸出數(shù)據(jù)2作為輸入送到DM的輸入數(shù)據(jù)端口。改動(dòng)后的數(shù)據(jù)通路如圖6-29所示。

(5)控制器控制信號。SW指令并沒有增加新的控制信號。執(zhí)行ADDU、SUBU、AND、ADDIU、BNE、J、LW和SW這8條指令控制器的輸入和輸出信號如表6-22

所示。

(6)指令執(zhí)行時(shí)序。圖6-30是SW指令執(zhí)行過程中各相關(guān)數(shù)據(jù)變化的時(shí)序圖。

以上分析了模型機(jī)所有8條指令的執(zhí)行過程,并建立了如圖6-29所示可以實(shí)現(xiàn)模型機(jī)所有8條指令的完整的數(shù)據(jù)通路。在每個(gè)指令的執(zhí)行過程中,IF、ID和EXE這3個(gè)階段是每個(gè)指令都有的,但是MEM和WB階段不是必需的。理論上,每個(gè)指令的實(shí)際執(zhí)行時(shí)間與指令執(zhí)行過程中所包含階段是有關(guān)的,每個(gè)階段的執(zhí)行時(shí)間與硬件的關(guān)系如表6-23

所示。實(shí)際上由于時(shí)鐘信號的周期是固定的,因此時(shí)鐘信號周期應(yīng)當(dāng)取所有階段的時(shí)間之和,即CLK=tIF+tID+tEXE+tMEM+tWB。圖6-30SW指令執(zhí)行時(shí)序圖

6.4控制器的實(shí)現(xiàn)

6.4.1組合邏輯控制器在執(zhí)行具體的指令時(shí),這條指令的數(shù)據(jù)通路都是在控制器控制下建立的,具體來說,就是控制器的功能要根據(jù)指令的操作碼和條件狀態(tài)標(biāo)志,決定每個(gè)時(shí)鐘周期中需要產(chǎn)生的相關(guān)部件的控制信號。組合邏輯控制器的結(jié)構(gòu)框圖如圖6-31所示。圖6-31組合邏輯控制器框圖

從圖6-31中可以看出,控制器的輸入信號有3個(gè)來源,分別是:

(1)來自操作碼譯碼器的輸出I0-In

。

(2)來自節(jié)拍發(fā)生器的時(shí)序信號T0-Tk

(3)來自執(zhí)行部件的反饋信號B0-Bj

。

組合邏輯控制器最終的輸出信號就是各個(gè)執(zhí)行部件的控制信號C0

-Cm,它們用來控制機(jī)器中所有部件的操作。組合邏輯控制器產(chǎn)生的控制信號是譯碼器輸出In

、時(shí)鐘信號Tk和狀態(tài)標(biāo)志信號Bj的邏輯函數(shù),即

模型機(jī)在建立如圖6-29所示的數(shù)據(jù)通路圖和指令的執(zhí)行過程分析中,我們知道IF階段根據(jù)PC從指令存儲(chǔ)器IM中得到了指令后,機(jī)器轉(zhuǎn)入到指令譯碼階段,即ID階段,這個(gè)階段完成以下功能:

(1)識別不同指令。

(2)根據(jù)不同的指令給出所有控制信號。

(3)獲取指令中的源操作數(shù)。

1.識別不同指令

模型機(jī)的8條指令都是通過指令操作碼Opcode字段進(jìn)行區(qū)分的,其中,R型指令的Opcode固定為000000,其具體的功能是由Funct字段確定的。因此這8條指令在硬件上

可以通過下面的式(6-1)進(jìn)行

2.控制信號的產(chǎn)生

從表6-22可以看出,指令的執(zhí)行步驟從IF、ID、EXE、MEM到WB這5個(gè)階段中,對所有指令而言前兩個(gè)階段即IF和ID都是必需的,與這兩個(gè)階段相關(guān)的部件是指令存儲(chǔ)器IM和指令譯碼器ID,不需要專門的控制信號;而每個(gè)指令在后3個(gè)階段EXE、MEM和WB中所需的控制信號是不同的,這3個(gè)階段控制器在識別不同指令后需要輸出的8個(gè)控制信號分別是:ALUOp、NPCOp、ALUB_Src、Sign_Ext、DMWr、RFWr、RegA3_Src和RegD_Src。各指令執(zhí)行時(shí)需要的控制信號如表6-24所示。

1)EXE階段的控制信號

EXE階段涉及到3個(gè)部件,分別是ALU、NPC和數(shù)據(jù)擴(kuò)展模塊,需要的控制信號有4個(gè),分別是ALUOp、ALUB_Src、NPCOp、Sign_Ext。

(1)ALUOp:2位寬,是ALU的運(yùn)算控制信號,其功能如表6-25所示。

從表6-24可以知道,只有SUBU和BNE兩條指令時(shí),ALUOp[0]=1;在執(zhí)行AND指令時(shí),ALUOp[1]=1。因此得到ALUOp的邏輯表達(dá)式為:

ALUOp[0]=SUBU+BNE

ALUOp[1]=AND

(2)ALUB_Src:1位寬,是ALU的B數(shù)據(jù)輸入端的數(shù)據(jù)選擇信號,其功能如表6-26所示。

分析表6-24中的ALUB_Src后可以得到其邏輯表達(dá)式為ALUB_Src=ADDIU+LW+SW

(3)NPCOp:2位寬,是PC更新部件NPC的操作控制信號,其功能如表6-27所示。

分析表6-24中的NPCOp后可以得到其邏輯表達(dá)式為

NPCOp[0]=BNE·(!Zero)

NPCOp[1]=J

(4)Sign_Ext:1位寬,是將16位立即數(shù)轉(zhuǎn)換為32位數(shù)的符號擴(kuò)展單元的控制信號,其功能如表6-28所示。

分析表6-24中的Sign_Ext后可以得到其邏輯表達(dá)式為

Sign_Ext=ADDIU+BNE+LW+SW

2)MEM階段的控制信號

MEM階段實(shí)現(xiàn)對數(shù)據(jù)存儲(chǔ)器DM的訪問,因此涉及的部件只有數(shù)據(jù)存儲(chǔ)器DM,可以對DM執(zhí)行讀/寫操作,其中,讀/寫操作是在DMWr的控制下完成的。當(dāng)DMWr=0時(shí),DM執(zhí)行讀出操作,當(dāng)DMWr=1時(shí),DM執(zhí)行數(shù)據(jù)寫入操作。

分析表6-24中的DMWr后可以得到其邏輯表達(dá)式為

DMWr=SW

3)WB階段的控制信號

WB階段的任務(wù)是將在執(zhí)行階段或MEM階段得到的數(shù)據(jù)寫回到寄存器中,因此涉及的主要部件是寄存器陣列RF,控制器要產(chǎn)生的控制信號有RFWr、RegA3_Src和RegD_Src。

(1)RFWr:RF寫入控制信號,當(dāng)RFWr=1時(shí),RF執(zhí)行數(shù)據(jù)寫入操作。

分析表6-24中的RFWr后可以得到其邏輯表達(dá)式為

RFWr=ADDU+SUBU+AND+ADDIU+LW

由于所有R型指令的執(zhí)行要經(jīng)歷WB階段,因此表達(dá)式也可以寫成:

RFWr=RType+ADDIU+LW

(2)RegA3_Src:是RF寫入地址來源控制信號,是RF寫入地址的二選一數(shù)據(jù)選擇器的地址選擇控制信號。若RegA3_Src=0時(shí),寄存器的寫入地址是指令中的rt字段,若

RegA3_Src=1時(shí),寄存器的寫入地址是指令中的rd字段。

分析表6-24中的RegA3_Src后可以得到其邏輯表達(dá)式為

RegA3_Src=RType

(3)RegD_Src:是RF寫入數(shù)據(jù)來源選擇信號,實(shí)際上是RF寫入數(shù)據(jù)端的二選一數(shù)據(jù)選擇器控制信號。若RegD_Src=0

時(shí),將運(yùn)算器的結(jié)果寫入RF中;若RegD_Src=1時(shí),將從DM讀出的數(shù)據(jù)寫入RF中。

分析表6-24中的RegD_Src后可以得到其邏輯表達(dá)式為

RegD_Src=LW

3.控制部件CU

控制器可以根據(jù)各指令的操作碼Opcode、Funct以及狀態(tài)標(biāo)志Zero,再由上面寫出的各控制信號的邏輯表達(dá)式,采用組合邏輯電路就可以產(chǎn)生所有的控制信號了。組合邏輯控制器的端口信號如圖6-32所示。圖6-32組合邏輯控制器的端口信號

從以上組合邏輯控制器的設(shè)計(jì)過程可以看到,所有的控制命令,都是由邏輯門電路產(chǎn)生的,其最大優(yōu)點(diǎn)是速度較快,這種控制器的設(shè)計(jì)方法主要應(yīng)用于RISC處理器和一些巨型計(jì)算機(jī)中,但是這種方法存在兩個(gè)主要的缺點(diǎn):首先,每個(gè)控制信號都有不同表達(dá)式,因此這些門電路的結(jié)構(gòu)不規(guī)整,控制器功能的檢查和調(diào)試也比較困難,設(shè)計(jì)效率較低;其次,一旦控制器形成后,要想修改和擴(kuò)展指令功能是很困難的,因?yàn)?印刷電路板已經(jīng)固定下來了,很難再對其進(jìn)行修改和擴(kuò)展了。

6.4.2微程序控制器

1.微程序控制器的設(shè)計(jì)思想

微程序控制的基本設(shè)計(jì)思想,是將軟件設(shè)計(jì)的方法引入到硬件實(shí)現(xiàn)中來,也就是按照程序存儲(chǔ)的原理,把操作控制信號(也稱為微命令)排列后編寫成“微指令”,存放到一個(gè)稱

為“控制存儲(chǔ)器”(簡稱CM)的只讀存儲(chǔ)器中,當(dāng)機(jī)器運(yùn)行時(shí),從CM中按順序一條一條地讀出這些微指令,從而產(chǎn)生全機(jī)所需要的各種操作控制信號,使相應(yīng)部件執(zhí)行所規(guī)定的操作。

一條機(jī)器指令往往需要分成幾步執(zhí)行,如果將每一步操作所需的微命令以代碼的形式放在一條微指令中,那么一條機(jī)器指令的執(zhí)行過程就對應(yīng)一個(gè)由若干條微指令組成的微程

序。在設(shè)計(jì)CPU時(shí),根據(jù)指令系統(tǒng)的設(shè)計(jì)編寫好每一條機(jī)器指令對應(yīng)的微程序,并且將它們存入CM中。機(jī)器指令和微指令在機(jī)器中存放的位置和相互之間的關(guān)系可以用圖6-33

表示。圖6-33機(jī)器指令和微指令的關(guān)系

CM主要用來存放指令系統(tǒng)中每一條機(jī)器指令對應(yīng)的微程序。每段微程序由一組微指令組成,每個(gè)微指令由操作控制和順序控制字段兩部分組成。操作控制字段是由一系列控

制信號組成的,每個(gè)控制信號又稱為微命令,操作控制字段產(chǎn)生的一系列微命令可以控制計(jì)算機(jī)完成一個(gè)基本的功能部分;順序控制字段用來指示下一條微指令的地址。通常一條微指令執(zhí)行的功能對應(yīng)了一個(gè)CPU周期的功能,也就是說,一個(gè)CPU周期所需的控制信號是由操作控制字段產(chǎn)生的。每個(gè)微指令占用一個(gè)CM單元,CM的字長就是微指令的字長。

微程序控制器常見的內(nèi)部結(jié)構(gòu)如圖6-34所示。圖6-34微程序控制器常見的內(nèi)部結(jié)構(gòu)

從圖6-34中可以看出,微程序控制器主要由控制存儲(chǔ)器CM、微地址順序控制邏輯、微地址寄存器μAR、微地址譯碼器和微指令寄存器μIR組成。

(1)控制存儲(chǔ)器CM。CM用來存放實(shí)現(xiàn)指令系統(tǒng)中每條機(jī)器指令對應(yīng)的微程序,CM的容量由機(jī)器指令系統(tǒng)所需的微程序決定。由于CM存放的是指令執(zhí)行時(shí)所需的控制信號,實(shí)現(xiàn)一條機(jī)器指令的功能是通過執(zhí)行該機(jī)器指令對應(yīng)的微程序來實(shí)現(xiàn)的,微程序中包含多條微指令,即需要多次讀取CM,因此,CM的讀取速度對于機(jī)器的速度影響會(huì)很大,

因此CM一般是采用高速的只讀存儲(chǔ)器。

(2)微地址順序控制邏輯。微地址順序控制邏輯在微程序需要分支的情況下產(chǎn)生所需微指令的地址。在通常情況下,微指令本身的順序控制字段會(huì)直接給出下一條微指令的地

址。但是很多情況下微程序也會(huì)出現(xiàn)分支。例如,取指令周期從內(nèi)存中取出的機(jī)器指令是不同的,執(zhí)行該指令需要跳轉(zhuǎn)到該機(jī)器指令對應(yīng)的微程序的首地址,才能執(zhí)行對應(yīng)的微程

序,此時(shí),微程序的首地址就是由微地址順序控制邏輯根據(jù)IR的操作碼變換得到的。

(3)微地址寄存器μAR。它用于存放微地址順序控制邏輯生成的CM的微指令地址。

(4)微地址譯碼器。它對來自μAR的輸出進(jìn)行譯碼,選擇CM中的某個(gè)單元。

(5)微指令寄存器μIR。它用于寄存從CM取出的一條微指令。微指令的控制字段和順序控制字段保存在微指令寄存器中,控制字段就是各種控制指令執(zhí)行的微命令,順序控

制字段不需要轉(zhuǎn)移下一條微指令的地址。

微程序控制器的特點(diǎn)是:

(1)將控制信號存儲(chǔ)在由ROM實(shí)現(xiàn)的CM中。

(2)結(jié)構(gòu)規(guī)整,只有地址譯碼器和控制存儲(chǔ)器。

(3)可以靈活修改控制器的功能,便于發(fā)現(xiàn)存在的錯(cuò)誤和增加新的指令。

微程序控制器設(shè)計(jì)的關(guān)鍵是如何對微命令進(jìn)行編碼以及如何形成下一條微指令的地址,這與微命令的編碼方式和微地址的形成方式有關(guān)。

2.基于ROM的模型機(jī)控制器

模型機(jī)的微程序控制器框圖如圖6-35所示。圖6-35模型機(jī)的微程序控制器框圖

比較圖6-35和圖6-32可以看出,兩個(gè)控制器的輸入和輸出端口信號是完全一樣的,所不同的是,圖6-32中的控制信號是由組合邏輯產(chǎn)生的,而圖6-35中是將控制信號存

儲(chǔ)在ROM中的。

微程序控制器的內(nèi)部結(jié)構(gòu)是由地址譯碼器和ROM組成的,如圖6-36所示。圖6-36微程序控制器的內(nèi)部結(jié)構(gòu)

從圖6-34中可以看出,ROM存放著模型機(jī)中每條機(jī)器指令執(zhí)行時(shí)所需要的控制信號,由于模型機(jī)共有8條指令,其中,BNE指令要根據(jù)Zero的狀態(tài)執(zhí)行不同的功能,因此其控制信號也是不同的,這樣,BNE指令需要占用2個(gè)存儲(chǔ)單元,產(chǎn)生模型機(jī)控制信號的ROM至少需要9個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元的字長是由控制信號的數(shù)量決定的。表6-29列出了10個(gè)控制信號,因此每個(gè)存儲(chǔ)單元的字長是10b,存儲(chǔ)單元中控制信號的存儲(chǔ)順序可以安排如表6-29所示。將表6-24中每條指令控制信號的取值依次存放到ROM中即可。考慮到今后指令集的功能擴(kuò)展,模型機(jī)的ROM容量設(shè)置為32×10。由于模型機(jī)是單周期的,因此每條機(jī)器指令只對應(yīng)一個(gè)微指令,這里就不需要順序控制字段了。

例6-9地址譯碼器的VerilogD描述。

6.4.3VerilogHDL實(shí)現(xiàn)控制器

這里的VerilogHDL控制器根據(jù)指令中的操作碼Opcode、功能碼Funct和標(biāo)志位,產(chǎn)生6.2節(jié)中模型機(jī)中各指令的控制信號。

6.4.4指令周期與CPU執(zhí)行時(shí)間

1.指令周期

首先介紹指令周期的概念,CPU取出并執(zhí)行一條指令所需的全部時(shí)間稱為指令周期,即CPU完成一條指令的時(shí)間。指令由于功能、運(yùn)算、數(shù)據(jù)尋址方式的不同,運(yùn)行時(shí)間會(huì)有很大差異。例如,在運(yùn)算指令中,乘法指令比加法指令的執(zhí)行時(shí)間要長;同樣加法指令,其數(shù)據(jù)的尋址方式可以是寄存器尋址、直接尋址和間接尋址,則相應(yīng)的指令周期也是不同的。

圖6-37是單周期指令執(zhí)行時(shí)各個(gè)階段所需的時(shí)間。圖6-37單周期指令各個(gè)階段的工作過程示意圖

從圖6-37中可以看出,指令的執(zhí)行過程中各個(gè)部件中的新舊指令或數(shù)據(jù)的交替過程。指令執(zhí)行過程每個(gè)階段所需的時(shí)間是由該階段中的主要部件決定的。假設(shè)各階段的時(shí)

間如表6-30所示。從表6-30可以看出與存儲(chǔ)器相關(guān)的階段所需的時(shí)間較長,ALU的時(shí)間與運(yùn)算類型有關(guān),這里的時(shí)間是由所有運(yùn)算中時(shí)間最長的時(shí)間決定的,可以看出單周期

指令的時(shí)鐘周期應(yīng)為各階段執(zhí)行時(shí)間的總和,即800ps。表6-31列出了模型機(jī)中8條指令指令周期。

2.CPU的執(zhí)行時(shí)間

由于模型機(jī)采用單周期的設(shè)計(jì),指令執(zhí)行過程的各個(gè)階段之和為800ps,因此CPU時(shí)鐘信號的最大頻率是:

在這800ps中大多數(shù)的部件都處于空閑狀態(tài),例如,ALU完成一次運(yùn)算只需要200ps,也就是說,如果讓ALU始終處于有效的工作狀態(tài),ALU的工作頻率可以達(dá)到:

從宏觀上,CPU的執(zhí)行時(shí)間texec是由一個(gè)程序的執(zhí)行時(shí)間決定的,即:

3.影響CPU效率的因素

從式(6-2)可以看出,CPU的效率是由程序中指令的數(shù)量、CPI和時(shí)鐘頻率fclk決定的,下面我們再進(jìn)一步的對這幾個(gè)因素進(jìn)行分析。

1)程序中指令的數(shù)量

程序中指令的數(shù)量是由以下幾個(gè)因素決定的:

(1)任務(wù):任務(wù)的不同,程序的復(fù)雜度不同。

(2)算法:即使相同的任務(wù),不同的算法,其復(fù)雜度是不同的,如O(N2)與O(N)。

(3)編程語言:編程語言不同,語句和算法可能存在差異。

(4)編譯器:編譯器的編譯結(jié)果不同。

(5)處理器的指令集:處理器的指令集不同,編寫程序的執(zhí)行可能存在很大差異。

2)CPI

CPI是由CPU的內(nèi)部結(jié)構(gòu)決定的,例如,我們前面講的單周期模型機(jī),CPI=1,對于多周期CPU而言,CPI>1;而對于超流水線結(jié)構(gòu),由于增加了處理器內(nèi)部部件的數(shù)量,可以使得指令執(zhí)行中的任一個(gè)階段在同一時(shí)刻執(zhí)行多條指令,因此CPI<1

3)時(shí)鐘頻率fclk

時(shí)鐘頻率也是由多種因素決定的,首先是處理器的內(nèi)部結(jié)構(gòu),如單周期、多周期、流水線等決定的,同一個(gè)指令集如果分別采用單周期和多周期的結(jié)構(gòu),單周期的時(shí)鐘頻率比較低,流水線的時(shí)鐘頻率取決于流水線中各任務(wù)段的劃分,任務(wù)劃分的級數(shù)越多,其時(shí)鐘信號的頻率就越高;其次是指令集的選取,相比RISC,CISC指令集的時(shí)鐘頻率很難提高;然后就是與半導(dǎo)體的工藝技術(shù)有關(guān),更先進(jìn)的制造工藝還會(huì)減少處理器的功耗,從而減少其發(fā)熱量,有利于提高時(shí)鐘信號的頻率。表6-32列出了某兩個(gè)CPU中這3個(gè)參數(shù)與執(zhí)行時(shí)間對比的例子。

從式(6-2)可以看出,要提高CPU的速度,就要降低程序的執(zhí)行時(shí)間,可以采取的主要措施有:降低CPI、提高fs

6.5多周期CPU

單周期CPU用一個(gè)時(shí)鐘周期執(zhí)行一條指令,時(shí)鐘周期的時(shí)間長度是由執(zhí)行時(shí)間最長的指令決定的。多周期CPU的思想是把每一條指令的執(zhí)行過程分成若干個(gè)小周期,每條指令可以根據(jù)其復(fù)雜程度,使用不同數(shù)量的小周期去執(zhí)行,這樣就可以提高CPU的效率。

6.5.1指令周期的分配

在單周期CPU的設(shè)計(jì)過程中,定義了5個(gè)指令執(zhí)行步驟,分別是取指令(IF)、指令譯碼(ID)、指令執(zhí)行(EXE)、存儲(chǔ)器訪問(MEM)和結(jié)果寫回(WB)。在多指令周期CPU中,

給這5個(gè)步驟分別分配一個(gè)時(shí)鐘周期。

在6.3節(jié)中分析了模型機(jī)中每條指令執(zhí)行所需的步驟,即指令周期的時(shí)鐘分配表,如表6-33所示。表6-33中可以看出每條指令根據(jù)執(zhí)行的功能由3~5個(gè)時(shí)鐘周期完成,大部分的指令如R型和I型指令需要4個(gè)時(shí)鐘周期,而最短的BNE和J指令只需要3個(gè)時(shí)鐘周期,只有LW指令需要5個(gè)時(shí)鐘周期。

6.5.2多周期的數(shù)據(jù)通路

多周期的數(shù)據(jù)通路與單周期并沒有本質(zhì)差別,只是將單周期中一個(gè)時(shí)鐘周期劃分為5個(gè)新的時(shí)鐘周期。新的時(shí)鐘周期是由指令執(zhí)行5個(gè)階段中時(shí)間最長的任務(wù)段決定的,通常

這個(gè)時(shí)間會(huì)選取訪存周期的時(shí)間。同時(shí)為了能夠切分?jǐn)?shù)據(jù)通路,需要在數(shù)據(jù)通路中插入寄存器,新的完整的數(shù)據(jù)通路如圖6-38所示。

相比圖6-29,圖6-38有以下幾個(gè)主要的變化:

(1)PC部件增加了寫使能信號PCWr。這樣做的目的是控制PC在只在PCwr有效時(shí),PC才更新一次,也就是PC只在IF階段發(fā)生改變,在指令的其他階段PC保持不變的。

(2)將圖6-29中的ID更名為IR(指令寄存器),并增加寫使能控制信號IRwr,使該部件成為一個(gè)受時(shí)鐘信號控制的指令寄存器。

(3)在寄存器文件RF的兩個(gè)數(shù)據(jù)輸出端增加了2個(gè)數(shù)據(jù)寄存器,分別是A和B,增加鎖存控制信號En_A和En_B。

(4)在ALU數(shù)據(jù)輸出端增加保存運(yùn)算結(jié)果的寄存器Z,增加控制信號En_Z。

(5)在數(shù)據(jù)存儲(chǔ)器DM的數(shù)據(jù)輸出端增加了數(shù)據(jù)寄存器DR。

從圖6-38中可以看到,指令執(zhí)行的全部5個(gè)過程中對應(yīng)的部件中,都有一個(gè)受時(shí)鐘信號控制的器件。

圖6-39是以ADDU為例說明指令的執(zhí)行過程。圖中,CLK是時(shí)鐘信號,其序號1~6依次對應(yīng)指令執(zhí)行的6個(gè)步驟。從圖中可以看出ADDU指令執(zhí)行的4個(gè)階段對應(yīng)的全過程:

(1)在IF階段中,PC中存放ADDU指令在IM中存放的地址,并送給IM,IM輸出ADDU指令的機(jī)器碼并送往IR。

(2)在下一個(gè)CLK上升沿,進(jìn)入ID階段,IR鎖存來自IM的機(jī)器指令,并將ADDU指令的操作碼送往控制器,指令中的rs、rd和rt送到RF部件,RF部件將兩個(gè)源操作數(shù)取出;與此同時(shí),PC完成更新,指向下一條指令地址。

(3)在下一個(gè)CLK上升沿,進(jìn)入EXE階段,控制寄存器A和B鎖存來自RF的兩個(gè)操作數(shù),并送往ALU執(zhí)行加法運(yùn)算。

(4)在下一個(gè)CLK上升沿,進(jìn)入WB階段,在這階段會(huì)將ALU的結(jié)果控制鎖存到寄存器Z中。

(5)在下一個(gè)CLK上升沿,開始下一個(gè)IF階段,將寄存器Z的結(jié)果寫入RF中。圖6-39ADDU指令執(zhí)行過程時(shí)序示意圖

6.5.3狀態(tài)機(jī)的建立

1.LW指令

取數(shù)指令LW從取指令I(lǐng)F到寫回WB的5個(gè)階段分別用圖6-40中的狀態(tài)S0~S4表示,每個(gè)狀態(tài)控制信號設(shè)置如表6-34所示。圖6-40中的狀態(tài)間的轉(zhuǎn)換是按照箭頭上的

條件進(jìn)行的。圖6-40多周期CPU的狀態(tài)轉(zhuǎn)移圖

S0(IF):取指令狀態(tài),這個(gè)狀態(tài)的功能是根據(jù)PC的當(dāng)前值內(nèi)容訪問IM。

S1(ID):指令譯碼狀態(tài),這個(gè)狀態(tài)中完成以下操作:

(1)將IM輸出的指令鎖存到IR。

(2)從RF中讀出R[rs]。

(3)對指令中的立即數(shù)有符號擴(kuò)展得到Sign_Ext(Offset)。

(4)更新PC的值,使PC指向下一條指令的地址。

S2(MA):計(jì)算存儲(chǔ)單元地址狀態(tài),該狀態(tài)完成以下操作:

(1)寄存器A鎖存R[rs]的數(shù)據(jù)。

(2)ALU計(jì)算數(shù)據(jù)存儲(chǔ)單元的地址,即R[rs]+Sign_Ext(Offset)。

S3(MRead):存儲(chǔ)器讀出數(shù)據(jù)狀態(tài),該狀態(tài)完成以下操作:

(1)寄存器Z鎖存ALU的計(jì)算結(jié)果,即Z=R[rs]+Sign_Ext(Offset)。

(2)從數(shù)據(jù)存儲(chǔ)器DM讀出數(shù)據(jù)。

S4(MWB):存儲(chǔ)器數(shù)據(jù)寫入寄存器狀態(tài),該狀態(tài)完成以下操作:

將RF的寫使能信號RFWr置1,在下一個(gè)時(shí)鐘信號的上升沿(IF狀態(tài))將DR輸出的數(shù)據(jù)寫入R[rt]。

2.SW指令

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論