码迷,mamicode.com
首页 > 其他好文 > 详细

TEC-2 微程序设计与测试

时间:2015-04-28 13:38:00      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

题目要求

  将内存单元数据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 0E00 02E0 0000

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

存储器读

F→Q

Y=F

R-S

R=D

S=Q

 Cin取值0 不用管  未使用
 

MEM的数据

送到内部总线

 

F=D-Q→Q

D-Q 

 D输入端是

内部总线送来的数据

     
1110 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的内容)

      这样就调用了新指令的操作码D4,配合操作数 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

 

TEC-2 微程序设计与测试

标签:

原文地址:http://www.cnblogs.com/daix6/p/4461895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!