# 指令格式与译码
# 指令字段
所有指令均为 32 位,根据不同指令类型,字段分布和功能如下:
字段名 | 位范围 | 位数 | 功能描述 | 适用指令类型 |
---|---|---|---|---|
Instruction | 31:0 | 32 | 32 位指令 | R/I/J |
Op | 31:26 | 6 | 操作码 | R/I/J |
Rs | 25:21 | 5 | 源寄存器 | R/I |
Rt | 20:16 | 5 | 源/目标寄存器 | R/I |
Rd | 15:11 | 5 | 目标寄存器 | R |
Shamt | 10:6 | 5 | 移位量 | R |
Func | 5:0 | 6 | 功能码 | R |
Imm16 | 15:0 | 16 | 16 位立即数 | I |
Target addr | 25:0 | 26 | 26 位目标地址 | J |
# 单周期处理器设计
# 关键路径与执行阶段
单周期处理器中,不同指令类型完成执行所需的阶段如下:
指令类型 | 指令获取 (IF) | 指令译码/寄存器读取 (ID/RF) | 执行 (EX) | 存储器访问 (MEM) | 结果写回 (WB) |
---|---|---|---|---|---|
R 型 | 1 | 1 | 1 | - | 1 |
Load | 1 | 1 | 1 | 1 | 1 |
Store | 1 | 1 | 1 | 1 | - |
Branch | 1 | 1 | 1 | - | - |
其余 I 型 | 1 | 1 | 1 | - | 1 |
Jump | 1 | 1 | - | - | - |
# 控制信号
单周期处理器中的控制信号及其功能:
信号名 | 功能描述 | 备注 |
---|---|---|
PCSrc(/2) | 程序计数器方式控制 | 0 - 顺序执行,1 - 分支跳转 (beq/J) |
Branch | 是否是 beq 指令 | 0 - 不是,1 - 是 |
ExtOp | 立即数扩展方式控制 | 0 - 补零,1 - 符号扩展 |
ALUSrc | ALU 第二个输入选择 | 0 - regB,1 - imm32 |
ALUConf | ALU 运算类型选择 | add, sub, or 等 |
MemWr | 存储器写入使能 | 0 - 禁用,1 - 启用 |
MemtoReg | 寄存器写入数据源选择 | 0 - ALU 结果,1 - 存储器数据 |
RegDst | 写入寄存器选择 | 0 - Rt,1 - Rd |
RegWr | 寄存器写入使能 | 0 - 禁用,1 - 启用 |
# 指令控制信号表
不同指令在单周期处理器中的控制信号配置:
信号名 | add | sub | lw | sw | beq | ori | jump |
---|---|---|---|---|---|---|---|
PCSrc | 0 | 0 | 0 | 0 | Zero | 0 | 1 |
PCSrc(2) | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Branch | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
ExtOp | - | - | 1 | 1 | 1 | 0 | - |
ALUSrc | 0 | 0 | 1 | 1 | 0 | 1 | - |
ALUConf | Add | Sub | Add | Add | Sub | Or | - |
MemWr | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
MemtoReg | 0 | 0 | 1 | - | - | 0 | - |
RegDst | 1 | 1 | 0 | - | - | 0 | - |
RegWr | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
# 多周期处理器设计
# 阶段描述与操作
多周期处理器将指令执行分为多个阶段,每个阶段完成特定的操作:
阶段 | R 型 | Load | Store | Branch | 其余 I 型 | Jump |
---|---|---|---|---|---|---|
IF | IR <= Memory[PC] , PC <= PC + 4 |
同 R 型 | 同 R 型 | 同 R 型 | 同 R 型 | 同 R 型 |
ID/RF | A <= Reg[IR[25:21]] , B <= Reg[IR[20:16]] , ALUOut <= PC + (sign-extended(IR[15:0]) << 2) |
同 R 型 | 同 R 型 | 同 R 型 | 同 R 型 | 同 R 型 |
EX | ALUOut <= A op B |
ALUOut <= A + sign-extend(IR[15:0]) |
同 Load | if (A == B) PC <= ALUOut |
ALUOut <= A op extended(IR[15:0]) |
PC <= {PC[31:28], IR[25:0], 2'b00} |
MEM | Reg[IR[15:11]] <= ALUOut |
MDR <= Memory[ALUOut] |
Memory[ALUOut] <= B |
- | 同 R 型 | - |
WB | - | Reg[IR[20:16]] <= MDR |
- | - | - | - |
# 控制信号
多周期处理器中的控制信号及其功能:
信号名 | 功能描述 | 备注 |
---|---|---|
PCWrite | PC 寄存器常规写入使能 | 0 - 禁用,1 - 启用 |
PCWriteCond | PC 寄存器条件写入使能 | 0 - 禁用,1 - 启用 |
PCSource | PC 寄存器写入数据源选择 | 00 - ALU 结果, 01 - ALUOut_reg, 10 - JMP 地址 |
ALUSrcA | ALU 第一个输入选择 | 0 - PC,1 - RegA |
ALUSrcB | ALU 第二个输入选择 | 00 - RegB, 01 - 4, 10 - Imm32, 11 - Imm32<<2 |
ALUOp | ALU 运算类型选择 | add, sub, or 等 |
RegWrite | 寄存器写入使能 | 0 - 禁用,1 - 启用 |
RegDst | 写入寄存器选择 | 0 - Rt,1 - Rd |
MemtoReg | 寄存器写入数据源选择 | 0 - ALU 结果, 1 - 存储器数据 |
MemRead | 存储器读取使能 | 0 - 禁用,1 - 启用 |
MemWrite | 存储器写入使能 | 0 - 禁用,1 - 启用 |
IorD | 存储器地址选择 | 0 - 指令地址,1 - 数据地址 |
IRWrite | 指令寄存器写入使能 | 0 - 禁用,1 - 启用 |
EPCWrite | EPC 寄存器写入使能 | 0 - 禁用,1 - 启用 |
CauseWrite | Cause 寄存器写入使能 | 0 - 禁用,1 - 启用 |
IntCause | 异常原因选择信号 | - |
# 指令控制信号表
多周期处理器中,不同阶段的控制信号配置:
信号名 | IF | ID/RF | EX-R | EX-L/S | EX-B | EX-I | EX-J | MEM-R/I | MEM-L | MEM-S | WB-L |
---|---|---|---|---|---|---|---|---|---|---|---|
PCWrite | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
PCWriteCond | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
PCSource | 00 | - | - | - | 01 | - | 10 | - | - | - | - |
ALUSrcA | 0 | 0 | 1 | 1 | 1 | 1 | - | - | - | - | - |
ALUSrcB | 01 | 11 | 00 | 10 | 00 | 10 | - | - | - | - | - |
ALUOp | Add | Add | Func | Add | Sub | Func | - | - | - | - | - |
RegWrite | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
RegDst | - | - | - | - | - | - | - | 1 | - | - | 0 |
MemtoReg | - | - | - | - | - | - | - | 0 | - | - | 1 |
MemRead | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
MemWrite | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
IorD | 0 | - | - | - | - | - | - | - | 1 | 1 | - |
IRWrite | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
# 流水线处理器设计
# 流水线阶段与级间寄存器
流水线将指令执行分为五个阶段,通过级间寄存器传递数据:
阶段 | 级间寄存器 | 功能 | 备注 |
---|---|---|---|
IF | IF/ID | 每周期取一条指令,预计算 PC | Instruction Fetch (指令获取) |
ID/RF | ID/EX | 指令译码,从寄存器堆读取操作数 | Instruction Decode / Register File (指令译码/寄存器堆) |
EX | EX/MEM | 执行指定的运算,分支跳转 | ALU Execution (ALU 执行) |
MEM | MEM/WB | 访问存储器 | Memory Data Access (存储器访问) |
WB | - | 将结果写回寄存器中 | Register Write-Back (寄存器写回) |
# 控制信号
流水线处理器中的控制信号及其作用阶段:
信号名 | 功能描述 | 备注 | 作用阶段 |
---|---|---|---|
ExtOp | 立即数扩展方式控制 | 0 - 补零,1 - 符号扩展 |
ID/RF |
ALUSrc | ALU 第二个输入选择 | 0 - regB,1 - imm32 |
EX |
ALUOp | ALU 运算类型选择 | add, sub, or 等 | EX |
RegDst | 写入寄存器选择 | 0 - Rt,1 - Rd |
EX |
MemWr | 存储器写入使能 | 0 - 禁用,1 - 启用 |
MEM |
Branch | 是否是 beq 指令 | 0 - 不是,1 - 是 |
MEM |
MemtoReg | 寄存器写入数据源选择 | 0 - ALU 结果,1 - 存储器数据 |
WB |
RegWr | 寄存器写入使能 | 0 - 禁用,1 - 启用 |
WB |