实验2:使用实验仪小键盘输入 uM
1.连接 J1, J2 2.打开电源
3.按 TAB键, 选择 uM 4.输入两位地址, 00
5.按 NEXT, 进入微程序修改 6.按六位微程序数据
7.按 NEXT选择下个地址/按 LAST选择上个地址 8.重复 6,7步输入微程序 9.按 RESET结束
2.6 中断实验
中断控制器原理图
中断电路有两个D触发器,分别用于保存中断请求信号(IREQ)及中断响应信号(IACK)。 INT有上升沿时,IREQ触发器被置为 1。当下一条指令取指时(IREN=0), 存贮器 EM的读信号(EMRDP)被关闭,同时产生读中断指令(ICEN)信号, 程序的执行被打断转而去执行 B8指令响应中断。在取 B8的同时置 IACK触发器被置为 1,禁止新的中断响应。 EINT信号置 IACK,IREQ触发器为 0,中断电路可以响应新的中断。
连接线表 连接 1 2 3 4 信号孔 IREN IENT INT CLOCK 接入孔 K0 K1 INT脉冲 作用 IR, uPC写允许 清中断寄存器 中断输入 有效电平 低电平有效 低电平有效 上升沿有效 上升沿有效 CLOCK脉冲 时钟输入 按 INT脉冲键,产生中断请求,此时黄色 IREQ指示灯亮。 置控制信号为:
K0(IREN) 0 K1(IENT) 1 按 CLOCK脉冲键,产生取指脉冲,黄色 IACK指示灯亮,同时 B8输出红色指示灯。 置控制信号为:
K0(IREN) 1 IREQ,IACK灯灭。
K1(IENT) 0 第三章 COP2000模型机
3.1 模型机总体结构
COP2000模型机包括了一个标准 CPU所具备所有部件,这些部件包括:运算器 ALU、累加器 A、工作寄存器 W、左移门 L、直通门 D、右移门 R、寄存器组 R0-R3、程序计数器 PC、地址寄存器 MAR、堆栈寄存器 ST、中断向量寄存器 IA、输入端口 IN、输出端口寄存器 OUT、程序存储器 EM、指令寄存器 IR、微程序计数器 uPC、微程序存储器 uM,以及中断控制电路、跳转控制电路。其中运算器和中断控制电路以及跳转控制电路用 CPLD来实现,其它电路都是用离散的数字电路组成。微程序控制部分也可以用组合逻辑控制来代替。
模型机为 8位机,数据总线、地址总线都为 8位,但其工作原理与 16位机相同。相比而言 8位机实验减少了烦琐的连线,但其原理却更容易被学生理解、吸收。模型机的指令码为 8位,根据指令类型的不同,可以有 0到 2个操作数。指令码的最低两位用来选择 R0-R3寄存器,在微程序控制方式中,用指令码做为微地址来寻址微程序存储器,找到执行该指令的微程序。而在组合逻辑控制方式中,按时序用指令码产生相应的控制位。在本模型机中,一条指令最多分四个状态周期,一个状态周期为一个时钟脉冲,每个状态周期产生不同的控制逻辑,实现模型机的各种功能。模型机有 24位控制位以控制寄存器的输入、输出,选择运算器的运算功能,存储器的读写。24位控制位分别介绍如下:
XRD :外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。 EMWR:程序存储器 EM写信号。 EMRD:程序存储器 EM读信号。
PCOE:将程序计数器 PC的值送到地址总线 ABUS上。
EMEN:将程序存储器 EM与数据总线 DBUS接通,由 EMWR和 EMRD决定是将 DBUS数据写到 EM中,还是从 EM读出数据送到 DBUS。
IREN:将程序存储器 EM读出的数据打入指令寄存器 IR和微指令计数器 uPC。 EINT:中断返回时清除中断响应和中断请求标志,便于下次中断。
ELP: PC打入允许,与指令寄存器的 IR3、IR2位结合,控制程序跳转。 MAREN:将数据总线 DBUS上数据打入地址寄存器 MAR。 MAROE:将地址寄存器 MAR的值送到地址总线 ABUS上。
OUTEN:将数据总线 DBUS上数据送到输出端口寄存器 OUT里。 STEN:将数据总线 DBUS上数据存入堆栈寄存器 ST中。
RRD:读寄存器组 R0-R3,寄存器 R?的选择由指令的最低两位决定。 RWR:写寄存器组 R0-R3,寄存器 R?的选择由指令的最低两位决定。 CN:决定运算器是否带进位移位,CN=1带进位,CN=0不带进位。 FEN:将标志位存入 ALU内部的标志寄存器。
X2、X1、X0: X2、X1、X0三位组合来译码选择将数据送到 DBUS上的寄存器。
X2 0 0 0 0 X1 0 0 1 1 X0 0 1 0 1 指示灯(红色) IN指示 IA指示 ST指示 PC指示 液晶显示(数据总线值) 输入门(K23-K16) 中断向量(由拨动开关给出) 堆栈寄存器 PC寄存器 1 1 1 1 0 0 1 1 0 1 0 1 D直通门指示 R右移门指示 L左移门指示 D直通门 R右移门 L左移门 没有输出 WEN:将数据总线 DBUS的值打入工作寄存器 W中。 AEN:将数据总线 DBUS的值打入累加器 A中。
S2、S1、S0: S2、S1、S0三位组合决定 ALU做何种运算。 S2 0 0 0 0 1 1 1 1 S1 0 0 1 1 0 0 1 1 S0 0 1 0 1 0 1 0 1 操作 A+W A-W A|W A&W A+W+C A-W-C ~A A 功能 加 减 或 与 带进位加 带进位减 A取反 输出A 3.2 模型机寻址方式
模型机的寻址方式分五种: 1. 累加器寻址:
操作数为累加器 A,例如“CPL A”是将累加器 A值取反,还有些指令是隐含寻址累加器 A,例如“OUT”是将累加器 A的值输出到输出端口寄存器 OUT。
2. 寄存器寻址:
参与运算的数据在 R0-R3的寄存器中,例如 “ADD A,R0”指令是将寄存器 R0的值加上累加器 A的值,再存入累加器 A中。
3. 寄存器间接寻址:
参与运算的数据在存储器 EM中,数据的地址在寄存器 R0-R3中,例如 “MOV A,@R1”指令是将寄存器 R1的值做为地址,把存储器 EM中该地址的内容送入累加器 A中。
4. 存储器直接寻址:
参与运算的数据在存储器 EM中,数据的地址为指令的操作数。例如 “AND A,40H”指令是将存储器 EM中 40H单元的数据与累加器 A的值做逻辑与运算,结果存入累加器 A。
5. 立即数寻址:
参与运算的数据为指令的操作数。例如 “SUB A,#10H”是从累加器 A中减去立即数 10H,结果存入累加器 A。
3.3 模型机指令集
模型机的缺省的指令集分几大类:算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入 /输出指令。用户可以通过 COP2000计算机组成原理实验软件或组成原理实验仪来设计自己的指令集,有关如何设计指令/微指令的介绍将在后面第六章说明。
助记符 _FATCH_ ADD A,R? ADD A,@R? ADD A,MM ADD A,#II ADDC A,R? ADDC A,@R? ADDC A,MM ADDC A,#II SUB A,R? SUB A,@R? SUB A,MM SUB A,#II SUBC A,R? SUBC A,@R? SUBC A,MM SUBC A,#II AND A,R? AND A,@R? AND A,MM AND A,#II OR A,R? OR A,@R? OR A,MM OR A,#II MOV A,R? MOV A,@R? MOV A,MM MOV A,#II MOV R?,A MOV @R?,A MOV MM,A MOV R?,#II READ MM WRITE MM JC MM 机器码1 机器码2 注释 实验机占用,不可修改。复位后,所有寄存器清0,首先执行_FATCH_指令取指 未使用 未使用 未使用 将寄存器R?的值加入累加器A中 将间址存储器的值加入累加器A中 将存储器MM地址的值加入累加器A中 将立即数II加入累加器A中 将寄存器R?的值加入累加器A中,带进位 将间址存储器的值加入累加器A中,带进位 将存储器MM地址的值加入累加器A中,带进位 将立即数II加入累加器A中,带进位 从累加器A中减去寄存器R?的值 从累加器A中减去间址存储器的值 从累加器A中减去存储器MM地址的值 从累加器A中减去立即数II加入累加器A中 从累加器A中减去寄存器R?的值,减进位 从累加器A中减去间址存储器的值,减进位 从累加器A中减去存储器MM地址的值,减进位 从累加器A中减去立即数II,减进位 累加器A“与”寄存器R?的值 累加器A“与”间址存储器的值 MM累加器A“与”存储器MM地址的值 II累加器A“与”立即数II 累加器A“或”寄存器R?的值 累加器A“或”间址存储器的值 MM累加器A“或”存储器MM地址的值 II累加器A“或”立即数II 将寄存器R?的值送到累加器A中 将间址存储器的值送到累加器A中 MM将存储器MM地址的值送到累加器A中 II将立即数II送到累加器A中 将累加器A的值送到寄存器R?中 将累加器A的值送到间址存储器中 将累加器A的值送到存储器MM地址中 将立即数II送到寄存器R?中 从外部地址MM读入数据,存入累加器A中 将累加器A中数据写到外部地址MM中 未使用 未使用 若进位标志置1,跳转到MM地址 000000xx 000001xx 000010xx 000011xx 000100xx 000101xx 000110xx MM 000111xx II 001000xx 001001xx 001010xx MM 001011xx II 001100xx 001101xx 001110xx MM 001111xx II 010000xx 010001xx 010010xx MM 010011xx II 010100xx 010101xx 010110xx 010111xx 011000xx 011001xx 011010xx 011011xx 011100xx 011101xx 011110xx 011111xx 100000xx 100001xx 100010xx MM 100011xx II 100100xx MM 100101xx MM 100110xx 100111xx 101000xx MM