计算机组成原理——课设

课程设计实验报告

一、目的和要求

1.1 实验目的

深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。

1.2 实验要求

  1. 根据内容自行设计相关指令微程序(要求用最少的微指令条数实现机器指令的功能,以提高机器指令的执行速度, 同时应注意降低指令的复杂度,提高指令的可用性、友好程度及兼容性);
  2. 设计测试程序、实验数据并上机调试;
  3. 设计报告内容:①设计目的 ②设计内容 ③微程序设计(含指令格式、功能、设计及微程序) ④实验数据(测试所设计指令的程序及结果);
  4. 课程设计报告交云班课。

二、实验环境

电脑1台、TEC-2实验系统模拟软件1套/ TEC-2机1台;

三、具体内容

3.1 实验原理

3.1.1 微程序控制器的基本组成

微程序控制器主要由控制存储器、微指令寄存器PLR和微程序定序器Am2910及其配套电路三部分组成。其具体组成部件及它们相互间的逻辑关系,如下图3-1所示。

图3-1  微程序控制器的基本组成

(1)控制存储器

微程序控制器最核心的部分,用于存放TEC-2机的微程序。由56位组成,用7片74LS6116随机读写的8位×2048字的内存芯片实现。

其内容在刚加电时不定,加电后首先从2片ROM(LS2716芯片)中读出固化的、用于实现53条机器的指令做程序,经组织后写入这一控制存器,实现装入微码操作。其后,从监控程序的零地扯开始执行指令,完成TEC-2机的启动过程。由于TEC-2要支持动态微程序设计,即允许实验人员把自己设计的微程序写进控存,故要求存储器可读写。所以,我可以在TEC-2启动时,用LDMC指令按规定的办法向控制存储器写入新的微程序,以实现新的机器指令。从简化逻辑框图我们可以看出,控制存储器的地址为µRA9-0,读出的信息送微指令流水线寄存器PLR。

(2)微指令寄存器PLR

由7片8位的寄存器芯片(6片LS374和1片LS273)组成,用于存放当前微指令内容。读出的微指令将通过CP脉冲,打入其中。一条微指令的内容通常由下地址和控制信号(微命令)两部分组成。下地址可能又被分成几个小字段,它们被用于控制、形成、或直接提供下一条微指令的地址,是供给控制器部件本身使用的。微命令也由若干个小字段组成,提供对计算机其它功能部件,如运算器、主存、输入/输出设备的控制信号。

(3)微程序定序器Am2910器件及其配套电路

Am2910芯片的核心功能是依据机器的运行状态与当前微指令的有关内容等,正确地形成下一条微指令的地址,以保证微程序按要求的微指令序列关系自动地逐条衔接执行。

其内部结构如下:

图3-2  Am2901芯片的内部组成

Am2910包括一个四输入的多路地址选择器,用来从寄存器/计数器(R),直接输入(D),微程序计数器(μPC)或微堆栈(F)四个输入中,选择其一作为下一条微指令的地址。

寄存器/计数器R:由12个D型触发器组成。当用作寄存器时,用于保存一个微地址,实现微程序转移;用作计数器时,具有减一功能,用于控制微程序的循环次数。

微程序计数器:由12位的增量器和12位的寄存器μPC组成。当增量器的进位输入C1为高电平时,多路器的输出Y加1后装入μPC(即 μPC←Y+1),用于实现微程序的顺序执行;当C1为低电平时,多路器的输出Y直接装入μPC(即 μPC ←Y),用于实现同一条微指令的多次执行。

微堆栈:由5字×12位的寄存器堆栈和微堆栈指针SP组成,用于保存微子程序调用时的返回地址和微程序循环的首地址。SP总是指向最后一次压入的数据,故执行微程序循环时,允许不执行弹出操作而直接访问微堆栈的栈顶。当微堆栈中的数据达到5个时,就发出微堆栈已满信号(/FULL=0),此时任何压入操作都将覆盖掉栈顶的原有数据。

AM2910输出3个使能信号:/PL、/MAP和/VECT,用以决定直接输入D的来源。当/PL有效时(即/PL=0),D来源于微指令的下地址字段,用于实现微程序转移;当/MAP有效时(即/MAP=0),D来源于MAPROM,用于实现从机器指令的操作码找到相应的微程序段首地址的转移;当/VECT有效时(即/VECT=0),原意来源于中断向量,现用于接收手拨微地址。

命令译码器接收外部送来的命令码I3~I0,条件输入/CC和条件允许/CCEN信号,并对其译码,产生芯片内工作需要的控制信号,和外部要用的三个控制选择信号/PL、/MAP和/VECT。

3.1.2 TEC-2机支持的指令格式

TEC-2机类PC机基本指令系统,采用6位操作码。最多支持64条基本指令,其中53条指令已由设计者实现,其相应微程序固化在ROM芯片中;其余11条实验人员自行设计实现。

TEC-2机的基本指令格式比较固定,具体如下图所示:

图3-3  TEC-2机支持的指令格式

第一个指令字的最高6位是操作码。9、8 两位是条件码,值为00、01、10和11分别选择以处理机状态字中的C、Z、V和S的值作判断条件。最低8位分成两个4位的字段:

(1)用于给出所用的通用寄存器编号。对双操作数指令,给出目的操作数与源操作数所在的寄存器编号;对单操作数指令,只用某一个4位字段。

(2)用于给出输入输出指令的端口地址。

(3)用于给出相对寻址的位移量,位移量用8位补码表示,其范围从-128到+127之间,因此相对地址应在当前指令地址向前向后总共256个字的范围之内。

3.1.3 TEC-2微指令格式

图3-4  TEC-2微指令格式

(1)B55-B46:此8位表示下址。

(2)B43-B40:此4位表示CI3-CI0,用于选择AM2910的控制功能,具体规定如下:

表3-1  4位CI3-CI0的控制功能

(3)B39-B36:B39-B37表示SCC,B36表示SC,这4位构成AM2910的条件码,形成条件输入位/CC,具体规定如下:

表3-2  3位SCC与1位SC的控制功能

(4)B34-B32:此3位表示SST,用于设置标志位,具体规定如下:

表3-3  3位SST的控制功能

(5)B31、B27、B23:此3位分别表示/MIO、REQ、/WE,用于控制存储器的读写模式,具体规定如下:

表3-4  3位MIO、REQ和WE的控制功能

(6)B30-B28、B26-B24、B22-B20:这3组4微码分别表示MI8-6、MI5-3、MI2-0,用于控制运算器AM2901的功能,具体规定如下:

表3-5  9位MI8-MI0的控制功能

(7)B19-B16、B15-B12:这两组4位微码分别表示ALU的A口和B口地址。

(8)B11-B10:表示SCI,用于设置运算器AM2901最低位的进位,具体规定如下:

表3-6  两位SCI的控制功能

(9)B9-B8:表示SSH,用于控制运算器AM2901移位器的功能,具体规定如下:

表3-7 两位SSH的控制功能

(10)B7、B3:分别表示SA和SB,用于控制运算器AM2901 A口和B口地址的来源,具体规定如下:

表3-8  两位SA和SB的控制功能

(11)B6~B4、B2~B0:分别表示DC1和DC2,用于控制送往内部总线IB的数据来源和接收来自内部总线IB数据的寄存器,具体规定如下:

表3-9  3位DC1和3位DC2的控制功能

3.2 实验内容一

3.2.1 实验要求

把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR1中。

指令格式:D5××,ADDR1,ADDR2,三字指令(控存入口100H)

指令功能:[ADDR1]=[ADDR1]-[ADDR2]

3.2.2 微程序流程图

3.2.3 微码编写

顺序

微指令

微码

说明

1

PC—>AR, PC+1—>PC

0000 0E00 A0B5 5402

将当前PC指向的ADDR1的地址送入AR;PC指向ADDR2

2

MEM—>IP,MEM—>AR

0000 0E00 30F0 6002

将ADDR1送入IP和AR

3

MEM—>Q

0000 0E00 00F0 0000

将地址为ADDR1的内存单元的内容送入Q寄存器

4

PC—>AR,PC+1—>PC

0000 0E00 A0B5 5402

将ADDR2的地址送入AR;将PC指向下一条指令的操作码

5

MEM—>AR

0000 0E00 10F0 0002

将ADDR2送入AR

6

Q-MEM—>IPnew,IPold—>AR

0000 0E00 21E6 6002

计算(ADDR1)-(ADDR2)并将结果作为IP新值;将IP的旧值ADDR1送入AR

7

IP—>MEM,CC#=0,3# A4H

0029 0300 1046 0010

将(ADDR1)-(ADDR2)送入地址为ADDR1的内存单元;将CC置0,强制跳转到A4H,进行中断处理并结束微程序

1)PC>AR, PC+1>PC

要实现此条微指令,可让ALU计算0+PC+1,将结果送入PC,并使AM2901输出PC的旧值并送入AR,因此可设置如下微码:

B55~B45(下址):0x0,该条微指令顺序执行,下地址字段不使用,将其置0即可;

B43~B40(CI3~CI0):0xE,设置AM2910功能为顺序执行;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x5,该条微指令无需读写主存储器,因此将读写模式设置为5,即不操作;

B30~B26(BI8-6):0x2,将ALU输出送入B口地址指向的寄存器,并使AM2901输出A口地址指向的寄存器内容;

B26~B24(MI5-3):0x0,选择ALU的运算功能为R+S;

B22~B20(MI2-0):0x3,设置ALU中R口数据为0,S口数据来源于B口地址;

B19~B16(A口地址):0x5,设置A口地址指向R5,即PC;

B15~B12(B口地址):0x5,设置B口地址指向R5,即PC;

B11~B10(SCI):0x1,设置ALU输入进位为1,即执行INC操作;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,因此将SST置0;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x0,该条微指令不使用内部总线,故将DC1置0即可;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x2,将AM2901的输出送入AR。

因此,该条微指令的微码为0000 0E00 A0B5 5402

2)MEM>IP,MEM>AR

要实现此条微指令,可让ALU计算MEM+0,并将结果送入IP;然后让AM2901输出ALU的运算结果MEM,并送入AR,因此可设置如下微码:

B55~B45(下址):0x0,该条微指令顺序执行,下地址字段不使用,将其置0即可;

B43~B40(CI3~CI0):0xE,设置AM2910功能为顺序执行;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x1,读写模式设置为1,执行存储器读操作;

B30~B26(BI8-6):0x3,将ALU输出送入B口地址指向的寄存器,并使AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x0,选择ALU的运算功能为R+S;

B22~B20(MI2-0):0x7,设置ALU的R口接收数据总线的数据MEM,S口数据为0;

B19~B16(A口地址):0x0,AM2901 A口不使用,将其置0;

B15~B12(B口地址):0x6,设置AM2901的B口地址为6,即IP;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,因此将SST置0;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x0,该条微指令需要读取内存,禁止DC1译码,故将其置0;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x2,将AM2901的输出送入AR。

因此,该条微指令的微码为0000 0E00 30F0 6002

3)MEM>Q

要实现该条微指令,可让ALU计算MEM+0,并将结果F送入Q,微码设置如下:

B55~B45(下址):0x0,该条微指令顺序执行,下地址字段不使用,将其置0即可;

B43~B40(CI3~CI0):0xE,设置AM2910功能为顺序执行;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x1,读写模式设置为1,执行存储器读操作;

B30~B26(BI8-6):0x0,将ALU的运算结果F送入Q,并使AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x0,选择ALU的运算功能为R+S;

B22~B20(MI2-0):0x7,设置ALU的R口接收数据总线的数据MEM,S口为0;

B19~B16(A口地址):0x0,AM2901的A口不使用,置0即可;

B15~B12(B口地址):0x0,AM2901的B口不使用,置0即可;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,因此将SST置0;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x0,该条微指令不使用内部总线,将其置0即可;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x0,该条微指令不使用内部总线,将其置0即可。

因此,该条微指令的微码为0000 0E00 00F0 0000

4)PC>AR,PC+1>PC

同第一条微指令,微码为0000 0E00 A0B5 5402

5)MEM>AR

要实现该条微指令,可让ALU计算MEM+0,并使AM2901输出ALU的运算结果F并送入AR,因此可设置如下微码:

B55~B45(下址):0x0,该条微指令顺序执行,下地址字段不使用,将其置0即可;

B43~B40(CI3~CI0):0xE,设置AM2910功能为顺序执行;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x1,读写模式设置为1,执行存储器读操作;

B30~B26(BI8-6):0x1,设置ALU的输出F不写入任何单元,且AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x0,选择ALU的运算功能为R+S;

B22~B20(MI2-0):0x7,设置ALU的R口接收数据总线的数据MEM,S口为0;

B19~B16(A口地址):0x0,该条微指令不使用AM2901的A口,置0即可;

B15~B12(B口地址):0x0,该条微指令不使用AM2901的B口,置0即可;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x0,该条微指令需要读内存,禁止DC1译码,置0即可;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x2,将AM2901的输出送入AR;

因此,该条微指令的微码为0000 0E00 10F0 0002

6)Q-MEM>IPnewIPold—>AR

要实现该条微指令,可让ALU计算Q-MEM,将结果F送入IP,然后使ALU输出IP的旧值并送入AR,因此可设置如下微码:

B55~B45(下址):0x0,该条微指令顺序执行,下地址字段不使用,将其置0即可;

B43~B40(CI3~CI0):0xE,设置AM2910功能为顺序执行;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x1,读写模式设置为1,执行存储器读操作;

B30~B26(BI8-6):0x2,将ALU的运算结果F送入B口指向的寄存器,并使AM2901输出A口指向的寄存器的内容;

B26~B24(MI5-3):0x1,选择ALU的运算功能为S-R;

B22~B20(MI2-0):0x6,设置ALU的S口接收数据总线的数据MEM,R口接收Q值;

B19~B16(A口地址):0x6,设置AM2901的A口指向IP;

B15~B12(B口地址):0x6,设置AM2901的B口指向IP;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x0,该条微指令需要读内存,禁止DC1译码,置0即可;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x2,将AM2901的输出送入AR。

因此,该条微指令的微码为0000 0E00 21E6 6002

7)IP>MEM,CC#=0,3# A4H

为实现IP->MEM,可以让ALU计算0+IP,并让AM2901输出ALU的运算结果F,先通过内部总线送入外部总线,再通过外部总线写入内存。为了实现CC#=0,3# A4H,可以使用AM2910的条件转移功能,将\overline{CC}强制置0,并将下址设置为A4H,从而让AM2910强制跳转到A4H,因此可编写如下微码:

B55~B45(下址):0xA4,该条微指令需跳转到A4H响应可能的中断,因此将下地址设置为A4H;

B43~B40(CI3~CI0):0x3,设置AM2910功能为条件转移;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x0,将读写模式设置为0,执行存储器写操作;

B30~B26(BI8-6):0x1,设置AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x0,设置ALU的运算功能为R+S;

B22~B20(MI2-0):0x4,设置ALU的R口接收0,S口接收A的值;

B19~B16(A口地址):0x6,设置AM2901的A口地址指向IP;

B15~B12(B口地址):0x0,AM2901的B口不使用,置0即可;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x1,将AM2901的输出送入内部总线;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x0,寄存器不接收来自内部总线的数据。

因此,该条微指令的微码为0029 0300 1046 0010

故该微程序的微码为:0000 0E00 A0B5 5402 0000 0E00 30F0 6002 0000 0E00 00F0 0000 0000 0E00 A0B5 5402 0000 0E00 10F0 0002 0000 0E00 21E6 6002 0029 0300 1046 0010。

3.2.4 运行结果

运行步骤:

1、用“E”命令将微码写入内存

        用E100命令在内存中地址为0100H的单元开始,写入新指令微程序对应的微码;

2、用“A”命令输入汇编程序,并用“G”命令执行输入的程序

        MOV R1,100;MOV R2,7;MOV R3,100;LDMC;RET五条指令,将内存中地址从0100H开始的7条微指令,装入到控存中地址从0100H开始的单元。

3、用“E”命令将指令写入内存

        因为新添加的指令没有助记符,所以用E200命令将指令D500 0300 0301 AC00写入地址从0200H开始的内存单元中。其中,D5为该指令的操作码,0300为第一个操作数的地址,0301为第二个操作数的地址,AC00为RET指令的操作码。

4、用“E”命令编辑操作数的内容

        用E300命令将地址为0300H、0301H的内存单元的内容,分别修改为450H和230H,即实现(ADDR1)=450H,(ADDR2)=230H。

5、用“G”命令执行输入的程序,并用“D”命令查看程序执行的结果

        用G800命令执行刚刚写入的指令,用D0300查看地址从0300H开始的内存单元内容。

运行结果:

图3-5  实验内容一运行结果

[0300]=0220H,等于450H-230H的运算结果。因此,我们可以确定:指令功能正常,微程序编写正确。

3.实验内容

3.3.1 实验要求

把立即数DATA传送至地址为ADDR的内存单元中保存。

指令格式:D8××,ADDR,DATA,三字指令(控存入口110H)

指令功能:[ADDR]←DATA

3.3.2 微程序流程图

3.3.3 微码编写

顺序

微指令

微码

说明

1

PC—>AR, PC+1—>PC

0000 0E00 A0B5 5402

将当前PC指向的ADDR的地址送入AR;PC指向DATA

2

MEM—>IP

0000 0E00 30F0 6000

将ADDR送入IP

3

PC—>AR, PC+1—>PC

0000 0E00 A0B5 5402

将DATA的地址送入AR;PC指向下一条指令的操作码

4

MEM—>IPnew, IPold—>AR

0000 0E00 20f6 6002

将DATA作为IP新值;将IP的旧值ADDR送入AR

5

IP—>MEM, CC#=0,3# A4H

0029 0300 1046 0010

将立即数DATA写入地址为ADDR的内存单元;再将CC置0,强制跳转到A4H,进行中断处理并结束微程序

1)PC>AR, PC+1>PC

与3.2.3(1)的微指令一致,其微指令的微码为0000 0E00 A0B5 5402

2)MEM>IP

要实现该条微指令,可让ALU执行MEM+0,并将结果送入IP,设置微码如下:

B55~B45(下址):0x0,该条微指令顺序执行,下地址字段不使用,将其置0即可;

B43~B40(CI3~CI0):0xE,设置AM2910功能为顺序执行;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x1,将读写模式设置为1,执行存储器读操作;

B30~B26(BI8-6):0x3,将ALU的运算结果送入B,AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x0,选择ALU的逻辑功能为R+S;

B22~B20(MI2-0):0x7,设置ALU的R口接收数据总线上的数据MEM,S口接收0;

B19~B16(A口地址):0x0,该条微指令不使用AM2901的A口,置0即可;

B15~B12(B口地址):0x6,设置AM2901的B口地址指向IP;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x0,该条微指令不使用内部总线,置0即可;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x0,该条微指令不使用内部总线,置0即可。

因此,该条微指令的微码为0000 0E00 30F0 6000

3)PC>AR, PC+1>PC

与3.3.1(1)一致,其微指令的微码为0000 0E00 A0B5 5402

4)MEM>IPnew, IPold>AR

要实现该条微指令,可以让ALU执行0+IP运算,并将结果作为IP新值;同时让AM2901输出IP的旧值,送入AR,设计微码如下:

B55~B45(下址):0x0,该条微指令顺序执行,下地址字段不使用,将其置0即可;

B43~B40(CI3~CI0):0xE,设置AM2910功能为顺序执行;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x1,将读写模式设置为1,执行存储器读操作;

B30~B26(BI8-6):0x2,将ALU的计算结果送入B口地址指向的寄存器,并使ALU输出A口地址指向的寄存器内容;

B26~B24(MI5-3):0x0,选择ALU的逻辑功能为R+S;

B22~B20(MI2-0):0x7,设置ALU的R口接收数据总线的数据MEM,S口接收0;

B19~B16(A口地址):0x6,设置AM2901的B口地址指向IP;

B15~B12(B口地址):0x6,设置AM2901的B口地址指向IP;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x0,该条微指令不使用内部总线,置0即可;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x2,将AM2901的输出送入。

因此,该条微指令的微码为0000 0E00 20f6 6002

5)IP—>MEM, CC#=0,3# A4H

为实现IP->MEM,可以让ALU计算0+IP,并让AM2901输出ALU的运算结果F,先通过内部总线送入外部总线,再通过外部总线写入内存。为了实现CC#=0,3# A4H,可以使用AM2910的条件转移功能,将\overline{CC}强制置0,并将下址设置为A4H,从而让AM2910强制跳转到A4H。微码编写如下:

B55~B45(下址):0xA4,本条微指令需要跳转到A4H响应可能的中断,因此将下地址设置为A4H;

B43~B40(CI3~CI0):0x3,设置AM2910功能为条件转移;

B39~B37(SCC):0x0,微指令顺序执行时\overline{CC}无效,将SCC置0,使\overline{CC}=0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,该条微指令不使用标志位,将SST置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x0,将读写模式设置为0,执行存储器写操作;

B30~B26(BI8-6):0x1,设置AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x0,设置ALU的运算功能为R+S;

B22~B20(MI2-0):0x4,设置ALU的R口为0,S口接收A口地址指向的寄存器内容;

B19~B16(A口地址):0x6,设置AM2901的A口地址指向IP;

B15~B12(B口地址):0x0,AM2901的B口不使用,置0即可;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x1,将AM2901的输出送入内部总线;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x0,寄存器不接收来自内部总线的数据。

因此,该条微指令的微码为0029 0300 1046 0010

故该微程序的微码为:0000 0E00 A0B5 5402 0000 0E00 30F0 6000 0000 0E00 A0B5 5402 0000 0E00 20f6 6002 0029 0300 1046 0010

 3.3.4 运行结果

图3-6  实验内容二运行结果

运行步骤:

1、用“E”命令将微码写入内存

        用E800命令在内存中地址为0800H的单元开始,写入新指令微程序对应的微码;

2、用“A”命令输入汇编程序,并用“G”命令执行输入的程序

        MOV R1,800;MOV R2,5;MOV R3,110;LDMC;RET五条指令,将内存中地址从0800H开始的5条微指令,装入到控存中地址从0110H开始的单元。

3、用“E”命令将指令写入内存

        因为新添加的指令没有助记符,所以用E100命令将指令D800 1111 8888 AC00写入地址从0100H开始的内存单元中。其中,D8为该指令的操作码,1111为要写入单元的地址,8888为立即数,AC00为RET指令的操作码。

4、用“G”命令执行输入的程序,并用“D”命令查看程序执行的结果

        用G100命令执行刚刚写入的指令,然后用D1111查看地址从1111H开始的内存单元内容。[1111]=88888H,等于立即数。因此,我们可以确定:指令功能正常,微程序编写正确。

3.实验内容

3.4.1 实验要求

判断两个通用寄存器内容是否相等,若不相等则转移到指定目的地址,否则顺序执行。

指令格式:E0 DR SR,ADDR双字指令(控存入口130H,ADDR为绝对转移地址)。

指令功能:if DR!=SR goto ADDR else顺序执行。

3.4.2 微程序流程图

3.4.3 微码编写

顺序

微指令

微码

说明

1

PC—>AR, PC+1—>PC

0000 0E00 A0B5 5402

当前PC指向的ADDR的地址送入AR;PC指向下一条指令的操作码

2

SR xor DR, CC#=/Z

0029 0371 9610 0088

先执行SR xor DR,判断标志位Z,若Z=1,不发生跳转;若Z=0,顺序执行下一条微指令

3

MEM—>PC, CC#=0

0029 0300 30F0 5000

实现跳转到ADDR功能

1)PC>AR, PC+1>PC

与3.2.3(1)的微指令一致,其微指令的微码为0000 0E00 A0B5 5402

2)SR xor DR, CC#=/Z

为实现SR和DR的比较,我们可以设置SA=SB=1,让AM2901的A口和B口地址分别指向IR3-0和IR7-4,由于指令寄存器IR中0-3位存储SR的地址,4-7位存储DR的地址,所以我们获得了SR和DR。为实现在不相等时跳转到ADDR,我们设置AM2910的功能为条件转移,下址为A4H,条件码为\overline{Z}。从而利用ALU的R XOR S功能比较SR和DR,若结果为0,则SR=DR,Z=1,CC=0,AM2910跳转到A4H,结束微程序,即实现指令的顺序执行;否则顺序执行下一条微指令,将ADDR送入PC,实现指令跳转到ADDR。微码设计如下:

B55~B45(下址):0xA4,本条微指令需要跳转到A4H响应可能的中断,因此将下地址设置为A4H;

B43~B40(CI3~CI0):0x3,设置AM2910功能为条件转移;

B39~B37(SCC):0x3、B36(SC):0x1:使Am2910的条件码CC=\overline{Z}

B34~B32(SST):0x1,接收ALU标志位的输出值(本条微指令用到了标志位Z);

B31、B27、B23(读写模式):0x4,无需读写内存,不操作;

B30~B26(BI8-6):0x1,设置不将ALU的运算结果写入任何寄存器,AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x6,设置ALU的运算功能为R XOR S;

B22~B20(MI2-0):0x1,设置ALU的R口接收A口地址指向的寄存器内容,S口接收B口地址指向的寄存器内容;

B19~B16(A口地址):0x0,AM2901的A口不使用,置0即可;

B15~B12(B口地址):0x0,AM2901的B口不使用,置0即可;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x1,设置Am2901的A口地址取自IR3-0,即SR;

B6~B4(DC1):0x5,该条微指令不使用内部总线,置0即可;

B3(SB):0x1,设置Am2901的B地址取自IR7-4,即DR;

B2~B0(DC2):0x0,寄存器不接收来自内部总线的数据。

因此,该条微指令的微码为0029 0371 9610 0088

3)MEM>PC, CC#=0

B55~B45(下址):0xA4,本条微指令需要跳转到A4H响应可能的中断,因此将下地址设置为A4H;

B43~B40(CI3~CI0):0x3,设置AM2910功能为条件转移;

B39~B37(SCC):0x0,为强制AM2910跳转,应置\overline{CC}为0,将其置0即可;

B36(SC):0x0,SCC为0时SC无效,将其置0即可;

B34~B32(SST):0x0,本条微指令不使用标志位,置0使标志位保持不变即可;

B31、B27、B23(读写模式):0x1,将读写模式设置为1实现存储器读操作;

B30~B26(BI8-6):0x3,将ALU的运算结果F送入B口指向的寄存器,并使AM2901输出ALU的运算结果F;

B26~B24(MI5-3):0x0,选择ALU的逻辑功能为R+S;

B22~B20(MI2-0):0x7,设置ALU的R口接收数据总线上的数据MEM,S口接收0;

B19~B16(A口地址):0x0,AM2901的A口不使用,置0即可;

B15~B12(B口地址):0x5,设置AM2901的B口地址为5,即PC;

B11~B10(SCI):0x0,设置ALU输入进位为0;

B9~B8(SSH):0x0,该条微指令无需对ALU运算结果进行移位,置0即可;

B7(SA):0x0,将微指令中指定的A口地址作为AM2901的A口地址;

B6~B4(DC1):0x5,该条微指令不使用内部总线,置0即可;

B3(SB):0x0,将微指令中指定的B口地址作为AM2901的B口地址;

B2~B0(DC2):0x0,寄存器不接收来自内部总线的数据。

因此,该条微指令的微码为0029 0300 30F0 5000

故该微程序的微码为:0000 0E00 A0B5 5402 0029 0371 9610 0088 0029 0300 30F0 5000。

3.4.4 运行结果

3.4.4.1 测试 DR!= SR的情况

运行结果:

图3-7  实验内容三运行结果(DR!=SR情况)

当DR!= SR时,PC的值成功变为1212H,实现不相等时,跳转到ADDR的功能。

运行步骤:

1、用“E”命令将微码写入内存

        用E200命令在内存中地址为0200H的单元开始,写入新指令微程序对应的微码;

2、用“A”命令输入汇编程序,并用“G”命令执行输入的程序

        MOV R1,200;MOV R2,4;MOV R3,130;LDMC;RET五条指令,将内存中地址从0200H开始的3条微指令,装入到控存中地址从0130H开始的单元。

3、用“A”命令修改寄存器数据,并用“G”命令执行输入的程序

        用MOV R1,3000;MOV R2,4000两条指令,将R1和R2寄存器的值分别修改为3000H和4000H。

4、用“E”命令将指令写入内存

        因为新添加的指令没有助记符,所以用E100命令将指令E012 1212 AC00写入地址从0100H开始的内存单元中。其中,E0为该指令的操作码,1为寄存器R1,2为寄存器R2,1212为要跳转的内存地址,AC00为RET指令的操作码。

5、用“G”命令执行输入的程序,并用“R”命令和“T”命令进行查看和单步执行

        用G100命令将PC的值修改为0100H,然后用“R”命令查看运行前个寄存器的情况;再用“T”命令进行单步执行,查看寄存器的变化。

3.4.4.2 测试DR=SR的情况

运行步骤:

步骤同3.4.4.1,其中在步骤(3)用“A”命令修改寄存器数据时,改为用MOV R1,2000;MOV R2,2000两条指令,将R1和R2寄存器的值均修改为2000H。

运行结果:

图3-8  实验内容三运行结果(DR=SR情况)

当DR= SR时,PC的值为0102H,成功实现了当相等时顺序执行的功能。

综上所述,当DR!= SR时,实现了地址跳转;当DR= SR时,实现了顺序执行。表明指令功能正常,微程序编写正确。

四.实验心得

本次实验,通过对三个指令微程序的设计和实现,我了解了计算机各种指令的执行过程以及指令系统微程序设计的具体知识,进一步理解和掌握了TEC-2的动态微程序设计;同时在设计过程中,对TEC-2的运算器、控制器和数据传输方式有了更深入的认识。

本次课设与我们的第三次计组实验——微程序设计实验有极大的关系。老师也特意安排在了前后时间,方便我们去领会和贯通。由于在实验三中,我对实现微程序已经有了一定的经验,所以上手较快。

首先,我先深入内部了解了AM2910微程序定序器的组成和功能,以及其相关的其他程序控件如LS125、LS14等协助AM2910完成内部总线以及指令的控制;并且学习TEC-2微指令格式。然后,运用汇编语言相关知识分析微程序实现过程,并绘制微程序流程图。再通过查找实验指导书附录,明确每一条微指令所对应的十六进制微码。最后,在TEC-2虚拟机上模拟,先将微码输入到内存单元保存,再将微码加载到指定的微控存中,之后输入程序执行新指令。

实验内容一要求我们实现两个数的减法操作。其设计的微程序是在实验三的基础上稍作修改实现的。不过,起先我是通过PC的回滚来实现将数据写入[ADDR1]的操作,共需10条微指令。但在与同学的探讨和相关资料查找中,发现可以用寄存器IP缓存ADDR1的值,使微指令的条数减少到了7条。并且,在这之中,我知道了通用寄存器组的两个输出端A、B都连接了锁存器。在一个时钟周期内,先通过时钟的下降沿将数据打入锁存器,再在时钟低电平时使通用寄存器接收数据,即通用寄存器的写入一直落后于AB锁存器数据的锁存。因此,我们才可以实现寄存器IP输出的是通用寄存器的旧值,即ADDR1。

实验内容二要求我们实现立即数送入指定地址的内存单元。我们只需在实验内容一的基础上舍去实现减法的相关设计即可。

实验内容三要求我们实现转移分支指令。我们利用ALU的R XOR S功能,判断Z标志位的状态,选择跳转还是顺序执行。

所有微码都需要我们通过实验指导书的附录二中查找B0~B55的各个二进制位的作用,从而实现准确的微码设计。这个转化的过程并不复杂,但是特别繁琐,很容易出错,需要我们保持头脑清晰、思路明确。我在转化的时候就出现了好多次错误,导致一开始运行时出现不了想要的结果,后来经过Debug发现错误并改正。

本次课设的总体思路是设计尽可能高效率(简短)的微指令,所以需要我们在完成微程序控制特定功能计算机的指令系统设计和调试的同时,不断耐心细心地思考在实现程序功能的情况下如何精简微指令,从而达到更好的理解掌握的效果。三个实验内容我分别使用了7、5、3条微指令。并且,经过调试(输入微码、装入微控存、执行测试代码、查看结果),证明所有微程序均可成功实现。

五.附加材料

5.1 实验内容一

PC->AR, PC+1->PC  14#,     0000 0E00 A0B5 5402

MEM->IP MEM->AR  14#,    0000 0E00 30F0 6002

MEM->Q  14#,              0000 0E00 00F0 0000

PC->AR, PC+1->PC  14#,     0000 0E00 A0B5 5402

MEM->AR  14#,             0000 0E00 10F0 0002

IP->AR, Q-MEM->IP  14#,     0000 0E00 21E6 6002

IP->MEM, CC#=0  3#, A4H    0029 0300 1046 0010

5.2 实验内容二

PC->AR,PC+1->PC  14#,   0000 0E00 A0B5 5402

MEM->IP  14#,           0000 0E00 30F0 6000

PC->AR,PC+1->PC  14#,   0000 0E00 A0B5 5402

MEM->Q  14#,            0000 0E00 00F0 0000

IP->AR  14#,            0000 0E00 90B0 6002

Q->MEM,CC#=0  3#,A4H    0029 0300 1020 0010

5.3 实验内容三

PC->AR,PC+1->PC  14#,       0000 0E00 A0B5 5402

SR xor DR,CC#=/Z  3#, A4H   0029 0371 9610 0088

MEM->PC,CC#=0  3#, A4H      0029 0300 30F0 5000

5.4 微码参考图

  • 30
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阮阮的阮阮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值