diff --git a/Computer-Organization/4-central-processing-unit.md b/Computer-Organization/4-central-processing-unit.md index beb8825..4b0f05b 100644 --- a/Computer-Organization/4-central-processing-unit.md +++ b/Computer-Organization/4-central-processing-unit.md @@ -330,6 +330,8 @@ CU的设计包括硬布线和微程序两种,微程序比较重要,硬布线 ### 硬布线 +微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生。 + #### 设计步骤 1. 分析每个阶段的微操作序列。 @@ -350,6 +352,9 @@ CU的设计包括硬布线和微程序两种,微程序比较重要,硬布线 2. 尽量安排在一个节拍内完成占用时间较短的微操作。 3. 尽量安排在一个节拍内完成并允许有先后顺序。 4. 电路设计。 + 1. 列出操作时间表。 + 2. 写出微操作命令的最简表达式。 + 3. 画出逻辑图。 #### 指令类别 @@ -367,6 +372,42 @@ CU的设计包括硬布线和微程序两种,微程序比较重要,硬布线 1. JMP(jump):无条件转移。 2. BAN(branch ACC Negative):条件转移。 +#### 基本微操作时序 + +首先对于取址周期,基本上的流程如下: + +1. PC→MAR:将PC地址交给MAR。 +2. 1→R:主存发出读命令。只需要存储器空闲就能发出。 +3. M(MAR)→MDR:将地址指向指令交给MDR。要MAR准备好,在1的后面。 +4. MDR→IR:将指令交给IR。把MDR有指令,在3后面。 +5. OP(IR)→ID:编译指令。IR中要有指令,在4后面。 +6. (PC)+1→PC:PC自加1。因为操作完就可以更新,所以在1后面就可以了。 + +所以没有依赖的可以尽量往前放,顺序可以变为123645。 + +因为12没有相互依赖,所以可以都安排在T0时间;36在1的后面,且36之间用到的设备不一样从而不会冲突,所以都安排在T1;而4和5时间都较短,所以可以都安排在T2。 + +然后是间址周期: + +1. Ad(IR)→MAR:获取IR指令中的地址交给MAR。 +2. 1→R:主存发出读命令。 +3. M(MAR)→MDR:取出对应的值放到MDR中。 +4. MDR→Ad(IR):将MDR的地址值放入IR的指令中。 + +与取址周期一致,2可以跟1一起,而34都依赖于1,所以12是T0,3是T1,4是T2。 + +执行周期省略,最后是中断周期,假设中断时要保存的地址为a: + +1. a→MAR:将a保存到MAR中。 +2. 1→W:主存发出写命令。存储器空闲就可以。 +3. 0→EINT:硬件关中断。安排在第一个周期就可以。 +4. (PC)→MDR:将当前程序计数器保存的位置暂存到MDR,等待后期恢复。内部数据通路空闲就可以。 +5. MDR→M(MAR):将MDR的数据保存到a这个地址。在4之后。 +6. 向量地址→PC:将PC送到中断服务地址。只用PC改好就可以,在4之后。 + +1、2、3都在T0,而456依次为T1、T2、T3。 + +这些操作由中断隐指令完成。中断隐指令不是一条指令,而是指一条指令的中断周期由硬件完成的一系列操作 ### 微程序