1、实验三 微程序控制器实验3.2.1 实验目的(1) 掌握微程序控制器的组成原理。(2) 掌握微程序的编制、写入,观察微程序的运行过程。3.2.2 实验设备PC 机一台,TD-CMA 实验系统一套。3.2.3 实验原理微程序控制器的基本任务是完成当前指令的翻译和执行,即将当前指令的功能转换成可以控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操作。它的执行方法就是将控制各部件动作的微命令的集合进行编码,即将微命令的集合仿照机器指令一样,用数字代码的形式表示,这种表示称为微指令。这样就可以用一个微指令序列表示一条机器指令,这种微指令序列称为微程序。微程序存储在一种专用的存储器中,称为控制
2、存储器,微程序控制器原理框图如图 3-2-1 所示。OP 地 址 转 移 逻 辑P字 段指 令 寄 存 器 IR .状 态 条 件微 地 址 寄 存 器控 制 字 段 .控 制 存 储 器地 址 译 码 微 命 令 信 号图 3-2-1 微程序控制器组成原理框图控制器是严格按照系统时序来工作的,因而时序控制对于控制器的设计是非常重要的,从前面的实验可以很清楚地了解时序电路的工作原理,本实验所用的时序由时序单元来提供,分为四拍 TS1、TS2、TS3、TS4,时序单元的介绍见附录 2。微程序控制器的组成见图 3-2-2,其中控制存储器采用 3 片 2816 的 E2PROM,具有掉电保护功能,微
3、命令寄存器 18 位,用两片 8D 触发器(273)和一片 4D(175)触发器组成。微地址寄存器 6 位,用三片正沿触发的双 D 触发器(74)组成,它们带有清“0”端和预置端。在不判别测试的情况下,T2 时刻打入微地址寄存器的内容即为下一条微指令地址。当T4 时刻进行测试判别时,转移逻辑满足条件后输出的负脉冲通过强置端将某一触发器置为“1”状态,完成地址修改。G74LS24574LS273G74LS24574LS24574LS27374LS175MA5MA4MA3MA2MA1MA0SE12SE374LS245ALU_B4GRD_BSE5SSP_B0I138 译码PCP3LDCSTIRDWS
4、3IOM2S01LDARM23LDALDRiBOSPCLRKCLRKCLRKCRA-DECGNDCLB-DECC-DECM6M8M9M14 MA5.MA0GSA5 . SA074LS245G. .SD07 . SD0SD17 . SD10SD27 . SD20. . . . . . . .M23-M0微代码显示RCMA5.MA0. . .138译码138 译码GND微地址显示灯MA5.MA0I1 Y7Y1Y1Y6Y7Y1. .CLRON单元P2.1P2.0单片机P2.D7 . D02816A5A0CSOEWED7 . D02816A5A0CSOEWED7 . D02816A5A0CSOEWE
5、编程逻辑T2INTA图 3-2-2 微程序控制器原理图在实验平台中设有一组编程控制开关 KK3、KK4、KK5(位于时序与操作台单元) ,可实现对存储器(包括存储器和控制存储器)的三种操作:编程、校验、运行。考虑到对于存储器(包括存储器和控制存储器)的操作大多集中在一个地址连续的存储空间中,实验平台提供了便利的手动操作方式。以向 00H 单元中写入 332211 为例,对于控制存储器进行编辑的具体操作步骤如下:首先将 KK1 拨至停止档、KK3 拨至编程档、KK4 拨至控存档、KK5 拨至置数档,由 CON 单元的 SD05SD00 开关给出需要编辑的控存单元首地址(000000) ,IN 单
6、元开关给出该控存单元数据的低 8 位(00010001) ,连续两次按动时序与操作台单元的开关 ST(第一次按动后 MC 单元低 8 位显示该单元以前存储的数据,第二次按动后显示当前改动的数据) ,此时 MC 单元的指示灯 MA5MA0 显示当前地址(000000) ,M7M0 显示当前数据(00010001) 。然后将 KK5 拨至加 1档,IN 单元开关给出该控存单元数据的中 8 位(00100010) ,连续两次按动开关 ST,完成对该控存单元中 8 位数据的修改,此时 MC 单元的指示灯 MA5MA0 显示当前地址(000000) ,M15M8 显示当前数据(00100010) ;再由
7、 IN 单元开关给出该控存单元数据的高 8 位(00110011) ,连续两次按动开关 ST,完成对该控存单元高 8 位数据的修改此时 MC 单元的指示灯 MA5MA0 显示当前地址(000000) ,M23M16 显示当前数据(00110011) 。此时被编辑的控存单元地址会自动加 1(01H) ,由 IN 单元开关依次给出该控存单元数据的低8 位、中 8 位和高 8 位配合每次开关 ST 的两次按动,即可完成对后续单元的编辑。C O N 单元置地址( 0 0 0 0 0 0 )S D 0 5 - S D 0 0 = 0 0 0 0 0 0I N 单元置数据低 8 位( 0 0 0 1 0
8、0 0 1 )I N = 0 0 0 1 0 0 0 1K K 3 = 编程K K 4 = 控存K K 5 = 置数S T = I N 单元置数据中 8 位( 0 0 1 0 0 0 1 0 )I N = 0 0 1 0 0 0 1 0K K 3 = 编程K K 4 = 控存K K 5 = 加 1S T = I N 单元置数据高 8 位( 0 0 1 1 0 0 1 1 )K K 1 = 停止I N = 0 0 1 1 0 0 1 1K K 3 = 编程K K 4 = 控存K K 5 = 加 1S T = K K 1 = 停止K K 1 = 停止编辑完成后需进行校验,以确保编辑的正确。以校验
9、00H 单元为例,对于控制存储器进行校验的具体操作步骤如下:首先将 KK1 拨至停止档、KK3 拨至校验档、KK4 拨至控存档、KK5 拨至置数档。由 CON 单元的 SD05SD00 开关给出需要校验的控存单元地址(000000) ,连续两次按动开关 ST,MC 单元指示灯 M7M0 显示该单元低 8 位数据(00010001) ;KK5 拨至加 1档,再连续两次按动开关 ST,MC 单元指示灯 M15M8 显示该单元中 8 位数据(00100010) ;再连续两次按动开关 ST,MC 单元指示灯 M23M16 显示该单元高 8 位数据(00110011) 。再连续两次按动开关 ST,地址加
10、 1,MC 单元指示灯 M7M0 显示 01H 单元低 8 位数据。如校验的微指令出错,则返回输入操作,修改该单元的数据后再进行校验,直至确认输入的微代码全部准确无误为止,完成对微指令的输入。C O N 单元置地址( 0 0 0 0 0 0 )S D 0 5 - S D 0 0 = 0 0 0 0 0 0= 0 0 0 1 0 0 0 1K K 3 = 校验K K 4 = 控存K K 5 = 置数S T = M C 单元 M 1 5 M 8 显示数据中 8 位( 0 0 1 0 0 0 1 0 )M 1 5 M 8 = 0 0 1 0 0 0 1 0K K 3 = 校验K K 4 = 控存K
11、K 5 = 加 1S T = M C 单元 M 7 M 0 显示数据中 8 位( 0 0 0 1 0 0 0 1 )M 7 M 0M C 单元 M 2 3 M 1 6 显示数据高 8 位( 0 0 1 1 0 0 1 1 )M 2 3 M 1 6 = 0 0 1 1 0 0 1 1K K 3 = 校验K K 4 = 控存K K 5 = 加 1S T = K K 1 = 停止K K 1 = 停止 K K 1 = 停止位于实验平台 MC 单元左上角一列三个指示灯 MC2、MC1、MC0 用来指示当前操作的微程序字段,分别对应 M23M16、M15M8、M7M0。实验平台提供了比较灵活的手动操作方式
12、,比如在上述操作中在对地址置数后将开关 KK4 拨至减 1档,则每次随着开关 ST 的两次拨动操作,字节数依次从高 8 位到低 8 位递减,减至低 8 位后,再按动两次开关 ST,微地址会自动减一,继续对下一个单元的操作。微指令字长共 24 位,控制位顺序如表 3-2-1:表 3-2-1 微指令格式A字 段 B字 段 C字 段141312选 择000001LDA010LDB011LDR0100保 留10111023M23221201918-1514-121-98-65-0WRRDIOM A字 段 B字 段 C字 段 MA5-MA0S3-S0NOP111LDIR保 留保 留1109选 择0000
13、01ALU_B010R0_B011保 留100保 留101110NOP111保 留保 留保 留876选 择000001P010保 留011保 留100保 留101110NOP111保 留保 留保 留M2其中 MA5MA0 为 6 位的后续微地址,A、B、C 为三个译码字段,分别由三个控制位译码出多位。C 字段中的 P为测试字位。其功能是根据机器指令及相应微代码进行译码,使微程序转入相应的微地址入口,从而实现完成对指令的识别,并实现微程序的分支,本系统上的指令译码原理如图 3-2-3 所示,图中 I7I2 为指令寄存器的第 72 位输出,SE5SE0 为微控器单元微地址锁存器的强置端输出,指令译
14、码逻辑在 IR 单元的INS_DEC(GAL20V8)中实现。从图 3-2-2 中也可以看出,微控器产生的控制信号比表 3-2-1 中的要多,这是因为实验的不同,所需的控制信号也不一样,本实验只用了部分的控制信号。本实验除了用到指令寄存器(IR)和通用寄存器 R0 外,还要用到 IN 和 OUT 单元,从微控器出来的信号中只有 IOM、WR 和 RD 三个信号,所以对这两个单元的读写信号还应先经过译码,其译码原理如图 3-2-4 所示。IR 单元的原理图如图 3-2-5 所示,R0 单元原理如图3-2-7 所示,IN 单元的原理图见图 2-1-3 所示,OUT 单元的原理图见图 3-2-6 所
15、示。SE3T4PI7SE2T4PI6SE0T4I4I672P SE1T4I5I673P图 3-2-3 指令译码原理图X M R DX M W RX I O WX I O RR DT 3W RI O M锁存 ( 2 7 3 )I 7 . . . I 2 I 3 . . . I 0I N S _ D E C R E G _ D E C. . .B 7 . . . B 0 8 线排针I 7. . .I 08 线排针L D I RT 3图 3-2-4 读写控制逻辑 图 3-2-5 IR 单元原理图锁存 ( 2 7 3 )七段数码管 ( H ) 七段数码管 ( L )a . . . ga . . . g
16、L E D _ BI O WD 7 . . . D 4 D 3 . . . D 0译码电路 译码电路数据总线D 7 . . . D 0. . .锁存 ( 3 7 4 ). . .C P U 内总线D 7 . . . D 0D 7 . . . D 0Q 7 . . . Q 0. . .L D R 0R 0 _ BT 4图 3-2-6 OUT 单元原理图 图 3-2-7 R0 原理图本实验安排了四条机器指令,分别为 ADD(0000 0000) 、IN(0010 0000) 、OUT(0011 0000)和 HLT(0101 0000) ,括号中为各指令的二进制代码,指令格式如下:助 记 符 机
17、器 指 令 码 说 明IN01 0 IN R0AD R0 + R0OUT01 0 OUTHL 停 机实验中机器指令由 CON 单元的二进制开关手动给出,其余单元的控制信号均由微程序控制器自动产生,为此可以设计出相应的数据通路图,见图 3-2-8 所示。几条机器指令对应的参考微程序流程图如图 3-2-9 所示。图中一个矩形方框表示一条微指令,方框中的内容为该指令执行的微操作,右上角的数字是该条指令的微地址,右下角的数字是该条指令的后续微地址,所有微地址均用 16 进制表示。向下的箭头指出了下一条要执行的指令。P为测试字,根据条件使微程序产生分支。图 3-2-8 数据通路图NOP0指 令 译 码P
18、IN-R0R0-OUTNOPR0-AR0-BA+B-R0 013032045 33530ADINOUTHLT010101 35图 3-2-9 微程序流程图将全部微程序按微指令格式变成二进制微代码,可得到表 3-2-2 的二进制代码表。表 3-2-2 二进制微代码表地址 十六进制 高五位 S3-S0 A 字段 B 字段 C 字段 MA5-MA000 00 00 01 00000 0000 000 000 000 00000101 00 70 70 00000 0000 111 000 001 11000004 00 24 05 00000 0000 010 010 000 00010105 04
19、 B2 01 00000 1001 011 001 000 00000130 00 14 04 00000 0000 001 010 000 00010032 18 30 01 00011 0000 011 000 000 00000133 28 04 01 00101 0000 000 010 000 00000135 00 00 35 00000 0000 000 000 000 1101013.2.4 实验步骤1. 连接实验线路按图 3-2-10 所示连接实验线路,仔细查线无误后接通电源。如果有滴报警声,说明总线有竞争现象,应关闭电源,检查接线,直到错误排除。M C单元A L U _ B
20、A L U _ BL D AL D BL D AL D BA L U & R E G单元S 3S 0S 3S 0.P P C P U内总线S E 5S E 0S E 5S E 0.I R 单元时序与操作台单元T S 1T S 2T 1T 2L D I RL D I R扩展单元控制总线W RI O MW RI O MR DR DX I O RX I O WI N 单元数据总线L D R 0L D R iR 0 _ BR S _ BC O N 单元T S 3T S 4T 3T 4D 7D 0.I N 7I N 0.O U T 7O U T 0.D 7D 0. . . . . . .S D 2 7S
21、 D 2 0D 7D 0.O U T 单元R DW RI N _ BL E D _ BG N DX D 7X D 0.D 7D 0.D 7D 0. . . . .3 0 H ZC L K 0控制总线图 3-2-10 实验接线图2. 对微控器进行读写操作(1) 手动对微控器进行编程(写) 将时序与操作台单元的开关 KK1 置为停止档,KK3 置为编程档,KK4 置为控存档,KK5 置为置数档。 使用 CON 单元的 SD05SD00 给出微地址,IN 单元给出低 8 位应写入的数据,连续两次按动时序与操作台的开关 ST,将 IN 单元的数据写到该单元的低 8 位。 将时序与操作台单元的开关 KK
22、5 置为加 1档。 IN 单元给出中 8 位应写入的数据,连续两次按动时序与操作台的开关 ST,将 IN 单元的数据写到该单元的中 8 位。IN 单元给出高 8 位应写入的数据,连续两次按动时序与操作台的开关 ST,将 IN 单元的数据写到该单元的高 8 位。 重复、四步,将表 3-2-2 的微代码写入 2816 芯片中。(2) 手动对微控器进行校验(读) 将时序与操作台单元的开关 KK1 置为停止档,KK3 置为校验档,KK4 置为控存档,KK5 置为置数档。 使用 CON 单元的 SD05SD00 给出微地址,连续两次按动时序与操作台的开关ST,MC 单元的指数据指示灯 M7M0 显示该单
23、元的低 8 位。 将时序与操作台单元的开关 KK5 置为加 1档。 连续两次按动时序与操作台的开关 ST,MC 单元的指数据指示灯 M15M8 显示该单元的中 8 位,MC 单元的指数据指示灯 M23M16 显示该单元的高 8 位。 重复、四步,完成对微代码的校验。如果校验出微代码写入错误,重新写入、校验,直至确认微指令的输入无误为止。3. 运行微程序 将时序与操作台单元的开关 KK1、KK3 置为运行档,按动 CON 单元的 CLR 按钮,将微地址寄存器(MAR)清零,同时也将指令寄存器(IR) 、ALU 单元的暂存器 A 和暂存器B 清零。 将时序与操作台单元的开关 KK2 置为单拍档,然
24、后按动 ST 按钮,体会系统在T1、 T2、T3、 T4 节拍中各做的工作。T2 节拍微控器将后续微地址(下条执行的微指令的地址)打入微地址寄存器,当前微指令打入微指令寄存器,并产生执行部件相应的控制信号;T3、T4 节拍根据 T2 节拍产生的控制信号做出相应的执行动作,如果测试位有效,还要根据机器指令及当前微地址寄存器中的内容进行译码,使微程序转入相应的微地址入口,实现微程序的分支。 按动 CON 单元的 CLR 按钮,清微地址寄存器(MAR)等,并将时序与单元的开关KK2 置为单步档。 置 IN 单元数据为 00100011,按动 ST 按钮,当 MC 单元后续微地址显示为 000001时,在 CON 单元的 SD27SD20 模拟给出 IN 指令 00100000 并继续单步执行,当 MC 单元后续微地址显示为 000001 时,说明当前指令已执行完;在 CON 单元的 SD27SD20 给出 ADD指令 00000000,该指令将会在下个 T3 被打入指令寄存器(IR) ,它将 R0 中的数据和其自身相加后送 R0;接下来在 CON 单元的 SD27SD20 给出 OUT 指令 00110000 并继续单步执行,在 MC 单元后续微地址显示为 000001 时,观查 OUT 单元的显示值是否为 01000110。