湘潭大學(xué)第6章 多周期CPU及其Verilog HDL設(shè)計(jì)_第1頁
湘潭大學(xué)第6章 多周期CPU及其Verilog HDL設(shè)計(jì)_第2頁
湘潭大學(xué)第6章 多周期CPU及其Verilog HDL設(shè)計(jì)_第3頁
湘潭大學(xué)第6章 多周期CPU及其Verilog HDL設(shè)計(jì)_第4頁
湘潭大學(xué)第6章 多周期CPU及其Verilog HDL設(shè)計(jì)_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第 7 章多周期CPU及其Verilog HDL實(shí)現(xiàn)學(xué)習(xí)指南 把一條指令的執(zhí)行分成若干個(gè)周期取指令周期IF指令譯碼周期ID指令執(zhí)行周期EXE存儲(chǔ)器訪問周期MEM結(jié)果寫回周期WB 多周期CPU的總體電路及Verilog HDL代碼多周期CPU的總體電路多周期CPU的Verilog HDL代碼 用有限狀態(tài)機(jī)實(shí)現(xiàn)多周期CPU的控制部件多周期CPU的控制部件的狀態(tài)轉(zhuǎn)移圖多周期CPU的控制部件的總體結(jié)構(gòu)控制信號(hào)的產(chǎn)生控制部件的Verilog HDL代碼 存儲(chǔ)器及測(cè)試程序設(shè)計(jì)存儲(chǔ)器設(shè)計(jì)測(cè)試程序代碼多周期CPU測(cè)試結(jié)果 單周期CPU用一個(gè)時(shí)鐘周期執(zhí)行一條指令。而確定時(shí)鐘周期的時(shí)間長(zhǎng)度時(shí)要考慮執(zhí)行時(shí)間最長(zhǎng)的指

2、令,以此寫出時(shí)鐘頻率。 因此不管每條指令的復(fù)雜程度如何,單周期CPU都花費(fèi)相同的時(shí)間去執(zhí)行每條指令,造成了時(shí)間上的浪費(fèi)。 本章討論多周期CPU的設(shè)計(jì)方法并給出Verilog HDL代碼。 多周期CPU的思想是把一條指令的執(zhí)行分成若干個(gè)小周期,根據(jù)每條指令的復(fù)雜程度,使用不同數(shù)量的小周期(周期)去執(zhí)行。7.1 把一條指令的執(zhí)行分成若干個(gè)周期 在實(shí)現(xiàn)的20條指令中,最復(fù)雜的指令就是lw rt,offset(rs)。 它需要5 個(gè)周期,其整個(gè)執(zhí)行過程為:根據(jù)PC取指令,并把PC+”1”。對(duì)指令譯碼并讀出rs寄存器的內(nèi)容。計(jì)算存儲(chǔ)器地址:由rs寄存器的內(nèi)容與指令中的偏移量offset相加得到。使用計(jì)算

3、好的地址訪問存儲(chǔ)器,從中讀出一個(gè)32位的數(shù)據(jù)。最后把該數(shù)據(jù)寫入寄存器堆中的rt寄存器。 最簡(jiǎn)單的指令為j adderess,2個(gè)周期即可:根據(jù)PC取指令,并把PC+”1”。指令中的address左移2位與PC的高4位拼接起來,寫入PC。 ALU計(jì)算類型的指令需要4個(gè)周期:根據(jù)PC取指令,并把PC+”1”。讀出rs和rt寄存器的內(nèi)容。由ALU完成對(duì)2個(gè)寄存器數(shù)據(jù)(或1個(gè)立即數(shù))的計(jì)算。最后把結(jié)果寫入寄存器堆 中的rd(或rt)寄存器。 轉(zhuǎn)移類指令(如beq rs,rt,offset)需要3個(gè)周期:根據(jù)PC取指令,并把PC+”1”。讀出rs和rt寄存器的數(shù)據(jù)并鎖存,同時(shí)ALU計(jì)算轉(zhuǎn)移地址并鎖存。由

4、ALU比較2個(gè)寄存器數(shù)據(jù),并決定是否把轉(zhuǎn)移地址寫入PC。 多周期CPU與單周期的時(shí)序比較如下圖。 注意:多周期忽略了轉(zhuǎn)移類指令的延遲轉(zhuǎn)移特性。lwlwaddbeqjaddbeq5432 表 每條指令所用的周期數(shù)指令指令意義意義周期數(shù)周期數(shù)add rd,rs,rt 寄存器加4sub rd,rs,rt 寄存器減4and rd,rs,rt 寄存器與4or rd,rs,rt 寄存器或4xor rd,rs,rt 寄存器異或4sll rd,rt,sa左移4srl rd,rt,sa邏輯右移4sra rd,rt,sa算術(shù)右移47.1.1 取指令周期IF 取指令周期IF完成的工作取指令PC+“1” 電路如下圖。

5、PCa doInstMem40123pcsourceControlUnitopfunc a alucALU zb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbesextrsrtABRegfileimmA圖 指令譯碼周期ID(不包括j,jal,jr) 多周期CPU設(shè)計(jì)的原則:在每個(gè)周期結(jié)束時(shí)把本周期的結(jié)果保存在某個(gè)地方以便下一個(gè)周期使用。如設(shè)置了一個(gè)帶有寫使能端的指令寄存器IR,這樣,即使PC值改變了,只要IR(Instrument Register)的寫使能端wir(Write IR)無效,IR中的指令就不會(huì)改變。 由于ALU在該周期無事可

6、做,所以可以完成PC+”1”的工作,不必再使用一個(gè)專門的加法器。由于不是每個(gè)周期PC都加”1”,所以也給PC加了一個(gè)寫使能wpc。 在ALU前面還加了2個(gè)多路器,它們的選擇信號(hào)分別為selpc(select PC)和alusrcb(ALU source B)。 該周期的控制信號(hào)的輸出應(yīng)該為:wir=1(寫IR)wpc=1(寫PC)selpc=1(選擇PC)alusrcb=1(選擇4)aluc=x000(ALU做加法)pcsource=0(選擇PC+4)7.1.2 指令譯碼周期ID 除了j,jal和jr指令之外,其他指令在指令譯碼(Instrument Decode)周期完成下面三個(gè)工作:ARe

7、gisterFilers; /讀數(shù)據(jù)BRegisterFilert; /讀數(shù)據(jù)CPC+sign_extend(offset)2; /計(jì)算轉(zhuǎn)移地址 電路如下圖。圖 指令譯碼周期ID(不包括j,jal,jr)PCa dMem40123pcsourceControlUnitopfunc a alucALU zb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbesextrsrtABRegfileimmC 控制信號(hào)的輸出應(yīng)該為:wir=0(不寫IR)wpc=0(不寫PC)selpc=1(選擇PC)alusrcb=3(選擇左移2位后的offset)sex

8、t=1(符號(hào)位擴(kuò)展)aluc=x000(ALU做加法)pcsource=x(任意,因?yàn)椴粚慞C) 指令j,jal和jr在本周期完成最后的操作是無條件轉(zhuǎn)移。具體如下:j: PCPC31:28,address,00;jal: RegisterFile31PC; PCPC31:28,address,00; jr: PC RegisterFilers; 電路如下圖。圖 指令譯碼周期ID(包括j,jal和jr)PCa doMem40123pcsourceControlUnitopfunc a alucALU zb alusrcbselpcIR010123alucwpcwirwerna qarnb wn

9、d qbaddrsextwreg7.1.3 指令執(zhí)行周期EXE j,jal和jr在ID周期已經(jīng)完成了它們的使命,而其他指令則進(jìn)入執(zhí)行(Execution)周期。 因不同類型的指令在執(zhí)行時(shí)有不同的要求,所以要分很多種情況討論。 條件轉(zhuǎn)移指令beq和bne的執(zhí)行情況beq: if(A=B) PCC;bne: if(A!=B) PCC; 注意:寄存器C的內(nèi)容是ID周期計(jì)算出來的轉(zhuǎn)移地址。在本周期結(jié)束操作。 電路如下圖。PCa doMem40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qar

10、nb wn d qbaddrsextwreg圖 轉(zhuǎn)移指令和寄存器類型的算術(shù)邏輯運(yùn)算指令執(zhí)行周期EXEz 電路新加部分:判斷是否相等由ALU完成。判斷結(jié)束由z給出,控制部件使用它來產(chǎn)生wpc信號(hào): 如果條件滿足,修改PC,即wpc=beq z+ bne z#,pcsource=1(選擇寄存器C的內(nèi)容)。 寄存器類型的算術(shù)邏輯類型指令(add、sub、and、or和xor)所需電路與轉(zhuǎn)移指令相同,只是控制信號(hào)不同。 這些指令完成的操作:add/sub/and/or/xor: CA op B; 立即數(shù)類型的指令(addi、andi、ori、xori、lw、sw和lui)所需的電路如下圖。PCa do

11、Mem40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg圖 立即數(shù)類型指令的執(zhí)行周期EXEz 符號(hào)擴(kuò)展后的立即數(shù)連接到ALU左邊的4選1多路器的輸入端。 這些指令完成的操作如下:addi: CA+sign_extend(immediate);andi/ori/xori: CA op zero_extend(immediate);lw/sw: CA+sign_extend(offset);lui: Cimmediate16; 由于imme

12、diate和offset都是16位立即數(shù)imm,執(zhí)行這些指令時(shí),控制信號(hào)alusrcb=2(選擇立即數(shù))。寄存器移位類型指令 移位指令(sll、srl和sra)所需電路如下圖。PCa doMem40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg圖 移位類型指令的執(zhí)行周期EXEz01sashift 用了一個(gè)2選1多路器,選擇信號(hào)為shift,為1時(shí)選擇指令中的sa。 這些指令完成的操作如下:sll: CBsa;sra: Csigned(B

13、)sa; /$signed(B)sa 注意:指令中的sa只有5位,送往2選1多路器時(shí)要擴(kuò)展成32位。實(shí)際使用的只有最低5位。 本周期結(jié)束時(shí),lw和sw指令將進(jìn)入存儲(chǔ)器訪問周期MEM;其他指令將進(jìn)入結(jié)果寫回周期WB。7.1.4 存儲(chǔ)器訪問周期MEM 只有l(wèi)w和sw指令進(jìn)入存儲(chǔ)器訪問周期MEM(Memory Access)。 在EXE周期已經(jīng)計(jì)算出了存儲(chǔ)地址,放在寄存器C中。 lw和sw指令完成的操作如下:lw: DRMemoryC; /從MEM讀數(shù)sw: MemoryCB; /向MEM寫數(shù) 這2條指令在存儲(chǔ)器訪問周期所需的電路如下圖。PCa doMemdi 40123pcsourceContro

14、lUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg圖 存儲(chǔ)器訪問周期MEMz01sashiftDR01iordwmem 這里把指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合二為一。 由于取指令時(shí)使用PC作為存儲(chǔ)器地址,而讀取存儲(chǔ)器數(shù)據(jù)時(shí)使用ALU計(jì)算出的地址,所以在存儲(chǔ)器的地址輸入端使用了一個(gè)2選1多路器。 2選1多路器的選擇信號(hào)為iord。執(zhí)行l(wèi)w或sw時(shí),iord=1,選擇寄存器中的地址。 還使用了一個(gè)新的寄存器:DR(Data Register)。從存儲(chǔ)器中取出的數(shù)據(jù)存放在DR中。 執(zhí)行s

15、w指令時(shí),把寄存器B的內(nèi)容寫入存儲(chǔ)器。由于B沒有寫使能端,即每個(gè)周期都更新B,所以要保證在EXE周期向B中寫入的是所希望的數(shù)據(jù),即:BRegisterrt。由于在ID周期結(jié)束時(shí)并沒有向IR寄存器寫入新的指令,所以在EXE周期向寄存器寫入的仍然是Registerrt。 sw指令在本周期結(jié)束,lw指令將進(jìn)入WB周期。 注意圖中包含了除WB之外的所有電路。7.1.5 結(jié)果寫回周期WB 結(jié)果寫回周期WB(Write Back)是把ALU的計(jì)算結(jié)果或者從存儲(chǔ)器取出的數(shù)據(jù)寫入寄存器堆。目的寄存器有rd和rt之分:add/sub/and/or/xor/sll/srl/sra: RegisterFilerdC

16、;addi/andi/ori/xori/lui: RegisterFilertC;lw: RegisterFilertC; 結(jié)果寫回周期WB的電路如下圖。結(jié)果寫回電路PCControlUnitopfuncIR01werna qarnb wn d qbjalrdrtRegfileCf01regrtwreg圖 結(jié)果寫回周期WB(忽略了其他部分的電路)01DRm2reg 控制信號(hào)m2reg選擇DR或C;regrt選擇rd或rt;jal=0;wreg=1。7.2 多周期CPU的總體電路及Verilog HDL代碼 7.2.1 多周期CPU的總體電路 多周期CPU加上存儲(chǔ)器的總體電路圖如下圖。 除了控制

17、部件,其他所有的部件都已經(jīng)在設(shè)計(jì)單周期CPU時(shí)描述過了。PCa doMemdi 40123pcsourceControlUnitopfunc a aluc zALUb alusrcbselpcIR010123alucwpcwirwerna qarnb wn d qbaddrsextwreg圖 多周期CPU+存儲(chǔ)器的總體電路圖z01sashiftDR01iordwmem0110rdregrtm2reg7.2.2 多周期CPU的Verilog HDL代碼 模塊mccomp是多周期CPU加上存儲(chǔ)器的Verilog HDL代碼。它調(diào)用了多周期CPU模塊mccpu和存儲(chǔ)器模塊mcmem。 模塊mccom

18、p代碼如下:module module mccomp(clock,resetn,q,a,b,alu,adr,tom,fromm,pc,ir,mem_clk);mccomp(clock,resetn,q,a,b,alu,adr,tom,fromm,pc,ir,mem_clk); parameter width=32; input clock,resetn,mem_clk; parameter width=32; input clock,resetn,mem_clk; output width-1:0a,b,alu,adr,tom,fromm,pc,ir; output width-1:0a,b,

19、alu,adr,tom,fromm,pc,ir; output 2:0 q; wire wmem; output 2:0 q; wire wmem; mccpu mccpu mc_cpu(clock,resetn,fromm,pc,ir,a,b,alu,wmem,adr,tom,q);mc_cpu(clock,resetn,fromm,pc,ir,a,b,alu,wmem,adr,tom,q); mcmem memory(clock,fromm,tom,adr,wmem,mem_clk,mem_clk); mcmem memory(clock,fromm,tom,adr,wmem,mem_cl

20、k,mem_clk);endmoduleendmodule CPU模塊mccpu中調(diào)用了控制部件mccu模塊,其代碼在下一節(jié)給出。 CPU模塊mccpu代碼見mccpu.v。7.3 用有限狀態(tài)機(jī)實(shí)現(xiàn)多周期CPU的控制部件 可以用典型的時(shí)序電路圖來實(shí)現(xiàn)多周期CPU的控制部件。重要工作是確定狀態(tài)轉(zhuǎn)移圖(非唯一的)。 7.3.1 多周期CPU的控制部件的狀態(tài)轉(zhuǎn)移圖 在此給出的只是一種可能的狀態(tài)圖如下圖。sif000sid001sexe010swb000smem000startothersothersjjaljrbeqbnesw lwswlw圖 多周期CPU控制部件的狀態(tài)轉(zhuǎn)移圖 從圖中可以看出:三條跳

21、轉(zhuǎn)指令(j,jal和jr)用了2個(gè)周期。二條條件指令(beq和bne)用了3個(gè)周期。lw指令用了5個(gè)周期。其余指令均用了4個(gè)周期。 圖中的每個(gè)狀態(tài)代表一個(gè)周期,每個(gè)狀態(tài)分別指定了一個(gè)唯一的3位二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)是每個(gè)狀態(tài)的“身份證號(hào)碼”。7.3.2 多周期CPU的控制部件的總體結(jié)構(gòu) 多周期CPU控制部件的電路結(jié)構(gòu)圖如下圖。圖 多周期CPU控制部件的電路結(jié)構(gòu)圖輸出函數(shù)wpcpcsource1:0wiriordwmemaluc3:0selpcshiftalusrcb1:0setxwregm2regregrtjal下一狀態(tài)d2:0 q2:0clrn D觸發(fā)器clrnclrop,funcz 上圖是

22、一個(gè)典型的時(shí)序電路。D觸發(fā)器保存當(dāng)前狀態(tài),其余2個(gè)模塊是組合電路,分別產(chǎn)生表示下一狀態(tài)的3位二進(jìn)制數(shù)和控制信號(hào)。7.3.3 下一狀態(tài) 圖中的“下一狀態(tài)”模塊是組合電路,用于產(chǎn)生下一狀態(tài)的信息d2:0。 d2:0在上升沿處被存入D觸發(fā)器,D觸發(fā)器的輸出q2:0是當(dāng)前狀態(tài)。 根據(jù)狀態(tài)轉(zhuǎn)移圖,得到真值表如下表 下一狀態(tài)函數(shù)的真值表當(dāng)前狀態(tài)當(dāng)前狀態(tài)輸入輸入下一狀態(tài)下一狀態(tài)狀態(tài)q2:0op5:0狀態(tài)d2:0sif000 xsid001sid001i_jsif000i_jalsif000i_jrsif000otherssexe010sexe010i_beqsif000i_bnesif000i_lwsmem011i_swsmem011othersswb100smem011i_lwswb100i_swsif000swb100 xsif000 由真值表,可以得到邏輯表達(dá)式如下:sif=q2#*q1#*q0#;sid=q2#*q1#*q0;sexe=q2#*q1* q0#;smem=q2#*q1*q0;swb=q2*q1#*q0#;d0=i_sif+i_sexe*(i_lw+i_sw);d1=sid*(i_j+i_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論