MIPS单周期CPU设计(24条指令)
MIPS单周期可执行24条指令CPU实验要求本实训项目帮助学生构建支持 24 条指令的 MIPS 单周期 CPU ,最终实现的处理器能运行 benchmark 测试程序。~~另外希望学有余力的同学能为自己的处理器增加中断处理机制,能响应外部设备中断请求。~指令格式24条指令*为特殊格式指令指令详解R型I型J型其中:JumpAddr = ((PC + 4) & 0xf0000000) | (
MIPS单周期可执行24条指令CPU
实验要求
本实训项目帮助学生构建支持 24 条指令的 MIPS 单周期 CPU ,最终实现的处理器能运行 benchmark 测试程序。
另外希望学有余力的同学能为自己的处理器增加中断处理机制,能响应外部设备中断请求。
指令格式
24条指令
*为特殊格式指令
指令详解
R型
I型
J型
其中:
JumpAddr = ((PC + 4) & 0xf0000000) | ((address << 2) & 0x0ffffffc);
设计硬布线
ALU结构及规格
Equal = (X == Y)?(1:0);
控制信号
控制信号产生条件
ALU_OP及控制信号的确定
根据 ALU 规格及控制信号产生条件即可得到下表,其中 X 代表无操作
根据 Logisim 分析组合逻辑电路功能可以自动生成控制器内部逻辑
设计数据通路
因为是单周期 CPU,所有指令均在一个时钟周期内完成操作,所以指令与数据分别采用 ROM 及 RAM 存储
指令存储器 ROM 容量为 1K * 32 bit
由于指令存储器存储字长为 4B,而 PC 为指令字节地址,非指令字地址,故舍弃最低两位,将 2 ~ 11 位送入存储器地址端
指令 IR 分线后送入单周期硬布线控制器译码,同时下一指令的地址通过多路选择器送入程序计数器的数据端口,等待时钟上升沿锁存
PC下地址可通过下图产生,其中 X 代表该选择端无效:
JMP_IF 为条件分支跳转成功信号,只响应 Beq 或 Bne 指令:
J
M
P
_
I
F
=
B
e
q
E
q
u
a
l
+
B
n
e
E
q
u
a
l
‾
JMP\_IF = Beq Equal + Bne\overline{Equal}
JMP_IF=BeqEqual+BneEqual
PC = PC + 4; // PC + 4, 无任何跳转
PC = PC + 4 + (SignExtImm << 2); // PC + imm,当 Beq 或 Bne 指令条件有效
PC = ((PC + 4) & 0xf0000000) | ((address << 2) & 0x0ffffffc); // PC_J_JAL, J 或者 Jal 指令
PC = Reg[rs]; // PC_JR, JR指令
Syscall 为系统调用指令,在该实验中,需要根据条件输出通用寄存器的值或产生停机信号:
if ($v0 == 0x22) /* 若通用寄存器 $v0 的值为 0x22,则输出 LedData,而 LedData 由寄存器锁存通用寄存器 $a0 的值 */ std::cout << LedData; else{ /* 否则,产生停机信号,程序不向下执行,直到 Go 按钮事件产生 */ do{ ; }while(Go != true ); }
-
A
通用寄存器 V0 编号为 2,a0 编号为 4,执行 syscall 指令时,多路选择器选择该组信号,其余指令选择 rs,rt
通用寄存器 $ra 编号为 0x1f,记录返回地址,jal 指令可类比 x86 指令集中的 call 指令,所以该指令执行时,多路选择器选择 1 端口,写入寄存器 W# 选择 ra,将返回地址 PC + 4 写入寄存器文件(RegFile)
-
B
根据控制信号 AluSrcB 及 SignedExt 作为多路选择器选择端,算逻运算单元 ALU 的 B 端输入数据如下图:
另外,(PC + imm)即为上文的具体实现
-
C
JMP_IF 信号上文已叙述
PC_JR 为 JR 指令执行时,指令中通用寄存器 rs 的值,该值作为新的 PC
- 执行 syscall 指令且通用寄存器 $v0 值不为 0x22 时,使停机信号 Halt 置 1 ,该信号经非门使程序计数器使能端置 0 ,将其封锁
- 若 $v0 值为 0x22,则 LED 更换数据信号 LED_EN 置 1 ,在下一个时钟的上升沿将通用寄存器 $a0 值锁存至 LedData 寄存器中
-
D
数据存储器 RAM 的容量与指令 ROM 一致,均为 1K * 32 bit
本实验唯一用到数据存储器 RAM 的指令只有 lw 及 sw ,地址线依旧舍弃最低两位
MDin 为寄存器文件输出端 R2 的值,在 sw 指令执行时, 通过 MemWrite 信号,在时钟上升沿将其写入 RAM 中
与此类似, lw 指令执行时,多路选择器选择内存数据,送入寄存器文件 Din 端口,在时钟上升沿写入 RegFile
备注
CLK 为时钟信号,RESET 为测试时清空各寄存器及 RAM 信号
最后完成的单周期 CPU
更多推荐
所有评论(0)