判断指示灯A5A4A3A2A1A0A5A4A3A2A1A0CINTQA5A4A3A2A1A0A5A4A3A2A1A0A5A4A3A2A1A0u_A0— u_A5Q5Q4Q3Q2Q1Q0D0D1D2D3D4D5IR4IR5IR6IR7SWA图11 微程序控制器的组成
对应微指令格式,微程序控制器的组成见图11。控制存储器采用5片EEPROM 28C64(U8、U9、U10、U11、U12)。28C64的输出是D0—D7,分别与引脚11、12、13、15、16、17、18、19相对应,CM0是最低字节,CM4是最高字节。微地址寄存器6位,用一片6D触发器74HC174(U1)组成,带有清零端。两级与门、或门构成微地址转移逻辑,用于产生下一微指令的地址。在每个T1上升沿时刻,新的微指令地址会打入微地址寄存器中,控制存储器随即输出相应的微命令代码。微地址转移逻辑生成下一地址,等下一个T1上升沿时打入微地址寄存器。跳转开关JUMP(J1)是一组6个跳线开关。当用短路子将它们连通时,微地址寄存器?AR从本实验系统提供的微程序地址译码电路得到新的微程序地址?D0—?D5。当他们被断开时,用户提供自己的新微程序地址?D0—?D5。这样用户能够使用自己设计的微程序地址译码电路。5片EEPROM的地址A6(引脚4)直接与控制台开关SWC连接,当SWC = 1时,微地址大于或者等于40H,当SWC = 0时,微地址的范围为00H—3FH。SWC主要用于实现读寄存器堆的功能。
微地址转移逻辑的多个输入信号中,INTQ是中断请求,本实验中可以不理会。SWA、SWB是控制台的两个二进制开关信号,实验台上线已接好接。C是进位信号,IR7—IR4是机器指令代码,由于本次实验不连接数据通路,这些信号都接到二进制开关K0—K15上。
三、机器指令与微程序
为教学中简单明了,本实验仪使用12条机器指令,均为单字长(8位)指令。指令
25
SWBD7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0NC4NC3NC2NC1NC0TJS2S1S0M1LDDR1WRDLRWCEL#ALU_BUSRS_BUS#SW_BUS#IAR_BUS#LDERM3AR1_INCLDAR1LDIARM4PC_INCPC_ADDLDPCLDIRINTCINTSP3P2P1P0uA5uA4uA3uA2uA1uA0CM428C64CM328C64CM228C64CM128C64CM028C64......uAR74HC174CLR#T1微地址指示灯uD0— uD5JUMP功能及格式如表5所示。指令的高4位提供给微程序控制器,低4位提供给数据通路。
表5 指令功能与格式 名称 加法 减法 乘法 逻辑与 存数 取数 无条件转移 条件转移 停机 中断返回 开中断 关中断
助记符 ADD Rd,Rs SUB Rd,Rs MUL Rd,Rs AND Rd,Rs STA Rd,[Rs] LDA Rd,[Rs] JMP [Rs] JC D STP IRET INTS INTC 功能 Rd+Rs->Rd Rd-Rs->Rd Rd*Rs->Rd Rd&Rs->Rd Rd->[Rs] [Rs]->Rd [Rs]->PC 若C=1则 PC+D->PC 暂停运行 返回断点 允许中断 禁止中断 指令格式 R7 R6 R5 R4 R3 R2 R1 R0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 0 1 0 1 1 1 1 0 0 RS1 RS0 RS1 RS0 RS1 RS0 RS1 RS0 RS1 RS0 RS1 RS0 RS1 RS0 D3 D2 X X X X X X X X RD1 RD0 RD1 RD0 RD1 RD0 RD1 RD0 RD1 RD0 RD1 RD0 X X D1 D0 X X X X X X X X
应当指出,用以上12条指令来编写实际程序是不够的。好在我们的目的不是程序设
计,而主要是为了教学目的,通过CPU执行一些最简单的程序来掌握微程序控制器的工作原理。
上述12条指令的微程序流程设计如图12所示。每条微指令可按前述的微指令格式转换成二进制代码,然后写入5个28C64中。
为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还设计了以下五个控制台操作微程序:
26
KT00001:KRD17SW_BUS#LDAR13FCEL#LRW=1TJ3EAR1_INC010:KWE27SW_BUS#LDAR1TJ3DSW_BUS#CEL#LRW=03CAR1_INCTJ0010:MUL12M1=0LDDR1M2=0LDDR239ALU=A*BALU_BUSLDERWD34WRDOFP3011:KLD37SW_BUS#LDAR1M3=1LDAR2TJ33SW_BUS#CEL#LRW=007100:KRR47SW_BUS#LDAR1M3=1LDAR2TJ46SW_BUS#CEL#LRW=0000:PR45CERLDIR44RS_BUS#TJ07SW_BUS#M4=1LDR4LDPC32CERLDIRTJ31SW_BUS#LDER30WRDTJQE05M3=0LDAR2CERLDIRPC-INCP2100FLDAR205INTQ=0P1INTQ=125INTCLDIARTJ26SW_BUS#M4=1LDR4LDPCINT0000:ADD10M1=0LDDR1M2=0LDDR23BALU=A+BALU_BUSLDER0001:SUB11M1=0LDDR1M2=0LDDR23AALU=A-BALU_BUSLDER0011:AND13M1=0LDDR1M2=0LDDR238ALU=A&BALU_BUSLDER0101:LDA15RS_BUS#LDAR136CEL#LRW=1LDER0100:STA14M2=0LDDR2RS_BUS#LDAR135ALU=AALU_BUSCEL#LRW=0OF1000:JMP18RS_BUS#M4=1LDR4LDPCOF0110:1010:STPIRET161ATJIAR_BUS#0FC=0OFM4=1P0LDR4C=11FLDPCM4=0OFLDR4PC_ADDLDPCOF1001:JC191011:1100:INTSINTC1B1CINTCINTSOFOF图12 微程序流程图 27
存储器写操作(KWE):按下复位按钮CLR#后,微地址寄存器状态为全零。此时置SWC = 0、SWB =1,SWA =0,按启动按钮后微指令地址转入27H,从而可对RAM连续进行手动写入。
存储器读操作(KRD):按下复位按钮CLR#后,置SWC = 0,SWB =0,SWA =1,按启动按钮后微指令地址转入17H,从而可对RAM连续进行读操作。
写寄存器操作(KLD):按下复位按钮CLR#后,置SWC = 0,SWB =1,SWA =1,按启动按钮后微指令地址转入37H,从而可对寄存器堆中的寄存器连续进行写操作。
读寄存器操作(KRR):按下复位按钮CLR#后,置SWC = 1,SWB =0,SWA =0,按启动按钮后微指令地址转入47H,从而可对寄存器堆中的寄存器连续进行读操作。
启动程序(PR):按下复位按钮CLR#后,置SWC = 0,SWB = 0,SWB = A,用数据开关SW7—SW0设置内存中程序的首地址,按启动按钮后微指令地址转入07H,然后转到“取指”微指令。 应当着重指出,在微指令格式的设计过程中,对数据通路所需的控制信号进行了归并和化简。细心的同学可能已经发现,微程序控制器输出的控制信号远远少于数据通路所需的控制信号。这里提供的微程序流程图,是没有经过归并和化简的。仔细研究一下微程序流程图,就会发现有些信号的出现的位置完全一样,这样的信号用其中一个信号就可以代表。请看信号LDPC和LDR4,这两个信号都在微程序地址07H、1AH、1FH、26H出现,而在其他的微程序地址都不出现,因此这两个信号产生的逻辑条件是完全一样的。从逻辑意义上看,这两个信号的作用是产生新的PC,完全出现在相同的微指令中是很正常的,因此用LDPC完全可以代替LDR4。还有另一些信号,例如LDDR1和LDDR2,出现的位置基本相同。LDDR2和LDDR1的唯一不同是在地址14H的微指令中,出现了LDDR2信号,但是没有出现LDDR1信号。LDDR1和LDDR2是否也可以归并成一个信号呢?答案是肯定的。微程序流程图中只是指出了在微指令中必须出现的信号,并没有指出出现其他信号行不行,这就要根据具体情况具体分析。在地址14H的微指令中,出现LDDR1信号行不行呢?完全可以。在地址14H出现的LDDR1是一个无用的信号,同时也是一个无害的信号,它的出现完全没有副作用,因此LDDR1和LDDR2可以归并为一个信号LDDR1。根据以上两条原则,我们对下列信号进行了归并和化简:
LDIR(CER) 为1时,允许对IR加载,此信号也可用于作为双端口存储器右端口选择CER。 LDPC(LDR4) 为1时,允许对程序计数器PC加载,此信号也可用于作为R4的加载允许信号
LDR4。
LDAR1(LDAR2) 为1时,允许对地址寄存器AR1加载,此信号也可用于作为对地址寄存器AR2
加载。
LDDR1(LDDR2) 为1时允许对操作数寄存器DR1加载。此信号也可用于作为对操作数寄存器
DR2加载。
M1(M2) 当M1 = 1时,操作数寄存器DR1从数据总线DBUS接收数据;当M1 = 0时,
操作数寄存器DR1从寄存器堆RF接收数据。此信号也可用 于作为操作数寄存器DR2的数据来源选择信号。
在对微指令格式进行归并和化简的过程中,我们有意保留了一些信号,没有化简,同学们可以充分发挥创造性,提出更为简单的微指令格式。 还要说明的是,为什麽微指令格式可以化简,实验台数据通路的控制信号为什麽不进行化简?最主要的原因是前面进行的各个实验的需要,例如LDDR1和LDDR2这两个信号,在做运算器数据通路实验时,是不能设计成一个信号的。还有一个原因是考虑到实验时易于理解,对某些可以归并的信号也没有予以归并。
28
四、实验设备
(1)TEC-4计算机组成原理实验系统一台 (2)双踪示波器一台 (2)直流万用表一只 (3)逻辑测试笔一支
五、实验任务
(1)按实验要求连接实验台的数码开关K0—K15、按钮开关、时钟信号源和微程序控制器。 注意:本次实验只做微程序控制器本身的实验,故微程序控制器输出的微命令信号与执行部件(数据通路)的连线暂不连接。连线完成后应仔细检查一遍,然后才可加上电源。 (2)观察时序信号。
用双踪示波器观测时序产生器的输入输出信号:MF,W1—W4,T1—T4。比较相位关系,画出其波形,并标注测量所得的脉冲宽度。观察时须将TJ1接低电平,DB、DZ、DP开关均置为0状态,然后按QD按钮,则连续产生T1、T2、T3、T4、W1、W2、W3、W4。
了解启停控制信号的功能,并熟练地使用连接这些控制信号的按钮或开关。
(3)熟习微指令格式的定义,按此定义将控制台指令微程序的8条微指令按十六进制编码,列于下表。三种控制台指令的功能由SWC、SWB、SWA三个二进制开关的状态来指定(KRD =001B,KWE=010B,PR=000B)。此表必须在预习时完成。
微指令地址 微指令编码 微指令地址 微指令编码 00H 3CH 07H 17H 27H 3FH 3DH 3EH
单拍(DP)方式执行控制台微程序,读出上述八条微指令,用P字段和微地址指示灯跟踪微指令执行情况,并与上表数据对照。用连续方式执行KWE和KRD(将TJ1接地),画出u_A0(28C64的地址A0,U12的引脚10)信号波形,作出解释。
单拍(DP)方式执行控制台微程序,读出上述八条微指令,用P字段和微地址指示灯跟踪微指令执行情况,并与上表数据对照。用连续方式执行KWE和KRD(将TJ1接地),画出u_A0(28C64的地址A0,U12的引脚10)信号波形,作出解释。
(4)用P3和SWC、SWB、SWA的状态组合,观察验证三种控制台指令KRD、KWE、PR微地址转移逻辑功能的实现。
(5)熟习05H、10H两条微指令的功能和P2测试的状态条件(IR4—IR7),用二进制开关设置IR7—IR4的不同状态,观察ADD至STP九条机器指令微地址转移逻辑功能的实现。(用逻辑笔测试有关逻辑电路的电平,分别做出测试记录,自行设计表格。)
(6)设置IR7—IR4的不同组合,用单拍方式执行ADD至STP九条机器指令微程序,用微地址和P字段指示灯跟踪微程序转移和执行情况。用逻辑笔测试小插座上输出的微命令信号,记录ADD、SUB、LDA、STA四条机器指令的微命令信号,自行设计表格。
六、实验步骤和实验结果
29