您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 杭电计组实验8-实现R型指令的CPU设计实验
实验报告2018年6月1日成绩:姓名阳光男学号16041321班级16052317专业计算机科学与技术课程名称《计算机组成原理与系统结构试验》任课老师张翔老师指导老师张翔老师机位号无实验序号8实验名称《实验八实现R型指令的CPU设计实验》实验时间2018/5/25实验地点1教225实验设备号个人电脑一、实验程序源代码顶层LED测试模块:moduleTop_LED(clk,rst,SW,LED);inputclk,rst;input[2:0]SW;outputreg[7:0]LED;wireZF,OF;wire[31:0]ALU_F;top_R_cputest_cpu(rst,clk,ZF,OF,ALU_F);always@(*)begincase(SW)3'b000:LED=ALU_F[7:0];3'b001:LED=ALU_F[15:8];3'b010:LED=ALU_F[23:16];3'b011:LED=ALU_F[31:24];3'b100:beginLED[7:2]=0;LED[1]=OF;LED[0]=ZF;enddefault:LED=0;endcaseendendmodule顶层R型CPU模块:moduletop_R_cpu(inputrst,inputclk,outputZF,outputOF,output[31:0]F);regwrite_reg;wire[31:0]Inst_code;wire[31:0]R_Data_A;wire[31:0]R_Data_B;reg[2:0]ALU_OP;pcpc_connect(clk,rst,Inst_code);Register_fileR_connect(Inst_code[25:21],Inst_code[20:16],Inst_code[15:11],write_reg,F,~clk,rst,R_Data_A,R_Data_B);ALUALU_connect(R_Data_A,R_Data_B,F,ALU_OP,ZF,OF);always@(*)beginwrite_reg=0;ALU_OP=0;if(Inst_code[31:26]==0)begincase(Inst_code[5:0])6'b100000:ALU_OP=3'b100;6'b100010:ALU_OP=3'b101;6'b100100:ALU_OP=3'b000;6'b100101:ALU_OP=3'b001;6'b100110:ALU_OP=3'b010;6'b100111:ALU_OP=3'b011;6'b101011:ALU_OP=3'b110;6'b000100:ALU_OP=3'b111;endcasewrite_reg=1;endendendmodulePC取指令模块:modulepc(inputclk,inputrst,output[31:0]Inst_code);reg[31:0]PC;wire[31:0]PC_new;initialPC=32'h00000000;Inst_ROMInst_ROM1(.clka(clk),.addra(PC[7:2]),.douta(Inst_code));assignPC_new={24'h000000,PC_new[7:0]};always@(negedgeclkorposedgerst)beginif(rst)PC=32'h00000000;elsePC=PC_new;endendmodule寄存器堆模块:moduleRegister_file(R_Addr_A,R_Addr_B,W_Addr,Write_Reg,W_Data,Clk,Reset,R_Data_A,R_Data_B);input[4:0]R_Addr_A;input[4:0]R_Addr_B;input[4:0]W_Addr;inputWrite_Reg;input[31:0]W_Data;inputClk;inputReset;output[31:0]R_Data_A;output[31:0]R_Data_B;reg[31:0]REG_Files[0:31];reg[5:0]i;initial//仿真过程中的初始化beginfor(i=0;i=31;i=i+1)REG_Files[i]=0;endassignR_Data_A=REG_Files[R_Addr_A];assignR_Data_B=REG_Files[R_Addr_B];always@(posedgeClkorposedgeReset)beginif(Reset)for(i=0;i=31;i=i+1)REG_Files[i]=0;elseif(Write_Reg&&W_Addr!=0)REG_Files[W_Addr]=W_Data;endendmoduleALU算术逻辑运算单元模块:moduleALU(A,B,F,ALU_OP,ZF,OF);input[31:0]A,B;input[2:0]ALU_OP;outputregZF,OF;outputreg[31:0]F;regC32;always@(*)beginOF=1'b0;C32=1'b0;case(ALU_OP)3'b000:F=A&B;3'b001:F=A|B;3'b010:F=A^B;3'b011:F=~(A^B);3'b100:begin{C32,F}=A+B;OF=A[31]^B[31]^F[31]^C32;end3'b101:begin{C32,F}=A-B;OF=A[31]^B[31]^F[31]^C32;end3'b110:if(AB)F=1;elseF=0;3'b111:F=BA;endcaseif(F==0)ZF=1;elseZF=0;endendmodule测试代码:moduletest;//Inputsregrst;regclk;//OutputswireZF;wireOF;wire[31:0]F;//InstantiatetheUnitUnderTest(UUT)top_R_cpuuut(.rst(rst),.clk(clk),.ZF(ZF),.OF(OF),.F(F));initialbegin//InitializeInputsrst=0;clk=0;//Wait100nsforglobalresettofinish#100;clk=1;//Addstimulushereforeverbegin#50;clk=~clk;endendendmodule二、仿真波形三、电路图顶层电路模块顶层电路内部结构:四、引脚配置(约束文件)NETLED[7]LOC=T11;NETLED[6]LOC=R11;NETLED[5]LOC=N11;NETLED[4]LOC=M11;NETLED[3]LOC=V15;NETLED[2]LOC=U15;NETLED[1]LOC=V16;NETLED[0]LOC=U16;NETSW[2]LOC=V9;NETSW[1]LOC=T9;NETSW[0]LOC=T10;NETclkLOC=C9;NETrstLOC=C4;五、思考与探索(1)R型指令CPU实验结果记录表序号指令执行结果标志结论10000827FFFFFFFF00正确20001102b0000_000100正确3004218200000_000200正确4006220200000_000300正确5008328200000_000500正确600a330200000_000700正确7004638040000_000E00正确800a648200000_000C00正确9012640040000_700000正确1000284826FFFF_8FFF00正确1101215020FFFF_8FFE00正确12010758220000_6FF200正确1300e86022FFFF_900E00正确14012c6824FFFF_800E00正确15012c7025FFFF_9FFF00正确1600c778250000_FFFF00正确
本文标题:杭电计组实验8-实现R型指令的CPU设计实验
链接地址:https://www.777doc.com/doc-1922365 .html