目录
一、微程序控制器的原理
1.模仿高级语言思想到微程序:
2.采用存储程序思想到CU内构造:
3.微程序执行过程:
二、微指令的设计
1.前置概念:
相容性微命令:
互斥性微命令:
2.微指令格式
水平型微指令
(1)直接编码(直接控制)方式:
(2)字段直接编码方式:
(3)字段间接编码方式:
垂直型微指令
混合型微指令
3.微指令的地址形成方式:
三、微程序控制单元的设计
1.设计步骤:
(1).分析每个阶段的微操作序列
(2).写出对应机器指令的微操作命令及节拍安排
(3).确定微指令格式
(4).编写微指令码点
2.静态和动态微程序设计
3.毫微程序设计
四、硬布线与微程序的比较
一、微程序控制器的原理
1.模仿高级语言思想到微程序:
首先我们来看高级语言转换到汇编语言,可以知道高级语言是可以被翻译成一条条的汇编指令序列的。
每条指令对应不同的机器周期,不同的机器周期对应着不同的微操作,CU就是发出微命令(每个微命令都对应一个微指令)来统筹CPU内部的执行工作的。
基于高级语言的思想,我们可以将多个微操作整合成一个微指令,而多个微指令整合成一个微程序,这个微程序就负责完成每条指令的执行。
其中的关系如下图示:
Tips:物理上,取指周期、执行周期看起来像是两个微程序但逻辑上应该把它们看作一个整体。因此,“一条指令对应一个微程序”的说法是正确的
取指,间址,执行,中断四个微程序段应该看作一个微程序。
则指令系统中有N条机器指令,CM中就有N个微程序,有N+1个微程序段。
2.采用存储程序思想到CU内构造:
采用“存储程序”的思想,CPU出厂前将所有指令的“微程序存入“控制器存储器CM”中
模仿CPU的取指执行的过程,在CU内部进行构造 :
微地址形成部件 | 产生初始微地址和后继微地址,以保证微指令的连续执行。 |
顺序逻辑 | 标志:根据指令地址码的寻址特征位判断是否要跳过间址周期 |
CLK:根据中断信号判断是否进入中断周期 | |
CMAR | 别名:μPC,微地址寄存器,接收微地址形成部件送来的微地址,为在CM中读取微指令作准备。 |
地址译码 | 将地址码转化为存储单元控制信号。 |
控制存储器CM | 用于存放各指令对应的微程序,控制存储器可用只读存储器ROM构成 |
CMDR | 别名:μIR,用于存放从CM中取出的微指令,它的位数同微指令字长相等。 |
3.微程序执行过程:
1 | CPU中的IR将指令的OP(操作码)部分送入CU |
2 | CU中的微地址形成部件接收并产生初始微地址。 |
3 | 微地址形成部件将产生的初始微地址送入顺序逻辑判断,结合PSW和CLK判断是否要进行间址或中断。 |
4 | 顺序逻辑判断后的地址送入CMAR |
5 | CMAR将地址送入地址译码器 |
6 | 地址译码器处理后的地址送入控制存储器CM |
7 | 控制存储器CM将微指令送入CMDR |
8 | CMDR将微指令的操作控制部分送出CU,CU以此发送控制信号 |
9 | CMDR将微指令的顺序控制部分送微地址形成部件 |
10 | 微地址形成部件产生下一条微指令的地址。 |
∞ | 至此,循环往复就完成了微程序的执行。 |
二、微指令的设计
微指令的具体格式应该怎么设计?
如何根据微指令发出相应的微命令?
微命令与微操作一一对应,一个微命令对应一根输出线
有的微命令可以并行执行,因此一条微指令可以包含多个微命令
1.前置概念:
相容性微命令:
可以并行完成。
互斥性微命令:
不允许并行完成
2.微指令格式
水平型微指令
基本格式 | |
描述 | 一条微指令能定义多个可并行的微命令。 |
优点 | 微程序短,执行速度快; |
缺点 | 微指令长,编写微程序较麻烦。 |
(1)直接编码(直接控制)方式:
在微指令的操作控制字段中,每一位代表一个微操作命令
某位为“1”表示该控制信号有效
优点:简单、直观,执行速度快,操作并行性好。
缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大。
(2)字段直接编码方式:
将微指令的控制字段分成若干“段”,每段经译码后发出控制信号微命令字段分段的原则:
① 互斥性微命令分在同一段内,相容性微命令分在不同段内。
例如:(PC)→MAR和(PC)+1→PC互斥, (PC)→MAR和1→R相容。
②每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
③ 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。
优点:可以缩短指令字长。
缺点:要通过译码电路再发出微命令,因此比直接编码方式慢。
例题:
某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有33个微命令,构成5个互斥类,分别包含7、3、12、5和6个微命令,则操作控制字段至少有多少位?
第1个互斥类有7个微命令,要留出1个状态表示不操作,所以需要表示8种不同的状态,故需要3个二进制位。
以此类推,后面4个瓦斥类各需要表示4、13、6、7种不同的状态,分别对应2、4、3、3个二进制位。
故操作控制字段的总位数为3+2+4+3+3=15位。
(3)字段间接编码方式:
一个字段的某些微命令需由另一个字段中的某些微命令来解释由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。、
优点:可进一步缩短微指令字长。
缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。
垂直型微指令
基本格式 | |
描述 | 一条微指令只能定义一个微命令,由微操作码字段规定具体功能 |
优点: | 微指令短、简单、规整,便于编写微程序! |
缺点: | 微程序长,执行速度慢,工作效率低 |
混合型微指令
描述 | 在垂直型的基础上增加一些不太复杂的并行操作。 微指令较短,仍便于编写;微程序也不长,执行速度加快。 |
3.微指令的地址形成方式:
微指令的下地址字段指出 | 微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。 |
根据机器指令的 操作码形成 | 当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。 |
增量计数器法 | (CMAR)+1→CMAR |
分支转移 | 转移方式:指明判别条件;转移地址:指明转移成功后的去向。 |
通过测试网络 | 内部电路网络给出: |
由硬件产生微程序入口地址 | 第一条微指令地址由专门硬件产生(用专门的硬件记录取指周期微程序首地址) |
中断周期由硬件产生中断周期微程序首地址(用专门的硬件记录) |
例题:
三、微程序控制单元的设计
1.设计步骤:
(1).分析每个阶段的微操作序列
和硬布线一样:(取指、间址、执行、中断四个阶段)
确定哪些指令在什么阶段、在什么条件下会使用到的微操作
取指:
PC→MAR |
1→R |
M(MAR)→MDR |
MDR →IR |
OP(IR)→ID |
(PC)+1→PC |
间址:
Ad(IR)→MAR |
1→R |
M(MAR)→MDR |
MDR → Ad(IR) |
执行:
CLA | 0→AC | clear ACC指令 |
ACC清零 | ||
LDA X | Ad (IR)→ MAR | 取数指令,把X所指内容,取到ACC |
1→R | ||
M(MAR)→MDR | ||
MDR→AC | ||
JMP X | Ad (IR)→PC | 无条件转移 |
BAN X | A0·Ad (IR )+A0·(PC)→PC | Branch ACC Negative 条件转移,当AC为负时转移 |
中断:
步骤 | 微指令 | 描述 |
---|---|---|
1. 保存当前程序计数器(PC)内容 | MAR ← PC | 将当前的程序计数器(PC)内容传送到存储地址寄存器(MAR)。 |
M[SP] ← MAR | 将MAR中的内容(即PC值)存储到堆栈指针(SP)指向的内存地址。 | |
SP ← SP - 1 | 将堆栈指针减1,指向下一个空闲堆栈位置。 | |
2. 保存CPU状态(例如标志寄存器) | MAR ← FLAGS | 将当前标志寄存器(FLAGS)内容传送到MAR。 |
M[SP] ← MAR | 将FLAGS中的内容存储到堆栈中。 | |
SP ← SP - 1 | 堆栈指针减1,指向下一个空闲堆栈位置。 | |
3. 加载中断向量地址 | PC ← Interrupt_Vector_Address | 将中断向量地址加载到程序计数器(PC)中,这样CPU将跳转到对应的中断服务程序。 |
4. 转到中断服务程序的入口地址 | MAR ← PC | 将新的PC内容传送到MAR,以便从内存中读取中断服务程序的第一条指令。 |
IR ← M[MAR] | 将中断服务程序的第一条指令从内存读取到指令寄存器(IR)。 | |
PC ← PC + 1 | 程序计数器递增,准备执行下一条指令。 | |
5. 执行中断服务程序 | - | CPU现在开始按照从中断向量表中得到的地址来执行中断服务程序。 |
6. 恢复原来的程序状态 | SP ← SP + 1 | 增加堆栈指针以指向之前存储的标志寄存器的内容。 |
FLAGS ← M[SP] | 将标志寄存器的值恢复到FLAGS寄存器中。 | |
SP ← SP + 1 | 增加堆栈指针以指向之前存储的PC内容。 | |
PC ← M[SP] | 恢复程序计数器的值,使得中断返回后继续执行中断前的程序。 |
(2).写出对应机器指令的微操作命令及节拍安排
(1)写出每个周期所需要的微操作(参照硬布线)
例如取指周期:
(2)补充微程序控制器特有的微操作:
还需考虑如何读出这3条微指令以及如何转入下一个机器周期:
Ad(CMDR)→CMAR | 用当前微指令的下地址表示找到下一条微指令 |
OP(IR)→微地址形成部件→CMAR | 转入下一个机器周期 |
因此需要进行补充:
a.取指周期:
Ad(CMDR)→CMAR(指明下一条微指令地址)
OP(IR)→CMAR(转入下一个周期)
b.执行周期:
Ad(CMDR)→CMAR(用于执行下一个微指令)
(3).确定微指令格式
根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数。根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数。最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长
(4).编写微指令码点
根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。
也就是每个状态对应一个控制线。
2.静态和动态微程序设计
静态 | 微程序无需改变,采用ROM |
动态 | 通过改变微指令和微程序 改变机器指令 有利于仿真,采用EPROM |
3.毫微程序设计
毫微程序设计的基本概念
微程序设计用微程序解释机器指令
毫微程序设计 用 亳微程序解释微程序
毫微指令与微指令的关系好比 微指令与机器指令 的关系
四、硬布线与微程序的比较
微程序控制器 | 硬布线控制器 | |
---|---|---|
工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
执行速度 | 慢 | 快 |
规整性 | 较规整 | 烦琐、不规整 |
应用场合 | CISC CPU | RISC CPU |
易扩充性 | 易扩充修改 | 困难 |