MIPS单周期CPU设计2018版体会

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

11条MIPS指令单周期CPU设计

2018元月份,我按照袁春风老师的第三版教材,又重新设计了11条MIPS 指令的单周期CPU。这次的设计与我2017年7月份的单周期CPU还是有些区别。2017年7月份设计的CPU主要是参考《计算机组成与设计-硬件/软件接口David A.Patterson》。

设计中的几点体会如下:

一.基本流程

1.首先要分析清楚这11条指令的格式和特点。按照MIPS指令的格式和特

点,完全掌握它们的功能和执行的过程。

2.这些指令执行过程中需要哪些硬件部件和控制信号,这些部件如何连接

构成数据通路。

3.对所有需要的控制信号进行归纳分析,列出真值表,设计相应的控制电

路。

二.具体设计过程

1.ALU的设计。ALU的设计重点在于先设计出32位的加法器,减法运算是利用

加法的“变反加一”。同时要产生各种运算结果的信号:溢出(OF)、进位(CF)、符号位(SF)、零符号位(Zero)。OF=C n⊕C n-1;CF=C out⊕C in。至于需要其它的运算指令,如逻辑运算、移位运算、乘除法运算,都可以直接调用logisim库中的器件,添加到ALU中,这些运算的结果可以同时产生,只是最后用多路选择器来选择那种指令的结果输出,用的控制信号是OPctr。在ALU中需要设计一个控制信号生成部件,用于产生ALU内部需要的各种控制信号。见袁春风老师教材P155。(第一次实验:ALU部件的设计)(ALU设计中,现在的加法器只是串行的,可以让好的学生用先行进位加法器)

图1:ALU电路图

2.设计寄存器部件。设计一个32个*32位的寄存器部件。两路输入和两路输出,

可读写。(第二次实验:寄存器部件的设计)

图2:寄存器电路图

3.数据通路的设计。通路的设计不能急于求成,要一条指令一条指令来分析和

设计。首先设计R-type中的add、sub、subu、slt、sltu等的通路。要注意是否要判断溢出。在此基础上,再分析I-type带立即数运算指令的数据通路,分析出需要添加哪些部件。再分析sw、lw指令的数据通路,分支指

令的数据通路,无条件跳转指令的数据通路。通过逐步添加部件,最后就实现了整个数据通路。其实添加新部件的过程,就是不断添加多路选择器的过程。

4.控制器的设计。分析设计完成了数据通路,就知道所需要的所有控制信号。

按照信号产生的条件,就可以写出真值表P166、P167,产生逻辑电路,即控制器。其实控制器的设计过程,就是写真值表。(第三次实验:单周期CPU 的设计)。

图3: 11条指令的单周期CPU电路图

三. Logisim的使用

同学们自己网上查找资料。

四. 编写测试程序(test_11.asm)

1.利用用Mars 4.5软件编写测试程序。测试程序使用自己设计的11条MIPS指令来实现。

2.打开Mars 4.5软件,用Edit编辑汇编源代码,后缀是.asm

3.汇编源代码程序编写完成后,用Run菜单中的Assemble 进行汇编,得到机器代码。

4.需要设置mars界面中setting的Memory Configration,将内存模式设

置为下图的模式,这样数据段起始位置就是0开始的位置。

5.程序汇编后可以利用File菜单中的Dump Memory功能将代码段和数据段

导出,采用十六进制文本的方式导出到某个文本文件,然后在文件第一行加入“v2.0 raw”即可在logisim中加载到ROM或RAM。

6.将test_11文件加载到指令存储器,在数据存储器第1、2号单元中输入

指定的数据,执行测试程序,再查看运行结果,验证程序运行是否正确。

Add、sub是加减指令,判断溢出,如有溢出,则不保存运算结果;

Subu是减法指令,但不判断溢出;

Slt是有符号数比较大小、sltu是无符号数比较大小。

具体见教材P155,表5.2

用于测试的数据表如表1

可以用test_11程序和表1中的数据来验证学生设计的CPU是否能正确运行。(只需要在数据存储器中的1#和2#单元输入测试数据,在第3#--7#号单元中查看运算结果是否正确)

表1:test_11程序测试表

说明:对于测试2中的测试数据(对两个都是负数的测试数据),slt指令的结果与分析的实际结果不同。

两次CPU设计之间的差别

主要差别有下列几点:

1.ALU的实现(alu-11)。2017版是参考华科的实验。可实现的算术运算、逻辑

运算、移位等指令条数较多。加减溢出判断是自己采用真值表来实现的。2018版是按照袁老师P155实现的。第一个实验(11条指令的ALU设计)就准备让学生这样实现。

2.取指令部件的实现(fetch_IR)。2017版中有BEQ指令,但没有实现JUMP指

令。2018版都实现了。实现的思想是基于袁老师的P161图5.20,但具体细节有修改。把PC30位改为了32位,原因是所用的存储器字长为32位(4字节),一条MIPS指令就只占用一个存储单元,所以每次PC地址直接加“1”

即可,无需再去掉低两位。

a)JUMP跳转指令的高位就是PC<31:26>,而不是PC<31:28>。

3.控制器采用了主、辅控制器分开实现。主控制器(OP_ctr)利用P166表5.4

和表5.5来实现的,直接用真值表生成电路。但多增加了R-type信号。辅助控制电路(func_ctr)用来产生R型指令的ALUctr信号。

4.位扩展部件(16-32extend),增加了ExtOp控制端,用于零扩展或者符号扩

展控制。

5.数据存储器是采用系统提供的器件。Str引脚连接存储器写信号,ld引脚连

接存储器读信号。

6.编写测试程序(test_11.asm),含所有11条指令,测试通过。

相关文档
最新文档