组成原理---控制器

控制器的组成及指令的执行

根据指令协调计算机各部件进行有条不紊的工作

基本的计算机组成和功能

  • 计算机系统的基本组成
    在这里插入图片描述
    中央处理器CPU,存储器,IO系统他们之间通过总线连接。
    从物理上来说,总线就是一组导线,其作用是把一些信息从一个部件传到另一个部件,源部件先将数据输出到总线上,然后目的部件再从总线上接收这些数据。
  • 地址总线来自于CPU或总线主设备。
  • 数据总线的作用是在CPU,存储器和IO设备之间传送数据。
  • 控制总线包含了许多单向控制信号线和单/双向的状态信号线。
  • 一般计算机系统具有分层次的主线
    CPU使用来访问存储器和IO控制器。
    IO控制器通过二级(局部)总线来访问IO设备。
  • CPU的基本功能
    指令控制:确保计算机指令按程序的顺序执行。
    操作控制:一条指令的功能通常由若干个操作信号(微操作)组合起来实现,CPU控制这些微操作的产生,组合,传送和管理。
    时间控制:使各种微操作和指令的执行严格按照时间序列进行。
    数据加工:由运算器对数据进行算术运算和逻辑运算。
  • 取指令周期:取出指令并译码。
    执行指令周期:执行指令。

控制器的组成

控制器的功能:从存储器中取指令,对指令译码,产生控制信号并控制计算机系统各部件有序的执行,从而实现这条指令的功能。

  • 程序计数器PC
    专门的寄存器来保存指令的地址,即指令地址寄存器。
    存放当前正执行的指令地址或下一条指令的地址。
    具有自加一功能的计数器。
    指令顺序执行时,由程序计数器本身的递增功能来产生下一条指令的地址。
    当遇到转移指令,由指令直接提供转移地址,或在控制器的控制下由运算器形成转移地址,结果送PC作为下一条指令的地址。
  • 指令寄存器IR
    控制器从内存中取出的指令,存放在IR中,以便控制器对指令进行译码,执行。
    可将IR扩充为指令队列,或称指令栈,允许预取多条指令。
  • 指令译码器
    对操作码进行译码以识别该指令所要求的操作。
    将指令寄存器中的操作码字段输入指令译码器,操作码经译码后的信号与操作控制信号形成部件一起产生该指令所需要的,有一定时序关系的操作控制信号序列。
  • 操作控制信号形成部件
    根据指令操作码的译码信号及时序信号,产生取出指令和执行这条指令所需的各种操作控制信号,以便正确的建立数据通路,完成取出指令和执行指令的控制。
  • 时序信号产生器
    提供时钟信号和机器周期信号,以规定每个操作的时间。
  • 地址寄存器AR
    收纳可能有多种来源的地址,统一在规定的节拍将地址送上总线。
  • 数据寄存器DR
    CPU把数据发送到存储器或IO设备时,CPU会将数据送入DR,然后再将数据从DR送至总线。
    CPU从存储器或IO设备接受数据时,先将数据送上DR,然后从DR将数据送到CPU内部的某部件中。

时序及控制方式

  • 时序信号
    一台计算机内的控制信号一般均由若干个周期状态,若干个节拍电位和若干个节拍脉冲这样三级时序来对各种操作信号进行定时,在时间上对各种操作信号进行约束,以便对各种操作信号进行协调。

    指令周期:取出一条指令并完成该指令的执行所需要的时间。
    机器周期:又称CPU周期,指CPU与内存交换一次信息所需要的时间。一个指令周期可能有若干个机器周期。
    时钟周期:又称节拍周期,是处理操作的最基本时间单位,即T周期。一个CPU周期包含若干个时钟周期。

    把一个机器周期分成若干个相等的时间段,每一个时间段对应一个电位信号,称为节拍电位信号,节拍的宽度取决于CPU完成一次基本操作的时间。

    一个机器周期需要多少个节拍取决于该周期内需要顺序完成的基本操作步数。

    统一节拍法
    以最复杂的机器周期为基准,每一节拍的时间长短也以最繁琐的微操作为基准,使所有的机器周期长度相等,每一个机器周期内含有相同数目的节拍,称定长机器周期。

    分散节拍法
    根据实际需要安排节拍数,称不定长机器周期。

    延长节拍法
    大多数机器周期采用相同的基本节拍数,若某个机器周期内按规定的基本节拍数无法完成该周期的全部微操作,则可延长节拍。

    时钟周期插入
    不设置节拍,直接使用时钟周期信号。一个机器周期中含有若干个时钟周期,时钟周期的数目取决于机器周期内要完成的微操作个数,一个机器周期的基本时钟周期数确定后,可以不断插入等待时钟周期。
    在这里插入图片描述

  • 时序信号产生器
    在这里插入图片描述
    时钟源
    由石英晶体振荡器和与非门组成的正反馈振荡电路组成。
    为环形脉冲发成器提供频率稳定且电平匹配的方波时钟脉冲信号。
    环形脉冲发成器
    产生一组有序的,间隔相等或不等的脉冲序列,以便通过译码电路产生节拍脉冲。
    节拍脉冲和读写时序译码
    启停逻辑控制
    控制原始的节拍脉冲只在启动机器运行的情况下允许时序信号产生器发出CPU所需的节拍脉冲。同样读写时序信号也需要由启停控制逻辑来控制。
    在这里插入图片描述
    当D触发器为Q端输出1时,原始节拍脉冲提供CPU所需要的节拍信号,反之,关闭时序产生器。
    由于启动和停机是随机的,当启动计算机时,要从第一个节拍脉冲前沿开始工作,停机一定要在第四个节拍脉冲结束后关闭时序产生器,使发送出的脉冲是完整的,由右侧的SR触发器保证。

  • 控制方式
    不同指令的指令周期所需要的机器周期数不等,反映了指令的复杂程度,即控制信号的多少。对一个机器周期来说也有操作控制信号的多少和出现的次序问题。

    同步控制方式(固定时序控制方式或无应答控制方式)
    采用相同的机器周期数,和相同的节拍脉冲来形成每条指令的操作控制信号序列,因此每条指令的执行用时都是相同的。以微操作序列最长的为标准,确定控制微操作运行的时钟周期数(节拍数),控制器产生统一的,顺序固定的,周而复始的节拍电位(机器周期信号)和节拍脉冲(时钟周期信号)。
    电路简单,运行速度慢。

    异步控制方式(可变时序控制方式或应答控制方式)
    每条指令需要多少节拍就产生对少节拍,当指令执行完毕后,发出回答信号,控制器收到回答信号后,开始下条指令的执行。
    运行效率高,电路复杂。

    联合控制方式
    大部分指令安排在统一的机器周期内完成,即同步控制。较少数的特殊指令,或微操作序列过长或过短,或时间难以确定,采用异步控制来完成。
    一般的设计思想是功能部件内部采用同步控制方式,功能部件之间采用异步控制方式。

数据通路和指令的执行过程

  • 在所有需要传送数据的部件之间创建一条直接通路,对很小的计算机系统可行。
  • 在CPU内部创建一条总线,各个部件之间使用总线来传递数据。

简单计算机系统主机各部件的实现方案

在这里插入图片描述

  • 运算器
    在这里插入图片描述

  • 控制器
    在这里插入图片描述
    通常情况下,PC+1信号会与脉冲信号相连接,
    有一些计数器芯片在写入时需要打入脉冲,并且靠脉冲来实现计数,因此,把数据总线上的值送入PC时,需要控制信号B-PC#=0且PC+1有效,打入脉冲由PC+1提供。

  • 存储器
    在这里插入图片描述

简单计算机系统中指令的执行过程

  • 指令格式
    在这里插入图片描述

  • 取指令
    控制器先将第一条指令的地址置入PC,PC将当前指令地址送到AR,同时PC内容加一,指向下一条指令的地址,AR的输出通过地址总线送到存储器的地址端,指明指令所在的地址单元,控制器发出读控制信号,控制从存储器中读出这条指令,该指令通过DB送到IR。

    指令取到IR后,立即由指令译码器对其进行分析译码,指令译码器首先判断该指令是什么指令,然后将判断结果传递给操作控制信号形成部件。

    取指令阶段对于所有指令来说,其操作控制信号都是相同的。

  • 执行指令
    操作控制信号形成部件根据指令译码信息和时序周期信号,发出该指令所需的所有部件的有一定时序关系的控制信号序列。完成指令的执行。

    指令的执行阶段对于不同的指令,其操作控制信号是不同的。
    在这里插入图片描述

MIPS单周期CPU的数据通路和指令的执行过程

在这里插入图片描述

  • 设计步骤
    分析MIPS的指令格式,以及每种格式下指令的功能。
    根据指令的功能,罗列所需器件和器件之间的链接方式。
    确定每个器件所需的控制信号。

  • 取指令
    在这里插入图片描述

  • 更新版
    在这里插入图片描述
    指令存储器是一个只读存储器,根据PC提供的地址读取对应单元存放的指令,因此不需要读控制信号。

    MIPS指令长度为32位,因此,指令存储器的宽度也设计成32位,PC的32位地址对应的是字节地址,实际访存是取PC的高30位为地址来访存,PC的最后两位用于选择读出的是32位指令字中的哪一个字节,一次访存取出一条指令,4个字节。

    由于指令存储器是只读存储器,只要指令地址在执行期间保持不变,那么从指令存储器取出的代码就会维持不变,因此取消了指令寄存器。

    每次取指令后,PC应自增4。添加一个PC_new来暂存PC自增值,在指令周期(也就是时钟周期)clk的上升沿执行取指令操作,在clk的下降沿更新PC值。

    系统启动时PC复位,添加复位信号rst。

  • R型指令数据通路的设计
    所有R型指令,OP相同,指令功能有功能码func指出。
    rs,rt为源操作数
    rd为目的操作数

    添加多端口寄存器堆和多功能运算器
    在这里插入图片描述
    寄存器堆写操作边沿触发,写操作的输入信号必须在始终边沿来临时已经有效。
    ALU不需要时钟,但需要时钟脉冲来置标志位。
    在这里插入图片描述
    当前指令的操作码OP和func字段由指令译码部件处理:首先根据OP字段判断指令类型,然后将func字段翻译成ALU的控制信号ALU_OP,以指定ALU的运算功能。

    在clk的上升沿,启动指令存储器,依据PC读出指令,在clk高电平持续期间,完成PC值的自增,指令译码,寄存器读操作。随后完成ALU运算。在clk的下降沿完成目的寄存器的写入,PC值的更新和标志寄存器的更新。将clk返向后作为寄存器堆,PC和标志寄存器的打入脉冲。

    指令对标志寄存器影响的规律
    传送类和跳转类指令不影响标志位
    有符号算术运算类指令影响ZF(零标志位)和OF(溢出标志位)
    无符号算术运算类指令和逻辑运算类指令影响ZF
    条件转移类指令一般会使用标志位ZF

  • I型指令数据通路的设计
    数据传送类指令,访存指令,分支指令和含立即数的指令一般采用I型指令。

    rs,立即数为源地址
    rd为目的地址
    在这里插入图片描述
    增加二选一数据选择器,支持目的寄存器的两种来源
    对于R型指令,目的寄存器是rd,对于I型指令,目的寄存器是rt。
    在指令机器码输出与寄存器堆模块的写地址输入端口前设置一个二选一选择器。
    设置一个控制信号来控制将那个字段送入写地址。

    增加器件,使指令低16位的立即数imm经过扩展,与rs执行运算操作
    对有符号数的运算,进行符号扩展,用16位立即数的最高位填充高16位,构成32位数。对于无符号数的运算,执行零扩展。
    设置一个控制信号来控制进行符号扩展还是零扩展。
    对于有符号数的运算指令和存取数指令需要符号扩展。
    对于无符号数的运算指令和逻辑运算类指令进行0扩展。

    增加二选一数据选择器,支持ALU运算数据的两种来源rt或imm。
    设置一个控制信号来控制数据来源。
    在这里插入图片描述
    EA=(rs)+offset

    增加一个数据存储器RAM,存放指令访问的数据。
    该存储器读操作不需要脉冲,写操作需要脉冲。
    设置控制信号控制,控制信号有效且clk下降沿到来时写存储器。

    使用ALU实现对EA的计算。
    操作数是rs和经过符号扩展的offset,计算的结果EA直接送存储器地址端口。

    存储器读出的数据
    在对寄存器的写入端口出设置一个二选一多路选择器,控制将ALU输出或存储器的读出数据送寄存器堆。

    存储器写入数据
    将寄存器的读端口数据直接写入存储器的写端口。

  • 转移指令数据通路的设计
    在这里插入图片描述
    jal(J)指令不仅转移,而且在转移前将jal指令的下一条指令的地址保存到编号为31的寄存器中。(PC+4->MYM31,{(PC+4)高四位,address,0,0}->PC
    jr指令(R)将32位数据当做指令地址,直接置入PC。通常和jal指令配合使用,用于子程序的调用与返回。jal相当于CALL,jr相当于RET。
    I型条件转移指令“beq rs,rt,label”的功能是相等转移:if(rs=rt) then PC+4+offset*4->PC else PC+4->PC。其中offset是有符号数,是跳转目标指令的地址相对于下一条指令地址的偏移量。offset需要符号扩展为32位后再左移两位。

    转移地址产生后,要送入PC才能完成跳转。
    对于PC来说,如果加上PC自增,则PC的来源有四种,需要一个四选一多路选择器,由两位控制信号来选择。

    jal指令需要将PC+4的值存入MYM31寄存器中,寄存器写入地址的选择需要多一种可能性,对于写入数据的选择也多一种可能性,需要修改寄存器堆在写入地址前的多路选择器和写入数据前的多路选择器。

    beq指令需要根据标志ZF来判断是否转移。

硬布线控制器

根据指令的要求,当前的时序及外部和内部的状态情况,按时间顺序发送一系列微操作控制信号。

他由复杂的组合逻辑门电路和一些触发器构成,又称为组合逻辑控制器,或常规逻辑控制器。

不可更改和扩充。
速度快。

硬布线控制器和微程序控制器在硬件上最大的区别就是操作控制信号形成部件的组成结构不同。

控制器的设计方法

  • 确定指令系统,包括指令系统中每条指令的格式,功能和寻址方式,分配操作码。
  • 围绕指令系统的实现,确定CPU的内部结构,包括运算器的功能和组成,控制器的类型,结构组成及各部件的连接方式和数据通路,同时也需要确定时序系统的构成。
  • 在以上基础上,分析每条指令的执行过程,按机器周期顺序,写出必须发送的微操作控制信号序列。
  • 综合每个微操作控制序列的逻辑函数,化简和优化。
  • 用逻辑电路实现。

硬布线控制器的结构与原理

在这里插入图片描述

  • 微操作控制信号C是四种输入信号的函数 I用于指出当前是哪一条指令的指令周期。 M,T指出当前处于哪一个机器周期和哪一个节拍。
    S指出运算器的结果状态及机器内部的其他状态,已决定某些操作信号是否发送。 E指出和传递CPU外部各部件的状态和控制信号。
  • 信号C一部分送到CPU外部,构成系统总线的控制总线,另一部分送到CPU内部以供使用。
  • 机器指令执行的各个步骤是在各个机器周期中,由指令的操作码,机器周期信号和时钟周期信号驱动操作控制器的组合逻辑电路来完成的,一个机器周期完成一个步骤。

硬布线控制器的时序系统

  • 机器周期信号一般可以采用计数器输出译码方式产生。若指令系统的所有机器指令中,最长的一条指令包含n个机器周期,则需要m=log2n位的计数器,通过m:2m译码器输出机器周期信号。以一般的自增或自减计数器不同,该计数器必须按照不同指令的需求产生不同的计数顺序。
  • 计数器以格雷码的形式编码,避免两个触发器同时翻转造成毛刺。
    在这里插入图片描述
    496

硬布线控制器的设计举例

  • 指令系统
    在这里插入图片描述

  • 模型机结构
    在这里插入图片描述

  • 首先,在CPU的系统结构基础上,依据指令功能设计出指令执行的数据通路,并规定出实现这些数据通路所必须发送的微操作控制信号;然后按照总线分时享用的原则,将这些有序的操作划分为不同的机器周期,即保证在一个机器周期中,总线上传输的数据是唯一的,且总线上的数据不能停留到下一个机器周期。

  • ADD指令
    M0:将当前指令地址送AR,且PC指向指令的下一字地址。
    M1:从内存中取指令送寄存器,译码。
    M2:将指令的第二字地址送AR,且PC指向指令的下一条指令地址。
    M3:从内存中取出指令的第二个字即立即数,送ALU
    M4:将另一个操作数送ALU。
    M5:完成加法操作并将结果送R0

  • JMP指令
    M0:将当前指令地址送AR,且PC指向指令的下一字地址。
    M1:从内存中取指令送寄存器,译码。
    M2:将指令的第二字地址送AR,且PC指向指令的下一条指令地址。
    M3:在内存中取出指令的第二个字即转移地址送PC,实现转移。

  • ADD
    ADD·M0:PC->AR,PC+1->PC
    ADD·M1:RAM->IR,指令译码
    ADD·M2:PC->AR,PC+1->PC
    ADD·M3:RAM->DA1
    ADD·M4:R0->DA2
    ADD·M5:DA1+DA2->R0

  • JMP
    JMP·M0:PC->AR,PC+1->PC
    JMP·M1:RAM->IR,指令译码
    JMP·M2:PC->AR,PC+1->PC
    JMP·M3:RAM->PC

  • 取指令
    ADD·M0:(PC-B)#,B-AR,PC+1
    ADD·M1:(M-R)#,B-IR,J1#

  • ADD
    ADD·M2:(PC-B)#,B-AR,PC+1
    ADD·M3:(M-R)#,B-DA1
    ADD·M4:(R0-B)#,B-DA2
    ADD·M5:ALU(F=A+B),(ALU-B)#,B-R0

  • JMP
    JMP·M2:(PC-B)#,B-AR,PC+1
    JMP·M3:(M-R)#,(B-PC)#

  • 综合微操作控制信号的逻辑函数
    若某个微操作控制信号必须在某个机器周期内的Tn时刻有效,则该信号表达式还要和Tn时钟信号相与

    当指令系统被扩充时,只需更新微操作控制信号的逻辑函数。

    对于已将确定的指令系统,要对各信号的逻辑函数进行化简和优化。不仅要从逻辑代数的角度,还要从指令系统的整体逻辑上考虑。比如该例中,ADD+JMP=1。

  • 逻辑实现
    在这里插入图片描述

MIPS硬布线多周期CPU的设计

  • 单周期缺点
    运行效率低下
    时钟周期由执行时间最长的指令决定

在一个指令周期内,各功能部件被独占
单个周期内所有功能部件必须单独设置,不能复用。

  • 设计原则
    不同的指令,依据功能需要可以包含不同数目的时钟周期。
    时钟周期的内部只完成指令的部分功能,效率更高。
    提高硬件的利用率。

  • 多周期CPU的数据通路
    在这里插入图片描述
    与单周期相比
    指令存储器和数据存储器合二为一。
    只设置一个ALU运算部件,节省两个加法器。
    添加两个专用寄存器(IR,MDR)和三个附加寄存器(A,B,F)。

    每个时钟周期的下降沿,均需将本时钟周期的操作结果存入暂存器,专用寄存器或者通用寄存器保存,以便下一个时钟周期使用。

    对于某条指令的执行结果,若要用于下一条指令,则应该存入程序员可见的部件,有程序员或编译器以指令方式明确指定。对于某一条指令中一个时钟周期的执行结果,若要用于该指令的下一时钟周期,则应该存入程序员不可见,硬件设计者可见的附加寄存器。需要在这个功能部件之间加设一个缓冲寄存器,在时钟周期的下降沿将部件执行结果置入这些寄存器。

  • R型指令的执行过程
    在这里插入图片描述
    取指令,PC自增:Mem[PC]->IR,PC+4->PC.
    读寄存器:Reg[rs]->A,Reg[rt]->B
    ALU运算:A(op)B->F
    结果寄存器:F->Reg[rd]

  • I型取数指令
    在这里插入图片描述
    取指令,PC自增:Mem[PC]->IR,PC+4->PC.
    读寄存器:Reg[rs]->A,Reg[rt]->B(无关操作)
    计算有效地址:EA:A+offset->F
    读存储器:Mem[F]->MDR
    写结果寄存器:MDR->Reg[rt]

  • I型存数指令
    在这里插入图片描述
    取指令,PC自增:Mem[PC]->IR,PC+4->PC.
    读寄存器:Reg[rs]->A,Reg[rt]->B
    计算有效地址:EA:A+offset->F
    写存储器:B->Mem[F]

  • I型分支指令
    在这里插入图片描述
    取指令,PC自增:Mem[PC]->IR,PC+4->PC.
    读寄存器和转移地址计算:Reg[rs]->A,Reg[rt]->B,PC+offset*4->F
    完成分支:A-B,产生ZF,zero=1,则F->PC,zero=0,空操作。

  • J型跳转指令
    在这里插入图片描述
    取指令,PC自增:Mem[PC]->IR,PC+4->PC.
    完成跳转:{PC[31:28],address,00}->PC

  • 多周期CPU的具体实现方案
    在这里插入图片描述
    在这里插入图片描述
    凡是写入操作,总是在下降沿,以保证功能部件操作完成后,再保存结果。
    在写入周期下降沿有效指将这些写控制信号和时钟周期的反向信号向与后作为部件的写操作控制信号。
    存储器的读信号可以不受时钟控制,是电平型信号。

    没有控制信号表名直接使用时钟周期的脉冲作为打入脉冲,即每个时钟周期的后沿均执行写入操作。
    没有输出控制,内容始终可用。

  • 设计实例
    确定指令系统

确定系统结构与数据通路

分析每条指令的执行过程,写出发送的微操作控制信号序列

综合每个微操作控制信号的逻辑函数
实现操作控制信号形成部件的组合逻辑电路
输入变量:OP,func,时钟周期,ALU的结果状态
输出:各个控制信号
描述每个时钟周期发送的控制信号:指令·周期·状态:控制信号
逻辑函数综合:对每个控制信号,凡是:右边出现该信号的,将左边的条件进行或运算
优化和化简逻辑函数
在这里插入图片描述

逻辑实现
将所有控制信号的最简逻辑函数用电路实现

微程序控制器

计算机系统的控制电路是按照一系列离散步骤进行操作的,即一条指令可以分成一系列基本的操作步骤。
这些步骤就像计算机程序执行过程一样,可以用软件的方法来实现。

微程序控制的基本概念和工作原理

在这里插入图片描述

  • 微地址寄存器μAR的值与指令执行的一个过程相对应。 μAR的输出作为控制存储器CM的地址,CM的一个存储单元中刚好存储一条微指令。
    CM一般是只读的,CM的地址一般叫做微地址。 每条微指令包含一组微命令,一个微命令完成一个微操作。
    微命令是组成微指令的最小单位,也就是微操作控制信号,微操作就是指令执行时必须完成的基本操作。
    执行一条微指令所需要的时间叫做微周期,一般可以作为一个机器周期。 微指令的有序集合叫做微程序,微程序是实现一条机器指令功能的程序。

  • 微指令由控制字段,判别字段和下址字段组成。 控制字段包含一组微命令信号,即微操作控制信号。
    下址字段,指令操作码和状态标志等微地址形成电路的输入,输出就是下一条微指令的地址。 判别字段指明下址的来源。

  • 下地址的生成方法
    下一微地址就是CM中的下一个地址:当前微地址加一。

    下一微地址是由当前微指令提供的一个绝对CM地址,这个微地址可能是后继微地址的全部,也可能是后继微地址的一部分。

    根据指令的OP产生该指令对应的微程序入口地址,通常这个工作由映像逻辑(只用一次)来完成,指令OP输入映像逻辑后,硬件将操作码映射成该指令对应执行指令周期中的第一条微指令的地址,即程序入口地址,将程序入口地址装入微地址寄存器就可以转入到正确的微程序。

    调用微子程序时,其返回地址存储在子程序寄存器或硬件堆栈中。

  • 开机后,首先使μAR置为取指令的第一条微指令地址,从CM中取出第一条微指令,完成PC->AR,PC+1操作,然后根据微指令的下址字段分别取出第二条微指令,完成RAM->IR,即从内存中读出指令送IR,并发出译码信号使指令译码器工作,即形成该指令的执行指令阶段的微程序入口地址,从CM中取出该指令执行时的第一条微指令送到微指令寄存器,发出控制信号实现微操作。然后该指令执行时的其余微指令地址是当前微地址加1或由当前微指令下址字段确定,依次从控存中取出其余微指令,实现该指令所需的所有微作,即完成了该指令的执行。每一条指令的最后一条微指令执行完后均会回到取指令的第一条微指令执行,以取下一条指令,如此重复,直至用户要运行的程序指令执行完为止。

简单微程序控制器的设计

  • 确定指令系统,包括指令系统中每条指令的格式,功能和寻址方式,分配操作码。
    围绕指令系统的实现,确定CPU的内部结构,包括运算器的功能和组成,控制器的类型,结构组成及各部件的连接方式和数据通路,同时也需要确定时序系统的构成。
    在以上基础上,分析每条指令的执行过程,画出指令系统的微程序流程图。
    根据CPU的结构,写出每条指令所发送的微操作控制信号序列。
    结合微程序控制器的结构,微操作控制信号序列和控制存储器的容量,设计微指令格式。
    分配微程序流程图中各微指令的微地址,并编写微指令代码。
    将所有微指令代码装入控制存储器的相应单元。

  • 微程序控制器的设计主要完成两个任务:产生正确的微命令;产生正确的微指令序列(即上述 CPU 状态转换序列)。
    在这里插入图片描述
    在这里插入图片描述

  • 以指令集:ADD 和 JMP,系统的结构和数据通路没有改变,CPU 的有限状态机中只有 8 个状态,也就是说可能产生的下址只有 8 个。

    在取指令周期的第二个状态(RAM->IR,指令译码)之后的微地址有两种可能性,微控器采用第三种方法(指令译码)来产生下一微地址,ADD和 JMP 指令的最后一个状态采用第二种方法即当前微指令提供下一微地址,其余状态均可采用第一种方法即把当前微地址加1来作为下一微地址。两条指令集的有 8 种状态,则需要微指令提供的绝对微地址必须≥3 位。

  • 寄存器控制的微命令产生方式

在这里插入图片描述

  • 微指令的格式
    在这里插入图片描述

  • 假设 ADD 指令的操作码I7I6I5I4是0000,JMP 指令的操作码I7I6I5I4是0001,对于三位微地址,则微程序的入口地址的逻辑表达式可以写成I410,用很简单的电路就可以实现操作码译码,即由指令的操作码按逻辑电路映射成该指令的微程序入口地址。由微程序的入口地址的逻辑表达式(I410)得到ADD 执行指令周期中的第一个状态微地址是010,JMP 执行指令周期中的第一个状态的微地址是 110。然后分别把剩下的微地址分配给其他CPU 状态,于是得到简单微控器的微程序流程图。

    将1位判别测试字段里的转移方式命名为J1#,若J1#=0表示下址来源是指令译码,J1#=1表示下址来源由微指令的下址字段提供,则对所有状态来说,只有微地址为001的状态对应的微指令的判别测试字段是 0,其他状态对应的微指令的判别测试字段都是1.

    我们先把系统中每一个微操作都罗列出来,给它们命名,然后用微指令控制字段中的一位来表示一个微命令,对于每一条微指令,它需要哪些微命令,也就是说需要产生哪些微操作(控制信号),就只需要把该微指令中所需要的微命令位置为有效,而将不需要的微命令位置为无效。

    控制信号共n个,所以按照微指令控制字段每位对应一个微命令的设计方法,该微程序控制器的微指令控制字段需要n位,于是该微程序控制器的微指令的格式就确定了。

    有些微命令是高电平有效,有些微命令是低电平有效,若要给 PC 置数必须 B-PC#和 PC+1 同时有效。

微程序设计技术

  • 从控存中取出一条微指令来实现一个操作步骤,一条机器指令的执行就是由若干条微指令分别完成各个步骤来实现的。

  • 实际的计算机至少包含上百个控制信号和多种转移方式,如果其控制字段还是按照上述设计方法(微指令一位对应一个控制信号),将导致控制存储器的容量大,从而导致 CPU芯片体积过大。

  • 通常,在实际进行微程序设计时,应考虑以下因 素:
    有利于缩短微指令字长;
    有利于减少控制存储器的容量;
    有利于微程序的执行速度;
    有利于对微指令的修改;
    有利于微程序设计的灵活性。

  • 微指令的编译法:微指令中控制字段的设计方法。
    直接控制法
    在微指令的控制字段中,每一位代表一个微命令,在设计微指令时,如果要发出某个微命令则将控制字段中对应位置有效,这样就可以打开或关闭某个控制门,这就是直接控制法。如果是编码控制则需要置相应编码值。
    微指令的控制字段太长

    字段直接编译法
    在这里插入图片描述
    在计算机中各个微命令,在任一条微指令周期内不可能同时发出,一般一条微指令的大部分微命令是无效的,而只有几个微命令有效。

    如果有一组微命令,在任一个微周期(一条微指令所需的执行时间)只有一个微命令起作用,那么这一组微命令是互斥的;通常将在同一个微周期中不能同时出现的微命令称为相斥性微命令,而将在同一个微周期中可以同时出现的微命令称为相容性微命令。

    将这些互斥的微命令编成一组,用编码来表示一个微命令。从而缩短微指令长度。这样微指令寄存器的输出端加一个译码器,该译码器的输出就是这一组微命令,每一条微指令该字段的一个编码经过译码器译码后输出一个微命令。一般要留一个编码(通常为 0 编码)表示这一组微命令没有一个有效。

    字段直接编译法的分段原则是:
    相斥性微命令分在同一字段内,相容性微命令分在不同字段内。前者可以提高信息位的利用率,缩短微指令字长;后者有利于实现并行操作,加快指令的执行速度。

    一般将同类操作中互斥的微命令划分在一个字段内,这样使微指令结构清晰,易于编制微程序和易于扩充功能。

    每个小字段的信息位不能太长,一般不超过 6 位,否则将增加译码线路的复杂性和译码时间。

    字段间接编译法
    在这种编码方法中,某一字段所产生的微命令,是和另一字段的代码联合定义出来的。

  • 微指令下址字段设计方法
    微程序入口地址的产生
    每一条机器指令都对应一段微程序,首先由“取机器指令”的微程序完成将一条机器指令从主存中取出并送到 IR,这段微程序一般安排在控制存储器的特定单元;然后根据机器指令的操作码转移到其对应的微程序入口地址,也就是指令译码,通常采用逻辑电路、PROM 来实现这种微程序的转移。

    指令译码产生相应微程序入口地址如果采用 PROM 来实现,这种 PROM 称为映射存储器(MAPROM),它是将指令的操作码作为地址输入,而其相应的存储单元的内容即为该指令的微程序入口地址,从存储器的数据线输出到微地址寄存器,从CM中取该微程序的第一条微指令。

    可以采用逻辑电路来实现 。

  • 后继微地址的产生
    确定了微程序入口地址后,就可以开始执行微程序。每条微指令执行完毕,都要根据要求产生后继微指令地址。

    计数器方式
    在微程序控制器单元中设置一个微程序计数器μPC, 在顺序执行微指令时,后继微指令地址由现行微地址加上一个增量(通常为 1)来产生。遇到转移时,由微指令给出转移地址,使微程序按新的微地址顺序执行。
    这种方式下微程序流控制由两部分信息确定:转移控制字段 BCF 和转移地址字段 BAF,其微指令格式如下:
    在这里插入图片描述 BAF 用于给出微指令转移的部分微地址,BCF 用来确定后继微地址是顺序执行还是条件转移。当微程序转移条件成立时,将用 BAF 修改送μPC 的部分地址,否则顺序执行下一条微指令(μPC+1)。
    在微程序流的控制中,由微指令的BCF 所定义的微命令应能选择各种后继微地址来源。假设,在微程序中有顺序执行、无条件转移、条件转移、测试循环、转微子程序和返回 6 种情况,再加上每条指令取出后要转移到相应的微程序入口地址,则转移控制字段 BCF 用 3 位。转移地址字段 BAF 一般位数少,将它送到μPC 的若干低位或高位形成后继微地址。
    在这里插入图片描述
    BCF 字段输出端设置一译码器使得分别当:
    BCF=000,0 译码线有效即为顺序执行微命令,使与门打开,+1 信号进入μPC,顺序执行微指令,后继微地址为μ PC+1;
    BCF=001,1 译码线有效即为指令操作码译码产生微程序入口的微命令,将指令译码器输出门打开,根据机器指令操作码译码产生后继微地址。
    BCF=010,2 译码线有效即为无条件转移微命令,BAF 送μPC,由 BAF 和μ PC 组合形成后继微地址。
    BCF=011,3 译码线有效即为条件转移微命令,由转移条件的测试结果来确定是否转移。若测试条件满足,则有 BAF 和μ PC 组合形成后继微地址;若测试条件不满足,则μ PC+1 作为后继微地址。
    BCF=100,4 译码线有效即为测试循环微命令,后继微地址由测试循环条件确定。当测试条件(循环计数器内容为零)不满足时,循环继续,循环计数器减一,循环入口微地址也就是后继微地址由 BAF 与μ PC 组合形成;当测试条件满足时,表示循环结束,其后继微地址为μ PC+1,以此跳出循环。
    BCF=101,5 译码线有效即转微子程序微命令,其后继微地址即微子程序入口微地址由 BAF与μ PC 组合形成。在转移之前,要把该条微指令的下一微地址μPC+1 送入返回地址寄存器中,以备返回微主程序。
    BCF=110,6 译码线有效即返回微命令,其后继微地址为返回地址寄存器中的内容,将其送入μ PC,从而实现从微子程序返回到原来的微主程序。

    计数器方式产生后继微地址的工作过程是,机器加电后执行的第一条微指令地址,也就是取指令的微程序起始地址由硬件电路置入μ PC 中,顺序执行取指令微程序,实现从主存中取出机器指令送IR;由机器指令操作码译码后产生相应微程序入口地址,接下去若顺序执行微指令,则将μ PC+1 作为后继微地址;若遇转移类微指令而且转移条件满足,则由 BAF 和μ PC 组合产生后继微地址,否则μ PC+1。这样,直至一段微程序执行完毕,完成一条机器指令为止;重复又转入取指令微程序。

    优点是微指令字较短,便于编写微程序,后继微地址产生机构比较简单;缺点是执行速度相对较慢,因为计数器方式不易于直接实现各测试条件的多路转移,在编写微程序中,由于频繁地用到非顺序的微指令,在微程序中要插入很多的转移微指令,这样会影响微程序的执行速度。这种方式的微程序即要满足地址递增顺序,又要满足灵活地转向各种共用微程序与微子程序入口的要求,因此微程序在控制存储器中的物理分配不方便,需合理安派、调整。

    判定方式(下址字段法)
    其后继微指令地址可由设计者指定或设计者指定的测试判别字段控制产生。这种方式要在微指令格式中设置一个字段用来指明下一条要执行的微指令地址,所以也称为下址字段法。在这种方式中,因为每一条微指令至少都是一条无条件转移微指令,因此不必设置专门的转移微指令。
    在这里插入图片描述
    μ AR 代替了μ PC,μ AR 的内容可以由微指令的下址字段来装入,也可以由微地址散转及修改电路来装入,微地址散转及修改电路包括由机器指令操作码产生对应微程序入口地址的逻辑电路和条件转移时的微地址修改逻辑电路。
    当微程序无分支时,后继微指令地址由微指令的下址字段直接给出,这是在设计微程序流程图时由设计者指定的。当微程序出现分支时,由微指令的测试字段信号启动微地址修改逻辑电路,根据状态标志位来修改μ AR 的若干位来产生后继微地址,使微程序转移到相应的微地址。

    测试判别字段的位数取决于测试源的个数,微指令中可以用直接控制法表示,即一位表示一个测试源,也可以将若干个测试源组合用几位表示,并经过译码后一次只有一个测试源有效。需要修改的μ AR 的位数取决于转移分支的路数。下址字段的位数取决于控制存储器的容量,与μ AR 的位数相等。

    优点是可以实现快速多路分支,以提高微程序的执行速度,微程序在控制存储器中的物理分配方便,微程序设计灵活;缺点是微指令字加长,形成后继微地址的结构比较复杂。

  • 微指令格式的类型
    水平型微指令
    其基本特征是:微指令字采用直接控制法的基本思想,一条微指令能控制数据通路中多个功能部件并行操作。控制信息的编码简单,尽可能使微命令与控制门之间有直接对应的关系。在微指令字中,不必给出源部件或目标部件的编址,因为它们已经隐含在有关的并行操作的微命令中。

    优点是:一条微指令可同时发许多个微命令,且微指令控制字段直接控制,不用字段译码,使得微指令执行效率高,速度快,灵活,各部件执行操作的并行能力强;水平型微指令来解释一条指令或完成某种功能所需要的微指令条数少,因此编制的微程序就比较短。
    缺点是:微指令字太长,增加了控制存储器的横向容量。

    垂直型微指令
    采用完全编码的方法,将一套微命令代码化构成微指令。因此,一条微指令只能控制一二种微操作,由微操作码、源地址和目标地址以及其他附带信息,它可以和机器指令一样分成多种类型的微指令,所有微指令构成一个微指令系统。微指令字采用短格式,一条微指令只能控制一二个微操作,并行控制能力差。对于用户来说,垂直型微指令比较直观,容易掌握和便于使用。微指令字短,减少了横向控制存储器的容量。 缺点是:微指令要经过译码才能发出微命令,微指令的执行效率低,并行操作性比较差,解释一条机器指令或完成某种功能所需要的微指令条数增多,增加了纵向微程序容量。

    一般实际设计微指令时,大多采用两种类型结合的方法来设计微指
    令,使得微指令字长适当,并行操作能力也比较强,设计的微程序容量适当。

  • 微程序控存和动态微程序设计
    微程序控制存储器一般由只读存储器构成,如果使用可读写的随机存储器作为控制存储器也可以,但停电后 RAM 中的内容会消失,所以,开机后还要首先将外存上存放的微程序调到CM的 RAM 中,才能开始执行程序。 采用 RAM 作为控制存储器的优点是可以实现指令系统的扩充或调整。在一台微程序控制的计算机中,假如能根据用户的要求改变微程序,那么这台机器就具有动态微程序设计功能。

    动态微程序设计的目的是使计算机能更灵活、更有效地适应于各种不同的应用场合。允许用户在原来指令系统的基础上增加一些指令来提高程序的执行效率。用于动态微程序设计的控制存储器称为可写控制存储器或用户控制存储器。

  • 毫微程序设计
    把垂直型微指令设计和水平型微指令设计结合起来,采用两级微程序设计。

    第一级为垂直微程序,用来解释机器指令,称为微程序并存放在称为微程序存储器的控存中。第二级为水平微程序,用来解释垂直微指令,并产生相应微命令,实现数据通路的控制。由于它是解释微程序的微程序,所以称为毫微程序,存放在称为毫微程序存储器的控存中。这样毫微程序的每条水平型微指令就可称之为毫微指令;而使用垂直微指令和毫微指令这两种微指令的程序开发就叫做毫微程序设计。
    在这里插入图片描述
    毫微程序设计使得微程序流的控制和微命令发出完全分离,微程序流控制由微程序级实现(垂直型微指令),而微命令则由毫微程序产生。

    微命令是非常简单的控制信号,可由垂直型微指令直接产生,无需再用毫微指令去解释。

    一条垂直微指令只用一条毫微指令来解释。这种情况可简化垂直微指令的译码器,并且相同的毫微指令在毫微程序存储器中只存放一条即可,能减少控制存储器的容量。

    一条垂直微指令由一段毫微程序来解释。这是最一般的情况。这时毫微程序与垂直微指令的关系就类似于微程序与机器指令的关系。这种情况,微程序设计更随意,更能有效地控制数据通路。

微程序控制方式下模型机的设计实例

在这里插入图片描述

  • 指令的执行过程
    用开关单元的 CLR 开关将 PC 程序计数器、控存地址寄存器和微指令寄存器清零,使程序从 0 地址单元取指令; 微指令从控存 00 微地址开始执行,经过微程序控制台使在 01 微地址的微指令执行的 T2 时刻发出控制信号,T3 时刻将 PC程序计数器的内容打入 AR 地址寄存器; 由 02 微地址的微指令发 M-R#、B-IR 信号,将 AR 地址寄存器所寻址的指令从存储器中取出送总线,并打入 IR 指令寄存器; 由 03 微地址的微指令发 J1#信号,将指令操作码通过指令译码器转换成微地址寄存器(控存地址寄存器)的输出置1(SE6#-SE0#)信号,使得形成下一条微指令地址(即该指令的微程序入口地址); 从控存中取出该指令的第一条微指令到微指令寄存器μ IR 发出控制信号,并由该微指令的下址字段MA6~MA0经微地址寄存器再到控存取下一条微指令; 每一条微指令的控制信号控制各单元(如运算器单元、输入单元、输出单元、寄存器单元等)完成相应的操作,直到一条指令的所有微指令执行完,即完成一条指令的功能,此时,先判测有无中断,若中断信号有效,则将下一条指令的PC压入堆栈,并从中断向量单元取出中断子程序入口地址,再回到 01 微地址执行取指令的微指令,既转入中断子程序执行。若中断信号无效,则回到01 微地址行取指令的微指令,即继续执行指令。

  • 微指令的格式
    在这里插入图片描述
    微指令字长 24 位,记为 M23~M0,其中 M13~M8 采用直接控制法、BTO 和 OTB 字段采用了字段直接编译法,FUNC 和 FS 一起采用了字段间接编译法,下址是 7 位。

  • 指令译码器
    在这里插入图片描述
    指令寄存器的输出接至指令译码器,即指令译码电路。该电路主要功能是根据输入的指令操作码 I7-I2、微程序的转移方式 J1#-J5#、运算结果的状态 FC 和 FZ、控制台开关 K1 和 K2 的状态,进行逻辑译码,产生后继微地址的控制信号 SE6#- SE0#,以控制实现机器指令转入微程序入口和微程序的顺序、分支、循环运行。

    模型机用判定方式产生后继微地址。SE6#~SE0#用于控制修改后继微地址的相应位
    MA6~MA0,当 SEi# =0,则微地址 MAi被修改(置 1),否则,MAi不变,与原微指令寄存器输出的下址字段相同。

  • 微程序控制器
    在这里插入图片描述
    指令寄存器 IR
    控制器将指令从存储器中取出后送入指令寄存器 IR,指令的操作码输入指令译码器进
    行译码。

    指令译码(后继微地址转移控制电路)
    后继微地址转移控制电路一方面将指令寄存器的指令操作码转换成该指令的微程序入口地址,另一方面可以实现微指令的转移控制,当需要根据硬件中断信号、运算器运算状
    态等进行微指令转移时,可以根据这些信号的不同状态实现微地址的分支控制,从而实现
    微指令转移。

    控制存储器 CM
    能存放 24 位的微指令。微指令下址字段 7 位,因此,控存的实际容量为 128×24 位,即可以存放 128 条微指令。 控存中的 24 位微码,高 17 位送微指令寄存器 µIR 保存并译码,低 7 位(下址字段)则送后继微地址转移控制逻辑产生后继微地址。

    微指令寄存器 µIR 和微指令译码器
    微指令寄存器 µIR 的功能是存放从控存 CM 中读出的高 16 位的微码 M23~M8(低 7 位
    M6~M0 是下址字段,M7 为空)。µIR 的清零端 CLR# 接 CLR 开关,即在总清时,使 µIR清零。µIR 的数据输入端接控存 CM 的数据 I/O 端;而 µIR 的数据输出端就是整机的控制信号,其中 M13~M8是直接控制的信号,M23~M9是经过微指令译码器译码后产生控制信号。

    控存地址寄存器 CMAR
    由输入信号 SE6#~SE0#控制修改当前微指令(从控存 CM 中读出)的下址字段 M6-M0(即 MA6-MA0),以产生下条微指令的控存地址,即后继微地址。

  • 设计流程
    设计指令的功能,指令码及寻址方式
    编写微程序流程图
    根据指令码和转移方式分配微地址及下址字段
    根据微指令格式,编写微指令代码

微程序控制器与硬布线控制器的比较

  • 根本区别在于微操作控制信号的产生方法不同:微程序控制器是事先将编写好的微代码放入控制存储器,执行过程中需要时再从控存中读取并送出的;而硬布线控制器由组合逻辑电路产生微操作控制信号。
  • 从电路的规整性来说,微程序控制器电路相对规整,而硬布线控制器电路设计较为繁琐、不规整。由于微程序控制器的控制信号存于控存,属于存储逻辑电路;而硬布线控制器属于时序及组合逻辑电路,所以电路设计较微程序控制器更为繁杂与复杂。
  • 从指令系统的易扩充性来说,微程序控制器易修改和扩充,而硬布线控制器不易修改和扩充。如果需要修改一条指令的功能或者增加一条指令,对于微程序控制器,只需在控制存储器中修改或添加相应的微程序段即可;而对于硬布线控制器,则要修改所有涉及到的微操作控制信号的逻辑函数和电路,变动甚大,非常不利于指令的修改和扩充。
  • 微程序控制器执行指令的速度相对硬布线控制器慢,因为前者需要读控存、微指令译码、发送微操作控制信号来完成一个 CPU 周期(机器周期),而后者经过一些门电路的延迟,即可产生微操作控制信号,所以更利于硬布线控制器的 CPU 提高主频。
  • 微程序控制器早先多应用于 CISC 系统,硬布线控制器多应用于 RISC 系统。在现代的 RISC 系统中,绝大多数指令为简单指令,均用硬布线方式实现;少数复杂指令则使用微程序实现。而在现代的 CISC 系统中,譬如 Intel 微处理器,也将一些原先采用微程序实现的指令,改用硬布线实现,以提高 CPU 速度和节省芯片面积。
发布了30 篇原创文章 · 获赞 1 · 访问量 400

猜你喜欢

转载自blog.csdn.net/weixin_46265246/article/details/105192575