计算机组成原理中,CPU 设计实验是巩固硬件知识的核心环节,以下提供完整实验报告模板,详解单周期 CPU 的设计思路与实现步骤,适用于本科及考研复试备考。
一、实验目的
1. 掌握 CPU 的基本组成(运算器、控制器、寄存器组);
2. 理解指令执行的完整流程(取指、译码、执行、访存、写回);
3. 实现支持加减运算的单周期 CPU,能正确执行至少 4 条指令(ADD、SUB、LW、SW)。
二、实验环境
硬件:Xilinx FPGA 开发板(或 Logisim 仿真软件);
软件:Verilog HDL 编程语言,ModelSim 仿真工具。
三、设计方案
1. 整体架构(五段流水线简化版):
① 取指阶段:PC 寄存器存放当前指令地址,通过 ROM 读取指令;
② 译码阶段:指令寄存器(IR)存储指令,控制器解析 opcode 生成控制信号;
③ 执行阶段:ALU 根据控制信号执行算术运算(ADD/SUB)或地址计算(LW/SW);
④ 访存阶段:数据存储器(Data Memory)用于 LW(读)和 SW(写)操作;
⑤ 写回阶段:将运算结果或读取的数据写入通用寄存器(如(t0-)t7)。
2. 关键模块设计:
(1)ALU 模块:支持 ADD( opcode=32 )和 SUB( opcode=34 ),输入为两个操作数(A、B)和控制信号(ALUop),输出运算结果(Result)和零标志(Zero)。
Verilog 核心代码:
module ALU(
input [31:0] A, B,
input [1:0] ALUop,
output reg [31:0] Result,
output Zero
);
always @(*) begin
case(ALUop)
2'b01: Result = A + B; // ADD
2'b10: Result = A - B; // SUB
default: Result = 32'h0;
endcase
end
assign Zero = (Result == 32'h0) ? 1'b1 : 1'b0;
endmodule
(2)控制器模块:根据指令 opcode 生成 12 种控制信号(如 RegDst、ALUSrc、MemWrite 等),例如 LW 指令的控制信号为:RegDst=0,ALUSrc=1,MemRead=1,RegWrite=1。
四、测试与结果分析
1. 测试用例:
指令 1:ADD $t0, $s1, (s2 ()t0 = $s1 + (s2)</p><p>预期结果:若) s1=5,(s2=3,则)t0=8;
指令2:SW (t0, 10()s3) (将$t0 的值存入地址 10+$s3)
预期结果:数据存储器对应地址写入 8。
2. 仿真波形:截图展示各模块信号时序,验证指令执行各阶段的正确性。
五、遇到的问题及解决方案
1. 数据冒险:LW 指令后立即使用目标寄存器导致错误,通过插入 NOP 指令解决;
2. 控制信号冲突:SUB 与 SW 的 MemWrite 信号混淆,通过优化控制器状态机修正。
六、实验总结
单周期 CPU 设计的关键是控制信号的时序协调,后续可扩展至流水线 CPU,通过 forwarding 技术减少数据冒险,提升执行效率。
免责声明:本站所提供试题均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用,不涉及商业盈利目的。如涉及版权问题,请联系本站管理员予以更改或删除。