1、实验报告 5 月 10 日 成绩: 姓名 学号 班级 专业 计算机科学与技术 课程名称 《计算机构成原理课程设计》 任课教师 章复嘉 指引教师 章复嘉 机位号 实验序号 5,6,7 实验名称 寄存器堆设计实验,MIPS汇编器与模拟器实验取,指令与译指令 实验时间 第6周~第14周 实验地点 一教225 实验设备号 一、实验程序源代码 实验五 module main( input [0:0] wea, input [7:2] a
2、ddra, output [31:0] douta, input Clk,Reset, input Write_Reg, input [4:0] W_Addr, input [31:0] W_Data, input [4:0] R_Addr_A,R_Addr_B, output [31:0] R_Data_A,R_Data_B ); RAM A1( .clka(Clk), // input clka .wea(wea), // input [0 : 0] wea .addra(addra[7:2]), // input [5 : 0] addra
3、 .dina(R_Data_A), // input [31 : 0] dina .douta(douta) // output [31 : 0] douta ); four B1( .Clk(Clk), .Reset(Reset), .Write_Reg(Write_Reg), .W_Addr(W_Addr), .W_Data(W_Data), .R_Addr_A(R_Addr_A), .R_Addr_B(R_Addr_B), .R_Data_A(R_Data_A), .R_Data_B(R_Data_B)
4、); endmodule module RAM( input clka, input [0:0] wea, input [7:2] addra, input [31:0] dina, output [31:0] douta ); RAM_B your_instance_name ( .clka(clka), // input clka .wea(wea), // input [0 : 0] wea .addra(addra[7:2]), // input [5 : 0] addra .dina(dina), // input [31 :
5、 0] dina .douta(douta) // output [31 : 0] douta ); endmodule #100; Reset=0; Clk=0; #100; W_Addr=5'b11011; W_Data=32'b01101111; Clk=0; #50; Clk=1; #100; R_Addr_A=5'b11011; R_Addr_B=0; Clk=0; Write_Reg=0; #100; R_Addr_A=5'b11011;
6、 Write_Reg=0; Clk=0; W_Addr=0; W_Data=0; #10; Clk=0; wea=1; addra=8'b00110100; #10; Clk=1; #100; wea=0; addra=8'b00110100; #100; Clk=0; #10; Clk=1; B #100; clka=0; wea=0; addra=6'b000001; dina=32'b01101111;
7、 #100; clka=1; wea=0; addra=6'b000001; dina=32'b01101111; #100; clka=0; wea=1; addra=6'b000001; dina=32'b01101111; #100; clka=1; wea=1; addra=6'b000001; dina=32'b01101111 实验6 nor $1,$0,$0; #$1=FFFF_FFFF sltu $2,$0,$1; #$2=0
8、000_0001 add $3,$2,$2; #$3=0000_0002 add $4,$3,$2; #$4=0000_0003 add $5,$4,$3; #$5=0000_0005 add $6,$5,$3; #$6=0000_0007 sllv $7,$6,$2; #$7=0000_000E add $9,$5,$6; #$9=0000_000C sllv $8,$6,$9; #$8=0000_7000 xor $9,$1,$8; #$9=FFFF_8FFF add $10,$9,$1;
9、 #$10=FFFF_8FFE sub $11,$8,$7; #$11=0000_6FF2 sub $12,$7,$8; #$12=FFFF_900E add $13,$9,$12; #$13=FFFF_200D or $14,$9,$12; #$14=FFFF_9FFF or $15,$6,$7; #$15=0000_000F nor $16,$5,$7; #$16=FFFF_FFF0 add $17,$7,$3; #$17=0000_0010 sllv $18,$8,$17; #$18=7000_0000
10、 sllv $19,$3,$17; #$19=0002_0000 sllv $20,$19,$7; #$20=8000_0000 sub $21,$1,$20; #$21=7FFF_FFFF or $22,$18,$21; #$22=7FFF_FFFF add $23,$20,$22; #$23=FFFF_FFFF sub $24,$18,$19; #$24=6FFE_0000 sub $25,$19,$18; #$25=9002_0000 xor $26,$1,$18; #$26=8FFF_FFFF sltu $27,$22,$2
11、0; #$27=0000_0001 sltu $28,$26,$20; #$28=0000_0000 sub $29,$22,$2; #$29=7FFF_FFFE add $30,$20,$2; #$30=8000_0001 add $31,$11,$26; #$31=9000_6FF1 实验7: module Inst(clk,rst,Inst_Code,PC_new,PC); input wire clk,rst; output wire [31:0] Inst_Code; output wire[31:0] PC_new; output r
12、eg[31:0] PC; initial begin PC=32'h0000_0000; end ROM Inst_ROM( .addra(PC[7:2]), // input [5 : 0] addra .clka(clk), // input clka .douta(Inst_Code) // output [31 : 0] douta ); assign PC_new=PC+4; always@( negedge clk or posedge rst) begin if(rst) PC=32'h0000_0000;
13、else PC={24'h000000,PC_new[7:0]}; end endmodule Inst_ROM文献: memory_initialization_radix=16; memory_initialization_vector=00000827,0001102b,00421820,0062,00832820,00a33020,00463804,00a64820,01264004,00284826,01215020,01075822,00e86022,012c6820,012c7025,00c77825,00a78027,0
14、0e38820,02289004,02239804,00f3a004,0034a822,0255b025,0296b820,0253c022,0272c822,0032d026,02d4d82b,0354e02b,02c2e822,0282f020,017af820; 二、仿真波形 实验五 实验六 实验七: 三、电路图 实验5 实验7 四、引脚配备(约束文献) 五、思考与摸索 实验5: (3)设计实现一种ROM,常规存储器是单端口存储器,每次只接受一种地址,访问一种存储单元,从中读取或写入一种字节或字。主存储器是信息互换旳中心,一方面CPU频繁地与主存互换信息,另一方面外设也较频繁地与主存互换信息,而单端口存储器每次只能接受一种访存者,或是读或是写,这就影响到存储器旳整体工作速度。 六、意见和建议






