构建单周期CPU记录Ⅱ

本文最后更新于 2024年9月12日 下午

构建单周期CPU记录Ⅱ(add, sub, and, or, slt, beq)

新增信号

RegDst

1:从指令15:11位中读取数据到A3端口

0:从指令20:16位中读取数据到A3端口

ALUSrc

  • 1:从EXT中读取符号扩展的立即数
  • 0:从寄存器文件RD2端口中读取数据

MemtoReg

  • 1:将从数据存储器中读取的数据输出到WD3
  • 0:将从ALU中读取的数据输出到WD3

信号表

指令 RegDst ALUSrc MemtoReg ALUControl
R指令(add, sub, and, or, slt) 1 0 0 varies
lw,sw 0 1 1 010(+)
beq x 0 x 110(-)

ALU

ALUOp 含义 ALUOp 含义
00 加法 10 依赖于func
01 减法 11 无定义
ALUOp Funct ALUControl
00 X 010(加)
X1 X 110(减)
1X 100000(add) 010(加)
1X 100010(sub) 110(减)
1X 100100(and) 000(与)
1X 100101(or) 001(或)
1X 101010(slt) 111(小于置位)
  • 这里引用图表来自黑皮书,采用两级判断(先判断ALUOp,再判断ALUControl值),这里我采用另一种方法,对于非R型指令直接输出ALUControl,对R型指令两级判断.(见后图CU)

add

000000(31:26) + rs(25:21) + rt(20:16) + rd(15:11) + 00000(10:6) + 100000(add,5:0)

sub

000000(31:26) + rs(25:21) + rt(20:16) + rd(15:11) + 00000(10:6) + 100010(sub,5:0)

and

000000(31:26) + rs(25:21) + rt(20:16) + rd(15:11) + 00000(10:6) + 100100(and,5:0)

or

000000(31:26) + rs(25:21) + rt(20:16) + rd(15:11) + 00000(10:6) + 100101(or, 5:0)

slt

000000(31:26) + rs(25:21) + rt(20:16) + rd(15:11) + 00000(10:6) + 101010(slt, 5:0)

beq

000100(31:26) + rs(25:21) + rt(20:16) + offset(15:0)

更新组件

ALU

ALU

CU

CU

整体

整体

构建单周期CPU记录Ⅱ
https://meteor041.git.io/2024/09/11/构建单周期CPUⅡ-add-sub-and-or-slt-beq/
作者
meteor041
发布于
2024年9月11日
许可协议