模型机综合设计之一加减法指令的实现doc.docx
- 文档编号:30731227
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:25
- 大小:542.81KB
模型机综合设计之一加减法指令的实现doc.docx
《模型机综合设计之一加减法指令的实现doc.docx》由会员分享,可在线阅读,更多相关《模型机综合设计之一加减法指令的实现doc.docx(25页珍藏版)》请在冰豆网上搜索。
模型机综合设计之一加减法指令的实现doc
模型机综合设计之一——加减法指令的实现
一、设计目的
1、掌握各个单元模块的工作原理,进一步将其组成系统构造1台基本的模型计算机。
2、在本设计中,将实现:
读写内存、寄存器、数值计算等功能,并且编写相应的微程序,具体上机调试各个模块单元,实现加减法指令,进一步掌握整机的概念。
二、设计原理
本个实验能在微程序的控制下自动产生各种单元模块的控制信号,实现加减法指令的功能。
在本实验中,计算机的数据通道、CPU从内存中取出机器指令,解释、执行指令都将由微指令组成的时序来完成,即一条机器指令对应一个微程序。
1根据各模块控制信号连接表用导线将实验平台HKZK-CPT板上的各单元连接好(总线和内存单元,微程序控制单元,寄存器组单元,算术逻辑单元,指令寄存器,启停单元等)。
2设计好加减法指令并编译运行。
在软件HKCPT中,分别输入设计好的两个程序,并且分别编译、加载到实验平台中。
3分别运行程序,通过软件HKCPT的微单步功能可观察各个变量的变化。
三、逻辑框图
逻辑框图
说明:
该图为主要的逻辑通路部分。
其中ALU具有+,-和M(传送)三种功能,DR1和DR2为锁存器,用来暂存做算术运算的两个操作书,操作的结果由PLU-C端送出;A为累加器,本实验中每步运算的结果均送给它保存;R0~r3为寄存器,用来保存进行算术运算的第二个操作数。
四、指令系统与格式分析
1根据本实验的硬件条件和本实验的需要,包括以下几条指令:
1)MOVA,#DATA;将立即数从内存读出写入累加器A
2)MOVRi,#DATA;将立即数从内存单元写入寄存器Ri
3)ADDA,Ri;将寄存器的内容与累加器A相加并将结果写入A
4)SUBA,Ri;将累加器A的内容减去寄存器的值并将结果写入A
5)STAADDR;将A的内容写入RAM地址ADDR
2由于在本系统内采用的是8位数据总线,和8位数据总线方式,所以在指令系统中存在单字节指令,和双字节指令。
单字节指令有MOVA,Ri、ADDA,Ri、HALT等。
双字节指令有MOVRi,ADDR、MOVA,#DATA、MOVRi,#DATA等。
(下为双字节指令示意图)
五、微程序的设计与实现
由于实验计算机指令系统规模较小,功能也不太复杂(只是实现加减法的算术运算),所以在本实验中采用全水平不编码纯控制场的微指令格式。
每条指令不超过4条微指令组成。
微指令的运行顺序为下地址的确定方法,即采用计数增量方法,每取微程序执行过程后微地址加1,指下向下一条微指令地址。
例如,确定了一条程序的微程序入口为00FH,那么当执行完00F这条微指令后微指令地址加1,指向010H微地址。
微地址寄存器,当在停止运行的状态下,其被清零。
当实验CPU开始运行时,微地址从00H开始,且00H放置一条取指指令,根据程序启始地址从内存中读出第一条指令。
六、时序设计安排
由监控单元产生一个PLS-O的信号来控制时序产生(时序如下图)。
我们可以在软件HKCPT的时序图窗口中观察到时序图的变化情况,上图为程序开始时,执行的取指微指令RAM→BUS→IR1操作时的变化。
接着执行MOVA,#DATA后时序图的变化如上图。
PLS-O作为一个微周期,同时时序单元产生了时序信号来触发各个寄存器。
PLS1:
作用为微地址寄存器的脉冲,起到设置微程序的启始地址并且微地址加1。
PLS2:
作用把24位微指令打入3片374中,锁存微指令。
PLS3:
把数据打入当前微指令选通的寄存器中。
PLS4:
控制当前指令地址寄存器的脉冲,用于根据微指令的控制现实指令地址加1的指令跳转。
七、指令执行流程
在每个系统中,一条指令从内存取出到执行完毕,需要若干个机器周期,任何指令中都必须有一机器周期是用来“取指令周期”,称为公操作周期。
1.MOVA,#DATA
该指令的功能为DATA→A,须执行如下微操作:
(PC)+1→PC;PC+1,为取下条指令字节准备
RAM→ODB→IDB→A;从内存单元中读出DATA值送入累加器A
(PC)→LAB→OAB;PC计数器内容作访问内存地址
(RAM)→ODB→IDB→IR1;从内存该地址单元读出指令字节送指令寄存器IR1
MOVA,#DATA由2个微指令周期完成指令执行:
1)PC+1为取下条指令字节准备,从内存读出数据送入累加器A。
2)取指微指令,从内存读出指令送指令寄存器。
2.MOVRi,#DATA
该指令的功能为DATA→Ri,需执行如下微操作:
(PC)+1→PC;PC+1,为取下条指令字节准备
(RAM)→ODB→IDB→Ri;从内存通过数据总线中读出数据送入Ri
(PC)→LAB→OAB;PC计数器内容作访问内存地址
(RAM)→ODB→IDB→IR1;从内存该地址单元读出指令字节送指令寄存器IR1
MOVRi,#DATA由2个微指令周期完成指令执行:
1)PC+1为取下条指令字节准备,从内存通过数据总线中读出数据送入寄存器Ri。
2)取指微指令,从内存读出指令送指令寄存器。
3.ADDA,Ri
该指令的功能为(A)+(Ri)→A,需执行如下微操作:
(PC)+1→PC;PC+1,为取下条指令字节准备
(A)→DR1;累加器A内容送ALU
(Ri)→DR2;寄存器Ri内容送ALU
(A)+(Ri)→IDB→A;使ALU执行加法,结果经IDB最后送入累加器A
C→CY;据加法结果置进位标志CY
(PC)→LAB→OAB;PC计数器内容作访问内存地址
(RAM)→ODB→IDB→IR1;从内存该地址单元读出指令字节送指令寄存器IR1
ADDA,Ri由4个微指令周期完成指令执行:
1)PC+1为取下条指令字节准备,累加器A内容送ALU的DR1锁存器。
2)寄存器Ri内容送ALU的DR2锁存器。
3)ALU将计算结果送累加器A,据加法结果置进位标志CY。
4)取指微指令,从内存读出指令送指令寄存器。
4.SUBA,Ri
该指令的功能为(A)-(Ri)→A,需执行如下微操作:
(PC)+1→PC;PC+1,为取下条指令字节准备
(A)→DR1;累加器A内容送ALU
(Ri)→DR2;寄存器Ri内容送ALU
(A)-(Ri)→IDB→A;使ALU执行减法,结果经IDB最后送入累加器A
C→CY;据减法结果置进位标志CY
(PC)→LAB→OAB;PC计数器内容作访问内存地址
(RAM)→ODB→IDB→IR1;从内存该地址单元读出指令字节送指令寄存器IR1
SUBA,Ri由4个微指令周期完成指令执行:
1)PC+1为取下条指令字节准备,累加器A内容送ALU的DR1锁存器。
2)寄存器Ri内容送ALU的DR2锁存器。
3)ALU将计算结果送累加器A,据减法结果置进位标志CY。
4)取指微指令,从内存读出指令送指令寄存器。
5.STAADDR
该指令的功能为(A)→ADDR,需执行如下微操作:
(PC)+1→PC;PC+1,为取下条指令字节准备
RAM→IDB→IR2;由内存通过数据总线将ADDR地址送地址寄存器IR2
IR2→IAB→OAB;将IR2的地址送到当前的内存
A→RAM;将累加器A的内容写入RAM地址ADDR
STAADDR由3个微指令周期完成指令执行:
1)PC+1为取下条指令字节准备,置当前内存单元地址为ADDR。
2)累加器A的内容送RAM的ADDR地址单元。
3)取指微指令,从内存读出指令送指令寄存器。
八、源程序,指令代码及微程序
设计好以下两程序进行调试运行:
程序1:
MOVA,#55
MOVR0,#44
ADDA,R0
MOVR1,#33
SUBA,R1
STA20
HALT
注:
微程序采用16进制表示,微指令为:
MLDWMRMEIRI,EIR2IR2-OPC-OELP,RRWRHALTX0,X1ERARA-OEDR1,EDR2ALU-OCNM,S3S2S1S0。
顺序
源程序
指令代码
微程序
位:
23222120。
。
。
21
微指令:
MLDWMRMEIRI。
。
。
S1S0
(16进制)
第一条指令
MOVA,#55
01011111
DDFBFF
第一条指令
4DFFFF
第二条指令
MOVR0,#44
01101100
DDBFFF
第二条指令
4DFFFF
第三条指令
ADDA,R0
00001100
FFFCF9
第三条指令
FF7F79
第三条指令
FFFBA9
第三条指令
4DFFFF
第四条指令
MOVR1,#33
01101101
DDBFFF
第四条指令
4DFFFF
第五条指令
SUBA,R1
00011101
FFFCD6
第五条指令
FE7F56
第五条指令
FFFB86
第五条指令
4DFFFF
第六条指令
STA20
10001111
D5FFF
第六条指令
BBFDFF
第七条指令
HALT
11111111
FFDFFF
程序2:
MOVA,#FA
MOVR0,#5
ADDA,R0
MOVR1,#20
SUBA,R1
MOVR2,#15
ADDA,R2
STA23
HALT
顺序
源程序
指令代码
微程序
位:
23222120。
。
。
21
微指令:
MLDWMRMEIRI。
。
。
S1S0
(16进制)
第一条指令
MOVA,#FA
01011111
DDFBFF
第一条指令
4DFFFF
第二条指令
MOVR0,#5
01101100
DDBFFF
第二条指令
4DFFFF
第三条指令
ADDA,R0
00001100
FFFCF9
第三条指令
FF7F79
第三条指令
FFFBA9
第三条指令
4DFFFF
第四条指令
MOVR1,#20
01101101
DDBFFF
第四条指令
4DFFFF
第五条指令
SUBA,R1
00011101
FFFCD6
第五条指令
FE7F56
第五条指令
FFFB86
第五条指令
4DFFFF
第六条指令
MOVR2,#15
01101110
DDBFFF
第六条指令
4DFFFF
第七条指令
ADDA,R2
00001110
FFFCF9
第七条指令
FF7F79
第七条指令
FFFBA9
第七条指令
4DFFFF
第八条指令
STA23
10001111
D5FFF
第八条指令
BBFDFF
第九条指令
HALT
11111111
FFDFFF
九、程序调试与分析
程序1微单步运行过程显示与分析:
微地址
数据流程
数据总线
地址总线
操作寄存器
00H
取指微指令RAM→BUS→IR1
5FH
00H
IR1=5FH
MOVA,#55
17H
BUS→A
55H
O1H
A=55H
18H
取指微指令RAM→BUS→IR1
6CH
02H
IR1=6CH
MOVR0,#44
1BH
RAM→寄存器R0
44H
03H
寄存器R0=44H
1CH
取指微指令RAM→BUS→IR1
0CH
04H
IR1=0CH
ADDA,R0
03H
A→锁存器DR1
55H
无效
DR1=55H
04H
寄存器R0→锁存器DR2
44H
无效
DR2=44H
05H
ALU->A
99H
无效
A=99H
06H
取指微指令RAM→BUS→IR1
6DH
05H
IR1=6DH
MOVR1,#33
1BH
RAM->寄存器R1
33H
06H
寄存器R1=33
1CH
取指微指令RAM→BUS→IR1
1DH
07H
IR1=1DH
SUBA,R1
07H
A→锁存器DR1
99H
无效
DR1=99H
08H
寄存器R1→锁存器DR2
33H
无效
DR2=33H
09H
ALU→A
66H
无效
A=66H
0AH
取指微指令RAM→BUS→IR1
8FH
08H
IR1=8FH
STA10
23H
RAM→BUS→IR2
20H
09H
IR2=20H
24H
A→RAM(20H)
66H
20H
RAM(20)=66H
25H
取指微指令RAM→BUS→IR1
FFH
0AH
IR1=FFH
HALT
3FH
置模型机为停止状态
无效
无效
置停止状态
程序2微单步运行过程显示与分析:
微地址
数据流程
数据总线
地址总线
操作寄存器
00H
取指微指令RAM→BUS→IR1
5FH
00H
IR1=5FH
MOVA,#FA
17H
BUS→A
FAH
O1H
A=FAH
18H
取指微指令RAM→BUS→IR1
6CH
02H
IR1=6CH
MOVR0,#5
1BH
RAM→寄存器R0
5H
03H
寄存器R0=5H
1CH
取指微指令RAM→BUS→IR1
0CH
04H
IR1=0CH
ADDA,R0
03H
A→锁存器DR1
FAH
无效
DR1=FAH
04H
寄存器R0→锁存器DR2
5H
无效
DR2=5H
05H
ALU->A
FFH
无效
A=FFH
06H
取指微指令RAM→BUS→IR1
6DH
05H
IR1=6DH
MOVR1,#20
1BH
RAM->寄存器R1
20H
06H
寄存器R1=20
1CH
取指微指令RAM→BUS→IR1
1DH
07H
IR1=1DH
SUBA,R1
07H
A→锁存器DR1
FFH
无效
DR1=FFH
08H
寄存器R1→锁存器DR2
20H
无效
DR2=20H
09H
ALU→A
DFH
无效
A=DFH
0AH
取指微指令RAM→BUS→IR1
6DH
08H
IR1=6DH
MOVR2,#15
1BH
RAM->寄存器R2
15H
09H
寄存器R2=15
1CH
取指微指令RAM→BUS→IR1
3EH
0AH
IR1=3EH
ADDA,R2
03H
A→锁存器DR1
DFH
无效
DR1=DFH
04H
寄存器R2→锁存器DR2
15H
无效
DR2=15H
05H
ALU->A
CAH
无效
A=CAH
06H
取指微指令RAM→BUS→IR1
8FH
0BH
IR1=8FH
STA23
23H
RAM→BUS→IR2
23H
0CH
IR2=23H
24H
A→RAM(23H)
CAH
23H
RAM(23)=CAH
25H
取指微指令RAM→BUS→IR1
FFH
0DH
IR1=FFH
HALT
3FH
置模型机为停止状态
无效
无效
置停止状态
十、实验结果与分析
1.程序1运行结果为:
RAM20H单元中的内容为66H。
以下给出程序1运行时各步结果显示图与分析。
图1.程序开始时取指微指令:
图2.执行MOVA,#55后接着取指微指令:
图3.执行MOVR0,#44接着取指微指令:
图4.将A中的值赋给DR1后将R0中的值置于DR2:
图5.将DR1+DR2的结果值赋给A后取指微指令:
图6.执行MOVR1,#33后取指微指令:
图7.将A中的值赋给DR1后将R1中的值赋给DR2:
图8.将DR1-DR2的结果送给A:
图9.执行RAM→BUS→IR2,其中IR2=20H:
图10.将A中内容置于RAM20H单元中:
图11.取指微指令(下一条为停机):
2.程序2运行结果为:
RAM23H单元中的内容为CAH
(程序2运行的各调试窗口显示的内容以下未给出,只给出部分调试结果,并以此进行分析。
)
程序2开始时尝试置A为FFH,然后再与R0中的值01H相加,编译时不通过,可见其已溢出,修改部分内容后继续编译调试,最后确定程序2。
调试图1.这是开始时由于前一个调试程序运行结束后非正常退出,而在输入程序2并编译后开始运行的第一步:
取指微指令,由画红圈的地方可以看出各寄存器与锁存器与A中仍有数值显示,本应清空时都置为了0,虽然对分析有些干扰,但对程序运行的最终结果却也不会产生逻辑的影响,故继续运行。
调试图2.运行MOVA,#FA后,A中原来的值被覆盖为FA。
调试图3.接着运行MOVR1,#05,寄存器R1的值变为05。
调试图4.下面是执行ADDA,R0时,A与R0的值送锁存器DR1与DR2的过程,原来锁存器的值被覆盖。
调试图5.DR1与DR2中的值相加后将结果赋予A。
由上的显示也可以看出程序的执行结果并不受原先的内容的影响,从其执行过程也都可推出接下来的数步执行显示。
十一、总结与体会
本次的课程设计可以说难度是相当大的,而且部分内容做得并不好,如时序的分析等方面。
课设一开始就遇到了相当大的困难,花了很多时间去调试实验平台,由于其中涉及的内容较多,许多方面也并没有做到仔细描述与实现,而本实验也只是完成了加减法运算指令的实现,可见设计出一套实际的完整的指令系统是相当困难的,电路的逻辑与庞大的指令编码,数十个01的组合,没有明确的充分的准备与思考来实现相关的功能,那不异于痴人说梦。
所幸涉及的指令较少,兼且严格的按照实验的指导来逐步进行方顺利的完成了相关的内容。
在本次课程设计中,我们实现了读写内存、寄存器、数值计算等功能,并且编写相应的微程序,具体上机调试了各个模块单元,进一步掌握整机的概念。
通过使用软件HKCPT,执行所设计的源程序的微程序,掌握到了源程序是如何通过执行微程序而被执行的。
而在使用软件HKCPT的过程中发现该平台配套的此软件并不十分实用,调试窗口在程序执行后便不能再移动,稍有移动便出现错误,以致时序图与结构图不能很好的同时进行观察以有效的验证模型机的功能。
虽是如此,但还是利用软件对程序的编译与加载替换了手动由键盘输入程序及用它来清楚的观察到了运行过程中各个变量的变化。
总的来说,通过在实验平台上使用微程序控制器执行源程序的微程序,验证了源程序的微程序正确,也较清晰地掌握了计算机使用微程序执行指令目的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模型 综合 设计 之一 加减法 指令 实现 doc