Logism MIPS单周期8指令CPU设计
【实验任务】
1、 单周期MIPS(硬布线)
2、 单周期硬布线控制器
【实验进度表格】
一、单周期MIPS(硬布线)
MIPS指令格式有R型、I型和J型三种

利用分线器,可以将不同类型的指令的不同段分离出来

根据MOOC课程所给出的数据通路

1、PCsrc信号的设计
结合硬布线控制器,可知Beq和Bne对应数据通路中的Branch信号,Beq和Bne只要有一个有效时PCsrc为真,因此可设计出如下的逻辑电路:

2、输出储存器的地址码的设计:


三十二位的输入信号经过分线器的选择,均选取2-11位,即低二位不用,高二十位也不用。MIPS指令的字长位定长的32位即4字节,所以指令计数器形式上的PC=PC+1实际上是PC=PC+4,而,所以低两位不会变化故不取。而储存器的容量为1024=,所以只取2-11位,高20位也不取。
3、 ALU输入端的设计

根据数据通路以及所学知识可得,需要将I型指令的imm立即数带符号扩展到32位才能做运算。

总的数据通路为:

二、单周期硬布线控制器的设计
1、指令译码逻辑
根据以上指令的OpCode字段和FUNCT字段结合logism自带的比较器,可以设计出指令译码逻辑部分。


下方提示:SysCall输入特殊的R型指令,所以R_TYPE指令形成的信号中SysCall要取反再与其他R型指令取或的结果做与。而不是直接三个均取或。
2、ALU控制逻辑
由指令控制逻辑,可得只有SLT需要用到ALU的比较运算,其他均为加法运算,所以可以直接复制一个SLT的隧道加上数据选择器,直接设计ALU的控制逻辑,不需要用到给定的OP和FUNC字段的隧道。


3、机器输出信号的控制
根据所给出控制信号的产生条件,结合所学数字逻辑知识,可以设计输出控制信号的逻辑


总的电路图如下:

实验结果:


Mars4.5调试结果:

【设计过程、实验心得、意见建议】
本次实验设计了单周期MIPS CPU(硬布线),借助MOOC给定的数据通路,可以很快的连接好大致框架,其中PCsrc和输入储存器的地址段的选择我认为是本实验的一个难点。
PCsrc要根据数据通路中所给的信息,结合实验所给出的硬布线控制器的基本框架,对慕课所给数据通路进行适当的扩展,才能正确输出PCsrc信号。
输入储存器的地址对我的实验进度造成了较大影响,开始一直想不通32位的信号要怎么切分为十位,取最低十位一直不对,后来结合之前所做的RAM实验以及上课老师所讲的PC指令计数器在MIPS中是PC=PC+4,顺利的选出了正确的十位地址码。
在设计机器输出信号的时候要注意下面所给的提示,比如SysCall不在正常的R型指令中,所以设计R型指令信号的时候要对其进行取反处理。ALU控制器的设计中,本来还以为需要设计多种运算方式,结果查看指令概述发现只需要设计能选择两种运算方式的控制器即可,故不用所给的OP和FUNC隧道,直接选择SLT隧道加上数据选择器设计一个简洁的SLT控制器。