计算机组成原理第五章

您所在的位置:网站首页 微指令流程图怎么看 计算机组成原理第五章

计算机组成原理第五章

2024-07-11 19:50| 来源: 网络整理| 查看: 265

1.数据通路

数据通路就是数据在各个元件之间的传输。数据通路的分为三种,分别是单总线模式,多总线模式和专用数据通路。

1.1 三种数据通路

(1)其实上一部分讲的就是单总线模式,对于控制信号,数据信号和地址信号,分别有控制总线,数据总线和地址总线。有些时候,单总线就是一条总线,所有的数据都串行通过,但是这种设计只会存在于CPU内部,因为CPU内部元件不多不少,所以称为CPU内部单总线,对于整个计算机而言,必须拥有多个总线才能保证效率。也是因为CPU和计算机整体可以分开,所以总线还能分为系统总线和CPU内部总线。 (2)因为单总线模式一次只允许一个数据通过,但是如果我们要同时发出两个信号,比如我们在执行一次加法时,要把IR指令寄存器里面的立即数放到ACC累加寄存器里面,还要把MDR的被加数也放到一个暂存寄存器里面,但是同一时刻,数据总线只能传输一个数据,所以只能先后执行,但是如果我们有两个数据总线,那么就可以同时传输,但是这个时候每一个元件在每一根总线上都需要一个开关,设计起来就更复杂。 (3)专用数据通路没有什么好说的,就是每一个元件都有专门的数据线互相连接,之前已经描述过。 (4)不管数据通路是什么样子的,它的每一个元件和数据线之间都有一个in和out的半导体小开关(如果忘记了,可以回去前面看看),平时都是关闭状态,CU控制单元能给每一个开关发出电流,控制它们是否导通(换言之,CU和每一个元件的开关都有着专用数据通路)。下图是一个内部单总线的例子,它们每一个元件的in和out都和CU有着直接连线,但是图上没有画出: 在这里插入图片描述 这里的BUS就是总线的英文,因为它像公共汽车一样把数据运输到各个地方。这里面的Y和Z都是暂存寄存器,在单内部总线的模式下,它们始终和ALU有着专用数据通路(这是因为ALU不能存数据,同时它必须在两个口都被接通时才开始计算)。如果是双内部总线,就可以不要暂存寄存器Y,如果是多内部总线,甚至可以不要Z,这个了解即可。ALU旁边的“控制信号”,也是和CU之间的专用数据通路。CU则是由最上面的时钟来辅助控制,保证操作顺序执行。

1.2 CPU内部单总线怎么考(常考大题考点,需要反复理解)

现在直接给个例题,需要学会分析的思路: 在这里插入图片描述 现在给出了一个计算机的CPU内部结构,请分析指令ADD (R0),R1 的指令流程和控制信号。 这里先讲解一下,指令流程是根据时钟周期,数据发生的流动关系,控制信号则是CU发出的PCin有效,IRout有效等的信号。 解题流程如下: (1)先分析这个指令的指令周期里面有哪些周期: 我们可以看见这是一个汇编加法指令,所以必定有取指周期和执行周期。同时,我们看到目的操作数R0上面有一个括号,这个是要间接寻址的意思(如果忘记了,可以回去看看汇编语言的那部分),所以还有一个间址周期。至于有没有中断周期,题目没有说就默认没有。 把这个指令翻译一下,就是要把寄存器R0所指向的内存地址的数据和寄存器R1里面的数据相加,把最后的结果放回寄存器R0指向的内存中。可以写成((R0))+(R1)->(R0)这个伪代码的写法比较绕,因为前面的(R0)要再加一个括号是操作需要加上括号,结果不需要加,所以结果的括号就是内存的意思,不理解也没有关系,用中文可以描述其过程就行。 现在就可以把指令分为 取指周期,间址周期和执行周期。考试的时候让你分析流程,你先把这句话写上,后面错了也有分的。 (2)分析好周期以后,一个周期一个周期的写:

这里规范一下这种题目的写法,就列出表格就行: 1.取指周期:

时序微操作有效控制信号1(PC)->MARPCout,MARin2M(MAR)->MDRMARout,MDRinE,MemR(主存的读信号,这里就不需要写1->R了,写什么是看图来决定的)3(MDR)->IRMDRout,IRin4指令译码–(这里没有写指令译码标号什么的,所以可以不用写控制信号)5(PC)->PC+1–(除非题目说明,否则也可以不写)

无论是什么样的指令,这个取指令的过程都是通用的,可以背下来。有的地方会把PC自动加1的过程放到第二步,把指令从主存取出以后,这也是正确的,考试的时候如果没有明确说明,那么两种都可以写:

时序微操作有效控制信号1(PC)->MARPCout,MARin2M(MAR)->MDR (PC)->PC+1MARout,MDRinE,MemR(主存的读信号,这里就不需要写1->R了)3(MDR)->IRMDRout,IRin4指令译码–(这里没有写指令译码标号什么的,所以可以不用写控制信号)

这些伪代码的写法尽可能记住,记不住的话,全写中文也可以得分,最重要的是要表达清楚。

2.间址周期:

时序微操作有效控制信号1(R0)->MARR0out,MARin2M(MAR)->MDRMARout,MDRinE,MemR3(MDR)->YMDRout,Yin

说实话,只需要从上往下顺序是对的,分在哪个周期并不重要,比如把这里的第三步分到下面的执行周期也不是不行,不需要太纠结。

3.执行周期: 看着图顺着写就行

时序微操作有效控制信号1(Y)+(R1)->ZR1out,ALUin,CU向ALU发出ADD控制信号2(Z)->MDRZout,MDRin3(MDR)->M(MAR)MDRoutE,MARout,MemW

第一步里面ALU和Y直接连接,不需要写Yout,因为图上只写了一个控制信号,所以不写CU,直接写ADD控制信号也行。第三步因为MAR没有变过,所以可以直接用,如果变了,还需要先把R0的数据放到MAR。 这东西学会了就是送分题。

1.3 多路数据通路怎么考

也是用一个例题来说明,这个题在王道书上也有。题目里面已经说明省略了多路选择器(也就是开关),所以不用纠结。 在这里插入图片描述 在这里插入图片描述 (1)首先,a和c直接和主存相连接,那么说明它们一个是地址寄存器MAR一个是数据寄存器MDR,因为a既可以和内部交互也可以和外部交互,所以a就是MDR,那么c自然就是MAR。同时d可以自动加1,还能向MAR传输数据,那么d就是PC。剩下一个肯定就是指令寄存器IR。

(2)取指令时,先从(PC)->MAR,之后M(MAR)->MDR.紧接着(MDR)->IR,最后不要忘记(PC)+1->PC。这个已经写了很多次了,这里图中没有明确说明控制信号的符号,所以不需要写出。

(3)其实第二问是取指周期,这一问是执行周期。 先是取数据: 这里的目的是把源操作数和目的操作数分别放到MDR和ACC里面,但是因为题目强调的是ALU和主存的数据流通,ALU和ACC其实是一起的,而且ALU没有存数据的能力,只有ACC才有,所以这个题目的意思是把数据从主存存到ACC里面。这是参考答案的意思,如果不能分析到这个地步,我觉得把整个执行周期的数据流动(从Ad(IR)->MAR开始)都写一遍也不是不行。那么现在就只写一下ACC从主存取数据,这个时候我们通常假设数据的地址已经存在MAR里面。 首先要把数据取到MDR:M(MAR)->MDR 之后因为图中MDR和ACC不是直接相连接的,但是如果MDR把数据送到ALU,就等于执行一个操作数加0的操作,这个数据就会存到ACC(这里不理解的多读两遍):(MDR)->ALU ->ACC。还要注意的是,在左边的寄存器才需括号,代表取值,ALU不存数据,不是寄存器,所以不用括号。 存数据,当然就是把数据从ACC存到主存:首先需要MDR作为中间商 (ACC)->MDR,之后(MDR)->M(MAR) 这里还是假设地址已经存到了MAR。考试的时候不放心可以写Ad(IR)->MAR。假设都是直接地址。

最后三个问就是一个完整的加法执行周期,这题等于是逐步加难度。 (4) 这里正常写应该是从指令的地址码部分取出数据Ad(IR)->MAR,但是已经给了地址就是X,所以直接写 X->MAR即可 之后就和第三问一样,如果第三问全写的话甚至没有差别,取数据到MDRM(MAR)->MDR 最后 (MDR)->ALU->ACC

(5)加法操作,先取Y的值到MDR,和上面一致,所以快速写完:Y->MAR M(MAR)->MDR 紧接着,把两个值丢给ALU,丢的顺序倒是不影响,因为ACCin(图中没画)此时可以不接通:(ACC)->ALU (MDR)->ALU 计算出的值存到了ACC里面 :ALU->ACC。

(6)其实上面也说过了,这里快速过:Y->MAR (ACC)->MDR (MDR)-M(MAR)。

2.控制器的设计

控制器有两种实现,一种是纯硬件实现的硬布线控制器,另一种则是软件和硬件相结合形成的微程序控制器。

2.1 硬布线控制器 2.1.1 四个触发器

首先,我们需要保证指令能够按照指令周期顺序的执行,于是就需要用到四个对应的触发器。它们分别是:取指触发器FE,间址触发器IND,执行触发器EX和中断触发器INT。其实,听名字就可以知道它们对应的正好是指令周期里面的四个周期。如图所示,它们通常和时钟信号相连接,保证指令能根据时间顺序地执行。 在这里插入图片描述

2.1.2 微命令和微操作

微命令是由CU发出的,多个微命令可以形成一个微操作。比如PCout和MARin就是两个微命令,这两个微命令组成了(PC)->MAR这样的一个微操作。原本的计算机一个节拍只能发出一个微命令,但是现在的计算机已经可以实现一个节拍同时实现多个微命令,也就是可以支持多个微操作并行的执行(前面其实说过,前提是这些微操作之间不会冲突)。同一个微操作,在不同的周期内是可以被反复执行的。 为了简化,考试一般考定长机器周期的机器,所以这里也就以定长机器周期为例子(需要节拍数最多的那个周期的节拍就是每一个周期的节拍)。如果在某一个周期内,它所需的节拍要少于最大的定长节拍,那么一般放到末尾执行。如图,最后两个周期只需要两个节拍,那么就放到后面去执行(这只是一种规定,大家都是这么设计的,以后你要设计成全放前面也不是不行): 在这里插入图片描述

2.1.3 硬布线控制器的组成

计算机中一个硬布线控制器的必要组成,如图所示: 在这里插入图片描述

(1)指令寄存器把n位的操作码给操作码译码器,操作码译码器看一下是第几个指令,然后就把对应的CU的线给接通。对于n位的操作,一共有 2 n 2^n 2n个指令,但是一般全1默认是空指令,所以就只需要 2 n − 1 2^n-1 2n−1条线,每一条线都对应一个微操作,接通时对应的微指令也就被发出(比如信号是000001,那么接通CU的第2根线,代表是加法指令的操作,于是一系列的微指令发出)。 (2)这四个触发器前面讲过了,它保证CU的指令是被顺序发出的。 (3)因为指令执行的内部周期内,微命令的发出也是有先后顺序的(比如MARin导通,里面有地址以后才能执行MARout),所以节拍发生器来控制信号的发出顺序。可以这么理解,触发器控制当前执行什么微操作,节拍发生器控制当前应该发出该微操作的哪个微命令。节拍发生器其实就像是一个圆形的时钟,它转完一圈又一圈,所以是循环发出的。 (4)标志位之前说过了,如果发生除零错误,溢出错误,计算机是需要立即中断当前操作的。 (5)下面的 C 1 , C 2 , . . . C_1,C_2,... C1​,C2​,...就对应之前说的微命令,比如PCin,PCout等。

2.1.4 CU里面是什么

1.CU里面就是一堆的逻辑门电路。比如:取指令周期的第一步必然是从PC里面取出当前指令的地址,(PC)->MAR,假设 C 1 C_1 C1​是PCin,所以 T 0 T_0 T0​节拍和FE同时起作用的时候,接通 C 1 C_1 C1​。搞个与门就行了: C 1 = F E ⋅ T 0 C_1=FE\cdot T_0 C1​=FE⋅T0​ 在这里插入图片描述 这里需要注意的是,每一个逻辑表达式都有对应的硬件实现,所以写出逻辑表达就等于写出了其硬件实现。这里考研不要求你说出硬件到底怎么实现的,可以等考完研以后再去深入研究。 2. 说实话,取指令第一步是通用的,它的使用的时间也是很固定的,所以写出其逻辑表达式很容易,但是现实往往是残酷的,因为比如M(MAR)->MDR这样的指令在取指周期,间址周期甚至是执行周期都很常用,所以它的逻辑门电路设计就很复杂。它的逻辑表达式如下: 在这里插入图片描述 它的电路设计如下: 在这里插入图片描述 因为太难了,所以考试只会考PCin的实现,不会考这个的,放心吧,但是还是需要尽可能去理解这个数字电路是如何实现的,对以后很有帮助。让你写肯定是不容易写出来,但是看这个图和逻辑表达式,虽然它复杂,但是你仔细看看的话就会发现它不难,我们依次来分析: (1)取指周期: FE与T1的时候执行,这个很简单,因为是取指令的存指令操作。 (2)执行周期: E X ⋅ T 1 ( A D D + L A D ) EX\cdot T_1(ADD+LAD) EX⋅T1​(ADD+LAD)执行周期的第二步(第一步都是把地址放入MAR),如果是加法指令ADD或者是取数指令LAD,那么肯定执行这个操作。 (3)间址周期: I D N ⋅ T 1 ( A D D + S T A + L D A + J M P + B A N ) IDN\cdot T_1(ADD+STA+LDA+JMP+BAN) IDN⋅T1​(ADD+STA+LDA+JMP+BAN)因为里面有两个指令没有学过,所以这个最后讲,但是其实并不难,因为都是间址周期了,那么如果指令里面需要操作数,肯定是需要用到M(MAR)->MDR的。所以里面这5个操作必定都是需要操作数的操作。STA是存储累加寄存器的值到主存,所以这个过程需要先把真实的值从主存取到累加寄存器(有点绕,不理解也算了)。BAN则是条件转移指令,同样也涉及到要把真实值从主存取出以后再判断。JMP就不用说了,需要取出跳转到哪里。

到这里,有的人可能会疑惑这些蓝色的指令线是哪里来的,其实你往上看看可以发现它们就是指令译码器的译码结果线。如果能理解上面这个例子,肯定就可以理解CU是怎么工作的了。

2.1.5 硬布线控制器的内部设计

这个一般不考,但是假如考试考到了,也不要慌,题目会把对应的有哪些微命令的功能一一告诉你,然后再让你设计,设计的流程如下: (1)分析有哪些指令,然后再根据取指,间址,执行和中断四个周期去分析有哪些微操作。 其实取指周期都是一样的操作: 在这里插入图片描述 间址周期其实也是: 在这里插入图片描述 执行周期各不相同,这里给出王道的例子: 在这里插入图片描述 上面给出了四种指令,第一个是CLA,也就是把ACC的值清零,方便继续新的计算。取数和跳转不用说。BAN前面说过是条件跳转指令,这里需要注意的是绿色的 A 0 A_0 A0​其实就是PSW传过来的标志位,从这里就可以理解为什么标志位也能控制CU。 中断周期就不分析了,前面已经说过,而且通常不会考你中断周期有什么微操作,更喜欢考操作系统里面中断周期的条件等。

(2)确定是定长机器周期还是不定长的。不定长的话,每一个周期需要多少节拍(这个只能随机应变),定长的话节拍是多少(看最长)。一般就会考同步的控制方式(也就是定长机器周期),不定长叫异步控制。

(3)根据节拍安排微操作。 安排微命令需要有三大原则: 1.要保证微操作执行的顺序。2.要尽可能把被控制对象不同的微操作安排到同一个节拍内部 (比如(MDR)->IR和1->R其实是可以同时完成的)。3.如果几个有先后顺序的微操作用的时间短,那么尽可能在一个节拍内完成,不要把它们分开(也就是说一个节拍内可以执行多个短的微操作)。 执行快不快,就看是不是要访存,只要不访存,就很快。这里再提一句,一个时钟周期往往正好可以完成一次访存,所以访存操作只能遵循原则2,和其他不相干的操作并行执行,不能和其他操作在一个时钟周期内顺序执行。 以上面的取指周期为例子: 在这里插入图片描述 首先要按照原则1去分析先后顺序:(1)(2)谁先都不影响,(3)必须在(1)(2)执行之后,(4)必须在(3)之后,(5)必须在(4)之后,(6)只需要在(1)之后就OK。 之后,按照原则2去分析哪些可以一起执行:(1)(2)可以一起执行,(3)和(6)可以一起执行,(4)和(5)要先后执行,但是,实际上它们都不是访存操作,所以的执行速度很快,所以根据原则3,可以让它们在一个节拍内先后执行。

节拍微操作 T 0 T_0 T0​(1)(2) 并行 T 1 T_1 T1​(3)(6)并行 T 2 T_2 T2​先(4)再(5)

现在再来分析间址周期: 在这里插入图片描述 首先,根据原则1:(1)和(2)不涉及顺序,(3)必须在(1)(2)之后,(4)必须在(3)之后。 其次,根据原则2和3:(1)和(2)可以一起执行,(3)要访存,(4)要在(3)后所以不能一起执行。 所以:

节拍微操作 T 0 T_0 T0​(1)(2) 并行 T 1 T_1 T1​(3) T 2 T_2 T2​(4)

执行周期各不相同,王道给出了这几种: 在这里插入图片描述 按照上面说的,执行所需节拍少就放后面即可。也不用纠结指令的含义,考试会和你说明白的,就算你是去工作的,你也可以查手册,所以不必慌张。遵循三个原则即可。现在再给出王道上面的几个复杂点的指令: 在这里插入图片描述 需要注意的只有一点,凡是访存指令和转移指令都有可能进入间址周期,非访存指令不会进入间址周期。

(4)耐心地设计逻辑电路(不在考纲内部)。虽然不考,但是都到这份上了,不学一下可惜了: 在这里插入图片描述 按照这三个步骤一个个来: 1.列出操作时间表:操作时间表其实就是我们第三步写的表的扩展,比如: 取指周期,用王道这个图: 在这里插入图片描述 它涵盖了全部情况,其中状态条件决定了了下一步进入什么周期,旁边的指令下面是1就代表会该指令执行对应的微操作。对应转移指令和访存指令,既有可能进入间址周期,也有可能直接进入执行周期,所以都有1,非访存指令不会进入间址周期,所以不填。

间址周期: 在这里插入图片描述 因为间接寻址可能是多级的,所以有一个 I N D ‾ \overline{IND} IND作为标志位,只要 I N D ‾ \overline{IND} IND是0的时候,才进入执行周期,否则会循环间址周期(了解即可)。 执行周期则根据上面的把所有可能的微操作都写进去了: 这里就列举7个,不然太多了: 在这里插入图片描述

2.只要你第一步已经完成了,并且没有错,第二步说实话,不难。你只需要把一个微操作的周期和节拍与起来,再与上对应的操作的或就行(这句话看着有些绕口,多理解一下,其实不难的)。例如前面的这个取数据的操作: 在这里插入图片描述 总之就是根据表格,一个周期一个周期的看有没有这个操作,有就写就完事了。

3.表达式都有了,电路设计就是手到擒来,重点就是耐心和细心。把图拿过来再体会一下: 在这里插入图片描述 把所有电路都集成到CU内部,就完成一个CU了,哈哈哈哈!!!这里你真设计不出来也没有关系,真不考,这里只是气氛到了,不学一下不好,理解不了就跳过吧。

2.1.6 总结一下怎么设计一个CU的电路

前三步是一个指令一个指令的分析,这样出错的概率小,因为取指周期和间址周期差不多,所以只需分析一次即可: (1)分析有哪些周期,每一个周期内有哪些微操作; (2)确定CPU的控制方式,是定长还是不定长,是定长的话节拍是多少; (3)写出各个周期内的时序表,按照三原则规定好各个节拍执行哪些微操作; 分析完全部指令之后,可以进行第四步(不考): (4)根据上面设计电路: [1] 把根据上面写的各个时序表,把它们合起来,在指令如果执行对应的微操作就写个1,这样形成一个大的操作时间表。 [2]根据上面的时间表,写出最简表达式(最简表达式是数字电路学的,就是你写出的表达式虽然能实现功能,但是有时候不是最省钱的,这里你会用我上面的方法把表达式写出来就行,甚至不会都可以,因为也不考)。 [3]画出逻辑电路图。

2.1.7 硬布线控制器的优缺点

优点:因为全硬件实现,所以速度很快很快。 缺点: (1)指令越多,设计和实现起来越复杂。所以常用于RISC(也就是前面说的精简指令集系统,它的指令不多)。 (2)难以扩展新的指令,因为要加新的硬件。

2.2 微程序控制器(常考考点) 2.2.1 什么是微程序控制器

在硬布线控制器里面,每一个微操作的执行都是由硬件来完全完成的,于是我们想,能不能直接由硬件控制这些微操作的完成,比如T0节拍里面需要执行微操作3和微操作4,那么我们就把它编写成一个代码指令,执行这个代码就会执行这个微操作3和4,这个代码指令我们将其称之为微指令。一个指令周期里面的所有微指令就可以构成一个微程序(相当于执行了一次程序)。 在这里插入图片描述 要注意的是,微指令不是汇编语言,而是更加底层的代码,它甚至可以控制计算机完成最基本的操作。从图中可以看出,一个机器指令(也就是汇编代码)对应的是一个微程序,一个微程序由一堆微指令组成,一个微指令对应一个时钟周期,同时指挥了多个微操作,也可以说一个微指令包括多个微命令(必须理解其中的逻辑,汇编指令=机器指令=微程序>微指令>微操作=微命令)。微命令就是PCin,MARout这些,防止大家忘了,提醒一下,还要注意的一点是,单独的PCin这样没有组成一个微操作的只叫做信号,只有PCin,MARout这样和一个微操作(PC)->MAR对应的才叫微命令。

2.2.2 微程序的基本知识

(1)微指令由两部分组成: 在这里插入图片描述 操作控制部分决定要执行哪些微操作,后面的顺序控制部分是下一个微指令存放的地址。

(2)微程序不是由程序员来写的,而是电脑的制造商写好了存在控制器的特殊存储元件中的(所以每一个指令其实都有自己的地址),不可更改,这个特殊的存储元件被称为控制存储器,简称为控存(CM),它也是ROM。

2.2.3 微程序控制器的基本结构

微程序控制器需要的基本元件有(其实整体上看可以类比成CPU和主存): (1)前面说的控存CM。 (2)微地址寄存器CMAR,它是用来帮助CU存放将要执行的微指令的地址的。 (3)地址译码器:它负责把CMAR里面的地址码转换成电信号来接通CM里面对应的存储单元。 (4)微指令寄存器CMDR:负责存放从CM里面取出来,准备执行的微指令。 (5)微地址形成部件:这个部件很特殊,它相当于一个更小型的CU,因为它的功能就是根据机器指令的操作码OP部分,来产生对应的微指令的地址,包括后续的地址,这个地址也叫微地址。 (6)顺序逻辑单元:它受时钟信号和标志信号控制,一方面保证微指令的执行顺序,另一方面也可以保证随时可以中断或者跳转等。 在这里插入图片描述 一个完整的微程序执行如下:首先微地址形成器根据当前机器指令的操作码部分,分析需要哪些微指令,然后生成它们的地址送给顺序逻辑单元,顺序逻辑单元根据需要的顺序,把这些微地址依次送给微地址寄存器CMAR,微地址寄存器CMAR把地址转给地址译码器,地址译码器把控存CU的对应部分接通,CU就会自动的把数据送到微指令寄存器CMDR。CMDR一方面把操作控制的部分送给CPU去执行(其实它直接就把信号发出去把对应的线接通了),一方面还把顺序控制的部分送给顺序逻辑单元进行参考(也就是顺序逻辑单元是根据时序+标志+顺序控制部分三个部分来决定下一条执行什么微指令的,它的标志位甚至包括了是否需要间址周期,比如:取指周期的最后一条微指令的下一条指令是进入间址周期,但是标志位从机器指令里面获得信号不需要执行间址周期,那么顺序逻辑单元会忽视这个微指令的顺序控制部分,直接进入执行周期的第一条微指令)。这样从CU里面取出一条微指令并且执行完成的一个周期称为微周期(类比CPU的指令执行周期)。

2.2.4 微程序的设计

微程序其实设计起来并不困难,因为不管是什么样子的指令,它们的取指周期,间址周期和中断周期所有的微操作基本上是一模一样的,所以这三个周期被单独设计成独立的微程序存放在CU的开头部分,后面根据不同的指令单独设计对应的执行周期即可。 在这里插入图片描述 从图上可以看到,中断结束以后会转取指周期,取指周期结束以后默认是转间址周期(转不转还是由顺序逻辑单元说了算),间址周期结束以后就转执行周期。 这里有一个重点选择题考点:如果一台计算机有n条指令,那么它的微程序段最少有n+1个!!!! 没错,不需要考虑中断周期和间址周期,这是因为有些电脑的微程序控制器的中断周期和间址周期还是由硬件来完成的(因为这两种周期不一定在一个指令中出现,让顺序逻辑单元去判断其实会拖累电脑速度),所以问你最少,你就默认这两周期不在里面。但是现在的电脑速度很快,所以基本都有这两个周期,但是问你最少,你还是写n+1。 注意,上面还提到的是微程序段!!! 这是因为不少的教材认为一个完整的指令才对应一个微程序,所以n条指令就有n个微程序,但是有的教材也把微程序段看作微程序,这个不用太纠结,考试不会考这种字眼,毕竟是联考。

2.3 微指令的设计

这也是一个重点,所以单独开一小节来说。前面只是说了其组成,没有详细的说它是怎么具体的去根据不同的指令进行设计的。在讲解设计前,先补充一点微命令的的小知识:微命令之间能够并行完成的,我们称之为相容性微命令;不能并行完成的,称之为互斥性微命令。

2.3.1 微指令的分类

第一和第二种常考。 (1)水平型微指令:一条微指令能定义多个可并行的微命令。 它的格式就是我们之前说的那种: 在这里插入图片描述 这种微指令格式的长度会比较长,因为要执行多个微命令。那么一个微程序会比较矮,但是比较长,所以是水平型。它的优点是,一个微程序内的微指令少,访问控存次数就少,那么执行的速度会更快。缺点就是每一个指令都代表着多个操作,所以写程序不好写(因为有时候或许只需要其中一个操作),对微指令设计人员的要求就很高。

(2)垂直型微指令:一条微指令只能定义一个微命令。它的格式和之前不同,微操作码字段指明要干嘛: 在这里插入图片描述 它显然比上面短,但是一个微程序就需要很多个微指令,所以显得“瘦高”,所以是垂直型微指令。它就相当于RISC,上面相当于CISC。由垂直型微指令组成的微程序,指令顺序就全交给微地址形成部件和顺序逻辑单元了,因为它每一步就完成一个操作。它的优点当然就是灵活,写微程序容易。但是缺点也明显,要多次访存让其执行速度不快。

(3)混合型微指令:听名字就知道,它是两种混合。怎么混合呢,很简单,在保持垂直微指令不变的情况下,加入一些常用的水平微指令。这样就兼具了两者的优点,缺点就是控存要保存的东西就会变多一点。学会前两种,把前两种混合起来就是第三种,所以第三种反而不常考,但是现实生活中却常用。

2.3.2 水平微指令的编码(大题常考考点)

水平微指令是怎么编码的,也被称为微指令的控制方式,它着重于对控制码部分(也叫操作控制)的编码。要求是执行速度要快,码的长度要尽可能小。 之所以不说垂直微指令,是因为它不涉及并行执行,每一个指令直接代表一个操作,这个没啥好设计的,直接用机器码表示就行。

2.3.2.1 水平型微指令的编码

水平型微指令有如下几种编码方式(也是前两种常考): (1)直接编码:也叫直接控制,它的思想是每一个位都代表一个微操作命令。 有多少微命令,一个微指令的操作控制部分就有几位,对应的位为1就代表这个微命令的操作信号被发出。 在这里插入图片描述 优点就是,设计和实现起来都很简单,但是比较占位置(即使这样也比硬布线要省)。同时它的指令字长很长,需要的控存容量也要更大,ROM很贵,所以不省钱,还占位置。 (2)字段直接编码:把一个指令的操作控制部分,分成一段一段的,每一段经过翻译以后再发出控制信号。 它的原理是这样的: 1.它先对所有的微命令进行提前的分类,互斥性的微命令在同一段内,相容性的微命令在不同段内。 2.每一段的信息位都不能太长(地址位倒是无所谓),否则翻译起来会很费时间。 3.每一段都要留一个状态,表示不进行任何操作(因为很多时候只需要执行一到两个微操作)。通常用全0表示无操作。 在这里插入图片描述 字段编码需要的位数要比直接编码少很多,比如有8个微指令,其中4个和另外4个互斥,那么用直接编码需要8位,而字段编码每一段只需要2位,一共4位就可以搞定。这是因为,直接编码把互斥的微命令一起执行的情况也囊括进去了,所以就比较冗余。要注意的一点是,每一段的位数不一定相同,比如有7条相兼容的微命令和3条微命令互斥,那么分成两段,第一段需要3位,第二段需要2位就行。(计算方法就是求以2为底的log向上取整就行,这个不难)。还要记得原则3,要额外留一位,比如一组相容的微命令有4个,但是要加一个空位,于是就是5,就还是需要3位的段。

做个题,加深一下: 在这里插入图片描述 操作控制字段是所有的字段相加而成,于是为 3+2+4+3+3=15。(33个微命令,直接编码要33位,可见字段编码的好)。 缺点就是要再译码,所以就比直接编码慢。

(3)字段间接编码(不考): 也叫做隐式编码。它也是字段编码,但是比直接编码要复杂,译码器只读其中一个段是不能获得执行信号的,需要两个字段的信号组合起来分析(看着比较绕,举个例子,第一个字段发出了一个微命令,第二个字段也发出了一个微命令,编译器会分析能不能一起执行,能就一起执行,是互斥的就先执行第一个,再执行第二个)。 在这里插入图片描述 当然,实际上的字段间接编码并没有我举的例子这么简单,它甚至使用了数据结构里面的哈希编码,索引编码和字典编码等高级的编码形式,极大的缩短了指令的长度,节省控存空间。缺点就是译码会更加复杂,而且慢。因为和数据结构有重合了,所以和中断一样,不会在这里考这个。

2.3.3怎么判断下一条微指令

如何指出下一条微指令,前面只是简单的介绍了一下,现在详细说说。如何指出下一条指令的地址有六种方式: (1)微指令的下地址指出: 像水平微指令和一部分垂直微指令有直接指出下一个字段的地址,所以就直接看这个地址。这种方式被称为断定方式。

(2)(微地址形成部件)根据机器指令的操作码部分指出: 其实就是上面举的例子,当一条新的机器指令过来的时候,微地址形成部件会分析这个指令,然后给出第一条指令的微地址。

(3)增量计数法: 和之前PC+1的例子是一样的,每一次执行之后CMAR都自动的加1(记作:(CMAR)+1->CMAR),这样就可以实现连续执行。像取指周期所有的操作都是一样且连在一起的,就采用这种方法,快速地连续执行(顺序逻辑单元都不需要过多分析,直接跑起来就行)。

(4)分支转移: 它的原理就和JMP指令类似,指令的操作控制部分会表明它是转移指令,然后给出转移的条件和转移的位置。

**(5)测试网络:**这个测试网络就是指标志位等影响顺序逻辑单元的信息,就是由顺序逻辑单元控制的,比如上面举的例子,当下地址是间址周期时,逻辑单元会分析到底是不是。 在这里插入图片描述 **(6)由硬件直接产生微程序的入口地址:**像启动计算机的第一条微指令是由硬件来产生的,并且中断的发生的首地址也是由硬件参与的。这是为了保证不会出错,所以写死在硬件里面。

(1)和(3)是常考考点,其他的记不住没有关系,这两必须记住。来个例题: 在这里插入图片描述 看到断定法,我们就不用考虑其他的下地址方法了,这里的下地址字段就应该能包括全部的微指令。所以题目其实是问有多少条微指令。因为前面说过间址周期和中断周期不算做微程序里面,考试也常不算作,所以没有说就默认没有就行。这个题目需要加一句,不同的命令的指令周期的每一条微指令均不相同。但是这个题根据微程序的定义不同,做法还不一样: (1)把整个指令周期看作是一个微程序: 那么执行周期都是一样的,这里已经说明占了两条,那么剩下两条才是执行周期的指令,32x2+2=66。那么 2 6 = 64 2^6=64 26=64不够,需要7位才够。 (2)把指令周期内的每一个周期都看作一个微程序: 那么取指周期占了2条,它们是公共的微程序。之后还有32x4=128个微指令,一共就是130条微指令。 2 7 = 128 2^7=128 27=128不够,需要8位才够。 这是王道的例题,所以说的摸棱两可,考试不会的,放心吧。

2.3.4 怎么设计一个完整的微程序控制器的全部程序

和前面的硬布线控制器的设计方法其实很类似: 在这里插入图片描述 (1)第一步显然就是分析需要哪些微操作。几乎和上面的硬布线控制器的设计一毛一样,就不说了。如图是两种控制器取指周期的微操作安排,这里我们可以看到,其实微地址形成部件就是指令译码器,两者功能其实没有太大区别(仔细想想的话): 在这里插入图片描述

(2)第二步也是安排节拍,原则和硬布线的一模一样,这里就不展开说了。需要补充的是,它和硬布线相比,每一次确定下一条微指令的地址都需要额外的占用一个节拍。如图中例子所示: 在这里插入图片描述 (3)这个其实就是上面的内容,不然需要从总体来看。根据微操作的数目是多还是少确定是用水平指令格式还是垂直还是混合格式。然后控制码字段是用直接编码,还是字段编码还是间接字段编码,需要多少位。以及根据一共多少个微指令来确定地址码的位数(上面的例题)。

(4) 码点其实不是什么复杂的东西,就是怎么编码去表示微指令,比如用001表示微操作(PC)->MAR。当然,这个是根据前面三个分析的内容来综合判断的。说简单点,就是把每一条微指令给具体地编写出来,然后按照指令写成一个个的微程序。

(5)最后把这些微程序放入控存就OK了。

2.4 毫微程序(不考,简单了解下)

一个微操作可以分成许多的控制信号,比如PCin,MARout等,这些也需要单独的硬件逻辑实现。于是同样的,就有了毫微指令,来控制这些控制信号。一堆毫微指令就组成了一个毫微程序。每一个毫微程序就是一个微指令。也就是:机器指令=微程序>微指令=毫微程序>=微操作(垂直微指令代表一个微操作)>=毫微指令>=操作信号。有兴趣可以自行了解一下。

2.5 总结:两种控制器的比较(选择题常考)

在这里插入图片描述 这里对微程序控制器的易扩充进行说明:现在的CPU,特别是Inter的,它们的控存都是EPROM,也就是说可以随时对控存里面的指令进行优化和修改,相比硬布线控制器将会更加灵活。

本章还剩最后一节,等下再开一页进行讲解。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3