0 本文主要总结计算机组成与结构中的大作业——单周期CPU的实现
1 主要实现代码
1.1 PC及PC+4
module PC(Clk,Clrn,Result,Address);//Reset=0,重置
input Clk,Clrn;
input[31:0] Result;
output[31:0] Address;
reg[31:0] Address;
always @(posedge Clk or negedge Clrn)
begin
if (Clrn == 0)
begin
Address = 0;
end
else
begin
Address = Result;
end
end
endmodule
PC+4通过CLA_32实现
1.2 INSTMEM(指令存储器)
主要参考书上代码(附每条指令具体含义)
module INSTMEM(Addr,Inst);//指令存储器
input[31:0]Addr;
output[31:0]Inst;
wire[31:0]Rom[31:0];
assignRom[5'h00]=32'h20010008;//addi $1,$0,8 $1=8
assign Rom[5'h01]=32'h3402000C;//ori$2,$0,12 $2=12
assignRom[5'h02]=32'h00221820;//add $3,$1,$2 $3=20
assignRom[5'h03]=32'h00412022;//sub $4,$2,$1 $4=4
assignRom[5'h04]=32'h00222824;//and $5,$1,$2
assign Rom[5'h05]=32'h00223025;//or$6,$1,$2
assign Rom[5'h06]=32'h14220002;//bne$1,$2,2
assign Rom[5'h07]=32'hXXXXXXXX;
assign Rom[5'h08]=32'hXXXXXXXX;
assign Rom[5'h09]=32'h10220002;//beq $1,$2,2
assign Rom[5'h0A]=32'h0800000D;// J0D
assign Rom[5'h0B]=32'hXXXXXXXX;
assign Rom[5'h0C]=32'hXXXXXXXX;
assign Rom[5'h0D]=32'hAD02000A ;// sw $2 10($8) memory[$8+10]=12
assign Rom[5'h0E]=32'h8D04000A;//lw$4 10($8) $4=12
assignRom[5'h0F]=32'h20810000;//addi $1,$4,0 $1=12
assign Inst&