(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 30 29 28 27 26 25 24 23 22 21 信号SP_nrALwPiEnd wA wB wIR rRDi rRi A字段 名 OE U SW 位 20 19 18 17 16 15 14 13 12 11-8 信号CN_rPPC+nMAnPCOnINnWM_nnRD S3..S0 名 I C 1 ROE E TA R IO 位 7-0 信号uM_PC7..uM_PC0 名
A字段 23 22 选择 0 0 NOP 0 1 wRi 1 0 wPC 1 1 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执行何种操作,详细请参阅基本运算器实验 M_nIO nRD nWR 有效期 读0 0 I/O(nIO_RD) 写I/O(nIO 0 1 _WR) 本系统上的指令译码规则: 机器码IR7..IR0 00-7FH 80-9FH A0-DFH 译码输出地址 IR_A7..IR_A0 00001,IR6..IR4 00110, IR4..IR2 00,IR6..IR2,0 1 0 T2,T3(rALU=1) T2 微地址范围 IR_A7..IR_A0 08H-0FH 30H-37H 10H-2FH 说明 B8-BFH译码为1EH E0-EFH 010,IR3..IR0,0 40H-5FH F0-F3H 04H-07H 04H-07H F8-FFH 00111,IR2..IR0 38H-3FH 指令译码电路在IR单元的CPLD中实现 本实验只使用了微控器产生的部分控制信号;除了ALU、通用寄存器R0、指令寄存器IR、指令译码电路外,还要用到IN和OUT单元,由微控器出来的信号M_nIO、nWR和 nRD三个信号控制,所以对这两个单元的读写信号还应先经过译码,其译码原理如下图:
读写控制逻辑
IR单元原理图
OUT单元原理图
R0
扩展区电路(辅助电路)
原
使用二位数码管显示8位数据 理
同时使用二位数码管、8个发光二极管显示8位数据
使用8个发光二极管最多显示8位数据
本实验安排了四条机器指令,分别为ADD(0000 0000)、IN(1010 1000)、OUT(1010 1100)和HALT(1111 1111),括号中为各指令的二进制代码,指令格式如下: 助记符 机器指令码 说明 IN 1010 1000 IN -> R0
图
ADD 0000 0000 R0 + R0 -> R0 OUT 1010 1100 R0 -> OUT HALT 1111 1111 停机 实验中机器指令码由开关区的拨动开关手动给出,其它控制信号由uM单元自动产生,为此实验设计的通路图如下:
数据通路图
几条机器指令对应的参考微程序流程图如下图所示。图中一个矩形方框表示一条微指令,方框中的内容为该指令执行的微操作,右上角的数字是该条指令的微地址,右下角的数字是该条指令的后续微地址,所有微地址均用16进制表示。向下的箭头指出了下一条要执行的指令。取指后译码,根据条件使微程序产生分支。
微程序流程图
将全部微程序按微指令格式变成二进制微代码: 地HEX 高八A字21,19-12CN_I S3-S0 uM_PC7..uM_PC0 址 位 段 位 00 6F0ED001 6F 00 0 0 0000 01