杭电计组实验8实现R型指令的CPU设计实验Word文档格式.docx
《杭电计组实验8实现R型指令的CPU设计实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《杭电计组实验8实现R型指令的CPU设计实验Word文档格式.docx(10页珍藏版)》请在冰点文库上搜索。
实验时间
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];
b001:
LED=ALU_F[15:
8];
b010:
LED=ALU_F[23:
16];
b011:
LED=ALU_F[31:
24];
b100:
beginLED[7:
2]=0;
LED[1]=OF;
LED[0]=ZF;
end
default:
LED=0;
endcase
endmodule
顶层R型CPU模块:
moduletop_R_cpu(inputrst,inputclk,outputZF,outputOF,output[31:
0]F);
regwrite_reg;
0]Inst_code;
0]R_Data_A;
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);
write_reg=0;
ALU_OP=0;
if(Inst_code[31:
26]==0)
case(Inst_code[5:
0])
6'
b100000:
ALU_OP=3'
b100;
b100010:
b101;
b100100:
b000;
b100101:
b001;
b100110:
b010;
b100111:
b011;
b101011:
b110;
b000100:
b111;
write_reg=1;
PC取指令模块:
modulepc(inputclk,inputrst,output[31:
0]Inst_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)
if(rst)
PC=32'
elsePC=PC_new;
寄存器堆模块:
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;
0]R_Addr_B;
0]W_Addr;
inputWrite_Reg;
input[31:
0]W_Data;
inputClk;
inputReset;
output[31:
0]REG_Files[0:
31];
reg[5:
0]i;
initial//仿真过程中的初始化
for(i=0;
i<
=31;
i=i+1)
REG_Files[i]=0;
assignR_Data_A=REG_Files[R_Addr_A];
assignR_Data_B=REG_Files[R_Addr_B];
always@(posedgeClkorposedgeReset)
if(Reset)
else
if(Write_Reg&
&
W_Addr!
=0)
REG_Files[W_Addr]=W_Data;
ALU算术逻辑运算单元模块:
moduleALU(A,B,F,ALU_OP,ZF,OF);
0]A,B;
outputregZF,OF;
outputreg[31:
0]F;
regC32;
OF=1'
b0;
C32=1'
case(ALU_OP)
F=A&
B;
F=A|B;
F=A^B;
F=~(A^B);
begin{C32,F}=A+B;
OF=A[31]^B[31]^F[31]^C32;
b101:
begin{C32,F}=A-B;
b110:
if(A<
B)
F=1;
else
F=0;
b111:
F=B<
<
A;
if(F==0)
ZF=1;
ZF=0;
测试代码:
moduletest;
//Inputs
regrst;
regclk;
//Outputs
wireZF;
wireOF;
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;
//Addstimulushere
forever
#50;
clk=~clk;
二、仿真波形
三、电路图
顶层电路模块
顶层电路内部结构:
四、引脚配置(约束文件)
NET"
LED[7]"
LOC=T11;
LED[6]"
LOC=R11;
LED[5]"
LOC=N11;
LED[4]"
LOC=M11;
LED[3]"
LOC=V15;
LED[2]"
LOC=U15;
LED[1]"
LOC=V16;
LED[0]"
LOC=U16;
SW[2]"
LOC=V9;
SW[1]"
LOC=T9;
SW[0]"
LOC=T10;
clk"
LOC=C9;
rst"
LOC=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正确