实验五 微程序控制器实验
一、实验目的
(1) 掌握微程序控制器的组成原理。
(2) 掌握微程序的编制、写入,观察微程序的运行过程。
二、实验内容
微程序设计思想是由剑桥大学的M.V.Wilkes教授首先提出的,为每一条机器指令编写一个微程序,每一个微程序包含一条或几条微指令,每一条微指令对应一个或几个控制各部件动作的微操作指令。然后把这些微程序存到一个控制存贮器中,用寻找用户程序机器指令的方法寻找每个微程序中的微指令。由于这些微指令是以二进制代码形式表示的,每位代表一个控制信号,因此,逐条执行每一条微指令,也就相应地完成了一条机器指令的全部操作;由于控制信号是以二进制代码的形式出现的,因此只要修改微指令的代码,就可改变操作内容,便于调试、修改、甚至增删机器指令,有利于计算机仿真。
微程序控制器原理框图
微程序控制器是严格按照系统时序来工作的,因而时序控制对于控制器的设计是非常重要的,从前面的实验可以很清楚地了解时序电路的工作原理,本实验所用的时序由CON单元来提供,分为三拍T1、T2、T3。
微程序控制器的组成见下图,采用四片6116或2816作为微存贮器,微命令寄存器32位,用四片8D触发器(74HC574)组成。
在取指周期的T2下降沿,读取的8位指令数据锁存到指令寄存器(IR)中;T3时刻,根据IR、状态条件(例如:进位标志位、零标志位等),译码生成该机器指令对应的微地址(该机器指令对应uM的首地址),送入微地址寄存器(uPC);如果不在取指周期,uPC的微地址来自于微指令寄存器的低8位(该机器指令对应的后续微地址);在T3的下降沿,将控制存贮器中输出的微指令锁存到微指令寄存器中。
微程序控制器原理图
CON单元有一组按键,与开关区的拨动开关组合,可用来对存贮器MEM、控制存贮器uM读写操作:EXEC按键上方有一指示灯,复位后,指示灯亮,表示实验仪处于运行状态,STEP
键、uSTEP键、iSTEP键、PULSE键有效;按一次EXEC键,实验仪切换到编辑状态,ADDR键、+1键、-1键、uM/M键、nRD键、nWR键有效;再按一次EXEC键,实验仪又切换到运行状态。如果在编辑状态时,使用按键,修改过MEM或uM的地址、数据,从编辑状态切换到运行状态后,请按一次nRST复位键,使实验仪回复初始设置(复位PC、uPC、微程序控制器等)。
以向uM的00H单元中写入44332211为例,对控制存贮器进行写入的具体操作步骤如下: (1)如果EXEC键上方指示灯熄灭,表示实验仪在uM、MEM编辑状态,转第二步;否则,按一次EXEC键,使EXEC键上方指示灯熄灭
(2)如果uM/M键上方指示灯亮,表示处于uM编辑状态,直接转第三步;否则,按uM/M键一次,使uM/M键上方指示灯点亮
(3)IN单元开关给出uM的首地址(00000000),按一次ADDR键,uPC单元的8个发光二级管全熄灭(1:点亮,0:熄灭)
(4)IN单元开关给出该控存单元数据的低八位(00010001),按一次nWR键,低八位数据写入6116/2816的同时,打入uM7-0对应的锁存器中,uM单元的uM0、uM4灯点亮,uM1-3、uM5-7指示灯熄灭
(5)按一次+1键,准备写该控存单元的15-8位;IN单元开关给出数据(00100010),按一次nWR键,15-8数据写入另一片6116/2816的同时,打入uM15-8对应的锁存器中,uM单元的uM9、uM13灯点亮,uM8、uM10-12、uM14-15指示灯熄灭
(6)按一次+1键,准备写该控存单元的23-16位;IN单元开关给出数据(00110011),按一次nWR键,23-16位数据写入另一片6116/2816的同时,打入uM23-16对应的锁存器中,uM单元的uM16、uM17、uM20、uM21灯点亮,uM18、uM19、uM22、uM23指示灯熄灭
(7)按一次+1键,准备写该控存单元的最高8位;IN单元开关给出数据(01000100),按一次nWR键,最高8位数据写入最后一片6116/2816的同时,打入uM31-24对应的锁存器中,uM单元的uM26、uM30灯点亮,uM24-25、uM27-29、uM31指示灯熄灭
如果再按一次+1键,uPC+1,uM单元uPC7-uPC0显示当前地址(00000001)
编辑完成后进行校验。以校验00H单元为例,对于控制存贮器uM进行校验的具体操作步骤如下:
(1)确认EXEC键上方指示灯熄灭;uM/M将上方指示灯点亮 (2)IN单元开关给出uM的首地址(00000000),按一次ADDR键,uPC单元的8个发光二级管全熄灭(1:点亮,0:熄灭)
(3)按一次nRD键,从6116/2816(低八位)读出数据,打入uM7-0对应的锁存器中,uM7-0指示灯显示数据(00010001)
(5)按一次+1键,准备读该控存单元的15-8位;按一次nRD键,从另一片6116/2816(中八位)读出数据,打入uM15-8对应的锁存器中,uM15-8指示灯显示数据(00100010)
(6)按一次+1键,准备读该控存单元的23-16位;按一次nRD键,从另一片6116/2816(高八位)读出数据,打入uM23-16对应的锁存器中,uM23-16指示灯显示数据(00110011)
(6)按一次+1键,准备读该控存单元的31-24位;按一次nRD键,从另一片6116/2816(最高八位)读出数据,打入uM31-24对应的锁存器中,uM31-24指示灯显示数据(01000100)
如果再按一次+1键,uPC+1,uM单元uPC7-uPC0显示当前地址(00000001) 如果按一次-1键,uPC-1,uM单元uPC7-uPC0显示当前地址(00000000);按nRD或nWR键一次,对uM31-24(最高八位)对应的芯片操作;继续按-1键,依次对高八位、中八位、低八位对应的芯片操作;减至低8位后,再按动-1键一次,微地址uPC会自动减一,继续对下一个单元的操作。
如校验的微指令出错,则返回输入操作,修改该单元的数据后再进行校验,直至确认输入的微代码全部准确无误为止,完成对微指令的输入。
微指令字长共 32位,控制位顺序如下表:
微指令格式
位 信号名 位 信号名 位 信号名 31 iEnd 20 CN_I 30 wA 19 rPC 29 wB 18 PC+1 28 wIR 17 nMAROE 27 SP_nOE 16 nPCOE 26 rRDi 15 nINTA 25 rRi 14 nWR 24 rALU 13 nRD 23 22 21 wPSW 11-8 S3..S0 A字段 12 M_nIO 7-0 uM_PC7..uM_PC0
A字段 23 0 0 1 1 22 0 1 0 1 选择 NOP wRi wPC wMAR 其中uM_PC7..uM_PC0为8位后续微地址,A为译码字段,由二个控制位译码出多位。 本实验用到的控制位:
wA:写暂存器A。wA低电平,在T1的下降沿,将iDBus上数据写到暂存器A。 wB:写暂存器B。wB低电平,在T2的下降沿,将iDBus上数据写到暂存器B。 wIR:写指令寄存器IR。wIR为低电平,在T2的下降沿,将iDBus上数据写到IR。 rRDi:读通用寄存器。rRDi低电平,在T1时刻,通用寄存器中数据输出到内部数据总线iDBus上。
rRi: 读通用寄存器。rRi低电平,在T2时刻,通用寄存器中数据输出到内部数据总线iDBus上;在T3时刻,如果rALU信号为高电平,通用寄存器中数据也输出到iDBus上。
rALU:允许ALU结果输出到iDBus上。rALU低电平,在T3时刻,ALU的运算结果输出到iDBus上,这时rRi、nRD只在T2时刻有效,T3时刻让出iDBus。
wRi:写通用寄存器。wRi低电平,在T3的下降沿,将iDBus上数据写到通用寄存器中。 CN_I、S3..S0:控制ALU执行何种操作,详细请参阅基本运算器实验 读I/O(nIO_RD) 写I/O(nIO _WR) M_nIO 0 0 nRD 0 1 nWR 1 0 有效期 T2,T3(rALU=1) T2 本系统上的指令译码规则: 机器码IR7..IR0 00-7FH 80-9FH A0-DFH E0-EFH F0-F3H F8-FFH 译码输出地址 IR_A7..IR_A0 00001,IR6..IR4 00110, IR4..IR2 00,IR6..IR2,0 010,IR3..IR0,0 04H-07H 00111,IR2..IR0 微地址范围 IR_A7..IR_A0 08H-0FH 30H-37H 10H-2FH 40H-5FH 04H-07H 38H-3FH 说明 B8-BFH译码为1EH 指令译码电路在IR单元的CPLD中实现 本实验只使用了微控器产生的部分控制信号;除了ALU、通用寄存器R0、指令寄存器IR、指令译码电路外,还要用到IN和OUT单元,由微控器出来的信号M_nIO、nWR和 nRD三个信号控制,所以对这两个单元的读写信号还应先经过译码,其译码原理如下图:
读写控制逻辑
IR单元原理图
R0原理图 OUT单元原理图