目录
1.微程序控制器的设计思想
2.微指令的基本格式
3.微程序控制器的基本结构
(1)控制存储器CM
(2)CMAR
(3)地址译码
(4)CMDR
(5)微地址形成部件
(6)顺序逻辑
4.微程序控制器的工作原理
5.微指令具体格式的设计
(1)水平型微指令
(2)垂直型微指令
(3)混合型微指令
6.微指令的编码方式
(1)直接编码(直接控制)方式
(2)字段直接编码方式
(3)字段间接编码方式(了解即可)
7.微指令的地址形成方式
8.微程序控制单元的设计
(1)分析每个阶段的微操作序列
(2)写出对应机器指令的微操作命令及节拍安排
(3)确定微指令的格式
(4)编写微指令码点
9.微程序设计的分类(了解)
(1)静态微程序设计
(2)动态微程序设计
(3)毫微程序设计
10.硬布线与微程序的比较
上一小节讲了硬布线控制器,这一小节来看微程序控制器:
红框部分是重点,需要深入理解与学习
1.微程序控制器的设计思想
高级语言程序是由一条条指令构成的,而一条指令又是由微操作序列组成,所以用微操作序列实现指令的功能十分类似于用指令序列实现程序的功能。
我们可以用同样的思想,将一个时钟周期内可以进行的微操作,用一个微指令指明
一个个微指令序列就构成了微程序,每一种指令对应一个微程序
指令与微指令:
指令是对程序执行步骤的描述
微指令是对指令执行步骤的描述
微命令,微操作,微指令和微程序:
微命令与微操作一 一对应
微指令中可能包含多个微命令
微程序由一系列微指令组成
一条机器指令对应一条微程序
主存储器与控制器存储器(CM):
主存储器用来存放机器指令
控制器存储器(CM)用来存放微指令序列,被集成在控制单元内部,并且由ROM实现,通常在CPU出厂时就把所有微程序写入这个ROM芯片中。
指令周期与微周期(微指令周期):
指令周期:从主存取出并执行一条机器指令所需的时间
微周期(微指令周期):从控制器存储器取出一条微指令并执行相应微操作所需的时间
微程序控制器的设计思想就是采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”中
2.微指令的基本格式
如下图所示,一条微指令需要操作控制字段,用来表示这条微指令所对应的微操作是哪几个,而顺序控制字段则用来指明下一条微指令的地址。
3.微程序控制器的基本结构
(1)控制存储器CM
用于存放各指令对应的微程序,每条指令的微程序都是顺序存放的。这些微程序在CPU出厂前,厂商就应该编写完成。
控制存储器可用只读存储器ROM(因为ROM读取速度更快,并且ROM是非易失性的存储芯片,也就是CPU断电后,控制存储器CM的数据是不会丢失的)构成。
(2)CMAR
CPU想要读取内存中某一个数据时,需要从PC中将需要读取的数据的地址放到MAR中,再根据MAR从主存中读取相应地址的数据,微程序控制器中的CMAR同理。
CMAR,也称为uPC ,微地址寄存器,接收微地址形成部件送来的微地址,为在CM中读取微指令作准备。相当于PC-->MAR的结合。
(3)地址译码
MAR的地址信息,需要通过译码器处理,才能在主存储器找到相应地址的数据。在微程序控制器中,也需要通过地址译码将地址码转化为存储单元控制信号。
(4)CMDR
在主存中找到相应数据后,需要存储到MDR。在微程序控制器中,需要CMDR,也称uIR,用于存放从CM中取出的微指令,它的位数同微指令字长相等。
(5)微地址形成部件
产生初始微地址和后继微地址,以保证微指令的连续执行。每一条指令对应的微程序不同,因此需要根据指令的操作码,确定其对应的微程序的起始地址是什么
(6)顺序逻辑
用于控制微指令序列的执行次序。
4.微程序控制器的工作原理
所以执行指令的过程如下:
当CPU接收到一条指令后,会把指令的操作码传送到微指令形成部件,用来确定该指令对应的微程序的起始地址是什么,接下来再根据顺序逻辑的标志等信息,确定下一条微指令的存放地址,将这一地址放到CMAR中,经过地址译码器的译码后,就可以在控制存储器CM中选中对应地址的微指令,将这一微指令放到CMDR中。
微指令包含两个信息,第一部分信息用于描述这条微指令对应的控制信号,第二部分信息用于描述下一条需要执行的微指令的地址,也称为下地址。
执行完这条微指令后,需要将下地址信息送给顺序逻辑,顺序逻辑通过标志等信息,将下一条微指令的地址送到CMAR中。
对于微指令的控制部分,微指令通过这一控制部分,向CPU内部和系统总线发出控制信号。
所有指令的取指周期、间址周期、中断周期所对应的微指令序列都一样,那么是否可以共享使用?
在控制存储器CM中,取指周期、间址周期、中断周期所对应的微指令序列都只有一份,对于执行周期对应的微程序,每一条指令都是不同的
注:取指周期的微指令序列固定从#0开始存放。执行周期的微指令序列的存放根据指令操作码确定。
例如:对于LDA X,就是将X地址所指的数据从主存中取到ACC中
取指周期:#0,#1,#2
0号微指令对应的多个微操作:
(PC)--->MAR,1--->R
1号微指令对应的微操作:
M(MAR)--->MDR
1号微指令对应的微操作:
(MDR)--->IR
下一条微指令的地址被存放在下地址为3的位置,也就是间址周期的第一条微指令
但是LDA X这条指令不一定需要执行间址周期,那么如何跳过间址周期呢?
顺序逻辑需要根据指令地址码的寻址特征位判断是否要跳过间址周期,如下图所示,这条微指令送到顺序逻辑的下地址信息为3。经过顺序逻辑的处理后,若这条指令不需要执行间址周期,就会直接跳到这条指令对应的执行周期的微指令序列。
根据该指令的操作码,通过微地址形成部件的处理后,微地址形成部件会告诉顺序逻辑这条指令对应的执行周期微指令的起始地址是13,顺序逻辑就会将13这个地址信息放到CMAR中,也就表明了接下来要执行的是13这条微指令。
那么执行完下地址为3的微指令后,紧接着就会执行下地址为13的微指令。
所以指令的执行不是一成不变的,处理判断是否有间址周期外,还需判断是否有中断周期
需要注意以下几点:
1.取指周期的微程序段通常是公用的,故如果某指令系统中有n条机器指令,则CM中微程序段的个数至少是n+1个。
因为每条指令对应执行周期的微程序不同,所以需要设置n个微程序分别表示n个执行周期微程序,另外再在上1个取指周期微程序即可,因为取指周期微程序对于每条指令都是相同的。
注:间址周期微程序和中断周期微程序对于每条指令都是相同的,为什么不算上他们?
一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包含间址周期、中断周期的微程序段。
2.物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上,应该把它们看作一个整体。因此,一条指令对应一个微程序的说法是正确的。
5.微指令具体格式的设计
先了解两个概念:相容性微命令以及互斥性微命令
相容性微命令:可以并行完成的微命令。互斥性微命令:不允许廷行完成的微命令。
(1)水平型微指令
一条微指令能定义多个可并行的微命令
(2)垂直型微指令
一条微指令只能定义一个微命令,由微操作码字段规定具体功能:
微操作码较短,例如8bit的微操作码,就能指明2^8=256种微操作。
若某微程序想完成某些固定的微操作,并采用水平型微指令,那么微指令数较少,但是每条微指令较长。
水平型微指令的优点:微程序短,执行速度快。
水平型微指令的缺点:编写微程序较麻烦。
若某微程序想完成某些固定的微操作,并采用垂直型微指令,就需要更多条的微指令,因为每个微指令对应一个微操作。
垂直型微指令的优点:微指令短,简单,规整,便于编写微程序。
垂直型微指令的缺点:微程序长,执行速度慢,工作效率低。
(3)混合型微指令
在垂直型的基础上增加一些不太复杂的并行操作。微指令较短,仍便于编写;微程序也不长,执行速度加快。
6.微指令的编码方式
微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。这里主要探讨水平型微指令:
(1)直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微操作命令
某位为“1”表示该控制信号有效,例如下图,若想让此微指令的"(PC)--->MAR","1--->R"两个微操作有效,只需让两个微操作对应的控制信号置为1即可。
优点:简单、直观,执行速度快,操作并行性好。
缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大。
(2)字段直接编码方式
将微指令控制字段分成若干"段",每段经译码后发出控制信号,微命令字段分段的原则:
① 互斥性微命令分在同一段内,相容性微命令分在不同段内。
② 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂和译码时间。
③ 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位(2^3=8)时,最多只能表示7(8-1)个互斥的微命令,通常用000表示不操作。
例如,"(PC)--->MAR"与"1--->R"这两个微操作是可以并行执行的,所以需要把这两个微操作分到不同段中,这两个微操作在不同的段中会有对应的编码,编码经过译码器译码后,就会发出相应的控制信号,并且这两个控制信号是并行发出的
而(PC)--->MAR与(PC)+1--->PC是互斥的微操作,所以把这两个微操作放到同一个段中,两个微操作在段中的编码不同,依次经过译码器译码。
这样微指令的字长就能有效减短。
例题:
某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有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 位若采用直接编码方式,则控制字段需要33位,所以采用字段直接编码法,字长有效减短了
优点:可以缩短微指令字长。
缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
(3)字段间接编码方式(了解即可)
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。
优点:可进一步缩短微指令字长。
缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。
7.微指令的地址形成方式
(1)直接根据微指令的下地址字段指出
微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。
(2)根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址操作码经过微地址形成部件形成。
(3)增量计数器法
若想要顺序执行一系列的微指令序列,只需要在当前微指令执行结束后,将(CMAR)+1---->CMAR即可。用这种方式顺序找到下一条应该执行的微指令。
(4)分支转移
对于转移类的微指令,会指明转移方式(指明判别条件)以及转移地址(指明转移成功后的去向)
这条微指令也会直接改变下一条微指令的地址。
(5)通过测试网络
这个测试网络就是顺序逻辑,顺序逻辑会接收某些标志信息,根据标志信息以及微指令的某些bit信息,决定下一条微指令的地址
(6)由硬件产生微程序入口地址
•第一条微指令地址由专门 硬件 产生
每条指令的取指周期对应的微指令序列是公用的,从#0号地址开始存放,所以任何指令的第一条微指令地址一定是#0号地址,那么这一固定的地址就可以用专门的硬件记录(用专门的硬件记录取指周期微程序首地址)
•中断周期 由硬件 产生 中断周期微程序首地址
若某条指令的执行需要进入中断周期,也会用专门的硬件来记录中断周期微程序首地址,因为所有指令在中断周期对应的微指令序列是相同的。
例题:
某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微程序平均由4条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是多少位?
解读:
公共的取指令周期的微指令有2条,每个指令对应的执行周期的微指令有4条
至少多少位,则忽略间址周期和中断周期
解答:
32*4+2=130条
每条指令的执行周期执行的微指令不同,总共32条指令,平均每个指令执行周期执行的微指令为4条,故32*4
取指周期属于公共部分,所以32*4+2
所以下地址字段的位数至少需要安排8位bit位(2^8=256>130条)
注:对于下一条微指令地址的形成方式,最常考的为断定法和计数器法
8.微程序控制单元的设计
设计的步骤如下:
1.分析每个阶段的微操作序列
2.写出对应机器指令的微操作命令及节拍安排
3确定微指令格式
4.编写微指令码点
可以发现1,2条与硬布线控制器类似
(1)分析每个阶段的微操作序列
微程序控制器的节拍安排与硬布线控制器的节拍安排极其类似,只有最后一步不同:
对于硬布线控制器:OP(IR)--->ID,是将指令的操作码传送到指令译码器ID,而指令译码器会选通与操作码对应的选通信号。
对于微程序控制器:OP(IR)--->微地址形成部件,是将指令的操作码传送给微地址形成部件,由微地址形成部件指明这条微指令在执行周期对应的微程序段的起始地址。
对于微程序控制器,相容的微操作可以安排在同一个微指令内,使其并行地完成
注:这里需要区分微指令编码方式中的字段直接编码方式,字段直接编码方式是将微指令的操作控制字段分为多个段,相容的微操作放在不同的段内,并行发出控制信号。这是在单条微指令内讨论的。
而这里的相容的微操作可以安排在同一个微指令内,是相对多条微指令而言的。
如下图所示,取指阶段先执行微指令a,再执行微指令b...即可。
那么如何读出 这3条微指令,以及如何转入下一个机器周期呢?
对于取指周期的第一条微指令的存放地址,由硬件自动给出。而微指令b的地址由微指令a的下地址表示。
如图所示,当前微指令发出相应的控制信号后,还需要将下地址存放到CMAR中
Ad(CMDR)--->CMAR,占用一个节拍(时钟周期)
所以每执行完一条微指令后,都需要用一个节拍执行Ad(CMDR)--->CMAR这一操作,指明下一条微指令的存放地址。
那么如何转入下一个机器周期?
取指周期的节拍安排如下:
假设取指周期过后就是执行周期,因为各个指令在执行周期的微指令不同,所以在取指阶段的微指令执行结束后,需要根据当前执行指令的操作码,确定执行周期的微指令起始地址。
OP(IR)--->微地址形成部件,将微指令的操作码传给微地址形成部件后,还需要消耗一个节拍,将微地址形成部件的地址信息传到CMAR,即微地址形成部件--->CMAR。
所以微程序控制器在取指周期的节拍安排如下:
如下安排也可以,只要保证同一节拍内的微操作可以并行运行即可:
微程序控制器完成取指周期需要5个节拍,而硬布线控制器只需要3个节拍。
显然,微程序控制器的速度比硬布线控制器更慢。
(2)写出对应机器指令的微操作命令及节拍安排
•写出每个周期所需要的微操作(参照硬布线)
•补充微程序控制器特有的微操作:
a.取指周期:
每条微指令结束之后都需要进行:
Ad(CMDR)--->CMAR,根据当前执行的微指令的下地址信息,确定下一条微指令的存放地址。
取指周期的最后一条微指令完成后,要根据指令操作码确定其执行周期的微程序首地址:
OP(IR)--->微地址形成部件--->CMAR
b.执行周期:
每条微指令结束之后,需要通过当前执行的微指令指明下一条微指令的地址。
Ad(CMDR)--->CMAR若执行周期结束,执行周期最后一条微指令的下地址就会指向下条指令取指周期的第一条微指令的存放地址。
(3)确定微指令的格式
微指令包含操作控制字段以及顺序控制字段。
根据微操作个数决定采用何种编码方式(直接编码,字段直接编码,字段间接编码),以确定微指令的操作控制字段的位数。
根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数。
最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长。
(4)编写微指令码点
根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。例如,对于直接编码方式:若想让此微指令的"(PC)--->MAR","1--->R"两个微操作有效,只需让两个微操作对应的控制信号置为1即可。
接下来将微指令序列存放入CM即可。
9.微程序设计的分类(了解)
(1)静态微程序设计
微程序无需改变,采用ROM
(2)动态微程序设计
通过改变微指令和微程序改变机器指令(即拓展新的机器指令或优化现有的机器指令),有利于仿真,采用EPROM(可擦除芯片)
(3)毫微程序设计
微程序设计 用 微程序解释机器指令
毫微程序设计 用 毫微程序解释微程序
毫微指令与微指令的关系好比微指令与机器指令的关系。
10.硬布线与微程序的比较
对于微程序控制器,若想添加新指令,则只需根据现有的微指令来描述想添加的新指令即可。而对于硬布线控制器而言,若想添加新指令,需要重新设计组合逻辑电路。
所以硬布线适合RISC(精简指令集系统),这个系统中所支持的机器指令条数较少,并且相对固定,所以采用硬布线的方式可以提高指令的执行速度。
而微程序适合于CISC(复杂指令集系统),例如X86架构,因为复杂指令集系统所支持的机器指令很多,并且机器指令时常需要扩充,所以采用微程序控制器可以使CPU的成本更低,但是每一条机器指令的执行速度可能更慢。