当前位置: 首页 > web >正文

《计算机组成原理》第 9 章 - 控制单元的功能

目录

🔍 9.1 微操作命令的分析

🔹 9.1.1 取指周期

🔹 9.1.2 间址周期

🔹 9.1.3 执行周期

🔹 9.1.4 中断周期

🚀 9.2 控制单元的功能

🔹 9.2.1 控制单元的外特性

🔹 9.2.2 控制信号举例

🔹 9.2.3 多级时序系统

🔹 9.2.4 控制方式

1. 同步控制方式

2. 异步控制方式

3. 联合控制方式

💡 总结


🔍 9.1 微操作命令的分析

🔹 9.1.1 取指周期

功能:从内存中取出指令并送入指令寄存器(IR)。
核心微操作

  • PC 内容送地址总线(MAR)
  • 发读命令(Memory Read)
  • 内存数据送数据总线(MDR)→ IR
  • PC 自动加 1

Java 代码示例:取指周期模拟

/*** 模拟取指周期操作*/
public class FetchCycle {private int pc; // 程序计数器private int mar; // 存储器地址寄存器private int mdr; // 存储器数据寄存器private int ir; // 指令寄存器// 取指周期执行方法public void execute() {// 1. PC内容送MARmar = pc;System.out.println("取指周期:PC(" + pc + ") → MAR(" + mar + ")");// 2. 发读命令(模拟内存读取)mdr = simulateMemoryRead(mar); // 假设内存返回指令码System.out.println("取指周期:内存读取数据 → MDR(" + mdr + ")");// 3. MDR数据送IRir = mdr;System.out.println("取指周期:MDR(" + mdr + ") → IR(" + ir + ")");// 4. PC自动加1(假设指令占1字长)pc += 1;System.out.println("取指周期:PC自增 → PC(" + pc + ")");}// 模拟内存读取(简化逻辑)private int simulateMemoryRead(int address) {// 假设地址0存储指令码0x1234(示例数据)return (address == 0) ? 0x1234 : 0;}
}

流程图位置

🔹 9.1.2 间址周期

功能:处理指令中的间接寻址,获取操作数真实地址。
核心微操作

  • MDR 内容送 MAR(间接地址→MAR)
  • 发读命令(读取操作数地址)
  • 内存数据送 MDR(真实地址→MDR)

Java 代码示例:间址周期模拟

/*** 模拟间址周期操作*/
public class IndirectCycle {private int mdr; // 存储器数据寄存器(存储间接地址)private int mar; // 存储器地址寄存器private int memory[] = new int[1024]; // 模拟内存(简化)// 间址周期执行方法(假设MDR已存间接地址)public int execute() {// 1. MDR→MAR(间接地址→地址总线)mar = mdr;System.out.println("间址周期:MDR(" + mdr + ") → MAR(" + mar + ")");// 2. 发读命令(读取操作数真实地址)int realAddress = memory[mar];System.out.println("间址周期:内存读取真实地址 → MDR(" + realAddress + ")");return realAddress; // 返回操作数真实地址}// 初始化内存(示例数据:地址100存储间接地址200)public void initMemory() {memory[100] = 200; // 间接地址指向200}
}

流程图位置

🔹 9.1.3 执行周期

功能:根据指令操作码执行具体运算或逻辑操作。
案例:加法指令(ADD R1, R2)
微操作

  • R1 内容送 ALU
  • R2 内容送 ALU 并执行加法
  • 结果送 R1

Java 代码示例:执行周期模拟

/*** 模拟执行周期(加法指令)*/
public class ExecuteCycle {private int[] register = new int[4]; // 模拟寄存器R0-R3private ALU alu = new ALU(); // 算术逻辑单元// 执行加法指令(ADD dst, src)public void executeAdd(int dst, int src) {int op1 = register[dst];int op2 = register[src];int result = alu.add(op1, op2); // 调用ALU加法功能register[dst] = result;System.out.println("执行周期:R" + dst + "(" + op1 + ") + R" + src + "(" + op2 + ") → R" + dst + "(" + result + ")");}// 初始化寄存器(示例:R1=5, R2=3)public void initRegisters() {register[1] = 5;register[2] = 3;}
}// ALU类(简化实现)
class ALU {public int add(int a, int b) {return a + b;}
}

流程图位置

🔹 9.1.4 中断周期

功能:响应中断请求,保存断点并转入中断服务程序。
核心微操作

  • PC→内存(保存当前程序计数器)
  • 中断服务程序入口地址→PC

Java 代码示例:中断周期模拟

/*** 模拟中断周期操作*/
public class InterruptCycle {private int pc; // 程序计数器private int[] memory = new int[1024]; // 模拟内存(保存断点)private final int INTERRUPT_VECTOR = 0x100; // 中断向量地址// 中断周期执行方法public void execute() {// 1. 保存当前PC到内存(假设内存地址0存储断点)memory[0] = pc;System.out.println("中断周期:PC(" + pc + ") → 内存[0]");// 2. 加载中断服务程序入口地址到PCpc = INTERRUPT_VECTOR;System.out.println("中断周期:PC←中断向量(" + INTERRUPT_VECTOR + ")");}
}

流程图位置

🚀 9.2 控制单元的功能

🔹 9.2.1 控制单元的外特性

输入信号

  • 时钟信号(Clock)
  • 指令操作码(OP Code)
  • 中断请求(IRQ)
  • 状态信号(如 ZF 标志位)

输出信号

  • 内存读写命令(Read/Write)
  • 寄存器控制信号(如 RegWrite)
  • 总线控制信号(如 BusEnable)

🔹 9.2.2 控制信号举例

信号名称功能描述示例场景
PCOut允许 PC 内容输出到总线取指周期 PC→MAR
IRWrite允许数据写入指令寄存器取指周期 MDR→IR
MemRead内存读命令取指周期读取指令
ALUOp控制 ALU 运算类型(加法 / 减法等)执行周期加法指令

代码关联
在前面的 Java 示例中,FetchCycle类的execute()方法隐含了PCOutIRWrite等控制信号逻辑。

🔹 9.2.3 多级时序系统

三级时序结构

  1. 机器周期(CPU 周期):完成一个基本操作的时间(如取指周期)
  2. 节拍电位(时钟周期组):机器周期内的分段时序(如取指周期分为 4 个节拍)
  3. 节拍脉冲(时钟周期):最小时间单位

Java 模拟思路

// 简化的时序系统类
public class TimingSystem {private int machineCycle; // 机器周期计数器private int beat; // 节拍计数器public void nextCycle() {machineCycle++;beat = 0; // 每个机器周期重置节拍}public void nextBeat() {beat++;}
}

🔹 9.2.4 控制方式

1. 同步控制方式
  • 所有操作由统一时钟信号控制
  • 优点:时序简单,易于设计
  • 缺点:效率低(复杂操作需等待最长时钟周期)
2. 异步控制方式
  • 操作由事件驱动,无统一时钟
  • 优点:效率高(按需分配时间)
  • 缺点:设计复杂,需处理异步信号
3. 联合控制方式
  • 核心操作同步控制,复杂操作异步扩展
  • 示例:取指周期同步,I/O 操作异步

💡 总结

     控制单元是计算机的 “指挥中心”,通过微操作命令与时序系统协调硬件运行。建议读者结合示例代码动手调试,重点理解不同周期的微操作序列及时序逻辑。如需进一步探讨 CPU 设计,可关注后续章节的硬布线控制与微程序控制内容。

希望这篇帖子能帮助您系统掌握控制单元核心知识!欢迎在评论区交流学习心得~

http://www.xdnf.cn/news/9276.html

相关文章:

  • 光电赋能低空场景,灵途科技助力无人机持续升级
  • 红黑树,B树,二叉树之间的不同
  • 【监控】Prometheus中的告警机制介绍
  • 异常:UnsupportedOperationException: null
  • 【Java开发日记】说一说序列化与反序列化中存在的问题
  • 前端 reconnecting-websocket 包
  • 【AI工具应用】使用 trae 实现 word 转成 html
  • 实验设计与分析(第6版,Montgomery)第3章单因子实验:方差分析3.11思考题3.4 R语言解题
  • Python训练打卡Day35
  • vLLM 核心技术 PagedAttention 原理详解
  • SLOT:测试时样本专属语言模型优化,让大模型推理更精准!
  • 对于ARM开发各种手册的分类
  • 计算机网络-网络层
  • 赋能低空经济 | 奇妙智能已掌握AI+无人机智慧巡检技术
  • Linux `cd` 命令深度解析与高阶应用指南
  • JavaScript 性能优化按层次逐步分析
  • Autodesk Maya 2025.3新特性
  • 【HTML-13】HTML表格合并技术详解:打造专业数据展示
  • 力扣经典算法篇-13-接雨水(较难,动态规划,加法转减法优化,双指针法)
  • go tour泛型
  • 删除 nexus3 中指定仓库中的所有组件的脚本
  • Halcon联合QT ROI绘制
  • 详解 .net9 内置 Lock 对象,更加现代化和灵活可控的锁对象
  • 分贝计在评估噪音对老年人影响中的具体作用和应用方式
  • qml和JavaScript的QtObject是 QML 中用于存储无界面,纯数据。应用场景:计算器、遥控器、告警类型映射
  • SD08_解决由于anaconda版本过低无法安装高版本python的问题
  • 5分钟入门WPF和FluentValidation数据验证
  • opencv(C++) 图像滤波
  • Dataset和Dataloader
  • VR三维数字空间还原