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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

EnableNNDataOutClkbusWWrite

Enable3232busA32busB555RWRARB3232-bitRegisters寄存器組的內部結構busWCD031MUXMXURegister0Register1Register

30Register

31WriteEnableRW32-to-1DecoderRARBbusAbusB

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

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

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

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

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

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

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

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

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

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

ZY以下以MIPS指令系統(tǒng)為例介紹非總線式CPU的設計。三個總線各自傳不同數(shù)據(jù),不會發(fā)生沖突,故無需Y和Z通用寄存器組復習: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這些指令具有代表性!有算術運算、邏輯運算;有RR型、RI型;有訪存指令;有條件轉移、無條件轉移。本講目標:實現(xiàn)以上7條指令對應的數(shù)據(jù)通路!教材中實現(xiàn)了11條指令,可將7條指令和11條指令的數(shù)據(jù)通路進行對比,以深入理解設計原理。大家記得是哪三種類型?R-Type、I-Type、J-Type設計處理器的步驟第一步:分析每條指令的功能,并用RTL(RegisterTransferLanguage)

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

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

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

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

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

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

bits5

bitsRTL:TheLoadInstruction(裝入指令)lw

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

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

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

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

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

WordAddressInstructionMemoryPCClkNext

AddrLogic順序:先取指令,再改PC的值(具體實現(xiàn)時,可以并行)絕不能先改PC的值,再取指令下地址邏輯取指后,各指令功能不同,數(shù)據(jù)通路中信息流動過程也不同下面分別對每條指令進行相應數(shù)據(jù)通路的設計取指令部件加法和減法指令(R-type類型)實現(xiàn)目標(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)生的控制信號Ra,Rb,Rw

分別對應指令的rs,rt,rd“addrd,rs,rt”控制信號為?ALUctr=add,RegWr=1oprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

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

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

rs,rt,imm16JUMP:jtarget2.考慮ori

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

bits5

bitsoprsrtimmediate0162126316bits16bits5bits5

bitsoptarget

address026316

bits26bitsRTL:TheORImmediateInstructionori

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

R[rs]orZeroExt(imm16)

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

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

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

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

rt,rs,imm1632ResultALUctrClkbusWRegWr3232busA32busB555RwRaRb3232-bitRegistersRsDon’t

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

bits訪存指令中的數(shù)據(jù)裝入指令(lw)實現(xiàn)目標(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)計算存儲單元地址(符號擴展!)R[rt]←M[Addr] 裝入數(shù)據(jù)到寄存器rt中PC←PC+4 計算下地址(公共操作,取指部件完成)immediate016153116

bits16

bits0000000000000000000161531immediate16

bits16

bits

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

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

rt,rs,imm1632ALUctrClkbusWRegWr3232busA32busB555RwRaRb32

32-bitRegistersRsRtDon’t

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

各取何值?01ExtExtOpMuxMemtoRegClkData

InWrEn32

AdrDataMemory32MemWr01RegDst=1,RegWr=1,ALUctr=addu,ExtOp=1,ALUSrc=1,MemWr=0,MemtoReg=10:零擴展,1:符號擴展01oprsrtimm160162126316bits16bits5bits5

bits訪存指令中的存數(shù)指令(sw)實現(xiàn)目標(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)計算存儲單元地址(符號擴展!)Mem[Addr]←

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

oprsrtimm160162126316bits16bits5bits5

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

R[rt]] Example:sw

rt,rs,imm1632ALUctrClkbusWRegWr3232busA32busB555RwRaRb32

32-bitRegistersRsRtRtRdRegDstExtMuxMux3216imm16ALUSrcExtOpMuxMemtoRegClkDataInWrEn32

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

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

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

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

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

bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoptarget

address026316

bits26bitsRTL:TheBranchInstructionbeq

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

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

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

rs,rt,imm16 WeneedtocompareRsandRt!ALUctrClkbusWRegWr3232busA32busB555RwRaRb32

32-bitRegistersRsRtRtRdRegDstExtMuxMux3216imm16ALUSrcExtOpALUPCClkNext

AddrLogic16imm16BranchToInstructionMemoryZero思考:下址邏輯如何設計?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下地址計算邏輯的設計PC是一個32位地址:順序執(zhí)行時:PC<31:0>=PC<31:0>+4轉移執(zhí)行時:PC<31:0>=PC<31:0>+4+SignExt[Imm16]X4MIPS按字節(jié)編址,每條指令為32位,占4個字節(jié),故PC的值總是4的倍數(shù),即后兩位為00,因此,PC只需要30位即可。下地址計算邏輯簡化為:

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

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

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

rt,rs,imm16LOADandSTORElw

rt,rs,imm16sw

rt,rs,imm16BRANCH:beq

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

bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoptarget

address026316

bits26bitsRTL:TheJumpInstructionj targetM[PC] 取指令(公共操作,取指部件完成)PC<31:2>←PC<31:28>串接target<25:0>計算目標地址思考:應在原數(shù)據(jù)通路上加哪些元件和連線?用什么控制信號來控制?想一想:跳轉指令的轉移范圍有多大?是當前指令后面的0x0000000~0xFFFFFFC處?不對!它不是相對尋址,而是絕對尋址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>這是“取指部件”的完整設計3個輸入:jump,Branch,Zero1個輸出:指令字PC的改變在下個Clk到達后發(fā)生!RegDst,RegWr,ALUctr,ExtOp,ALUSrc,MemWr,MemtoReg,Branch,Jump

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

RegWr=0,

MemWr=0,Branch=0,Jump=1TheMIPSSubset(考察實現(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ù)通路是什么樣的?oprsrtimmediate0162126316bits16bits5bits5

bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5

bits5

bitsoptarget

address026316

bits26bitsPuttingitAllTogether:ASingleCycleDatapath32ALUctrClkbusWRegWr3232busA32busB555RwRaRb

3232

bitRegistersRsRtRtRdRegDstExtMuxMux3216imm16ALUSrcExtOpMuxMemtoRegClkDataInWrEn32AdrDataMemory32MemWrALUInstructionFetch

UnitClkZeroInstruction<31:0>JumpBranch010101<21:25><16:20><11:15><0:15>Imm16RdRtRs指令執(zhí)行結果總是在下個時鐘到來時開始保存在寄存器或存儲器或

PC

中!下一講考慮:如何產(chǎn)生控制信號?。刂破鞯脑O計內容)數(shù)據(jù)通路中的關鍵路徑(Load操作)記?。杭拇嫫鹘M和理想存儲器的定時方式寫操作時,作為時序邏輯電路。即:時鐘到達前,輸入需setup;到達后經(jīng)“Clk-to-Q”,寫入數(shù)據(jù)到達輸出端讀操作時,作為組合邏輯電路。即:地址有效后經(jīng)過“accesstime”,輸出開始有效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]第一講小結CPU設計直接決定了時鐘周期寬度和CPI,所以對計算機性能非常重要!CPU主要由數(shù)據(jù)通路和控制器組成數(shù)據(jù)通路:實現(xiàn)指令集中所有指令的操作功能控制器:控制數(shù)據(jù)通路中各部件進行正確操作數(shù)據(jù)通路中包含兩種元件操作元件(組合電路):ALU、MUX、Ext.、Adder、Reg/MemRead等狀態(tài)/存儲元件(時序電路):PC、Reg/MemWrite數(shù)據(jù)通路的定時數(shù)據(jù)通路中的操作元件沒有存儲功能,其操作結果必須寫到存儲元件中在時鐘到達后clk-to-Q時存儲元件開始更新狀態(tài)MIPS指令集的一個子集作為CPU的實現(xiàn)目標公共操作:取指令和PC+4下址計算:30位PC,三路選擇:順序、Branch(結合標志Zero)、JumpR型:ALU兩個操作數(shù)來自rs和rt,結果寫到rd訪存:符號擴展,數(shù)據(jù)在rt和主存單元中交換立即數(shù):0擴展后的操作數(shù)送到ALU的一個輸入端第二講單周期控制器的設計考察每條指令在數(shù)據(jù)通路中的執(zhí)行過程和涉及到的控制信號的取值公共操作:取指令和計算下址PCR-Type指令(add/sub)立即數(shù)指令(ori)訪存指令(lw/sw)分支指令(beq)跳轉指令(j)匯總各指令的控制信號取值分兩類控制信號:直接送往數(shù)據(jù)通路/送往局部控制單元分析ALU操作對應的控制信號與func字段之間的關系設計ALU局部控制單元設計主控制單元主要內容TheBigPicture:WhereareWeNow?TheFiveClassicComponentsofaComputerControlDatapathMemoryProcessorInputOutput下一個目標:設計單周期數(shù)據(jù)通路的控制器。設計方法:根據(jù)每條指令的功能,分析控制信號的取值,并在表中列出。根據(jù)列出的指令和控制信號的關系,寫出每個控制信號的邏輯表達式。Add/Sub操作開始時取指部件中的動作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新指令還沒有取出譯碼,所以控制信號的值還是原來指令的舊值。新指令還沒有執(zhí)行,所以標志也為舊值。取出指令的第31-26位作為操作碼首先被譯碼。op=000000,則為R-type指令取指部件由舊控制信號控制,會不會有問題?沒有問題!Why?因為在下個Clk到來之前PC輸入端的值不會寫入,只要保證下個Clk來之前能產(chǎn)生正確的PC即可!指令譯碼后R型指令(Add/Sub)操作過程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)最后階段取指部件中的動作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>因為新的控制信號保證了正確的PC值的產(chǎn)生,在足夠長的時間后,下個時鐘Clk到來!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í)行過程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í)行過程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應為add還是addu?差別在于溢出標志!例:實現(xiàn)某11條MIPS指令的ALU該ALU能實現(xiàn)哪些運算?add,sub,addu,subu,or,slt,sltulw/sw指令應是add/addu?beq指令應是sub/subu?P.243圖6.15定點整數(shù)ALU!ALUctr=add/sub時,OVctr=1ALUctr=其余運算時,OVctr=0addusubuALUctr=sub/subu/slt/sltu時,SUBctr=1,其余

SUBctr=0ALUctr=slt,SIGctr=1ALUctr=sltu,SIGctr=0其余情況,任意ALUctr與ALU內部控制信號的關系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í)行過程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í)行過程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指令最后階段取指部件中的動作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í)行過程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中目標地址送PC,其他什么都不做(只要保證存儲部件不發(fā)生寫的動作)optargetaddress02631如何保證存儲部件不發(fā)生寫?使相應的寫使能信號為0!Jump指令結束前IFU中的動作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綜合分析結果,得到如下指令與控制信號的關系表addsuborilwswbeqjumpRegDstALUSrcMemtoRegRegWriteMemWriteBranchJumpExtOpALUctr<2:0>1001000xadd1001000xsub01010000or01110001addux1x01001addux0x0010x

subuxxx0001xxxxoptarget

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

000000

110110001110101100010000

001010000010

0010與func字段無關!主控制單元和ALU局部控制單元R-typeorilwswbeqjumpRegDstALUSrcMemtoRegRegWriteMemWriteBranchJumpExtOpALUctr1001000xAdd/Sub01010000Or01110001Addux1x01001Addux0x0010xSubuxxx0001xxxxop00

000000

110110

001110

101100

010000

0010MIPS指令格式中指示操作性質的字段有兩個:op(主控)和func(ALU局控)。ALUctr的值:非R型指令時,取決于ALUop;R型指令時,取決于func。R、I-ori、I-lw/sw、I-beq、J3ALUALUop有5種情況,N至少應為3!哪5種?funcMainControlop6ALUControl(Local)N=?6ALUopALUctrR-Type01ALUop的邏輯表達式ALUop的編碼定義如下:R型指令時,ALUctr與func有關,需建立ALUctr與func之間對應關系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

運算由func指定oradduaddu

subuxxxALUop<2:0>xx1010000000

100xxx指令ALU局部控制器邏輯表達式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運算1001000x“R-type”01010000Or01110001Addux1x01001Addux0x0010xSubuxxx0001xxxxop00

000000

110110

001110

101100

0100000010ALUop<2>x0001xALUop

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

溫馨提示

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

評論

0/150

提交評論