版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
.-一、實(shí)驗(yàn)?zāi)康牧私馕⑻幚砥鞯幕窘Y(jié)構(gòu)。掌握哈佛結(jié)構(gòu)的計(jì)算機(jī)工作原理。學(xué)會(huì)設(shè)計(jì)簡單的微處理器。了解軟件控制硬件工作的基本原理。二、實(shí)驗(yàn)任務(wù)利用HDL語言,基于XilinxFPGAnexys4實(shí)驗(yàn)平臺(tái),設(shè)計(jì)一個(gè)能夠執(zhí)行以下感謝閱讀MIPS指令集的單周期類MIPS處理器,要求完成所有支持指令的功能仿真,驗(yàn)證謝謝閱讀指令執(zhí)行的正確性,要求編寫匯編程序?qū)⒈救藢W(xué)號(hào)的ASCII碼存入RAM的連續(xù)感謝閱讀內(nèi)存區(qū)域。(1)支持基本的算術(shù)邏輯運(yùn)算如add,sub,and,or,slt,andi指令感謝閱讀(2)支持基本的內(nèi)存操作如lw,sw指令(3)支持基本的程序控制如beq,j指令三、實(shí)驗(yàn)過程1、建立工程ISE14.7軟件中建立名為Lab1的工程文件。芯片系列選擇Artix7,具體芯片型號(hào)選擇XC7A100T,封裝類型選擇CSG324,速度信息選擇-1。謝謝閱讀.-2、分模塊設(shè)計(jì)指令存儲(chǔ)器ROM設(shè)計(jì)新建IPcoreGenerator,命名為irom。設(shè)定的指令存儲(chǔ)器大小為128字,指精品文檔放心下載令存儲(chǔ)器模塊在頂層模塊中被調(diào)用。輸入為指令指針(PC)與時(shí)鐘信號(hào)(clkin),感謝閱讀輸出為32位的機(jī)器指令,并將輸出的機(jī)器指令送到后續(xù)的寄存器組模塊、控制謝謝閱讀器模塊、立即數(shù)符號(hào)擴(kuò)展模塊進(jìn)行相應(yīng)的處理。然后制作COE文件。先使用UltraEdit編輯代碼,代碼如下main:謝謝閱讀addi$2,$0,85sw$2,0($3)addi$2,$0,50sw$2,4($3)addi$2,$0,48sw$2,8($3)addi$2,$0,49sw$2,12($3)addi$2,$0,53 #sw$2,16($3)addi$2,$0,49 #sw$2,20($3)addi$2,$0,51 #sw$2,24($3)addi$2,$0,52 #sw$2,28($3)addi$2,$0,54 #sw$2,32($3)addi$2,$0,52 #sw$2,36($3)jmain.-將其導(dǎo)入QtSpim中,選中機(jī)器碼,加上前綴并將最后一行0x08100009修感謝閱讀改為0x08000000,代碼如下MEMORY_INITIALIZATION_RADIX=16;精品文檔放心下載MEMORY_INITIALIZATION_VECTOR=感謝閱讀20020055,ac620000,20020032,ac620004,20020030,ac620008,20020031,ac62000c,20020035,ac620010,20020031,ac620014,20020033,ac620018,20020034,ac62001c,20020036,ac620020,20020034,ac620024,08000000,保存為.coe文件,在ROM模塊里調(diào)用。數(shù)據(jù)存儲(chǔ)器RAM設(shè)計(jì)新建IPcoreGenerator,命名為dram。數(shù)據(jù)存儲(chǔ)器為RAM類型的存儲(chǔ)器,謝謝閱讀并且需要獨(dú)立的讀寫信號(hào)控制。因此其對(duì)外的接口為clk、we、datain、addr;輸謝謝閱讀出信號(hào)為dataout。當(dāng)時(shí)鐘上升沿到來時(shí),如果寫信號(hào)(we)為真,根據(jù)addr所精品文檔放心下載.-表示的地址找到對(duì)應(yīng)的存儲(chǔ)單元,并將輸入的數(shù)據(jù)(datain)寫到對(duì)應(yīng)的存儲(chǔ)單感謝閱讀元中;如果寫信號(hào)為假,則根據(jù)addr所表示的地址,將對(duì)應(yīng)存儲(chǔ)單元的數(shù)據(jù)送精品文檔放心下載到輸出端(dataout)。在本實(shí)驗(yàn)中調(diào)用ISE提供的IP核進(jìn)行設(shè)計(jì),設(shè)定的數(shù)據(jù)存精品文檔放心下載儲(chǔ)器大小為64字。數(shù)據(jù)存儲(chǔ)器模塊在頂層模塊中被調(diào)用。輸入的時(shí)鐘信號(hào)來自于頂層模塊的感謝閱讀clkin,addr信號(hào)來自于ALU單元的輸出端(對(duì)基地址與偏移量執(zhí)行加操作),感謝閱讀datain來自于寄存器組的第二個(gè)數(shù)據(jù)輸出端(Rtdata),而控制信號(hào)we則來自于謝謝閱讀控制器對(duì)指令的譯碼。輸出數(shù)據(jù)dataout通過一個(gè)選擇器(MUX3)決定是否寫精品文檔放心下載入到相應(yīng)的寄存器。初始化dram值:0x55555555,在以后的仿真過程中可以用于驗(yàn)證是否正確謝謝閱讀調(diào)用立即數(shù)符號(hào)擴(kuò)展模塊設(shè)計(jì)對(duì)于I型指令,將指令的低十六位作為立即數(shù)符號(hào)擴(kuò)展模塊的輸入inst[15:0],如果十六位立即數(shù)的最高位(即符號(hào)位)為1,則在inst[15:15]前面補(bǔ)16個(gè)1,如果為0,則在前面補(bǔ)16個(gè)0。然后將符號(hào)擴(kuò)展之后的data[31:0]通過一個(gè)選擇精品文檔放心下載器(即MUX2)輸送到ALU單元的第二個(gè)源操作數(shù)輸入端(即input2)。精品文檔放心下載代碼如下:modulesignext(input[15:0]inst,output[31:0]data);assigndata=inst[15:15]?{16'hffff,inst}:{16'h0000,inst};精品文檔放心下載endmodule.-寄存器組模塊該模塊的輸入為clk、RegWriteData、RegWriteAddr、RegWriteEn、RsAddr、感謝閱讀RtAddr和reset,輸出信號(hào)為RsData和RtData。由于$0一直輸出0,因此當(dāng)精品文檔放心下載RsAddr、RtAddr為0時(shí),RsData以及RtData必須輸出0,否則輸出相應(yīng)地址寄精品文檔放心下載存器數(shù)據(jù)。另外,當(dāng)RegWriteEn信號(hào)有效時(shí),數(shù)據(jù)應(yīng)該寫入RegWriteAddr寄存感謝閱讀器,并且每次復(fù)位時(shí)所有寄存器都清零。寄存器組模塊在頂層模塊中被調(diào)用。clk信號(hào)來自于頂層模塊的clkin,reset謝謝閱讀信號(hào)來自于頂層模塊的reset,RegWriteData來自于ALU單元的運(yùn)算結(jié)果輸出端感謝閱讀或者是數(shù)據(jù)存儲(chǔ)器的輸出端(通過一個(gè)選擇器MUX3進(jìn)行選擇),RegWriteAddr、精品文檔放心下載RsAddr、RtAddr來自于指令的對(duì)應(yīng)位,RegWriteEn來自于控制器對(duì)指令的譯碼。精品文檔放心下載輸出信號(hào)Rsdata與Rtdata則分別來自于Rsaddr與Rtaddr對(duì)應(yīng)的寄存器。謝謝閱讀代碼如下:moduleregFile(inputclk,inputreset,input[31:0]regWriteData,感謝閱讀input[4:0]regWriteAddr,inputregWriteEn,output[31:0]RsData,output[31:0]RtData,input[4:0]RsAddr,input[4:0]RtAddr);reg[31:0]regs[0:31];assignRsData=(RsAddr==5'b0)?32'b0:regs[RsAddr];assignRtData=(RtAddr==5'b0)?32'b0:regs[RtAddr];謝謝閱讀.-integeri;always@(posedgeclk)beginif(!reset)beginif(regWriteEn==1)beginregs[regWriteAddr]=regWriteData;謝謝閱讀endendelsebeginfor(i=0;i<31;i=i+1)regs[i]=0;regs[31]=32'hffffffff;endendendmodule控制器模塊控制器輸入為指令的opCode字段,即操作碼。操作碼經(jīng)過主控制單元的譯精品文檔放心下載碼,給ALUCtrl、DataMemory、Registers、Muxs等部件輸出正確的控制信號(hào)。謝謝閱讀該模塊在頂層模塊中被調(diào)用,輸入的opcode來自于指令的前6位,而輸出謝謝閱讀信號(hào)aluSrc、MemToReg、RegWrite、MemRead、MemWrite、branch、aluop和感謝閱讀jmp則是對(duì)6位opcode的譯碼。代碼如下:modulectr(input[5:0]opCode,outputregDst,outputaluSrc,outputmemToReg,.-outputregWrite,outputmemRead,outputmemWrite,outputbranch,output[1:0]aluop,outputjmp);regregDst;regaluSrc;regmemToReg;regregWrite;regmemRead;regmemWrite;regbranch;reg[1:0]aluop;regjmp;always@(opCode)begincase(opCode)6'b000010://jmpbeginregDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;memWrite=0;branch=0;aluop=2'b00;jmp=1;end6'b000000://R.-beginregDst=1;aluSrc=0;memToReg=0;regWrite=1;memRead=0;memWrite=0;branch=0;aluop=2'b10;jmp=0;end6'b100011://lwbeginregDst=0;aluSrc=1;memToReg=1;regWrite=1;memRead=1;memWrite=0;branch=0;aluop=2'b00;jmp=0;end6'b101011://swbeginregDst=0;aluSrc=1;memToReg=0;regWrite=0;memRead=0;memWrite=1;branch=0;.-aluop=2'b00;jmp=0;end6'b000100://beqbeginregDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;memWrite=0;branch=1;aluop=2'b01;jmp=0;end//6'b001100://andi6'b001000://andibeginregDst=0;aluSrc=1;memToReg=0;regWrite=1;memRead=0;memWrite=0;branch=0;//aluop=2'b11;aluop=2'b00;jmp=0;enddefault:begin.-regDst=0;aluSrc=0;memToReg=0;regWrite=0;memRead=0;memWrite=0;branch=0;aluop=2'b00;jmp=0;endendcaseendendmodule運(yùn)算器(ALU)模塊微處理器支持的add、sub、and、or和slt運(yùn)算指令,需要利用ALU單元實(shí)感謝閱讀現(xiàn)運(yùn)算,同時(shí)數(shù)據(jù)存儲(chǔ)指令sw和lw也需要通過ALU單元計(jì)算存儲(chǔ)器地址,條謝謝閱讀件跳轉(zhuǎn)指令beq需要ALU來比較兩個(gè)寄存器是否相等。所有這些指令包含的操精品文檔放心下載作為加、減、與、或和小于設(shè)置5鐘不同的操作。該模塊根據(jù)輸入控制信號(hào)對(duì)輸入數(shù)據(jù)進(jìn)行相應(yīng)的操作,并獲得輸出結(jié)果以及精品文檔放心下載零標(biāo)識(shí),由于MIPS處理器ALU單元利用4根輸入控制信線的譯碼決定執(zhí)行何種精品文檔放心下載操作,于是該操作的輸入接口為input1、input2和aluCtr,輸出端口為zero和謝謝閱讀aluRes。ALU模塊在頂層模塊被調(diào)用。input1來自于寄存器組模塊輸出信號(hào)Rsdata,input2來自于寄存器組模塊輸出信號(hào)Rtdata或者是立即數(shù)符號(hào)擴(kuò)展模塊的輸出信號(hào)(通過一個(gè)選擇器MUX2進(jìn)行選擇),aluCtr來自于aluctr模塊的輸出端。感謝閱讀aluRes與zero為ALU單元的運(yùn)算結(jié)果,其中zero主要用于beq指令。感謝閱讀.-代碼如下:moduleALU(input[31:0]input1,input[31:0]input2,input[3:0]aluCtr,output[31:0]aluRes,outputzero);regzero;reg[31:0]aluRes;always@(input1orinput2oraluCtr)謝謝閱讀begincase(aluCtr)4'b0110:beginaluRes=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;endcaseendendmoduleALU控制設(shè)計(jì)MIPS指令中具有6位操作碼,如果為R型指令,進(jìn)一步采用6位功能碼來表示R型指令的具體操作。由于設(shè)計(jì)的微處理器支持的運(yùn)算類指令全部為R型指令,因此可以通過對(duì)R型指令的6位功能碼編碼產(chǎn)生ALU的4為控制信號(hào)。但是lw、sw以及beq、j型指令沒有功能碼,因此需要區(qū)分指令的類型。由于只有三類指令需要ALU單元,因此可以采用兩位二進(jìn)制碼對(duì)指令的ALU操作類型進(jìn)行編碼。指令的ALU操作類型編碼由指令譯碼器產(chǎn)生。精品文檔放心下載通過2位操作類型碼以及6位指令功能碼就可以產(chǎn)生ALU單元的4位控制信號(hào)。謝謝閱讀該模塊的主要功能就是根據(jù)譯碼控制單元產(chǎn)生的2位操作碼以及6位功能碼產(chǎn)生4位ALU控制信號(hào),因此輸入信號(hào)為aluop(2位)、funct(6位),輸出信號(hào)為aluctr(4位)。ALU控制模塊在頂層模塊被調(diào)用。aluop來自于控制器對(duì)指令的6位opcode的譯碼,而funct來自于指令的后6位。精品文檔放心下載代碼如下:modulealuctr(input[1:0]ALUOp,input[5:0]funct,output[3:0]ALUCtr);.-reg[3:0]ALUCtr;always@(ALUOporfunct)casex({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;感謝閱讀endcaseendmodule頂層模塊設(shè)計(jì)本次實(shí)驗(yàn)中多路復(fù)用器模塊MUX以及PC模塊綜合在頂層模塊之中,頂層感謝閱讀模塊需要將前面的多個(gè)模塊實(shí)例化后,通過導(dǎo)線以及多路復(fù)用器將各個(gè)部件連接精品文檔放心下載起來,并且在時(shí)鐘的控制下修改PC的值,PC是一個(gè)32位的寄存器,每個(gè)時(shí)鐘感謝閱讀沿自動(dòng)增加4。多路復(fù)用器MUX直接通過三目運(yùn)算符實(shí)現(xiàn),例如assignOUT=SEL?INPUT1:INPUT2;感謝閱讀其中,OUT、SEL、INPUT1和INPUT2都是預(yù)先定義的信號(hào)。謝謝閱讀代碼如下:moduletop(inputclkin,inputreset);reg[31:0]pc,add4;wirechoose4;.-wire[31:0]expand2,mux2,mux3,mux4,mux5,address,jmpaddr,inst;精品文檔放心下載wire[4:0]mux1;//wireforcontrollerwirereg_dst,jmp,branch,memread,memwrite,memtoreg;wire[1:0]aluop;謝謝閱讀wirealu_src,regwrite;//wireforaluunitwirezero;wire[31:0]aluRes;//wireforaluctrwire[3:0]aluCtr;//wireformemorywire[31:0]memreaddata;//wireforregisterwire[31:0]RsData,RtData;//wireforextwire[31:0]expand;always@(negedgeclkin)beginif(!reset)beginpc=mux5;add4=pc+4;endelsebeginpc=32'b0;add4=32'h4;endendctrmainctr(.opCode(inst[31:26]),.regDst(reg_dst),.aluSrc(alu_scr),.-.memToReg(memtoreg),.regWrite(regwrite),.memRead(memread),.memWrite(memwrite),.branch(branch),.aluop(aluop),.jmp(jmp));ALUalu(.input1(RsData),.input2(mux2),.aluCtr(aluCtr),.zero(zero),.aluRes(aluRes));aluctraluctr1(.ALUOp(aluop),感謝閱讀.funct(inst[5:0]),.ALUCtr(aluCtr));dramdmem(.a(aluRes[7:2]),.d(RtData),.clk(!clkin),.we(memwrite),.spo(memreaddata));iromimem(.a(pc[8:2]),.clk(clkin),.spo(inst));regFileregfile(.RsAddr(inst[25:21]),.-.RtAddr(inst[20:16]),.clk(!clkin),.reset(reset),.regWriteAddr(mux1),.regWriteData(mux3),.regWriteEn(regwrite),.RsData(RsData),.RtData(RtData));signextsignext(.inst(inst[15:0]),.data(expand));精品文檔放心下載assignmux1=reg_dst?inst[15:11]:inst[20:16];感謝閱讀assignmux2=alu_scr?expand:RtData;精品文檔放心下載assignmux3=memtoreg?memreaddata:aluRes;感謝閱讀assignmux4=choose4?address:add4;謝謝閱讀assignmux5=jmp?jmpaddr:mux4;精品文檔放心下載assignchoose4=branch&zero;謝謝閱讀assignexpand2=expand<<2;assignjmpaddr={add4[31:28],inst[25:0],2'b00};精品文檔放心下載assignaddress=pc+expand2;謝謝閱讀endmodule3、各模塊仿真寄存器組仿真代碼如下:moduleregFile(inputclk,inputreset,input[31:0]regWriteData,精品文檔放心下載input[4:0]regWriteAddr,inputregWriteEn,output[31:0]RsData,.-output[31:0]RtData,input[4:0]RsAddr,input[4:0]RtAddr);reg[31:0]regs[0:31];assignRsData=(RsAddr==5'b0)?32'b0:regs[RsAddr];assignRtData=(RtAddr==5'b0)?32'b0:regs[RtAddr];謝謝閱讀integeri;always@(posedgeclk)beginif(!reset)beginif(regWriteEn==1)beginregs[regWriteAddr]=regWriteData;謝謝閱讀endendelsebeginfor(i=0;i<31;i=i+1)regs[i]=0;regs[31]=32
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030葡萄酒莊企業(yè)經(jīng)營模式市場分析評(píng)估發(fā)展大綱
- 2025-2030葡萄牙葡萄酒酒莊有機(jī)認(rèn)證覆蓋率深究及箱式烘焙設(shè)備改造方案與法國南部的市場接受程度分析提案報(bào)告
- 協(xié)理員25人考前自測(cè)高頻考點(diǎn)模擬試題附答案詳解ab卷
- 山東2025年山東省氣象部門事業(yè)單位招聘應(yīng)屆畢業(yè)生6人(成都信息工程大學(xué))筆試歷年參考題庫附帶答案詳解
- 2025海運(yùn)助理的面試題及答案
- 安徽安徽中醫(yī)藥高等專科學(xué)校誠邀高層次人才筆試歷年參考題庫附帶答案詳解
- 安慶2025年安徽安慶懷寧縣招聘專職社區(qū)工作者30人筆試歷年參考題庫附帶答案詳解
- 寧波浙江寧波市衛(wèi)生健康委直屬事業(yè)單位武漢專場招聘509人筆試歷年參考題庫附帶答案詳解
- 寧波2025年浙江寧波慈溪市招聘城鄉(xiāng)社區(qū)工作者83人筆試歷年參考題庫附帶答案詳解
- 嘉興2025年浙江嘉興市婦幼保健院招聘高層次人才(博士研究生)10人筆試歷年參考題庫附帶答案詳解
- 2026海南安??毓捎邢挢?zé)任公司招聘11人筆試模擬試題及答案解析
- 2026年張家界航空工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試模擬測(cè)試卷新版
- 2026遼寧機(jī)場管理集團(tuán)校招面筆試題及答案
- 2025徽銀金融租賃有限公司社會(huì)招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 2026年遼寧軌道交通職業(yè)學(xué)院單招綜合素質(zhì)筆試備考題庫帶答案解析
- DB44-T 2771-2025 全域土地綜合整治技術(shù)導(dǎo)則
- 碳排放核算及企業(yè)減排策略
- 冬季電氣設(shè)備安全培訓(xùn)課件
- 安徽省滁州市天長市2025年小學(xué)六年級(jí)期末數(shù)學(xué)試卷及答案
- 高密度聚乙烯(HDPE)排水管(八角雙密封)
- 高速公路通信設(shè)備維護(hù)手冊(cè)
評(píng)論
0/150
提交評(píng)論