地址总线ALU-GARS3S2S1S0LDARALUPC-GMEMLED-GT4LDDR1T4LDDR2PCDR2LOADLDPCCEWEWEOUTDR1数据总线R0-GR0LDR0时序微控制器WET1T2INIRLDIRSW-G
图2-l 数据通路框图
微程序 24 23 22 21 20 19 18 控制信号 S3 S2 S1 S0 M CN RD 17 16 15 14 13 A 12 11 10 B 9 8 P 7 6 uA5 5 uA4 4 uA3 3 uA2 2 1 M17 M16 uA1 uA0 表2-1 基本模型机微指令结构图
A字段 15 0 0 0 0 1 1 1 14 0 0 1 1 0 0 1 13 0 1 0 1 0 1 0 控制信号 LDRI LDDR1 LDDR2 LDIR LOAD LDAR 12 0 0 0 0 1 1 1 11 0 0 1 1 0 0 1 B字段 10 0 1 0 1 0 1 0 控制信号 RS_G ALU_G PC_G 9 0 0 0 0 1 1 1 8 0 0 1 1 0 0 1 P字段 7 0 1 0 1 0 1 0 控制信号 P1 P4 LDPC 系统涉及到的微程序流程见图2-2,当拟定“取指令”微指令时,该微指令的判别测试字段为P1测试。由于“取指令”微指令是所有微程序都使用的公用微指令,因此P1的测试结果出现多路分支。本机用指令寄存器的高4位(I7—I4操作码)作为测试条件,出现5路分支,占用5个固定微地址单元。
控制台操作为P4测试,它以控制台开关SWB、SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。当分支微地址单元固定后,剩下的其它地方就可以一条微指令占用一个微地址单元随意填写。
当全部微程序设计完毕后,应将每条微指令代码化,表2-2即为将图2-2的微程序流程图按微指令格式转化而成的“二进制微代码表”。
0020P4WRITE(01)21PC→ARPC+124SW→BUSBUS→DR130DR1→RAMPC→ARPC+122RAM→BUSBUS→DR127DR1→LEDREAD(00)20(SWBSWA)RUN(11)2301运行01PC→ARPC+102RAM→BUSBUS→IR10P1INADDSTA12PC→ARPC+107RAM→BUSBUS→AR15R0→BUSBUS→RAMOUTJMP10SW→R011PC→ARPC+103RAM→BUSBUS→AR04RAM→BUSBUS→DR205R0→DR106DR1+DR2→R013PC→ARPC+116RAM→BUSBUS→AR17RAM→BUSBUS→DR12514PC→ARPC+126RAM→BUSBUS→PC010101DR1→LED0101
图2-2 微程序流程图
表2-2 二进制代码 微地址 S3 S2 S1 S0 M CN RD M17 M16 A B P uA5 uA4 uA3 uA2 uA1uA0 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 0 1 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 0 0 1 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 1 1 1 0 0 1 1 0 1 1 0 1 本系统有两种外部I/O设备,一种是二进制数码开关,作为输入设备(INPUT);另一种是两位十六进制数LED数码管,作为输出设备(OUTPUT UNIT)。在输入时,二进制开关数据直接经过三态门送到总线上。只要开关状态不变,输入的信息也不变。输出时,将输出数据送到数据总线上,当写信号(WE)有效时,将数据打入输出锁存器,驱动数码块显示。
五、实验步骤及注意事项:
1、根据该模型机的指令系统,编写一段程序。这里给出两个参考程序。 参考程序一:
本程序从输入设备(数码开关)取入数据,保存在内存单元08,然后从08单元送到输出设备(LED数码管)进行显示。每次循环过程中,可以使输入设备数据改变,考察输出显示的结果(请实验者考虑:如何修改程序,使程序只执行一次从输入设备取出数据,送出输出设备显示)。设计机器指令程序如下(机器码和地址为十六进制数据)。
地址 00
内 容 00
助记符 IN
说 明
;输入开关数据→R0
01 02 03 04 05 06
20 STA [08H] 08 30 OUT [08H] 08 40 00
JMP [00H]
;R0→[08] ;地址
;[08H] →BUS ;地址 ;00H→PC ;跳转地址
参考程序二:
本程序从输入设备(数码开关)读入数据,与0A单元的数据相加,然后送到输出设备(LED数码管)进行显示。本程序不断地循环运行,在运行中可改变输入开关(INPUT)的值,观察输出显示的变化。
设计机器指令程序如下(机器码和地址为十六进制数据)。 地 址 内 容 00 01 02 03 04 05 06 07 08 0A
00 10 0A 20 0B 30 0B 40 00 01
助记符 说 明 IN ADD [0AH]
STA [0BH] OUT [0BH]
JMP [00H]
;输入开关数据→R0,采集数据
;R0+[0AH]→R0,输入数据与指定数据相加 ;地址 ;R0→[0B] ;地址
;[0BH] →BUS,输出显示 ;地址 ;00H→PC ;跳转地址 ;加数,可自定
0B ;求和结果保存在0B单元
2、按图2-3连接实验线路(图中箭头表示需要接线的地方,接总线和控制信号时要注意高低位一一对应,可用彩排线的颜色来进行区分)。
3、写程序
对于本实验箱可以用两种方法来写入程序。 方法一:联机读/写程序
按照规定格式,将机器指令及表2-2微指令二进制表编辑成十六进制的规定格式文件。微指令格式中的微指令代码为将表2-2中的24位微代码按从左到右分成3个8位,将此三个8位二进制代码化为相应的十六进制数即可。
使用联机软件的文件装载将实验程序和微程序下载到实验箱中,并用软件的读出功能进行检查。其中参考程序一对应的文件名为“基本模型机1.TXT”,参考程序二对应的文件名为“基本模型机2.TXT”(联机软件的使用方法参看附录2)。
方法二:手动写入
(1)先将机器指令对应的微代码正确地写入28C16中,由于在实验1.7微程序控制器的组成与微程序设计实验中已将微代码写入EPR0M芯片中,对照表2-2校验正确后就可使用。
(2)使用控制台WRITE和READ微程序进行机器指令程序的装入和检查,其操作如下:
A、 使SIGNAL UNIT单元的SP03为“STEP”状态,SP04为“RUN”状态,CONTROLUNIT的开关SP05处于“NORM”状态,开关SP06处于“RUN” 状态。
B、拨动开关单元的总清开关CLR(1?0?1),微地址寄存器清零,程序计数器清零。然后使开关单元的SWB、SWA开关设置为“01”,按动一次控制台单元的触动开关START,微地址显示灯显示“010001”,再按动一次START,微地址灯显示“010100”,此时数据开关的内容(输入单元)置为要写入的机器指令的内容,按动两次START键后,即完成该条指令的写入。若仔细阅读WRITE的流程,就不难发现,机
2
器指令的首地址总清后为零,以后每个循环PC会自动加1。所以,每次按动START,只有在微地址灯显示“010100”时,才设置内容,直到所有机器指令写完。
C、校验。拨动SWITCH单元的总清开关CLR(1?0?1),微地址清零。PC程序计数器清零,然后使SWITCH单元的开关SWB、SWA为“00”,按动CONTROL UNIT的触动开关START,微地址灯将显示“010000”,再按START,微地址灯显示为“010010”,第三次按START,微地址灯显示为“010111”,再按START后,此时OUTPUT单元的数码管显示为该首地址中的内容。不断按动START,以后每个循环PC会自动加1,可检查后续单元内容。每次在微地址灯显示为“010000”时,是将当前地址中的机器指令写入到输出设备中显示。
TS1TS2TS3TS4CLOCKSIGNALT1T2T3T4CKALU接到DATABUSD0..JD1.D7ALU_GS3S2S1S0MCNALU_GS3S2S1S0MCNPC_GLDARLOADLDPCPC_GLDARLOADLDPCADDRESS接到DATABUSLDDR1LDDR2LDDR1LDDR2Y1WECEWED0...D7A0...A7接到ADDRBUSI0...I7LOGSE1...SE6SE1...SE6MICROMEM参考程序一的机器指令:
$P0000 $P0120 $P0208 $P0330 $P0408 $P0540 $P0600
参考程序二的机器指令:
接到IR单元接到SWITCH单元接到DATABUSSWASWB接到LOG单元LDIRLDIRSWASWBP1P2P3P4P1P2P3P4Y0IRIRI0...I7SW_GINPUTREGD0...D7接到DATABUSR0_GRS_GY2WELED_GWELDR0LDRIOUTPUTD0...D7
图2-3 基本模型机实验接线图