每一个机器周期由若干个时钟周期(或者称为节拍)组成, 通过若干个微操作组成的序列完成这个周期内需要做的事情. CU会在每一个节拍内, 发出一个微命令, 用来完成对应的微操作. 如: 微命令1使得PCout和MARin有效, 则完成对应的微操作1(PC)->MAR
- 取址周期(FE=1): T0: 微操作1、微操作2; T1: 微操作3; T2: 微操作4;
- 间址周期(IND=1): T0: 微操作5、微操作2; T1: 微操作6; T2: 微操作7;
- 执行周期(EX=1): T0: 无; T1: 微操作8; T2: 微操作9、微操作6
- 中断周期(INT=1): T0: 无; T1: 微操作10; T2: 微操作11
- 一个节拍内可以并行完成多个“相容的”微操作
- 同一个微操作可能在不同指令的不同阶段内被使用
- 不同指令的执行周期所需节拍数各不相同, 为了简化设计, 选择定长的机器周期, 以可能出现的最大节拍数为准(通常以访存所需的节拍数为参考)
- 若实际所需的节拍数较少, 可将微操作安排在机器周期末尾几个节拍上进行
- 根据指令操作码、目前的机器周期、节拍信号、机器状态条件, 即可确定现在这个节拍下应该发出哪些“微指令”
所有指令的取址周期、T0节拍下一定要完成(PC)->MAR. 则可知C1=FE∙T0 逻辑表达式是电路的数学化描述
M(MAR)->MDR微操作命令的逻辑表达式: FE∙T1+IND∙T1(ADD+STA+LDA+JMP+BAN)+EX∙T1(ADD+LDA)
设计步骤:
- 分析每个阶段的微操作序列(取指令、间指、执行、中断四个阶段)「确定哪些指令在什么阶段、在什么条件下会使用到什么微操作」
- 选择CPU的控制方式「采用定长机器后期还是不定长机器周期?每个机器周期安排几个节拍?」
- 安排微操作的时序「如何用3个节拍完成整个机器周期内的所有微操作」
- 电路设计
特点:
指令越多, 设计和实现就越复杂, 因此一般用于RISC(精简指令集系统), 如果扩充一条新的指令, 则控制器的设计就需要大改, 因此扩充指令较困难, 由于使用纯硬件实现控制, 因此执行速度更快, 微操作控制信号由组合逻辑电路即时产生
- 取址周期(所有的指令都一样): PC->MAR; 1->R; M(MAR)->MDR; MDR->IR; OP(IR)->ID; (PC)+1->PC (ID为指令译码器 Instruction Decoder)
- 间址周期(所有指令都一样): Ad(IR)->MAR; 1->R; M(MAR)->MDR; MDR->Ad(IR)
- 执行周期(各不相同):
- CLA: clear ACC指令 ACC清零 0->AC(很多地方将ACC简写为AC)
- LDA: 取数指令, 把x所指内容取到ACC Ad(IR)->MAR; 1->R; M(MAR)-> MDR; MDR->AC
- JMP: 无条件转移 Ad(IR)->PC
- BAN: 条件转移, 当ACC为负时转移 A0∙Ad(IR)+(1-A0)∙(PC)->PC
罗列出所有指令在各个阶段的微操作序列, 就可以知道在什么情况下需要使用这个微操作
假设采用同步控制方式(定长机器周期), 一个机器周期内安排3个节拍
三个原则:
- 微操作的先后顺序不得随意更改
- 被控对象不同的微操作尽量安排在一个节拍内进行
- 占用时间较短的微操作, 尽量安排在一个节拍内完成, 并允许有先后顺序
- T0: PC->MAR, 1->R
- T1: M(MAR)->MDR, (PC)+1->PC
- T2: MDR->IR, OP(IR)->ID
- M(MAR)->MDR: 从主存取数据, 用时较长, 因此必须一个时钟周期才能保证微操作的完成
- MDR->IR: 是CPU内部寄存器的数据传送, 速度很快, 因此在一个时钟周期内可以紧接着完成OP(IR)->ID, 也就是可以一次同时发出两个微命令
- T0: Ad(IR)->MAR, 1->R
- T1: M(MAR)->MDR
- T2: MDR->Ad(IR)
参见书表
可以得出微操作命令的逻辑表达式