-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy path3、微程序设计.md
188 lines (97 loc) · 7.17 KB
/
3、微程序设计.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# 微程序设计
**思想**
* 一条机器指令对应一个微程序(存入 ROM)
<img src="https://img-blog.csdnimg.cn/20201219153544998.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="40%" height="50%" />
**框图及工作原理**
* 机器指令对应的微程序
<img src="https://img-blog.csdnimg.cn/20201219153606906.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_7" width="30%" height="50%" />
* 控制单元的基本框图
<img src="https://img-blog.csdnimg.cn/20201219153627925.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_7" width="40%" height="50%" />
**工作原理**
全部微指令存在 CM 中,程序执行过程中 只需读出
<img src="https://img-blog.csdnimg.cn/20201219153654274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_7" width="40%" height="50%" />
* 取指阶段(执行 LDA 取指微程序)
<img src="https://img-blog.csdnimg.cn/20201219153718477.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />
* 执行阶段(执行 LDA 执行微程序)
<img src="https://img-blog.csdnimg.cn/20201219153750317.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />
**微指令的编码方式**
* 直接编码(直接控制)方式
<img src="https://img-blog.csdnimg.cn/20201219153816835.png" width="40%" height="50%" />
* 在微指令的操作控制字段中,每一位代表一个微操作命令
* 某位为 “1” 表示该控制信号有效
<img src="https://img-blog.csdnimg.cn/20201219153839492.png" width="30%" height="50%" />
* 速度最快
* 字段直接编码方式
<img src="https://img-blog.csdnimg.cn/20201219153901673.png" width="30%" height="50%" />
* 将微指令的控制字段分成若干 “段”,每段经译码后发出控制信号
* 每个字段中的命令是 互斥 的,缩短了微指令字长,增加了译码时间
* 字段间接编码方式
<img src="https://img-blog.csdnimg.cn/20201219153927517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_7" width="40%" height="50%" />
* 混合编码
* 直接编码和字段编码(直接和间接)混合使用
* 其他
**微指令序列地址的形成**
* 形成方式
<img src="https://img-blog.csdnimg.cn/20201219153951388.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="30%" height="50%" />
* 地址来源
* 微指令的 下地址字段 指出
* 根据机器指令的 操作码 形成
* 增量计数器
* ( CMAR ) + 1 -> CMAR
* 分支转移
<img src="https://img-blog.csdnimg.cn/20201219154012685.png" width="35%" height="50%" />
* 其他
**微指令格式**
* 水平型微指令
* 一次能定义并执行多个并行操作
* 如 直接编码、字段直接编码、字段间接编码、直接和字段混合编码
* 垂直型微指令
* 类似机器指令操作码 的方式
* 由微操作码字段规定微指令的功能
* 两种微指令格式的比较
* 水平型微指令比垂直型微指令并行操作能力强 ,灵活性强
* 水平型微指令执行一条机器指令所要的微指令数目少,速度快
* 水平型微指令 用较短的微程序结构换取较长的微指令结构
* 水平型微指令与机器指令差别大
**微程序设计举例**
* 1、写出对应机器指令的微操作及节拍安排(注意:每条微指令结束都要指明下一条的地址)
* 取指阶段
<img src="https://img-blog.csdnimg.cn/2020121915403785.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="40%" height="50%" />
* 执行阶段
* 非访存指令
<img src="https://img-blog.csdnimg.cn/2020121915410066.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="35%" height="50%" />
* 访存指令
<img src="https://img-blog.csdnimg.cn/20201219154125237.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="30%" height="50%" />
* 转移类指令
<img src="https://img-blog.csdnimg.cn/20201219154150511.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="35%" height="50%" />
* 2、确定微指令格式
* 微指令的编码方式
* 采用直接控制
* 后续微指令的地址形成方式
* 由机器指令的操作码通过微地址形成部件形成
* 由微指令的下地址字段直接给出
* 微指令字长
* 由 20 种微操作确定 操作控制字段 ,最少 20 位
* 由 38 条微指令确定微指令的 下地址字段 为 6 位
* 微指令字长 可取 20 + 6 = 26 位
* 微指令字长的确定
* 38 条微指令中有 19 条38 条微指令中有 19 条是关于后续微指令地址 -> CMAR
* 1 条:OP ( IR ) -> 微地址形成部件 -> CMAR
* 18 条:Ad ( CMDR ) CMAR
* 若用 Ad ( CMDR ) 直接送控存地址线,则 省去了输至 CMAR 的时间,省去了 CMAR
* 同理
* OP ( IR ) -> 微地址形成部件 -> 控存地址线,可省去 19 条微指令,2 个微操作
* 即:
* 下地址字段最少取 5 位:38 - 19 = 19
* 操作控制字段最少取 18 位:20 - 2 = 18
* 省去了 CMAR 的控制存储器
<img src="https://img-blog.csdnimg.cn/20201219154213438.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_7" width="40%" height="50%" />
* 最终确定(考虑留有一定的余量)
<img src="https://img-blog.csdnimg.cn/2020121915423599.png" width="35%" height="50%" />
* 取操作控制字段:18位 -> 24位
* 下地址字段:5位 -> 6位
* 3、编写微指令码点(只要对指令译码,然后执行控制字段对应操作即可)
* 操作
<img src="https://img-blog.csdnimg.cn/20201219154302845.png" width="20%" height="50%" />
* 对应指令码点
<img src="https://img-blog.csdnimg.cn/20201219154328766.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNDYwNw==,size_16,color_FFFFFF,t_70" width="50%" height="50%" />