第5章單周期CPU及其Verilog HDL設(shè)計(jì)_第1頁
第5章單周期CPU及其Verilog HDL設(shè)計(jì)_第2頁
第5章單周期CPU及其Verilog HDL設(shè)計(jì)_第3頁
第5章單周期CPU及其Verilog HDL設(shè)計(jì)_第4頁
第5章單周期CPU及其Verilog HDL設(shè)計(jì)_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章單周期CPU及其VerilogHDL設(shè)計(jì)天道酬勤CPU的構(gòu)成

(ControlUnit)ALUCPU

(Datapath)

...I/O接口c寄存器堆多路選擇器計(jì)算機(jī)存儲器控制部件數(shù)據(jù)路徑單周期CPU

單周期(Single-Cycle)CPU執(zhí)行一條指令用一個時鐘周期(最簡單的執(zhí)行方式)Clock時鐘上升沿(0到1的變化)下降沿c一個周期指令1在時鐘上升沿保存指令的結(jié)果和下一條指令的地址指令2指令3指令45.1

執(zhí)行指令所需的硬件電路—讀取指令程序計(jì)數(shù)器的值作為地址從存儲器中取指令—分析指令—按指令規(guī)定內(nèi)容執(zhí)行指令—檢查有無中斷請求若無,則轉(zhuǎn)入下一條指令的執(zhí)行過程形成下一條指令地址

指令的執(zhí)行過程取指令執(zhí)行指令指令例子:ADDR6,R1,R2;R6?R1+R2CPU和存儲器

CPU PC ALU存儲器指令寄存器控制部件地址例:lwr24,100(r15);r24<--memory[r15+100]從寄存器堆讀出寄存器15中的數(shù)據(jù)

該數(shù)據(jù)與立即數(shù)100相加1.2.3.4.相加的結(jié)果作為存儲器地址,從存儲器中讀出數(shù)據(jù)把該數(shù)據(jù)寫入寄存器24,把PC+4寫入PC字節(jié)地址

0:1:2:3:4:5:6:7:

5.PC+4?為什么?

PCPC+4指令1(32位指令2(32位))

88888888c

指令的執(zhí)行過程根據(jù)程序計(jì)數(shù)器,從存儲器取出指令MIPS指令格式

op6bits

rs5bits

rt5bits

Imm16bits

op6bits

rs5bits

rt5bits

rd5bitsfunct6bits

op6bits

addr26bitsIFormatRFormatJFormat

sa5bits3120262521161501110653120262521161503126250(rs,rt:RegisterNumbers,imm:Immediate)(rs,rt,rd:RegisterNumbers,sa:ShiftAmount)(addr:TargetAddress)c20MIPS指令addsubandorxorsllsrlsrajraddiandiorixorilwswbeqbneluijjalrd,rs,rtrd,rs,rtrd,rs,rtrd,rs,rtrd,rs,rtrd,rt,sard,rt,sard,rt,sarsrt,rs,immrt,rs,immrt,rs,immrt,rs,immrt,imm(rs)rt,imm(rs)rs,rt,immrs,rt,immrt,immaddraddr;;;;;;;;;;;;;;;;;;;;rd<--rs+rtrd<--rs-rtrd<--rs&rtrd<--rs|rtrd<--rs?rtrd<--rt<<sard<--rt>>sa(logical)rd<--rt>>sa(arithmetic)PC<--rsrt<--rs+(sign)immrt<--rs&(zero)immrt<--rs|(zero)immrt<--rs?(zero)immrt<--memory[rs+(sign)imm]memory[rs+(sign)imm]<--rtif(rs==rt)PC<--PC+4+(sign)imm<<2if(rs!=rt)PC<--PC+4+(sign)imm<<2rt<--imm<<16PC<--(PC+4)[31..28],addr<<2$31<--PC+4;PC<--(PC+4)[31..28],addr<<2c20MIPS指令sa0000000000000000000000000sasasa00000func100000100010100100100101100110000000000010000011001000op000000000000000000000000000000000000000000000000000000op001000001100001101001110100011101011000100000101001111rsrsrsrsrsrs000000000000000rsrsrsrsrsrsrsrsrsrs00000rtrtrtrtrtrtrtrtrt00000rtrtrtrtrtrtrtrtrtrtrdrdrdrdrdrdrdrdrd00000immimmimmimmimmimmimmimmimmimm;;;;;;;;;;;;;;;;;;;;Rformatinstructionsaddrd,rs,rtsubrd,rs,rtandrd,rs,rtorrd,rs,rtxorrd,rs,rtsllrd,rt,sasrlrd,rt,sasrard,rt,sajrrsIformatinstructionsaddirt,rs,immandirt,rs,immorirt,rs,immxorirt,rs,immlwrt,imm(rs)swrt,imm(rs)beqrs,rt,immbners,rt,immluirt,immop000010000011addraddraddr;;;Jformatinstructionsjaddrjaladdrc取指部件(InstructionFetchUnit)每條指令都有的公共操作取指令:M[PC]更新PC:PC←PC+4轉(zhuǎn)移(BranchandJump)時,PC內(nèi)容再次被更新為“轉(zhuǎn)移目標(biāo)地址”32InstructionWordAddressInstructionMemoryPCClkNextAddressLogic順序:先取指令,再改變PC的值(具體實(shí)現(xiàn)可以并行)

決不能先改變PC的值,再取指令下地址邏輯取指部件ado

Inst memclock

PCPC:存儲器地址5.1.1與取指令有關(guān)的電路

PC+4 32位加法器

4c程序計(jì)數(shù)器指令存儲器指令取指后,每條指令功能不同,在數(shù)據(jù)通路中信息流動過程也不同下面分別對每條指令進(jìn)行數(shù)據(jù)通路設(shè)計(jì)5.1.2寄存器計(jì)算類型指令執(zhí)行時所需電路addrd,rs,rt;rd<--rs+rt

rt

rt5-bit

rd

rd5-bit

funct100000 6-bit

op000000 6-bit

rs

rs5-bit

sa00000 5-bit例:addr3,r1,r2;r3<--r1+r2

op000000 6-bit

rs00001

5-bit

rt00010

5-bit

rd00011

5-bit

sa00000 5-bit

funct100000 6-bit與add類似的指令:sub,and,or,xorc指令的意義:寄存器rs中的數(shù)據(jù)和寄存器rt中的數(shù)據(jù)相加,結(jié)果存放在寄存器rd中。把PC+4寫入PC執(zhí)行add,sub,and,or,xor指令所需的CPU電路qarnbqbdclkzrALUabalucaluc

wreg

werna4ado InstmemPCControlUnitwnReg?lertrdopfuncp4rsrsrtrdsafuncopx000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

clockcSll指令(ShiftLeftLogical)sllrd,rt,sa;rd<--rt<<sa

rt

rt5-bit

sa

sa5-bit

op000000 6-bit

rs00000 5-bit

rd

rd

5-bit

funct000000 6-bit指令的意義:寄存器rt中的數(shù)據(jù)左移sa位,結(jié)果存放在寄存器rd中。把PC+4寫入PC例:sllr13,r12,25;r13<--r12<<25

op000000 6-bit

rs00000 5-bit

rt01100

5-bit

rd01101

5-bit

sa11001

5-bit

funct000000 6-bit與sll類似的指令:srl,srac執(zhí)行sll,srl,sra指令所需的電路qarnbqbdclkzrALUabalucaluc

wreg

werna4ado InstmemPCControlUnitwnReg?lertrdsaopfuncp4rsrtrdsafuncopx000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

clocksll,srl,sracSll電路的追加qbdclkzrALUabaluc01aluc4ado InstmemPCControlUnitnReg?lerdsaopfuncp4rsrtrsrtrdsafuncopx000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

shift if(sll,srl,sra)shift=1; wregelseshift=0;

wenanb qa

clockadd,sub,and,or,xor,sll,srl,srac5.1.3立即數(shù)計(jì)算類型指令執(zhí)行時所需電路(AddImmediate)addirt,rs,imm;rt<--rs+(sign)imm

op001000 6-bit

rs

rs5-bit

rt

rt5-bit

imm

imm16-bit例:addir3,r1,-1;r3<--r1+(-1)

op001000 6-bit

rs00001

5-bit

rt00011

5-bit

imm1111111111111111

16-bit與addi類似的指令:andi,ori,xori(無符號立即數(shù))c指令的意義:寄存器rs中的數(shù)據(jù)和無符號立即數(shù)imm相與,結(jié)果存放在寄存器rt中。把PC+4寫入PCsext執(zhí)行addi指令所需電路eadoqarnbqbwnclkzra

alucALUaluc

wreg

werna

bclock4

InstmemPCControlUnitReg?ledrtimmopp4rsrsrtimmopaddi,andi,ori,xoriaddi:sext=1;andi,ori,xori:sext=0;x000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]cLui指令(LoadUpperImmediate)luirt,imm;rt<--imm<<16

op001111 6-bit

rs00000

5-bit

rt

rt5-bit

imm

imm16-bit

例:luir29,0xffff;r29<--0xffff0000

op001111 6-bit

rs00000

5-bit

rt11101

5-bit

imm1111111111111111

16-bitc指令的意義:把立即數(shù)imm左移16位,結(jié)果存放在寄存器rt中。把PC+4寫入PCsexteadoqarnbqbwnclkzra

alucALUaluc

wreg

werna

bclock4

InstmemPCControlUnitReg?ledrtopp4rsrtimmoplui:sext=x;x000ADDx100SUBx001ANDx101ORx010XORx110LUI0011SLL0111SRL1111SRAaluc[3..0]

luic

imm執(zhí)行l(wèi)ui指令所需電路regrtsextaddi,lui電路的追加eqarnbqbclk

wernazrab

alucALU01010123alucshiftaluimmwregpcsourceclockopfunc4ado InstmemPCControlUnitwnReg?ledrsrtrdrtsaimmp4rsrtrdsafuncoprsrtimmopadd,sub,and,or,xor,sll,srl,sra,jr,addi,andi,ori,xori,lui

0 1I-format:regrt=1;R-format:regrt=0;I-format:aluimm=1;R-format:aluimm=0;c5.1.4訪問存儲器類型指令執(zhí)行時所需電路

(LoadWord)lwrt,imm(rs);rt<--memory[rs+(sign)imm]

op100011 6-bit

rs

rs5-bit

rt

rt5-bit

imm

imm16-bit例:lwr25,0xc0(r7);r25<--memory[r7+0xc0]

op100011 6-bit

rs00111

5-bit

rt11001

5-bit

imm0000000011000000

16-bitc指令的意義:寄存器rs中的數(shù)據(jù)和立即數(shù)imm相加,得到存儲器地址,用這個地址訪問存儲器,把得到的存儲器數(shù)據(jù)寫入寄存器rt中。把PC+4寫入PCsexteadoqbwnclk

wernarnb qazrab

alucALUadodiwealucwregop4

Instmemclock

DatamemPCControl UnitReg?ledrsrtimmp4rsrtimmoplwlw:sext=1;c執(zhí)行l(wèi)w指令所需電路0:零擴(kuò)展,1:符號擴(kuò)展Sw指令(StoreWord)swrt,imm(rs);memory[rs+(sign)imm]<--rt

op101011 6-bit

rs

rs5-bit

rt

rt5-bit

imm

imm16-bit例:swr25,0xc0(r7);memory[r7+0xc0]<--r25

op101011 6-bit

rs00111

5-bit

rt11001

5-bit

imm0000000011000000

16-bitc指令的意義:寄存器rs中的數(shù)據(jù)和立即數(shù)imm相加,得到存儲器地址,把寄存器rt中的數(shù)據(jù)寫入這個地址的存儲器中。把PC+4寫入PCsexteadoqarnbqbwnclk

wernazrab

alucALUadodiwealucwmemop4

Instmemclock

DatamemPCControlUnitReg?ledrsrtimmp4rsrtimmopswsw:sext=1;c執(zhí)行sw指令所需電路regrtsextlw和sw電路的追加eqarnb

wernazrab

alucALU01010123adodiwe01alucshiftaluimmwregm2regpcsourcewmemopfunc4ado InstmemDatamem

P CclockControlUnitwnReg?ledclk qbrsrtrdrtsaimmp4rsrtrdsafuncoprsrtimmopadd,sub,and,or,xor,sll,srl,sra,jr,addi,andi,ori,xori,lw,sw,luilw:m2reg=1;

0 1I-format:regrt=1;R-format:regrt=0;c(BranchonEqual)beqrs,rt,imm;if(rs==rt)PC<--PC+4+(sign)imm<<2

rs

rs5-bit

rt

rt5-bit

op000100 6-bit

imm

imm16-bit

例:60:beqr4,r5,-4;if(r4==r5)PC<--48(=60+4-16)

rt00101

5-bit

imm1111111111111100

16-bit

op000100 6-bit與beq類似的指令

rs00100

5-bit

:bne(不相等時轉(zhuǎn)移)c5.1.5條件轉(zhuǎn)移類型指令執(zhí)行時所需電路

指令的意義:如果寄存器rs中的數(shù)據(jù)和寄存器rt中的數(shù)據(jù)相等,轉(zhuǎn)移到地址PC+4+(sign)imm×4sexteadoqarnbqbclk

wernazra

alucALU0123alucpcsource

z

bclockop4

InstmemPCControlUnitReg?ledrsrtimmp4rsrtimmop2beq,bneif(beq·z+bne·z)pcsource=1;c執(zhí)行beq指令所需電路regrtsextBeq電路的追加eqarnbqbdclk

werna01zrALUabaluc01010123adodiwe01alucshiftaluimmwregm2regpcsourcewmemzclockopfunc4ado InstmemDatamemPCControlUnitwnReg?lersrtrdrtsaimmp4rsrtrdsafuncoprsrtimmop2add,sub,and,or,xor,sll,srl,sra,jr,addi,andi,ori,xori,lw,sw,beq,bne,luic(Jump)jaddr;PC<--(PC+4)[31..28],addr<<2

op000010 6-bit

addr

addr26-bit例:j0x100;PC<--0x400

op000010 6-bit

addr0000000100000000

26-bitc5.1.6跳轉(zhuǎn)和子程序調(diào)用及返回類型指令執(zhí)行時所需電路

指令的意義:跳轉(zhuǎn)。目標(biāo)地址是:把26位的立即數(shù)addr左移2位,再與PC+4的高4位拼接0123pcsourceop4adoInstPCControl Unitaddrp4addrop2

mem

clockjj:pcsource=3;[31..28][27..0]c執(zhí)行j指令所需電路Jal指令(JumpAndLink)jaladdr;$31<--PC+4;PC<--(PC+4)[31..28],addr<<2

op000011 6-bit

addr

addr26-bit例:20:jal0x100;r31<--24;PC<--0x400

op000011 6-bit

addr0000000100000000

26-bitc指令的意義:調(diào)用(跳轉(zhuǎn)并保存返回地址)。目標(biāo)地址是:把26位的立即數(shù)addr左移2位,再與PC+4的高4位拼接。返回地址保存在寄存器31中。返回地址是PC+8,我們暫時假定是PC+4qarnbwnclk

werna0123wregpcsourceclockop4ado InstmemPCControl UnitReg?ledaddrp4addropjal31jal:pcsource=3;[31..28][27..0]

qb2c執(zhí)行jal指令所需電路Jr指令(JumpRegister)jrrs;PC<--rs

op000000 6-bit

rs

rs5-bit

rt00000 5-bit

rd00000 5-bit

sa00000 5-bit

funct001000 6-bit例:jrr31;PC<--r31

op000000 6-bit

rs11111

5-bit

rt00000 5-bit

rd00000 5-bit

sa00000 5-bit

funct001000 6-bitc指令的意義:

把寄存器rs中的數(shù)據(jù)寫入PC中。adoqarnbqbwnclk

werna0123pcsourceclockopfunc4InstmemPCControl UnitReg?ledrsp4rsrtrdsafuncopif(jr)pcsource=2;jrc執(zhí)行jr指令所需電路qarnbqbdclk

wernazrALUabaluc010123pcsourcealucopfunc4ado InstmemPCControlUnitwnReg?lersrtrdsap4rsrtrdsafuncopif(jr)pcsource=2;shift if(sll,srl,sra)shift=1;wregelseshift=0;

clockadd,sub,and,or,xor,sll,srl,sra,jrcjr電路的追加寄存器由N位觸發(fā)器構(gòu)成CPU中的不同類型寄存器由鎖存器構(gòu)成的暫存器:帶“寫使能”信號用于和總線相連的、輸出端帶三態(tài)門的寄存器:帶“三態(tài)門控”信號帶復(fù)位(清0)功能的寄存器帶計(jì)數(shù)(自增)功能的寄存器帶移位功能的寄存器組合上述多個功能的寄存器:帶多個控制信號寄存器組有若干個寄存器組成通常是雙口:兩個讀口+一個寫口可帶時鐘輸入信號用于控制輸入信號何時被寫入到寄存器中經(jīng)過一個clk-to-Q,輸入信號在寄存器的輸出端有效!5.2寄存器堆設(shè)計(jì)存儲元件:寄存器和寄存器組寄存器(Register)寫使能(WriteEnable-WE)信號

0:時鐘邊沿到時,輸出不變 1:時鐘邊沿到時,輸出開始變?yōu)檩斎肴裘總€時鐘邊沿都寫入,則不需WE信號寄存器組(RegisterFile)兩個讀口(組合邏輯操作):busA和busB分別由RA和RB給出地址。地址RA或RB有效后,經(jīng)一個“取數(shù)時間(AccessTime)”,BusA和BusB有效一個寫口(時序邏輯操作):寫使能為1且時鐘邊沿到時,busW傳來的值開始被寫入RW指定的寄存器中ClkbusWWriteEnable3232busA32busB555RWRARB3232-bitRegistersClkDataInWriteEnableNNDataOut5.2.1寄存器堆的硬件電路設(shè)計(jì)5.2.3寄存器堆VerilogHDL代碼moduleregfile(rna,rnb,d,wn,we,clk,clrn,qa,qb);input[4:0]rna,rnb,wn;input[31:0]d;inputwe,clk,clrn;output[31:0]qa,qb;reg[31:0]register[1:31];//$1-$31regs//2readportassignqa=(rna==0)?0:register[rna];//readport0assignqb=(rnb==0)?0:register[rnb];//readport1//1writeportalways@(posedgeclkornegedgeclrn)if(clrn==0)beginintegeri;for(i=1;i<32;i=i+1)register[i]<=0;endelse//writeportif(we&&(wn!=0))register[wn]<=d;endmodule計(jì)算機(jī)的五大組成部分什么是數(shù)據(jù)通路(DataPath)?指令執(zhí)行過程中,數(shù)據(jù)所經(jīng)過的路徑(包括路徑中的部件),是指令的執(zhí)行部件

控制器(Control)的功能對指令進(jìn)行譯碼,生成指令對應(yīng)的控制信號,控制數(shù)據(jù)通路的動作。能對指令的執(zhí)行部件發(fā)出控制信號,是指令的控制部件ControlMemoryProcessorInputOutputDatapathDatapath5.3單周期數(shù)據(jù)通路的設(shè)計(jì)數(shù)據(jù)通路的基本結(jié)構(gòu)數(shù)據(jù)通路由兩類部件組成組合邏輯元件(亦稱操作元件)存儲元件(亦稱狀態(tài)元件)元件間的連接方式總線連接方式分散連接方式數(shù)據(jù)通路的構(gòu)成由“操作元件”和“存儲元件”通過總線或分散方式連接而成數(shù)據(jù)通路的功能進(jìn)行數(shù)據(jù)存儲、處理、傳送因此,數(shù)據(jù)通路是由操作元件和存儲元件通過總線方式或分散方式連接而成的進(jìn)行數(shù)據(jù)存儲、處理、傳送的路徑。

操作元件:組合邏輯電路加法器(Adder)多路選擇器(MUX)算術(shù)邏輯部件(ALU)32AB32Y32SelectMUX3232AB32ResultZeroOPALU3232AB32SumCarryAdderCarryIn3Decoderout0out1out7out2譯碼器(Decoder)何時要用到adder,ALU,MUXorDecoder?控制信號組合邏輯元件的特點(diǎn)其輸出只取決于當(dāng)前的輸入定時:所有輸入到達(dá)后,經(jīng)過一定的邏輯門延時,輸出端改變,并保持到下次改變,不需要時鐘信號來定時二選一或多選一加法器需要什么控制信號?狀態(tài)元件:時序邏輯電路狀態(tài)(存儲)元件的特點(diǎn)具有存儲功能,在時鐘控制下輸入狀態(tài)被寫到電路中,直到下一個時鐘到達(dá)輸入端狀態(tài)由時鐘決定何時寫入,輸出端狀態(tài)隨時可讀出定時方式:規(guī)定信號何時寫入狀態(tài)元件或何時從狀態(tài)元件讀出邊沿觸發(fā)(edge-triggered)方式狀態(tài)單元中的值只在時鐘邊沿改變。每個時鐘周期改變一次最簡單的狀態(tài)單元D觸發(fā)器:一個時鐘輸入、一個狀態(tài)輸入、一個狀態(tài)輸出cycletimerisingedgefallingedge上升沿(risingedge)觸發(fā):在時鐘正跳變時進(jìn)行讀/寫下降沿(fallingedge)觸發(fā):在時鐘負(fù)跳變時進(jìn)行讀/寫回顧——D觸發(fā)器切記:狀態(tài)單元的輸入信息總是在一個時鐘邊沿到達(dá)后的“Clk-to-Q”時才被寫入到單元中,此時的輸出才反映新的狀態(tài)值數(shù)據(jù)通路中的狀態(tài)元件有兩種:寄存器(組)+存儲器Q總是在clk-Q后跟著D變化這段時間D變化不影響Q建立時間(SetTime):在觸發(fā)時鐘邊沿之前輸入必須穩(wěn)定保持時間(HoldTime):在觸發(fā)時鐘邊沿之后輸入必須保持Clock-to-Q-time:在觸發(fā)時鐘邊沿,輸出并不能立即變化回顧——MIPS的三種指令類型ADDandSUBSTRACTaddrd,rs,rtsubrd,rs,rtORImmediate

orirt,rs,imm16LOADandSTORElwrt,(rs)imm16swrt,(rs)imm16BRANCHbeqrs,rt,imm16JUMPjtargetoptargetaddress026316bits26bitsoprsrtrdshamtfunct0611162126316bits6bits5bits5bits5bits5bitsoprsrtimmediate0162126316bits16bits5bits5bits這些指令具有代表性!算術(shù)運(yùn)算、邏輯運(yùn)算;RR型、RI型;訪存指令;條件轉(zhuǎn)移、無條件轉(zhuǎn)移本講重點(diǎn):實(shí)現(xiàn)以上指令的數(shù)據(jù)通路!MIPS 有哪三種類型指令?R-Type、I-Type、J-Type設(shè)計(jì)處理器的步驟第一步:分析每條指令的功能來第二步:根據(jù)指令功能給出所需元件,并考慮如何將他們互連第三步:確定每個元件所需控制信號的取值第四步:匯總所有指令所涉及到的控制信號,生成一張反映指令與控制信號之間關(guān)系的表第五步:根據(jù)表得到每個控制信號的邏輯表達(dá)式,據(jù)此設(shè)計(jì)控制器電路處理器設(shè)計(jì)涉及到數(shù)據(jù)通路的設(shè)計(jì)和控制器的設(shè)計(jì)數(shù)據(jù)通路中有兩種元件

操作元件:由組合邏輯電路實(shí)現(xiàn)存儲(狀態(tài))元件:由時序邏輯電路實(shí)現(xiàn)SKIPregrtsextcallbeq,bneeq1n2q2clk

wen101zrab

alucALU01010123adodiwe01wreg=0m2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop2beq,bnebeqrs,rt,imm[31..28][27..0]2Single-CycleCPUDesign–p.47/82cYAMINLI,CIS,HOSEIUNIVERSITY1.下一條指令地址的選擇(控制信號pcsource)regrtsextcalljreqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wreg=0m2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnReg?ledrsrtrdrtsaimmp4

f10rsrtrdsafuncoprsrt

immaddropop22jr[31..28][27..0]

jrrsc

addr下一條指令地址的選擇(控制信號pcsource)regrtsextcalljeq1n2q2clk

wen101zrab

alucALU01010123adodiwe01wreg=0m2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop2jjaddr[31..28][27..0]2c下一條指令地址的選擇(控制信號pcsource)regrtsexteqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitrnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22add,sub,and,or,xoraddrd,rs,rt[31..28][27..0]cadd,sub,and,or,xor2.ALU的a輸入端(控制信號shift)regrtsextsll,srl,sraeqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22sll,srl,srasllrd,rt,sa[31..28][27..0]cALU的a輸入端(控制信號shift)jalregrtsextaddi,andi,ori,xorieqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22addi,andi,ori,xoriaddirt,rs,imm[31..28][27..0]c3.ALU的b輸入端和寄存器堆的wn輸入端(控制信號aluimm和regrt)jalregrtsextALU的b輸入端和寄存器堆的wn輸入端(控制信號aluimm和regrt)eqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22luiluirt,imm[31..28][27..0]cluijalregrtsextjallweqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmem=0alucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22lwlwrt,imm(rs)[31..28][27..0]c4.寄存器堆的d輸入端(控制信m2reg和jal)TheMIPSSubset(考察實(shí)現(xiàn)以下指令的數(shù)據(jù)通路)ADDandsubtractaddrd,rs,rtsubrd,rs,rtORImmediate:orirt,rs,imm16LOADandSTORElwrt,(rs)imm16swrt,(rs)imm16BRANCH:beqrs,rt,imm16JUMP:jtargetoptargetaddress026316bits26bitsoprsrtrdshamtfunct0611162126316bits6bits5bits5bits5bits5bitsoprsrtimmediate0162126316bits16bits5bits5bits所有指令的數(shù)據(jù)通路都已經(jīng)設(shè)計(jì)好,合起來的數(shù)據(jù)通路是什么樣的?regrtsextjal0:1:2:3:PC+4BranchAddrRegAddrJumpAddreqarnbqbclk

werna01zrab

alucALU01010123adodiwe01wregm2regpcsourcewmemalucshiftaluimmzclockopfunc4ado InstmemDatamemPCControl UnitwnReg?ledrsrtrdrtsaimmaddrp4

f10rsrtrdsafuncoprsrt

immaddropop22[31..28][27..0]c5.3.2單周期CPU的總體電路指令執(zhí)行結(jié)果總是在下個時鐘到來時開始保存在

寄存器

存儲器或

PC

中!5.3.3單周期計(jì)算機(jī)的代碼:sccomp_dataflow.v

modulesccomp_dataflow(clock,resetn,inst,pc,aluout,memout,mem_clk); inputclock,resetn,mem_clk; output[31:0]inst,pc,aluout,memout; wire[31:0]data; wirewmem; sccpu_dataflows(clock,resetn,inst,memout,pc,wmem,aluout,data); scinstmemimem(pc,inst); scdatamemdmem(clock,memout,data,aluout,wmem,mem_clk,mem_clk); endmodulec單周期CPU的代碼:sccpu_dataflow.v

modulesccpu_dataflow(clock,resetn,inst,mem,pc,wmem,alu,data); input[31:0]inst,mem; inputclock,resetn; output[31:0]pc,alu,data; outputwmem; wire[31:0]p4,bpc,npc,adr,ra,alua,alub,res,alu_mem; wire[3:0]aluc; wire[4:0]reg_dest,wn; wire[1:0]pcsource; wirezero,wmem,wreg,regrt,m2reg,shift,aluimm,jal,sext; wire[31:0]sa={27’b0,inst[10:6]}; wire[31:0]offset={imm[13:0],inst[15:0],2’b00}; wiree=sext&inst[15]; wire[15:0]imm={16{e}}; wire[31:0]immediate={imm,inst[15:0]};csc_cpu.v

dff32ip(npc,clock,resetn,pc); cla32pcplus4(pc,32’h4,1’b0,p4); cla32br_adr(p4,offset,1’b0,adr); wire[31:0]jpc={p4[31:28],inst[25:0],2’b00}; sc_cucu(inst[31:26],inst[5:0],zero,wmem,wreg,regrt,m2reg, aluc,shift,aluimm,pcsource,jal,sext); mux2x32alu_b(data,immediate,aluimm,alub); mux2x32alu_a(ra,sa,shift,alua); mux2x32result(alu,mem,m2reg,alu_mem); mux2x32link(alu_mem,p4,jal,res); mux2x5reg_wn(inst[15:11],inst[20:16],regrt,reg_dest); assignwn=reg_dest|{5{jal}};//jal:r31<--p4; mux4x32nextpc(p4,adr,ra,jpc,pcsource,npc); regfilerf(inst[25:21],inst[20:16],res,wn,wreg,clock,resetn,ra,data); alual_unit(alua,alub,aluc,alu,zero); endmodulec小結(jié)CPU設(shè)計(jì)直接決定了時鐘周期寬度和CPI,所以對計(jì)算機(jī)性能非常重要!CPU主要由數(shù)據(jù)通路和控制器組成數(shù)據(jù)通路:實(shí)現(xiàn)指令集中所有指令的操作功能控制器:控制數(shù)據(jù)通路中各部件進(jìn)行正確操作數(shù)據(jù)通路的兩種元件操作元件(組合電路):ALU、MUX、Ext.、Adder、Reg/MemRead狀態(tài)/存儲元件(時序電路):PC、Reg/MemWrite數(shù)據(jù)通路的定時數(shù)據(jù)通路中操作元件沒有存儲功能,其操作結(jié)果須寫到存儲元件中在時鐘到達(dá)后clk-to-Q時存儲元件開始更新狀態(tài)MIPS指令集的一個子集作為CPU的實(shí)現(xiàn)目標(biāo)公共操作:取指令和PC+4下址計(jì)算:32位PC,四路選擇:順序、Branch、JumpR型:ALU兩個操作數(shù)來自rs和rt,結(jié)果寫到rd訪存:符號擴(kuò)展,數(shù)據(jù)在rt和主存單元中交換立即數(shù):0擴(kuò)展后的操作數(shù)送到ALU的一個輸入端5.4單周期控制器的設(shè)計(jì)考察每條指令在數(shù)據(jù)通路中的執(zhí)行過程和涉及到的控制信號取值公共操作:取指令和計(jì)算下址PCR-Type指令(add/sub)立即數(shù)指令(ori)訪存指令(lw/sw)分支指令(beq)跳轉(zhuǎn)指令(j)匯總各指令的控制信號取值兩類控制信號:直接送往數(shù)據(jù)通路/送往局部控制單元分析ALU操作對應(yīng)的控制信號與func字段間的關(guān)系設(shè)計(jì)ALU局部控制單元設(shè)計(jì)主控制單元控制器基本概念控制器的功能(從程序執(zhí)行角度看)對指令流和數(shù)據(jù)流實(shí)施正確控制在空間上,由控制器形成受控部件的控制信號在時間上,控制器控制各種動作的執(zhí)行順序控制器基本概念控制器的功能(從系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)的角度看)取指令(控制指令流出) 分析指令(控制指令分析)執(zhí)行指令,發(fā)出各種操作命令(控制指令執(zhí)行)確定下一條指令的地址(控制指令流向)執(zhí)行環(huán)境的建立與保護(hù)(控制執(zhí)行環(huán)境的維護(hù))存儲器運(yùn)算器控制器控制器基本概念PCIRID指令控制操作控制時間控制數(shù)據(jù)加工處理中斷ALU寄存器XR地址運(yùn)算中斷系統(tǒng)CU時序電路寄存器ALU

中斷系統(tǒng)CUCPU控制總線數(shù)據(jù)總線地址總線控制器的功能(從完成功能角度看)1)用戶可見寄存器(1)通用寄存器CPU的寄存器存放操作數(shù)可作

某種尋址方式所需的專用寄存器(2)數(shù)據(jù)寄存器存放操作數(shù)(滿足各種數(shù)據(jù)類型)兩個寄存器拼接存放雙倍字長數(shù)據(jù)(3)地址寄存器存放地址,其位數(shù)滿足最大地址范圍用于特殊尋址方式段基值棧指針(4)條件碼寄存器存放條件碼,可作程序分支的依據(jù)如正、負(fù)、零、溢出、進(jìn)位等控制器基本概念2)控制和狀態(tài)寄存器(1)控制寄存器PC控制CPU操作(2)狀態(tài)寄存器狀態(tài)寄存器其中MARMBRIR

用戶不可見存放條件碼 用戶可見

PSW寄存器存放程序狀態(tài)字 用戶可見

PC

用戶可見MARMMMBRIR控制器基本概念CPU的寄存器CPU基本組成原理圖控制部件CPU由

執(zhí)行部件

控制部件組成CPU包含

數(shù)據(jù)通路

控制器控制器由

指令譯碼器

和控制信號形成部件

等組成執(zhí)行部件CPU執(zhí)行指令過程及其與計(jì)算機(jī)性能的關(guān)系CPU執(zhí)行指令的過程取指令PC+1送PC指令譯碼進(jìn)行主存地址運(yùn)算取操作數(shù)進(jìn)行算術(shù)/邏輯運(yùn)算存結(jié)果判斷和檢測“異常”事件若有異常,則自動切換到異常處理程序檢測是否有“中斷”請求,有則轉(zhuǎn)中斷處理CPU的實(shí)現(xiàn)與計(jì)算機(jī)性能的關(guān)系計(jì)算機(jī)性能(程序執(zhí)行快慢)由三個關(guān)鍵因素決定:指令數(shù)目、時鐘周期、CPI指令數(shù)目由編譯器和指令集決定時鐘周期和CPI由CPU的實(shí)現(xiàn)來決定

CPU的設(shè)計(jì)與實(shí)現(xiàn)非常重要!它直接影響計(jì)算機(jī)的性能。問題:“取指令”一定在最開始做嗎?“PC+1”一定在譯碼之前做嗎?“譯碼”須在指令執(zhí)行前做嗎?“異常”和“中斷”差別是什么?取指階段執(zhí)行階段TheBigPicture:WhereareWeNow?TheFiveClassicComponentsofaComputerControlDatapathMemoryProcessorInputOutput下一個目標(biāo):設(shè)計(jì)單周期數(shù)據(jù)通路的控制器設(shè)計(jì)方法(1)根據(jù)每條指令功能,分析控制信號取值,并在表中列出(2)根據(jù)列出的指令和控制信號關(guān)系,寫出每個控制信號的邏輯表達(dá)式pcsource[1..0]wmemwregjalsextop[5..0]func[5..0]

regrt m2regaluc[3..0] shift aluimmSccu_dataflow

zControl UnitMIPSCPU指令格式rdfunc

saimmaddrrsrsrtrtopopopI類型指令R類型指令J類型指令c5.4.1控制部件的邏輯設(shè)計(jì)1.寫使能(WriteEnable)

wreg wmem2.ALU操作控制

aluc[3..0]3.

m2reg pcsource[1..0] shift aluimm regrt jal sextc控制信號的種類多路選擇器的選擇信號wreg

1:寫寄存器堆 0:不寫wmem

1:寫存儲器 0:不寫m2reg

1:選擇從存儲器中讀出的數(shù)據(jù)

0:shift

1:選擇移位位數(shù)(sa) 0:選擇寄存器堆的數(shù)據(jù)c控制信號的意義aluimm

1:選擇擴(kuò)展后的立即數(shù) 0:選擇寄存器堆的數(shù)據(jù)regrtrtrdPC+4ALU或者存儲器數(shù)據(jù)

1:選擇 0:選擇jal

1:選擇 0:選擇sext

1:符號擴(kuò)展 0:零擴(kuò)展c控制信號的意義pcsource[1..0]PC+4

00:選擇 01:選擇轉(zhuǎn)移地址 10:選擇寄存器地址 11:選擇跳轉(zhuǎn)地址aluc[3..0]x000:ADDx100:SUBx001:ANDx101:ORx010:XORx110:LUI0011:SLL0111:SRL1111:SRA

(指令 (指令 (指令 (指令(指令(指令(指令(指令(指令

:add,addi,lw,sw) :sub,beq,bne) :and,andi) :or,ori):xor,xori):lui):sll):srl):sra)c控制信號的意義20MIPS指令sa0000000000000000000000000sasasa00000func100000100010100100100101100110000000000010000011001000op000000000000000000000000000000000000000000000000000000op001000001100001101001110100011101011000100000101001111rsrsrsrsrsrs000000000000000rsrsrsrsrsrsrsrsrsrs00000rtrtrtrtrtrtrtrtrt00000rtrtrtrtrtrtrtrtrtrtrdrdrdrdrdrdrdrdrd00000immimmimmimmimmimmimmimmimmimm;;;;;;;;;;;;;;;;;;;;Rformatinstructionsaddrd,rs,rtsubrd,rs,rtandrd,rs,rtorrd,rs,rtxorrd,rs,rtsllrd,rt,sasrlrd,rt,sasrard,rt,sajrrsIformatinstructionsaddirt,rs,immandirt,rs,immorirt,rs,immxorirt,rs,immlwrt,imm(rs)swrt,imm(rs)beqrs,rt,immbners,rt,immluirt,immop000010000011addraddraddr;;;Jformatinstructionsjaddrjaladdrc首先確認(rèn)是什么指令,即對指令進(jìn)行譯碼。R類型I類型op[5..0]func[5..0]op[5..0]addsubandorxorsllsrlsrajr000000000000000000000000000000000000000000000000000000100000100010100100100101100110000000000010000011001000addiandiorixorilwswbeqbnelui001000001100001101001110100011101011000100000101001111J類型op[5..0]op[5..0]j000010jal000011c

控制部件的邏輯設(shè)計(jì)指令指令指令指令生成表示指令的中間變量,變量名是指令名前加“i_”。r_type=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]i_add=Rtype·func[5]·func[4]·func[3]·func[2]·func[1]·func[0]i_sub=Rtype·func[5]·func[4]·func[3]·func[2]·func[1]·func[0]

···=···i_addi=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]

···=···i_j=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]i_jal=op[5]·op[4]·op[3]·op[2]·op[1]·op[0]a,c指令譯碼列出控制信號的真值表:zpcsource[1..0]aluc[3..0]shiftaluimmsextwmemwregm2regregrtjaladdx00000000x01000···xsllx00001110x01000···x00010beq ···01x

jjalxx1111xxxxxxxxxxxxxx0001xxxxx1輸出指令輸入

控制部件的邏輯設(shè)計(jì)pcsource[1]pcsource[0] aluc[3] aluc[2] aluc[1] aluc[0] ··· wmem wreg=i_jr+i_j+i_jal;=i_beq&z+i_bne&~z+i_j+i_jal;=i_sra;==i_xor+i_sll+i_srl+i_sra+i_xori+i_beq+i_bne+i_lui;===i_sw;=i_add+i_sub+i_and+i_or+i_xor+i_sll+i_srl+i_sra+

i_addi+i_andi+i_ori+i_xori+i_lw+i_lui+i_jal; ···=jal=i_jal;c然后,寫出控制信號的邏輯表達(dá)式

控制部件的邏輯設(shè)計(jì)5.4.2控制部件的代碼:sccu_dataflow.vmodulesccu_dataflow(op,func,z,wmem,wreg,regrt,m2reg,aluc,shift, aluimm,pcsource,jal,sext); input[5:0]op,func; inputz; outputwreg,regrt,jal,m2reg,shift,aluimm,sext,wmem; output[3:0]aluc; output[1:0]pcsource; wirer_type=?|op; wirei_add=r_type&func[5]&?func[4]&?func[3]& ?func[2]&?func[1]&?func[0]; wirei_sub=...; ... assignwreg=i_add|i_sub|i_and|i_or|i_xor| i_sll|i_srl|i_sra|i_addi|i_andi| i_ori|i_xori|i_lw|i_lui|i_jal; assignregrt=...; ... endmodulec單周期計(jì)算機(jī)的性能單周期處理器的CPI為多少?其他條件一定的情況下,CPI越小,性能越好!CPI=1,不是很好嗎?單周期處理器的性能會不會很好?為什么?計(jì)算機(jī)的性能除CPI外,還取決于時鐘周期寬度單周期處理器時鐘寬度為最復(fù)雜指令的執(zhí)行時間很多指令可以在更短的時間內(nèi)完成CPI=1!單周期計(jì)算機(jī)的性能單周期計(jì)算機(jī)的性能舉例: 假設(shè)在單周期處理器中,各主要功能單元的操作時間為:

存儲單元:200psALU和加法器:100ps寄存器堆(讀/寫):50ps

假設(shè)MUX、控制單元、PC、擴(kuò)展器和傳輸線路沒有延遲,則下面實(shí)現(xiàn)方式中,哪個更快?快多少?每條指令在一個固定長度的時鐘周期內(nèi)完成每條指令在一個時鐘周期內(nèi)完成,但時鐘周期僅為指令所需,是可變的(實(shí)際不可行,只是為了比較)

假設(shè)指令組成為:25%取數(shù)、10%存數(shù)、45%ALU、15%分支、5%跳轉(zhuǎn)單周期計(jì)算機(jī)的性能解:CPU執(zhí)行時間=指令條數(shù)×CPI×?xí)r鐘周期=指令條數(shù)×?xí)r鐘周期

兩種方案的指令條數(shù)都一樣,CPI都為1,所以只要比較時鐘周期寬度即可。各指令類型要求的時間長度為:單周期計(jì)算機(jī)的性能方式(1):時鐘周期由最長指令來決定,應(yīng)是load指令,為600ps方式(2):時鐘周期取各條指令所需時間,時鐘周期從600ps至200ps。根據(jù)各類指令的頻度,計(jì)算出平均時鐘周期長度為:CPU時鐘周期=600×25%+550×1

溫馨提示

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

最新文檔

評論

0/150

提交評論