xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告.docx
- 文档编号:3484438
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:5
- 大小:18.76KB
xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告.docx
《xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告.docx》由会员分享,可在线阅读,更多相关《xx大学计算机原理 实验四 多周期MIPS CPU存储器实验预习报告.docx(5页珍藏版)》请在冰豆网上搜索。
xx大学计算机原理实验四多周期MIPSCPU存储器实验预习报告
湘潭大学计算机原理实验四多周期MIPSCPU+存储器实验预习报告
实验四多周期MIPSCPU+存储器实验
一.实验目的
1、深入理解MIPS—CPU指令系统的功能和工作原理;2、掌握多周期CPU的工作原理和逻辑功能实现;
3、熟练掌握用VerilogHDL语言设计多周期存储器的方法;
4、熟练掌握对多周期存储器的仿真实验验证和硬件测试两种调试方法;5、通过对多周期CPU的运行情况进行观察和分析,进一步加深理解。
二.实验设备
硬件:
现代计算机组成原理实验系统Nios32位嵌入式系统实验开发平台EP1C12Q240
Corei3-3240CPU@的内存软件:
QuartusII MicrosoftWindowsxp
三.实验内容
1、设计一个32位MIPS多周期CPU具体的要求如下:
至少运行下列的6类32条MIPS指令。
算术逻辑指令and、sub、addi
逻辑运算指令and、0r、xor、andi、ori、xori位移指令sll、srl、sra条件分支指令beq、bne、无条件跳转指令j、jr数据传送指令lw、sw2.设计一个存储器
四.实验原理与步骤
实现上述原理框图根据功能将其分划分为控制单元(cunit)、执行单元(eunit)、指令单元(iunit)以及存储单元(munit)四大模块。
.控制单元(cunit)是多周期微处理器的核心控制微处理器取指令、指令译码和指令执行等工作。
主要指令译码器控制器(outputscontrol)、算术逻辑运算控制器(ALUcontrol)两个子模块组成。
.执行单元(eunit)主要寄存器堆(registers)和算术逻辑单元(ALU)两个子模块组成。
其中寄存器是微处理器最基本的元素MIPS系统的寄存器堆32个32位寄存器组成而ALU则是微处理器的主要功能部件执行加、减、比较等算术运算和与、或、或非、异或等逻辑运算。
指令单元(iunit)的作用是决定下一条指令的地址PC值。
.存储单元(munit)存储器(memory)、指令寄存器(instructionregister)和存储数据寄存器(memorydataregister)组成。
五.实验源代码
寄存器元件代码:
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]; assign qa=(rna==0)0:
register[rna]; assign qb=(rnb==0)0:
register[rnb];
always@(posedgeclkornegedgeclrn)beginif(clrn==0)begin integeri; for(i=1;ia[4:
0]; 4'b1111:
cal=$signed(b)>>>a[4:
0];endcaseendfunctionendmodule
其他部件:
modulef(reg_dest,jal,wn);input[4:
0]reg_dest;input jal;output[4:
0]wn;assignwn=reg_dest|{5{jal}};endmodule
modulesa(di,dot);input[4:
0]di;output[31:
0]dot;assigndot={27'b0,di};endmodule
moduleout4(out);output[31:
0]out;assignout=32'h4;endmodule
modulee(immin,sext,immediate,offset);input[15:
0]immin;inputsext;output[31:
0]immediate,offset;wire e=sext&immin[15];wire[15:
0]imm={16{e}};assignoffset={imm[13:
0],immin[15:
0],1'b0,1'b0};assignimmediate={imm,immin[15:
0]};endmodule
modulexxbine(address,pc,add);input[25:
0]address;input[3:
0]pc;output[31:
0]add;assignadd={pc[3:
0],address[25:
0],1'b0,1'b0};endmodule
moduleconvert1(dain,sain,op,func,rs,rt,rd,imm,addr);input[31:
0]dain;output[4:
0]sain,rs,rt,rd;output[5:
0]op,func;output[15:
0]imm;output[25:
0]addr;assignsain={dain[10:
6]};assignop={dain[31:
26]};assignfunc={dain[5:
0]};assignrs={dain[25:
21]};assignrt={dain[20:
16]};assignrd={dain[15:
11]};assignimm={dain[15:
0]};assignaddr={dain[25:
0]};endmodule
moduleconvert2(pc,pcout);input[31:
0]pc;output[3:
0]pcout;assignpcout={pc[31:
28]};endmodule
存储器内的测试数据:
--Copyright(C)1991-20XXAlteraCorporation
--YouruseofAlteraCorporation'sdesigntools,logicfunctions--andothersoftwareandtools,anditsAMPPpartnerlogic--functions,andanyoutputfilesfromanyoftheforegoing--(includingdeviceprogrammingorsimulationfiles),andany--associateddocumentationorinformationareexpresslysubject--tothetermsandconditionsoftheAlteraProgramLicense--SubscriptionAgreement,AlteraMegaCoreFunctionLicense--Agreement,orotherapplicablelicenseagreement,including,--withoutlimitation,thatyouruseisforthesolepurposeof
--programminglogicdevicesmanufacturedbyAlteraandsoldby--Alteraoritsauthorizeddistributors.Pleaserefertothe--applicableagreementforfurtherdetails.
--QuartusIIgeneratedMemoryInitializationFile(.mif)
DEPTH=64; %MemorydepthandwidtharerequiredWIDTH=32; %Enteradecimalnumber ADDRESS_RADIX=HEX;-dressandvalueradixesareoptionalDATA_RADIX=HEX;%EnterBIN,DEC,HEX,orOCT;unless %otherwisespecified,radixes=HEX
CONTENTBEGIN
[0..3F]:
00000000;%Range--Everyaddressfrom0to3F=000000000:
3c010000;%(00)main:
luir1,0#addressofdata[0]1:
34240080;%(04)orir4,r1,0x80#addressofdata[0]2:
20XX0004;%(08)addir5,r0,4#counter 3:
0c000018;%(0c)call:
jalsum #callfunction4:
ac820XX0;%(10)swr2,0(r4)#storeresult5:
8c890000;%(14)lwr9,0(r4)#checksw6:
01244022;%(18)subr8,r9,r4#sub:
r8>16=ffff8000(arith)r8,r8,15#>>15=0001ffff(logic)finish#deadloop r8,r0,r0#sum r9,0(r4)#loaddata r4,4#address+4 r8,r8,r9#sum r5,-1#counter-1 r5,r0,loop#finish r2,r8,0#moveresulttov0r31#return %
%%%%%%%%%%%%%%%%%
六.EDA阶段的实验结果
仿真结果如上图。
七.测试时的电路总体结构及其说明
实验电路图
八.测试计划及其相关说明
输出说明:
于引脚及输出需要,故下表ir对应ir[31..0]且将显示高四位,pc对应pc[31..0]且将显示低两位,alu对应alu[31..0]且将显示低两位
输入clock mem_clk pc 输出alu ir clock 输入mem_clk pc 输出alu ir
九.关于实验电路设计的其他说明
于引脚及输出需要,故只输出ir、pc、aluir[31..0]切将显示ir高四位,pc[31..0]低两位,alu[31..0]低两位,q、adr、fromm、a、b、tom将不会输出
十.前期实验总结
本次实验,不仅加深了我对多周期CPU及存储器相关知识的理解,而且帮助自己回忆和复习了单周期CPU方面的知识,比如如何用VerilogHDL描述ALU模块、一些数据选择器、符号扩展电路、以及寄存器。
实验四多周期MIPSCPU+存储器实验
一.实验目的
1、深入理解MIPS—CPU指令系统的功能和工作原理;2、掌握多周期CPU的工作原理和逻辑功能实现;
3、熟练掌握用VerilogHDL语言设计多周期存储器的方法;
4、熟练掌握对多周期存储器的仿真实验验证和硬件测试两种调试方法;5、通过对多周期CPU的运行情况进行观察和分析,进一步加深理解。
二.实验设备
硬件:
现代计算机组成原理实验系统Nios32位嵌入式系统实验开发平台EP1C12Q240
Corei3-3240CPU@的内存软件:
QuartusII MicrosoftWindowsxp
三.实验内容
1、设计一个32位MIPS多周期CPU具体的要求如下:
至少运行下列的6类32条MIPS指令。
算术逻辑指令and、sub、addi
逻辑运算指令and、0r、xor、andi、ori、xori位移指令sll、srl、sra条件分支指令beq、bne、无条件跳转指令j、jr数据传送指令lw、sw2.设计一个存储器
四.实验原理与步骤
实现上述原理框图根据功能将其分划分为控制单元(cunit)、执行单元(eunit)、指令单元(iunit)以及存储单元(munit)四大模块。
.控制单元(cunit)是多周期微处理器的核心控制微处理器取指令、指令译码和指令执行等工作。
主要指令译码器控制器(outputscontrol)、算术逻辑运算控制器(ALUcontrol)两个子模块组成。
.执行单元(eunit)主要寄存器堆(registers)和算术逻辑单元(ALU)两个子模块组成。
其中寄存器是微处理器最基本的元素MIPS系统的寄存器堆32个32位寄存器组成而ALU则是微处理器的主要功能部件执行加、减、比较等算术运算和与、或、或非、异或等逻辑运算。
指令单元(iunit)的作用是决定下一条指令的地址PC值。
.存储单元(munit)存储器(memory)、指令寄存器(instructionregister)和存储数据寄存器(memorydataregister)组成。
五.实验源代码
寄存器元件代码:
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]; assign qa=(rna==0)0:
register[rna]; assign qb=(rnb==0)0:
register[rnb];
always@(posedgeclkornegedgeclrn)beginif(clrn==0)begin integeri; for(i=1;i<32;i=i+1) register[i]<=0;endelsebegin if((wn!
=0)&&(we==1)) register[wn]<=d;endendendmodule
32位四选一选择器:
modulemux4x32(a0,a1,a2,a3,s,y);input[31:
0]a0,a1,a2,a3;input[1:
0]s;output[31:
0]y;function[31:
0]select;input[31:
0]a0,a1,a2,a3;input[1:
0]s;case(s) 2'b00:
select=a0; 2'b01:
select=a1; 2'b10:
select=a2; 2'b11:
select=a3;endcaseendfunctionassigny=select(a0,a1,a2,a3,s);endmodule
//r1-r31//read//read
//reset
//write
5位二选一选择器:
modulemux2x5(a0,a1,s,y);input[4:
0]a0,a1;inputs;output[4:
0]y;assigny=sa1:
a0;endmodule
32位二选一选择器:
modulemux2x32(a0,a1,s,y);input[31:
0]a0,a1;inputs;output[31:
0]y;assigny=sa1:
a0;endmodule
存储器元件:
modulemcmem(clk,dataout,datain,addr,we,inclk,outclk);input[31:
0]datain;input[31:
0]addr;inputclk,we,inclk,outclk;output[31:
0]dataout;wire write_enable=we&~clk;lpm_ram_dqram
(.data(datain),.address(addr[7:
2]),.we(write_enable),.inclock(inclk),.outclock(outclk),.q(dataout));defparam_width=32;defparam_widthad=6;defparam_indata=\defparam_outdata=\defparam_file =\defparam_address_control=\endmodule
控制部件:
modulemccu(op,func,z,clock,resetn,wpc,wir,wmem,wreg,iord,regrt,m2reg,aluc,shift,alusrca,alusrcb,pcsource,jal,sext,state);input[5:
0]op,func;inputz,clock,resetn;outputregwpc,wir,wmem,wreg,iord,regrt,m2reg;outputreg[3:
0]aluc;outputreg[1:
0]alusrcb,pcsource;outputregshift,alusrca,jal,sext;outputreg[2:
0]state;
reg[2:
0]next_state;parameter[2:
0]sif=3'b000, //IFstate sid=3'b001, //IDstate sexe=3'b010, //EXEstate smem=3'b011, //MEMstate swb=3'b100; //WBstatewirer_type,i_add,i_sub,i_and,i_or,i_xor,i_sll,i_srl,i_sra,i_jr;
wirei_addi,i_andi,i_ori,i_xori,i_lw,i_sw,i_beq,i_bne,i_lui,i_j,i_jal;and(r_type,~op[5],~op[4],~op[3],~op[2],~op[1],~op[0]);
and(i_add,r_type,func[5],~func[4],~func[3],~func[2],~func[1],~func[0]);and(i_sub,r_type,func[5],~func[4],~func[3],~func[2],func[1],~func[0]);and(i_and,r_type,func[5],~func[4],~func[3],func[2],~func[1],~func[0]);and(i_or,r_type,func[5],~func[4],~func[3],func[2],~func[1],func[0]);and(i_xor,r_type,func[5],~func[4],~func[3],func[2],func[1],~func[0]);and(i_sll,r_type,~func[5],~func[4],~func[3],~func[2],~func[1],~func[0]);and(i_srl,r_type,~func[5],~func[4],~func[3],~func[2],func[1],~func[0]);and(i_sra,r_type,~func[5],~func[4],~func[3],~func[2],func[1],func[0]);and(i_jr,r_type,~func[5],~func[4],func[3],~func[2],~func[1],~func[0]);and(i_addi,~op[5],~op[4],op[3],~op[2],~op[1],~op[0]);and(i_andi,~op[5],~op[4],op[3],op[2],~op[1],~op[0]);and(i_ori,~op[5],~op[4],op[3],op[2],~op[1],op[0]);and(i_xori,~op[5],~op[4],op[3],op[2],op[1],~op[0]);and(i_lw,op[5],~op[4],~op[3],~op[2],op[1],op[0]);and(i_sw,op[5],~op[4],op[3],~op[2],op[1],op[0]);and(i_beq,~op[5],~op[4],~op[3],op[2],~op[1],op[0]);and(i_bne,~op[5],~op[4],~op[3],op[2],~op[1],op[0]);and(i_lui,~op[5],~op[4],op[3],op[2],op[1],op[0]);and(i_j,~op[5],~op[4],~op[3],~op[2],op[1],~op[0]);and(i_jal,~op[5],~op[4],~op[3],~op[2],op[1],op[0]);wirei_shift;
or(i_shift,i_sll,i_srl,i_sra);always@*begin //controlsignals'dfaultoutputs:
wpc=0; //donotwritepcwir=0; //donotwriteirwmem=0; //donotwritememorywreg=0; //donotwriteregisterfileiord=0; //selectpcasmemoryaddressaluc=4'bx000; //ALUoperation:
addalusrca=0; //ALUinputa:
regaorsaalusrcb=2'h0; //ALUinputb:
regbregrt=0; //regdestno:
rdm2reg=0; //selectregcshift=0; //
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- xx大学计算机原理 实验四 多周期MIPS CPU 存储器实验预习报告 xx 大学计算机 原理 实验 周期 MIPS 存储器 预习 报告