控制信号速查表

RegWrite ALUSrc PCSrc MemRead MemWrite MemtoReg
0 / 第二个 ALU 操作数来自寄存器堆的第二个输出(读数据 2 / Read data 2)。 PC 被计算 \(PC+4\) 值的加法器输出所替代。 / / 馈送到寄存器“写数据(Write data)”输入端的值来自 ALU。
1 寄存器目标输入端被写入“写数据(Write data)”输入端上的值。 第二个 ALU 操作数是指令中低 16 位的符号扩展(sign-extended)。 PC 被计算分支目标(branch target)的加法器输出所替代。 目标地址输入所指定的业务数据内存(Data memory)内容被放置到“读数据(Read data)”输出端。 目标地址输入所指定的业务数据内存(Data memory)内容被“写数据(Write data)”输入端上的值所替代。 馈送到寄存器“写数据(Write data)”输入端的值来自数据内存(Data memory)。
  • Instruction (指令):正在执行的指令类型(如算术运算、访存、分支跳转等)。

  • Opcode (操作码):指令中用于标识该指令类型的二进制编码。

  • ALUSrc (ALU源操作数选择):决定 ALU 的第二个操作数来自寄存器堆(0)还是指令中的立即数(1)。

  • MemToReg (内存到寄存器):多路选择器信号,决定写回寄存器的数据是来自 ALU 计算结果、数据内存还是 PC+4。

  • RegWrite (寄存器写使能):是否允许将数据写入目标寄存器。

  • MemRead (内存读使能):是否需要从数据内存中读取数据(如 Ld 指令)。

  • MemWrite (内存写使能):是否需要将数据写入数据内存(如 Sd 指令)。

  • Branch (分支条件):标识当前是否为条件分支指令(如 beq)。

  • Jump (无条件跳转):标识当前是否为无条件跳转指令(如 Jal)。

  • ALUOp1 / ALUOp2 (ALU操作码控制):控制内部 ALU 控制单元的多位信号,用以决定 ALU 到底执行加、减、与、或还是其他具体运算。

指令 (Instruction) 操作码 (Opcode) ALUSrc MemToReg RegWrite MemRead MemWrite Branch Jump ALUOp1 ALUOp2
R-format (R型指令) 0110011 0 00 1 0 0 0 0 1 0
Ld (加载双字) 0000011 1 01 1 1 0 0 0 0 0
Sd (存储双字) 0100011 1 xx 0 0 1 0 0 0 0
beq (相等则分支) 1100111 0 xx 0 0 0 1 0 0 1
Jal (跳转并链接) 1101111 x 10 1 0 0 0 1 x x