mirror of
https://github.com/Didnelpsun/CS408.git
synced 2026-06-15 22:46:32 +08:00
Update 4-central-processing-unit.md
This commit is contained in:
@@ -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。
|
||||
|
||||
这些操作由中断隐指令完成。中断隐指令不是一条指令,而是指一条指令的中断周期由硬件完成的一系列操作
|
||||
|
||||
### 微程序
|
||||
|
||||
|
||||
Reference in New Issue
Block a user