第六章-補(bǔ)充內(nèi)容_第1頁(yè)
第六章-補(bǔ)充內(nèi)容_第2頁(yè)
第六章-補(bǔ)充內(nèi)容_第3頁(yè)
第六章-補(bǔ)充內(nèi)容_第4頁(yè)
第六章-補(bǔ)充內(nèi)容_第5頁(yè)
已閱讀5頁(yè),還剩104頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一講單周期數(shù)據(jù)通路的設(shè)計(jì)第二講單周期控制器的設(shè)計(jì)第三講多周期處理器的設(shè)計(jì)第四講微程序控制器設(shè)計(jì)與異常處理Ch6:CPU-

DatapathandControl中央處理器:數(shù)據(jù)通路和控制器南京大學(xué)—袁春風(fēng)第一講單周期數(shù)據(jù)通路的設(shè)計(jì)CPU的功能及其與計(jì)算機(jī)性能的關(guān)系數(shù)據(jù)通路的位置單周期數(shù)據(jù)通路的設(shè)計(jì)數(shù)據(jù)通路的功能和實(shí)現(xiàn)操作元件(組合邏輯部件)狀態(tài)/存儲(chǔ)元件(時(shí)序邏輯部件)數(shù)據(jù)通路的定時(shí)選擇MIPS指令集的一個(gè)子集作為CPU的實(shí)現(xiàn)目標(biāo)下條指令地址計(jì)算與取指令部件R型指令的數(shù)據(jù)通路訪存指令的數(shù)據(jù)通路立即數(shù)運(yùn)算指令的數(shù)據(jù)通路分支和跳轉(zhuǎn)指令的數(shù)據(jù)通路綜合所有指令的數(shù)據(jù)通路主要內(nèi)容CPU功能及其與計(jì)算機(jī)性能的關(guān)系CPU執(zhí)行指令的過(guò)程(回顧)取指令PC+“1”送PC指令譯碼進(jìn)行主存地址運(yùn)算取操作數(shù)進(jìn)行算術(shù)/邏輯運(yùn)算存結(jié)果以上每步都需檢測(cè)“異?!比粲挟惓?,則自動(dòng)切換到異常處理程序檢測(cè)是否有“中斷”請(qǐng)求,有則轉(zhuǎn)中斷處理CPU的實(shí)現(xiàn)與計(jì)算機(jī)性能的關(guān)系計(jì)算機(jī)性能(程序執(zhí)行快慢)由三個(gè)關(guān)鍵因素決定(回顧)指令數(shù)目、CPI、時(shí)鐘周期指令數(shù)目由編譯器和ISA決定時(shí)鐘周期和CPI由CPU的實(shí)現(xiàn)以及其他因素來(lái)決定因此,CPU的設(shè)計(jì)與實(shí)現(xiàn)非常重要!它直接影響計(jì)算機(jī)的性能。指令執(zhí)行過(guò)程問(wèn)題:“取指令”一定在最開(kāi)始做嗎?“PC+1”一定在譯碼之前做嗎?“譯碼”須在指令執(zhí)行前做嗎?你能說(shuō)出哪幾種“異?!笔录俊爱惓!焙汀爸袛唷钡牟顒e是什么?異常是在CPU內(nèi)部發(fā)生的中斷是由外部事件引起的取指階段譯碼和執(zhí)行階段組成指令功能的四種基本操作每條指令的功能總是由以下四種基本操作來(lái)實(shí)現(xiàn):讀取某一主存單元的內(nèi)容,并將其裝入某個(gè)寄存器(取指,取數(shù))把一個(gè)數(shù)據(jù)從某個(gè)寄存器存入給定的主存單元中(存結(jié)果)把一個(gè)數(shù)據(jù)從某個(gè)寄存器送到另一個(gè)寄存器或者ALU(取數(shù),存結(jié)果)進(jìn)行算術(shù)或邏輯運(yùn)算(PC+1,計(jì)算地址,運(yùn)算)操作功能可形式化描述描述語(yǔ)言稱為寄存器傳送語(yǔ)言RTL(RegisterTransferLanguage)本章所用的RTL規(guī)定如下:(1)用R[r]表示寄存器r的內(nèi)容;(2)用M[addr]表示主存單元addr的內(nèi)容;(3)傳送方向用“←”表示,傳送源在右,傳送目的在左;(4)程序計(jì)數(shù)器PC直接用PC表示其內(nèi)容;(5)用OP[data]表示對(duì)數(shù)據(jù)data進(jìn)行OP操作。CPU基本組成原理圖執(zhí)行部件控制部件CPU由執(zhí)行部件和控制部件組成CPU包含數(shù)據(jù)通路(執(zhí)行部件)

和控制器(控制部件)控制器由指令譯碼器和控制信號(hào)形成部件組成指令寄存器IR程序計(jì)數(shù)器PC數(shù)據(jù)通路的位置計(jì)算機(jī)的五大組成部分:什么是數(shù)據(jù)通路(DataPath)?指令執(zhí)行過(guò)程中,數(shù)據(jù)所經(jīng)過(guò)的路徑,包括路徑中的部件。它是指令的執(zhí)行部件??刂破鳎–ontrol)的功能是什么?對(duì)指令進(jìn)行譯碼,生成指令對(duì)應(yīng)的控制信號(hào),控制數(shù)據(jù)通路的動(dòng)作。能對(duì)執(zhí)行部件發(fā)出控制信號(hào),是指令的控制部件。ControlMemoryCPUInputOutputDatapathDatapath數(shù)據(jù)通路的基本結(jié)構(gòu)數(shù)據(jù)通路由兩類元件組成組合邏輯元件(也稱操作元件)時(shí)序邏輯元件(也稱狀態(tài)元件,存儲(chǔ)元件)元件間的連接方式總線連接方式分散連接方式數(shù)據(jù)通路如何構(gòu)成?由“操作元件”和“存儲(chǔ)元件”通過(guò)總線方式或分散方式連接而成數(shù)據(jù)通路的功能是什么?進(jìn)行數(shù)據(jù)存儲(chǔ)、處理、傳送因此,數(shù)據(jù)通路是由操作元件和存儲(chǔ)元件通過(guò)總線方式或分散方式連接而成的進(jìn)行數(shù)據(jù)存儲(chǔ)、處理、傳送的路徑。

操作元件:組合邏輯電路加法器(Adder)多路選擇器(MUX)算邏部件(ALU)32AB32Y32SelectMUX3232AB32ResultZeroOPALU3232AB32SumCarryAdderCarryIn3Decoderout0out1out7out2譯碼器(Decoder)何時(shí)要用到adder,ALU,MUXorDecoder?控制信號(hào)組合邏輯元件的特點(diǎn):其輸出只取決于當(dāng)前的輸入。即:若輸入一樣,則其輸出也一樣定時(shí):所有輸入到達(dá)后,經(jīng)過(guò)一定的邏輯門延時(shí),輸出端改變,并保持到下次改變,不需要時(shí)鐘信號(hào)來(lái)定時(shí)加法器需要什么控制信號(hào)?狀態(tài)元件:時(shí)序邏輯電路狀態(tài)(存儲(chǔ))元件的特點(diǎn):具有存儲(chǔ)功能,在時(shí)鐘控制下輸入被寫到電路中,直到下個(gè)時(shí)鐘到達(dá)輸入端狀態(tài)由時(shí)鐘決定何時(shí)被寫入,輸出端狀態(tài)隨時(shí)可以讀出定時(shí)方式:規(guī)定信號(hào)何時(shí)寫入狀態(tài)元件或何時(shí)從狀態(tài)元件讀出邊沿觸發(fā)(edge-triggered)方式:狀態(tài)單元中的值只在時(shí)鐘邊沿改變。每個(gè)時(shí)鐘周期改變一次。上升沿(risingedge)觸發(fā):在時(shí)鐘正跳變時(shí)進(jìn)行讀/寫。下降沿(fallingedge)觸發(fā):在時(shí)鐘負(fù)跳變時(shí)進(jìn)行讀/寫。最簡(jiǎn)單的狀態(tài)單元(回顧:數(shù)字邏輯電路課程內(nèi)容):D觸發(fā)器:一個(gè)時(shí)鐘輸入、一個(gè)狀態(tài)輸入、一個(gè)狀態(tài)輸出cycletimerisingedgefallingedge存儲(chǔ)元件中何時(shí)狀態(tài)被改變?切記:狀態(tài)單元的輸入信息總是在一個(gè)時(shí)鐘邊沿到達(dá)后的“Clk-to-Q”時(shí)才被寫入到單元中,此時(shí)的輸出才反映新的狀態(tài)值數(shù)據(jù)通路中的狀態(tài)元件有兩種:寄存器(組)+存儲(chǔ)器(LatchProp-鎖存延遲)Q總是在clock-to-Q后跟著D變化這期間D的變化不影響Q存儲(chǔ)元件:寄存器和寄存器組寄存器(Register)有一個(gè)寫使能(WriteEnable-WE)信號(hào) 0:時(shí)鐘邊沿到來(lái)時(shí),輸出不變

1:時(shí)鐘邊沿到來(lái)時(shí),輸出開(kāi)始變?yōu)檩斎肴裘總€(gè)時(shí)鐘邊沿都寫入,則不需WE信號(hào)寄存器組(RegisterFile)兩個(gè)讀口(組合邏輯操作):busA和busB分別由RA和RB給出地址。地址RA或RB有效后,經(jīng)一個(gè)“取數(shù)時(shí)間(AccessTime)”,busA和busB有效。一個(gè)寫口(時(shí)序邏輯操作):寫使能為1的情況下,時(shí)鐘邊沿到來(lái)時(shí),busW傳來(lái)的值開(kāi)始被寫入RW指定的寄存器中。ClkDataInWrite

EnableNNDataOutClkbusWWrite

Enable3232busA32busB555RWRARB3232-bitRegisters寄存器組的內(nèi)部結(jié)構(gòu)busWCD031MUXMXURegister0Register1Register

30Register

31WriteEnableRW32-to-1DecoderRARBbusAbusB

ClkCDCDCD每個(gè)寄存器由32個(gè)觸發(fā)器組成;輸入數(shù)據(jù)來(lái)自busW,讀出數(shù)據(jù)分別送busA和busB;WriteEnable信號(hào)控制是否寫入新值。Backtoadd理想存儲(chǔ)器(idealizedmemory

)DataOut:32位讀出數(shù)據(jù)DataIn:

32位寫入數(shù)據(jù)Address:讀寫公用一個(gè)32位地址讀操作(組合邏輯操作):地址Address有效后,經(jīng)一個(gè)“取數(shù)時(shí)間AccessTime”,DataOut上數(shù)據(jù)有效。寫操作(時(shí)序邏輯操作):寫使能為1的情況下,時(shí)鐘Clk邊沿到來(lái)時(shí),DataIn傳來(lái)的值開(kāi)始被寫入Address指定的存儲(chǔ)單元中。存儲(chǔ)元件:理想存儲(chǔ)器ClkDataInWriteEnable3232DataOutAddress為簡(jiǎn)化數(shù)據(jù)通路操作說(shuō)明,把存儲(chǔ)器簡(jiǎn)化為帶時(shí)鐘信號(hào)Clk的理想模型。數(shù)據(jù)通路與時(shí)序控制同步系統(tǒng)(Synchronoussystem)所有動(dòng)作有專門時(shí)序信號(hào)來(lái)定時(shí)由時(shí)序信號(hào)規(guī)定何時(shí)發(fā)出什么動(dòng)作

例如,指令執(zhí)行過(guò)程每一步都有控制信號(hào)控制,由定時(shí)信號(hào)確定控制信號(hào)何時(shí)發(fā)出、作用時(shí)間多長(zhǎng)什么是時(shí)序信號(hào)?同步系統(tǒng)中用于進(jìn)行同步控制的定時(shí)信號(hào),如時(shí)鐘信號(hào)什么叫指令周期?取并執(zhí)行一條指令的時(shí)間每條指令的指令周期肯定一樣嗎?早期計(jì)算機(jī)的三級(jí)時(shí)序系統(tǒng)機(jī)器周期-節(jié)拍-脈沖指令周期可分為取指令、讀操作數(shù)、執(zhí)行并寫結(jié)果等多個(gè)基本工作周期,稱為機(jī)器周期。機(jī)器周期有取指令、存儲(chǔ)器讀、存儲(chǔ)器寫、中斷響應(yīng)等不同類型數(shù)據(jù)通路與時(shí)序控制(早期計(jì)算機(jī)的三級(jí)時(shí)序)現(xiàn)代計(jì)算機(jī)已不再采用三級(jí)時(shí)序系統(tǒng),機(jī)器周期的概念已逐漸消失。整個(gè)數(shù)據(jù)通路中的定時(shí)信號(hào)就是時(shí)鐘,一個(gè)時(shí)鐘周期就是一個(gè)節(jié)拍。數(shù)據(jù)通路與時(shí)序控制假定采用下降沿觸發(fā)(負(fù)跳變)方式(也可以是上升沿方式)所有狀態(tài)單元在下降沿寫入信息,經(jīng)過(guò)LatchProp(clk-to-Q)后輸出有效CycleTime=LatchProp+LongestDelayPath+Setup+ClockSkew約束條件:(LatchProp+ShortestDelayPath-ClockSkew)>HoldTimeClk寄存器的輸入可變化SetupHold............SetupHold數(shù)據(jù)通路由“…+狀態(tài)元件

+操作元件(組合電路)+狀態(tài)元件

+…”組成只有狀態(tài)元件能存儲(chǔ)信息,所有操作元件都須從狀態(tài)單元接收輸入,并將輸出寫入狀態(tài)單元中。其輸入為前一時(shí)鐘生成的數(shù)據(jù),輸出為當(dāng)前時(shí)鐘所用的數(shù)據(jù)現(xiàn)代計(jì)算機(jī)的時(shí)鐘周期ClkClk早期累加器型指令系統(tǒng)數(shù)據(jù)通路最簡(jiǎn)單的數(shù)據(jù)通路結(jié)構(gòu)

取指令數(shù)據(jù)路徑為:

PC→MAR,ReadM,M→MBR→IBR→IR取操作數(shù)、運(yùn)算、送結(jié)果的數(shù)據(jù)路徑為:

操作數(shù)地址→MAR,ReadM,M→MBR→ALU輸入端,AC→ALU輸入端,ALU操作,ALU結(jié)果→AC,AC→MBR,WriteMIAS計(jì)算機(jī)(馮.諾依曼等設(shè)計(jì))是現(xiàn)代計(jì)算機(jī)的原型AC:累加器MQ:乘商寄存器PC、IR、ALU、IBR、MBR:?分散連接方式!單總線數(shù)據(jù)通路

四種基本操作的時(shí)序在寄存器之間傳送數(shù)據(jù)R0out,Yin完成算術(shù)、邏輯運(yùn)算R1out,YinR2out,Add,ZinZout,R3in從主存取字R1out,MARinRead,WMFC

(等待MFC)MDRout,R2in寫字到主存R1out,MARinR2out,MDRin,Write,

WMFCR[R2]←M[R[R1]]

M[R[R1]]←R[R2]CPU訪存有兩種通信方式早期:直接訪問(wèn)MM,“異步”方式,用MFC應(yīng)答信號(hào);現(xiàn)在:先Cache后MM,“同步”方式,無(wú)需應(yīng)答信號(hào)。問(wèn)題:時(shí)鐘周期的寬度如何確定?以“Riout,OP,Zin”所花時(shí)間來(lái)確定還是以“Read/Write”所花時(shí)間來(lái)確定?以上四種操作各需要幾個(gè)時(shí)鐘周期?1Cycle?3Cycles?3Cycles?3Cycles?Read/Write時(shí)間更長(zhǎng),故以此為準(zhǔn)!OP:Add、Sub、And、Or等通用寄存器總線連接方式!內(nèi)總線內(nèi)總線外總線三總線數(shù)據(jù)通路單總線中一個(gè)時(shí)鐘內(nèi)只允許傳一個(gè)數(shù)據(jù),因而指令執(zhí)行效率很低可采用多總線方式,同時(shí)在多個(gè)總線上傳送不同數(shù)據(jù),提高效率例如:三總線數(shù)據(jù)通路總線A、B分別傳送兩個(gè)源操作數(shù),總線C傳送結(jié)果單總線中的暫存器Y和Z在此可取消,Why?采用雙口通用寄存器組如何實(shí)現(xiàn):R[R3]←R[R1]opR[R2]R1outA,R2outB,op,R3inC只要一個(gè)時(shí)鐘周期(節(jié)拍)即可!目前大都采用流水線方式執(zhí)行指令,單總線或三總線的總線式數(shù)據(jù)通路很難實(shí)現(xiàn)指令流水執(zhí)行。

ZY以下以MIPS指令系統(tǒng)為例介紹非總線式CPU的設(shè)計(jì)。三個(gè)總線各自傳不同數(shù)據(jù),不會(huì)發(fā)生沖突,故無(wú)需Y和Z通用寄存器組復(fù)習(xí):MIPS的三種指令類型ADDandSUBSTRACTaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtargetoptarget

address026316

bits26bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoprsrtimmediate0162126316bits16bits5bits5

bits這些指令具有代表性!有算術(shù)運(yùn)算、邏輯運(yùn)算;有RR型、RI型;有訪存指令;有條件轉(zhuǎn)移、無(wú)條件轉(zhuǎn)移。本講目標(biāo):實(shí)現(xiàn)以上7條指令對(duì)應(yīng)的數(shù)據(jù)通路!教材中實(shí)現(xiàn)了11條指令,可將7條指令和11條指令的數(shù)據(jù)通路進(jìn)行對(duì)比,以深入理解設(shè)計(jì)原理。大家記得是哪三種類型?R-Type、I-Type、J-Type設(shè)計(jì)處理器的步驟第一步:分析每條指令的功能,并用RTL(RegisterTransferLanguage)

來(lái)表示。第二步:根據(jù)指令的功能給出所需的元件,并考慮如何將他們互連。第三步:確定每個(gè)元件所需控制信號(hào)的取值。第四步:匯總所有指令所涉及到的控制信號(hào),生成一張反映指令與控制信 號(hào)之間關(guān)系的表。第五步:根據(jù)表得到每個(gè)控制信號(hào)的邏輯表達(dá)式,據(jù)此設(shè)計(jì)控制器電路。

處理器設(shè)計(jì)涉及到數(shù)據(jù)通路的設(shè)計(jì)和控制器的設(shè)計(jì)數(shù)據(jù)通路中有兩種元件

操作元件:由組合邏輯電路實(shí)現(xiàn)

存儲(chǔ)(狀態(tài))元件:由時(shí)序邏輯電路實(shí)現(xiàn)ISA確定后,進(jìn)行處理器設(shè)計(jì)的大致步驟RTL:TheADDInstruction(加法指令)add rd,rs,rtM[PC] 從PC所指的內(nèi)存單元中取指令R[rd]←

R[rs]+R[rt] 從rs、rt

所指的寄存器中取數(shù)后相加。若結(jié)果不溢出,則將結(jié)果送rd所指的寄存器中;若結(jié)果溢出,則不送結(jié)果,并轉(zhuǎn)到“溢出處理程序”執(zhí)行。PC←PC+4 PC加4,使PC指向下一條指令oprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsRTL:TheLoadInstruction(裝入指令)lw

rt,rs,imm16M[PC] (同加法指令)Addr

R[rs]+SignExt(imm16)計(jì)算數(shù)據(jù)地址(立即數(shù)要進(jìn)行符號(hào)擴(kuò)展)R[rt]←

M[Addr] 從存儲(chǔ)器中取出數(shù)據(jù),裝入到寄存器中PC←PC+4

(同加法指令)與R-type加法指令相比,更復(fù)雜!oprsrtimm160162126316bits16bits5bits5

bits取指令部件(InstructionFetchUnit)每條指令都有的公共操作:取指令:M[PC]更新PC:PC←PC+4轉(zhuǎn)移(BranchandJump)時(shí),PC內(nèi)容再次被更新為“轉(zhuǎn)移目標(biāo)地址”32Instruction

WordAddressInstructionMemoryPCClkNext

AddrLogic順序:先取指令,再改PC的值(具體實(shí)現(xiàn)時(shí),可以并行)絕不能先改PC的值,再取指令下地址邏輯取指后,各指令功能不同,數(shù)據(jù)通路中信息流動(dòng)過(guò)程也不同下面分別對(duì)每條指令進(jìn)行相應(yīng)數(shù)據(jù)通路的設(shè)計(jì)取指令部件加法和減法指令(R-type類型)實(shí)現(xiàn)目標(biāo)(7條指令):ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget首先考慮add和sub指令(R-Type指令的代表)oprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoprsrtimmediate0162126316bits16bits5bits5

bitsoptarget

address026316

bits26bitsRR(R-type)型指令的數(shù)據(jù)通路功能:R[rd]←

R[rs]opR[rt],如:addrd,rs,rt32ResultALUctrClkbusWRegWr3232busA32busB555RwRaRb3232-bitRegistersrsrtrdALU不考慮公共操作,僅R-Type指令執(zhí)行階段的數(shù)據(jù)通路如下:ALUctr,RegWr:指令譯碼后產(chǎn)生的控制信號(hào)Ra,Rb,Rw

分別對(duì)應(yīng)指令的rs,rt,rd“addrd,rs,rt”控制信號(hào)為?ALUctr=add,RegWr=1oprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bits溢出時(shí),不寫結(jié)果并需轉(zhuǎn)異常處理程序溢出寄存器組結(jié)構(gòu)帶立即數(shù)的邏輯指令(ori指令)實(shí)現(xiàn)目標(biāo)(7條指令):ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget2.考慮ori

指令(I-Type指令和邏輯運(yùn)算指令的代表)oprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoprsrtimmediate0162126316bits16bits5bits5

bitsoptarget

address026316

bits26bitsRTL:TheORImmediateInstructionori

rt,rs,imm16M[PC] 取指令(公共操作,取指部件完成)R[rt]←

R[rs]orZeroExt(imm16)

立即數(shù)零擴(kuò)展,并與rs內(nèi)容做“或”運(yùn)算PC←PC+4計(jì)算下地址(公共操作,取指部件完成)imm16016153116

bits16bits0000000000000000零擴(kuò)展ZeroExt(imm16)思考:應(yīng)在前面數(shù)據(jù)通路上加哪些元件和連線?用何控制信號(hào)?邏輯運(yùn)算,立即數(shù)為邏輯數(shù)oprsrtimm160162126316bits16bits5bits5

bits帶立即數(shù)的邏輯指令的數(shù)據(jù)通路R[rt]←

R[rs]opZeroExt[imm16]] Example:ori

rt,rs,imm1632ResultALUctrClkbusWRegWr3232busA32busB555RwRaRb3232-bitRegistersRsDon’t

Care(Rt)ALUR-Type類型的結(jié)果寫入RdR-Type的操作數(shù)來(lái)自busB應(yīng)加蘭色部分,為什么?Ori指令的控制信號(hào):RegDst=?;RegWr=?;ALUctr=?;ALUSrc=?Ori指令的控制信號(hào):RegDst=1;RegWr=1;ALUSrc=1;ALUctr=orRtRdRegDstMux01ZeroExtMux1632imm16ALUSrc01oprsrtimm160162126316bits16bits5bits5

bits訪存指令中的數(shù)據(jù)裝入指令(lw)實(shí)現(xiàn)目標(biāo)(7條指令):ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget3.考慮lw

指令(訪存指令的代表)oprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoprsrtimmediate0162126316bits16bits5bits5

bitsoptarget

address026316

bits26bitsRTL:TheLoadInstructionlw

rt,rs,imm16M[PC] 取指令(公共操作,取指部件完成)Addr

R[rs]+SignExt(imm16)計(jì)算存儲(chǔ)單元地址(符號(hào)擴(kuò)展!)R[rt]←M[Addr] 裝入數(shù)據(jù)到寄存器rt中PC←PC+4 計(jì)算下地址(公共操作,取指部件完成)immediate016153116

bits16

bits0000000000000000000161531immediate16

bits16

bits

11111111111111111符號(hào)擴(kuò)展(為什么不是零擴(kuò)展?):思考:應(yīng)在原數(shù)據(jù)通路上加哪些元件和連線?用何控制信號(hào)?立即數(shù)用補(bǔ)碼表示oprsrtimmediate0162126316bits16bits5bits5

bits裝入(lw)指令的數(shù)據(jù)通路R[rt]←M[R[rs]+SignExt[imm16]] lw

rt,rs,imm1632ALUctrClkbusWRegWr3232busA32busB555RwRaRb32

32-bitRegistersRsRtDon’t

Care(Rt)RdRegDstMuxMux3216imm16ALUSrcALU加蘭色部分。為什么?控制信號(hào)RegDst,RegWr,ALUctr,ExtOp,ALUSrc,MemWr,MemtoReg

各取何值?01ExtExtOpMuxMemtoRegClkData

InWrEn32

AdrDataMemory32MemWr01RegDst=1,RegWr=1,ALUctr=addu,ExtOp=1,ALUSrc=1,MemWr=0,MemtoReg=10:零擴(kuò)展,1:符號(hào)擴(kuò)展01oprsrtimm160162126316bits16bits5bits5

bits訪存指令中的存數(shù)指令(sw)實(shí)現(xiàn)目標(biāo)(7條指令):ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget4.考慮sw

指令(訪存指令的代表)oprsrtimmediate0162126316bits16bits5bits5

bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoptarget

address026316

bits26bitsRTL:TheStoreInstructionsw

rt,rs,imm16M[PC] 取指令(公共操作,取指部件完成)Addr

R[rs]+SignExt(imm16)計(jì)算存儲(chǔ)單元地址(符號(hào)擴(kuò)展?。㎝em[Addr]←

R[rt] 寄存器rt中的內(nèi)容存到內(nèi)存單元中PC←PC+4 計(jì)算下地址(公共操作,取指部件完成)

oprsrtimm160162126316bits16bits5bits5

bits思考:應(yīng)在原數(shù)據(jù)通路上加哪些元件和連線?用何控制信號(hào)?存數(shù)(sw)指令的數(shù)據(jù)通路M[R[rs]+SignExt[imm16]←

R[rt]] Example:sw

rt,rs,imm1632ALUctrClkbusWRegWr3232busA32busB555RwRaRb32

32-bitRegistersRsRtRtRdRegDstExtMuxMux3216imm16ALUSrcExtOpMuxMemtoRegClkDataInWrEn32

AdrDataMemory32MemWrALU0101加蘭色部分。為什么?控制信號(hào)RegDst,RegWr,ALUctr,ExtOp,ALUSrc,MemWr,MemtoReg

各取何值?RegDst=x,RegWr=0,ALUctr=addu,ExtOp=1,ALUSrc=1,MemWr=1,MemtoReg=x01oprsrtimm160162126316bits16bits5bits5

bits分支(條件轉(zhuǎn)移)指令(相等轉(zhuǎn)移:beq)實(shí)現(xiàn)目標(biāo)(7條指令):ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget5.考慮beq指令(條件轉(zhuǎn)移指令的代表)oprsrtimmediate0162126316bits16bits5bits5

bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoptarget

address026316

bits26bitsRTL:TheBranchInstructionbeq

rs,rt,imm16M[PC] 取指令(公共操作,取指部件完成)Cond

R[rs]-R[rt] 做減法比較rs和rt中的內(nèi)容if(CONDeq0) 計(jì)算下地址(根據(jù)比較結(jié)果,修改PC)PC←PC+4+(SignExt(imm16)x4) elsePC←PC+4思考:立即數(shù)的含義是什么?是相對(duì)指令數(shù)還是相對(duì)單元數(shù)?應(yīng)在原數(shù)據(jù)通路上加哪些元件和連線?用什么控制信號(hào)來(lái)控制?立即數(shù)用補(bǔ)碼表示oprsrtimm160162126316bits16bits5bits5

bits條件轉(zhuǎn)移指令的數(shù)據(jù)通路beq

rs,rt,imm16 WeneedtocompareRsandRt!ALUctrClkbusWRegWr3232busA32busB555RwRaRb32

32-bitRegistersRsRtRtRdRegDstExtMuxMux3216imm16ALUSrcExtOpALUPCClkNext

AddrLogic16imm16BranchToInstructionMemoryZero思考:下址邏輯如何設(shè)計(jì)?RegDst,RegWr,ALUctr,ExtOp,ALUSrc,MemWr,MemtoReg,Branch各取何值?RegDst=x,RegWr=0,ALUctr=subu,ExtOp=x,ALUSrc=0,MemWr=0,MemtoReg=x,Branch=10101oprsrtimm160162126316bits16bits5bits5

bits下地址計(jì)算邏輯的設(shè)計(jì)PC是一個(gè)32位地址:順序執(zhí)行時(shí):PC<31:0>=PC<31:0>+4轉(zhuǎn)移執(zhí)行時(shí):PC<31:0>=PC<31:0>+4+SignExt[Imm16]X4MIPS按字節(jié)編址,每條指令為32位,占4個(gè)字節(jié),故PC的值總是4的倍數(shù),即后兩位為00,因此,PC只需要30位即可。下地址計(jì)算邏輯簡(jiǎn)化為:

順序執(zhí)行時(shí):PC<31:2>=PC<31:2>+1轉(zhuǎn)移執(zhí)行時(shí):PC<31:2>=PC<31:2>+1+SignExt[Imm16]取指令時(shí):

指令地址=PC<31:2>串接“00”PC采用30位后,其轉(zhuǎn)移地址計(jì)算邏輯變得更加簡(jiǎn)單。采用32位PC時(shí),可用左移2位實(shí)現(xiàn)“X4”操作,計(jì)算轉(zhuǎn)移地址用2個(gè)加法器!可以用更簡(jiǎn)便的方式實(shí)現(xiàn)如下:下址邏輯設(shè)計(jì)Usinga30-bitPC:順序執(zhí)行時(shí):PC<31:2>=PC<31:2>+1轉(zhuǎn)移執(zhí)行時(shí):PC<31:2>=PC<31:2>+1+SignExt[Imm16]取指令時(shí):

指令地址=PC<31:2>concat“00”3030SignExt3016imm16Mux01Adder“1”PCClkAdder3030BranchZeroAddr<31:2>InstructionMemoryAddr<1:0>“00”32Instruction<31:0>Instruction<15:0>30先根據(jù)當(dāng)前PC取指令,計(jì)算的下條指令地址在下一個(gè)時(shí)鐘到來(lái)后才能寫入PC!標(biāo)志位ZF,由ALU產(chǎn)生!為什么這里沒(méi)有用“ALU”而是用“Adder”?“ALU”和“Adder”有什么差別?無(wú)條件轉(zhuǎn)移指令實(shí)現(xiàn)目標(biāo)(7條指令):ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget6.考慮Jump指令(無(wú)條件轉(zhuǎn)移指令的代表)oprsrtimmediate0162126316bits16bits5bits5

bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoptarget

address026316

bits26bitsRTL:TheJumpInstructionj targetM[PC] 取指令(公共操作,取指部件完成)PC<31:2>←PC<31:28>串接target<25:0>計(jì)算目標(biāo)地址思考:應(yīng)在原數(shù)據(jù)通路上加哪些元件和連線?用什么控制信號(hào)來(lái)控制?想一想:跳轉(zhuǎn)指令的轉(zhuǎn)移范圍有多大?是當(dāng)前指令后面的0x0000000~0xFFFFFFC處?不對(duì)!它不是相對(duì)尋址,而是絕對(duì)尋址FFFF

FFFFF000

0000EFFF

FFFFE000

0000AFFF

FFFFA000

00000FFF

FFFF0000

0000j

targetoptarget

address026316

bits26bitsInstructionFetchUnit:取指令部件3030SignExt3016imm16Mux01Adder“1”PCClkAdder3030BranchZero“00”Addr<31:2>InstructionMemoryAddr<1:0>32j targetPC<31:2>←PC<31:28>concattarget<25:0>Instruction<15:0>Instruction<31:0>imm16、Target、…30264Mux10Target30JumpInstruc<25:0>這是“取指部件”的完整設(shè)計(jì)3個(gè)輸入:jump,Branch,Zero1個(gè)輸出:指令字PC的改變?cè)谙聜€(gè)Clk到達(dá)后發(fā)生!RegDst,RegWr,ALUctr,ExtOp,ALUSrc,MemWr,MemtoReg,Branch,Jump

各取何值?RegDst=ExtOp=ALUSrc=MemtoReg=ALUctr=x,

RegWr=0,

MemWr=0,Branch=0,Jump=1TheMIPSSubset(考察實(shí)現(xiàn)以下指令的數(shù)據(jù)通路)ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:ori

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget所有指令的數(shù)據(jù)通路都已設(shè)計(jì)好,合起來(lái)的數(shù)據(jù)通路是什么樣的?oprsrtimmediate0162126316bits16bits5bits5

bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoptarget

address026316

bits26bitsPuttingitAllTogether:ASingleCycleDatapath32ALUctrClkbusWRegWr3232busA32busB555RwRaRb

3232

bitRegistersRsRtRtRdRegDstExtMuxMux3216imm16ALUSrcExtOpMuxMemtoRegClkDataInWrEn32AdrDataMemory32MemWrALUInstructionFetch

UnitClkZeroInstruction<31:0>JumpBranch010101<21:25><16:20><11:15><0:15>Imm16RdRtRs指令執(zhí)行結(jié)果總是在下個(gè)時(shí)鐘到來(lái)時(shí)開(kāi)始保存在寄存器或存儲(chǔ)器或

PC

中!下一講考慮:如何產(chǎn)生控制信號(hào)!(控制器的設(shè)計(jì)內(nèi)容)數(shù)據(jù)通路中的關(guān)鍵路徑(Load操作)記?。杭拇嫫鹘M和理想存儲(chǔ)器的定時(shí)方式寫操作時(shí),作為時(shí)序邏輯電路。即:時(shí)鐘到達(dá)前,輸入需setup;到達(dá)后經(jīng)“Clk-to-Q”,寫入數(shù)據(jù)到達(dá)輸出端讀操作時(shí),作為組合邏輯電路。即:地址有效后經(jīng)過(guò)“accesstime”,輸出開(kāi)始有效Clk5RwRaRb32

32-bitRegistersRdALUClkDataInDataOutDataAddressIdealDataMemoryInstructionbusInstruction

AddressIdealInstructionMemoryClkPC5Rs5Rt16Imm32323232CriticalPath(LoadOperation)=PC’sproptime(Clk-to-Q)+InstructionMemory’sAccessTime+RegisterFile’sAccessTime+ALUtoPerforma32-bitAdd+DataMemoryAccessTime+SetupTimeforRegisterFileWrite+ClockSkewLoad操作:R[Rt]←M[R[Rs]+Imm16]第一講小結(jié)CPU設(shè)計(jì)直接決定了時(shí)鐘周期寬度和CPI,所以對(duì)計(jì)算機(jī)性能非常重要!CPU主要由數(shù)據(jù)通路和控制器組成數(shù)據(jù)通路:實(shí)現(xiàn)指令集中所有指令的操作功能控制器:控制數(shù)據(jù)通路中各部件進(jìn)行正確操作數(shù)據(jù)通路中包含兩種元件操作元件(組合電路):ALU、MUX、Ext.、Adder、Reg/MemRead等狀態(tài)/存儲(chǔ)元件(時(shí)序電路):PC、Reg/MemWrite數(shù)據(jù)通路的定時(shí)數(shù)據(jù)通路中的操作元件沒(méi)有存儲(chǔ)功能,其操作結(jié)果必須寫到存儲(chǔ)元件中在時(shí)鐘到達(dá)后clk-to-Q時(shí)存儲(chǔ)元件開(kāi)始更新?tīng)顟B(tài)MIPS指令集的一個(gè)子集作為CPU的實(shí)現(xiàn)目標(biāo)公共操作:取指令和PC+4下址計(jì)算:30位PC,三路選擇:順序、Branch(結(jié)合標(biāo)志Zero)、JumpR型:ALU兩個(gè)操作數(shù)來(lái)自rs和rt,結(jié)果寫到rd訪存:符號(hào)擴(kuò)展,數(shù)據(jù)在rt和主存單元中交換立即數(shù):0擴(kuò)展后的操作數(shù)送到ALU的一個(gè)輸入端第二講單周期控制器的設(shè)計(jì)考察每條指令在數(shù)據(jù)通路中的執(zhí)行過(guò)程和涉及到的控制信號(hào)的取值公共操作:取指令和計(jì)算下址PCR-Type指令(add/sub)立即數(shù)指令(ori)訪存指令(lw/sw)分支指令(beq)跳轉(zhuǎn)指令(j)匯總各指令的控制信號(hào)取值分兩類控制信號(hào):直接送往數(shù)據(jù)通路/送往局部控制單元分析ALU操作對(duì)應(yīng)的控制信號(hào)與func字段之間的關(guān)系設(shè)計(jì)ALU局部控制單元設(shè)計(jì)主控制單元主要內(nèi)容TheBigPicture:WhereareWeNow?TheFiveClassicComponentsofaComputerControlDatapathMemoryProcessorInputOutput下一個(gè)目標(biāo):設(shè)計(jì)單周期數(shù)據(jù)通路的控制器。設(shè)計(jì)方法:根據(jù)每條指令的功能,分析控制信號(hào)的取值,并在表中列出。根據(jù)列出的指令和控制信號(hào)的關(guān)系,寫出每個(gè)控制信號(hào)的邏輯表達(dá)式。Add/Sub操作開(kāi)始時(shí)取指部件中的動(dòng)作3030SignExt3016imm16Mux01Adder“1”PCAdder3030Branch

=

previousZero=

previous“00”Addr<31:2>InstructionMemoryAddr<1:0>32Mux10264PC<31:28>Target30取指令:Instruction←M[PC]所有指令都相同Jump=previousInstruction<15:0>Instruction<31:0>30Instr<25:0>Clk新指令還沒(méi)有取出譯碼,所以控制信號(hào)的值還是原來(lái)指令的舊值。新指令還沒(méi)有執(zhí)行,所以標(biāo)志也為舊值。取出指令的第31-26位作為操作碼首先被譯碼。op=000000,則為R-type指令取指部件由舊控制信號(hào)控制,會(huì)不會(huì)有問(wèn)題?沒(méi)有問(wèn)題!Why?因?yàn)樵谙聜€(gè)Clk到來(lái)之前PC輸入端的值不會(huì)寫入,只要保證下個(gè)Clk來(lái)之前能產(chǎn)生正確的PC即可!指令譯碼后R型指令(Add/Sub)操作過(guò)程32ALUctr

=AddorSubClkbusWRegWr

=13232busA32busB555RwRaRb32

32-bitRegistersRsRtRtRdRegDst

=1ExtMuxMux3216imm16ALUSrc

=0ExtOp

=xMuxMemtoReg=0ClkData

InWrEn32AdrDataMemory32MemWr

=0ALUInstructionFetch

UnitClkZeroInstruction<31:0>Jump=0Branch

=0R[rd]←

R[rs]+/-R[rt]010101<21:25><16:20><11:15><0:15>Imm16RdRtRsoprsrtrdshamtfunc061116212631R型指令(Add/Sub)最后階段取指部件中的動(dòng)作3030SignExt3016imm16Mux01Adder“1”PCClkAdder3030Branch

=0Zero=x“00”Addr<31:2>InstructionMemoryAddr<1:0>32Mux10264PC<31:28>Target30PC←PC+4除BranchandJump以外的指令都相同Jump=0Instruction<15:0>Instruction<31:0>30Instruction<25:0>因?yàn)樾碌目刂菩盘?hào)保證了正確的PC值的產(chǎn)生,在足夠長(zhǎng)的時(shí)間后,下個(gè)時(shí)鐘Clk到來(lái)!Register-Register(R型指令)Timing32ResultALUctrClkbusWRegWr3232busA32busB555RwRaRb3232-bitRegistersRsRtRdALUClkPCRs,Rt,Rd,Op,FuncClk-to-QALUctrInstruction

MemoryAccessTimeOldValueNewValueRegWrOldValueNew

ValueDelaythroughControlLogicbusA,BRegister

FileAccessTimeOldValueNew

ValuebusWALU

DelayOldValueNewValueOld

ValueNew

ValueNew

ValueOld

ValueRegisterWriteOccursHerePC+4PC+4

PCori

指令譯碼后的執(zhí)行過(guò)程32ALUctr

=orClkbusWRegWr

=13232busA32busB555RwRaRb3232-bitRegistersRsRtRtRdRegDst

=0ExtMuxMux3216imm16ALUSrc

=1ExtOp

=0MuxMemtoReg

=0ClkData

InWrEn32AdrDataMemory32MemWr

=0ALUInstructionFetch

UnitClkZeroInstruction<31:0>Jump

=0Branch

=0R[rt]←

R[rs]orZeroExt[Imm16]010101<21:25><16:20><11:15><0:15>Imm16RdRtRsoprsrtimmediate016212631Load指令譯碼后的執(zhí)行過(guò)程32ALUctr=adduClkbusWRegWr

=13232busA32busB555RwRaRb3232-bitRegistersRsRtRtRdRegDst

=0ExtMuxMux3216imm16ALUSrc

=1ExtOp=1MuxMemtoReg

=1ClkDataInWrEn32AdrDataMemory32MemWr

=0ALUInstructionFetch

UnitClkZeroInstruction<31:0>Jump

=0Branch

=0010101<21:25><16:20><11:15><0:15>Imm16RdRtRsR[rt]←DataMemory{R[rs]+SignExt[imm16]}oprsrtimmediate016212631ALUtcr應(yīng)為add還是addu?差別在于溢出標(biāo)志!例:實(shí)現(xiàn)某11條MIPS指令的ALU該ALU能實(shí)現(xiàn)哪些運(yùn)算?add,sub,addu,subu,or,slt,sltulw/sw指令應(yīng)是add/addu?beq指令應(yīng)是sub/subu?P.243圖6.15定點(diǎn)整數(shù)ALU!ALUctr=add/sub時(shí),OVctr=1ALUctr=其余運(yùn)算時(shí),OVctr=0addusubuALUctr=sub/subu/slt/sltu時(shí),SUBctr=1,其余

SUBctr=0ALUctr=slt,SIGctr=1ALUctr=sltu,SIGctr=0其余情況,任意ALUctr與ALU內(nèi)部控制信號(hào)的關(guān)系SUBctr=ALUctr<2>OVctr=!ALUctr<1>&ALUctr<0>SIGctr=ALUctr<0>OPctr<1>=ALUctr<2>&ALUctr<1>OPctr<0>=!ALUctr<2>&

ALUctr<1>&!ALUctr<0>Store指令譯碼后的執(zhí)行過(guò)程32ALUctr=adduClkbusWRegWr=03232busA32busB555RwRaRb32

32-bitRegistersRsRtRtRdRegDst

=xExtMuxMux3216imm16ALUSrc

=1ExtOp

=1MuxMemtoReg=xClkData

InWrEn32AdrDataMemory32MemWr

=1ALUInstructionFetch

UnitClkZeroInstruction<31:0>Jump

=0Branch=0010101<21:25><16:20><11:15><0:15>Imm16RdRtRsM{R[rs]+SignExt[imm16]}←

R[rt]oprsrtimmediate016212631Branch指令譯碼后的執(zhí)行過(guò)程32ALUctr=subuClkbusWRegWr=03232busA32busB555RwRaRb3232-bitRegistersRsRtRtRdRegDst=xExtMuxMux3216imm16ALUSrc

=0ExtOp

=xMuxMemtoReg=xClkDataInWrEn32AdrDataMemory32MemWr

=0ALUInstructionFetch

UnitClkZeroInstruction<31:0>Jump=0Branch=1010101<21:25><16:20><11:15><0:15>Imm16RdRtRsif(R[rs]-R[rt]==0)thenZero←1;elseZero←0oprsrtimmediate016212631Branch指令最后階段取指部件中的動(dòng)作3030SignExt3016imm16Mux01Adder“1”PCClkAdder3030Branch=1Zero=1“00”Addr<31:2>InstructionMemoryAddr<1:0>32Mux10264PC<31:28>Target30Jump

=0Instruction<15:0>Instruction<31:0>30Instruction<25:0>if(Zero==1)thenPC=PC+4+SignExt[imm16]*4;elsePC=PC+4oprsrtimmediate016212631Jump指令譯碼后的執(zhí)行過(guò)程32ALUctr=xClkbusWRegWr

=03232busA32busB555RwRaRb3232-bitRegistersRsRtRtRdRegDst=xExtMuxMux3216imm16ALUSrc=xExtOp

=xMuxMemtoReg

=xClkData

InWrEn32AdrDataMemory32MemWr=0ALUInstructionFetch

UnitClkZeroInstruction<31:0>Jump

=1Branch

=0010101<21:25><16:20><11:15><0:15>Imm16RdRtRsIFU中目標(biāo)地址送PC,其他什么都不做(只要保證存儲(chǔ)部件不發(fā)生寫的動(dòng)作)optargetaddress02631如何保證存儲(chǔ)部件不發(fā)生寫?使相應(yīng)的寫使能信號(hào)為0!Jump指令結(jié)束前IFU中的動(dòng)作3030SignExt3016imm16Mux01Adder“1”PCClkAdder3030Branch=

0Zero=x“00”Addr<31:2>InstructionMemoryAddr<1:0>32Mux10264PC<31:28>Target30PC←PC<31:29>concattarget<25:0>concat“00”Jump=1Instruction<15:0>Instruction<31:0>30Instruction<25:0>optarget

address02631綜合分析結(jié)果,得到如下指令與控制信號(hào)的關(guān)系表addsuborilwswbeqjumpRegDstALUSrcMemtoRegRegWriteMemWriteBranchJumpExtOpALUctr<2:0>1001000xadd1001000xsub01010000or01110001addux1x01001addux0x0010x

subuxxx0001xxxxoptarget

addressoprsrtrdshamtfunc061116212631oprsrtimmediateR-typeI-typeJ-typeadd,subori,lw,sw,beqjumpfuncop00000000

000000

110110001110101100010000

001010000010

0010與func字段無(wú)關(guān)!主控制單元和ALU局部控制單元R-typeorilwswbeqjumpRegDstALUSrcMemtoRegRegWriteMemWriteBranchJumpExtOpALUctr1001000xAdd/Sub01010000Or01110001Addux1x01001Addux0x0010xSubuxxx0001xxxxop00

000000

110110

001110

101100

010000

0010MIPS指令格式中指示操作性質(zhì)的字段有兩個(gè):op(主控)和func(ALU局控)。ALUctr的值:非R型指令時(shí),取決于ALUop;R型指令時(shí),取決于func。R、I-ori、I-lw/sw、I-beq、J3ALUALUop有5種情況,N至少應(yīng)為3!哪5種?funcMainControlop6ALUControl(Local)N=?6ALUopALUctrR-Type01ALUop的邏輯表達(dá)式ALUop的編碼定義如下:R型指令時(shí),ALUctr與func有關(guān),需建立ALUctr與func之間對(duì)應(yīng)關(guān)系funcMainControlop6ALUControl(Local)N=?6ALUopALUctrR-Type01ALUop<2>=beq=!op<5>&!op<4>&!op<3>&op<2>&!op<1>&!op<0>(op=000100)ALUop<1>=ori=!op<5>&!op<4>&op<3>&op<2>&!op<1>&op<0>(op=001101)ALUop<0>=R-type=!op<5>&!op<4>&!op<3>&!op<2>&!op<1>&!op<0>(op=000000)R-typeorilwswbeqjump

運(yùn)算由func指定oradduaddu

subuxxxALUop<2:0>xx1010000000

100xxx指令A(yù)LU局部控制器邏輯表達(dá)式ALUctr<0>=!func<3>&!func<2>&!func<1>&!func<0>+!func<2>&func<1>&!func<0>func<5:0>Instruction

Operation10000010

0010100100100101101010addsubandorset-on-less-thanALUctr<2:0>ALU

Operation001101010111AddSubAndOr

SltALUALUctr<1>=!func<3>&func<2>&!func<1>&func<0>+

func<3>&!func<2>&func<1>&!func<0>

ALUctr<2>=!func<2>&func<1>&!func<0>funcMainControlop6ALUControl(Local)N=?6ALUopALUctrR-Type01000000rsrtrdshamtfunc061116212631R-type主控制單元的真值表R-typeorilwswbeqjumpRegDstALUSrcMemtoRegRegWriteMemWriteBranchJumpExtOpALU運(yùn)算1001000x“R-type”01010000Or01110001Addux1x01001Addux0x0010xSubuxxx0001xxxxop00

000000

110110

001110

101100

0100000010ALUop<2>x0001xALUop

<1>x1000xALUop<0>10000xMainControlop6ALUControl(Local)func36ALUopALUctr3RegDstALUSrc:主控單元的輸入主控單元的輸出R-type100000R-Type10考察每個(gè)控

溫馨提示

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

評(píng)論

0/150

提交評(píng)論