多周期MIPS(微程序)8指令CPU
1、 数据通路设计
首先根据慕课中华科给出的数据通路连接自己的数据通路


这里的取地址很有讲究

因为MIPS架构是按照字编址,且MIPS的字长为定长的32位即四字节,所以PC=PC+1是实际上的PC=PC+4,且RAM容量为,又因为,所以取指阶段Men[PC]->IR的时候需要把PC寄存器的2-11位送入RAM。

还要注意Branch细分出来的Beq和Bne指令的连接,结合微程序控制器,可以看出来Beq和Bne只要有一个有效的时候PCSrc就为真,可以设计出如上的逻辑电路。

容易得知Beq与Alu的equal信号对应,所以直接与equal做与运算,Bne对应Alu的不相等,所以equal要先取非再与Bne做与运算。两个与运算的结果只要有一个有效即可,所以经过或门形成PCsrc。
根据数据通路以及所学知识可得,需要将I型指令的imm立即数带符号扩展到32位才能正常做运算。
总周期的部分可以用微地址来和Syscall的微地址13来进行对比运算,只要没有停机,周期就一直在增加,因此可以设计一个下图所示的电路

2、 微程序控制器设计
1、指令译码逻辑
根据以上指令的OpCode字段和FUNCT字段结合logism自带的比较器,可以设计出指令译码逻辑部分。


2、ALU控制逻辑
根据下方提示,00的时候ALU做加法,01的时候ALU做减法,10的时候ALU的功能由FUNC字段决定,又因为FUNC字段跟R型指令关联,且Syscall不做运算,SLT做有带符号比较运算,ADD做加法运算,因此可以设计出以下简易的ALU控制逻辑部分


4、 实现微程序地址逻辑转移

根据慕课给出的Excel表格,结合之前设计的ALU控制逻辑,加上电路分析功能,设计出的微程序地址转移电路如下

5、根据状态图构建微程序
结合状态图、数据通路和控制信号说明


加上Excel表格
可以看出来,取指令的时候,PC=PC+4,所以ALUSrcB=01,Ir寄存器和PC寄存器要写入数据,对应的使能信号为1,还要读取存储器里面的指令,MenRead也为1。根据状态转换图,只有译码的时候发生了跳转,其他指令都是根据下址字段运行,所以译码指令的P=1。Beq和Bne的PCSrc字段,根据数据通路图或者状态转换图中的指令功能可以得出是1。

可以设计出控制存储器

3、测试:
