TEC-2 微程序设计与测试

  个人理解,错误请指正:)

题目要求

  将内存单元数据DATA减去用绝对地址ADDR表示的内存单元的内容,结果保存到由DR内容指定的内存单元中。

  指令格式

D4 DR X
ADDR
DATA

  指令功能

    DATA- [ADDR] → [DR]

设计分析

  根据指令的功能和指令格式,先读取地址ADDR单元内容暂时放置于Q寄存器中。通过把PC→AR,此时MEM里的内容就是内存单元的数据DATA。这时,MEM-Q→Q,并将DR→AR,这时地址寄存器AR存放的正好是DR,因此只要将Q寄存器内容写入存储器就可以完成指令功能。此外,微程序中必须实现两次PC+1→PC操作,才能确保PC的正确走向。

微程序

1 100: PC→AR, PC+1→PC    ;0000    0E00    A0B5    5402
2 101: MEM→AR            ;0000    0E00    10F0    0002
3 102: MEM→Q             ;0000    0E00    00F0    0000
4 103: PC→AR, PC+1→PC    ;0000    0E00    A0B5    5402
5 104: MEM-Q→Q           ;0000    0E00    02E0    0000
6 105: DR→AR             ;0000    0E00    90B0    000A
7 106: Q→MEM, CC#=0      ;0029    0300    1020    0010

微码详解

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

CI3-0 /MIO REQ /WE MI8-0 A B SCi DC1 DC2
顺序执行

不操作

F→B

Y=A

R+S

R=0

S=B

PC PC  Cin取值1 不用管  地址寄存器AR 
 

/WE设为1把Y(PC)

送到内部总线好让AR接收

F=0+PC+Cin→PC

Y=A=PC

Y的内容会

被送到内部数据总线

    PC默认是R5 PC默认是R5  PC+1→PC  

PC→AR

(Y→AR)

1110 101 0 1 0 0 0 0 0 1 1 0101 0101  01  000  010

        注:以下A,B均为0000,不操作

  MEM→AR                   0000 0E00 10F0 0002

CI3-0 /MIO REQ /WE MI8-0 SCi DC1 DC2
顺序执行

存储器读

F

R+S

R=D

S=0

 Cin取值0 不用管  地址寄存器AR 
 

MEM的数据

送到内部总线

Y=F=D+0

送到内部总线

 D+0

 D输入端是

内部总线送来的数据

   

MEM→AR

(Y=D→AR)

1110 001 0 0 1 0 0 0 1 1 1  00  000  010

 

  MEM→Q                      0000 0E00 00F0 0000

CI3-0 /MIO REQ /WE MI8-0 SCi DC1 DC2
顺序执行

存储器读

F→Q

Y=F

R+S

R=D

S=0

 Cin取值0 不用管  未使用
 

MEM的数据

送到内部总线

 

F=D+0→Q

 D+0

D输入端是

内部总线送来的数据

     
1110 001 0 0 1 0 0 0 1 1 1  00  000  000

 

  PC→AR, PC+1→PC     0000 0E00 A0B5 5402(略)

  MEM-Q→Q                  0000 0E01 02E0 0000

CI3-0 SST /MIO REQ /WE MI8-0 SCi DC1 DC2
顺序执行

接收ALU的

标志位输出值

存储器读

F→Q

Y=F

R-S

R=D

S=Q

 Cin取值0 不用管  未使用
 

运算可能导致

标志位的变化

MEM的数据

送到内部总线

 

F=D-Q→Q

D-Q 

 D输入端是

内部总线送来的数据

     
1110 001 001 0 0 0 0 1 0 1 1 0  00  000  000

 

  DR→AR                       0000 0E00 90B0 000A

CI3-0 /MIO REQ /WE MI8-0 SCi SA SB DC1 DC2
顺序执行

不操作

Y=F

R+S

R=0

S=B

 Cin

取值0

A=A B=DR 不用管 

地址寄存器

AR

 

/WE设为1把Y

送到内部总线好让AR接收

Y=F=0+B

送到内部总线

0+B 

 

 

SA=0  A口的值来自A口的字段

SA=1  A口的值来自SR的字段

SB=0  B口的值来自B口的字段

SB=1  B口的值来自DR的字段

 

 DR→AR

(Y→AR)

1110 101 0 0 1 0 0 0 1 1 0  00 0 1  000  010

 

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

下地址MAR9-0 CI3-0 /MIO REQ /WE MI8-0 SCi DC1 DC2

A4H

A4H微指令的功能是依据有无中断请求,

决定是进入中断处理过程,还是顺序执行下一条指令。

这是每条机器指令完成后应该执行的一项操作。

条件转移

存储器写

Y=F

R+S

R=0

S=Q

 Cin取值0 运算器的输出 未使用

最后要条件转移到A4H执行后续处理程序

若有中断:→ADH∽B6H→A5H

若无中断:→A5H

 

 

Y=F=Q

 0+Q

 

 

 送往内部总线IB的数据

这样MEM就能拿到Y(Q)了

 

10100010 (往前补零)

0011 000 0 0 1 0 0 0 010  00  001  000

 

  插曲

    关于如何得到微码,首先我们得利用微指令分析器。但当我戳那个小企鹅时,发生了错误……这样:

    这是TABCTL32.OTX所在目录不正确的原因,且尚未加载到,可自行寻找解决方案。嘴上这么说还是给了链接【。

 

测试

  工具:

    你可以打开TEC-2模拟机,再开监控程序;也可以直接打开该文件夹下的monitor~

  步骤

    1. 首先,将微码输入到由0900H开始的内存单元中。用E命令输入微码,回车后输入微程序。每个数值间以空格分开,输入完毕后按回车键。如:

>E0900

    2. 加载微码,以A命令输入微码。如:

>A0800
0800MOV R1, 900 ;微码在内存中的首地址 0802MOV R2,7 ;微指令条数 0804MOV R3, 100 ;微码在微控制存储器中的首地址 0806:LDMC ;加载微码指令,将微码指令加载到微控制存储器中 0807RET 0808

    3. 用G命令运行加载微码的程序。如:

>G0800

    4. 用A命令输入新程序,用来测试。如:

>A0820
 0820MOV R0,0011        ; 0011→R0
 0822MOV [0890],R0      ; R0内容→内存0890地址
 0824MOV R1,0891        ; 0891→R1
 0826NOP                 ; NOP是空操作指令,预留单元
 0827NOP
 0828NOP
 0829RET

    5. 在NOP开始的地方调用新指令用来测试。如:

>E0826
 D410 0890 0111            ; 指令格式:D4DRX ADDR DATA (D410的1是R1寄存器,结果要送到的地方。在4中,我们用了 MOV R1, 0891命令,故之后可以在0891看R1的内容)

      这样就调用了新指令的操作码D410,配合操作数 ADDR=0890 DATA=1111。然后:

>G0820                     ; 执行首地址为0820的微程序

    6. 查看结果,用D或者R命令查看程序运行后内存或寄存器状态。

>D0891

 

 

    7. 运行截图:

参考

  1. http://www.cnblogs.com/joyeecheung/p/3687773.html
  2. http://www.cnblogs.com/chenshiyu/p/4457211.html

后记

  给我检查的老师特别水……立刻就过了,但是TA效良大大检查我的时候,我就gg了。不过也学到了很多,下面稍微记录一下~

  1.  PC是什么?PC在微程序当中的变化?作用是什么?
    • PC是程序计数器,即program counter,默认是R5。
    • 在程序当中的变化是,0827→0828→0829。
    • 分别将PC指向的东西读到微程序当中。在本例中,分别对应着[ADDR],DATA,RET。
  2.  既然PC最开始在0827,那么D4DRX是什么时候被读的?以及D4DRX是什么,何时被定义的?
    • 在程序开始之前,PC就已经读把这条指令读到IR(指令寄存器)里了。
    • D4对应的是0100H为首地址的微程序。关于这个对应关系...尚不了解_(:з」∠)_
  3.  D4DRX [ADDR] DATA都放在哪儿?
    • 在本例中,通过E0826指令按序读到程序当中NOP的位置。
  4.  为什么在MEM-Q→Q时,需要接收ALU标志位的输出值?为什么PC+1→PC不需要呢?
    • 前者需要是因为有加减运算,可能导致负的结果或者溢出等状况,所以需要接收标志位的输出。
    • 后者不需要是因为PC是程序计数器,它的值是内存地址...所以并不需要接收标志位的输出。
  5.  为什么本例中要有DR→AR这条指令?
    • 因为结果是送到DR寄存器里的地址指向的内存~
  6.  A、E、G、D的作用都是什么?
    • A:输入单条汇编指令,两次回车退出。
    • E:输入多条机器指令。
    • G:执行首地址为...的微程序
    • D:查看内存状态

  如果你问我做机组实验有什么感受的话,我只想说:我绝对不会去嵌软的……TAT

posted @ 2015-04-28 17:40  呆旋  阅读(1197)  评论(0编辑  收藏  举报