杭电计组实验实现R型指令的CPU设计实验.docx
《杭电计组实验实现R型指令的CPU设计实验.docx》由会员分享,可在线阅读,更多相关《杭电计组实验实现R型指令的CPU设计实验.docx(11页珍藏版)》请在冰点文库上搜索。
![杭电计组实验实现R型指令的CPU设计实验.docx](https://file1.bingdoc.com/fileroot1/2023-7/10/cc84e14d-cbcd-4c9d-bab9-6111fd83a039/cc84e14d-cbcd-4c9d-bab9-6111fd83a0391.gif)
杭电计组实验实现R型指令的CPU设计实验
杭电计组实验-实现R型指令的
CPU设计实验
作者:
日期:
实验报告
姓名
阳光男
学号
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@(*)
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]=0F;LED[0]=ZF;enddefault:
LED=0;
endcase
end
2018年_6_月1日
成绩:
endmodule
顶层R型CPU模块:
moduletop_R_cpu(inputrst,inputclk,outputZF,outputOF,output[31:
0]F);regwrite_reg;
wire[31:
0]lnst_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],lnst_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_OPOF);
always@(*)
begin
write_reg=0;
ALU_OP=0;
if(Inst_code[31:
26]==0)
begin
case(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;
endcase
write_reg=1;
end
end
endmodule
PC取指令模块:
modulepc(inputclk,inputrst,output[31:
0]lnst_code);reg[31:
0]PC;
wire[31:
0]PC_new;
initial
PC<=32'h00000000;
Inst_ROMInst_ROM1(
.clka(clk),
.addra(PC[7:
2]),
.douta(Inst_code)
);
assignPC_new二{24'h000000,PC_new[7:
0]};always@(negedgeclkorposedgerst)begin
if(rst)
PC=32'h00000000;
elsePC=PC_new;
end
endmodule
寄存器堆模块:
module
B);
Register_file(R_Addr_A,R_Addr_B,W_Addr,Write_Reg,W_Data,Clk,Reset,R_Data_A,R_Datainput[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];
initial//仿真过程中的初始化
begin
for(i=0;iv=31;i二i+1)
REG_Files[i]=O;
end
assignR_Data_A=REG_Files[R_Addr_A];assignR_Data_B=REG_Files[R_Addr_B];always@(posedgeClkorposedgeReset)begin
if(Reset)
for(i=0;i<=31;i=i+1)
REG_Files[i]=O;
else
if(Write_Reg&&W_Addr!
=0)
REG_Files[W_Addr]=W_Data;
end
endmodule
ALU算术逻辑运算单元模块:
moduleALU(A,B,F,ALU_QZF,OF);
input[31:
0]A,B;
input[2:
0]ALU_OP;
outputregZF,OF;
outputreg[31:
0]F;
regC32;
always@(*)
begin
OF=1'b0;
C32=1'b0;
case(ALU_OP)
3'b000:
F=A&B;
3'b001:
F=A|B;
3'b010:
F=AAB;
3'bO11:
F=~(A^B);
3'b100:
begin{C32,F}=A+B;OF=A[31]AB[31]AF[31]AC32;end
3'b101:
begin{C32,F}二A-B;OF二A[31]AB[31]AF[31FC32;end3'b110:
if(A
F=1;
else
F=0;
3'b111:
F=B<endcase
if(F==0)
ZF=1;
else
ZF=0;
end
endmodule
测试代码:
moduletest;
//Inputs
regrst;
regclk;
//Outputs
wireZF;
wireOF;
wire[31:
0]F;
//InstantiatetheUnitUnderTest(UUT)top_R_cpuuut(
.rst(rst),
.clk(clk),
•ZF(ZF),
.OF(OF),
•F(F)
);
initialbegin
//InitializeInputs
rst=0;
clk=0;
//Wait100nsforglobalresettofinish
#100;
clk=1;
//Addstimulushereforeverbegin
#50;clk=~clk;
end
endendmodule
二、仿真波形
构:
三、电路图
顶层电路模块
SW(2:
0}
toppled
LED(7:
0)
elk
ret
Top_LED
Top_LED
顶层电路内部结
四、引脚配置(约束文件)
NET"LED[7]"LOC:
=T11;
NET"LED[6]"LOC:
=R11;
NET"LED[5]"LOC:
=N11;
NET"LED[4]"LOC=
=M11;
NET"LED[3]"LOC:
=V15;
NET"LED[2]"LOC:
=U15;
NET"LED[1]"LOC:
=V16;
NET"LED[0]"LOC:
=U16;
NET"SW[2]"LOC
=V9;
NET"SW[1]"LOC
=T9;
NET"SW[0]"LOC:
=T10;
NET"clk"LOC=
C9;
NET"rst"LOC=
C4;
五、思考与探索
(1)
R型指令CPU实验结果记录表
序号
指令
执行结果
标志
结论
1
0000827
FFFFFFFF
0
0
正确
2
0001102b
0000_0001
0
0
正确
3
00421820
0000_0002
0
0
正确
4
00622020
0000_0003
0
0
正确
5
00832820
0000_0005
0
0
正确
6
00a33020
0000_0007
0
0
正确
7
00463804
0000_000E
0
0
正确
8
00a64820
0000_000C
0
0
正确
9
01264004
0000_7000
0
0
正确
10
00284826
FFFF_8FFF
0
0
正确
11
01215020
FFFF_8FFE
0
0
正确
12
01075822
0000_6FF2
0
0
正确
13
00e86022
FFFF_900E
0
0
正确
14
012c6824
FFFF_800E
0
0
正确
15
012c7025
FFFF_9FFF
0
0
正确
16
00c77825
0000_FFFF
正确