華中科技大學(xué)HUST類MIPS單周期微處理器設(shè)計(jì)實(shí)驗(yàn)報告(共34頁)_第1頁
華中科技大學(xué)HUST類MIPS單周期微處理器設(shè)計(jì)實(shí)驗(yàn)報告(共34頁)_第2頁
華中科技大學(xué)HUST類MIPS單周期微處理器設(shè)計(jì)實(shí)驗(yàn)報告(共34頁)_第3頁
華中科技大學(xué)HUST類MIPS單周期微處理器設(shè)計(jì)實(shí)驗(yàn)報告(共34頁)_第4頁
華中科技大學(xué)HUST類MIPS單周期微處理器設(shè)計(jì)實(shí)驗(yàn)報告(共34頁)_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上類MIPS單周期微處理器設(shè)計(jì)實(shí)驗(yàn)報告專業(yè):班級: 學(xué)號: 姓名: 一、 微處理器各模塊設(shè)計(jì)各模塊的框圖結(jié)構(gòu)如上圖所示。由圖可知,該處理器包含指令存儲器、數(shù)據(jù)存儲器、寄存器組、ALU單元、符號數(shù)擴(kuò)張、控制器、ALU控制譯碼以及多路復(fù)用器等。圖中還忽略了一個單元:時鐘信號產(chǎn)生器,而且以上各個部件必須在時鐘信號的控制下協(xié)調(diào)工作。1. 指令存儲器的設(shè)計(jì)指令寄存器為ROM類型的存儲器,為單一輸出指令的存儲器。因此其對外的接口為clk、存儲器地址輸入信號(指令指針)以及數(shù)據(jù)輸出信號(指令)。(1)在IP wizard 中配置ROM,分配128個字的存儲空間,字長為32位寬。(2)

2、選擇輸入具有地址寄存功能,只有當(dāng)時鐘上升沿有效時,才進(jìn)行數(shù)據(jù)的輸出。(3)配置ROM內(nèi)存空間的初始化COE文件。最后單擊Generate按鈕生成IROM模塊。2. 數(shù)據(jù)存儲器的設(shè)計(jì)數(shù)據(jù)存儲器為RAM類型的存儲器,并且需要獨(dú)立的讀寫控制信號。因此其對外的接口輸入信號為clk、we、datain、addr;輸出信號為dataout。數(shù)據(jù)存儲器基本建立過程同ROM的建立。3. 寄存器組設(shè)計(jì)寄存器組是指令操作的主要對象,MIPS中一共有32個32位寄存器。在指令的操作過程中需要區(qū)分Rs、Rt、Rd的地址和數(shù)據(jù),并且Rd的數(shù)據(jù)只有在寄存器寫信號有效時才能寫入,因此該模塊的輸入為clk、RegWriteA

3、ddr、RegWriteData、RegWriteEn、RsAddr、RtAddr、reset;輸出信號為RsData、RtData。由于$0一直輸出0,因此當(dāng)RsAddr、RtAddr為0時,RsData以及RtData必須輸出0,否則輸出相應(yīng)地址寄存器的值。另外,當(dāng)RegWriteEn有效時,數(shù)據(jù)應(yīng)該寫入RegWriteAddr寄存器。并且每次復(fù)位時所有寄存器都清零。代碼如下:module regFile( input clk, input reset, input 31:0 regWriteData, input 4:0 regWriteAddr, input regWriteEn, o

4、utput 31:0 RsData, output 31:0 RtData, input 4:0 RsAddr, input 4:0 RtAddr );reg31:0 regs0:31;assign RsData = (RsAddr = 5'b0)?32'b0:regsRsAddr;assign RtData = (RtAddr = 5'b0)?32'b0:regsRtAddr;integer i;always (posedge clk)beginif(!reset)beginif(regWriteEn=1)beginregsregWriteAddr=regWr

5、iteData;endendelsebeginfor(i=0;i<31;i=i+1)regsi=0;regs31=32'hffffffff;endendendmodule4. ALU設(shè)計(jì)在這個簡單的MIPS指令集中,微處理器支持add、sub、and、or、slt運(yùn)算指令,需要利用ALU單元實(shí)現(xiàn)運(yùn)算,同時數(shù)據(jù)存儲指令sw、lw也需要ALU單元計(jì)算存儲器地址,條件跳轉(zhuǎn)指令beq需要ALU來比較兩個寄存器是否相等。所有這些指令包含的操作為加、減、與、或小于設(shè)置5種不同的操作。該模塊根據(jù)輸入控制信號對輸入數(shù)據(jù)進(jìn)行相應(yīng)的操作,并獲得輸出結(jié)果以及零標(biāo)示,由于MIPS處理器ALU單元利用4根

6、輸入控制線的譯碼決定執(zhí)行何種操作,因此該模塊的接口為:輸入:input1(32bit),input2(32bit),aluCtr(4bit)輸出:zero(1bit),alluRes(32bit)代碼如下:module ALU( input 31:0 input1, input 31:0 input2, input 3:0 aluCtr, output 31:0 aluRes, output zero );reg zero;reg31:0 aluRes;always (input1 or input2 or aluCtr)begincase(aluCtr)4'b0110:beginal

7、uRes=input1-input2;if(aluRes=0)zero=1;elsezero=0;end4'b0010:aluRes=input1+input2;4'b0000:aluRes=input1&input2;4'b0001:aluRes=input1|input2;4'b1100:aluRes=(input1|input2);4'b0111:beginif(input1<input2)aluRes = 1;enddefault:aluRes = 0;endcaseendendmodule5. ALU控制設(shè)計(jì)ALU單元對應(yīng)以上5種

8、操作的編碼如表所示:輸入信號操作類型0000與0001或0010加0110減0111小于設(shè)置通過2位操作類型碼以及6位指令功能碼就可以產(chǎn)生ALU單元的4位控制信號。它們之間的對應(yīng)關(guān)系如表所示:因此該模塊的主要功能就是根據(jù)譯碼控制單元產(chǎn)生2位操作碼以及6位功能碼產(chǎn)生4位ALU控制信號,接口為:輸入:aluop(2bit),funt(6bit)輸出:aluctr(4bit)代碼為:module aluctr( input 1:0 ALUOp, input 5:0 funct, output 3:0 ALUCtr );reg3:0 ALUCtr;always (ALUOp or funct)case

9、x(ALUOp,funct)8'b00xxxxxx:ALUCtr=4'b0010;8'b01xxxxxx:ALUCtr=4'b0110;8'b11xxxxxx:ALUCtr=4'b0000;8'b10xx0000:ALUCtr=4'b0010;8'b10xx0010:ALUCtr=4'b0110;8'b10xx0100:ALUCtr=4'b0000;8'b10xx0101:ALUCtr=4'b0001;8'b10xx1010:ALUCtr=4'b0111;endcas

10、eendmodule6. 控制器設(shè)計(jì)控制器輸入為指令的opCode字段,即操作碼。操作碼經(jīng)過主控制單元的譯碼,給ALUCtr、Data、Memory、Registers、Muxs等部件輸出正的控制信號。微處理器在執(zhí)行不同指令時,控制信號相對應(yīng)的狀態(tài)表如下:因此該模塊的接口為:輸入:opcode(6bit)輸出:alusrc,memtoreg,regwrite,memread,memwrite,branch,aluop1:0,jmp代碼為:module ctr( input 5:0 opCode, output regDst, output aluSrc, output memToReg, ou

11、tput regWrite, output memRead, output memWrite, output branch, output 1:0 aluop, output jmp );reg regDst;reg aluSrc;reg memToReg;reg regWrite;reg memRead;reg memWrite;reg branch;reg1:0 aluop;reg jmp;always (opCode)begincase(opCode)6'b:/jmpbeginregDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;me

12、mWrite=0;branch=0;aluop=2'b00;jmp=1;end6'b:/RbeginregDst=1;aluSrc=0;memToReg=0;regWrite=1;memRead=0;memWrite=0;branch=0;aluop=2'b10;jmp=0;end6'b:/lwbeginregDst=0;aluSrc=1;memToReg=1;regWrite=1;memRead=1;memWrite=0;branch=0;aluop=2'b00;jmp=0;end6'b:/swbeginregDst=0;aluSrc=1;me

13、mToReg=0;regWrite=0;memRead=0;memWrite=1;branch=0;aluop=2'b00;jmp=0;end6'b:/beqbeginregDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;memWrite=0;branch=1;aluop=2'b01;jmp=0;end6'b:/andibeginregDst=0;aluSrc=1;memToReg=0;regWrite=1;memRead=0;memWrite=0;branch=0;aluop=2'b11;jmp=0;end

14、default:beginregDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;memWrite=0;branch=0;aluop=2'b00;jmp=0;endendcaseendendmodule7. 符號數(shù)擴(kuò)展將16位有符號擴(kuò)展為32位有符號數(shù)。帶符號擴(kuò)展只需要在前面補(bǔ)足符號即可。代碼為:module signext( input 15:0 inst, output 31:0 data );assign data=inst15:15?16'hffff,inst:16'h0000,inst;endmodule8. 頂層模

15、塊頂層模塊需要將前面多個模塊實(shí)例化,通過導(dǎo)線以及多路復(fù)用器將各個部件連接起來,并且在時鐘的控制下修改PC的值,PC是一個32位的寄存器,每個時鐘沿自動增加4。多路復(fù)用器MUX直接通過三目運(yùn)算符實(shí)現(xiàn):Assign OUT = SEL?INPUT1:INPUT2;其中,OUT、SEL、INPUT1、INPUT2都是預(yù)先定義的信號。代碼如下:module top( input clkin, input reset );reg31:0 pc,add4;wire choose4;wire31:0 expand2,mux2,mux3,mux4,mux5,address,jmpaddr,inst;wire4

16、:0 mux1;/wire for controllerwire reg_dst,jmp,branch,memread,memwrite,memtoreg;wire1:0 aluop;wire alu_src,regwrite;/wire for aluunitwire zero;wire31:0 aluRes;/wire for aluctrwire3:0 aluCtr;/wire for memorywire31:0 memreaddata;/wire for registerwire31:0 RsData,RtData;/wireforextwire31:0 expand;always

17、(negedge clkin)beginif(!reset) beginpc=mux5;add4=pc+4;endelse beginpc=32'b0;add4=32'h4;endendctr mainctr(.opCode(inst31:26),.regDst(reg_dst),.aluSrc(alu_scr),.memToReg(memtoreg),.regWrite(regwrite),.memRead(memread),.memWrite(memwrite),.branch(branch),.aluop(aluop),.jmp(jmp);ALU alu(.input1(

18、RsData),.input2(mux2),.aluCtr(aluCtr),.zero(zero),.aluRes(aluRes);aluctr aluctr1(.ALUOp(aluop),.funct(inst5:0),.ALUCtr(aluCtr);dram dmem(.a(aluRes7:2),.d(RtData),.clk(!clkin),.we(memwrite),.spo(memreaddata);irom_number imem(.a(pc8:2),.clk(clkin),.spo(inst);regFile regfile(.RsAddr(inst25:21),.RtAddr(

19、inst20:16),.clk(!clkin),.reset(reset),.regWriteAddr(mux1),.regWriteData(mux3),.regWriteEn(regwrite),.RsData(RsData),.RtData(RtData);signext signext(.inst(inst15:0),.data(expand);assign mux1=reg_dst?inst15:11:inst20:16;assign mux2=alu_scr?expand:RtData;assign mux3=memtoreg?memreaddata:aluRes;assign m

20、ux4=choose4?address:add4;assign mux5=jmp?jmpaddr:mux4;assign choose4=branch&zero;assign expand2=expand<<2;assign jmpaddr=add431:28,inst25:0,2'b00;assign address=pc+expand2;endmodule二、 Rom匯編程序設(shè)計(jì)下面以將本人學(xué)號U的ASCII碼存入RAM的連續(xù)內(nèi)存區(qū)域編寫為匯編程序?yàn)槔壕庉婱IPS匯編源代碼:采用ultraedit編輯匯編源程序代碼,并保存為number.asm文件。代碼如下:

21、main:andi $2,$31,85 #Usw $2,0($3)andi $2,$31,50 #2sw $2,4($3)andi $2,$31,48 #0sw $2,8($3)andi $2,$31,49 #1sw $2,12($3)andi $2,$31,53 #5sw $2,16($3)andi $2,$31,49 #1sw $2,20($3)andi $2,$31,51 #3sw $2,24($3)andi $2,$31,51 #3sw $2,28($3)andi $2,$31,52 #4sw $2,32($3)andi $2,$31,51 #3sw $2,36($3)j main獲取

22、機(jī)器代碼,并保存為coe文件:利用QtSpim裝載number.asm,并測試功能是否正常。裝載之后的用戶代碼段在QtSpim中的結(jié)構(gòu)如附圖所示:提取的用戶代碼對應(yīng)的機(jī)器碼,并把j main指令對應(yīng)的機(jī)器碼0x修改為0x。將上述機(jī)器指令保存在ultraedit中新的文件中,添加coe文件頭描述語句,完成后的完整coe文件內(nèi)容如下:MEMORY_INITIALIZATION_RADIX=16;MEMORY_INITIALIZATION_VECTOR=33e20055,ac,33e20032,ac,33e20030,ac,33e20031,ac62000c,33e20035,ac,33e20031

23、,ac,33e20033,ac,33e20033,ac62001c,33e20034,ac,33e20033,ac,將該文件保存為coe文件,即number.coe。至此,coe文件制作完成。最后,把coe文件導(dǎo)入irom中,如下圖所示:三、 模塊仿真1. 寄存器組仿真:建立仿真代碼,在自動生成的激勵代碼基礎(chǔ)上加入功能仿真需要的代碼:reset測試、寫入測試、輸出測試等、完整代碼如下:module regsim;/ Inputsreg clk;reg reset;reg 31:0 regWriteData;reg 4:0 regWriteAddr;reg regWriteEn;reg 4:0

24、RsAddr;reg 4:0 RtAddr;/ Outputswire 31:0 RsData;wire 31:0 RtData;/ Instantiate the Unit Under Test (UUT)regFile uut (.clk(clk), .reset(reset), .regWriteData(regWriteData), .regWriteAddr(regWriteAddr), .regWriteEn(regWriteEn), .RsData(RsData), .RtData(RtData), .RsAddr(RsAddr), .RtAddr(RtAddr);integer

25、 i;initial begin/ Initialize Inputsclk = 0;reset = 0;regWriteData = 0;regWriteAddr = 0;regWriteEn = 0;RsAddr = 0;RtAddr = 0;/ Wait 100 ns for global reset to finish#100; / Add stimulus hereregWriteData=32'h55aaaa55;regWriteEn=1;reset=1;#100;reset=0;end parameter PERIOD = 20;always beginclk = 1&#

26、39;b0;#(PERIOD/2) clk = 1'b1;#(PERIOD/2);endalways beginfor(i = 31; i>= 1; i=i-1) beginregWriteAddr = i;RsAddr=i;#PERIOD;endendendmodule仿真結(jié)果如下:下圖可以觀察到Reset為高電平狀態(tài)。Reset高電平狀態(tài)下輸出數(shù)據(jù)為0,表示Reset有效地工作了。Reset信號無效后,正常輸入和輸出數(shù)據(jù)。第一次for循環(huán)的地址范圍輸出數(shù)據(jù)在時鐘低電平時輸出0,高電平輸出0x55aaaa55,如下圖所示,表明數(shù)據(jù)正確地在時鐘上升沿寫入的。之后一直輸出的數(shù)據(jù)與寫

27、入的數(shù)據(jù)相同,表明數(shù)據(jù)都正確地保存在寄存器組中。2. 控制器仿真:控制器仿真需要包含所有case的輸入,仿真激勵文件修改代碼后,如下:module ctrsim;/ Inputsreg 5:0 opCode;/ Outputswire regDst;wire aluSrc;wire memToReg;wire regWrite;wire memRead;wire memWrite;wire branch;wire 1:0 aluop;wire jmp;/ Instantiate the Unit Under Test (UUT)ctr uut (.opCode(opCode), .regDst

28、(regDst), .aluSrc(aluSrc), .memToReg(memToReg), .regWrite(regWrite), .memRead(memRead), .memWrite(memWrite), .branch(branch), .aluop(aluop), .jmp(jmp);initial begin/ Initialize InputsopCode = 0;/ Wait 100 ns for global reset to finish#100; opCode=6'b;/jump#100; opCode=6'b;/R#100; opCode=6

29、9;b;/lw#100; opCode=6'b;/sw#100; opCode=6'b;endendmodule所有case下的仿真波形如圖所示,將該波形圖與之前的表格對吧發(fā)現(xiàn)功能正確。3. 頂層仿真:激勵代碼如下:module topsim;/ Inputsreg clkin;reg reset;/ Instantiate the Unit Under Test (UUT)top uut (.clkin(clkin), .reset(reset);initial begin/ Initialize Inputsclkin = 0;reset = 0;/ Add stimulus here#100; reset = 1; #100; reset = 0; end parameter PER

溫馨提示

  • 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

提交評論