组成原理.docx
《组成原理.docx》由会员分享,可在线阅读,更多相关《组成原理.docx(28页珍藏版)》请在冰豆网上搜索。
组成原理
第一章绪论
一.课程设计的目的
1.通过对一个简单模型机的设计与实现,对计算机的基本组成、部件的设计、部件间的链接、微程序控制器的设计、微命令和微程序的编制与调试等过程有更深的了解,加深对理论课程的理解。
2.熟悉五条机器指令的功能、操作码、字节数、微程序流程图以及计算机各部件的基本功能,熟练掌握激素那几内部信息流年、数据流的传送。
3.为其定义五条机器指令,并编写响应的微程序,具体上机调试掌握整机概念。
4.掌握新增指令及设计及其指令程序转换成十六进制格式文件的内容
5.掌握按照系统建议的微指令流程图,将每条微指令译成二进制代码。
6.熟悉用为过程控制模型机的数据通路。
7.掌握部件单元电路实验的基础上,进一步将其自成系统构造一台基本模型计算机。
8.学习设计与调试计算机的基本步骤及方法。
9.通过单步和连续运行程序,进一步熟悉机器指令与微指令之间的关系,并掌握手动和联机读/写程序的方法。
10.使学生较熟悉的应用电子线路CAD工具完成单片机系统的硬件设计任务:
培养学生分析、解决问题的能力:
提高学生的科技论文写作能力。
第二章实验内容
一.实验原理
在部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能,这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微程序。
(1).主存储器的读写和运行
存储器读操作(KRD):
拨动总清开关CLR后,当控制台开关SWB,SWA置为“00”时,按START微动开关,可对RAM进行连续手动读出。
存储器写操作(KWE):
拨动总清开关CLR后,当控制台开关SWB,SWA置为“01”时,按START微动开关,可对RAM进行连续手动写入。
启动程序:
拨动总清开关CLR后,当控制台开关SWB,SWA置为“11”时,按START微动开关,即可转入到第01号“取指”微指令,启动程序运行。
上述三条控制台指令两个开关SWB,SWA的状态来设置,其定义如下:
SWB
SWA
控制台指令
0
0
读内存(KRD)
0
1
写内存(KWE)
1
1
启动程序(RP)
(2).指令寄存器介绍
指令寄存器(IR)用来保存当前正在执行的一条指令。
当执行一条指令时,先把它从内存取到指令寄存器中,然后再对其进行译码、执行。
指令划分为操作码喝地址码字段,由二进制数构成,为了执行任何给定的指令,必须对操作码进行测试[P
(1)],通过节拍脉冲T4的控制以便识别所要求的操作。
“指令译码器”(实验板上标有“INSDECODE”的芯片)根据指令中的操作码译码强置微控器单元的微地址,使下一条微指令指向相应的微程序首地址。
(3).输入输出设备
本系统有两种外部I/O设备,一种是二进制代码开关,它作为输入设备(INPUTDEVICE);另一种是数码块,它作为输出设备(OUTPUTDEVICE)。
例如:
输入时,二进制开关数据直接经过三态门送到总线上,只要开关状态不变,输入的信息就不变。
输出时,将输出数据送到数据总线上,当写信息(W/R)有效时,将数据打入输出锁存器,驱动数码块显示。
(4).移位运算指令
本实验在基本模型机的基础上搭接移位控制电路,实现移位控制运算。
实验机系统中增加设计4条移位运算指令
(1).左环移RL
(2).带进位左环移RLC
(3).右环移
(4).带进位右环移
直至令格式如下:
助记符操作码
RR01010000
RRC01100000
RL01110000
RLC10000000
说明:
RR是将R0寄存器的内容循环右移一位
RRC是将R0寄存器的内容带进位右移一位,它将R0寄存器最低位移入进位位,同时将进位位移至R0寄存器的最高位
RL是将R0寄存器的数据循环左移一位
RLC是将R0寄存器中的数据带进位循环左移一位
(5).指令设计
带移位运算的模型机的设计与实现指令
(1)IN输入“INPUTDEVICE”->R0,
(2)ADD[0DH]R0+[0DH]->R0,
(3)RLC带进位左移
(4)IN“INPUTDEVICE”->R0,
(5)RRC带进位右移
(6)RL左环移
(7)STA[0EH]R0->[0EH]
(8)OUT[0EH][0EH]->BUS
(9)JMP[00H]00H->PC
(6).带移位运算的模型机监控软件的设计
本模型机监控软件主要完成从输入设备读入数据,进行算术运算、移位运算后,将结果存入内存的某个单元,最后通过输出设备输出结果。
监控软件详细如下:
地址(二进制)内容(二进制)助记符说明
0000000000000000IN;“输入开关量”->R0
0000000100010000ADD[0DH]; R0+[0DH]->R0
0000001000001101
0000001110000000RLC带进位左移
0000010000000000IN;“输入开关量”->R0
0000010101100000RRC带进位右移
0000011001110000RL左环移
0000011100100000STA[0EH];R0->[0EH]
0000100000001110
0000100100110000OUT[0EH];[0EH]->BUS
0000101000001110
0000101101000000JMP00H00H->PC
0000110000000000
0000110101000000;自定义数据
00001110;结果存放单元
二.实验内容
(1).根据实验原理设计数据通路框图,如图2-1所示。
(2).根据机器指令画出对应的微程序流程图
本实验的微程序流程图见图2-2和2-3所示。
当拟定“取指”微指令时,该微指令的判别测试字段为P
(1)测试。
由于“取指”微指令是所有微程序都使用的公用微指令,因此P
(1)的测试结果出现多路分支。
本机用指令寄存器的前4位I7-I4作为测试条件,出现5路分支,占用5个固定微地址单元。
(3).根据微程序流程图设计微指令并转换成16进制代码文件
当全部微程序设计完毕后,应将每条微指令代码化,即按微指令格式将微程序流程图转化成二进制微代码表,如表2-4所示,再转化成16进制代码文件。
图2-1数据通路框图
图2-1微程序流程图
图2-2微程序流程图
(4).微指令格式
微指令共长24位,其控制位顺序如下:
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
S3
S2
S1
S0
M
Cn
WE
B1
B0
A
B
C
Ua5
Ua4
Ua3
Ua2
Ua1
Ua0
其中UA5-UA0为6位的后续微地址,A、B、C三个译码字段,分别有三组译码控制电路产生各控制信号。
C字段中的P
(1)-P(4)是四个测试字位。
其功能是根据机器指令及相应微代码进行译码,使微程序转入相应的微程序地址入口,从而实现微程序的顺序、分支、循环运行。
I7-I2为指令寄存器的第7-2位输出,SE5-SE1为微控器单元微地址锁存器的强制端输出。
AR为算出运算是否影响进位及判零标志控制为,低电平有效。
B字段中的RSB、RDB、RIB分别为元寄存器选通信号、目的寄存器选通信号及变址寄存器选通信号,其功能是根据机器指令来进行三个工作寄存器R0、R1及R2的宣统译码。
I0-I4为指令寄存器的第0-4位,LDRI为打入工作寄存器信号的译码器使能控制位。
A字段B字段C字段
15
14
13
选择
0
0
0
0
0
1
LDRi
0
1
0
LDDR1
0
1
1
LDDR2
1
0
0
LDIR
1
0
1
LOAD
1
1
0
LDAR
12
11
10
选择
0
0
0
0
0
1
RS-B
0
1
0
RD-B
0
1
1
RI-B
1
0
0
299-B
1
0
1
ALU-B
1
1
0
PC-B
7
8
9
选择
0
0
0
0
0
1
P
(1)
0
1
0
P
(2)
0
1
1
P(3)
1
0
0
P(4)
1
0
1
AR
1
1
0
LDPC
将微程序流程图按微指令格式转化而成的“二进制微代码表”。
微地址
S3S2S1S0MCNWEA9A8
A
B
C
UA5…UA0
00
000000011
000
000
100
010000
01
000000011
110
110
110
000010
02
000000001
100
000
001
001000
03
000000001
110
000
000
000100
04
000000001
011
000
000
000101
05
000000011
010
001
000
000110
06
011000011
001
101
000
000001
07
000000001
110
000
000
001101
10
000000000
001
000
000
000001
11
000000011
110
110
110
000011
12
000000011
110
110
110
000111
13
000000011
110
110
110
001110
14
000000011
110
110
110
010110
15
000000101
000
001
000
000001
16
000000001
110
000
000
001111
17
000000001
010
000
000
010101
20
000000011
110
110
110
010010
21
000000011
110
110
110
010100
22
000000001
010
000
000
010111
23
000000011
000
000
000
000001
24
000000000
010
000
000
011000
25
000001110
000
101
000
000001
26
000000001
101
000
110
000001
27
000001110
000
101
000
010000
30
000001101
000
101
000
010001
(5).根据微程序流程图设计微程序并转化成十六进制文件格式(文件名C8JHE2),具体内容如下:
机器指令程序微指令程序
$P0000
$P0110
$P020D
$P0380
$P0400
$P0560
$P0670
$P0720
$P080E
$P0930
$P0A0E
$P0B40
$P0C00
$P0D40
$M00088105
$M0182ED05
$M0250C004
$M0304E004
(7).确定连线图,根据各部件的功能,确定好电路各个芯片的连接,如下:
(8).实验连线
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连EXJ3;
i.ALUBUS连EXJ3
j.ALUO1连BUS1;
k.EXJ1连BUS3;
l.ALUO2连BUS4.
(9).仔细查线无误后接通电源。
(10).写程序
方法一:
手动写入。
使用控制台KWE和KRD微程序进行机器指令程序的装入和检查。
:
①使编程开关处于"RUN”,STEP为“STEP”状态,STOP为“RUN”状态。
②拨动总清开关CLR(0→1),微地址寄存器清零,程序计数器清零,然后控制台SWB,SWA开关置为“01”,按动一次启动开关START,微地址显示灯显示“001001”,再按动一次START,微地址灯显示“001100”,此时数据开关的内容置为要写入的机器指令,按动两次START键后,即完成该条指令的写入。
若仔细阅读KWE的流程,就不难发现,机器指令的首地址总清后为00H,以后每个循环PC自动加1,所以,每次按动START,只有在微地址灯显示“001100”时,才设置内容,直到所有机器指令写完。
③写完程序后须进行校验。
拨动总清开关CLR(0→1)后,微地址清零。
PC程序计数器清零,然后使控制台开关SWB,SWA为“00”,按动启动START,微地址灯将显示“001000";再按START,微地址灯显示为“001010”;第3次按START,微地址灯显示为“001110”;再按START后,此时输出单元的数码管显示为该首地址中的内容。
不断按动START,以后每个循环PC会自动加1,可检查后续单元内容。
每次在微地址灯显示为“001000”时,是将当前地址中的机器指令写入到输出设备中显示。
方法二:
联机读/写程序。
使用软件中的F4_LOAD功能装入机器指令格式文件或F2_R/WPR功能逐条写入。
(4)运行程序。
①单步运行程序:
A.使编程开关处于“RUN”状态,STEP为“STEP”状态,STOP为“RUN”状态。
B.拨动总清开关CLR(0→1),微地址清零,程序计数器清,程序首址为00H。
C.单步运行一条微指令,每按动一次START键,即单步运行一条微指令。
对照微程序流程图,观察微地址显示灯是否和流程一致。
D.当运行结束后,可检查存数单元(0EH)中的结果是否和理论值一致
②连续运行程序:
A.使STATEUNIT中的STEP开关置为“EXEC”状态,STOP开关置为“RUN”状态。
B.拨动CLR开关,清微地址及程序计数器,然后按动START,系统连续运行程序,稍后将STOP拨至“STOP”时,系统停机。
C.停机后,可检查存数单元(0EH)结果是否正确。
第三章实验分析
一.监控软件分析
地址(二进制)内容(二进制)助记符
0000000000000000IN;从输入开关任意输入数据存于R0
0000000100010000ADD[0DH];另一个加数是内存地址0DH中的内容
0000001000001101;存放0DH的地址为00000010
0000001110000000RLC;带进位左移
0000010000000000IN;从输入开关任意输入数据存于R0
0000010101100000RRC;带进位右移
0000011001110000RL;左环移
0000011100100000STA[0EH];将R0中的内容存放在地址为0EH的单元
0000100000001110;存放0EH的地址为00001000
0000100100110000OUT[0EH];将0EH中的内容在数码管上显示出来
0000101000001110
0000101101000000JMP00H;程序计数器PC的值跳转到0
0000110000000000
0000110101000000;自定义数据
00001110;结果存放单元
二.微程序分析
M00 088105
M01 82ED05 ;PC—>AR,PC+1,取指令
M02 50C004 ;RAM->BUS->IR,分析指令
M03 04E004 ;RAM->BUS->AR,取操作数地址
M04 05B004 ;RAM->BUS->DR2,取操作数拨那个存放到DR2寄存器中
M05 06A205 ;R0->DR1,将从输入端输入的数据存放到DR1寄存器中
M06019A95 ;(DR2+DR1)->R0,DR2和DR1中的内容相加,结果存放在R0
M07 0FE004 ;RAM->BUS->AR,获取R0中内容存放在主存中的单元地址
M08 8AED05 ;空操作
M09 8CED05 ;IN->R009表示微程序入口地址
M0A 0EA004 ;PC->AR,PC+1(0A是ADD微程序入口地址)
M0B 018005 ;PC->AR,PC+1(0B是STA微程序入口地址)
M0C 0D2004 ;PC->AR,PC+1(0C是OUT微程序入口地址)
M0D 098A06 ;PC->AR,PC+1(0D是JUMP微程序入口地址)
M0E 080A07 ;PC->AR,PC+1(0E是SUB微程序入口地址);
M0F 018206 ;R0->R299,带进位左环移
M10 011004 ;空操作
M11 83ED05 ;空操作
M12 87ED05 ;空操作
M13 99ED05 ;RAM->BUS,BUS->AR
M14 9CED05 ;RAM->BUS,BUS->LED
M15 1D8235 ;RAM->BUS,BUS->PC
M16 1F8235 ;R0->BUS,BUS->RAM
M17 218235 ;RAM->BUS->AR
M18 238235 ;RAM->BUS->DR2
M19 1AE004 ;R0->DR1
M1A 1BA004 ;(DR2-DR1)->R0
M1B 010A07 ;OUT
M1C 81D104 ;空操作
M1D 1E8825 ;R299->LED
M1E 019805 ;左循
M1F 20882D ;R299->LED
M20 019805 ;R299->R0
三.机器指令分析
1.输入(IN)
①将PC的值给AR,PC的值加1
②RAM的值通过总线(BUS)传给IR。
③将输入端(IN)的内容输入到R0。
(输入初始值0)
2.加法运算(ADD)作用:
让存储器中的值与输入的值相加
①将PC的值给AR,PC的值加1
②RAM的值通过总线(BUS)传给IR。
③将PC的值给AR,PC的值加1
④将RAM中的数值传给DR2,将R0的值传给DR1
⑤将DR1,DR2的数值传到ALU中相加,得到的结果存入R0中。
3.存数(STA)作用:
保护R0的值
①将PC的值给AR,PC的值加1
②RAM的值通过总线(BUS)传给IR。
③将PC的值给AR,PC的值加1
④将RAM的值通过总线(BUS)给AR
⑤将R0中的数值存入RAM中。
4.输出(OUT)
①将PC的值给AR,PC的值加1
②RAM的值通过总线(BUS)传给IR。
③将PC的值给AR,PC的值加1
④将RAM的值通过总线(BUS)给AR
⑤将RAM的值通过总线(BUS)传到LED端口。
如图2-2所示
6、循环左移(RL)作用:
让R0里的数向左循环移一位
①让R0的值放入移位发生器中
②将移位发生器中的数取出
③将取出的数进行循环左移
④将左移后的数据取出
⑤最后将最后的结果放入R0中
7、循环右移(RR)作用:
让R0里的数向右循环移一位
①让R0的值放入移位发生器中
②将移位发生器中的数取出
③将取出的数进行循环右移
④将右移后的数据取出
⑤最后将最后的结果放入R0中
8.跳转(JUMP)
①将PC的值给AR,PC的值加1
②RAM的值通过总线(BUS)传给IR。
③将PC的值给AR,PC的值加1
④将RAM的值通过总线(BUS)传给PC,实现了跳转,PC值变为00。
分析:
这个时候RO的值又发生变化,又变成第一次读入的数字
第四章实验结果
二.程序运行结果
(1).执行指令IN,从输入开关输入数据10H(00010000),并存入R0
(2).从主存中读取存储单元为0D的另一个加数40
(3)将R0中的装入的加数10H(00010000)装如寄存器DR1中,并且将从[0DH]中读取的另一个加数40H(01000000)装入寄存器DR2中,然后通过ALU运算器进行两个寄存器的数据相加得50H(01010000),然后将结果送入R0中。
(4)执行指令RLC,将R0中的内容放入移位寄存器
(5)将50H(01010000)带进位左环移,得到A0,并将A0存回R0
(6).执行指令IN,从输入开关输入数据10H(00010000),并送往R0
(7).执行指令RRL,将R0中的内容10H(00010000)送入移位寄存器