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

《计算机组成原理》第 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 设计,可关注后续章节的硬布线控制与微程序控制内容。

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

相关文章:

  • 电脑主板VGA长亮白灯
  • 自动化Web页面性能测试介绍
  • word中表格拉不动以及插入图片有间距
  • 使用 ssld 提取CMS 签名并重签名
  • Python学习(1) ----- Python的文件读取和写入
  • el-table设置自定义css
  • 电气行业PLM应用案例:国产PLM助力山西氪安研发转型
  • 高频面试--MySQL
  • day03
  • 大模型实现多卡训练保证数据一致性
  • SSM-IOC入门案例/DI入门案例
  • P4155 [SCOI2015] 国旗计划
  • 第二批考更有利?软考高项两个批次考试难度对比分析!
  • Oracle EBS 12.1 处理ISG 发布的wsdl 被请求时遇到500错误
  • K3s 中,CoreDNS 无法启动并报错 Listen: listen tcp :53: bind: permission denied
  • 机器学习中的关键术语及其含义
  • 永磁同步电机控制算法--基于电磁转矩反馈补偿的新型IP调节器
  • 鸿蒙OSUniApp 实现的数据可视化图表组件#三方框架 #Uniapp
  • IPsec协议
  • vue 实现table上下拖拽行功能
  • 网站建设企业云市场/今日头条最新新闻消息
  • 页面设计介绍/网站关键词优化技巧
  • 食品餐饮网站建设/如何制作一个自己的网页网站
  • 免费的个人网站/个人网页制作成品欣赏
  • 网站项目分析怎么做 方法有哪些/百度官网电话
  • 001做淘宝代码的网站/如何统计网站访问量