目录
10.1 组合逻辑设计
10.1.1 组合逻辑控制单元框图
10.1.2 微操作的节拍安排
10.1.3 组合逻辑设计步骤
10.2 微程序设计
10.2.1 微程序设计思想的产生
10.2.2 微程序控制单元框图及工作原理
10.2.3 微指令的编码方式
1. 直接编码(水平型)
2. 字段间接编码
10.2.4 微指令序列地址的形成
10.2.5 微指令格式
10.2.6 静态微程序设计和动态微程序设计
10.2.7 毫微程序设计(分级微程序)
10.2.8 串行微程序控制和并行微程序控制
10.2.9 微程序设计举例:ADD 指令执行流程
微指令代码示例(简化版)
总结对比
扩展资源
组合逻辑控制单元通过硬连线逻辑实现指令操作控制,适用于简单指令系统。其核心是根据当前指令、状态信号和时序信号生成固定的控制信号序列。
组合逻辑控制单元结构框图
微操作需按 CPU 周期(机器周期)和节拍电位 / 脉冲进行时序划分。假设采用四节拍模型(T0-T3),示例如下:
// 假设CPU周期为4个节拍,每个节拍处理不同微操作
public class TimingUnit {
private int currentCycle; // 当前机器周期
private int currentBeat; // 当前节拍(0-3)
// 生成节拍信号
public void generateBeatSignal() {
switch (currentBeat) {
case 0: // 节拍1:取指令操作码
System.out.println("T0: 从IR中提取操作码");
break;
case 1: // 节拍2:计算操作数地址
System.out.println("T1: 地址计算逻辑工作");
break;
case 2: // 节拍3:执行数据读写
System.out.println("T2: 存储器/IO读写控制");
break;
case 3: // 节拍4:结果回写与状态更新
System.out.println("T3: 运算结果写入寄存器");
break;
default:
throw new IllegalArgumentException("无效节拍");
}
}
}
ALU_op = (IR_op==ADD) && (T==T2)
)。微程序控制将控制逻辑存储为微指令序列,通过读取微程序实现动态控制,灵活性远超组合逻辑。
由英国剑桥大学 M.V.Wilkes 提出,核心思想:将每条机器指令拆解为若干微指令,存储在控制存储器中,通过微指令计数器(μPC)顺序执行。
微程序控制单元工作流程
微命令字段每位独立表示一个控制信号,无需译码,执行速度快但编码长度长。
// 直接编码示例:32位微指令,每位对应一个控制信号
public class DirectEncodingMicroinstruction {
private boolean regWrite; // 寄存器写(第0位)
private boolean memRead; // 存储器读(第1位)
private boolean aluAdd; // ALU加法(第2位)
// ... 其他30个控制信号
}
字段内部分位组合表示微命令,需通过字段译码器解析。
// 字段间接编码示例:3位ALU操作字段(000-111对应8种操作)
public class IndirectEncodingMicroinstruction {
private int aluOpCode; // 3位字段,0-7表示加法/减法/逻辑与等
private boolean memOp; // 1位存储器操作(读/写)
public String getAluOperation() {
String[] ops = {"加法", "减法", "逻辑与", "逻辑或", "移位", "比较", "取反", "直通"};
return ops[aluOpCode];
}
}
μPC = μPC + 1
// 条件转移逻辑示例
public class MicroPC {
private int currentAddress;
private boolean zf; // 零标志
public int nextAddress(boolean isConditional, int targetAddress) {
if (isConditional && zf) { // 条件满足时跳转
return targetAddress;
} else { // 顺序执行或无条件跳转
return currentAddress + 1;
}
}
}
典型格式:
微命令字段 | 判别测试字段 | 下地址字段 |
---|---|---|
控制信号输出 | 条件判断依据 | 下条微指令地址 |
引入两级微程序:
类型 | 特点 |
---|---|
串行 | 微指令按顺序执行,下一条微指令需等待前一条完成(控制简单,速度慢)。 |
并行 | 允许同时执行多个微操作(如同时读写寄存器和启动 ALU),需复杂时序控制。 |
ADD 指令微程序流程图
// 控制存储器模拟(存储微指令序列)
public class ControlMemory {
private Microinstruction[] cmemory;
public ControlMemory() {
// 初始化ADD指令微程序(假设地址0-3)
cmemory = new Microinstruction[4];
// 0号微指令:取指令(PC→MAR,读存储器)
cmemory[0] = new Microinstruction(
"regWrite=0, memRead=1, aluOp=0", // 控制信号
0, // 无测试条件,顺序执行
1 // 下地址1
);
// 1号微指令:译码(IR→操作码寄存器)
cmemory[1] = new Microinstruction(
"regWrite=1, memRead=0, aluOp=0",
"opCodeTest", // 测试操作码
2 // 操作码为ADD时跳转至2,否则跳转至其他地址
);
// 2号微指令:取源操作数(R1→ALU)
cmemory[2] = new Microinstruction(
"regRead=R1, aluOp=LOAD_A",
0,
3
);
// 3号微指令:执行加法(ALU=ADD,结果→R2)
cmemory[3] = new Microinstruction(
"aluOp=ADD, regWrite=R2",
0,
0 // 返回取指周期
);
}
}
// 微指令类
class Microinstruction {
String controlSignals; // 控制信号字段
String testCondition; // 判别测试字段
int nextAddress; // 下地址字段
public Microinstruction(String ctrl, String test, int nextAddr) {
this.controlSignals = ctrl;
this.testCondition = test;
this.nextAddress = nextAddr;
}
}
设计方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
组合逻辑控制 | 速度快、无需存储 | 灵活性差、修改困难 | 简单指令集、高性能 CPU |
微程序控制 | 可编程性强、易维护 | 存在取微指令开销 | 复杂指令集、可扩展架构 |
如需进一步探讨具体实现细节,欢迎在评论区留言!