设计指令系统详解.docx
《设计指令系统详解.docx》由会员分享,可在线阅读,更多相关《设计指令系统详解.docx(13页珍藏版)》请在冰豆网上搜索。
设计指令系统详解
课程设计说明书
题目:
设计一指令系统
院系:
计算机科学与工程学院
专业班级:
计算机09-9班
学号:
2009*********
学生姓名:
**********
指导教师:
*********
2011年06月30日
安徽理工大学课程设计(论文)任务书
计算机科学与技术院系计算机硬件教研室
学号
88888888
学生姓名
88888888
专业(班级)
计算机88班
设计题目
设计一指令系统
设
计
技
术
参
数
通过CPTH计算机组成原理教学实验系统设计指令/微指令系统。
设
计
要
求
1.在基本模型机的基础上改进并实现IN,LDA,OUT,JMP,
ADD,SUB等6条指令的功能。
2.设计相应的微程序。
3.在实验箱上实现指令系统。
工
作
量
1.课程设计说明书2000字;
2.画出流程图,编写微指令代码和程序;
3.对各个指令代码进行分析,并运行测试。
工
作
计
划
学习微程序控制器,了解实验箱中的各部分结构。
分析题目,查阅资料,画出流程图,设计出微指令。
按实验要求连线,编写程序在实验箱上运行。
写出课程设计报告。
参
考
资
料
[1]陈书开,王毅.计算机组成与系统结构.武汉:
武汉大学出版社,2005
[2]张功萱.计算机组成原理.北京:
清华大学出版社,2005年09月
[3]王诚.计算机组成原理实验指导书.北京:
清华大学出版社,2002
[4]杨小龙.计算机组成原理与系统结构实验教程.西安:
西安电子科技大学出版社,2004
[5]袁开榜.计算机组成原理.北京:
高等教育出版社,1995
指导教师签字
****
教研室主任签字
2011年6月30日
指导教师评语:
成绩:
指导教师:
年月日
安徽理工大学课程设计(论文)成绩评定表
目录
内容摘要I
绪言1
1需求分析1
1.1设计背景1
1.2设计目标3
2总体设计3
2.1程序微指令分析3
2.2算术运算基本模型机微程序概述5
3.详细设计5
3.1CPTH模型机简介5
3.2模型机指令设计说明5
3.3根据指令的功能设计相应的微程序7
3.4编程实现9
4调试与运行9
5心得体会9
参考文献11
内容摘要
部件实验过程中,各部件单元的控制信号是人为模拟产生的,本课程设计将能在微程序控制下自动产生各部件单元的控制信号,实现特定指令的功能,通过设计流程图,编写机器指令,微指令和控制信号程序。
首先向存储器中装入数据和程序,然后检查写入是否正确,启动程序执行。
另外,还需设计微程序:
数据传送(LDA),加(ADD),减(SUB),输入(IN),输出(OUT),跳转(JMP)。
以上各微指令设计完毕后,用设计好的指令实现逻辑运算,连接线路在CPTH计算机组成原理教学实验箱运行程序,并将实验结果显示输出。
这一课题的实现不仅使我们对各种微指令有了熟练的掌握,更对以后的学习、工作中有深远的影响。
关键词:
指令,微程序,CPTH
绪言
随着社会科技的发展,计算机被应用到各行各业,人们步入自动化、智能化的生活阶段。
本次课程设计课题是基本模型机的设计与实现,它正体现了这一点。
利用CPU与简单模型机来实现计算机组成原理课程及实验中所学到的实验原理和编程思想,硬件设备自拟,编写指令的应用程序,用微程序控制器实现了一系列的指令功能,最终达到将理论与实践相联系。
本次设计完成了各指令的格式以及编码的设计,实现了各机器指令微代码,形成具有一定功能的完整的应用程序。
1需求分析
1.1设计背景
通过计算机组成原理理论课和几次实验的学习,尝试使用八类机器指令中的三到四种设计,并编写相应的微程序,完成由基本单元电路构成一台基本模型机,再经过调试指令和模型机使其在微程序的控制下自动产生各部件单元的正常工作控制信号。
本课程设计的模型机的指令码为8位,根据指令类型的不同,可以有0到2个操作数,指令码的最低两位用来选择R0-R3寄存器。
在微程序控制方式下,用指令码作为微地址来寻址微程序存储器,找到执行该指令的微程序。
在本模型机中,一条指令最多分为四个状态周期,一个状态周期为一个时钟脉冲,每个状态周期产生不同的控制逻辑,实现模型机的各种功能。
模型机有24位控制位以控制寄存器的输入输出,选择运算器的运算功能,存储器的读写。
简言之,这次设计,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期,全部由微指令组成的序列来完成,即一条机器指令对应一条微程序,一条微程序又有若干微指令组成,一条微指令的功能由24位操作信号(即控制位)实现。
本设计是在DJ-CPT816计算机组成原理实验仪和仿真软件上进行的
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打入允许,与指令寄存器的IR2.,IR3位结合,控制程序跳转。
MAREN:
将数据总线DBUS上数据打入地址寄存器MAR
MAROE:
将地址寄存器MAR的值送到地址总线ABUS上
OUTEN:
将数据总线DBUS上数据送到输出端口寄存器OUT里
STEN:
将数据总线DBUS上数据存到堆栈寄存器里
RRD:
读寄存器组R0-R3,寄存器R?
的选择由指令的最低两位决定
RWR:
写寄存器组R0-R3,寄存器R?
的选择由指令的最低两位决定
CN:
决定运算器是否带进位移位,CN=1带进位,CN=0不带进位
FEN:
将标志位存入ALU内部的标志寄存器
X2,X1,X0三位组合来译码选择将数据送到DBUS上的哪个寄存器,见表1-1
WEN:
将数据总线DBUS的值打入工作寄存器W中
AEN:
将数据总线DBUS的值打入累加器A中
S2,S1,S0三位组合决定ALU做何种运算,见表1-2
表1-1寄存器选择控制表
X2X1X0
输出寄存器
000
IN_OE外部输入门
001
IA_OE中断向量
010
ST_OE堆栈寄存器
011
PC_OEPC寄存器
100
D_OE直通门
101
R_OE右移门
110
L_OE左移门
111
没有输出
表1-2运算器功能控制
S2S1S0
功能
000
A+W加
001
A-W减
010
A|W或
续表1-2
011
A&W与
100
A+W+C带进位加
101
A-W-C带进位减
110
~AA取反
111
A输出A
1.2设计目标
本课程设计要求实现机器指令:
,IN(输入),OUT(输出),LDA(不带进位算术加),ADD(带进位算术加),SUB(带进位算术减),JMP(跳转指令)。
并且要包括直接寻址,立即数寻址,寄存器寻址,间接寻址四种寻址方式。
最后要在设计的指令系统基础上,编写程序实现带进位的循环左移。
2总体设计
2.1程序微指令分析
将程序在DJ-CPT816软件上单步运行结束后可得微指令跟踪图如下表2-1:
表2-1微指令跟踪图
助记符
状态
微地址
微程序
数据输出
数据打入
地址输出
运算器
Upc
Pc
T0
00
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
00IN
T1
44
FFFF17
用户IN
寄存器A
A输出
+1
T0
45
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
05JMP09
T1
9C
C6FFFF
存贮器值EM
寄存器PC
PC输出
A输出
+1
写入
T0
9D
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
07ADDA,#01
T2
10
C7FFEF
存贮器值EM
寄存器W
PC输出
A输出
+1
+1
T1
11
FFFE90
ALU直通
寄存器A
加运算
+1
续表2-1
T0
12
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
09OUT
T1
48
FFDF9F
ALU直通
用户OUT
A输出
+1
T0
49
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
0A
JMP
01
T1
9C
C6FFFF
存贮器值EM
寄存器PC
PC输出
A输出
+1
写入
T0
9D
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
2.2算术运算基本模型机微
首先对编好的程序进行保存,然后进行汇编,看是否有语法错误,再进行单步调试,
按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,数据是否按照设计要求流动,寄存器的输入/输出状态是否符合设计要求,各控制信号的状态,PC及UPC如何工作。
开始调试的时候是有点错,我还以为是指令错了,经过几次的核对,检验,和与草图对比,指令的跳转是没有问题的,最后估计可能接线出错了。
应接J1和J2座的,却接成了J1和J3座,跳转的指令出错,也可能是MA6∽MA0接线不对,
改正了后重新检查一编线路后,重新开始运行程序LED显示的十六进制数与MA6∽MA0微地址显示灯对应。
拨动开关CLR(0→1)后,微地址清零。
PC程序计数器清零,然后控制台SWB~SWA开关置为“00”,按动启动开关START,微地址显示灯“010000”(20),再按动一次START,微地址灯显示“010010”(22),第三次按动START,微地址显示灯显示“010111”
3.详细设计
3.1CPTH模型机简介
CPTH模型机包括了一个标准CPU所具备所有部件,这些部件包括:
运算器ALU、累加器A、工作寄存器W、左移门L、直通门D、右移门R、寄存器组R0-R3、程序计数器PC、地址寄存器MAR、堆栈寄存器ST、中断向量寄存器IA、输入端口IN、输出端口寄存器OUT、程序存储器EM、指令寄存器IR、微程序计数器uPC、微程序存储器uM,以及中断控制电路、跳转控制电路。
其中运算器和中断控制电路以及跳转控制电路用CPLD来实现,其它电路都是用离散的数字电路组成。
微程序控制部分也可以用组合逻辑控制来代替。
模型机为8位机,数据总线、地址总线都为8位,但其工作原理与16位机相同。
相比而言8位机实验减少了烦琐的连线,但其原理却更容易被学生理解、吸收。
3.2模型机指令设计说明
表3-1模型机指令
指令助记符
功能描述
IN
从输入端口读数据到累加器A中
ADDA,#*
将累加器A中的数据输出到端口中
续表3-1
SUBA,#*
将累加器A中的数据输出到端口中
JMP*
跳转到指定地址
OUT
将累加器A中的数据输出到输出端口
LDAR?
累加器A中取数
一.创建指令系统(助记符、机器码)
(1)打开CPTH组成原理实验软件,选择[文件|新建指令系统/微程序],清除原来的指令/微程序系统,观察软件下方的“指令系统”窗口(图3.1),所有指令码都“未使用”。
图3.1指令系统窗口
(2)选择第二行,即“机器码1”为000001XX行,在下方的“助记符”栏填入数据装载功能的指令助记符“IN”,由于此指定了将累加器A输出寄存器,所以不用选择“操作码1”和“操作码2”,也可在“操作数1”栏选择“A”,表示第一个操作数为累加器A,“操作数2”无需选择。
按“修改”按钮确认。
(3)选择第三行,即“机器码1”为000010XX行,在下方的“助记符”栏填入加法功能的指令助记符“LDA”,在“操作码1”栏选择“A”,表示第一操作数为累加器A,在“操作数2”栏选择“#*”,表示第二操作数为立即数。
按“修改”按钮确认。
(4)选择第四行,即“机器码1”为000011XX行,在下方的“助记符”栏填入指令助记符“OUT”,由于此指定了将累加器A输出寄存器,所以不用选择“操作码1”和“操作码2”,也可在“操作数1”栏选择“A”,表示第一个操作数为累加器A,“操作数2”无需选择。
按“修改”按钮确认。
(5)选择第五行,即“机器码1”为000100XX行,在下方的“助记符”栏填入输出数据功能的指令助记符“JMP”,在“操作码1”栏选择“*”,表示跳转地址为*,此指令无第二操作数,无需选择“操作数2”。
按“修改”按钮确认。
因为硬件设计时,跳转指令的跳转控制需要指令码的第3位和第2位IR3,IR2来决定,无条件跳转的控制要求IR3必须为1,所以无条件跳转的机器码选择此行,机器码为000011XX。
关于跳转控制的硬件设计和实验可参考前面章节。
(6)选择第六行,即“机器码1”为000101XX行,在下方的“助记符”栏填入输出数据功能的指令助记符“ADD”,在“操作码1”栏选择“A”,表示第一个操作数为累加器A,在“操作数2”栏选择“#*”,表示第二操作数为立即数。
按“修改”按钮确认。
(7)选择第七行,即“机器码1”为000110XX行,在下方的“助记符”栏填入输出数据功能的指令助记符“SUB”,在“操作码1”栏选择“A”,表示第一个操作数为累加器A,在“操作数2”栏选择“#*”,表示第二操作数为立即数。
按“修改”按钮确认。
图3.2指令助记符
3.3根据指令的功能设计相应的微程序
将窗口切换到“uM微程序”窗口,现在此窗口中所有微指令值都是0FFFFFFH,也就是无任何操作,我们需要在此窗口输入每条指令的微程序来实现该指令的功能。
⑴每个程序开始要执行的第一条微指令应是取指操作,因为程序复位后,PC和uPC的值都为0,所以微程序的0地址处就是程序执行的第一条取指的微指令。
取指操作要做的工作是从程序存储器EM中读出下条将要执行的指令,并将指令的机器码存入指令寄存器IR和微程序计数器uPC中,读出下条操作的微指令。
根据此功能,观察窗口下方的各控制信号,有“勾”表示信号为高,处于无效状态,去掉“勾”信号为低,为有效状态。
要从EM中读数,EMRD必需有效,去掉信号下面的“勾”使其有效;读EM的地址要从PC输出,所以PCOE要有效,允许PC输出,去掉PCOE下面的“勾”,PCOE有效同时还会使PC加1,准备读EM的下一地址;IREN是将EM读出的指令码存入uPC和IR,所以要去掉IREN的“勾”使其有效。
这样,取指操作的微指令就设计好了,取指操作的微指令的值为CBFFFFH。
然后把助记符"_FATCH_",状态"T0",微地址"00",微程序"CBFFFFH"..,按照上表格式填入,其余类同.
⑵现在我们来看把立即数装入累加器A要做哪些工作,首先要从EM中读出立即数,并送到数据总线DBUS,再从DBUS上将数据打入累加器A中,按照这个要求,从EM中读数据,EMRD应该有效,EM的地址由PC输出,PCOE必需有效,读出的数据送到DBUS,EMEN也应有效,要求将数据存入A中,AEN也要有效,根据前面描述“JIAYI#*”指令有四个状态周期,T0状态取指微指令的值为CBFFFFH,T1状态取指微指令的值为CBFF90H,T2状态取指微指令的值为D7FFEF,T3状态取指微指令的值为EF7FFF。
(取操作描述可见第⑴步)。
如上,根据指令的执行过程分析,并参照实验指导书上微型机指令集得出其他的微程序。
如图3.3
图3.3微程序结果
(6)选择菜单[文件|保存指令系统/微程序]功能,将新建的指令系统/微程序保存下来,以便以后调用。
为不与已有的指令系统冲突,将新的指令系统/微程序保存为“new.mac”。
如图3.4。
图3.4指令系统/微程序文件图
3.4编程实现
源代码
LDAR1,#01
ADDA,#01
SUBA,#01
IN
JMPLOOP
LOOP:
OUT
将程序另存为A,ASM,选择[文件|跳入指令系/微程序],调入a.mac,将程序汇编成机器码,观察反汇编窗口,会现实出程序地址,机器码,反汇编指令。
按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,数据是否按照设计要求流动,寄存器的输入/输出状态是否符合设计要求,各控制信号的状态,PC及uPC如何工作是否正确。
到此为止,我们利用CPTH软件系统已经建成了一个新的指令系统/微程序。
新的指令系统从汇编助记符到指令机器码到微指令都与原来的指令系统有所不同。
我们只创建了四条指令,对于其它指令,用户可以做为练习来扩充完整,成为一个真正的指令系统。
4调试与运行
使用软件中的F4-LOAD功能装入机器指令格式文件
(1)将编程开关置为“RUN”,“STEP”置为“STEP”,“STOP”置为“RUN”状态。
(2)拨动开关CLR(0→1),微地址寄存器清零,程序计数器清零,程序的首地址00H。
(3)单步来运行一条微指令,每按动一次START键,即单步调试运行一条微指令。
对照微程序流程图,观察微地址显示灯是否和流程一致。
(4)当运行结束后,可检查数据寄存器中的结果是否和理论值一致。
5心得体会
通过在计算机组成原理实验课的学习,我对计算机组成原理这门课程有着更深的认识和理解,特别是这次课程设计。
虽然设计出来的微指令系统比较简单,但这次课程设计使我学到了许多在书上学不到的东西。
首先,我的动手能力得到了一定程度的提高,同时也一定程度上提高了自己独立思考的能力;其次,在这次课程设计中我也遇到了一些问题,原因在于自己对这门课程的一些概念还是理解得不够深刻,但是通过查阅相关资料,还有在老师和同学的帮助下,这些问题最终得到了还好的解决,这是我对课本上的知识也有了更加深刻的理解和掌握。
之前看到课本上的什么微指令系统、微指令之类的,总是感觉稀里糊涂的,这些个概念对我来说很抽象,所以自然就很难理解了。
而实验仪器则有助于我去理解这些指令到底是如何实现特定的功能的。
而且,从所给的软件中很容易编写出自己的指令系统,只是一个指令的详细设计还是比较难的,因为有24位要按照所完成的功能编写0或1,这是此次课程设计的关键,但是如果掌握了各个位的作用,同时又很清楚自己设计的指令要完成的功能,那么设置0和1就不会那么麻烦。
这次课程设计虽然只是简单的设计的六条指令,完成了简单的与或运算,但我明白了该如何设计好一条指令,掌握了设计指令的一些方法,这对我以后在实践过程中会是一次很好的经历。
参考文献
[1]陈书开,王毅.计算机组成与系统结构.武汉:
武汉大学出版社,2005
[2]张功萱.计算机组成原理.北京:
清华大学出版社,2005年09月
[3]王诚.计算机组成原理实验指导书.北京:
清华大学出版社,2002
[4]杨小龙.计算机组成原理与系统结构实验教程.西安:
西安电子科技大学出版社,2004
[5]袁开榜.计算机组成原理.北京:
高等教育出版社,1995