同济大学
计算机科学与技术系
计算机组成原理实验报告
学 号 1352652
姓 名 周宇星
专 业 计算机科学与技术
授课老师 陈永生
日 期 2016 年 6 月 15 日
目录
实验目的........................................................................................................................................... 3
实验要求........................................................................................................................................... 3
实验步骤........................................................................................................................................... 3
了解 mips 指令集 .................................................................................................................... 3
在不违反 MIPS 指令集的前提条件下对 CPU 进行改造 .................................................. 5
利用指令集构建数据通路 ....................................................................................................... 6
构造控制命令 ........................................................................................................................... 7
实现外部设备 ......................................................................................................................... 11
CPU 测试 ............................................................................................................................... 12
CPU 演示程序制作 ............................................................................................................... 12
总结及反思..................................................................................................................................... 17
实验目的
利用 VERILOG 硬件描述语言,借助开发板自行设计并实现一个具有 31 条指令的 MIPS
指令 CPU。
实验要求
设计并实现一个具有 31 条指令的 MIPS 指令 CPU,通过 31 条指令的测
试,并在下板时 成功运行自己所编写的汇编测试指令。
实验步骤
了解 mips 指令集
实验要求的 MIPS 指令一共可以归纳为 3 类指令:运算指令,跳转指令,存取指
令。我在除去控制器后,来分别讨论每种指令需要用到的部件。
运算指令又可以继续细分为两种
• ①寄存器与寄存器运算
• ②寄存器与立即数运算
可以看出,它们除了数据来源不同之外,剩下的操作都是相同的。给 Alu 发送控制信
号,确定运算方式;给多路选择器发送选择信号,确定运算数据;给 Regfiles 写使能信
号,读取 Alu 结果
所以运算指令的微操作为:①选择数据 ②计算数据 ③写回 Regfiles
跳转指令
跳转指令也可以继续细分为两种
• ①无条件跳转指令
• ②条件跳转指令
无条件跳转指令只与跳转地址相关。在 31 条指令中,无条件跳转一共只有 3 条 j, jal,
jr。 其中 jal 属于比较特殊的跳转,跳转同时需要将 PC+8 的值存入$ra 中。
而条件跳转指令需要满足某种条件才可以跳转,相对于无条件跳转而已,我们需要先
判 断条件是否满足。
j 与 jr 指令可以理解为立即数跳转与寄存器跳转。 所以 j 与 jr 本质上是一样的。
将要跳转的地址送入 PC寄存器,PC寄存器使能,即可完 成跳转。
jal 比 j 多了先将 PC 寄存器的值+8 后存入$31,然后再将 PC寄存器的值更新。
对条件跳转指令(bne, beq),我们可以先判断条件是否满足同时输送跳转地址,然后如
果条件满足,我们就对 PC发使能信号,否则我们就不对 PC发使能信号。
存取指令
存取指令相对而已就简单多了,因为一共只有两条
• SW 存字操作
• LW 取字操作
SW 与 LW 基本一致,都需要先计算出地址,然后进行存取操作。
对于 SW 而言,需要对 RAM 发读使能信号
对于 LW 而已,需要对 Regfiles 发写使能信号
从上述分析,我们可以发现 CPU 必要的部件有 regfiles,alu,Ram,IR 寄存器和 PC
寄存器,加上需要一个控制器以及一个指令存储器。
部件
功能
Regfiles
存储中间数据
Alu
进行相关运算
Ram
存储数据
imemout
储存执行指令
PC
存储指令地址
控制器
分析指令,发出控制信号
Imem
存储指令数据
在不违反 MIPS 指令集的前提条件下对 CPU 进行改造
虽然,通过上述结构,我们可以构造出一个可以使用的 CPU,但是,由于上述数据全
部为内部数据,我们无法展示 CPU 运行结果,所以在不违反 CPU 大的结构且不增加
CPU 指令 的前提条件下,我们对 CPU 进行功能补充。
1) 利用数码管展示数据。链接Regfiles中某一寄存器与数码管模块数据输入接口,即可实
现寄存器数据输出。
2) 通过改造 Ram 模块使得 CPU 可以利用 lw 指令进行读取键盘数据。