单周期MIPS CPU设计-8条指令(第8关)
时间: 2023-11-24 11:31:26 浏览: 322
计组头歌实验:MIPS单周期CPU设计(24条指令)(HUST)1-4关源码
5星 · 资源好评率100%
在第8关中,我们需要设计一个单周期MIPS CPU,支持以下8条指令:
1. ADD $1, $2, $3
2. SUB $4, $5, $6
3. ADDI $7, $8, 10
4. LW $9, 100($10)
5. SW $11, 200($12)
6. BEQ $13, $14, label
7. J label
8. JR $15
其中,ADD和SUB指令为R型指令,ADDI为I型指令,LW和SW为加载/存储型指令,BEQ为分支型指令,J和JR为跳转型指令。
我们可以根据指令的类型分别设计对应的控制信号和数据通路,具体实现如下:
1. ADD $1, $2, $3
指令格式:R型指令
操作:将$2和$3的值相加,结果存储在$1中
控制信号:RegWrite=1,ALUSrcA=0,ALUSrcB=10,ALUOp=00,MemWrite=0,MemRead=0,RegDst=1
数据通路:从寄存器文件读取$2和$3的值,将它们输入ALU,ALU进行加法运算,结果写入寄存器$1中
2. SUB $4, $5, $6
指令格式:R型指令
操作:将$5和$6的值相减,结果存储在$4中
控制信号:RegWrite=1,ALUSrcA=0,ALUSrcB=10,ALUOp=10,MemWrite=0,MemRead=0,RegDst=1
数据通路:从寄存器文件读取$5和$6的值,将它们输入ALU,ALU进行减法运算,结果写入寄存器$4中
3. ADDI $7, $8, 10
指令格式:I型指令
操作:将$8的值加上常数10,结果存储在$7中
控制信号:RegWrite=1,ALUSrcA=0,ALUSrcB=01,ALUOp=00,MemWrite=0,MemRead=0,RegDst=1
数据通路:从寄存器文件读取$8的值,将它与常数10输入ALU,ALU进行加法运算,结果写入寄存器$7中
4. LW $9, 100($10)
指令格式:加载型指令
操作:将存储器地址$10+100处的值加载到$9中
控制信号:RegWrite=1,ALUSrcA=1,ALUSrcB=00,ALUOp=00,MemWrite=0,MemRead=1,RegDst=0
数据通路:从寄存器文件读取$10的值,将它与常数100输入ALU,ALU进行加法运算得到存储器地址,将地址输入存储器,将读取到的值写入寄存器$9中
5. SW $11, 200($12)
指令格式:存储型指令
操作:将$11的值存储到存储器地址$12+200处
控制信号:RegWrite=0,ALUSrcA=1,ALUSrcB=00,ALUOp=00,MemWrite=1,MemRead=0,RegDst=X
数据通路:从寄存器文件读取$12的值,将它与常数200输入ALU,ALU进行加法运算得到存储器地址,将地址和$11的值输入存储器,将存储器的写使能信号打开
6. BEQ $13, $14, label
指令格式:分支型指令
操作:如果$13和$14的值相等,则将PC设置为label的地址
控制信号:RegWrite=0,ALUSrcA=0,ALUSrcB=00,ALUOp=01,MemWrite=0,MemRead=0,RegDst=X,Branch=1,Jump=0
数据通路:从寄存器文件读取$13和$14的值,将它们输入ALU,ALU进行比较,如果结果为真,则将PC设置为label的地址
7. J label
指令格式:跳转型指令
操作:将PC设置为label的地址
控制信号:RegWrite=0,ALUSrcA=0,ALUSrcB=00,ALUOp=00,MemWrite=0,MemRead=0,RegDst=X,Branch=0,Jump=1
数据通路:将PC的高四位与label的高四位拼接,得到跳转地址
8. JR $15
指令格式:跳转型指令
操作:将PC设置为$15的值
控制信号:RegWrite=0,ALUSrcA=0,ALUSrcB=00,ALUOp=00,MemWrite=0,MemRead=0,RegDst=X,Branch=0,Jump=1
数据通路:从寄存器文件读取$15的值,将它作为跳转地址
阅读全文