2019
计算机组成原理 ·实验报告·
专 业:
计算机科学与技术
班 级:
CS17xx
学 号:
U2017xxxxx
姓 名:
Xxx
电 话:
1xxxxxxxxxx
邮 件:
xxxxxxxxx@qq.com
完成日期:
2019-11-27
计算机科学与技术学院
华 中 科 技 大 学 课 程 实 验 报 告
目 录
1 CPU 设计实验........................................................................................ 2
1.1 设计要求..........................................................................................2
1.2 方案设计..........................................................................................2
1.3 实验步骤........................................................................................13
1.4 故障与调试....................................................................................22
1.5 测试与分析....................................................................................23
2 总结与心得..........................................................................................25
2.1 实验总结........................................................................................25
2.2 实验心得........................................................................................25
参考文献................................................................................................... 27
I
华 中 科 技 大 学 课 程 实 验 报 告
1 CPU 设计实验
1.1 设计要求
(1) 在 logisim 平台利用已给出的组件构建一个 32 位 MIPS 单周期 CPU,该 CPU
支持如表 1. 1 列出的核心指令集中的 8 条指令。要求绘制单周期 MIPS CPU 数
据通路、实现单周期硬布线控制器,并最终能在完成的 CPU 上运行冒泡排序的
测试程序 sort.hex 且获得正确的输出结果。
(2) 在 logisim 平台利用已给出的组件构建一个 32 位 MIPS 多周期 CPU,该 CPU
支持如表 1. 1 列出的核心指令集中的 8 条指令。要求绘制多周期 MIPS CPU 数
据通路,以两种方式实现控制器,即分别实现微程序控制器和硬布线控制器。
并最终能在完成的 CPU 上运行冒泡排序的测试程序 sort.hex 且获得正确的输出
结果。
# MIPS 指令
1
2
3
4
5
6
7
8
add $rd,$rs,$rt
slt $rd,$rs,$rt
addi $rt,$rs,imm
lw $rt,imm($rs)
sw $rt,imm($rs)
beq $rs,$rt,imm
bne $rs,$rt,imm
syscall
1.2 方案设计
表 1. 1 8 条核心指令集
格式
R[$rd]←R[$rs]+R[$rt] 溢出时产生异常,且不修改 R[$rd]
R[$rd]←R[$rs]
华 中 科 技 大 学 课 程 实 验 报 告
达到停机的目的,而针对其他 7 条指令则另需设计数据通路。取指令阶段也需设计数
据通路。
图 1. 1 取指令数据通路
图 1. 2 R 型运算指令(add 和 slt)数据通路
3
华 中 科 技 大 学 课 程 实 验 报 告
图 1. 3 addi 指令数据通路
图 1. 4 lw 指令数据通路
图 1. 5 sw 指令数据通路
图 1. 6 beq 和 bne 指令数据通路
4
华 中 科 技 大 学 课 程 实 验 报 告
将已设计的不同指令的数据通路进行综合,在有多个输入来源的地方增加数据选
择器 MUX,且将控制信号作为数据选择器的选择端,构建综合数据通路(如图 1. 7
所示)。
图 1. 7 单周期 MIPS 参考数据通路示意图
1.2.2 设计单周期 MIPS CPU 硬布线控制器
单周期MIPS CPU 硬布线控制器输入信号功能为提供CPU 运行过程中的各种控制
信号。已封装好的控制器如图 1. 8 所示。输入为指令的 Op 字段和 Func 字段 ,输出
为各种控制信号。分析各指令各自执行时的数据通路,得到各指令分别需要何种控制
信号。完成后绘制控制信号功能表如表 1. 2 所示。
5
华 中 科 技 大 学 课 程 实 验 报 告
图 1. 8 单周期 CPU 硬布线控制器封装图
表 1. 2 控制信号功能说明表
控制信号
信号说明
写内存控制信号
Beq 指令译码信号
Bne 指令译码信号
MemToReg 写入寄存器的数据来自寄存器
MemWrite
Beq
Bne
AluOP
AluSrcB
RegWrite
RegDst
Halt
写入寄存器选择控制信号
运算器操作控制符
运算器第二输入选择
寄存器写使能控制信号
停机信号
产生条件
lw 指令
sw 指令
Beq 指令
Bne 指令
加法,比较两种运算
Lw 指令,sw 指令,addi
寄存器写回信号
R 型指令
syscall 指令
#
1
2
3
4
5
6
7
8
9
(1) 指令译码逻辑
指令译码逻辑将指令的操作码字段转换为对应的运算信号,如 addi 信号,lw 信号,
sw 信号等。输入为 Op 字段和 Func 字段,输出共 6 个,R_TYPE、ADDI、LW、SW、
BEQ、BNE、SysCall。
查询实验包内的《MIPS32 指令手册》得到 LW、SW、BEQ、BNE、ADDI 指令的
OP 字段如表 1. 3 所示。
表 1. 3 部分指令 OP 字段值
指令
LW
SW
BEQ
BNE
ADDI
OP 字段
0x23
0x2b
0x04
0x05
0x08
只需使用比较器将 OP 与各指令的 OP 字段值进行比较便可得到以上指令对应的控
制信号。
6
华 中 科 技 大 学 课 程 实 验 报 告
而对于信号 R_TYPE,它是 R 型运算指令的控制信号,对于本次设计而言,共 3 条
R 型指令,分别为 ADD、SLT、SysCall。其中 ADD 和 SLT 指令为 R 型运算指令。故
R_TYPE 在 SysCall 对应的指令无效,而 ADD 对应的控制信号或 SLT 对应的控制信号
有效时有效。即 R_TYPE = ( ADD + SLT ) & ~SysCall 。故需先得到 ADD、SLT 和
SysCall 信号。R 型指令的 OP 字段为 0,具体功能需看 Func 字段,故需再次查阅实验
包内的《MIPS32 指令手册》得到 ADD、SLT、SysCall 指令的 Func 字段值,如表 1. 4
所示。
表 1. 4 部分 R 型指令 Func 字段值
指令
ADD
SLT
SysCall
Func 字段
0x20
0x2a
0x0c
只需将 FUNC 和各指令对应字段比较相等的信号与 OP 和 0 比较相等的信号作与
运算即可得到相应的控制信号 ADD、SLT 和 SysCall。
这样,我们就得到了 R_TYPE、ADDI、LW、SW、BEQ、BNE、SysCall 这 6 个
指令译码信号。
(2) ALU 控制逻辑
ALU 控制逻辑负责控制运算器的功能,输出信号 ALU_OP 送入运算器 ALU 的功
能选择端,输入仍为指令的 OP 字段和 FUNC 字段。由于运算器只进行加法和比较大
小两种运算,且只有在运行 SLT 指令时才需要进行比较大小运算,故使用 SLT 指令时
使 ALU_OP 控制信号控制 ALU 进行比较大小运算其余时候都作加法运算即可。查看
ALU 内部逻辑(如图 1. 9 所示)可知加法运算操作码为 0x5,比较大小运算操作码为
0xb。将 0x5 和 0xb 作为二路选择器的输入端,SLT 信号作为选择端即可。
7