程序计数器(PC)原理图
地址寄存器(MAR)原理图
本实验安排了四条机器指令,分别为ADD(0000 0000)、IN(1010 1000)、OUT(1010 1100)和JMP(1110 0111),括号中为各指令的二进制代码,指令格式如下: 助记符 IN ADD OUT JMP addr8 机器指令码 1010 1000 0000 0000 1010 1100 1110 0111 ******** 说明 IN -> R0 R0 + R0 -> R0 R0 -> OUT addr8->PC 无条件跳转指令JMP是双字节指令,11100111是指令码,********是8位二进制地址码。
微程序控制器实验的指令是通过开关区的拨动开关手动给出的,本实验由CPU通过PC单元提供8位地址、控制总线单元CBus提供存贮器读写信号nM_RD、nM_WR,从存贮器MEM单元读取指令并运行。新的数据通路图如下:
数据通路图
在数据通路图中可以看出,在微程序控制器实验的基础上增加了三个部件:MAR、PC、MEM。在微指令中需要增加相应的控制位。
微指令字长共 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。 SP_nOE:允许堆栈输出地址。SP_nOE低电平,在T1、T2、T3时刻,堆栈寄存器SP中数据输出到地址总线上。
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上数据写到通用寄存器中。 wPC:写PC。wPC低电平,在T3的下降沿,将iDBus上数据写到PC中。
wMAR:写地址寄存器MAR。wMAR低电平,在T3的下降沿,将iDBus上数据写到地址寄存器MAR中。
wPSW: 不允许影响标志寄存器PSW。wPSW低电平,在T3的下降沿,将ALU中当前运算结果(对标志位的影响)写入标志寄存器PSW;wPSW高电平,任何时刻,不影响PSW。例如:PUSH指令需要在压栈前,SP堆栈寄存器-1(放到ALU中运算),不允许像DEC(-1)指令一样影响标志位(PSW)。
CN_I、S3..S0:控制ALU执行何种操作,详细请参阅基本运算器实验 rPC:读PC。rPC低电平,在T1、T2时刻,PC数据输出到iDBus上。 PC+1:允许PC+1。PC+1信号高电平,在T3的下降沿,PC+1->PC。
nMAROE:允许MAR输出地址。nMAROE低电平,在T1、T2、T3时刻,MAR中数据输出到地址总线上。
nPCOE: 允许PC输出地址。nPCOE低电平,在T1、T2、T3时刻,PC中数据输出到地址总线上。
注意:nPCOE、nMAROE、SP_nOE三个信号在任意时刻只允许一个信号有效 nINTA:中断响应信号。 读MEM(nM_RD) 写MEM(nM_WR) 读I/O(nIO_RD) 写I/O(nIO _WR) M_nIO 1 1 1 1 nRD 0 1 0 1 nWR 1 0 1 0 有效期 T2,T3(rALU=1) T2 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中实现。
四条机器指令对应的参考微程序流程图如下图所示。取指后译码,使微程序产生分支。
微程序流程图
将全部微程序按微指令格式变成二进制微代码:
地址 00 08 09 0A 14 16 4E HEX 6F0ED001 3B0AF009 5D0AF00A 7E4AF800 7F4AC000 7D0AA000 7F8AD000 高八位 6F 3B 5D 7E 7F 7D 7F A字段 00 00 00 01 01 00 10 21,19-12位 0 11101101 0 10101111 0 10101111 0 10101111 0 10101100 0 10101010 0 10101101 二进制微代码表
地址 00 08 09 0A 14 16 3F HEX 6F0ED001 3B0AF009 5D0AF00A 7E4AF800 7F49C000 7D09A000 7F0AF03F 高八位 6F 3B 5D 7E 7F 7D 7F A字段 00 00 00 01 01 00 00 21,19-12位 0 11101101 0 10101111 0 10101111 0 10101111 0 10011100 0 10011010 0 10101111 CN_I 0 0 0 0 0 0 0 S3-S0 0000 0000 0000 1000 0000 0000 0000 uM_PC7..uM_PC0 01 09 0A 00 00 00 3F CN_I 0 0 0 0 0 0 0 S3-S0 0000 0000 0000 1000 0000 0000 0000 uM_PC7..uM_PC0 01 09 0A 00 00 00 00 设计一段机器程序,要求从IN单元读入一个数据,存于R0,将R0和自身相加,结果存于R0,再将R0的值送OUT单元显示。根据要求可以得到如下程序,地址和内容均为二进制数。 地址 内 容 助记符 说明 00000000 1010 1000 ;START:IN R0 ;从IN单元读入数据送 R0 00000001 0000 0000 ; ADD R0,R0 ;R0 + R0 -> R0 00000010 1010 1100 ; OUT R0 ;R0的值送OUT单元显示 00000011 1110 0111 ; JMP START ;跳转至00H地址 00000100 0000 0000
三、实验结果及分析
四、思考题
1.使用本实验系统中提供的微程序,加法指令ADD执行阶段需要几个机器周期?能否修改加法指令ADD执行阶段的微程序,使其执行速度加快?如果可以,请给出修改方案。修改后用几个机器周期?
使用本实验系统中提供的微程序,加法指令ADD执行阶段需要3个机器周期,能修改加法指令ADD执行阶段的微程序,使其执行速度加快。
修改方案:将08H单元的值改为修改为190AF00A加法指令ADD执行阶段的微程序后只需要2个机器周期。