
微程序(microprogram)是英国剑桥大学教授MVWilkes在1951年首先提出的,它是实现程序的一种手段,具体就是将一条机器指令编写成一段微程序。每一个微程序包含若干条微指令,每一条微指令对应一条或多条微 *** 作。在有微程序的系统中,CPU内部有一个控制存储器,用于存放各种机器指令对应的微程序段。当CPU执行机器指令时,会在控制存储器里寻找与该机器指令对应的微程序,取出相应的微指令来控制执行各个微 *** 作,从而完成该程序语句的功能。微程序设计技术,指的是利用软件技术来实现硬件设计的一门技术。
微程序控制方法由于规整性好,灵活方便,通用性强,因此在包括计算机在内的各种复杂数字系统控制器的设计中得到了广泛应用,成为控制器的主流设计方法之一。
程序控制的基本思想,就是仿照通常的解题程序的方法,把所有的控制命令信号汇集在一起编码成所谓的微指令,存放在一个EPROM里。系统运行时,一条又一条地读出这些微指令,从而产生执行部件所需要的各种控制信号,以控制各逻辑部件执行所规定的 *** 作。
一个数字系统基本上可以划分成两大部分——控制部件和执行部件,如图626所示。 控制器就是控制部件。而ALU、寄存器组、存储器RAM等,相对控制器来讲,就是执行部件。那么两者之间是如何进行联系的呢
控制部件与执行部件的联系之一,是通过控制线。控制部件通过控制线向执行部件发出各种控制命令,我们把这种控制命令称为微命令,而执行部件接受微命令所执行的 *** 作叫作微 *** 作。
控制部件与执行部件之间的另一联系是反馈信息。例如由于运算处理中正在处理的数据因其结果特征(正、负、进位、溢出等)而影响下一个 *** 作的执行,因此就需要规定条件测试或状态测试。执行部件通过反馈线向控制部件反映当前 *** 作的结果情况,以便使控制部件根据执行部件的“状态”标志下达新的微命令。
在系统的一个基本周期(又称机器周期,一般由几个时钟周期组成)中,一组实现一定 *** 作功能的微命令的组合,构成一条微指令。
这里要强调两点:
第一,一条微指令的有效持续时间为一个系统基本周期,它表示从R0M中读出微指令与执行这条微指令的时间总和。当从ROM中读出下一条微指令后,当前的这条微指令即失效。
第二,一条微指令中包含若干个微命令,它们分头并行地控制执行部件进行相应的微 *** 作。
微指令除给出微命令信息外,还应给出测试判别信息。一旦出现此信息,执行这条微指令时要对系统的有关“状态标志”进行测试,从而实现控制算法流程图的条件分支。微指令中还包含一个下址字段,该字段将指明ROM中下一条微指令的地址。
图6.27 微指令的典型结构
图6.27示出了微指令的典型结构,长条框内的符号X表示一个二进制位(bit)。其中微命令字段给出执行部件的控制信号:X编码为1,表示有微命令,X编码为0表示无微命令。测试判别字段和下一地址字段一起实现顺序控制:当测试判别字段无效时(X编码为0),下址字段信息即是下条微指令的地址;当判别测试字段有效时(其中一个X编码为1),根据执行部件反馈线上的标志信息对下址字段信息进行修改,修改好的地址即为下条微指令的地址。
微程序是由若干条微指令组成的序列。在计算机中,一条机器指令的功能可由若干条微指令组成的序列来解释和执行,因此机器执行一条指令的过程,也就是执行一个相应的微程序的过程。就一般数字系统而言,按照我们在第6.5节中使用的概念,微程序实质上就是将控制算法流程图用EPROM等来实现。
微程序概念的引入使大型复杂数字系统控制器的设计发生了革命性的变化。因为微程序技术可代替硬件布线的控制技术,即由门电路和触发器等组成的硬件网络可被存有控制代码的EPROM存储器所取代[1]
。
在微指令的控制字段中,每一位代表一个微命令,在设计微指令时,是否发出某个微命令,只要将控制字段中相应位置成"1"或"0",这样就可打开或关闭某个控制门,这就是直接控制法
在63节中所讲的就是这种方法但在某些复杂的计算机中,微命令甚至可多达三四百个,这使微指令字长达到难以接受的地步,并要求机器有大容量控制存储器,为了改进设计出现了以下各种编译法
641 微指令的编译法(编码译码方法)(2)
2字段直接编译法
在计算机中的各个控制门,在任一微周期内,不可能同时被打开,而且大部分是关闭的(相应的控制位为"0")所谓微周期,指的是一条微指令所需的执行时间如果有若干个(一组)微命令,在每次选择使用它们的微周期内,只有一个微命令起作用,那么这若干个微命令是互斥的
例如,向主存储器发出的读命令和写命令是互斥的;又如在ALU部件中,送往ALU两个输入端的数据来源往往不是唯一的,而每个输入端在任一微周期中只能输入一个数据,因此控制该输人门的微命令是互斥的
选出互斥的微命令,并将这些微命令编成一组,成为微指令字的一个字段,用二进制编码来表示, 就是字段直接编译法
641 微指令的编译法(编码译码方法)(3)
例如,将7个互斥的微命令编成一组,用三位二进制码分别表示每个微命令,那么在微指令中,该字段就从7位减成3位,缩短了微指令长度而在微指令寄存器的输出端,为该字段增加一个译码器,该译码器的输出即为原来的微命令
641 微指令的编译法(编码译码方法)(4)
字段长度与所能表示的微命令数的关系如下:
字段长度 微命令数
2位 2~3
3位 4~7
4位 8~15
一般每个字段要留出一个代码,表示本段不发出任何微命令,因此当字段长度为3位时,最多只能表示7个互斥的微命令,通常代码000表示不发微命令
641 微指令的编译法(编码译码方法)(5)
3字段间接编译法
字段间接编译法是在字段直接编译法的基础上,进一步缩短微指令字长的一种编译法
如果在字段直接编译法中,还规定一个字段的某些微命令,要兼由另一字段中的某些微命令来解释,称为字段间接编译法
本方法进一步减少了指令长度,但很可能会削弱微指令的并行控制能力,因此通常只作为直接编译法的一种辅助手段
641 微指令的编译法(编码译码方法)(6)
字段A(3位)的微命令还受字段B控制,当字段B发出b1微命令时,字段A发出a1,1,a1,2,…,a1,7中的一个微命令;而当字段B发出b2微命令时,字段A发出a2,1,a2,2,…,a2,7中的一个微命令,仅当A为000时例外,此时什么控制命令都不产生
641 微指令的编译法(编码译码方法)(7)
4常数源字段E
在微指令中,一般设有一个常数源字段E就如指令中的直接 *** 作数一样E字段一般仅有几位,用来给某些部件发送常数,故有时称为发射字段
该常数有时作为 *** 作数送入ALU运算;有时作为计算器初值,用来控制微程序的循环次数等
642 微程序流的控制 (1)
当前正在执行的微指令,称为现行微指令,现行微指令所在的控制存储器单元的地址称现行微地址,现行微指令执行完毕后,下一条要执行的微指令称为后继微指令,后继微指令所在的控存单元地址称为后继微地址
所谓微程序流的控制是指当前微指令执行完毕后,怎样控制产生后继微指令的微地址
与程序设计相似,在微程序设计中除了顺序执行微程序外还存在转移功能和微循环程和微子程序等,这将影响下址的形成
下面介绍几种常见的产生后继微指令地址的方法
642 微程序流的控制 (2)
(1)以增量方式产生后继微地址
在顺序执行微指令时,后继微地址由现行微地址加上一个增量(通常为1)形成的;而在非顺序执行时则要产生一个转移微地址
机器加电后执行的第一条微指令地址(微程序入口)来自专门的硬件电路,控制实现取令 *** 作,然后由指令 *** 作码产生后继微地址接下去,若顺序执行微指令,则将现行微地址主微程序计数器( PC中)+1产生后继微地址;若遇到转移类微指令,则由 PC与形成转移微地址的逻辑电路组合成后继微地址
642 微程序流的控制 (3)
642 微程序流的控制 (4)
(2)增量与下址字段结合产生后继微地址
将微指令的下址字段分成两部分:转移控制字段BCF和转移地址字段BAF,当微程序实现转移时,将BAF送 PC,否则顺序执行下一条微指令( PC+1)
执行微程序条件转移时,决定转移与否的硬件条件有好几种例如,"运算结果为零","溢出","已完成指定的循环次数"等
我们假设有八种转移情况,定义了八个微命令(BCF取3位),在图中设置计数器CT用来控制循环次数如在执行乘(或除)法指令时,经常采用循环执行"加,移位"(或减,移位)的方法,指令开始执行时,在CT中置循环次数)每执行一次循环,计数器减1,当计数器为零时结束循环又考虑到执行微子程序时,要保留返回微地址,因此图中设置了一个返回寄存器RR
以上就是关于微程序运行的依据是什么全部的内容,包括:微程序运行的依据是什么、计算机组成与结构课程设计,帮忙写出微程序16进制代码和程序设计,谢谢各位了、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)