目录
- 一、微程序控制器的核心思想
- 二、微程序控制器的主要组成部分
- 三、微程序控制器的工作过程(重中之重)
- 四、一个简单的例子
一、微程序控制器的核心思想
首先,再次强调其核心思想:将一条机器指令的执行,转化为一段由更简单的“微指令”组成的“微程序”的执行。 这些微程序预先存放在一个专用的ROM(只读存储器)中。
二、微程序控制器的主要组成部分
微程序控制器可以看作一个专用于产生控制信号的小型、专用计算机系统。其完整的数据流和核心组件交互如下图所示:
flowchart TD
subgraph CPU及其它硬件direction LRA[ALU<br>寄存器组等]G[状态标志 Register<br>零、进位、溢出等]
endsubgraph 微程序控制器核心组件B[控制存储器<br>CM]C[微指令寄存器<br>μIR]D[微地址寄存器<br>μAR]E[微地址形成部件<br>μAG]
endF[机器指令寄存器<br>IR]F -- 操作码 Opcode --> E
C -- 下地址字段 --> E
G -- 状态条件 --> E
E -- 下一条微地址 --> D
D -- 当前地址 --> B
B -- 微指令字 --> C
C -- 微命令信号 --> A
- 控制存储器 (Control Store, CS)
- 功能:微程序的仓库。这是微程序控制器的核心存储单元,其内部存储了CPU指令系统中所有指令对应的微程序。
- 特点:
- 只读性:通常由ROM(只读存储器)实现。因为其内容在CPU设计制造时就已经固化好了,断电后内容也不会丢失。
- 高速性:由于它处于CPU执行的关键路径上,其访问速度直接决定CPU主频,因此必须由非常高速的存储电路构成。
- 可更新性:在一些现代CPU中,也可能采用EPROM或EEPROM,允许制造商通过“微码更新”来修复CPU设计中的逻辑错误(Bug)。
- 工作方式:它是一个存储器,根据输入的地址,输出该地址存储的微指令字。
- 微指令寄存器 (Microinstruction Register, μIR)
- 功能:当前微指令的暂存器。它用于存放从控制存储器中读出的、当前时钟周期(微周期)内正在执行的微指令。
- 构成:它保存的微指令字通常包含两大部分:
- 微命令字段 (Control Field):这是微指令字的主要部分,由许多个二进制位组成。每一位(0或1)都直接对应一个具体的控制信号(微命令),用于打开或关闭某个数据通路门、选择ALU操作功能等。例如,位0为1表示“开启寄存器A输出门”,位1为1表示“ALU执行加法操作”。
- 下地址字段 (Next-Address Field):用于指明下一条要执行的微指令在控制存储器中的地址。这个字段为微程序提供了分支和跳转的能力。
- 工作方式:在一个微周期开始时,从控制存储器读出的微指令被装入μIR。在整个微周期内,μIR的内容保持稳定,其微命令字段的输出信号持续有效地控制着数据通路。
- 微地址寄存器 (Microaddress Register, μAR)
- 功能:微程序的指针。也叫微程序计数器(μPC)。它保存的是下一条要读取的微指令在控制存储器中的地址。
- 作用:它的功能类似于主CPU中的程序计数器(PC),但PC指向的是下一条机器指令在内存中的地址,而μAR指向的是下一条微指令在控制存储器中的地址。它决定了微程序的执行流程。
- 工作方式:在每个微周期结束时,微地址形成部件会计算出的新地址被加载到μAR中。下一个微周期一开始,μAR中的地址就会送交给控制存储器,以读取下一条微指令。
- 微地址形成部件 (Microaddress Generation Unit, μAGU)
- 功能:下一条微指令地址的决策器。这是微程序控制器的“大脑”,负责计算下一条微指令的地址。
- 输入:(这是一个多路选择器+逻辑电路的组合)
- 来自机器指令寄存器 (IR) 的操作码 (Opcode):当开始执行一条新机器指令时,μAGU根据其操作码,翻译成该指令对应微程序在CM中的入口地址(首地址)。这是最重要的输入之一。
- 来自微指令寄存器 (μIR) 的下地址字段:当前微指令已经“建议”了下一个地址(例如,分支目标地址)。
- 来自CPU的状态标志 (Status Flags):如ALU运算后产生的 Zero(零标志)、Carry(进位标志)、Overflow(溢出标志)等。这是实现微程序内条件分支的依据。
- 输出:根据上述输入,通过内部逻辑计算出的下一个微地址,输出给μAR。
- 工作方式:μAGU根据当前状态,决定下一个地址的来源:
- 初始转移:根据IR中的操作码,映射出微程序入口地址。
- 顺序执行:输出“当前地址 + 1”。
- 条件分支:检查状态标志,如果条件满足,则采用μIR“下地址字段”提供的分支地址;否则顺序执行。
- 循环与跳转:无条件地采用“下地址字段”提供的地址。
- 结束返回:当一条机器指令的微程序执行完毕,μAGU会输出“取指周期”微程序的固定入口地址,以开始下一条机器指令的取指。
- (隐含的)顺序控制逻辑
- 功能:微周期的节拍器。它负责生成控制存储器等部件的读/写控制信号,并控制整个微程序执行流程的时序节拍。
- 工作方式:它接收系统主时钟信号,产生相应的时序控制信号,确保在每个时钟周期内,“将地址送入μAR -> 从CM读取微指令 -> 将微指令装入μIR -> 发出微命令 -> 计算下地址 -> 将新地址加载到μAR”这一系列操作能够同步、有序地完成。
总结
这五个组件精密协作,将一个复杂的“执行机器指令”问题,转化为一个简单的“循环读取和执行微指令”的问题。微程序控制器的核心优势就在于这种“化繁为简”的规整性,它将控制器的设计从复杂的硬布线逻辑设计,转变为了更类似于软件编程的微程序编写工作,极大地提高了设计的灵活性和可靠性。
三、微程序控制器的工作过程(重中之重)
微程序控制器的工作过程是一个循环,通常称为微周期,下图清晰地展示了从机器指令到微指令执行的完整流程:
flowchart TDA[开始执行一条新机器指令] --> B[取指与译码<br>PC指向的地址取指令到IR<br>译码后得到操作码Opcode]B --> C[确定微程序入口地址<br>μAGU根据Opcode计算出<br>对应微程序的首地址]C --> D[微地址寄存器μAR<br>装载首地址]D --> E[进入微程序执行循环]subgraph E[微程序执行循环]F[读取微指令<br>根据μAR的地址<br>从控制存储器CM中读取微指令]F --> G[装载微指令<br>将读出的微指令送入<br>微指令寄存器μIR]G --> H[发出微命令<br>μIR中的微命令字段<br>产生控制信号驱动硬件执行]H --> I[形成下一条微指令地址<br>由μAGU根据μIR的下地址字段<br>状态标志等计算下一个地址]I --> J[更新μAR<br>将新地址载入μAR<br>为下一个微周期做准备]J --> K{微程序执行完毕?}K --否--> FendK --是--> L[微程序执行结束<br>返回初始状态<br>准备执行下一条机器指令]L --> B
关键点:
- 首地址生成:当一条新指令被取到IR后,其操作码会通过μAGU被翻译成该指令对应微程序在CM中的起始地址。这就像根据书名找到它在图书馆书架上的第一个位置。
- 顺序执行:在微程序内部,如果只是简单顺序执行,下地址通常就是当前地址+1。
- 分支与跳转:微程序内部也可以有“循环”和“条件判断”。μAGU会根据状态标志位(如ALU的运算结果)和当前微指令中的分支字段,来决定下一个地址是顺序执行还是跳转到一个新地址。这使得微程序也非常灵活。
- 执行完毕:每条微程序的最后一条微指令,其“下地址”会指向“取指周期”的微程序入口地址,从而完成本轮执行,开始下一条机器指令的取指工作。
四、一个简单的例子
假设机器指令 ADD R1, R2
的微程序由3条微指令组成:
- 微指令1(地址0x00):
- 微命令:打开寄存器R2的输出门,将数据送入ALU的一个输入端。
- 下地址:0x01
- 微指令2(地址0x01):
- 微命令:打开寄存器R1的输出门,将数据送入ALU的另一个输入端,并命令ALU执行加法。
- 下地址:0x02
- 微指令3(地址0x02):
- 微命令:打开ALU输出端的门,将结果写回寄存器R1。
- 下地址:0x00(指向“取指”微程序,开始下一条指令)
执行过程:
IR中的ADD
操作码让μAGU计算出地址0x00 -> μAR被设为0x00 -> 取出微指令1到μIR并执行 -> μAGU计算出下地址0x01 -> μAR被更新为0x01 -> 取出并执行微指令2 -> ... 如此循环,直到执行完微指令3,μAR被指向0x00,开始为下一条机器指令工作。
希望这个详细的分解和流程图能让你对微程序控制器有一个透彻的理解!