指令集和单周期的CPU设计一样,在这里就不列出来了,给出对应的链接:16位单周期CPU设计
架构图
根据指令集的操作数选取情况我将所有指令集分为8类:
1、JUMP,Branch
JUMP: Instr[7:0]
Branch:reg[10:8] + instr[7:0]
2、STORE, LOAD
LOAD: mem[instr[7:4]]+instr[3:0] -> reg[instr[10:8]]
STORE:reg[instr[10:8]] -> mem[instr[7:4]]+instr[3:0]
3、ADDI, SUBI,LDIH……
ADDI: reg[10:8] + instr[7:0] -> reg[instr[10:8]]
4、SLL,ADD……
SLL: reg[7:4] << instr[3:0] -> reg[instr[10:8]]
ADD: reg[7:4] + reg[2:0] -> reg[instr[10:8]]
5、HALT -> Do Nothing
因此有了以下状态图
MulticycleMIPS基本上就是在单周期CPU的基础上,加上几个clk将组合逻辑改为时序逻辑,当然还需要某些下的元器件的变化,例如PCwrite的添加。
对比单周期CPU,多周期CPU功耗增大了,资源也浪费了,但是多周期CPU并非一无是处,由于增加了多个CLK,最长路径缩短了,适用频率得到了改善,可以用于频率要求较高的情况下。
具体设计可以参照单周期CPU的设计,大同小异,在这里就不列出来了