1、湘 潭 大 学 实 验 报 告 课程名称 计算机原理与设计 实验名称_多周期 CPU 与存储器实验 _ 页数 专业 计算机科学与技术 班级_2_ 同组者姓名 组别 学号 2015962138 姓名 庄振南实验日期_2016.11.02_ 一、实验目的 1、深入理解 MIPSCPU 指令系统的功能和工作原理;2、掌握多周期 CPU 的工作原理和逻辑功能实现;3、熟练掌握用 Verilog HDL 语言设计多周期存储器的方法;4、熟练掌握对多周期存储器的仿真实验验证和硬件测试两种调试方法;5、通过对多周期 CPU 的运行情况进行观察和分析,进一步加深理解。二、实验要求 1、深入理解 MIPSCPU
2、 指令系统的功能和工作原理;2、掌握多周期 CPU 的工作原理和逻辑功能实现;3、熟练掌握用 Verilog HDL 语言设计多周期存储器的方法;三、实验原理 实现上述原理框图根据功能将其分划分为控制单元(cunit)、执行单元(eunit)、指令单元(iunit)以及存储单元(munit)四大模块。 (1).控制单元(cunit)是多周期微处理器的核心 控制微处理器取指令、指令译码和指令执行等工作。主要由指令译码器控制器(outputs control)、算术逻辑运算控制器(ALU control)两个子模块组成。 (2).执行单元(eunit)主要由寄存器堆(registers)和算术逻辑
3、单元(ALU)两个子模块组成。其中寄存器是微处理器最基本的元素 MIPS 系统的寄存器堆由 32 个 32 位寄存器组成 而ALU 则是微处理器的主要功能部件 执行加、减、比较等算术运算和与、或、或非、异或等逻辑运算。指令单元(iunit)的作用是决定下一条指令的地址 PC 值 。 (3).存储单元(munit)由存储器(memory)、指令寄存器(instruction register)和存储数据寄存器(memory data register)组成。四、实验内容 1、设计一个 32 位 MIPS 多周期 CPU 具体的要求如下: 至少运行下列的 6 类 32 条 MIPS 指令。 (1)
4、算术逻辑指令 and、sub、addi (2)逻辑运算指令 and、0r、xor 、 andi、 ori、xori(3)位移指令 sll、srl、sra(4)条件分支指令 beq、bne、(5)无条件跳转指令 j、jr (6)数据传送指令 lw、sw2.设计一个存储器五、实验环境与设备 电脑,电箱。六、实验代码设计(含符号说明) 寄存器元件代码:module regfile (rna,rnb,d,wn,we,clk,clrn,qa,qb);input 4:0 rna,rnb,wn;input 31:0 d;input we,clk,clrn;output 31:0 qa,qb;reg 31:0
5、 register 1:31; /r1-r31assign qa = (rna = 0) ? 0 : registerrna; /readassign qb = (rnb = 0) ? 0 : registerrnb; /readalways (posedge clk or negedge clrn) beginif (clrn = 0) begin /resetinteger i;for (i=1; ia4:0;4b1111: cal=$signed(b)a4:0;endcaseendfunctionendmodule其他部件:module f (reg_dest,jal,wn);input
6、 4:0 reg_dest;input jal;output 4:0 wn;assign wn = reg_dest | 5jal;endmodulemodule sa (di,dot);input 4:0 di;output 31:0 dot;assign dot = 27b0,di;endmodulemodule out4 (out);output 31:0 out;assign out = 32h4;endmodulemodule e (immin,sext,immediate,offset);input 15:0 immin;input sext;output 31:0 immedia
7、te,offset;wire e = sext wire 15:0 imm = 16e;assign offset = imm13:0,immin15:0,1b0,1b0;assign immediate = imm,immin15:0;endmodulemodule combine (address,pc,add);input 25:0 address;input 3:0 pc;output 31:0 add;assign add = pc3:0,address25:0,1b0,1b0;endmodulemodule convert1 (dain,sain,op,func,rs,rt,rd,
8、imm,addr);input 31:0 dain;output 4:0 sain,rs,rt,rd;output 5:0 op,func;output 15:0 imm;output 25:0 addr;assign sain = dain10:6;assign op = dain31:26;assign func = dain5:0;assign rs = dain25:21;assign rt = dain20:16;assign rd = dain15:11;assign imm = dain15:0;assign addr = dain25:0;endmodulemodule con
9、vert2 (pc,pcout);input 31:0 pc;output 3:0 pcout;assign pcout = pc31:28;endmodule七、实验检验与测试 存储器内的测试数据:- Copyright (C) 1991-2013 Altera Corporation- Your use of Altera Corporations design tools, logic functions - and other software and tools, and its AMPP partner logic - functions, and any output files
10、 from any of the foregoing - (including device programming or simulation files), and any - associated documentation or information are expressly subject - to the terms and conditions of the Altera Program License - Subscription Agreement, Altera MegaCore Function License - Agreement, or other applic
11、able license agreement, including, - without limitation, that your use is for the sole purpose of - programming logic devices manufactured by Altera and sold by - Altera or its authorized distributors. Please refer to the - applicable agreement for further details.- Quartus II generated Memory Initi
12、alization File (.mif)DEPTH = 64; %Memory depth and width are required %WIDTH = 32; %Enter a decimal number %ADDRESS_RADIX = HEX; %Address and value radixes are optional %DATA_RADIX = HEX; %Enter BIN, DEC, HEX, or OCT; unless %otherwise specified, radixes = HEX %CONTENT BEGIN03F : 00000000; % Range-E
13、very address from 0 to 3F = 00000000 % 0 : 3c010000; % (00) main: lui r1, 0 # address of data0 % 1 : 34240080; % (04) ori r4, r1, 0x80# address of data0 % 2 : 20050004; % (08) addi r5, r0, 4 # counter % 3 : 0c000018; % (0c) call: jal sum # call function % 4 : ac820000; % (10) sw r2, 0(r4) # store re
14、sult % 5 : 8c890000; % (14) lw r9, 0(r4) # check sw % 6 : 01244022; % (18) sub r8, r9, r4 # sub: r8 16 = ffff8000(arith) % 16 : 000843c2;% (58) srl r8, r8, 15 # 15 = 0001ffff(logic) % 17 : 08000017;% (5c) finish: j finish # dead loop % 18 : 00004020;% (60) sum: add r8, r0, r0 # sum % 19 : 8c890000;%
15、 (64) loop: lw r9, 0(r4) # load data % 1A : 20840004;% (68) addi r4, r4, 4 # address + 4 % 1B : 01094020;% (6c) add r8, r8, r9 # sum % 1C : 20a5ffff; % (70) addi r5, r5, -1 # counter - 1 % 1D : 14a0fffb; % (74) bne r5, r0, loop # finish? % 1E : 00081000;% (78) sll r2, r8, 0 # move result to v0 % 1F
16、: 03e00008;% (7c) jr r31 # return % 20 : 000000A3;% (80) data0 % 21 : 00000027;% (84) data1 % 22 : 00000079;% (88) data2 % 23 : 00000115;% (8c) data3 % 24 : 00000000;% (90) sum % END; 六EDA 阶段的实验结果 ( “编译” 、 “仿真” 等)仿真结果如上图。八、测试数据 试所需的测试数据、预期结果数据等)及其相关说明输出说明:由于引脚及输出需要,故下表 ir 对应 ir310且将显示高四位,pc 对应 pc310且将显示低两位,alu 对应 alu310且将显示低两位输入 输出 输入 输出clock mem_clk pc alu ir clock mem_clk pc alu ir九、实验过程中出现的问题及处理情况(包括实验现象、原因分析、排故障的方法等) 第四个实验由于没有视频,遇到很多问题,请教了助教。