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

智能推荐

请使用c++通过遗传算法解决旅行商问题-程序员宅基地

文章浏览阅读60次。我可以向您提供关于使用遗传算法解决旅行商问题的一些指导。首先,需要确定旅行商问题的地图数据,然后编写代码,创建一个遗传算法,然后对算法进行调优,以获得最佳路线。最后,将结果显示在地图上,以便查看最终路线。...

学习JAVA游戏服务器开发需要了解的情况_java游戏服务器开发用到数据库吗-程序员宅基地

文章浏览阅读1.3w次,点赞21次,收藏85次。一,游戏服务器开发的工作介绍近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么原因吧,做为一名几年的游戏服务器开发者,当然是持欢迎态度的,那么我就先介绍一下游戏服务器开发的工作吧,游戏服务器开发具体要做哪些工作呢?1,团队沟通基本上不管做什么开发,都是一个团队来完..._java游戏服务器开发用到数据库吗

PHP开发——Web的世界_php web开发-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏10次。这篇关于PHP的文章主要介绍了PHP的特性以及其在Web开发、CMS系统、电子商务和数据库连结等应用场景。随着云平台、开发工具和移动应用程序等技术的不断发展,PHP将进一步提高其应用广度和深度。未来的PHP将支持更多的技术,并且将成为与Web开发工具、数据库技术、云平台、移动应用程序等相关的技术。此外,PHP未来的发展将更加高效和易用,使其更适合处理大量数据和请求,并充分考虑用户界面和易用性。_php web开发

windows启动tomcat闪退_tomcat windows闪退-程序员宅基地

文章浏览阅读1.2w次。现象:windows下双击tomcat\bin\startup.bat时闪退原因:缺少环境变量导致解决方法:打开编辑tomcat\bin\startup.bat,头部加入以下代码,一个是JAVA目录,一个是Tomcat目录SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_39SET TOMCAT_HOME=D:\hunk\work\apache-tomcat_tomcat windows闪退

数组内存存储_64位平台数组内存-程序员宅基地

文章浏览阅读201次。数组内存存储1. 基本类型数组的初始化2. 引用类型数组的初始化1. 基本类型数组的初始化 int[] array; array = new int[5]; for (int i = 0 ; i<array.length;i++){ array[i] = i + 1 ; } System.out.println(Arrays.toString(array));内存分析:2. 引用类型数组的初始化//定义Person类class Person{ private S_64位平台数组内存

Vue 食用指南-程序员宅基地

文章浏览阅读738次,点赞13次,收藏16次。本文记录了 Yukiii 学习 Vue 期间的心得和相关功能的具体实现及 Vue 的基本使用方法,方便后续开发时的查阅~

随便推点

repo批量创建远端仓库----建立自己的android代码仓库_android repo批量创建gerrit仓库-程序员宅基地

文章浏览阅读3.5k次。转载请注明:http://blog.csdn.net/yanxiangyfg android代码团队开发中,为了团队合作我们需要建立代码仓库,以便进行团队间的协作. android最常用的代码管理工具是git, 那么团队间合作各自需要合入特性,这样就需要一个地方来存放代码,一般又三种方法:1>在github上进行托管2>建立本地代码库,团队所以代码都提交这个本地仓_android repo批量创建gerrit仓库

剑指offer第二版 - 面试题43_剑指offer第二版43-程序员宅基地

文章浏览阅读184次。面试题43: 1-n整数中1出现的次数**题目:**输入一个整数n,求1-n这n个整数的十进制表示中1出现的次数。例如,输入12,1-12这些整数中包含1的数字有1、10、11和12,1一共出现了5次。解题思路:假设数为21345。将21345分为1 ~ 1345、1346 ~ 21345三部分。对于1346 ~ 21345,分析最高位为1,即1出现在万位的次数。如果最高为大于1,则次..._剑指offer第二版43

使用python生成随机数(random模块)_random.random()产生的数-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏17次。使用python生成随机数(random模块)_random.random()产生的数

软件测试全网最全复习总结-别杠,杠就是你对_软件规范化和标准化的原因不包括-程序员宅基地

文章浏览阅读1.1w次,点赞104次,收藏452次。今天仍然拼命看书,因为明天就要考了。学期的成绩就全仗这两天挣,现在更感到考试无用与无聊。——季羡林文章目录概述软件测试分类及流程黑盒测试等价类划分边界值分析法决策表法正交测试法极差法方差法白盒测试单元测试集成测试国际化和本地化测试可靠性测试测试与质量分析报告_软件规范化和标准化的原因不包括

iOS —— use_frameworks! 作用-程序员宅基地

文章浏览阅读1.3k次。通过cocoapods管理应用程序时,在Podfile文件中,**use_frameworks!*cocoapods会生成对应的 frameworks 文件 在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件1、纯OC项目中,通过cocoapods导入OC库时,一般都不使用use_frameworks!2、纯swift项目中,通过cocoapods导入swift库时,必须使用u..._use_frameworks!

Python菜鸟晋级04----raw_input() 与 input()的区别_pycharm没有raw input-程序员宅基地

文章浏览阅读2.5k次。raw_input() 与 input()均是python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子>>> raw_input_A = raw_input("raw_input: ")raw_input: abc >>> input_A = input("Input: ")Input: abcTraceback (most recent ca_pycharm没有raw input

推荐文章

热门文章

相关标签