第一章 性能特点
COP2000计算机组成原理实验系统主要是为配合讲授与学习《计算机组成原理》课程而研制的。与其它产品相比,具有以下特点:
1.1 硬件先进特点 1. 实时监视器
各单元部件都以计算机结构模型布局,清晰明了,各寄存器、部件均有 8位数据指示灯显示其二进制值,两个 8段码 LED显示其十六进制值,清楚明了,两个数据流方向指示灯,以直观反映当前数据值及该数据从何处输出,而又是被何单元接收的。这是该产品独创的“实时监视器”,使得系统在实验时即使不借助 PC机,也可实时监控数据流状态及正确与否,彻底改变了其它实验设备为监控状态必须加入读操作的不真实实验方法,使得学生十分容易认识和理解计算机组成结构。实验系统各部件可以通过 J1、J2、J3座之间不同的连线组合,可进行各部件独立的实验,也可进行各部件组合实验,再通过与控制线的组合,就可构造出不同结构及复杂程度的原理性计算机。
2. 开放式设计
实验系统的软硬件对用户的实验设计具有完全的开放特性。与众不同的是:COP2000各实验模块的数据线、地址线与系统之间的挂接是通过三态门,而不是其它实验设备所采用的扁平连线方法,而数据线、地址线是否要与系统连通,则由用户连线控制,这样,就真实的再现了计算机工作步骤。需要强调指出的是:用“连线跨接”并不能说明其开放特性,而所谓的开放性应指的是运算器、控制器及微程序指定的格式及定义能否进行修改和重新设计。COP2000系统的运算器采用了代表现代科技的EDA技术设计,随机出厂时,已提供一套已装载的方案,能进行加、减、与、或、带进位加、带进位减、取反、直通八种运算方式,若用户不满意该套方案,也可自行重新设计并通过JTAG口下载。控制器微指定格式及定义可通过键盘和PC机进行重新设计,从而产生与众不同的指令系统。
系统的数据线、地址线、控制线均在总线插孔区引出,并设计了40芯锁进插座,供用户进行RAM、8251、8255、8253、8259等接口器件的扩展实验。
系统提供的两种控制器之一的组合逻辑控制器已下载有一套完整的实验方案,用户也可使用CPLD工具在PC机上进行自动化设计。对于不熟悉EDA语言的用户,可利用COP2000调试环境中的图形表格组合自动产生EDA语言,然后在CPLD工具下载入大规模逻辑器件中,对于熟悉EDA的语言的用户,则还可直接利用ABEL或VHDL进行重新设计。其开放程度非一般设备所及。
开放式设计的特点还在于,用户可以设计自己的指令/微指令系统。系统中已带三套指令/微程序系统,用户可参照来设计新的指令/微程序系统。
3. 万用汇编器
用户可以自定义指令/微指令系统,COP2000软件可以对用户自己定义的汇编助记符进行编译,自动生成代码/微代码。实验系统出厂时提供了完善的指令系统:
算术运算:ADD、ADDC、SUB、SUBC 逻辑运算:AND、OR、CPL 赋值运算:MOV
转移指令:JMP、JC、JZ 调子程序:CALL、RET 中断指令:INT、RETI 端口输入输出:IN、OUT
外部设备输入输出:READ、WRITE
其中的输入输出指令:IN、OUT,模仿CPU的端口的输入输出,外部设备输入输出指令:READ、WRITE,可用来访问外设,这两条指令有否直接决定其能否进行接口器件的实验。若没有则表明其无法进行完整模型机实验。
很多实验机还不支持子程序调用、返回指令CALL、RET。我们知道在调用子程序时涉及到压栈、退栈的概念,这在COP2000实验仪中可从微程序层面上十分形象的观察整个执行过程。
4. 完善的寻址方式
累加器寻址:如CPL A
寄存器寻址:如 MOV A,R0
寄存器间接寻址:如 MOV A,@R0 立即数寻址:如 MOV A,#12H 存储器寻址:如 MOV 34H,A
5. 支持中断实验
采用最底层的器件设计而非有些产品所采用的集成器件8259,从而让学生可以从微程序层面上学习中断请求、中断响应、中断处理、中断入口地址的产生、中断服务程序及中断返回(RETI)整个过程。
专家指出:“中断”是单片机、微机、DSP等学科中不可或缺的功能,故应在计算机原组成原理这门基础学科中对其进行充分的学习和实验。
6. 两种控制器方式
系统提供两种控制器方式,即微程序控制器和组合逻辑控制器。在微程序控制器中,系统能提供在线编程,实时修改程序,显示程序并调试进行的操作环境。组合逻辑控制器,已下载有一套完整的实验方案,用户也可使用CPLD工具在PC机上进行自动化设计。对于不熟悉EDA语言的用户,可利用COP2000调试环境中的图形表格组合自动产生EDA语言,然后在CPLD工具下载入大规模逻辑器件中,对于熟悉EDA的语言的用户,则还可直接利用ABEL或VHDL进行重新设计。其开放程序非一般设备所及。
微程序控制器和组合逻辑控制器两种类型都有流水和非流水两种方案。
7. 三种工作方式
(1)“手动方式”——不连PC机,通过COP2000实验仪的键盘输入程序、微程序,用LCD及各部件的8个状态LED,两个方向LED观察运行状态和结果,手动进行实验;
(2)“联机方式”——连PC机,通过WINDOWS调试环境及图形方式进行更为直观的实验。在 WINDOWS调试环境中提供了功能强大的逻辑分析和跟踪功能,既可以以波形的方式显示各逻辑关系,也可在跟踪器中,观察到当前状态的说明及提示;
(3)“模拟方式”,不需实验仪,仅需计算机即可进行实验。
8. 强大自检功能
系统设计强有力的自检功能,能自动检测各部件的工作正确与否,并可定位、提示存在问题的部分,并在LCD上精确提示。
9. 适当的集成度
计算机组成原理如何解决集成度的问题是各厂家所深感矛盾的难题。伟福公司利用“软件硬化,硬件软化”技术对其进行了适度的分配:运算器、组合逻辑控制器利用大规模可编程逻辑器件实现,其它部件则采用通过逻辑器件实现。这就既可让一般学生利用现有的逻辑知识去认识计算机原理,也可让熟练的学生进行更高层次的开发实践。
10. 完善的保护措施
随机提供了高性能的开关稳压电源,系统中多次采用了抗短路,防过流的设计方法,使其具备良好的稳定性。深入考虑了学生实验的一般特点。
1.2 软件先进特点
COP2000软件支持WINDOWS95/98/2000/XP/ME,集成编辑器、汇编器、调试器。独一无二的“模拟调试”能力,可完全模拟实验机的所有功能。强大的功能、友好的界面定会成为计算机组成原理实验系统的行业标准。
1. 多媒体教学
凭借伟福在软件设计上的精湛技术,COP2000计算机组成原理所配备的PC机WINDOWS调试软件不仅能进行编辑、编译,并向系统装载实验程序,还提供了单步、断点、实时运行的调试手段,同时,还提供了实验各部件的结构图、时序图、电路原理图。结构图中实时反映程序执行过程中的数据流向及相关的部件;原理图中再现了各部件的详细的组成原理;时序图中则实时反映当前的逻辑关系。所有这些均可通过投影仪可把当前的信息、状态和对应关系进行多媒体教学实践。
2. 强大的模拟调试功能
“模拟调试”是指无硬件的情况下,只利用计算机即可进行编辑、编译、改错、调试。计算机组成原理是一门实践性很强的学科,长期以来学时的紧缺成为该科目的主要矛盾。学校即使能做到“人手一机”,也不可能让学生把实验设备带出实验室,也不可能二十四小时开放。“模拟调试”为让实验室向学生寝室、实验课时向业余时间延伸提供了条件,同时也确保了实验室的有效管理,因为“模拟调试”只需给学生一张光盘既可,并可任意复制。这已成为很多学校采用的实验方式。
3. 逻辑分析仪
对于教师而言,不难体会要讲清时序关系是不容易的。而学生理解并利用时序关系则难上加难。而由于现代集成技术的迅猛发展,在实际工作中需要更多的利用逻辑分析工具进行时序分析。伟福COP2000计算机组成原理与系统结构教学实验系统具备高性能逻辑分析功能,老师可通过电化教学设备向学生现场展示指令与时序的关系,可让学生在实验时直观地观测到指令与时序的关系,可有效的提高教学效果。
4. 模型机结构图
该窗口中完全模拟了模型机结构框图,能实时反应程序执行过程中各单元状态变化,总线的数据流向。点击各模块即弹出电路原理图。
5. 微程序及跟踪器
跟踪器窗口跟踪程序的执行过程,包括:助记符号、状态、微地址、微程序、数据输出、数据输入、地址输出、运算器、移位控制、uPC、PC。
1.3 实验系统组成
COP2000计算机组成原理实验系统由实验平台、开关电源、软件三大部分组成。
实验平台上有寄存器组R0-R3、运算单元、累加器A、暂存器W、直通/左移/右移单元、
地址寄存器、程序计数器、堆栈、中断源、输入/输出单元、存储器单元、微地址寄存器、指令寄存器、微程序控制器、组合逻辑控制器、扩展座、总线插孔区、微动开关/指示灯、逻辑笔、脉冲源、20个按键、字符式 LCD、RS232口。
第二章 分部实验项目
对于硬件的描述可以有多种方法:如原理图,真值表,高级语言(本手册使用ABEL),时序图等等,在本手册中使用以上的四种方式来综合描述硬件。
2.1 寄存器实验
寄存器的作用是用于保存数据的,因为我们的模型机是8位的,因此在本模型机中大部寄存器是8位的,标志位寄存器(Cy, Z)是二位的。
COP2000用74HC574来构成寄存器。74HC574的功能如下:
1. 在 CLK的上升沿将输入端的数据打入到8个触发器中
2. 当OC = 1 时触发器的输出被关闭,当OC=0时触发器的输出数据 OC 1 0 0 X CLK X 0 1 ↑ Q7?Q0 Q7?Q0 Q7?Q0 D7?D0 注释 当OC=0时触发器的输出数据 当时钟为高时,触发器保持数据不变 在CLK的上升沿将输入端的数据打入到触发器中 ZZZZZZZZ OC为1时触发器的输出被关闭
74HC574工作波形图
实验1:A,W寄存器实验
寄存器A原理图
寄存器W原理图
寄存器A,W写工作波形图
连接线表 连接 1 2 信号孔 J1座 AEN 接入孔 J3座 K3 选通A 作用 将K23-K16接入DBUS[7:0] 低电平有效 有效电平 3 4 WEN K4 选通W 低电平有效 上升沿打入 ALUCK CLOCK ALU工作脉冲
1. 将55H写入A寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据55H K23 K22 K4(WEN) K21 K20 K19 K3(AEN) K18 K17 K16 置控制信号为: 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器A的黄色选择指示灯亮,表明选择A寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据55H被写入A寄存器。
2. 将66H写入W寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据66H
K23 K22 K4(WEN) K21 K20 K19 K3(AEN) K18 K17 K16 置控制信号为: 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器W的黄色选择指示灯亮,表明选择W寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据66H被写入W寄存器。
注意观察:
1.数据是在放开CLOCK键后改变的,也就是CLOCK的上升沿数据被打入。 2.WEN,AEN为高时,即使CLOCK有上升沿,寄存器的数据也不会改变。
实验2:R0,R1,R2,R3寄存器实验
寄存器R原理图
寄存器R写工作波形图
连接线表 连接 1 2 信号孔 J1座 RRD 接入孔 J3座 K11 作用 将K23-K16接入DBUS[7:0] 寄存器组读使能 低电平有效 有效电平 3 4 5 6 RWR SB SA RCK K10 K1 K0 CLOCK 寄存器组写使能 寄存器选择B 寄存器选择A 寄存器工作脉冲 低电平有效 上升沿打入 1. 将11H写入R0寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据11H K23 K22 K11(RRD) K21 K20 K10(RWR) K19 K1(SB) K18 K17 K0(SA) K16 置控制信号为:
按住CLOCK脉冲键,CLOCK由高变低,这时寄存器R0的黄色选择指示灯亮,表明选择R0寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据11H被写入R0寄存器。
2. 将22H写入R1寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据 22H K23 K22 K11(RRD) K21 K20 K10(RWR) K19 K1(SB) K18 K17 K0(SA) K16 置控制信号为: 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器R1的黄色选择指示灯亮,表明选择R1寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据22H被写入R1寄存器。
3. 将33H写入R2寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据33H
K23 K22 K11(RRD) K21 K20 K10(RWR) K19 K1(SB) K18 K17 K0(SA) K16 置控制信号为: 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器R2的黄色选择指示灯亮,表明选择R2寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据33H被写入R2寄存器。
4. 将44H写入R3寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据44H
K23 K22 K11(RRD) K21 K20 K10(RWR) K19 K1(SB) K18 K17 K0(SA) K16 置控制信号为: 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器R3的黄色选择指示灯亮,表明选择R3寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据44H被写入R3寄存器。
注意观察:
1. 数据是在放开CLOCK键后改变的,也就是CLOCK的上升沿数据被打入。 2. K1(SB), K0(SA) 用于选择寄存器。 K1(SB) 0 0 1 1 K0(SA) 0 1 0 1 选择 R0 R1 R2 R3
寄存器R读工作波形图
5. 读 R0寄存器 置控制信号为:
K11(RRD) K10(RWR) K1(SB) K0(SA) 这时寄存器 R0的红色输出指示灯亮,R0寄存器的数据送上数据总线。此时液晶显示 DBUS: 11 00010001。将K11(RRD)置为1, 关闭R0寄存器输出。
6. 读R1寄存器 置控制信号为:
K11(RRD) K10(RWR) K1(SB) K0(SA) 这时寄存器R1的红色输出指示灯亮,R1寄存器的数据送上数据总线。此时液晶显示DBUS: 22 00100010。将K11(RRD)置为1, 关闭R1寄存器输出。
7. 读R2寄存器 置控制信号为: K11(RRD) K10(RWR) K1(SB) K0(SA) 这时寄存器R2的红色输出指示灯亮,R2寄存器的数据送上数据总线。此时液晶显示DBUS: 33 00110011。将K11(RRD)置为1, 关闭R2寄存器输出。
8. 读R3寄存器 置控制信号为: K11(RRD) K10(RWR) K1(SB) K0(SA) 这时寄存器R3的红色输出指示灯亮,R3寄存器的数据送上数据总线。此时液晶显示DBUS: 44 01000100。将K11(RRD)置为1, 关闭R3寄存器输出.。
注意观察:
1. 数据在K11(RRD)为0时输出, 不是沿触发, 与数据打入不同。
实验3:MAR地址寄存器,ST堆栈寄存器,OUT输出寄存器
寄存器MAR原理图
寄存器ST原理图
寄存器OUT原理图
寄存器MAR,ST,OUT写工作波形图
连接线表 连接 信号孔 1 2 3 4 5 6 J2座 MAROE MAREN STEN OUTEN CK 接入孔 J3座将 K14 K15 K12 K13 CLOCK 作用 K23-K16接入DBUS[7:0] MAR地址输出使能 MAR寄存器写使能 ST寄存器写使能 OUT寄存器写使能 寄存器工作脉冲 有效电平 低电平有效 低电平有效 低电平有效 低电平有效 上升沿打入
1. 将12H写入MAR寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据12H K23 K22 K14(MAROE) K21 K20 K15(MAREN) K19 K18 K17 K16 置控制信号为:
K12(STEN) K13(OUTEN) 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器MAR的黄色选择指示灯亮,表明选择MAR寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据12H被写入MAR寄存器。
K14(MAROE)为0,MAR寄存器中的地址输出。MAR红色输出指示灯亮,将K14(MAROE)置为1.,关闭MAR输出。
2. 将34H写入ST寄存器
二进制开关 K23-K16用于DBUS[7:0]的数据输入,置数据34H
K23 K22 K14(MAROE) K21 K20 K15(MAREN) K19 K18 K17 K16 置控制信号为: K12(STEN) K13(OUTEN) 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器ST的黄色选择指示灯亮,表明选择ST寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据34H被写入ST寄存器。
3. 将56H写入OUT寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据56H
K23 K22 K14(MAROE) K21 K20 K15(MAREN) K19 K18 K17 K16 置控制信号为: K12(STEN) K13(OUTEN) 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器OUT的黄色选择指示灯亮,表明选择OUT寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据56H被写入
OUT寄存器。
2.2 运算器实验
实验1:运算器实验
COP2000中的运算器由一片EPLD实现. 有8种运算, 通过S2,S1,S0来选择,运算数据由寄存器A及寄存器W给出,运算结果输出到直通门D。 S2 0 0 0 0 1 1 1 1 连接线表 连接 信号孔 1 2 3 4 5 6 7 8 J1座 S0 S1 S2 AEN WEN CyIN 接入孔 J3座将 K0 K1 K2 K3 K4 K5 作用 K23-K16接入DBUS[7:0] 运算器功能选择 运算器功能选择 运算器功能选择 选通A 选通W 运算器进位输入 ALU工作脉冲 有效电平 低电平有效 低电平有效 上升沿打入 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 ALUCK CLOCK 1. 将55H写入A寄存器 二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据55H K23 K22 K21 K20 K4(WEN) K19 K18 K3(AEN) K17 K16 置控制信号为: 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器A的黄色选择指示灯亮,表明选择A寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据55H被写入A寄存器。
2. 将33H写入W寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据33H
K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为:
K4(WEN) K3(AEN) 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器W的黄色选择指示灯亮,表明选择W寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据33H被写入W寄存器。
置下表的控制信号, 检验运算器的运算结果
K5(CyIN) X X X X 0 1 0 1 X X K2(S2) K1(S1) 0 0 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 K0(S0) 0 1 0 1 0 0 1 1 0 1 结果(直通门D) 注释 加运算 减运算 或运算 与运算 带进位加运算 带进位加运算 带进位减运算 带进位减运算 取反运算 输出A 注意观察:
运算器在加上控制信号及数据(A,W)后,立刻给出结果,不须时钟。
实验2:数据输出实验
COP2000中有7个寄存器可以向数据总线输出数据, 但在某一特定时刻只能有一个寄存器输出数据. 由X2,X1,X0决定那一个寄存器输出数据。
数据输出选择器原理图
X2 0 0 0 0 1 1 X1 0 0 1 1 0 0 X0 0 1 0 1 0 1 选通控制信号 IN_OE IA_OE ST_OE PC_OE D_OE R_OE 输出寄存器 外部输入门 中断向量 堆栈寄存器 PC寄存器 直通门 右移门 1 1 连接线表
1 1 0 1 接入孔 J3座 K5 K6 K7 K3 K9 K8 K2 K1 K0 L_OE 作用 左移门 没有输出 有效电平 低电平有效 0:不带进位;1:带进位 上升沿打入 液晶显示(数据总线值) 输入门(K23-K16) 中断向量(由拨动开关给出) 堆栈寄存器 PC寄存器 D直通门 R右移门 L左移门 没有输出 连接 信号孔 1 2 3 4 5 6 7 8 9 10 11 X2 0 0 0 0 1 1 1 1 J1座 X0 X1 X2 AEN CN CyIN S2 S1 S0 将K23-K16接入DBUS[7:0] 寄存器输出选择 寄存器输出选择 寄存器输出选择 选通A 移位是否带进位 移位进位输入 运算器功能选择 运算器功能选择 运算器功能选择 ALUCK CLOCK ALU工作脉冲 X1 0 0 1 1 0 0 1 1 X0 0 1 0 1 0 1 0 1 指示灯(红色) IN指示 IA指示 ST指示 PC指示 D直通门指示 R右移门指示 L左移门指示 置下表的控制信号, 检验输出结果 实验3:移位实验
ALU直接输出和零标志位产生原理图
ALU左移输出原理图
ALU右移输出原理图
直通门将运算器的结果不移位送总线。当X2X1X0=100时运算器结果通过直通门送到数据总线。同时,直通门上还有判0电路,当运算器的结果为全0时,Z=1。
右移门将运算器的结果右移一位送总线。当X2X1X0=101时运算器结果通过右通门送到数据总线。具体连线是:
Cy 与CN →DBUS7 ALU7→DBUS6 ALU6→ DBUS5 ALU5 → DBUS4 ALU4 → DBUS3 ALU3 → DBUS2 ALU2 → DBUS1 ALU1 → DBUS0 Cy 与CN → DBUS7
当不带进位移位时(CN=0):0 → DBUS7;当带进位移位时(CN=1): Cy → DBUS7 。 左移门将运算器的结果左移一位送总线。当X2X1X0=110时运算器结果通过左通门送到数据总线。具体连线是:
ALU6 → DBUS7 ALU5 → DBUS6 ALU4 → DBUS5 ALU3 → DBUS4 ALU2 → DBUS3 ALU1 → DBUS2 ALU0 → DBUS1
当不带进位移位时(CN=0): 0 → DBUS0 ;当带进位移位时(CN=1): Cy → DBUS0。 1. 将55H写入A寄存器
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据55H K23 K22 K21 K20 K19 K3(AEN) 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器A的黄色选择指示灯亮,表明选择A寄存器。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据55H被写入A寄存器。
S2S1S0=111时运算器结果为寄存器A内容 CN 0 1 1 Cy IN L X 0 1 D R K18 K17 K16 置控制信号为:
注意观察: 移位与输出门是否打开无关,无论运算器结果如何,移位门都会给出移位结果。但究竟把那一个结果送数据总线由X2X1X0输出选择决定。
2.3 时序电路模拟实验
实验1:uPC实验
uPC原理图
uPC工作波形图
74HC161是一片带预置的4位二进制记数器。功能如下:
当 RST = 0时,记数器被清0 ;
当 IREN = 0时,在 CK的上升沿,预置数据被打入记数器; 当 IREN = 1时,在 CK的上升沿,记数器加一 。
TC为进位,当记数到 F(1111)时,TC=1。CEP,CET为记数使能,当 CEP,CET=1时,记数器工作,CEP,CET=0时,记数器保持原记数值
在 COP2000中,指令IBUS[7:0]的高六位被接到uPC预置的高六位,uPC预置的低两位被置为0。一条指令最多可有四条微指令。
连接线表 连接 信号孔 1 2 3 4 5 6 J2座 IREN EMEN EMRD IRCK 接入孔 J3座将 K0 K1 K3 CLOCK 作用 K23-K16接入DBUS[7:0] 预置uPC EM存储器工作使能 EM存储器写使能 EM存储器读使能 uPC工作脉冲 有效电平 低电平有效 低电平有效 低电平有效 低电平有效 上升沿打入 EMWR K2 1. uPC加1 置控制信号为: K3(EMRD) K2(EMWR) K1(EMEN) K0(IREN) 按一次CLOCK脉冲键,CLOCK产生一个上升沿,数据uPC被加1。 2. uPC打入
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据12H K23 K22 K3(EMRD) K21 K20 K2(EMWR) K19 K18 K17 K0(IREN) K16 置控制信号为: K1(EMEN) 当EMWR,EMEN=0时,数据总线(DBUS)上的数据被送到指令总线(IBUS)上。 按住CLOCK脉冲键,CLOCK由高变低,这时寄存器uPC的黄色预置指示灯亮,表明uPC被预置。放开CLOCK键,CLOCK由低变高,产生一个上升沿,数据10H被写入uPC寄存器。
实验2:PC实验
PC原理图
PC是由两片74HC161构成的八位带预置记数器,预置数据来自数据总线。记数器的输出通过74HC245(PCOE)送到地址总线。PC值还可以通过74HC245(PCOE_D)送回数据总线。
在COP2000中,PC+1由PCOE取反产生。
当RST = 0时,PC记数器被清0 ;
当 LDPC = 0时,在CK的上升沿,预置数据被打入PC记数器; 当PC+1 = 1时,在CK的上升沿,PC记数器加一; 当PCOE = 0时,PC值送数据总线。
PC打入控制原理图
PC打入控制电路由一片74HC151八选一构成。 ELP 1 0 0 0 0 0 IR3 X 0 0 0 0 1 IR2 X 0 0 1 1 X Cy X 1 0 X X X Z X X X 1 0 X LDPC 1 0 1 0 1 0 当ELP=1时,LDPC=1,不允许PC被预置; 当ELP=0时,LDPC由IR3,IR2,Cy,Z确定;
当IR3 IR2 = 1 X时,LDPC=0,PC被预置;
当 IR3 IR2 = 0 0时,LDPC=非Cy,当Cy=1时,PC被预置 当 IR3 IR2 = 0 1时,LDPC=非Z,当 Z=1时,PC被预置 连接线表
连接 信号孔 1 2 3 4 5 6 7 8 J2座 PCOE JIR3 JIR2 JRZ JRC ELP PCCK 接入孔 J3座将 K5 K4 K3 K2 K1 K0 CLOCK 作用 K23-K16接入DBUS[7:0] PC输出到地址总线 预置选择1 预置选择0 Z标志输入 C标志输入 预置允许 PC工作脉冲 有效电平 低电平有效 低电平有效 上升沿打入 1. PC加1 置控制信号为:
K5(PCOE) K0(ELP) 按一次CLOCK脉冲键,CLOCK产生一个上升沿,数据PC被加1。 2. PC打入
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据12H K23 K22 K21 IR2(K3) X 0 0 1 1 X K20 JRZ(K1) X X X 1 0 X K19 JRC(K0) X 1 0 X X X K18 K17 K16 置控制信号为: ELP(K5) IR3(K4) 1 0 0 0 0 0 X 0 0 0 0 1 LDPC 黄色PC预置指示灯 1 0 1 0 1 0 灭 亮 灭 亮 灭 亮 每置控制信号后,按一下CLOCK键,观察PC的变化。 2.4 存储器实验
EM原理图
存储器EM由一片6116RAM构成,通过一片74HC245与数据总线相连。存储器EM的地址可选择由PC或MAR提供。
存储器EM的数据输出直接接到指令总线IBUS,指令总线IBUS的数据还可以来自一片74HC245。当ICOE为 0时,这片 74HC245输出中断指令 B8。
连接线表 连接 1 2 3 4 5 6 7 8 9 10 11 12 信号孔 J2座 IREN PCOE MAROE MAREN EMEN EMRD EMWR PCCK MARCK EMCK IRCK 接入孔 J3座将 K6 K5 K4 K3 K2 K1 K0 CLOCK CLOCK CLOCK CLOCK 作用 IR, uPC写允许 PC输出地址 MAR输出地址 MAR写允许 存储器与数据总线相连 存储器读允许 存储器写允许 PC工作脉冲 MAR工作脉冲 写脉冲 IR, uPC工作脉冲 有效电平 低电平有效 低电平有效 低电平有效 低电平有效 低电平有效 低电平有效 低电平有效 上升沿打入 上升沿打入 上升沿打入 上升沿打入 K23-K16接入DBUS[7:0] 实验1:PC/MAR输出地址选择
置控制信号为:
K5(PCOE) K4(MAROE) 地址总线 PC输出地址 红色地址输出指示灯 PC地址输出指示灯亮 MAR输出地址 地址总线浮空 错误, PC及MAR同时输出 MAR地址输出指示灯亮 PC及MAR地址输出指示灯亮 以下存贮器EM实验均由MAR提供地址。
实验2:存储器EM写实验
1. 将地址0写入MAR
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据00H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将地址0写入MAR。 2. 将数据11H写入EM[0]
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据11H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将数据11H写入EM[0]。 3. 将地址1写入MAR
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据01H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将地址1写入MAR。 4. 将数据22H写入EM[1]
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据22H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将数据22H写入EM[1] 。 实验3:存储器EM读实验
1. 将地址0写入MAR
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据00H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为:
K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将地址0写入MAR。 2. 读EM[0] 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) EM[0]被读出:11H。 3. 将地址1写入MAR
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据01H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将地址0写入MAR。 4. 读EM[1] 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) EM[1]被读出:22H。
实验4:存储器打入IR指令寄存器/uPC实验
1. 将地址0写入MAR
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据00H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将地址0写入 MAR。 2. 读EM[0],写入IR及uPC 置控制信号为:
K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) EM[0]被读出:11H
按CLOCK键, 将EM[0]写入IR及uPC, IR = 11H, uPC=10H 。 3. 将地址1写入MAR
二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据01H K23 K22 K21 K20 K19 K18 K17 K16 置控制信号为:
K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) 按CLOCK键, 将地址1写入MAR。 4. 读EM[1],写入IR及uPC 置控制信号为: K6(IREN) K5(PCOE) K4(MAROE) K3(MAREN) K2(EMEN) K1(EMRD) K0(EMWR) EM[1]被读出: 22H
按CLOCK键, 将EM[1]写入IR及uPC, IR = 22H, uPC=20H。
实验5:使用实验仪小键盘输入EM
1.连接J1, J2 2.打开电源
3.按TAB键, 选择EM 4.输入两位地址, 00
5.按NEXT, 进入程序修改 6.按两位程序数据
7.按NEXT选择下个地址/按LAST选择上个地址 8.重复6,7步输入程序 9.按RESET结束
2.5 微程序存储器
uM实验存储器 uM由三片 6116RAM构成,共 24位微指令。存储器的地址由 uPC提供, 片选及读信号恒为低, 写信号恒为高。存储器 uM始终输出 uPC指定地址单元的数据。
uM原理图
连接线表 连接 1 2 6 信号孔 J2座 IREN IRCK 接入孔 J3座 K0 CLOCK 作用 将K23-K16接入DBUS[7:0] IR, uPC写使能 uPC工作脉冲 有效电平 低电平有效 上升沿打入 实验1:微程序存储器 uM读出
置控制信号为:K0为1。uM输出uM[0]的数据。
按一次CLOCK脉冲键,CLOCK产生一个上升沿,数据uPC被加一。 uM输出uM[1]的数据。
按一次CLOCK脉冲键,CLOCK产生一个上升沿,数据uPC被加一。 uM输出uM[2]的数据。
实验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 助记符 JZ MM JMP MM _INT_ CALL MM IN OUT RET RR A RL A RRC A RLC A NOP CPL A RETI 机器码1 机器码2 注释 若零标志位置1,跳转到MM地址 未使用 跳转到MM地址 未使用 未使用 实验机占用,不可修改。进入中断时,实验机硬件产生_INT_指令 调用MM地址的子程序 从输入端口读入数据到累加器A中 将累加器A中数据输出到输出端口 未使用 子程序返回 累加器A右移 累加器A左移 累加器A带进位右移 累加器A带进位左移 空指令 累加器A取反,再存入累加器A中 未使用 中断返回 未使用 未使用 未使用 未使用 101001xx MM 101010xx 101011xx MM 101100xx 101101xx 101110xx 101111xx MM 110000xx 110001xx 110010xx 110011xx 110100xx 110101xx 110110xx 110111xx 111000xx 111001xx 111010xx 111011xx 111100xx 111101xx 111110xx 111111xx 3.4 模型机微指令集
指令/微指令表
第四章 模型机综合实验(微程序控制器)
在综合实验中,模型机作为一个整体来工作的,所有微程序的控制信号由微程序存储器 uM输出,而不是由开关输出。在做综合实验之前,先用 8芯电缆连接 J1和 J2,这样实验仪的监控系统会自动打开 uM的输出允许,微程序的各控制信号就会接到各寄存器、运算器的控制端口。此综合实验使用的指令是模型机的缺省指令/微指令系统。等做完本综合实验,熟悉了此套指令/微指令后,用户可以自己设计的指令/微指令系统,有关自己设计指令/微指令系统的说明在下一章介绍。
在做综合实验时,可以用 COP2000计算机组成原理实验软件输入、修改程序,汇编成机器码并下载到实验仪上,由软件控制程序实现单指令执行、单微指令执行、全速执行,并可以在软件上观察指令或微指令执行过程中数据的走向、各控制信号的状态、各寄存器的值。 COP2000软件的使用方法见第七章“COP2000集成开发环境使用”。也可以用实验仪自带的小键盘和显示屏来输入、修改程序,用键盘控制单指令或单微指令执行,用 LED或用显示屏观察各寄存器的值。实验仪上的键盘使用方法见第六章“实验仪键盘使用”。
在用微程序控制方式做综合实验时,在给实验仪通电前,拔掉实验仪上所有的手工连接的接线,再用 8芯电缆连接 J1和 J2,控制方式开关拨到“微程序控制”方向。若想用 COP2000软件控制组成原理实验仪,就要启动软件,并用快捷图标的“设置”功能打开设置窗口,选择实验仪连接的串行口,然后再按“连接 COP2000实验仪”按钮接通到实验仪。
实验1:数据传送实验/输入输出实验
1.在 COP2000软件中的源程序窗口输入下列程序
MOV A, #12H MOV A, R0 MOV A, @R0 MOV A, 01H IN OUT END
2.将程序另存为 EX1.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。 程序地址 00 02 03 04 06 07 机器码 7C 12 70 74 78 01 C0 C4 反汇编指令 MOV A,#12 MOV A,R0 MOV A,@R0 MOV A,01 IN OUT 指令说明 立即数12H送到累加器A 寄存器R0送到累加器A R0间址的存储器内容送到累加器A 存储器01单元内容送到累加器A 端口IN内容输入到累加器A 累加器A内容输出到端口OUT 3.按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。(见 EX1.ASM程序跟踪结果)
EX1.ASM程序跟踪结果
每个程序的一开始的第一条微指令一定是取指令,此微指令的值为0CBFFFFH,对应到各个控制位就是EMRD、PCOE、及IREN为低,此三位有效,其它所有位都处于无效状态。在程序第一次运行时或复位后,uPC和PC的值都为0,PCOE有效将PC值送到ABUS,做为程序存储器EM的地址,EMRD信号有效就是从程序存储器EM中读出程序指令,IREN将读出的指令送到IR寄存器和uPC,此微指令的作用就是:从程序存储器EM的0地址读出程序指令机器码7CH,并存入uPC中做为微程序存储器uM的地址,从微程序存储器uM的7CH单元中读出微控制码0C7FFF7H,同时PC加1为读下一条指令或数据做准备。
MOV A,#12:本指令为两个状态周期。在T1状态时,上次读出的指令机器码为7CH,存入uPC中做为微程序存储器uM的地址,读出微指令的值为0C7FFF7H,对应到各个控制位就是EMRD、PCOE、EMEN及AEN为低,处于有效状态,其它控制位为无效状态。由于上条微指令(取指操作)已将PC加1,此时PCOE是将加1后的PC输出到ABUS做为程序存储器EM的地址,EMRD就是从程序存储器EM中读出数据,本指令中读出的数据应为12H,EMEN将读出的数据送到DBUS总线上,AEN 是将DBUS总线上的值存入累加器A中。同时uPC加1为执行下条微指令做准备,PC加1为读取下一条指令做准备。每条指令的最后一条微指令一定是取指令操作,本指令的T0状态周期即为取指令,执行上一条微指令时uPC已经加1,按照此uPC为地址从微程序存储器uM读出的微指令的值为0CBFFFFH,参照第一步的说明,此微指令从程序存储器EM中读取指令。
MOV A,R0:本指令为两个状态周期。在T1状态时,由上条取指操作取出的指令机器码为70H,存入uPC后做为微程序地址访问微程序存储器uM的70H单元,读出微指令的值为0FFF7F7,各控制位的状态为RRD、AEN为低电平为有效状态,RRD有效表示从寄存器组 R0-R3中读数送到DBUS上,在上条取指令操作时,IREN将取出的指令机器码70H送入IR寄存器,而IR寄存器的最低两位是用来选择寄存器R?的,此时IR寄存器最低两位为00,被读出的寄存器为R0。AEN有效表示将DBUS的数据写到累加器A中。同时uPC加1,为执行下条微指令做准备。本指令的T0状态也是取指令,完成的功能是取出下一条要执行的指令机器码,并存入uPC和IR寄存器中。
MOV A,@R0: 本指令为三个状态周期。在T2状态时,由上个取指操作读出的指令机器码为74H,打入uPC后,从微程序存储器 74H单元读出的微指令的值为0FF77FFH,有效的控制位为MAREN和RRD,RRD有效表示从寄存器组R0-R3中读出数据送到DBUS,MAREN有效表示将数据从DBUS总线上打入地址寄存器MAR。uPC加1取出下条微指令执行。在T1状态时,由uPC做为微程序存储器地址,从uM的 75H单元中读出微指令的值为0D7BFF7H,其中有效的控制位为EMRD、EMEN、MAROE和AEN。MAROE表示程序存储器EM的地址由地址寄存器MAR输出,EMRD表示从程序存储器EM中读出数据,EMEN表示读出的数据送到地址总线DBUS上,AEN有效表示将数据总线DBUS上的值存入累加器A中。此状态下uPC要加1,为取下条微指令做准备。本指令的T0状态执行的是取指操作。取指操作详细描述见程序开始部分的取指令的说明。
MOV A,01:本指令为三个状态周期。在T2状态时,由上条取指操作取出的指令机器码为78H,存入uPC和IR寄存器后做为微程序存储器uM的地址,读出微指令的值为0C77FFFH,相应的有效控制位为EMRD、PCOE、EMEN和MAREN,PCOE有效表示将PC值做为程序存储器EM的地址,EMRD表示从程序存储器中读出数据,在本指令中此数据值为01H,EMEN表示将读出的数据送到DBUS总线,MAREN表示将DBUS总线上的数据打入地址寄存器MAR。uPC同时加1,取出下条微指令准备执行。在T1状态时,由uPC做为微程序存储器地址,从uM的79H单元中读出微指令的值为0D7BFF7H,可以参见上条指令的T1状态,此微指令的所完成的功能是,以MAR的值做为程序存储器的地址,读出数据并
送到数据总线DBUS,同时将此数据存入累加器A中。uPC加1取出下条微指令准备执行。在T0状态,微指令执行取指令操作。
IN:本指令分两个状态周期。在T1状态时,由上次取指操作取出的指令机器码为0C0H,以此做为微地址从uM中取出的微指令值为0FFFF17H,有效控制位为AEN、X2X1X0=000,因为X2、X1、X0为低,被选中的寄存器为输入端口IN,也就是说,输入端口IN上的数据被允许送到数据总线DBUS上,AEN有效表示将此数据打入累加器A中。同时uPC加1取出下条微指令准备执行。在T0状态,微指令执行的是取指令操作,取出下条指令准备执行。
OUT:本指令分两个状态周期。在T1状态,由上次取出的指令机器码为0C4H,以此为微地址从微程序存储器uM中读出的微指令为0FFDF9FH,有效控制位为OUTEN、X2X1X0=100(二进制),S2S1S0=111(二进制),S2S1S0=111表示运算器做“ALU直通”运算,也就是累加器不做任何运算,直接输出结果,而X2X1X0=100表示运算器的结果不移位直接输出到数据总线DBUS,OUTEN有效表示将数据总线上的数据打入输出端口寄存器OUT内。uPC加1,取出下条微指令准备执行。在T0状态,微指令执行的是取指操作,取出下条将要执行的指令。
实验2:数据运算实验(加/减/与/或)
1.在 COP2000软件中的源程序窗口输入下列程序
ADDC A, R1 SUB A, @R0 AND A, #55H OR A, 02H END
2.将程序另存为 EX2.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。
程序地址 00 01 02 04 机器码 反汇编指令 21 35 5C 55 68 02 ADDC A,R1 SUB A,@R0 AND A,#55 OR A,02 指令说明 累加器A的值加上寄存器R1加进位 累加器A减去R1间址的存储器内容 累加器A逻辑与立即数55H 累加器A逻辑或存储器02单元的内容 3.按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及uPC如何工作。(见“EX2.ASM程序跟踪结果”详细介绍)
4.在了解数据运算的原理,可以加上一些数据传输指令给累加器A或寄存器R?赋值,再运算,并观察运算结果。
EX2.ASM程序跟踪结果
实验3:移位/取反实验
1.在 COP2000软件中的源程序窗口输入下列程序
MOV A,#55H RR A RLC A
CPL A END
2.将程序另存为 EX3.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。
程序地址 00 02 03 04 机器码 7C 55 D0 DC E4 反汇编指令 MOV A,#55 RR A RLC A CPL A 指令说明 立即数55H存入累加器A 不带进位右移累加器A 带进位左移累加器A 累加器A内容取反 3.按快捷图标的 F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。(见“EX3.ASM程序跟踪结果”详细介绍)
EX3.ASM程序跟踪结果
程序的开始执行一条取指的微指令,读入程序第一条指令。 MOV A, #55: 将累加器的值设为055H,以便下面观察。
RR A:本指令为两个状态周期。在T1状态,由上次取指操作取出的指令码为D0H,访问微程序存储器的20H单元,读出微指令值为0FFFCB7H,有效位为CN、FEN及AEN,表示不带进位移位,运算器控制S2S1S0=111(二进制)表示运算不运算,输出结果就为A的值,X2X1X0=101(二进制)表示,运算器“右移”输出到总线,FEN将标志位保存,AEN将DBUS内容存入A中,uPC加1取出下条微指令。在T0状态,取出下条将要执行的指令。
RLC A:本指令有两个状态周期。在T1状态微指令为0FFFED7H,CN=1表示带进位移位,S2S1S0=111表示ALU不做运算,直接输出A内容,X2X1X0=110(二进制)表示,运算器“左移”输出到DBUS,AEN表示DBUS内容存入A中,FEN表示保存标志位。T0状态为取指操作。取出下条将要执行的指令。
CPL A:本指令为两个状态周期。在T1状态,微指令为0FFFE96H,S2S1S0=110表示ALU做“取反”运算,X2X1X0=100(二进制)表示,运算器结果直通到DBUS,再存入A中,并保存标志位。T0状态为取指操作。取出下条将要执行的指令。
实验4:转移实验
1.在 COP2000软件中的源程序窗口输入下列程序
MOV A,#01 LOOP: SUB A,#01 JC LOOP JZ LOOP JMP 0 CPL A END
2.将程序另存为 EX4.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。
程序地址 机器码 00 02 04 06 08 7C 01 3C 01 A0 02 A4 02 AC 00 反汇编指令 SUB A,#01 JC 02 JZ 02 JMP 00 指令说明 累加器A减1 若有进位跳到程序02地址 若A=0跳转到程序02地址 无条件跳转到程序开始 MOV A,#01 立即数01H存入累加器A 3.按快捷图标的 F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的 输入/输出状态,各控制信号的状态,PC及 uPC如何工作。观察在条件满足和不满足的情况下,条件跳转是否正确执行。(见“EX4.ASM程序跟踪结果”详细介绍)
EX4.ASM程序跟踪结果
程序的开始执行一条取指的微指令,读入程序第一条指令。
MOV A, #01: 将累加器的值设为01H,用于下面计算来产生进位标志和零标志。 SUB A,#01:A值原为1,将A值第一次减1后,应产生“零标志”位。
JC 02:由上条取指读出的指令码为0A0H,存入IR寄存器后,IR3、IR2的值为00(二进制),表示判进位跳转功能,指令码存入uPC后,从uM读出的微指令值为0C6FFFFH,表示
以PC为地址从EM中读出数据02H并送到DBUS,ELP为低成有效状态,与IR3、IR2组成进位跳转控制,此时若有进位,就会产生一个控制信号,将总线DBUS上的值02H打入PC,下条微指令取指时,就会从EM新的地址02中读指令码;此时若无进位,DBUS上的值被忽略,PC加1,下条取指操作按新PC取出指令码执行。当前无进位标志,顺序执行下条指令。
JZ 02:由上条取指读出的指令码为0A4H,存入IR寄存器后,IR3、IR2的值为01(二进制),表示判零跳转功能,指令码存入uPC后,从uM读出的微指令值为0C6FFFFH,表示以PC为地址从EM中读出数据02H并送到DBUS,ELP为低成有效状态,与IR3、IR2组成零跳转控制,与上条指令相比,尽管微指令相同,由于指令码不同,上一个为判进位跳转,这个为判零跳转。此时若零标志位为1,即A=0时,就会产生一个控制信号,将总线DBUS上的值02H打入PC,下条微指令取指时,就会从EM新的地址02中读指令码;此时若零标志位为0,DBUS上的值被忽略,PC加1,下条取指操作按新PC取出指令码执行。由于A=0,零标志位为1,产生PC打入信号,将DBUS上的值02H打入PC。下一条取指操作,PC=02,以PC为地址从EM的02单元取出指令码执行,程序转到02地址。
SUB A,#01:A值现为0,再减1后,A=0FFH,并产生“进位标志”位。
JC 02:此为判进位跳转指令,此时由于进位标志为1,与ELP、IR3、IR2组成的电路产生PC打入信号,将数据总线上的值存入PC,程序跳转到02H地址执行。
SUB A,#01:A值现为0FFH,再减1后,A=0FEH,无“零标志”,无“进位标志”位。 JC 02:此为判进位跳转指令,此时无进位标志,程序顺序执行下条指令。 JZ 02:此为判零跳转指令,此时无零标志位,程序顺序执行下条指令。
JMP 00:由上条取指操作读出的指令码为0ACH,存入IR寄存器后,IR3、IR2的值为11(二进制),此为无条件跳转控制,指令码存入uPC后,从uM读出的微指令为0C6FFFFH,表示以PC为地址从EM中读出数据并送到数据总线DBUS上,因为ELP有效,与IR3、IR2组合产生PC的打入信号,将DBUS上的数据存入PC中,下一条取指微指令按新的PC值读出程序的指令码。
MOV A, #01: 程序从开头重新执行。
实验5:调用实验
1. 在 COP2000软件中的源程序窗口输入下列程序.
MOV A,#00H LOOP:
CALL INCA JMP LOOP INCA:
ADD A,#1RET END
2.将程序另存为 EX5.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。 程序地址 机器码 00 02 04 06 08 7C 55 BC 06 AC 02 1C 01 CC 反汇编指令 CALL 06 JMP 02 ADD A, #01 RET 指令说明 调用子程序 跳转到02地址,循环执行 累加器A加1 子程序返回 MOV A,#00 立即数00H存入累加器A 3.按快捷图标的 F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。观察在调用子程序和从子程序返回时,堆栈的工作情况。(见“EX5.ASM程序跟踪结果”详细介绍)
EX5.ASM程序跟踪结果
程序的开始执行一条取指的微指令,读入程序第一条指令。
MOV A, #00: 将累加器的值设为00H,以便下面观察A加1后的结果。
CALL 06:本指令有四个状态周期。在T3状态,根据指令码为0BCH,读出微指令值为0FF7F7FH,有效位为PCOE、MAREN,X2X1X0的值为011(二进制),PCOE有效是将PC加1,以便在下步将PC压栈时,存入堆栈的是程序下一条指令的地址,MAREN有效及X2X1X0的值表示从PC中读出值并送到MAR中。在T2状态,读出微指令为0FFEF7FH,有效位STEN,X2X1X0=100(二进制),表示从PC中读数据并存入堆栈寄存器ST中。在T1状态,微指令值为0D6BFFFH,表示以MAR为地址从EM中读出数据,此数据就是子程序的地址,此时堆栈中保存的是调用子程序下条指令的地址。将此数据送到DBUS,再存入PC中,实现程序跳转。在T0状态,按新的PC值,取出下条将要执行的指令。
ADD A,01:本指令将累加器加1。
RET:本指令有两个状态周期。在T1状态,上条取指操作读出的指令码为0CCH,存入IR后,IR3、IR2的值为11(二进制),取出的微指令的值为0FEFF5FH,有效位为ELP,X2X1X0=010(二进制)表示从ST中输出数据到总线,ELP有效与IR3、IR2=11表示无条件将数据总线DBUS的数据打入PC,实现子程序返回功能。在T0状态,按新PC取出指令,准备执行。
JMP 02:程序无条件跳转到02地址,执行程序。
实验6:中断实验
1.在 COP2000软件中的源程序窗口输入下列程序
MOV A,#00 LOOP: JMP LOOP ORG 0E0H ADD A,#01 RETI END
2.将程序另存为 EX6.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。
程序地址 机器码 00 02 ... E0 E2 7C 00 AC 02 ... ... 1C 01 EC 反汇编指令 MOV A,#00 JMP 02 ... ADD A, #01 RETI 指令说明 立即数00H存入累加器A 原地跳转等待中断 累加器A值加1 中断返回 3.按快捷图标的 F7,执行“单微指令运行”功能,在跟踪程序时,按下实验仪上中断请求按钮(在软件模拟时,可以按菜单下方的中断请求快捷按钮)。中断请求灯亮,在每个指令的最后一条微指令执行完,就会响应中断,中断响应灯高。同时,观察执行每条微指令时,
寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。观察程序执行时,堆栈及中断请求,中断响应位的状态。 (见“EX6.ASM程序跟踪结果”详细介绍)
EX6.ASM程序跟踪结果
程序的开始执行一条取指的微指令,读入程序第一条指令。
MOV A, #00: 将累加器的值设为00H,以便下面观察A加1后的结果。 NOP :程序空操作,等待中断请求。
JMP 02:程序无条件跳转到02地址,执行程序。在执行此指令前,按下实验仪上的中断请求钮或软件上“中断请求”快捷键,中断请求的灯会亮,表示有中断请求。在本指令的T0状态即取指状态,IREN有效将中断处理微程序地址0B8H,送到指令总线IBUS上。
_INT_ :本指令为中断处理微程序,有三个状态周期。在T2状态,微指令的值为0FFEF7FH,其中X2X1X0=011(二进制),表示从 PC中读出数据送到DBUS上,STEN有效表示将DBUS上数据存入堆栈寄存器ST中,这条微指令执行的就是将PC值(即下条将执行的指令的地址)存入堆栈。在T1状态,微指令值为0FEFF3FH,其中X2X1X0=001表示将中断地址寄存器IA的值送到DBUS上,IA的缺省值为 0E0H,ELP有效,与指令寄存器IR的IR3、IR2=10(二进制)组合,将DBUS值存入PC,实现程序的跳转。在T0状态以中断地址0E0H为地址取出中断服务程序的第一条指令,准备执行。
ADD A,01:本指令将累加器加1。 RETI:本指令有两个状态周期。在T1状态,取出的微指令为0FCFF5FH,X2X1X0=010(二进制)表示从ST读出数据送到DBUS上, EINT有效清除中断请求标志和中断响应标志,以便程序返回后,可以再次响应中断,ELP有效与IR3、IR2=11表示无条件将数据总线 DBUS的值打入PC,实现中断服务程序返回功能。在T0状态,按新PC取出指令,准备执行。
NOP :上次中断是在执行完“JMP 02”指令后响应的,中断返回的地址为其下条将要执行的指令,也就是“NOP”指令。
实验7:指令流水实验
指令流水操作,就是在微指令执行的过程中,在 T1状态,如果 ABUS和 IBUS空闲,则可以利用这个空闲来进行预取指令,让 ABUS、IBUS和 DBUS并行工作,实现指令的流水工作。我们已经建立了一套可流水操作的指令/微指令系统。用户可调入这个指令/微指令系统进行实验。为了方便比较,我们仍用实验 1的程序 EX1.ASM,其它指令用户可以自己做实验来比较、验证。
1.在 COP2000软件中,用菜单的[文件|调入指令系统/微程序]功能,打开 COP2000下的 “INST2.INS”,这就是流水操作的指令/微指令系统。
2.在COP2000软件中,用菜单的[文件|打开文件]功能,打开 COP2000下的“EX1.ASM”源程序。编译后产生的机器码与实验 1相同。
3.按快捷图标的 F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。特别是在每条指令的 T0状态周期,取指操作是否和其它指令并行执行。 (见“EX1.ASM程序流水操作跟踪结果”详细介绍)
EX1.ASM程序流水操作跟踪结果
每个程序的一开始的第一条微指令一定是取指令,取出下条将要执行的指令。
MOV A,#12:本指令为两个状态周期。在T1状态时,从程序存储器EM中读出数据送到累加器A,ABUS被占用,所以预指操作不能与数据总线DBUS上的操作并行执行。本指
令的T0状态为正常的取指令操作。
MOV A,R0:由于预指操作与数据总线可并行工作,本指令只有1个状态周期。由上条取指操作取出的指令机器码为70H,存入 uPC后做为微程序地址访问微程序存储器uM的70H单元,读出微指令的值为0CBF7F7H,有效控制位为EMRD、PCOE、IREN、RRD、AEN,由于IR1、IR0的值为00,与RRD信号组合表示从R0中读出数据到DBUS总线,AEN将DBUS上的值存入累加器A,EMRD、PCOE和IREN有效表示以PC做为地址从EM中读出下条指令,并存入IR和uPC中,PC加1。
MOV A,@R0: 本指令为三个状态周期。在T2状态时,将R0的值存入地址寄存器MAR。在T1状态时,以MAR为地址读出数据并送到累加器A中。在T0状态,取出下条将要执行指令。由于ABUS不空闲,所以取指操作不能并行工作。
MOV A,01:本指令为三个状态周期。在T2状态时,以PC为地址从EM中读出数据存到MAR中,在T1状态,以MAR为地址从EM中读出数据存入累加器A。T0为取指操作。由于ABUS不空闲,取指操作不能并行执行。
IN:本指令为1个状态周期。取指操作和输出操作可并行执行。由上次取指操作取出的指令机器码为0C0H,以此做为微地址从uM中取出的微指令值为0CBFF17H,有效控制位为EMRD、PCOE、IREN和AEN、X2X1X0=000(二进制)表示从输入寄存器IN读数据送到DBUS, AEN表示将此数据存入A,EMRD、PCOE和IREN有效表示以PC为地址从EM中读出指令存入IR和uPC中,PC加1。
OUT:本指令有1个状态周期。取指操作和输出操作并行完成。由上次取出微指令值为为0CBDF9FH,有效控制位为EMRD、PCOE、 IREN、OUTEN、X2X1X0=100(二进制),S2S1S0=111(二进制),S2S1S0=111表示运算器做“ALU直通”运算,也就是累加器不做任何运算,直接输出结果,而X2X1X0=100表示运算器的结果不移位直接输出到数据总线DBUS,OUTEN有效表示将数据总线上的数据打入输出端口寄存器OUT内。与此同时,EMRD、PCOE、IREN表示以PC为地直址从EM中读出下条指令,存IR和uPC中,PC加1。
实验8:RISC模型机
RISC处理器设计的一般原则:
1.只选用使用频度高的指令,减小指令系统,使每一条指令能尽快的执行 2.减少寻址方式,并让指令具有相同的长度 3.让大部分指令在一个时钟完成 4.所有指令只有存(ST)、取(LD)指令可访问内存,它他指令均在寄存器间进行运算
5.使用组合逻辑实现控制器
下面我们给出一个 RISC的指令系统 助记符 _FATCH_ ADDW A SUBW A SUBCW A ANDW A 机器码1 000000xx 000001xx 000011xx 000100xx 000101xx 机器码2 注释 实验机占用,不可修改。复位后,所有寄存器清0,首先执行_FATCH_指令取指 将寄存器W加入累加器A中 将寄存器W值加入累加器A中,带进位 从累加器A中减去寄存器W值 从累加器A中减去寄存器W值,带进位 累加器A“与”寄存器W值 ADDCW A 000010xx 助记符 ORW A LDW A LDW R? LDA R? STA R? RR A RL A RRC A RLC A CPL A LD A, #II LD A, MM ST A, MM JMP MM JC MM JZ MM 机器码1 000110xx 000111xx 001000xx 001001xx 001010xx 001011xx 001100xx 001101xx 001110xx 001111xx 010000xx 010001xx 010010xx 010011xx 010100xx 010101xx 机器码2 II MM MM 注释 累加器A“或”寄存器W值 将累加器A的值送到寄存器W中 将寄存器R?的值送到寄存器W中 将寄存器R?送到累加器A中 将累加器A的值送到寄存器R?中 累加器A右移 累加器A左移 累加器A带进位右移 累加器A带进位左移 累加器A取反,再存入累加器A中 将立即数送到累加器A中 将存储器中MM中的值送到累加器A中 将累加器A的值送到存储器MM地址中 跳转到地址MM 若进位标志置1,跳转到地址MM 若零标志位置1,跳转到地址MM 可以看出在这个指令系统中,只有访问主存LD,ST指令和转移指令有两个字节,其余指令均为单字节单时钟指令。
1.在 COP2000软件中,用菜单的[文件|调入指令系统/微程序]功能,打开 COP2000下的 “RISC.INS”,这就是 RISC指令/微指令系统。
2.在 COP2000软件中,用菜单的[文件|打开文件]功能,打开 COP2000下的“EX7.ASM”源程序。
3.按快捷图标的 F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。
4.自动产生 ABEL组合逻辑控制器,比较非 RISC指令系统,可以看出 RISC指令系统简单很多。
第五章 组合逻辑控制器
微程序控制器由微程序给出 24位控制信号,而微程序的地址又是由指令码提供的,这就是说 24位控制信号是由指令码确定的。如:MOV A,12H及 MOV A,#34H指令的微序如下: 助记符 MOV A, #II 状态 T1 T0 T1 T0 微地址 78 79 7A 7C 7D 微程序 C77FFF D7BFF7 CBFFFF C7FFF7 CBFFFF 相关控制位 EMRD, PCOE, EMEN, MAREN EMRD, EMEN, MAROE, AEN EMRD, PCOE, IREN EMRD, PCOE, EMEN, AEN EMRD, PCOE, IREN MOV A , MM T2 我们用组合逻辑的方法来写出相应的控制表达式 IR7..IR2为指令的高六位(低两位用于选择寄存器 R0..R3) T3,T2,T1,T0为处于的周期
!EMRD = !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T2 // MOV A, MM T2周期
# !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T1 // MOV A, MM T1周期 # !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T0 // MOV A, MM T0周期 # !IR7 & IR6 & IR5 & IR4 & IR3 & IR2 & T1 // MOV A, #II T1周期 # !IR7 & IR6 & IR5 & IR4 & IR3 & IR2 & T0; // MOV A, #II T0周期
!PCOE = !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T2 // MOV A, MM T2周期
# !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T0 // MOV A, MM T0周期 # !IR7 & IR6 & IR5 & IR4 & IR3 & IR2 & T1 // MOV A, #II T1周期 # !IR7 & IR6 & IR5 & IR4 & IR3 & IR2 & T0; // MOV A, #II T0周期
!EMEN = !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T2 // MOV A, MM T2周期
# !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T1 // MOV A, MM T1周期 # !IR7 & IR6 & IR5 & IR4 & IR3 & IR2 & T2; // MOV A, #II T1周期
!MAREN = !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T2; // MOV A, MM T2周期
!MAROE = !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T1; // MOV A, MM T1周期
!AEN = # !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T1 // MOV A, MM T1周期
# !IR7 & IR6 & IR5 & IR4 & IR3 & IR2 & T1; // MOV A, #II T1周期
!IREN = !IR7 & IR6 & IR5 & IR4 & IR3 & !IR2 & T0 // MOV A, MM T0周期
# !IR7 & IR6 & IR5 & IR4 & IR3 & IR2 & T0; // MOV A, #II T0周期
上面给出的表达式仅是两条指令的表达式,而且没有化简的,不难看出 24位控制信号是指令码及周期数的函数。增加一条指令,只要增加一些或项即可,如增加 ADD A,#11H
助记符 状态 微地址 微程序 相关控制位 ADD A,#II T2 T1 T0 1C 1D 1E C7FFEF EMRD, PCOE, EMEN, WEN FFFE90 FEN, X1, X0, AEN, S2, S1, S0 CBFFFF EMRD, PCOE, IREN
EMRD 增加:
!IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T2 // ADD A, #II T2周期 !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T0 // ADD A, #II T0周期
PCOE 增加:
!IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T2 // ADD A, #II T2周期 !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T0 // ADD A, #II T0周期
EMEN 增加:
!IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T2 // ADD A, #II T2周期
AEN 增加:
!IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T1 // ADD A, #II T1周期
IREN 增加:
!IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T0 // ADD A, #II T0周期
ADD A, #II 新增加的控制信号有 WEN,FEN,X2,X1,S2,S1,S0
!WEN = !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T2 // ADD A, #II T2周期 !FEN = !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T1 // ADD A, #II T1周期 !X2 = !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T1 // ADD A, #II T1周期 !X1 = !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T1 // ADD A, #II T1周期 !S2 = !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T1 // ADD A, #II T1周期 !S1 = !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T1 // ADD A, #II T1周期 !S0 = !IR7 & !IR6 & !IR5 & IR4 & IR3 & IR2 & T1 // ADD A, #II T1周期
IR7..IR0由指令寄存器提供,ABEL表达式是:
[IR7..IR0] := [IBUS7..IBUS0]; [IR7..IR0].CE = !IREN; [IR7..IR0].AR = !RST; [IR7..IR0].CLK = CK;
COP2000每条指令最多有 4个周期(T3,T2,T1,T0),可由两位 D触发器(RT1,RT0)表示。
T3 = RT1 & RT0; T2 = RT1 & !RT0; T1 = !RT1 & RT0;
T0 = !RT1 & !RT0;
RT1,RT0构成一个带预置的减计数器,ABEL表达式是:
WHEN !RT1 & !RT0 THEN { [RT1..RT0] := [CT1..CT0]; }
ELSE { [RT1..RT0] := [RT1..RT0] - 1; } [RT1..RT0].CLK = CK; [RT1..RT0].AR = !RST;
当 RT1,RT0为 0时,表示现执行的是本指令的最后一个周期,这个周期为取指周期。在取指时将 RT1,RT0置为下一条指令的首个周期值。当 RT1,RT0不为 0时,将周期数减一。
CT1,CT0根据指令计算出,ABEL表达式是:
TRUTH_TABLE([IBUS7,IBUS6,IBUS5,IBUS4,IBUS3,IBUS2]->[CT1, CT0])
[ 0, 1, 1, 1, 1, 0 ]->[ 1, 0 ];// MOV A, MM [ 0, 1, 1, 1, 1, 1 ]->[ 0, 1 ]; // MOV A, #II
下面是 COP2000出厂时的组合逻辑控制器 ABEL表达式:
第六章 设计指令/微指令系统
COP2000计算机组成原理实验仪,可以由用户自己设计指令/微指令系统,前一章的“指令流水实验”就是利用另一套指令/微指令系统来实现指令的流水工作。这样用户可以在现有的指令系统上进行扩充,加上一些较常用的指令,也可重新设计一套完全不同的指令/微指令系统。COP2000内已经内嵌了一个智能化汇编语言编译器,可以对用户设定的汇编助记符进行汇编。
做为例题,我们建立一个有如下指令的系统:
指令助记符 LD A,#II ADD A,#II GOTO MM OUT A 指令意义描述 将立即数装入累加器A 累加器A加立即数 无条件跳转指令 累加器A输出到端口 因为硬件系统需要指令机器码的最低两位做为 R0-R3寄存器寻址用,所以指令机器码要忽略掉这两位。我们暂定这四条指令的机器码分别为 04H,08H,0CH,10H。其它指令的设计,用户可参考此例,做为练习来完成。
1.打开 COP2000组成原理实验软件,选择[文件|新建指令系统/微程序],清除原来的指令/微程序系统,观察软件下方的“指令系统”窗口,所有指令码都“未使用”。
2.选择第二行,即“机器码 1”为 0000 01XX行,在下方的“助记符”栏填入数据装载功能的指令助记符“LD”,在“操作数 1”栏选择“A”,表示第一个操作数为累加器 A。在“操作数 2”栏选择“#II”,表示第二个操作数为立即数。按“修改”按钮确认。
3.选择第三行,即“机器码 1”为 0000 10XX行,在下方的“助记符”栏填入加法功能的指令助记符“ADD”,在“操作码 1”栏选择“A”,表示第一操作数为累加器 A,在“操作数 2”栏选择“#II”,表示第二操作数为立即数。按“修改”按钮确认。
4.选择第四行,即“机器码 1”为 0000 11XX行,在下方的“助记符”栏填入无条件跳转功能的指令助记符“GOTO”,在“操作码 1”栏选择“MM”,表示跳转地址为 MM,此指令无第二操作数,无需选择“操作数 2”。按“修改”按钮确认。因为硬件设计时,跳转指令的跳转控制需要指令码的第 3位和第 2位 IR3、IR2来决定,无条件跳转的控制要求 IR3必需为 1,所以无条件跳转的机器码选择在此行,机器码为 000011XX。关于跳转控制的硬件设计和实验可参考前面章节。
5.选择第五行,即“机器码 1”为 0001 00XX行,在下方的“助记符”栏填入输出数据功能的指令助记符“OUTA”,由于此指令隐含指定了将累加器 A输出到输出商品寄存器,所以不用选择“操作码 1”和“操作数 2”,按“修改”按钮确认。