tec2000 16位机微程序控制器指令系统的设计与实现

发布时间:2011-03-12 16:49:52

一、设计题目

16位机微程序控制器指令系统的设计与实现

二、设计目的

通过看懂教学计算机组合逻辑控制器中已经设计好并正常运行的几条基本指令(例如ADDMVRROUTMVRDJRRET等指令)的功能、格式和执行流程,然后自己设计微程序控制器中的29条基本指令和19条扩展指令的功能、格式和执行流程,并在教学计算机上实现、调试正确,达到以下目的:

1、深入理解计算机控制器的功能、组成知识和各类典型指令的执行过程;

2、对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念;

3、学习微程序控制器的设计过程和相关技术。

三、设计说明

控制器设计是学习计算机总体组成和设计的重要的部分。要在TEC—2000教学计算机上完成这项设计,必须清楚懂得:

1TEC—2000教学机的微程序控制器主要由作为选件的微程序控制器小板和教学机大板上的7GAL20V8组成。

2TEC—2000教学机微程序控制器上要实现的全部基本指令和扩展指令的控制信号都是由微程序小板上的7片控制存储器给出的。

3、应了解监控程序的A命令只支持基本指令,扩展指令应用E命令将指令代码写入到相应的存储单元中;不能用TP命令单步调试扩展指令,只能用G命令执行扩展指令。

4、要明白TEC—2000教学机支持的指令格式及指令执行流程分组情况;理解TEC—2000教学机中已经设计好并正常运行的各类指令的功能、格式、执行流程和控制信号的组成。

5、明确自己要实现的指令格式、功能、执行流程设计中必须遵从的约束条件。

6、为了完成扩展指令的功能、格式和执行流程,并在教学计算机上实现、调试正确的实验内容,具体过程包括:

1)确定指令格式和功能,要受教学机已有硬件的约束,应尽量与已实现指令的格式和分类办法保持一致;

2)划分指令执行步骤并设计每一步的执行功能,设计节拍状态的取值,应参照已实现指令的处理办法来完成,特别要注意的是,读取指令的节拍只能用原来已实现的,其他节拍的节拍状态也应尽可能的与原用节拍的状态保持一致和相近;

3)在指令微程序表中填写每一个控制信号的状态值,注意要特别仔细,并有意识地体会这些信号的控制作用;

4)将设计好的微码,装入控制存储器的相应单元;

5)写一个包含你设计的指令的程序,通过运行该程序检查执行结果的正确性,来初步判断你的设计是否正确;如果有问题,通过几种办法查出错误并改正,继续调试,直到完全正确。

四、设计内容

1、完成微程序控制器指令系统设计,主要内容是由学生自己设计29条基本指令和19条扩展指令的功能、格式和执行流程,并在教学计算机上实现、运行、调试正确。

2、首先看懂TEC—2000教学计算机的功能部件组成和线路逻辑关系,然后分析教学计算机组合逻辑控制器中已经设计好并正常运行的几条典型指令(例如ADDMVRROUTMVRDJRCRET等指令)的功能、格式和执行流程。

3、设计微程序控制器指令系统中各条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确,例如ADCSTCJRSJRNSLDRXSTRXJMPRCALRLDRA19条扩展指令。

4、单条运行指令,查看指令的功能、格式和执行流程。

5、用监控程序的AE(扩展指令必须用E命令置入)命令编写一段小程序,观察运行结果。

五、设计要求

(一)分组及任务分配

每组四名同学,任务分配或分工为:

1、仿照教学计算机组合逻辑控制器,设计微程序控制器中基本指令的功能、格式和执行流程,画出29条基本指令的执行流程框图和微程序编码表。(杨赛男同学负责)

2、设计19条扩展指令的功能、格式和执行流程,设计每条微指令各字段的具体编码值,包括控制码的各字段、下址字段、形成下址用到的条件码,画出19条扩展指令的执行流程框图和微程序编码表。(李春萌同学负责)

3、确定微码各字段与控制存储器各个芯片之间的关系,列表写出各控制存储器芯片中存储单元的内容,将设计好的微码装入控制存储器。(覃筱媛同学负责)

4、编写若干个测试程序,包含所有的基本指令和扩展指令,通过运行这些程序可以检查所有指令设计是否正确。(车平同学负责)

最后,所有同学共同参与测试,通过运行测试程序,判断指令设计是否正确。如果有问题,查出错误并改正,继续调试,直到完全正确。

(二)学生应交材料

1、课程设计报告,每组交一份。

2、一块自定义指令系统的微程序控制器板。

3、课程设计日记,每人交一份。

(三)课程设计报告内容

1、题目名称;

2、题目内容;

3、基本指令和扩展指令的执行流程框图;

4、基本指令和扩展指令的微程序编码表;

5、八个控制存储器芯片中各存储单元的内容列表;

6、测试程序;

7、自评(从实现的功能上评价);

8、遇到的问题及解决方案;

9、总结(主要从综合应用知识、分析问题、解决问题方面总结)。

六、进度安排

1 周一 上午 课程设计动员

周二 ~ 周五 1)熟悉汇编、TEC—2000机开发环境

2)基本指令设计

3)扩展指令设计

4)编写调试程序。

2 周一 ~ 周五 微指令写入芯片,运行测试程序,调试指令。

3 周一 ~ 周三 编写课程设计报告。

周四、周五 验收和答辩总结。

七、课程设计环境

1、硬件环境: PC机一台、TEC—2000实验机一台、微程序控制器实验板一块。

2、软件环境: 1Win2000DOS

2TEC—2000仿真终端程序PCEC

3TEC—2000监控程序。

八、软件设计方案

1.将设计好的微码写入控制存储器。(包括29条基本命令和我组分配到的CLC扩展指令的微码)

一次只对一片28C64控制存储器芯片进行读写,该芯片可插在扩展芯片的高位或低位,若插在高位,输入时信号编码为高八位,低八位补零;若插在低位,输入时信号编码为低八位,高位补零。若一次扩展两片28C64控制器芯片,要注意信号要与产生该信号的芯片相对。

(1) 将扩展新片的内存单元地址置为4000~5FFF,将MAPROM插入扩展芯片的位置,微程序入口地址对应的内存单元的地址为芯片的起始地址和该指令的编码值之和。具体操作如下:

E 4000

4000 00FF04 00FF05 00FF06 00FF09 00FF08

00FF0A 00FF07 00FF0B 00FF0D 00FF0C

00FF0E 00FF0F

E 4041

4041 00FF11

E 4044

4044 00FF10 00FF10 00FF10 00FF10

E 406C

406C 00FF56

4080 00FF1E 00FF1B 00FF12 00FF19

00FF15 00FF15 00FF12 00FF17

00FF1D

E 408C

408C 00FF17 00FF 00FF 00FF 23

E 40CE

40CE 00FF1F

(2) MPROM1~MPROM7依次插入扩展芯片的位置对其编程,内存单元的地址为芯片的起始地址和该指令操作功能所对应的微址之和,操作如下:

MPROM1产生下址信号,MPROM2产生CI3~0SCC3~0信号

MPROM1-2的操作为:MPROM1 在高位 MPROM2 在低位

E 4000

4000 00FF00E0 00FF00E0 00FF00E0 00FF0020

00FF3030 00FF3030 00FF3030 00FF3030

00FF3030 00FF3030 00FF3030 00FF3030

00FF3030 00FF3030 00FF3030 00FF3030

4010 00FF3034 00FF3030 00FF1436 00FF3030

00FF3030 00FF1A37 00FF3030 00FF1C37

00FF3030 00FF00E0 00FF3030 00FF00E0

00FF3030 00FF1C30 00FF2430 00FF00E0

4020 00FF00E0 00FF00E0 00FF3030 00FF00E0

00FF3030

E 4030

4030 00FF3A32 00FF0230

E 4056 00FF3030

(3) MPROM3产生0MRW0I2~0信号,MPROM4产生SAI8~I6SBI5~I3信号,对MPROM3-4的操作为:MPROM3 在高位 MPROM4 在低位

E 4000

4000 00FF4131 00FF4320 00FF1010 00FF4010

00FF41B8 00FF41B9 00FF41BC 00FF41BB

00FF41BE 00FF4199 00FF419C 00FF44B8

00FF4338 00FF4339 00FF4378 00FF4358

4010 00FF4010 00FF4530 00FF4710 00FF2310

00FF3730 00FF4331 00FF0010 00FF4320

00FF1010 00FF4318 00FF0490 00FF4490

00FF1738 00FF4320 00FF4320 00FF4320

4020 00FF1700 00FF4331 00FF0220 00FF4320

00FF1730

E 4030

4030 00FF4700 00FF4320

E 4056 00FF4010

(4) MPROM5产生B口、A口信号,MPROM6产生0SSTSSHSCI信号,

MPROM5-6的操作为:MPROM5 在高位 MPROM6 在低位

E 4000

4000 00FF5501 00FF5501 00FF0000 00FF0000

00FF0010 00FF0011 00FF0010 00FF0010

00FF0010 00FF0011 00FF0010 00FF0010

00FF0011 00FF0010 00FF0060 00FF0050

4010 00FF0000 00FF5500 00FF0000 00FF0000

00FF0000 00FF4000 00FF0000 00FF4401

00FF0020 00FF0000 00FF0000 00FF0000

00FF0000 00FF5501 00FF5501 00FF5501

4020 00FF0000 00FF4000 00FF5500 00FF4401

00FF5000

E 4030

4030 00FF0000 00FF5501

E 4056 00FF0030

(5) MPROM7产生DC2DC1信号,对MPROM7的操作为:

E 4000

4000 00FF70 00FFB0 00FF10 00FF00

00FF00 00FF00 00FF00 00FF00

00FF00 00FF00 00FF00 00FF00

00FF00 00FF00 00FF00 00FF00

4010 00FF00 00FF02 00FF32 00FF01

00FF00 00FF30 00FF03 00FF30

00FF00 00FF30 00FF01 00FF30

00FF00 00FF30 00FF30 00FF30

4020 00FF00 00FF30 00FF01 00FF30

00FF00

E 4030

4030 00FF03 00FF B0

E 4056 00FF00

芯片的截图如下

1)写入基本指令之后的芯片存储状态:

MAPROM

MPROM1,2 (MPROM 1在高位 MPROM2在低位)

MPROM3,4 (MPROM 3在高位 MPROM 4在低位)

MPROM56MPROM5在高位MPROM6在低位

MPROM7

2)写入扩展命令后的截图

MAPROM MPROM1

MPROM2 MPROM3

MPROM4 MPROM5

MPROM6 MPROM7

.测试程序

1.在单步方式下,通过指示灯观察各类扩展指令的微码。(在此,仅在A组、C组中各列举一条指令为例。)通过验证可知各指令的微码无误。

<1>选择基本指令的A组指令中的ADD指令,观察其节拍流程

1)置拨动开关SW=00000000 00000001;(表示指令ADD R0R1

2)按RESET按键;小板指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),其它灯全灭;

3)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0000 ;下址的指示灯显示 0000 0000 ;(本拍完成公共操作0PCDI#=0

4)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0001 ,下址的指示灯显示 1110 0000 ;(本拍完成公共操作PCARPC+1PC

5)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0010 ,下址的指示灯显示 1110 0000 ;(本拍完成公共操作MEMIR

6)以上三步为公共操作,其它指令同;

7)按START按键;小板指示灯CI3~0SCC3~0显示 0010 0000 ,微址指示灯显示 0000 0011 ,下址的指示灯显示 0000 0100 ;(本拍完成/MAP操作功能)

8)按START按键;小板指示灯CI3~0SCC3~0显示 0011 0000 ,微址指示灯显示 0000 0100 ,下址的指示灯显示 0011 0000 ;(本拍执行ADD指令,DRDR+SR操作)

9)按START按键;小板指示灯CI3~0SCC3~0显示 0011 0010 微址指示灯显示 0011 0000 ,下址的指示灯显示 0011 0000 ;(本拍完成STRQCC#=INT#公共操作功能)

10)按START按键;小板指示灯CI3~0SCC3~0显示 0011 0000 ,微址指示灯显示 0011 0001 ,下址的指示灯显示 0000 0010 ;(本拍完成PCARPC+1PCCC#=0的公共操作功能)

<2>选择基本指令的D组指令中的CALA指令,观察其节拍流程

1)置拨动开关SW= 1100 1110 0000 0000 ;(表示指令CALA

2)按RESET按键;小板指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),其它灯全灭;

3)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0000 ,下址的指示灯显示 0000 0000

4)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0001 ,下址的指示灯显示 0000 0000

5)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0000 0010 ,下址的指示灯显示 0000 0000

6)以上三步为公共操作,其它指令同。

7)按START按键;小板指示灯CI3~0SCC3~0显示 0010 0000 ,微址指示灯显示 0000 0011 ,下址的指示灯显示 0001 1111

8)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0001 1111 ,下址的指示灯显示 0000 0000 ;(本拍完成PCARPC+lPC操作)

9)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0010 0000 ,下址的指示灯显示 0000 0000 ;(本拍完成MEMQ操作)

10)按START按键;小板指示灯CI3~0SCC3~0显示 1110 0000 ,微址指示灯显示 0010 0001 ,下址的指示灯显示 0000 0000 ;(本拍完成SP-1SPPCAR操作)

11)按START按键;小板指示灯CI3~0SCC3~0显示 0011 0000 ,微址指示灯显示 0010 0010 ,下址的指示灯显示 0011 0000 ;(本拍完成PCMEMQPCCC#=O操作)

12)按START按键;小板指示灯CI3~0SCC3~0显示 0011 0010 ,微址指示灯显示 0011 0000 ,下址的指示灯显示 0011 0000 ;(本拍完成STRQCC#=INT#操作)

13)按START按键;小板指示灯CI3~0SCC3~0显示 0011 0000 ,微址指示灯显示 0011 0001 ,下址的指示灯显示 0000 0010 ;(本拍完成PCARPC+lPCCC#=0操作)。

2.测试基本指令的程序:

1)验证指令MVRD,MVRR,ADD,SUB,XOR,OR,RET.

运行结果:R0=0064R1+R0——R0);R1=0023R3=FFF7R3-R2——R3);R6=0070R6R7相异或);R7=FFF7R7R3相异或)

2)验证指令IN,OUT,SHR, AND,CMP,JRC, JRNC,JMPA

功能:从键盘输入0~9个数字,遇到0~9个字符外后跳出程序

3)测试INCJRNZ的程序

功能:计算110的累加和。

4)测试DECJRZPUSHPOPJR

功能:用次数控制在终端屏幕上输出‘0’到‘9’是个数字符

5)测试STRRLDRRCALA

功能:读出内存中的字符,将其显示到显示器的屏幕上,转换为小写字母后再写回存储器原存储区域。

3测试扩展指令CLC

1)验证EIDIIRET指令的程序

A 2104

2104JR 2120

2105RET ;跳转到中断服务程序

A 2108

2108JR 2130

2109RET ;跳转到中断服务程序

A 210C

210CJR 2140

210DRET ;跳转到中断服务程序

A 2120

2120PUSH R0 R0进栈

2121PUSH R3 R3进栈

2122MVRD R331 ;将字符‘1ASCII码送寄存器R3

2124JR 2150

2125RET

A 2130

2130PUSH R0

2131PUSH R3

2132MVRD R332 ;将字符‘2ASCII码送寄存器R3

2134JR 2150

2135RET

A 4140

2140PUSH R0

2141PUSH R3

2142MVRD R333 ;将字符‘3ASCII码送寄存器R3

2144JR 2150

2145RET

2150*DI ;关中断

A 2151

2151MVRD R00042 ;将字符“B”赋值给R0BBegin的缩写。

2153CALA 2200 ;调用子程序,完成显示

2155MVRD R00049 ;将字符“I”赋值给R0IInterrupt的缩写。

2157CALA 2200 ;调用子程序,完成显示

2159MVRR R0R3 ;将R3的内容送R0

215ACALA 2200 ;调用子程序,完成显示

215CIN 81 ;判键盘上是否按了一个键

215DSHR R0 ;即串口是否有了输入字符

215ESHR R0

215FJRNC 215C ;若没有,等待

2160IN 80 ;输入字符到R0

2161MVRD R00045 ;将字符“E”赋值给R0EEnd

2163CALA 2200 ;调用子程序,完成显示

2165MVRD R00049 ;将字符“I”赋值给R0IInterrupt的缩写

2167CALA 2200 ;调用子程序,完成显示

2169MVRR R0R3 ;将R3的内容送R1

216ACALA 2200 ;调用子程序,完成显示

216CPOP R3 R3出栈

216DPOP R0 R0出栈

216E*IRET ;中断返回

A 2200

2200PUSH R0 R0进栈

2201IN 81 ;查询接口状态,判字符输出完成否

2202SHR R0

2203JRNC 2201 ;未完,循环等待

2204POP R0 R0出栈

2205OUT 80 ;输出R0的值

2206RET

A 2000

2000*EI ;开中断

A 2001

2001MVRD R00036 ;将字符6’ASCII码送寄存器R0

2003CALA 2200 ;输出该字符

2005MVRD R04000 ;延时子程序

2007DEC R0

2008JRNC 2007

2009JR 2001 ;跳到2001循环执行该程序

200ARET

G 2000

:本程序执行时只可执行一次中断,然后中断关闭;如果将2000的内存单元原值置为6F00,则从开始中断即为关闭;如果将21502000的内存单元原值都置为6E00,则中断一直都是开着的,可一直实现中断。(DI6F00EI6E00IRETEF00)

2)验证指令ADCSBBRCLRCRASRNOTCLCSTCCALRLDRASTRA的程序。

1ADC CLC

A 2000

2000MVRD R00100 ;给R0赋值0100

2002MVRD R11001 ;给R1赋值1001

2004

E 2004

2004:内存单元原值:6C00 ;进位C置为0

E 2005

2005:内存单元原值:2001 R0+R1+C—>R0

A 2006

2006RET ;程序结束

2007

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R0=1101 R1=1001

(说明:如果2004改为6D00,则进位C1,R01102)

2SBB STC

A 2080

2080MVRD R00011 ;给R0赋值0011

2082MVRD R11011 ;给R1赋值1011

E 2084

2084:内存单元原值:2110 R1-R0-C—>R1 or R1-R0+/C—>R1

E 2085

2085:内存单元原值:6D00 ;进位C置为1

A 2086

2086RET ;程序结束

2087

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2080

运行结果为:R0=0011 R1=OFFF

(说明:如果2005改为6C00,则进位C0,答案应为1000)

(3)RCL

A 2000

2000MVRD R01111 ;给R0赋值1111

2002

E 2002

2002:内存单元原值:6D00 ;进位C置为1

E 2003

2003:内存单元原值:2A00 R0 R0带进位C循环左移

A 2004

2004RET ;程序结束

2005

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R0=2223

(说明:R0 本为0001000100010001,带进位C=1 左移后为 0010001000100011,即为 2223)

(4)RCR

A 2000

2000MVRD R01111 ;给R0赋值1111

2002:

E 2002

2002: 内存单元原值:6D00 ;进位C置为1

E 2003

2003: 内存单元原值:2B00 R0 R0带进位C循环右移

A 2004

2004: RET ;程序结束

2005

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R0=8888

(说明:R0 本为0001000100010001,带进位C=1右移后为 1000100010001000,即为 8888)

(5) ASR

A 2030

2030MVRD R01111 ;给R0赋值1111

2032:

E 2032

2032: 内存单元原值:2C00 R0 R0算术右移

A 2033

2033: RET ;程序结束

2034:

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2030

运行结果为:R0=0888

(说明:R0 本为0001000100010001,算术右移后为 0000100010001000,即为 0888)

6NOT

A 2040

2040MVRD R01111 ;给R0赋值1111

2042:

E 2042

2042: 内存单元原值:2D00 R0 /R0

A 2043

2043: RET ;程序结束

2044:

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2040

运行结果为:R0=1111

(说明:R0 本为0001000100010001,取反后为1110111011101110,即为 EEEE)

7JMPR

A 2100

2100MVRD R10011 ;给R1赋值0011

2102MVRD R21100 ;给R2赋值1100

2104ADD R1R2 R1 R1+R2

2105RET ;程序结束

2106

A 2000

2000MVRD R32100 ;转跳地址为2100

2002

E 2002

2002:内存单元原值:6003 ;转跳到R3指明的地址

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R1=1111R2=1100R3=2100

8JRS JRNS

A 2000

2000MVRD R00001 ;给R0赋值0001

2002MVRD R11101 ;给R1赋值1101

2004SUB R1R0 R1 R1-R0

E 2005

2005: 内存单元原值:6403 S=1时跳转,PC PC+3

A 2006

2006: MVRD R2, EEEE ;给R2赋值EEEE

2008RET

2009MVRD R2FFFF ;给R2赋值FFFF

200BRET

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R0=0001R1=1101R2=EEEE

(说明:1如果2004SUB R0R1,则S=0,跳转到2009语句。结果为R0=DF00R1=1101R2=FFFF2 如果2005语句为 6503,则结果恰好相反,够减跳转,答案为R0=DF00R1=1101R2=FFFF,不够减不跳转,结果为R0=0001R1=1100R2=EEEE

9 CALR

A 2000

2000MVRD R00101 ;给R0赋值0101

2002MVRD R11010 ;给R1赋值1010

2004MVRD R22100 R2指明的子程序的地址为2100

2006

E 2006

2006:内存单元原值:E002 ;调用R2指明的子程序

A 2007

2007MVRD R61111 ;给R6赋值1111

2009MVRD R72222 ;给R7赋值2222

200BADD R6R7 R6 R6+R7

A 2100

2100MVRD R0, 1111 ;给R0赋值1111

2102MVRD R1, 1010 ;给R1赋值1010

2104 RET

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R0=1111,R1=1010,R2=2100,R6=3333,R7=2222

(10) LDRA

E 2100 内存单元原值:0039 内存单元原值:0039

E 2000

2000 内存单元原值:E400 ;将内存单元2100的内容赋给寄存器R0

E 2001

2001 内存单元原值:2100

A 2002

2002OUT 80 ;输出R0的内容

2003IN 81 ;判断是否输出完

2004SHR R0

2005JRNC 2003 ;未完,则循环测试

E 2006

2006 内存单元原值:E400 ;将内存单元2101的内容赋给寄存器R0

E 2007

2007 内存单元原值:2101

A 2008

2008OUT 80

2009RET

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:99

R3=2100

(11)LDRX

E 2062

2062 内存单元原值:5F00 ;把2062的内容变为5F00,用做检验

A 2000

2000MVRD R1AAAA ;给R1赋值AAAA

2002MVRD R20000 ;给R2赋值0000

2004

E 2004

2004 内存单元原值:E512 DR [DATA+SR],SRR2,DRR1

E 2005

2005 内存单元原值:2060 ;把DATA的值置为2060

A 2006

2006RET

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R1=5F00 R2=0000

(12)STRX

A 2000

2000MVRD R00111 ;给R0赋值0111

2002MVRD R10001 ;给R1赋值0001

2004

E 2004

2004 内存单元原值:E601 [DATA+SR] DR,SRR1,DRR0

E 2005

2005 内存单元原值:2060 DATA的值置为 2060

A 2006

2006RET

G命令运行前面刚键入的源程序,在命令提示符状态下输入:

G 2000

运行结果为:R0=0111,R1=0001

(说明:U命令查2061的内容,U 2061,查得其内容为0111)

(13)STRA

A 2000

2000 MVRD R01111 ;给R0赋值1111

2002

E 2002

2002 内存单元原值:E700 [ADR] SR,SRR0

E 2003

2003 内存单元原值:2060 DATA的值置为 2060

A 2004

2004RET

G命令运行前面刚键入的源程序,在命令提示符状态下输入:G 2000

运行结果为:R0=1111

(说明:U命令查2060的内容,U 2060,查得其内容为1111)

、自评

通过单步执行检测,证明了我们所写的29条基本指令CLC 扩展指令是正确的。测试程序的运行结果,也进一步证明所有指令准确无误。由此我们可以知道我们对16位机微程序控制器指令系统的设计是正确的,并且基本上达到了实验目的所要求的。鉴于设计过程中的表现,我们小组的每个成员都对自己进行了评价:

杨赛男:良 李春萌:良 覃筱媛:中 车平:良

十一、遇到的问题及解决方案

在单步方式下,通过指示灯观察各类扩展指令微码时,由于不是很仔细,使我们在观察指示灯时没有将一些不是很亮的灯读对,导致我们的结果与理论不符,后来我们就注意到这一细节并再犯这个错误。还有我们也曾经因为忘记改动拨动开关(单步、手动置指令、微程序、16位、联机),而导致返工,这不仅仅是马虎的问题,同时也是由于我们对这一部分知识的不熟稔所造成的,不过好在我们发现了这一错误并及时予以了纠正。

十二、总结和感想

通过三周的课程设计,实际的操作与知识理论的结合,使大家明显地对相关知识了解的更加透彻了,收获颇丰。在整个设计过程中,虽然小组四人各自分工明确,但是大家仍然不时交流彼此的经验,把自己的工作内容及学到的东西与同组人分享使知识得以互补。外,在每个人遇到困难时,我们也是互相讨论,共同解决问题这也使得我们的任务最终能够圆满完成。最后我们要说,我们每个组员都会铭记这次课设的经历,因为它让我们大家齐心协力,团结一致,并且最终收获了知识和珍贵的友谊。

附录一 基本指令流程框图

附录二 扩展指令流程框图

附录三 基本指令和扩展指令的微程序编码表(十六进制)

附录三 基本指令和扩展指令的微程序编码表(二进制)

附录四 八个控制存储器芯片中各存储单元的内容列表

tec2000 16位机微程序控制器指令系统的设计与实现

相关推荐