杭电计组实验8-实现R型指令的CPU设计实验

文章描述:-2022年4月14日发(作者:鲁敬庄)实验报告2018年6月1日成绩:姓名专业任课老师实验序号实验时间阳光男学号课程名称张翔老师班级计算机科学与技术张翔老师/5/25指导老师实验名称实验地点《计算机组成原理与系统结构试验》机位号无《实验八实现R型指令的CPU设计实验》1教225实验设备号个人电脑一、实验程序源代码顶层LED测试模块:moduleTop_LED(clk,rst,SW,LE

-

杭电计组实验8-实现R型指令的CPU设计实验
2022年4月14日发
(作者:鲁敬庄)

实验报告2018年6月1日成绩:

姓名

专业

任课老师

实验序号

实验时间

阳光男学号

课程名称

张翔老师

班级

计算机科学与技术

张翔老师

8

2018/5/25

指导老师

实验名称

实验地点

《计算机组成原理与系统结构试

验》

机位号

《实验八实现R型指令的CPU设计实验》

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@(*)

begin

case(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;end

default:LED=0;

endcase

end

endmodule

顶层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_(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;endendendmodule

PC取指令模块:

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;

end

endmodule

寄存器堆模块:

moduleRegister_);

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;

end

assignR_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;endendmodule

ALU算术逻辑运算单元模块:

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(A

测试代码:

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;end

end

endmodule

二、仿真波形

三、电路图

顶层电路模块顶层电路内部结构:

四、引脚配置(约束文件)

ET"LED[7]"LOC=T11;

ET"LED[6]"LOC=R11;

ET"LED[5]"LOC=11;

ET"LED[4]"LOC=M11;

ET"LED[3]"LOC=V15;

ET"LED[2]"LOC=U15;

ET"LED[1]"LOC=V16;

ET"LED[0]"LOC=U16;

ET"SW[2]"LOC=V9;

ET"SW[1]"LOC=T9;

ET"SW[0]"LOC=T10;

ET"clk"LOC=C9;

ET"rst"LOC=C4;

五、思考与探索

(1)R型指令CPU实验结果记录表

序号指令执行结果标志结论10000827FFFFFFFF00正确20001102b0000_000100正确30000_000200正确40000_000300正确50000_000500正确600a330200000_000700正确70000_000E00正确800a648200000_000C00正确90000_700000正确10FFFF_8FFF00正确11FFFF_8FFE00正确120000_6FF200正确1300e86022FFFF_900E00正确14012c6824FFFF_800E00正确15012c7025FFFF_9FFF00正确1600c778250000_FFFF00正确

-

杭电计组实验8-实现R型指令的CPU设计实验

发布时间:2022-04-14 09:34:26
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 19 条评论,851人围观)

最近发表

随便看看

热门文章

标签列表