淮海工学院计算机组成原理 (1)
淮海工学院计算机工程学院
实验报告书
课程名 《计算机组成原理》
题 目: 基本模型机的设计与实现 班 级: 软件122 学 号: 2012122734 姓 名: 韩莹
日 评语: 成绩: 指导教师: 批阅时间: 年 月 实验七 基本模型机的设计与实现
一、实验目的
1、在掌握部件单元电路实验的基础上,进一步将其组成系统以构造一台基本模型实验计算机。
2、设计五条机器指令,并编写相应的微程序,具体上机调试,掌握整机软硬件组成概念。
二、实验原理
部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能。这里,实验计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
⑴有关微控制器部分在前一实验中已详细介绍 ⑵ 主存储器的读、写和运行
为了向主存储器RAM中装入程序或数据,并且检查写入是否正确以及能运行主存储器中的程序,必须设计三个控制操作微程序。
·存储器读操作:拨动总清开关后,置控制开关SWC、SWA为“0 0”时,按要求连线后,连续按“启动运行”开关,可对主存储器RAM连续手动读操作。
·存储器写操作:拨动总清开关后,置控制开关SWC、SWA为“0 1”时,按要求连线后,再按“启动运行”开关,可对主存储器RAM进行连续手动写入。
·运行程序:拨动总清开关后,置控制开关SWC、SWA为“1 1”时,按要求连线后,再按“启动运行”开关,即可转入到第01号“取址”微指令,启动程序运行。
上述三条控制指令用两个开关SWC、SWA的状态来设置,其定义如下:
SWC 0 0 1
⑶ 指令寄存器介绍
SWA 0 1 1 控制台指令 读内存 写内存 启动程序 指令寄存器用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到缓冲寄存器中,然后再传送到指令寄存器。指令划分为操作码和地址码字段,由二进制构成,为了执行任何一条给定的指令,必须对操作码进行测试P(1),通过节拍脉冲T4的控制以便识别所要求的操作。“指令译码器”根据指令中的操作码进行译码,强置微控器单元的微地址,使下一条微指令指向相应的微程序首地址。
⑷ 输入/输出设备
本系统有两种外部I/O设备,一种是二进制代码开关KD0~KD7,它作为输入设备INPUT;另一种是数码显示块,它作为输出设备OUTPUT。例如:输入时,二进制开关数据直接经过三态门送到外部数据总线上,只要开关状态不变,输入的信息也不变。输出时,将输出数据送到外部数据总线上,当写信号(W/R)有效时,将数据打入输出锁存器,驱动数码块显示。
⑸ 设计指令
根据基本模型机的硬件设计五条机器指令:外设输入指令IN、二进制加法指令ADD、存数指令STA、输出到外设指令OUT、无条件转移指令JMP。指令格式如下:
助记符 机器指令码 说 明
IN 0000 0000 ; “外部开关量输入”KD0~KD7的开关状态→
R0
ADD addr 0001 0000 ×××× ××××; R0+[addr]→R0 STA addr 0010 0000 ×××× ××××; R0→[addr] OUT addr 0011 0000 ×××× ××××; [addr]→BUS JMP addr 0100 0000 ×××× ××××; [addr]→PC 说明:
指令IN为单字节指令,其余均为双字节指令, ××××××××为addr对应的主存储器二进制地址码。
⑹ 基本模型机监控软件的设计
本模型机监控软件主要完成从输入设备读入数据,进行简单算术运算后,将结果存入内存的某个单元,最后通过输出设备输出结果。
监控软件详细如下:
地 址 内容 助记符 说 明
0000 0000 0000 0000 IN ;“INPUT DEVICE”→R0 0000 0001 0001 0000 ADD[0AH]; R0+[0AH]→R0 0000 0010 0000 1010
0000 0011 0010 0000 STA[0BH]; R0→[0BH] 0000 0100 0000 1011
0000 0101 0011 0000 OUT[0BH]; [0BH]→BUS 0000 0110 0000 1011
0000 0111 0100 0000 JMP[00H] ; 00H→PC 0000 1000 0000 0000 0000 1001
0000 1010 0000 0001 ;自定义参加运算的数 0000 1011 ;求和结果存放单元
三、实验电路
1、实验连线图
a、跳线器J1~J12全部拨在右边(自动工作方式); b、跳线器J16、J18、J23、J24全部拨在左边; c、跳线器J13~J15、J19、J25拨在右边; d、跳线器J20~J22、J26、J27连上短路片; e、UJ1连UJ2,JSE1连JSE2,SJ1连SJ2; f、MBUS连BUS2; g、REGBUS连BUS5; h、PCBUS连EXJ2; i、ALUBUS连EXJ3; j、ALUO1连BUS1; k、EXJ1连BUS3;
2、实验原理图 参见图3.7.1。
地址总线 ALUB
△
AR(74273)
M CN
LDAR S3 S2 S1 S0 ALU
RAM
△ PCB CE DR1(74273)
DR2(74273)
输出设备 CE LEDB W/R
PC (74161)
LDAD LDPC
W/R
CE LDDR1 LDDR2 数据总线
R0B R0(74374)
LDR0 时序 微控器
W/R 译 码 器 CS0 CS1 CS2 SWB CE
输入设备
IR (74273)
CPU
LDIR
图3.7.1 数据通路框图
四、实验步骤
⑴根据机器指令画出对应的微程序流程图
本实验的微程序流程见图3.7.2,当拟定“取指”微指令时,该微指令的判别测试字段为P(1)测试。由于“取指”微指令是所有微程序都使用的公用微指令,因此P(1)的测试结果出现多路分支。本机用指令寄存器的前4位I7~I4作为测试条件,出现5路分支,占用5个固定微地址单元。
实验机控制操作为P(4)测试,它以控制开关SWC、SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。当分支微地址单元固定后,剩下的其它地方就可以一条微指令占用控存一个微地址单元随意填写。
注意:微程序流程图上的单元地址为16进制。
⑴ 根据微程序流程图设计微指令并转换成16进制代码文件。
当全部微程序设计完毕后,应将每条微指令代码化,即按微指令格式将图3.7.2微程序流程图转化成二进制微代码表,如表3.7.1所示,再转换成16进制代码文件。
运 行 微 程
↓ 01 ↓ 控 制器
PC→AR PC+1 02 RAM→BUS ↓ 00 P(4) KWE(01) OUT 0B PC→AR PC+1 0E RAM→BUS BUS→AR RAM→BUS BUS→DR1 DR1→LED 十六进制微地址
BUS→IR 08 P(1) 0A PC→AR PC+1 07 10 (SWC SWA) RP(11) KRD(00) PC→AR PC+1 12 RAM→BUS BUS→DR1 IN 08 SW→R0 ADD 09 PC→AR PC+1 03 ↓ 01
↓ ↓ STA ↓ RAM→BUS BUS→AR RAM→BUS BUS→DR2 RO→DR1
↓ ↓ 04 ↓ 05 RAM→BUS BUS→AR ↓ ↓ 0C
PC→AR PC+1 16 RAM→BUS BUS→PC ↓ JMP ← 11 ↓PC→AR PC+1 14 (SW)→BUS BUS→DR1 ← 10 ↓↓ 01 13 ↓ 01
↓ ↓ ↓ RO→BUS BUS→RAM ↓ 0D 01
↓ 0F ↓ 15 01
↓ 18 17 DR1→RAM DR1→LED (DR1)+(DR2) →RO
↓ 06 01
图 3.7.2 微程序流程图
监控程序的16进制文件格式(文件名C8JHE1): 程序: $P00 00 $P01 10 $P02 0A $P03 20 $P04 0B $P05 30 $P06 0B $P07 40 $P08 00 $P0A 01
微程序:
$M00 1081061 $M01 82ED61
$M02 48C060
$M03 04E060 $M04 05B060 $M05 06A261 $M06 019A61 $M07 0DE060 $M08 011060 $M09 83ED61 $M0A 87ED61 $M0B 8EED61 $M0C 96ED61 $M0D 018262 $M0E 0FE060 $M0F 15A060 $M10 92ED61 $M11 94ED61 $M12 17A060
$M13 018061 $M14 182060 $M15 010A63 $M16 81D160 $M17 100A63 $M18 118A62
表3.7.1 二进制微代码表 微地址 0 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 A 0 B 0 C 0 D 0 E 0 F 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 ⑶读写程序
①手动方法写微程序参看实验六。
手动方法写代码程序(机器指令)步骤如下:
2
通过上一步将 机器指令对应的微代码正确地写入EROM 2816芯片后,再进行机器指令程序的装入和检查。
A. 将“编程开关”置“运行”位置,“运行控制”开关置“运行”位置,“运行方式”开关置“单步”位置。
S3 S2 S1 S0 M CN WE B1 B0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 1 A 0 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 0 1 0 1 1 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 B 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 C 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 UA5…UA0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 0 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 B. 拨动总清开关(0→1),微地址寄存器清零,程序计数器清零。然后使控制开关SWC、SWA开关置为“0 1”,按动一次“启动运行”开关,微地址显示灯LUA0~LUA5显示“010001”,再按动一次“启动运行”开关,微地址显示灯LUA0~LUA5显示“010100”,此时数据开关的内容置为要写入的机器指令,再按动一次“启动运行”开关,即完成该条指令的写入。若仔细阅读微程序流程,就不难发现,机器指令的首地址只要第一次给出即可,PC会自动加1,所以,每次按动“启动运行”开关,只有在微地址灯显示“010100”时,才设置内容,直到所有机器指令写完。
C. 写完程序后须进行检验。拨动总清开关(0→1)后,微地址清零,PC程序计数器清零,然后使控制开关SWC、SWA为“0 0”,按动“启动运行”开关,微地址灯将显示“010000”,再按“启动运行”开关,微地址灯显示为“010010”,第三次按“启动运行”开关,微地址灯显示为“010111”,此时总线数据显示灯LZD0~LZD7显示为该首地址的内容,再按动一次“启动运行”开关,微地址灯显示为“010000”,2位数码管即显示RAM中的程序。不断按动“启动运行”开关,可检查后续单元内容。
注意:每次仅在微地址灯显示为“010000”时,2位数码管显示的内容才是相应地址中的机器指令内容。
② 联机读/写微程序和机器指令
用联机软件的装载功能将16进制格式文件(文件名为C8JHE1)装入实验系统即可(详细操作见随机软件的README)。
⑷运行程序
① 单步运行程序
A. “编程开关”置“运行”状态,“运行方式”开关置为“单步”状态,“运行控制”开关置为“运行”状态。
B. 拨动总清开关(0→1),微地址清零,PC计数器清零,程序首地址为00H。 C. 按动“启动运行”开关,即单步运行一条微指令。对照微程序流程图,观察微地址显示灯是否和流程一致。
② 连续运行程序
A. “编程开关”置“运行”状态,“运行方式”开关置为“连续”状态,“运行控制”开关置为“运行”状态。
B. 拨动总清开关,清微地址及PC计数器,按动“启动运行”开关,系统连续运行程序。如果要停止程序的运行,只需将“运行控制”开关置为“停止”状态,系统就停机。
C. 停机后,可检查存数单元0BH中的结果是否正确。
五、实验分析
1、当外部开关量输入KD0~KD7为00000111,运行程序后检查存数单元0BH中的结果是否正确。
2、当外部开关量输入同上,若运行程序后希望存数单元0BH中的结果是0FH,则应该如何修改模型机监控程序的16进制格式文件(文件名C8JHE1)?
答:我选做的是A-B,故此时0AH中是01,则input需要输入10H。
六、实验结果
我做的是A-B,此时0AH单元为01H,input是输入06H,则output的结果为05H,结果
如下图:
代码就是把$M06 019A95改成$M06 019A61。
七、思考题
1、结合图3.7.2微程序流程图,说明实验中的ADD、STA、OUT、JMP指令各是何种数据寻址方式?
答:输入,相加,取数,输出,跳转,ADD、STA、OUT都是间接寻址方式;而JMP是直接寻址方式。
2、在手动方法写代码程序(机器指令)时,每次按动“启动运行”开关,为什么只有在微地址灯显示“010100”时,才能设置内容,直到所有机器指令写完? 机器指令的首地址只要第一次给出即可,PC会自动加1,所以每次按动“启动运行”开关,只有在微地址灯显示“010100”时,才能设置内容,直到所有机器指令写完。
八、思想体会
通过此次实验,我真正意识到做这个实验的难处,线不仅多而且还很乱,而且还很担心
线会接触不良,最后的结果还是很不理想,第一次做实验没有成功,老师帮我们检查了一遍,最后是因为线接触不良,在周一的时候我们在做了第二次实验,但还是困难重重,最后在同学的帮助下终于做出来了,但是我们竟然忘记拍照了,所以只能借用了同学的照片。但这次实验收获很大,当你很用心做一件事情时,你一定会成功。
因篇幅问题不能全部显示,请点此查看更多更全内容