《计算机组成原理》课程设计报告——TEC-2实验系统——微程序设计

课程设计任务书:《计算机组成原理》课程设计任务书——TEC-2实验系统——微程序设计

一、目的和要求

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

二、实验环境

1.    TEC-2机一台

2.    电脑一台

3.    TEC-2模拟软件一套

三、具体内容

1、分析TEC-2机的功能部件组成,分析TEC-2机支持的指令格式等。

1.TEC-2机的控制器部件的组成

TEC2机控制器部件的关键内容包括:

(1)由7片S6116随机读写存储器芯片组成的56位字长的徽程序控制存储器,用于存放TEC-2机的微程序。其内容在刚加电时不定,加电后将首先从2片ROM(LS2716芯片)中读出固化的、用于实现53条机器指令的做程序,经组织后写入这一控制存器,这一过程称为装入微码。装入完成后,将从监控程序的零地扯执行指令,完成TEC-2机的启动过程。这之后,还可以用LDMC指令按規定的办法向控制存俙器写入新的微程序,以实现新的机器指令。从简化逻辑框图上可以看到,控制存儲器的地址为µRA9~O,读出的信息送微指令流水线寄存器PLR。

(2)做指令寄存器PLR由7片8位的寄存器芯片(6片LS374和1片LS273)组成,用于存放当前做指令的内容,更具体的说明将在后面给出。

(3)微程序定序器AM2910芯片(其内部结构、引脚信号和运行原理等稍候详细说明),是做程序控制器中非常关鍵、也是稍微难懂一点的部分。在学习中要正确理解。它的核心功能是依据机器的运行状态与当前微指令的有关内容等,正确地形成下一条微指令的地址,以保证微程序按要求的微指令序列关系自动地逐条衔接执行。

(4)程序计数器PC和当前指令地址寄存器IP,是用运算器通用寄存器组中的两个选定的寄存器R5和R6实现的,这在图上见不到。

(5)指令寄存器IR,用于存放当前正在执行的指令内容。

(6)为AM2910提供输入地址信号的配套线路,包括

①由两片S2716ROM芯片组成的MAPROM,它变指令寄存器中的操作码转换成一段微程序的入口地;

②由片S125和1片S244组成的接收内部总线的IB9~O信号的选择门电路,它把由水平板上的开关提供的微指令地址送AM2910的地址输入端;

③由1片LS125和微指令寄存器的PLR55~48组成的一组地址输入,把当前微指令中的后续地址B55~46送入AM2910的地址输入端:请注意,1片LS125(共4位独立的输入和输出端)分成两组(每组两位)分别用于②和③两项用途。

这三组信号均为10位宽,且为互斥关系,分别由AM2910芯片提供的3个互斥控制信号/MAP、/VECT和/PL加以选通。

(7)由AM2910芯片的10位地址输出信号驱动的配套电路,包括

①由一片LSI75和一片LS374寄存器组构成的记亿电路,用于保存当前微指令的地址,其输出仅送往显示灯部分,以显示当前微指令的地址

②由3片LS257(四位的二选一电路)芯片构成的微控存的地址选择形成电路,它实现在AM2910的10位输出地址与存储器地址寄存器的低10位地址之间的选择,结果送往微控存的地址输入端,用于完成微控存单元的读写操作;选择信号是Smux。

③与此有关的还有3片计数器芯片1s161组成的地址计数器电路,其输出(共10位)通过两片LS244与刚提到的3片LS257的10位输出形成“线或"关系,用计数器的一个输出端Y11实现二者之间的选择,Y11为0时,pRA9pRAO是计数器的输出信号,提供完成装入微码过程的微控存的地址,Y11为1时,表明装入微码的过程已结束,微控存的地址uRA9uRA0为3片LS257的输出信号,以完成机器指令运行过程中的微控存的读、写(写仅用于LDMC指令)操作。

(8)由2片LS2716ROM芯片组成的、固化的微码保存电路及读写控制电路。这是为机器加电后完成装入微码所配备的专用线路,除2片LにS2716外,还有前边提到的3片LS161芯片(计数器),1片LS61芯片,2片LS244、1片Gal20v8、1片LS74、1片LS23和1片LS00.其连接关系在逻辑线路图(二)的右下部分。

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

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

TEC-2机的基本指令格式比较固定。从指令长度区分,有单字指令和双字指令,用户也可以实现三字指令;从操作数的个数区分,有无操作数指令、单操作数指令和双操作数指令;从支持的基本寻址方式区分,有寄存器寻址、寄存器间接寻址、立即数寻址、变址寻址、相对寻址、绝对寻址和堆栈寻址等方式;从指令功能上看,最常用的指令类型和运算是比较齐全的。

为了方便理解和记忆,把TEC-2机的指令格式归纳为如下形式:

单字指令仅用一个指令字。

双字指令用两个指令字,此时第二个指令字的内容可能是立即数、一个绝对地址或一个变址位移量。

第一个指令字分为三个主要部分。

最高6位是操作码。从这个意义上讲,TEC-2机的基本指令是固定长度的操作码结构。最多支持64条基本指令。

中间的两位,即9、8两位是条件码,只能把他用作条件转移指令的判断条件。这两位的值为00、01、10和11时,分别选择以处理机状态字中的C、Z、V和S的值作为判断条件。从这个意义上讲,我们也可以认为这两位是指令的扩展操作码。由于除了条件转移指令之外,其余的指令均不使用这两位,故我们可以用这两位扩展新的指令,而不会影响原来的指令功能。

最低的8位有多种用法:

(1)这8位用于给出入/出指令的入/出端口地址。例如,已规定第一个串行口地址为80h和81h,第二个串行口地址为82h和83h。并行口、DMA口等都可以被分配几个合理的地址,以实现入/出接口的各种实验。

(2)这8位用于给出相对寻址的位移量,其范围是从-128到+127之间,因此相对地址应在当前指令地址向前向后总共256个字的范围之内。实现相对地址计算时,这个位移量的最高位用符号位,补码形式,与16位的当前指令地址(放在IP寄存器中,即增量前的PC值)相加时,这一符号位要扩展到15~8这高8位上去。

(3)这8位被分为两个4位的字段,用于给出的所用的通用寄存器编号。对双操作数指令,这里可是给出目的与源两个操作数所在的寄存器编号。对单操作数指令,只用源或目的中的一个操作数,此时,可能用到某一个4位字段,另一个4位字段不用。需要强调的一点是,寄存器用于给出操作数、操作数地址,或用作变址寄存器。

2、使用TEC-2仿真软件进行微指令级的设计和调试,完成微程序控制的特定功能计算机的指令设计。

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

指令格式:D8××,ADDR1,ADDR2,   三字指令(控存入口110H

功能:    [ADDR1]=[ADDR1] + [ADDR2]

画出微指令流程图

微指令详细设计

设计分析:

根据指令的功能和指令格式,先读取地址ADDR1单元内容暂时放置于Q寄存器中,然后把PC指向的地址给AR,然后再读取地址ADDR2单元内容,同时与Q寄存器内容相加,结果也暂存放在Q寄存器中,此时进行PC-1→AR操作,将PC指向地址的上一个地址给AR,此时由于地址寄存器AR中存放的是地址ADDR2,因此只要将Q寄存器内容写入存储器就可以完成指令功能。此外,微程序中必须实现两次PC+1→PC操作,才能确保PC的正确走向。

微程序:

PC→AR,PC+1→PC:   0000   0E00   A0B5   5402

MEM→AR:            0000   0E00   10F0   0002

MEM→Q:             0000    0E00   00F0   0000

PC→AR:              0000    0E00   90B0   5002

MEM→AR:            0000    0E00   10F0   0002

MEM+Q→Q:           0000    0E01   00E0   0000

PC-1→AR:             0000   0E00   91B0   5402

PC+1→PC:             0000   0E00   B0B0   5400

MEM→AR:            0000   0E00   10F0   0002

Q→MEM,CC#=0:                0029   0300   1020   0010

指令分析:

PC→AR,PC+1→PC: 0000 0E00 A0B5 5402  程序计数器加1,开辟1个内存单元

    0     0      0     E      0      0     A     0      B     5      5      4     0     2

0000

0000

0000

1110

0000

0000

1010

0000

1011

0101

0101

0100

0000

0010

(B2-B0)DC2:2/GAR地址寄存器接收,故DC2为010

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序计数器PC,即0101

(B19-B16)A口:使用了寄存器R5,即程序计数器PC,即0101

(B22-B20)MI2-0:此时ALU的R端输入为0,S端输入为B

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的输出选择为A

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:状态位不需进行判断,即为000

(B35)备用位为0

(B36)SC        CC#始终低电平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

 

MEM→AR:        0000 0E00 10F0 0002  将指令地址送AR(ADDR1)

  0      0     0      E     0      0      1     0      F     0      0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

(B2-B0)DC2:地址寄存器接收,故DC2为010

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901,即0000

(B3)SB= 0,作Am2901,即0000

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未进位.,即00

(B15-B12)B口:未使用寄存器,故为0000

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为D(外部数据),S端输入为0

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行D+0

(B30-B28)BI8-6:没有返回值, Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处为存储器读,故取001

(B34-B32)SST:状态位不需进行控制,故为000

(B35)备用位为0

(B36)SC        CC#始终低电平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

[MEM]→Q: 0000 0E00 00F0 0000  将内存单元中的数据送入Q寄存器

  0      0      0     E     0      0      0     0      F      0     0      0      0     0

0000

0000

0000

1110

0000

0000

0000

0000

1111

0000

0000

0000

0000

0000

(B2-B0)DC2:寄存器未接收,故DC2为000

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,为00

(B11 B10)SCI:未进位,为00

(B15-B12)B口:未使用寄存器,故为0000

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为D(外部数据),S端输入为0

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行D+0

(B30-B28)BI8-6:有返回值,且返回值返回至Q,而Y的输出选择为F     ,故此处为000

(B31 B27 B23)MI0#,REQ,WE#:存储器读即取001

(B34-B32)SST:状态位不需进行控制,故为000

(B35)备用位为0

(B36)SC        CC#始终低电平有效,即为0000

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行,

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

PC→AR:              0000    0E00   90B0  5002    开辟1个内存单元

  0      0     0      E     0      0      9     0      B     0      5      0     0      2

0000

0000

0000

1110

0000

0000

1001

0000

1011

0000

0101

0000

0000

0010

(B2-B0)DC2:2/GAR地址寄存器接收,故DC2为010

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未移位,即00

(B15-B12)B口:使用了寄存器R5,即程序计数器PC,即0101

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为0,S端输入为B

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行0+B

(B30-B28)BI8-6:没有返回值, Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:状态位不需进行判断,即为000

(B35)备用位为0

(B36)SC        CC#始终低电平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

MEM→AR:            0000   0E00  10F0  0002 将指令地址送AR(ADDR2)

  0      0     0      E     0      0      1     0      F     0      0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

MEM+Q→Q:       0000 0E01 00E0 0000 完成加法([ADDR1] + [ADDR2]→Q)

  0      0     0      E     0      1      0     0      E     0      0      0     0      0

0000

0000

0000

1110

0000

0001

0000

0000

1110

0000

0000

0000

0000

0000

(B2-B0)DC2:寄存器未接收,故DC2为000

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,为00

(B11 B10)SCI:未进位,为00

(B15-B12)B口:未使用寄存器,故为0000

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为D(外部数据),S端输入为Q

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行D+Q

(B30-B28)BI8-6:有返回值,且返回值返回至Q,而Y的输出选择为F     ,故此处为000

(B31 B27 B23)MI0#,REQ,WE#:存储器读即取001

(B34-B32)SST:状态位控制,接受ALU的标志位输出值故为001

(B35)备用位为0

(B36)SC        CC#始终低电平有效,即为0000

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行,

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

PC-1→AR:       0000  0E00  91B0  5402 将PC指向地址的上一个地址给AR

  0      0     0      E     0      0      9     1      B     0      5      4     0      2

0000

0000

0000

1110

0000

0000

1001

0001

1011

0000

0101

0100

0000

0010

(B2-B0)DC2:2/GAR地址寄存器接收,故DC2为010

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序计数器PC,即0101

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为0,S端输入为B

(B26-B24)MI5-3:运算功能选择为“S-R”,即执行-1功能

(B30-B28)BI8-6:没有返回值, Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:状态位不需进行判断,即为000

(B35)备用位为0

(B36)SC        CC#始终低电平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

PC+1→PC:             0000   0E00   B0B0   5400 程序计数器加1

  0      0     0      E     0      0      B     0      B     0      5      4     0      0

0000

0000

0000

1110

0000

0000

1011

0000

1011

0000

0101

0100

0000

0000

(B2-B0)DC2:寄存器未接收,故DC2为000

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序计数器PC,即0101

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为0,S端输入为B

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:状态位不需进行判断,即为000

(B35)备用位为0

(B36)SC        CC#始终低电平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

MEM→AR:         0000   0E00   10F0   0002 将指令地址送AR(ADDR1)

  0      0     0      E     0      0      1     0      F     0      0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

Q→MEM,CC#=0:0029  0300  1020  0010 将结果送入ADDR3,低电平有效

  2      9      0      3     0      0     1      0      2     0      0      0     1     0

0010

1001

0000

0011

0000

0000

0001

0000

0010

0000

0000

0000

0001

0000

(B2-B0)DC2:寄存器未接收,故DC2为000

(B6-B4)DC1:向IB总线发送运算器的指令,故DC1为001

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未进位,即00

(B15-B12)B口:未使用寄存器,故为0000

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为0,S端输入为Q

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行0+Q

(B30-B28)BI8-6:没有返回值,Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处为将Q寄存器中值写入内存单元,故取000

(B34-B32)SST:未用状态,故为000

(B35)备用位为0

(B36)SC        此处低电平有效,故取SCC为000,SC为0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第3#命令,即为条件转移,低电平有效,有效时,转入下地址

(B55-B44)下地址:此命令为最后一条命令,若指令跳转,将转入A4H,即下地址为29

 

 

(2)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。

指令格式:E0 DR SR,ADDR (SR,DR源、目的寄存器各4位)双字指令(控存入口130H

功能:    DR=SR-[ADDR]

画出微指令流程图

微指令详细设计

设计分析:

根据指令的功能和指令格式,先读取地址ADDR单元内容暂时放置于Q寄存器中,然后再读取内存单元中的DATA,同时与Q寄存器内容相减,结果存放在DR寄存器中。

微程序:

PC→AR,PC+1→PC:             0000  0E00  A0B5  5402 

当前程序计数器内容送地址寄存器,为读取操作数地址做准备;程序计数器指向下一单元地址

MEM→AR:                   0000  0E00  10F0   0002 

从主存读取第一个操作数地址送AR,为读取操作数做准备

SR - MEM →DR:           0029  0301  31D0     0088 

寄存器SR存放的操作数减去ADDR单元内容,并存入DR

指令分析:

PC→AR,PC+1→PC: 0000  0E00  A0B5  5402  程序计数器加1

  0      0      0      E     0      0      A     0     B     5      5      4     0      2

0000

0000

0000

1110

0000

0000

1010

0000

1011

0101

0101

0100

0000

0010

(B2-B0)DC2:在本条微码中,地址寄存器接收,故DC2为010

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA:为0,作Am2901

(B3)SB:为0,作Am2901

(B9 B8)SSH:未移位

(B11 B10)SCI:未进位

(B15-B12)B口:使用了寄存器R5,即程序计数器PC

(B19-B16)A口:使用了寄存器R5,即程序计数器PC

(B22-B20)MI2-0:此时ALU的R端输入为0,S端输入为B

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的输出选择为A

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:未用状态,故为000

(B35)备用位为0

(B36)SC        未用条件码,故为0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

②MEM→AR:                   0000  0E00  10F0   0002  将指令地址送AR

  0      0      0      E     0      0     1      0     F      0     0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

(B2-B0)DC2:在本条微码中,地址寄存器接收,故DC2为010

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA:为0,作Am2901

(B3)SB:为0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未进位,即00

(B15-B12)B口:未使用寄存器,故为0

(B19-B16)A口:未使用寄存器,故为0

(B22-B20)MI2-0:此时ALU的R端输入为D(外部数据),S端输入为0

(B26-B24)MI5-3:运算功能选择为“+S”,即执行D+0

(B30-B28)BI8-6:没有返回值, Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处为存储器读,故取001

(B34-B32)SST:未用状态,故为000

(B35)备用位为0

(B36)SC        未用条件码,故为0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即为顺序执行

(B55-B44)下地址:由于顺序执行,并未使用下地址,故下地址为0

③SR - MEM →DR:   0029  0301  31D0  0088  完成减法,最后结果送寄存器

  2      9      0      3      0     1     3      0     D      0     0      0     8      8

0010

1001

0000

0011

0000

0001

0011

0000

1101

0000

0000

0000

1000

1000

(B2-B0)DC2:在本条微码中,,寄存器未接收,故DC2为000

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA:用指令给ALU的R端赋值,故为1

(B3)SB:用指令给ALU的S端赋值,故为1

(B9 B8)SSH:未移位

(B11 B10)SCI:未进位

(B15-B12)B口:未使用寄存器,故为0000

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为D(外部数据),S端输入为A,即为101

(B26-B24)MI5-3:运算功能选择为“S-R”

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处是读取内存单元内容,并被SR减,故取001

(B34-B32)SST:由运算带来的状态保存,故为001

(B35)备用位为0

(B36)SC         此处低电平有效,故取SCC为000,SC为0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第3#命令,即为条件转移,低电平有效,有效时,转入下地址

(B55-B44)下地址:此命令为最后一条命令,若指令跳转,将转入A4H,即下地址为29

 

(3)转移指令。判断两个通用寄存器内容是否相等,若不相等则转移到指定绝对地址,否则顺序执行。

指令格式:E9 DR SR,ADDR  双字指令(控存入口150H

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

画出微指令流程图

微指令详细设计

设计设计:

利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=\Z

则当DR==SR时Z=1,微程序不跳转,接着执行MEM→PC(即ADDR→PC)

而当DR!=SR时Z=0,微程序跳转至A4。

微程序设计:

DR-SR                                 0000 0E01 9190 0088

PC→AR,PC+1→PC,CC#=CND       0029 03E0 A0B5 5402

MEM→PC,CC#=0                    0029 0300 20F0 5000

指令分析:

DR - SR→DR         0000  0E01  9190  0088 

SR内容减DR内容,若相等,则标志符Z=1,否则Z=0

    0      0      0     E     0     1      B     1      9      0     0      0     8      8

0000

0000

0000

1110

0000

0001

1011

0001

1001

0000

0000

0000

1000

1000

(B2-B0)DC2:在本条微码中,,寄存器未接收,故DC2为000

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA:用指令给ALU的R端赋值,故为1

(B3)SB:用指令给ALU的S端赋值,故为1

(B9 B8)SSH:未移位

(B11 B10)SCI:未进位

(B15-B12)B口:未使用寄存器,故为0000

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:此时ALU的R端输入为A,S端输入为B,即为001

(B26-B24)MI5-3:运算功能选择为“S-R”

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的输出选择为F

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:由运算带来的状态保存,故为001

(B35)备用位为0

(B36)SC         此处低电平有效,故取SCC为000,SC为0

(B39-B37)SCC   

(B43-B40)CI3-CI0:由于顺序执行,并未使用下地址,故下地址为0

PC→AR,PC+1→PC,CC#=CND     0029  03E0  A0B5  5402

当前程序计数器内容送地址寄存器,条件转移信号CC#=CND,即判断Z是否为1,若为0则中断条件成立;程序计数器指向下一单元地址

    2     9     0      3      E      0     A     0      B     5     5      4      0     2

0010

1001

0000

0011

1110

0000

1010

0000

1011

0101

0101

0100

0000

0010

((B2-B0)DC2:2/GAR地址寄存器接收,故DC2为010

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序计数器PC,即0101

(B19-B16)A口:使用了寄存器R5,即程序计数器PC,即0101

(B22-B20)MI2-0:此时ALU的R端输入为0,S端输入为B

(B26-B24)MI5-3:运算功能选择为“R+S”,即执行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的输出选择为A

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:状态位不需进行判断,即为000

(B35)备用位为0

(B36)SC     用到IR10-8则SC置0  

(B39-B37)SCC  题中需要用到IR10-8所以SCC选择7则为111 

(B43-B40)CI3-CI0:Am2901命令第3#命令,即为条件转移

   (B55-B44)下地址:由于条件转移,若判断相等,则顺序执行,若不相等,则指令跳转,将转入A4H,即下地址为29

MEM→PC,CC#=0         0029  0300  30F0  5000

取内存单元ADDR中的地址送PC

   2      9      0     3      0      0     2      0      F     0     5      0      0     0

0010

1001

0000

0011

0000

0000

0010

0000

1111

0000

0101

0000

0000

0000

(B2-B0)DC2:在本条微码中,,寄存器未接收,故DC2为000

(B6-B4)DC1:未向IB总线发送控制,故DC1为000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位

(B11 B10)SCI:未进位

(B15-B12)B口:使用了寄存器R5,即程序计数器PC,即0101

(B19-B16)A口:未使用寄存器,故为0000

(B22-B20)MI2-0:R端数据来自主存(外部),S端为0,即为111

(B26-B24)MI5-3:运算功能选择为“S+R”

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的输出选择为A

(B31 B27 B23)MI0#,REQ,WE#:三位用于控制内外数据总线的读和写,此处不操作,故取10X

(B34-B32)SST:由运算带来的状态保存,故为001

(B35)备用位为0

(B36)SC         此处低电平有效,故取SCC为000,SC为0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第3#命令,即为条件转移

(B55-B44)下地址: 此命令为最后一条命令,若指令跳转,将转入A4H,即下地址为29

 

3、测试程序设计及调试。

(1)

(一)用E命令输入微码:(将微码输入到由900H开始的内存单元中)

0000 0E00 A0B5 5402 0000 

0E00 10F0 0002 0000 0E00 

00F0 0000 0000 0E00 90B0 

5002 0000 0E00 10F0 0002 

0000 0E01 00E0 0000 0000 

0E00 91B0 5402 0000 0E00 

B0B0 5400 0000 0E00 10F0 

0002 0029 0300 1020 0010

(二)用D命令查看输入的微码:

(三)用A命令输入加载微码的程序:(将微码加载到微控存中)

>A800           ;TEC-2机主存储器中RAM地址分配为0800H-0FFFH

0800: MOV R1,900 ;微码在内存中的首地址

0802: MOV R2,10  ;共10条微指令

0804: MOV R3,100;微码在微控存中的首地址,题目规定为100H

0806: LDMC     ;加载微码指令

0807: RET       ;返回

0808:

(四)用G命令运行加载微码的程序:

>G800

(五)用A命令输入程序:

>A820

0820: MOV R0,0023 ;将立即数23赋给寄存器R0

0822: MOV R1,0020 ;将立即数20赋给寄存器R1

0824: MOV [A00],R0;将寄存器R0中数据赋值给内存单元0A00

0826: MOV [A01],R1;将寄存器R0中数据赋值给内存单元0A01

0828: NOP        ;NOP起等待作用,因为指令占四个字节,所以用4个NOP

0829: NOP

082A: NOP

082B:  RET       ;返回\

(六)用E命令输入新指令:

>E828;因为第一个空操作的地址是0A00所以此处输入0A01

0828    0000:D400  0000:0A00  0000:0A01 

(七)用U命令查看输入的程序:(反编译观察操作过程)

>U820                                       ;查看

(八)用“G”命令运行程序:

>G820                                       ;运行

(九)用“D”命令查看运行结果:

  在命令行提示符状态下输入:

   DA00 (回车)

R

(2)

(一)用E命令输入微码:(将微码输入到由900H开始的内存单元中)

>E900

0900    0000:0000  0000:0E00  0000:A0B5  0000:5402  0000:0000

0905    0000:0E00  0000:10F0  0000:0002  0000:0029  0000:0301

090A    0000:31D0  0000:0088

;将微程序的16进制代码输入到从900H开始的内存单元中

(二)用D命令查看输入的微码:

>D900   ;查看单元内容是否正确

(三)用A命令输入加载微码的程序:(将微码加载到微控存中)

>A800

0800: MOV R1,900                           ;微码在内存中的首地址为900H

0802: MOV R2,3                        ;微程序一共有9条微指令

0804: MOV R3,130                           ;微码加载到微控存中的首地址

0806: LDMC                              ;加载微码指令

0807: RET                                 ;返回

0808:

(四)用G命令运行加载微码的程序:

>G800                                       ;执行加载微码程序

(五)用A命令输入程序:

>A820

0820: MOV R0,0023                   将减数放到通用寄存器R0

0822: MOV R3,0027                   将被减数放到通用寄存器R3

0824: MOV [A00],R0                 将R0中减数放到0A00单元

0826: NOP

0827: NOP

0828: RET

0829:

(六)用E命令输入新指令:

>E826                                      

;编辑0826开始到0827单元,将新指令输入,其中SR为R3, DR为R2

0826    0000:E023  0000:0A00

(七)用U命令查看输入的程序:(反编译观察操作过程)

>U820                                       ;查看

(八)用“G”命令运行程序:

>G820                                       ;运行

(九)用“D”命令查看运行结果:

  在命令行提示符状态下输入:

DA00 (回车)

R

(3)

(一)用E命令输入微码:(将微码输入到由900H开始的内存单元中)

>E900

0900    0000:0000  0000:0E01  0000:9190  0000:0088  0000:0029

0905    0000:03E0  0000:A0B5  0000:5402  0000:0029  0000:0300

090A    0000:20F0  0000:5000

(二)用D命令查看输入的微码:

(三)用A命令输入加载微码的程序:(将微码加载到微控存中)

>A800

0800: MOV R1,900

0802: MOV R2,3

0804: MOV R3,140

0806: LDMC

0807: RET

0808:

(四)用G命令运行加载微码的程序:

>G800                                       ;执行加载微码程序

(五)用A命令输入程序:

两数相等时;

>A820

0820: MOV R1,0026

0822: MOV R2,0026

0824: NOP

0825: NOP

0826: MOV R1,0023

0828: RET

0829:

(六)用E命令输入新指令:

>E824

0824    0000:E512  0000:0828

(七)用U命令查看输入的程序:(反编译观察操作过程)

>U820

(八)用“G”命令运行程序:

>G820

(九)用“D”命令查看运行结果:

  在命令行提示符状态下输入:

R

(五)*用A命令输入程序:

两数不相等时:

>A820

0820: MOV R1,0025

0822: MOV R2,0024

0824: NOP

0825: NOP

0826: MOV R1,0023

0828: RET

0829:

(六)*用E命令输入新指令:

>E824

0824    0000:E512  0000:0828

(七)*用U命令查看输入的程序:(反编译观察操作过程)

>U820

(八)用“G”命令运行程序:

>G820

(九)用“D”命令查看运行结果:

  在命令行提示符状态下输入:

R

4、写出自己在小组中承担的任务及发挥的作用。

一人独立完成

 

四、实验心得

这个课程设计是对整个学期对计算机组成原理学习的回顾,由于书中内容较多,刚开始时,有点云里雾里的感觉。并且由于对微程序控制器的组成和工作原理不了解,导致觉得实验非常的难,不知从何下手,后来虽然仔细的看了一遍书,又认真听老师把原理说了一遍,但还是不太知道怎么做,只是大致了解了微程序控制器是如何工作的,后来通过一个微程序设计实例的讲解,才基本上知道了该如何设计指令。因为设计微码要求对运算器、控制器都要有很深的了解,不仅仅是照着书本上的步骤去做,而是要真真正正去设计一些计算机能运行的最底层的指令,因此,做这个课程设计要在短时间内突击是很困难的,需要平时注意听老师讲的细节上的问题。比如,AM2901外部数据只能从A口进入,结果回存只能通过B口等老师常常强调的,如果没有注意,实验起来就会很麻烦。设计过程中与同学有不少的交流,遇到难于理解的地方时就会相互交流各自的想法。

在之前做微程序控制实验的时候,其实还有一些地方很模糊,比如为什么测试新指令的时候要输入一定数量的NOP空操作,新指令和程序在运行时是怎么联系在一起的,下地址字段的意义,等等。但是通过课程设计,更推动了我对这些问题加深了解,对计算机的运行原理比之前要更加透彻了。从这一次实验中印证一个道理只有通过实践才能真正的掌握一门知识。

参考文章

https://blog.csdn.net/qq_43594913/article/details/106735166

http://blog.sina.com.cn/s/blog_6392df880100j7ro.html

https://wenku.baidu.com/view/952dc0f648649b6648d7c1c708a1284ac850059f.html

https://blog.csdn.net/denglaiyou4326/article/details/102433098/

  • 15
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Starzkg

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

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

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

打赏作者

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

抵扣说明:

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

余额充值