计算机组成原理第五章 |
您所在的位置:网站首页 › 微指令流程图怎么看 › 计算机组成原理第五章 |
1.数据通路
数据通路就是数据在各个元件之间的传输。数据通路的分为三种,分别是单总线模式,多总线模式和专用数据通路。 1.1 三种数据通路(1)其实上一部分讲的就是单总线模式,对于控制信号,数据信号和地址信号,分别有控制总线,数据总线和地址总线。有些时候,单总线就是一条总线,所有的数据都串行通过,但是这种设计只会存在于CPU内部,因为CPU内部元件不多不少,所以称为CPU内部单总线,对于整个计算机而言,必须拥有多个总线才能保证效率。也是因为CPU和计算机整体可以分开,所以总线还能分为系统总线和CPU内部总线。 (2)因为单总线模式一次只允许一个数据通过,但是如果我们要同时发出两个信号,比如我们在执行一次加法时,要把IR指令寄存器里面的立即数放到ACC累加寄存器里面,还要把MDR的被加数也放到一个暂存寄存器里面,但是同一时刻,数据总线只能传输一个数据,所以只能先后执行,但是如果我们有两个数据总线,那么就可以同时传输,但是这个时候每一个元件在每一根总线上都需要一个开关,设计起来就更复杂。 (3)专用数据通路没有什么好说的,就是每一个元件都有专门的数据线互相连接,之前已经描述过。 (4)不管数据通路是什么样子的,它的每一个元件和数据线之间都有一个in和out的半导体小开关(如果忘记了,可以回去前面看看),平时都是关闭状态,CU控制单元能给每一个开关发出电流,控制它们是否导通(换言之,CU和每一个元件的开关都有着专用数据通路)。下图是一个内部单总线的例子,它们每一个元件的in和out都和CU有着直接连线,但是图上没有画出: 现在直接给个例题,需要学会分析的思路: 这里规范一下这种题目的写法,就列出表格就行: 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 多路数据通路怎么考也是用一个例题来说明,这个题在王道书上也有。题目里面已经说明省略了多路选择器(也就是开关),所以不用纠结。 (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。其实,听名字就可以知道它们对应的正好是指令周期里面的四个周期。如图所示,它们通常和时钟信号相连接,保证指令能根据时间顺序地执行。 微命令是由CU发出的,多个微命令可以形成一个微操作。比如PCout和MARin就是两个微命令,这两个微命令组成了(PC)->MAR这样的一个微操作。原本的计算机一个节拍只能发出一个微命令,但是现在的计算机已经可以实现一个节拍同时实现多个微命令,也就是可以支持多个微操作并行的执行(前面其实说过,前提是这些微操作之间不会冲突)。同一个微操作,在不同的周期内是可以被反复执行的。 为了简化,考试一般考定长机器周期的机器,所以这里也就以定长机器周期为例子(需要节拍数最多的那个周期的节拍就是每一个周期的节拍)。如果在某一个周期内,它所需的节拍要少于最大的定长节拍,那么一般放到末尾执行。如图,最后两个周期只需要两个节拍,那么就放到后面去执行(这只是一种规定,大家都是这么设计的,以后你要设计成全放前面也不是不行): 计算机中一个硬布线控制器的必要组成,如图所示: (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 到这里,有的人可能会疑惑这些蓝色的指令线是哪里来的,其实你往上看看可以发现它们就是指令译码器的译码结果线。如果能理解上面这个例子,肯定就可以理解CU是怎么工作的了。 2.1.5 硬布线控制器的内部设计这个一般不考,但是假如考试考到了,也不要慌,题目会把对应的有哪些微命令的功能一一告诉你,然后再让你设计,设计的流程如下: (1)分析有哪些指令,然后再根据取指,间址,执行和中断四个周期去分析有哪些微操作。 其实取指周期都是一样的操作: (2)确定是定长机器周期还是不定长的。不定长的话,每一个周期需要多少节拍(这个只能随机应变),定长的话节拍是多少(看最长)。一般就会考同步的控制方式(也就是定长机器周期),不定长叫异步控制。 (3)根据节拍安排微操作。 安排微命令需要有三大原则: 1.要保证微操作执行的顺序。2.要尽可能把被控制对象不同的微操作安排到同一个节拍内部 (比如(MDR)->IR和1->R其实是可以同时完成的)。3.如果几个有先后顺序的微操作用的时间短,那么尽可能在一个节拍内完成,不要把它们分开(也就是说一个节拍内可以执行多个短的微操作)。 执行快不快,就看是不是要访存,只要不访存,就很快。这里再提一句,一个时钟周期往往正好可以完成一次访存,所以访存操作只能遵循原则2,和其他不相干的操作并行执行,不能和其他操作在一个时钟周期内顺序执行。 以上面的取指周期为例子: 现在再来分析间址周期: 执行周期各不相同,王道给出了这几种: (4)耐心地设计逻辑电路(不在考纲内部)。虽然不考,但是都到这份上了,不学一下可惜了: 间址周期: 2.只要你第一步已经完成了,并且没有错,第二步说实话,不难。你只需要把一个微操作的周期和节拍与起来,再与上对应的操作的或就行(这句话看着有些绕口,多理解一下,其实不难的)。例如前面的这个取数据的操作: 3.表达式都有了,电路设计就是手到擒来,重点就是耐心和细心。把图拿过来再体会一下: 前三步是一个指令一个指令的分析,这样出错的概率小,因为取指周期和间址周期差不多,所以只需分析一次即可: (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,这个代码指令我们将其称之为微指令。一个指令周期里面的所有微指令就可以构成一个微程序(相当于执行了一次程序)。 (1)微指令由两部分组成: (2)微程序不是由程序员来写的,而是电脑的制造商写好了存在控制器的特殊存储元件中的(所以每一个指令其实都有自己的地址),不可更改,这个特殊的存储元件被称为控制存储器,简称为控存(CM),它也是ROM。 2.2.3 微程序控制器的基本结构微程序控制器需要的基本元件有(其实整体上看可以类比成CPU和主存): (1)前面说的控存CM。 (2)微地址寄存器CMAR,它是用来帮助CU存放将要执行的微指令的地址的。 (3)地址译码器:它负责把CMAR里面的地址码转换成电信号来接通CM里面对应的存储单元。 (4)微指令寄存器CMDR:负责存放从CM里面取出来,准备执行的微指令。 (5)微地址形成部件:这个部件很特殊,它相当于一个更小型的CU,因为它的功能就是根据机器指令的操作码OP部分,来产生对应的微指令的地址,包括后续的地址,这个地址也叫微地址。 (6)顺序逻辑单元:它受时钟信号和标志信号控制,一方面保证微指令的执行顺序,另一方面也可以保证随时可以中断或者跳转等。 微程序其实设计起来并不困难,因为不管是什么样子的指令,它们的取指周期,间址周期和中断周期所有的微操作基本上是一模一样的,所以这三个周期被单独设计成独立的微程序存放在CU的开头部分,后面根据不同的指令单独设计对应的执行周期即可。 这也是一个重点,所以单独开一小节来说。前面只是说了其组成,没有详细的说它是怎么具体的去根据不同的指令进行设计的。在讲解设计前,先补充一点微命令的的小知识:微命令之间能够并行完成的,我们称之为相容性微命令;不能并行完成的,称之为互斥性微命令。 2.3.1 微指令的分类第一和第二种常考。 (1)水平型微指令:一条微指令能定义多个可并行的微命令。 它的格式就是我们之前说的那种: (2)垂直型微指令:一条微指令只能定义一个微命令。它的格式和之前不同,微操作码字段指明要干嘛: (3)混合型微指令:听名字就知道,它是两种混合。怎么混合呢,很简单,在保持垂直微指令不变的情况下,加入一些常用的水平微指令。这样就兼具了两者的优点,缺点就是控存要保存的东西就会变多一点。学会前两种,把前两种混合起来就是第三种,所以第三种反而不常考,但是现实生活中却常用。 2.3.2 水平微指令的编码(大题常考考点)水平微指令是怎么编码的,也被称为微指令的控制方式,它着重于对控制码部分(也叫操作控制)的编码。要求是执行速度要快,码的长度要尽可能小。 之所以不说垂直微指令,是因为它不涉及并行执行,每一个指令直接代表一个操作,这个没啥好设计的,直接用机器码表示就行。 2.3.2.1 水平型微指令的编码水平型微指令有如下几种编码方式(也是前两种常考): (1)直接编码:也叫直接控制,它的思想是每一个位都代表一个微操作命令。 有多少微命令,一个微指令的操作控制部分就有几位,对应的位为1就代表这个微命令的操作信号被发出。 做个题,加深一下: (3)字段间接编码(不考): 也叫做隐式编码。它也是字段编码,但是比直接编码要复杂,译码器只读其中一个段是不能获得执行信号的,需要两个字段的信号组合起来分析(看着比较绕,举个例子,第一个字段发出了一个微命令,第二个字段也发出了一个微命令,编译器会分析能不能一起执行,能就一起执行,是互斥的就先执行第一个,再执行第二个)。 如何指出下一条微指令,前面只是简单的介绍了一下,现在详细说说。如何指出下一条指令的地址有六种方式: (1)微指令的下地址指出: 像水平微指令和一部分垂直微指令有直接指出下一个字段的地址,所以就直接看这个地址。这种方式被称为断定方式。 (2)(微地址形成部件)根据机器指令的操作码部分指出: 其实就是上面举的例子,当一条新的机器指令过来的时候,微地址形成部件会分析这个指令,然后给出第一条指令的微地址。 (3)增量计数法: 和之前PC+1的例子是一样的,每一次执行之后CMAR都自动的加1(记作:(CMAR)+1->CMAR),这样就可以实现连续执行。像取指周期所有的操作都是一样且连在一起的,就采用这种方法,快速地连续执行(顺序逻辑单元都不需要过多分析,直接跑起来就行)。 (4)分支转移: 它的原理就和JMP指令类似,指令的操作控制部分会表明它是转移指令,然后给出转移的条件和转移的位置。 **(5)测试网络:**这个测试网络就是指标志位等影响顺序逻辑单元的信息,就是由顺序逻辑单元控制的,比如上面举的例子,当下地址是间址周期时,逻辑单元会分析到底是不是。 (1)和(3)是常考考点,其他的记不住没有关系,这两必须记住。来个例题: 和前面的硬布线控制器的设计方法其实很类似: (2)第二步也是安排节拍,原则和硬布线的一模一样,这里就不展开说了。需要补充的是,它和硬布线相比,每一次确定下一条微指令的地址都需要额外的占用一个节拍。如图中例子所示: (4) 码点其实不是什么复杂的东西,就是怎么编码去表示微指令,比如用001表示微操作(PC)->MAR。当然,这个是根据前面三个分析的内容来综合判断的。说简单点,就是把每一条微指令给具体地编写出来,然后按照指令写成一个个的微程序。 (5)最后把这些微程序放入控存就OK了。 2.4 毫微程序(不考,简单了解下)一个微操作可以分成许多的控制信号,比如PCin,MARout等,这些也需要单独的硬件逻辑实现。于是同样的,就有了毫微指令,来控制这些控制信号。一堆毫微指令就组成了一个毫微程序。每一个毫微程序就是一个微指令。也就是:机器指令=微程序>微指令=毫微程序>=微操作(垂直微指令代表一个微操作)>=毫微指令>=操作信号。有兴趣可以自行了解一下。 2.5 总结:两种控制器的比较(选择题常考)
本章还剩最后一节,等下再开一页进行讲解。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |