操作控制和顺序控制
这就构成了整个微指令的三个部分
访存指令就是实现对主存中的数据进行访问或存储
一、 操作控制字段是由各种微命令来构成的,这些微命令怎么来设计?
设计出来微指令之后,设计微指令格式就要来编写微指令,进而来设计我们的微程序控制器的各种器件,包括地址转移逻辑电路,微地址寄存器,微命令寄存器和操作控制器,这一部分就属于设计的操作控制器单元
旧教材
绘制总体的数据通路框图,是一个三总线的结构,
所以上图是一个三总线的结构。
上课的教材是一个单总线的结构,所有的器件都连在一根总线上,不分数据地址还是指令,一根指令有好处有坏处,好处就是简单,有一个设备占据了总线,别的设备就不能用了,所以这就导致了取指分成了4个T周期,数据不断流转,为了防止数据不出错,所以要分成不同的T周期来完成。
自加4是因为它这个通路中的内存条的数据单元,一个内存单元的长度是8位,开始MIPS指令是32位,所以一条指令要放在4个内存单元中,所以下一条指令取指是加4。
3总线的情况下
取指的行为不同
这里是双态的取指结构,
右边,这个图构造了一个双态取指结构,
数据总线是最繁忙的,连接的器件也是最多的,比如ALU的输出,寄存器的输出,形式地址A的输出……这些都要连接数据总线。一个周期内数据总线上只能有一个数据在上面流转,所以这些所有连接到数据总线上的器件都增加了一个三态门,用来控制开关,打开三态门,数据就可以流通到数据总线。
取指怎么取呢?
三总线和单总线是有区别的,在取指周期,计算或者是执行周期上都有区别,它的冲突比单总线要少,花费的时间也要少。
三态门在选择的时候怎么选择?
在编程的时候我们要设计一个多路选择器,选谁就把谁选通,不同于译码器,在电子教材中有说明。
这个逻辑结构图很稳定,
(微指令的三个部分:各种微命令,P测试和后续微地址)
控制存储器里面放微指令,所有的微指令都放在控制存储器里面;
微地址寄存器用来保存下一条微指令的地址;
微命令寄存器用来存放P字段和控制字段;
地址转移逻辑电路用来形成下一条有效的微地址(后续微地址?);
四个器件构成。
怎么协调工作呢?
怎么取指令?
下一条微指令怎么取出来?
一般来说,在T4周期内,要形成微指令的微地址,在T2周期的上升沿到来的时候将读出的微指令打入微指令寄存器,这样就保证在不同的节拍上做不同的事,
先设计汇编指令格式,再把它手工翻译成机器指令,
课程设计用到的所有汇编指令的集合就构成一个指令系统。
设计多少汇编指令取决于选择的题目,用到多少种汇编指令就设计多少条。
x86的汇编格式和ARM不一样,这样的指令格式都叫汇编指令(有自己的助记符,有自己的地址码)
一定要写指令功能说明
Rd目的寄存器
Rs源寄存器
STO访存指令
STOI间接访存指令
P测试就是和有条件的转移来结合的(JNZ,结果不为零就跳转,所有有两个分支,怎么判断结果是不是0呢?这里缺失了一条指令)
汇编指令怎么翻译成机器指令呢?
因为不翻译成机器指令就没有办法写进内存条,看上图可知指令是16位的,
最后在运行的时候,把机器指令写入到ROM(指令Cache)中
所有的CPU都是定长的,4个T周期构成
时序产生器说白了就是计数器,每来一个时钟周期就计数一次,对相应的输出值设置为1
00,01,10,11
整个逻辑电路图实际上是3层,
最高这一层就是最终的这个总体框架图
但是在这个控存中还有两层
地址转移逻辑还有一层
总共是3层
在这个模型上设计的汇编指令和机器指令
这些机器指令对应的指令周期图应该怎么写呢?
每一个方框代表一个CPU周期,课本上的每一个方框代表应该时钟周期,这个的区别不重要,重要的是方框里的内容。
第一个周期一定是取指周期,PC送到指令的地址总线上,read 指令Cache(ROM),把读到的指令内容经由指令总线送到IR中,PC+1,再经过一次译码操作完成取指。
这条指令取出来译码了,那要进行什么操作也就清楚了,如果是IN输入指令,就转向IN的那条流程。
P测试有两种,
取指方框末尾的00表示设置后续微地址的值是00,根据P(1)测试来修改后续微地址,从而控制执行哪一个指令。
这里取指后有一个P(1)测试,根据取出来的指令的操作码,来修改对应的后续微地址中的某几位的值,然后来转向对应的内容,比如取出来的指令是IN1,就要把后续微地址从00改为01,如果取出来的指令是JNZ,P(1)测试就要做到把后续微地址从00改为07,这样才能取出谁执行谁。
JNZ指令里有一个P(2)测试,是有条件的转移。
前面有一个空指令,前面讲过每一个方框图代表一个T周期/CPU周期(看教材编写),但是P测试不会独立存在,P测试只能紧跟在上一条微指令中,而且同一条微指令只能做一种P测试,要么做P(1),要么做P(2),所以如果没有这条空指令,会发现P(2)和P(1)都挂载在了取指指令上,发生了冲突,所有为了保证P(2),P(1)分开,一定要加一个空指令,这个空指令的作用就是挂载P(2)测试。
JNZ指令是根据结果是否为0来决定是否跳转,需要判断ZF的值,跳转就是把指令中的形式地址A送到PC中,出现两路分支。
这里的P(2)测试,结果只能是1或0,所以有且仅有两路。
P(1)测试是对操作码的判断,操作码是四位的,所以分支最多有16种。
(第二节课重点讲!!!!!!!!!!!!!!!!!!)
根据设计框图的内容来设计微指令(包括操作控制字段,顺序控制字段)
设计出微指令格式后,再根据刚才的指令周期图有多少个方框就要编写多少个微指令(即赋值),注意,微命令中有一些是1有效,有一些是0有效。
汇编代码->机器指令->微指令
软件层面完成。
硬件层面:(地址转移逻辑电路)
逆时针旋转90°其实就是之前的总体的数据通路框图。直接借鉴这个图,但要注意看跳转指令是否相同。有好几层。不难。最好一次性画完,一气呵成。
ROM中放的就是编写好的机器指令,要把它初始化进去。
控制存储器里面就要把微指令写进去。
两个都初始化进去后,这张图就可以开始运行了。
通过OUT来输出结果,如果结果错了,就调试,看看之前的错了没有。