CPU微指令相关概念_时空无限 csdn-程序员宅基地

技术标签: linux  

第1章 微程序控制器

微程序控制器是一种控制器,同组合逻辑控制器相比较,具有规整性、灵活性、可维护性等一系列优点,因而在计算机设计中逐渐取代了早期采用的组合逻辑控制器,并已被广泛地应用。在计算机系统中,微程序设计技术是利用软件方法来设计硬件的一门技术 。

中文名 微程序控制器
外文名 Microprogram controller
基本思想 按照通常的解题程序的方法
优 点 规整性、灵活性、可维护性
设计技术 利用软件方法来设计硬件
定 义 采用微程序控制方式的控制器

1.1 定义

采用微程序控制方式的控制器称为微程序控制器。所谓微程序控制方式是指微命令不是由组合逻辑电路产生的,而是由微指令译码产生。一条机器指令往往分成几步执行,将每一步操作所需的若干位命令以代码形式编写在一条微指令中,若干条微指令组成一段微程序,对应一条机器指令。在设计CPU时,根据指令系统的需要,事先编制好各段微程序 ,且将它们存入一个专用存储器(称为控制存储器)中。微程序控制器由指令寄存器IR、程序计数器PC、程序状态字寄存器PSW、时序系统、控制存储器CM、微指令寄存器以及微地址形成电路、微地址寄存器等部件组成。执行指令时,从控制存储器中找到相应的微程序段,逐次取出微指令,送入微指令寄存器,译码后产生所需微命令,控制各步操作完成。

1.2 基本概念

微命令和微操作
微命令:控制部件通过控制线向执行部件发出的各种控制命令。它构成控制信号的最小单元 [1] 。
微操作:执行部件接受微命令后所进行的操作。它是由微命令实现的最基本操作 [1] 。
控制部件与执行部件通过控制线和反馈信息进行联系。
微指令和微程序
微指令,在机器的一个CPU周期中,一组实现一定操作功能的微命令的组合。
微程序,实现一条机器指令功能的许多条微指令组成的序列。
控制部件与执行部件通过控制线和反馈信息进行联系。
CPU周期与微指令周期的关系
在串行方式的微程序控制器中:微指令周期 = 读出微指令的时间 + 执行该条微指令的时间
一个CPU周期为0.8μs,它包含四个等间隔的节拍脉冲T1—T4,每个脉冲宽度为200ns。用T4作为读取微指令的时间,用T1+T2+T3时间作为执行微指令的时间。例如,在前600ns时间内运算器进行运算,在600ns时间的末尾运算器已经运算完毕,可用T4上升沿将运算结果打入某个寄存器。与此同时可用T4间隔读取下条微指令,经200ns时间延迟,下条微指令又从只读存储器读出,并用T1上升沿打入到微指令寄存器。如忽略触发器的翻转延迟,那么下条微指令的微命令信号就从T1上升沿起就开始有效,直到下一条微指令读出后打入微指令寄存器为止。因此一条微指令的保持时间恰好是0.8μs,也就是一个CPU周期的时间。 [2]

1.3 组成

微程序控制器主要由控制存储器、微指令寄存器和地址转移逻辑三大部分组成。
控制存储器
控制存储器用来存放实现全部指令系统的微程序,它是一种只读存储器。若指令系统中有多少条机器指令,就有多少微程序。一旦微程序固化,机器运行时则只读不写。其工作过程是:每读出一条微指令,则执行这条微指令;接着又读出下一条微指令,又执行这一条微指令……。读出一条微指令并执 行微指令的时间总和称为一个微指令周期。通常,在串行方式的微程序控制器中,微指令周期就是只读存储器的工作周期。控制存储器的字长就是微指令字的长度,其存储容量视机器指令系统而定,即取决于微程序的数量。对控制存储器的要求是速度快,读出周期要短。 [3]
微指令寄存器
微指令寄存器用来存放由控制存储器读出的一条微指令信息。其中微地址寄存器决定将要访问的下一条微指令的地址,而微命令寄存器则保存一条微指令的操作控制字段和判别测试字段的信息。 [3]
地址转移逻辑
在一般情况下,微指令由控制存储器读出后直接给出下一条微指令的地址,通常我们简称微地址,这个微地址信息就存放在微地址寄存器中。如果微程序不出现分支,那么下一条微指令的地址就直接由微地址寄存器给出。当微程序出现分支时,意味着微程序出现条件转移。在这种情况下,通过判别测试字段P和执行部件的“状态条件”反馈信息,去修改微地址寄存器的内容,并按改好的内容去读下一条微指令。地址转移逻辑就承担自动完成修改微地址的任务。 [3]

1.4 控制原理

微程序控制的基本思想,就是仿照通常的解题程序的方法,把操作控制信号编成所谓的“微指令”,存放到一个只读存储器里.当机器运行时,一条又一条地读出这些微指令,从而产生全机所需要的各种操作控制信号,使相应部件执行所规定的操作 。
微程序控制的基本原理是:
(1)将机器指令分解为基本的微命令序列,在制造CPU时固化在控制存储器CM中,执行一条机器指令时,CPU依次从CM中取出微指令产生微命令。
(2)一条微指令包含的微命令控制实现一步(一个节拍)操作,若干条微指令组成一小段微程序解释执行一条机器指令。 [1]

1.5 执行过程

(1)根据计算机给出的第一条微指令的地址,从控制存储器中取出第一条微指令。
(2)微指令由操作控制部分和顺序控制部分组成。操作控制部分产生微操作控制信号,控制执行部分完成规定的操作。顺序控制部分中的直接顺序控制部分放入微地址寄存器,顺序控制部分的P字段和执行部件反馈的状态条件信息决定修改微地址寄存器中的值。
(3)按地址寄存器中的值从控制存储器中取出下一条微指令,继续第二步,如此循环,直到全部指令执行完毕。

1.6 设计步骤

微程序控制器的设计步骤如下:
(1)根据CPU的结构图描述出每条指令的微操作流程图并综合成总的流程图;
(2)用混合控制法对微命令进行编码;
(3)选择合适的控制和时序;
(4)选用微程序的顺序控制方式为微指令安排微地址;
(5)画出微程序控制器组成框图。 [4]

1.7 组合逻辑控制器和微程序控制器的比较

组合逻辑控制器和微程序控制器,除了操作控制信号的形成方法和原理有差别外,其余的组成部分上没有本质的区别。最显著的差别可归纳为如下两点:
实现方式
微程序控制器的控制功能是在存放微程序的控制存储器和存放当前正在执行的微指令的寄存器直接控制下实现的,而组合逻辑控制器由逻辑电路实现。前者电路比较规整,各条指令控制信号的差别反映在控制存储器的内容上,因此无论是增加或修改(包括纠正设计中的错误或升级)指令,只要增加或者修改内容即可。组合逻辑控制器先用逻辑表达式列出,精简化后用逻辑门电路实现,因而显得零乱复杂,当需要增加或修改指令时很麻烦甚至不可能,因此微程序控制器得到了广泛应用,尤其是指令系统复杂的计算机,一般都采用微程序控制器。 [1]
性能
在同样的工艺条件下,微程序控制的速度比组合逻辑电路速度低,因为执行每条微指令都要从控制存储器(CM)中读取一次,影响了速度,而组合逻辑电路的速度主要取决于电路延迟,因而在高速或超高速计算机中,对影响速度的关键部分如CPU,往往采用组合逻辑电路。近年来,一些新的计算机系统如RISC(精简指令计算机),选用了组合逻辑控制器。 [1]

1.8 参考资料

  1. 李捍东主编 .微机原理与接口技术.重庆:重庆大学出版社,2004:49-51
  2. 微程序控制器 .湖南学院网[引用日期2012-10-12]
  3. 宋红主编.计算机组成原理 .北京:中国铁道出版社,2008:102-103
  4. 陈琳琳编著.计算机组成原理答疑解惑与典型题解.北京:北京邮电大学出版社,2015:190-190

第2章 微指令

本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。
微指令是指在微程序控制的计算机中,同时发出的控制信号所执行的一组微操作。微指令是由同时发出的控制信号的有关信息汇集起来形成的。将一条指令分成若干条微指令,按次序执行就可以实现指令的功能。若干条微指令可以构成一个微程序,而一个微程序就对应了一条机器指令。
中文名 微指令
外文名 microinstruction
作 用微程序控制
定 义 实现一定操作功能的微命令的组合
领 域 计算机
格 式 水平型微指令和垂直型微指令

2.1 定义编辑

微指令是指在机器的一个CPU周期中,一组实现一定操作功能的微命令的组合 [1] ,描述微操作的语句。微命令是指控制部件通过控制线向执行部件发出各种控制命令。操作微指令是描述受控电路的操作语句 , 分支微指令是描述控制电路的分支语句。
一条机器指令的功能是若干条微指令组成的序列来实现的,即一条机器指令所完成的操作分成若干条微指令来完成,由微指令进行解释和执行,这个微指令序列通常叫做微程序。微指令的编译方法是决定微指令格式的主要因素。考虑到速度,成本等原因,在设计计算机时采用不同的编译法 。因此微指令的格式大体分成两类:水平型微指令和垂直型微指令。

2.2 类型

水平型微指令
一次能定义并执行多个并行操作微命令的微指令,叫做水平型微指令。水平型微指令的一般格式如下:控制字段,判别测试字段和下地址字段。按照控制字段的编码方法不同,水平型微指令又分为三种:一种是全水平型(不译法)微指令,第二种是字段译码法水平型微指令,第三种是直接和译码相混合的水平型微指令。
垂直型微指令
微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能,称为垂直型微指令。垂直型微指令的结构类似于机器指令的结构.它有操作码,在一条微指令中只有l-2个微操作命令,每条微指令的功能简单,因此,实现一条机器指令的微程序要比水平型微指令编写的微程序长得多 .它是采用较长的微程序结构去换取较短的微指令结构。
水平型微指令与垂直型微指令的比较
(1)水平型微指令并行操作能力强,指令高效,快速,灵活,垂直型微指令则较差。
(2)水平型微指令执行一条指令时间短,垂直型微指令执行时间长。
(3)由水平型微指令解释指令的微程序,有微指令字较长而微程序短的特点。垂直型微指令则相反。
(4)水平型微指令用户难以掌握,而垂直型微指令与指令比较相似,相对来说,比较容易掌握。

2.3 规范化描述

规范化描述就是在指令系统的微指令描述中尽量减小语句使用的随意性,使整个指令系统的描述具有较强的规律性,并使微操作集中的元素最少。事实上只要微指令描述合理规范,从微程序设计角度来看,所描述的功能都是可以通过ASIC技术实现的。在一条指令的描述中, 指令的微操作步数必须与指令所需的时钟周期数相吻合,分配好各微指令序列所占的时钟数,安排好各微指令组和各微指令序列在整个控制序列中的位置,这是指令系统规范化描述的基础。在同类指令的描述中, 完成相同微功能的微指令序列所占的时钟周期数必须相同, 在控制序列中的分配位置必须合理。例如字除法指令比字节除法指令多8个状态周期,因此每位除法只能占用一个状态周期。再例如操作数长度相同的有符号数除法指令和无符号数除法指令相比多增加 4个状态周期,因此有符号除法中被除数和除数、商和余数的符号化处理,只能分别在2个状态周期中实现,且删除这4个状态周期中的所有微指令 [2] 。

2.4 相关指令

机器指令和微指令的关系
一台数字计算机基本上可以划分为两大部分——控制部件和执行部件。控制器就是控制部件,而运算器、存储器、外围设备相对控制器来说就是执行部件。控制部件与执行部件的一种联系就是通过控制线。控制部件通过控制线向执行部件发出各种控制命令,通常这种控制命令叫做微命令,而执行部件接受微命令后所执行的操作就叫做微操作。控制部件与执行部件之间的另一种联系就是反馈信息。执行部件通过反馈线向控制部件反映操作情况,以便使得控制部件根据执行部件的状态来下达新的微命令,这也叫做“状态测试”。微操作在执行部件中是组基本的操作。由于数据通路的结构关系,微操作可分为相容性和相斥性两种。在机器的一个CPU周期中,一组实现一定操作功能的微命令的组合,构成一条微指令。一般的微指令格式由操作控制和顺序控制两部分构成。操作控制部分用来发出管理和指挥全机工作的控制信号。其顺序控制部分用来决定产生下一个微指令的地址。事实上一条机器指令的功能是由许多条微指令组成的序列来实现的。这个微指令序列通常叫做微程序。既然微程序是由微指令组成的,那么当执行当前的一条微指令的时候。必须指出后继微指令的地址,以便当前一条微指令执行完毕以后,取下一条微指令执行。机器指令和微指令的关系归纳如下:

  1. 一条机器指令对应一个微程序,这个微程序是由若干条微指令构成的。因此,一条机器指令的功能是若干条微指令组成的序列来实现的。简而言之,一条机器指令所完成的操作划分成若干条微指令来完成,由微指令进行解释和执行。
    2.从指令与微指令,程序与微程序,地址与微地址的一一对应关系上看,前者与内存储器有关,而后者与控制存储器(它是微程序控制器的一部分。微程序控制器主要由控制存储器、微指令寄存器和地址转移逻辑三部分组成。其中,微指令寄存器又分为微地址寄存器和微命令寄存器两部分)有关,与此相关也有相对应的硬设备。
    3.一条机器指令对应4个CPU周期,每个CPU周期就对于一条微指令。
    参考资料
  2. 白中英-.计算机组成原理:科学出版社,2012
  3. 宋琦,龚茂康. 微处理器功能的微指令描述[J]. 江苏农学院学报,1997,(01):86-90. .中国知网[引用日期2017-12-14]

第3章 微命令

微命令即控制部件通过控制线向执行部件发出各种控制命令 。在微指令的控制字段中,每一位代表一个微命令。
中文名 微命令
属 性 控制命令

3.1 简介

在微指令的控制字段中,每一位代表一个微命令,在设计微指令时,是否发出某个微命令,只要将控制字段中相应位置成"1"或"0",这样就可打开或关闭某个控制门,这就是直接控制法.
在6.3节中所讲的就是这种方法.但在某些复杂的计算机中,微命令甚至可多达三四百个,这使微指令字长达到难以接受的地步,并要求机器有大容量控制存储器,为了改进设计出现了以下各种编译法.

3.2 方法

字段直接编译法
在计算机中的各个控制门,在任一微周期内,不可能同时被打开,而且大部分是关闭的(相应的控制位为"0").所谓微周期,指的是一条微指令所需的执行时间.如果有若干个(一组)微命令,在每次选择使用它们的微周期内,只有一个微命令起作用,那么这若干个微命令是互斥的.
例如,向主存储器发出的读命令和写命令是互斥的;又如在ALU部件中,送往ALU两个输入端的数据来源往往不是唯一的,而每个输入端在任一微周期中只能输入一个数据,因此控制该输人门的微命令是互斥的.
选出互斥的微命令,并将这些微命令编成一组,成为微指令字的一个字段,用二进制编码来表示, 就是字段直接编译法.
例如,将7个互斥的微命令编成一组,用三位二进制码分别表示每个微命令,那么在微指令中,该字段就从7位减成3位,缩短了微指令长度.而在微指令寄存器的输出端,为该字段增加一个译码器,该译码器的输出即为原来的微命令.
字段长度与所能表示的微命令数的关系如下:
字段长度 微命令数
2位 2~3
3位 4~7
4位 8~15
一般每个字段要留出一个代码,表示本段不发出任何微命令,因此当字段长度为3位时,最多只能表示7个互斥的微命令,通常代码000表示不发微命令.
字段间接编译法
字段间接编译法是在字段直接编译法的基础上,进一步缩短微指令字长的一种编译法.
如果在字段直接编译法中,还规定一个字段的某些微命令,要兼由另一字段中的某些微命令来解释,称为字段间接编译法.
本方法进一步减少了指令长度,但很可能会削弱微指令的并行控制能力,因此通常只作为直接编译法的一种辅助手段.
字段A(3位)的微命令还受字段B控制,当字段B发出b1微命令时,字段A发出a1,1,a1,2,…,a1,7中的一个微命令;而当字段B发出b2微命令时,字段A发出a2,1,a2,2,…,a2,7中的一个微命令,仅当A为000时例外,此时什么控制命令都不产生.
4.常数源字段E
在微指令中,一般设有一个常数源字段E就如指令中的直接操作数一样.E字段一般仅有几位,用来给某些部件发送常数,故有时称为发射字段.
该常数有时作为操作数送入ALU运算;有时作为计算器初值,用来控制微程序的循环次数等.
当前正在执行的微指令,称为现行微指令,现行微指令所在的控制存储器单元的地址称现行微地址,现行微指令执行完毕后,下一条要执行的微指令称为后继微指令,后继微指令所在的控存单元地址称为后继微地址.
所谓微程序流的控制是指当前微指令执行完毕后,怎样控制产生后继微指令的微地址.
与程序设计相似,在微程序设计中除了顺序执行微程序外还存在转移功能和微循环程序和微子程序等,这将影响下址的形成.
下面介绍几种常见的产生后继微指令地址的方法.
(1)以增量方式产生后继微地址.
在顺序执行微指令时,后继微地址由现行微地址加上一个增量(通常为1)形成的;而在非顺序执行时则要产生一个转移微地址.
机器加电后执行的第一条微指令地址(微程序入口)来自专门的硬件电路,控制实现取令操作,然后由指令操作码产生后继微地址.接下去,若顺序执行微指令,则将现行微地址主微程序计数器( PC中)+1产生后继微地址;若遇到转移类微指令,则由 PC与形成转移微地址的逻辑电路组合成后继微地址.
(2)增量与下址字段结合产生后继微地址
将微指令的下址字段分成两部分:转移控制字段BCF和转移地址字段BAF,当微程序实现转移时,将BAF送 PC,否则顺序执行下一条微指令( PC+1).
执行微程序条件转移时,决定转移与否的硬件条件有好几种.例如,“运算结果为零”,“溢出”,“已完成指定的循环次数"等.
我们假设有八种转移情况,定义了八个微命令(BCF取3位),在图中设置计数器CT用来控制循环次数.如在执行乘(或除)法指令时,经常采用循环执行"加,移位”(或减,移位)的方法,指令开始执行时,在CT中置循环次数)每执行一次循环,计数器减1,当计数器为零时结束循环.又考虑到执行微子程序时,要保留返回微地址,因此图中设置了一个返回寄存器RR.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40548182/article/details/113881109

智能推荐

IPD思想指导下的企业研发管理成熟度演进模型-程序员宅基地

文章浏览阅读2.4k次。基于IPD研究(书籍、网络文章、个人实践),参考CMMI框架,输出本研发管理能力成熟度框架。_研发管理成熟度

linux下Js加载so,JavaScript文件加载器LABjs API详解-程序员宅基地

文章浏览阅读478次。在《高性能JavaScript》一书中提到了LABjs这个用来加载JavaScript文件的类库,LABjs是Loading And Blocking JavaScript的缩写,顾名思义,加载和阻塞JavaScript,而它的API script()和wait()则优雅地实现了这两个功能,我在高性能JavaScript 加载和执行一文中也简单讲解了这两个核心API的用法。当然,LABjs还有更多..._so打包到js

Rancher 1.6 实战-程序员宅基地

文章浏览阅读1.7k次。为什么80%的码农都做不了架构师?>>> ..._rancher 1.6

Pycharm+Anaconda 之jupyter notebook内核配置,解决内核不匹配等错误_笔记本内核和代码不匹配-程序员宅基地

文章浏览阅读5.8k次,点赞9次,收藏26次。首先确保已经安装了annaconda和pycharm软件,可百度相关教程。1.安装notebook在独立anaconda环境中,假设环境名为Jupyter,安装notebook,已安装的见下一步。(Jupyter) E:\Pywork> conda install notebook # 或 pip install notebook2.检查ipython是否安装默认安装jupyter notebook包时会安装关联的ipython包,为确保此处无问题,可以检查一下,在Jupyter_笔记本内核和代码不匹配

hive和hadoop的浅显理解_一篇文章了解hadoop hive-程序员宅基地

文章浏览阅读2.8k次。hadoop是一个分布式存储系统,他可以将我们的日志、数据等存储到不同的节点上(当数据十分大的时候),有时候一份数据会被存储到不同机器的不同磁盘上面。那么问题来了:我们想取出这么一整份数据并做对应计算怎么办呢?这个时候,mapreduce就应运而生。它是一个依托于hadoop上的计算引擎,主要就是对数据进行合并汇总等操作,本身并不存储数据。那hive是什么呢?hive是基于hadoop的一个数据仓库工具。由于mapreduce程序比较复杂,故而hive对他做了一层封装。它可以将我们写的hql翻译成_一篇文章了解hadoop hive

npm install安装报错问题解决方案_npm yorkie-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏2次。项目场景:提示:这里简述项目相关背景:例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)问题描述:提示:这里描述项目中遇到的问题:例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据APP 中接收数据代码:@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, bytes, _npm yorkie

随便推点

linux mysql源,linux 安装 mysql8+ rpm源方式-程序员宅基地

文章浏览阅读137次。系统 更新yum upgrade卸载rpm -qa|grep -i mysqlrpm -ev mysql-community-common-5.7.27-1.el7.x86_64 mysql-community-server-5.7.27-1.el7.x86_64 mysql-community-server-5.7.27-1.el7.x86_64 mysql-community-libs-5.7..._yum拉取msyql8的rpm源

Java Reflection Tutorial for Classes, Methods, Fields, Constructors, Annotations and much more_reports all fields methods 哦日期classes,found in the-程序员宅基地

文章浏览阅读1k次。Reflection in java provides ability to inspect and modify the runtime behavior of applications. Reflection is one of the advance topic of core java. Using reflection we can inspect a class,interface_reports all fields methods 哦日期classes,found in the specified

HomeAssistant实现对UPS的数据监控_network ups tools-程序员宅基地

文章浏览阅读4.4k次。之前写在《米家接入HomeKit系列》系列文章的时候,我们讲解了如何使用通过HomeAssistant和HomeBridge来将米家设备接入HomeKit中。细心的同学应该发现我在讲解米家接入HomeKit系列二:通过群辉NAS的Docker搭建HomeAssistant章节最后的配置截图中有个UPS的配置。于是就有玩NAS的小伙伴问我UPS如何接入HomeAssistant。那么今天我就特意写一篇文章给大家介绍下我们怎样才能够将UPS接入到HomeAssistant中进行展示监控。_network ups tools

android 字符串折线图,Android + MPAndroidChart 实现折线、柱形和饼状图-程序员宅基地

文章浏览阅读275次。本文讲讲怎么用 MPAndroidChart 框架实现折线图、柱形图、饼图,并且进行样式设置,达到和宣传图差不多的效果。一开始看到 MPAndroidChart 的各种图表介绍图感觉很好看,但是直接New一个相应图表,仅仅填充数据的话,样式稍微有些丑。经过一番阅览文档才把样式调整得好看些。所以就写了这篇文章作下记录。APP 里实现的最终效果:最终效果引入框架首先是引入框架:Gradle配置一下依赖...

react获取noe4j 数据 用d3js展示_react neo4j-程序员宅基地

文章浏览阅读564次。import neo4j from 'neo4j-driver' async getKnowMap(cypher, user) { // console.log(cypher); // neo4j数据展示 var config = { container_id: "viz", server_url: "bolt://192.168.51.109:7687", server_use_react neo4j

#137: expression must be a modifiable lvalue问题处理//字符串数组赋值问题-程序员宅基地

文章浏览阅读5.1w次,点赞12次,收藏27次。在嵌入式软件调试时,当我们Debug时出现#137: expression must be a modifiable lvalue是因为我们错误的赋值导致,请仔细检查等号“=”左右的值是否可以赋值,例如char a[] ; //定义一个字符串数组a ;char b[] = "123456" ; //定义一个字符串数组b,并初始化赋值;a = b ; !!!!如果想把b的值给a,直接赋值是不对的像上面的赋值就不可以,当然解决的方法也有很多例如最好理解的循环把b赋值给afor(int i_expression must be a modifiable lvalue

推荐文章

热门文章

相关标签