第十五讲 控制器
寄存器分类
- 用户可见寄存器:允许编程人员通过机器语言或汇编语言访问,通过优化寄存器的使用而减少对主存的访问
- 控制和状态寄存器
两者区分并不严格
用户可见寄存器
- 通用寄存器:可被程序员指派各种用途
- 数据寄存器:仅可用于保持数据而不能用于操作数地址的计算
- 地址寄存器:可以是自身有某些通用性,或是专用于某种具体的寻址方式
- 条件码寄存器/标志(flag)寄存器:CPU硬件设置这些条件位作为操作的结果, 至少是部分用户可见的
- 子程序调用会导致自动保存所有用户可见的寄存器,并在返回时自动取回
- 子程序调用之外保存用户可见寄存器的相关内容是程序员的责任, 需要在程序中为此编写专门的指令
控制和状态寄存器
- 程序计数器
- 指令寄存器
- 存储器地址寄存器
- 存储器缓冲寄存器
- 程序状态字: 一个或一组包含状态信息的寄存器,包含条件码加上其他状态信息
- 指针寄存器: 一个指向含有附加状态信息的存储器块的指针
- 中断向量寄存器: 在使用向量式中断的机器中
- 系统栈指针: 若栈用于实现某些功能
- 页表指针寄存器: 虚拟存储器系统
微操作
- 执行程序时,计算机操作是由一系列指令周期组成,每个周期执行一条机器指令
- 每个指令周期又可以看作是由几个更小的子周期组成
- 取指
- 间址
- 执行
- 中断
- 每个子周期由一系列涉及CPU寄存器操作的更小步骤组成,这些步骤称为微操作
取指周期
- 出现在每个指令周期的开始,将指令从存储器中取出
微操作分组的原则
- 事件的流动顺序必须是恰当的
- 必须避免冲突
- 满足上述条件下,所用的时间单位尽可能少
间址周期
- 如果指令采用间接寻址,则在指令执行前有一个间址周期
- 完成间址周期后,IR的状态与不使用间接寻址方式的状态是相同的,已经为执行周期准备就绪
执行周期
- 对于不同的操作码, 会出现不同的微操作序列
中断周期
- 在完成执行周期时,要确定是否有允许的中断产生
- 如果有,则出现一个中断周期
指令周期代码ICC
- 00: 取指
- 01: 间址
- 10: 执行
- 11: 中断
CPU内部总线
- ALU和寄存器都连接到CPU内部总线上
- 为了数据在该内部总线和各寄存器之间传递,内部总线和寄存器之间有门和控制信号
- 控制线控制着数据和系统总线(外部)的交换以及ALU的操作
控制器
控制CPU的功能需求
- CPU的基本元素
- ALU
- 寄存器组
- 内部数据通路
- 控制器
- 外部数据通路
- CPU需要完成的微操作
- 在寄存器之间传送数据
- 将数据由寄存器传送到外部接口(如系统总线)
- 将数据由外部接口传送到寄存器
- 将寄存器作为输入和输出,完成算术和逻辑运算
- 控制器的两个基本任务
- 定序: 根据正被执行的程序,控制器使CPU以正确的顺序通过一系列微操作
- 执行: 控制器使每个微操作得以完成
控制器的输入
- 指令寄存器:当前指令的寻址方式和操作码
- 标志:确定CPU的状态和前一个ALU操作的结果
- 时钟:控制器要在每个时钟脉冲完成一个或一组同时的微操作
- 来自控制总线的控制信号:向控制器提供控制信号 (如中断请求)
控制器的输出
- CPU内的控制信号
- 用于寄存器之间传送数据
- 用于启动特定的ALU功能
- 到控制总线的控制信号
- 到存储器的控制信号
- 到I/O模块的控制信号
- 所有的控制信号最终作为二进制输入量直接输入到各个逻辑门上
控制器的最小特性
- 它只需要知道将被执行的指令和算术、逻辑运算结果的性质(如正负、溢出等),而不需要知道正被处理的数据或得到的实际结果具体是什么
- 它只是以少量的送到CPU内的和送到系统总线上的控制信号来实现控制
控制器的实现
- 硬布线实现
- 控制器是一个组合电路,把输入逻辑信号转换为一组输出逻辑信号,即控制信号
- 微程序实现
- 控制逻辑是微程序指定的,控制器是一个相对简单的逻辑电路,通过执行每条微指令来产生控制信号
硬布线实现
控制器输入
- 时钟
- 在一个指令周期内,控制器要在不同时间单位发送不同的控制信号
- 使用一个定时器作为控制器的输入,并且控制器在指令周期结束时必须通知定时器以使其重新开始计数
控制器逻辑
- 为每个输出的控制信号设计一个关于控制器输入的布尔表达式
微程序实现
微程序(固件)介于硬件与软件之间
- 设计固件比设计硬件容易,但写固件程序比软件程序困难
- 微指令序列
微指令:每行描述一个时间内出现的一组微操作
基本思路
- 对于每个微操作,控制器的任务是产生一组控制信号,即控制器发出的每根控制线或开或关(每根控制线由一个二进制数字表示)
- 构造一个控制字,每位代表一根控制线,这样每个微操作能用控制字中的不同的0和1的样式来表示
- 将这些控制字串在一起,可以表示控制器需要完成的微操作序列
- 由于微操作序列不是固定的,把控制字放入一个存储器单元中,每个字有自己唯一的地址
- 添加少数几位用于指示条件的真假
- 给每个控制字添加一个地址字段,以指示某种条件为真时,将要执行的下一控制字的位置
任务
- 微指令定序
- 根据当前的微指令、条件标志和指令寄存器的内容,产生下一微指令的控制存储器地址
- 微指令的大小:减小微指令的大小就能节省控制存储器的成本
- 地址生成时间:尽可能快地执行微指令
- 微指令执行
- 产生控制信号:发往CPU内部,送往外部控制总线或其他外部接口
构成
- 定序逻辑:向控制地址寄存器装入地址,并发出读命令
- 控制地址寄存器:含有下面即将被读取的微指令地址
- 控制存储器:存有一组微指令
- 控制缓冲寄存器:存放被读出的微指令
工作流程
- 为执行一条指令,定序逻辑发出一个读命令给控制存储器
- 当一条微指令由控制存储器读出后,即被传送到控制缓冲寄存器
- 控制缓冲寄存器的内容生成控制信号,并为定序逻辑提供下一条地址信息
- 定序逻辑根据这个地址信息和ALU标志,将新的地址装入到控制地址寄存器中
- 生成新地址的三个选择
- 取顺序下一条微指令:加1到控制地址寄存器
- 基于跳转微指令转移到一个新的例程:将控制缓冲寄存器的地址字段装入控制地址寄存器
- 转移到一个机器指令例程:根据IR中的操作码向控制地址寄存器装入机器指令例程的第一条微指令
优点:
- 简化了控制器的设计任务
- 实现起来既成本较低,也能减少出错机会
缺点: - 要比采用相同或相近半导体工艺的硬布线控制器慢一些