模型机指令系统的设计与实现毕业设计..doc
《模型机指令系统的设计与实现毕业设计..doc》由会员分享,可在线阅读,更多相关《模型机指令系统的设计与实现毕业设计..doc(15页珍藏版)》请在冰点文库上搜索。
课程设计说明书
题目:
模型机指令系统的设计与实现
院系:
专业班级:
学号:
学生姓名:
指导教师:
2010年12月10日
安徽理工大学课程设计(论文)任务书
学号
学生姓名
专业(班级)
设计题目
模型机指令系统的设计与实现
设
计
技
术
参
数
(1)用微程序控制器实现设计任务;
(2)要满足指令系统的性能要求;
(3)设计说明书能很好地反映设计内容
设
计
要
求
参考实验指导书第四章模型机综合实验(微程序控制器)设计的过程,运用其微指令格式,独立设计指令系统。
并用该指令系统中的指令编一完成简单运算的程序,并进行调试运行。
工
作
量
要求设计说明书的字数在3000字以上。
工
作
计
划
2010.11.22-11.24根据设计要求,查找相关资料,完成需求分析;
2010.11.25-11.28进行系统的概要设计;
2010.11.29-12.01进行系统的详细设计和微程序的书写;
2010.12.02-12.05对系统进行调试分析,写出课程设计报告。
参
考
资
料
[1]白中英.计算机组成原理(第四版).科学出版社.2008
[2]DJ-CPTH超强型计算机组成原理与系统结构实验指导书.启东市东疆计算机有限公司.2008
指导教师签字
教研室主任签字
2010年6月20日
指导教师评语:
成绩:
指导教师:
年月日
目录
1问题描述 1
1.1设计目的 1
1.2设计要求 2
2数据格式和指令系统 2
2.1数据格式 2
2.2指令格式 3
2.3 指令系统 5
3模型机的数据通路 5
4详细设计 7
5调试分析 9
6设计体会 11
参考文献 12
1问题描述
1.1设计目的
本课程设计是《计算机组成原理》课程结束以后开设的大型实践性教学环节。
通过本课程设计,加深对计算机系统各模块的工作原理及相互联系的认识,特别是对微程序控制器的理解,进一步巩固所学的理论知识,并提高运用所学知识分析和解决实际问题的能力;锻炼计算机硬件的设计能力、调试能力;培养严谨的科学实验作风和良好的工程素质,为今后的工作打下基础。
1.2设计要求
(1)确定设计目标
参考指导书上模型机综合实验设计的过程,运用其微指令格式,独立设计指令系统。
并用该指令系统中的指令编写一个简单运算的程序,并进行调试运行。
(2)确定指令系统
确定数据的表示格式、位数、指令的编码、类型、需要设计哪些指令及使用的寻址方式。
(3)总体结构与数据通路
总体结构设计包含确定各部件设置以及它们之间的数据通路结构。
在此基础上,拟出各种信息传送路径,以及实现这些传送所需要的微命令。
(4)设计指令执行流程
数据通路确定后,就可以设计指令系统中每条指令的执行流程。
根据指令的复杂程度,每条指令所需要的机器周期数。
对于微程序控制的计算机,根据总线结构,需考虑哪些微操作可以安排在同一个微指令中,哪些微操作不能安排在同一条微指令中。
(5)确定微程序地址
根据后续微地址的形成方法,确定每条微程序地址及分支转移地址。
(6)微程序的编写
根据微指令格式,将微程序流程中的所有微指令代码化,转化成相应的二进制代码,写入到控制存储器中的相应单元中。
(7)调试
在模型机上,用单步微指令方式执行机器指令的微程序流程图,当全部微程序流程图检查完后,若运行结果正确,则在内存中装入一段机器指令,进行其他的运行方式等功能调试及执行指令的正确性验证。
2数据格式和指令系统
2.1数据格式
模型机规定采用定点补码表示数据,字长是8位的,其中最高位为符合位,其它都是数值位。
数据格式如表2-1所示
7
6
5
4
3
2
1
0
符号位
数值位
表2-1数据格式
2.2指令格式
模型机设计四大类指令,即数据处理、数据存储、数据传送、程序控制,具体有数据传送指令、算术运算类指令、逻辑运算指令、程序控制类指令、输入输出类指令、字符串类指令、系统控制指令。
指令格式,是指令字用二进制代码表示的结构形式,通常由操作码字段和地址码字段组成。
操作码字段表征指令的操作特性与功能,而地址码字段通常指定参与操作的操作数的地址。
因此,一条指令的结构可用如下形式来表示:
操作码字段OP
地址码字段A
表2-2指令格式
微指令是一组实现一定操作功能的微命令的组合。
图2-1表示一个具体的微指令结构。
图2-1微指令结构
上图中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上的哪个寄存器,见表2-3
WEN:
将数据总线DBUS的值打入工作寄存器W中
AEN:
将数据总线DBUS的值打入累加器A中
S2,S1,S0三位组合决定ALU做何种运算,见表2-4
X2X1X0
输出寄存器
000
IN_OE外部输入门
001
IA_OE中断向量
010
ST_OE堆栈寄存器
011
PC_OEPC寄存器
100
D_OE直通门
101
R_OE右移门
110
L_OE左移门
111
没有输出
表2-3数据输出选择器原理图
S2S1S0
功能
000
A+W加
001
A-W减
010
A|W或
011
A&W与
100
A+W+C带进位加
101
A-W-C带进位减
110
~AA取反
111
A输出A
表2-4运算器的选择
2.3 指令系统
模型机的指令集分几大类:
算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入/输出指令。
2.3.1数据传输指令
主要包括取数指令、存数指令、传送指令、成组传送指令、字节交换指令、清寄存器指令等等。
这类指令主要用来实现主存和寄存器之间,或寄存器和寄存器之间的数据传送。
2.3.2算术运算指令
该指令包括二进制定点加、减、乘、除指令,浮点加、减乘、除指令,求反、求补指令,算术移位指令,算术比较指令,十进制加、减运算指令等。
这类指令主要用于定点或浮点的算术去处。
2.3.3逻辑运算指令
这类指令包括逻辑加、逻辑乘、按们加,逻辑移位等指令,主要用于无符号数的们操作、代码的转换、判断及运算。
2.3.4程序控制指令
又叫转移指令。
机器执行到某条指令时,出现了几种不同的结果,这时机器必须执行一条转移指令,根据不同结果进入转移,从而改变程序原来执行的顺序。
在注册软件的时候经常遇到。
2.3.5输入输出指令
主要是用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备和CPU之间,或外围设备与外围设备之间的信息传送。
2.3.6字符串处理指令
字符串处理指令是一种非数值处理指令,一般包括字符串传送、字符串转换、字符串比较、字符串查询等等。
2.3.7特权指令
特权指令是指具有特殊权限的指令。
这种指令如果使用不当就会破坏系统,所以一般不直接提供给用户用。
3模型机的数据通路
模型机的数据通路如图3-1所示:
图3-1模型机的数据通路
图3-2示出了模型机的运算器的数据通路:
图3-2模型机的运算器的数据通路
其中ALU为算术逻辑单元,R1、R2、R3为三个寄存器。
4详细设计
根据图2-1微指令格式,我们可以了解到许多的微指令在执行的时候,只需要把它所需要用到的位置有效(即为0)就可以了。
我们知道,每个程序开始执行的第一条微指令必须是取指操作。
而取指操作要做的工作是从程序存储器EM中读出下条将要执行的指令,并将指令的机器码存入指令寄存器IR和微程序计数器uPC中,读出下条将要执行的指令。
要从EM中读数,EMRD必需有效;读EM的地址要从PC输出,所以PCOE要有效,它有效的同时还会使PC加1;IREN是将EM读出的指令码存入uPC和IR。
此微指令的状态为“T0”,微地址“00”,微程序“CBFFFFH”,
这是个取指操作。
不管是要做什么指令最后必需是取指令,所以这个微指令是在每个指令的后面都有的。
下面举例说明一个指令的设计方法:
LADDA,#*
取名规则:
为了表现出是自己设计的,把最前面都加了个L(李),但为了方便记忆,后面保持和默认的指令名字一致,便于区分出自己的指令,同时也有助于程序的阅读。
指令作用:
累加器A加立即数,完成加法操作。
设计方法:
立即数的加法指令分为两步:
1、从EM中读出立即数,送到DBUS,并存入工作寄存器W中,从EM中读数,EMRD应该有效,读EM的地址由PC输出,PCOE要有效,读出的数据要送到DBUS,EMEN应该有效,数据存入W中,WEN应该有效,根据上述描述,“LADDA,#*”指令的T1状态微指令的值为“C7FFEFH”。
2、执行加法操作,并将结果存入A中。
执行的是加法操作,根据表2-4可知,S2S1S0的值应该是000(二进制表示的),结果无需移位直接输出到DBUS,根据表2-3可短,X2X1X0的值应该为100(二进制表示的),从DBUS将数据再存入A中,AEN应该有效。
与此同时,ABUS和IBUS空闲,取指操作可以并行执行,也就是以PC为地址,从EM中读出下条将要执行指令的机器码,并打入IR和uPC中,由上述可知:
EMRD、PCOE、IREN要有效,而T0状态时将EMRD、PCOE、IREN、X2X1X0、AEN、S2S1S0都应该置成有效和相应的工作方式,此微指令的值为“CBFF90H”
注:
因为取指令可以并行执行,所以这里没有再给出取指操作。
而是将它并到第二个操作里面去了。
根据上述方法,再设计一个减立即数的指令的话就比较的简单了,因为只需要将上面的加、变成减即S2S1S0不在为000而是001(由表2-4可知)。
其它的指令和这个指令的设计方法都是一样的。
下面是我所设计的自己的一套指令系统,如表4-1所示:
助记符
状态
微地址
微程序
数据输出
数据打入
地址输
出
运算
器
uPC
PC
_FETCH_
T0
00
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
01
FFFFFF
A输出
1
02
FFFFFF
A输出
1
03
FFFFFF
A输出
1
LADD,#*
T2
04
C7FFEF
存储器值EM
寄存器W
A输出
1
1
T1
05
FFFE90
ALU直通
寄存器A,
标志位C,Z
PC输出
加运
算
1
T0
06
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
07
FFFFFF
A输出
1
LSUBA,#*
T2
08
C7FFEF
存储器值EM
寄存器W
PC输出
A输出
1
1
T1
09
FFFE91
ALU直通
寄存器A标志
位C,Z
减运
算
1
T0
0A
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
0B
FFFFFF
A输出
1
LIN
T1
0C
FFFF17
用户IN
寄存器A
A输出
1
T0
0D
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
0E
FFFFFF
A输出
1
0F
FFFFFF
A输出
1
LOUT
T1
10
FFDF9F
ALU直通
用户OUT
A输出
1
T0
11
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
12
FFFFFF
A输出
1
13
FFFFFF
A输出
1
LMOVR?
A
T1
14
FFFB9F
ALU直通
寄存器R?
A输出
1
T0
15
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
16
FFFFFF
A输出
1
17
FFFFFF
A输出
1
LMOV*,A
T2
18
C77FFF
存储器值EM
地址寄存器MAR
PC输出
A输出
1
1
T1
19
B7BF9F
ALU直通
存储器EM
MAR输
出
A输出
1
T0
1A
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
1B
FFFFFF
A输出
1
LJMP*
T1
1C
C6FFFF
存储器值EM
寄存器PC
PC输出
A输出
1
写
入
T0
1D
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
1E
FFFFFF
A输出
1
1F
FFFFFF
A输出
1
LMOVR?
#*
T1
20
C7FBFF
存储器值EM
寄存器R?
PC输出
A输出
1
1
T0
21
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
22
FFFFFF
A输出
1
23
FFFFFF
A输出
1
LJZ*
T1
24
C6FFFF
存储器值EM
寄存器PC
PC输出
A输出
1
写
入
T0
25
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
26
FFFFFF
A输出
1
27
FFFFFF
A输出
1
LJC
T1
28
C6FFFF
存储器值EM
寄存器PC
PC输出
A输出
1
写
入
T0
29
CBFFFF
指令寄存器IR
PC输出
A输出
写入
1
2A
FFFFFF
A输出
1
2B
FFFFFF
A输出
1
表4-1新建的指令系统
上表是我所建立的指令系统,指令也不是很多。
本来想设计LJNZ的指令,意思是如果不想等就跳转,可是经过调试没能做出来。
5调试分析
设计完了一个指令系统之后,不能说设计好了就行了,还要对它进行测试。
我也做了多次自我的测试,现在举个例子:
START:
LMOVA,#01
LOOP:
LSUBA,#01
LJCLOOP
LJZLOOP
LJMP START
其用我所建立的指令系统将程序汇编成机器码,反汇编指令如表5-1所示:
程序地址
机器码
反汇编指令
指令说明
00
7C01
LMOVA,#01
立即数01h存入累加器A
02
3C01
LSUBA,#01
累加器A减1
04
A002
LJC02
若有进位跳到程序02地址
06
A402
LJZ02
若A=0跳转到程序02地址
08
AC00
LJMP00
无条件跳转到程序开始
表5-1程序反汇编指令
上述程序跟踪结果,如图5-1所示:
06LJZ02
02LSUBA,#01
04LJC02
04LJC02
02LSUBA,#01
00LMOVA,#01
02LSUBA,#01
06LJZ02
04LJC02
00LMOVA,#01
08LJMP00
图5-1程序跟踪结果
根据调试的结果得知,所建立的指令系统可以使用。
6设计体会
通过近一个星期的课程设计,结果设计出来了这么一个看似很一般的指令系统。
但是我感觉从中还是学习到了不少东西。
把以前从书本上学习到的东西完全应用到实践当中。
一开始在书上看到的一些什么指令系统、微指令等等东西的时候不知所云,因为它们都是计算机能够识别的,对我来说就很难认识了;而且它们听上去又很抽象,感觉跟人的思维完全不同,又不能从形象的角度来见识见识它们,所以很难理解。
但是在这次课程设计后我对它们就有了一个形象化的认识啦。
实验仪器完全有助于我去理解这些指令到底是如何实现特定的功能的。
而且,从所给的软件中很容易编写出自己的指令系统,只是一个指令的详细设计还是比较难的,因为有24位要按照所完成的功能编写0或1,这是此次课程设计的关键,但是如果掌握了各个位的作用,同时又很清楚自己设计的指令要完成的功能,那么设置0和1就不会那么麻烦啦。
最初,自己一个人看看书,搞搞软件,用用实验仪器就可以轻松搞定。
可是,我错了,因为看了两天都没什么头绪,原因很简单,因为不知道这24如何去编写,后来经过询问老师、同学,都很热情的给予了我帮助,从他们身上我也学习到了很多很多有用的东西。
而且当自己完成任务之后,还主动帮助了其它有困难的同学。
本来可以说是一件很枯燥无味的课程设计,结果却成了大家一起进步的阶梯。
所以我觉得,一次程序设计最主要的目的不是让我们真正把正确的东西做出来在老师、同学们面前炫耀的;而是在这个过程中我们学习到的做为一个团队,做为一个班级的一员,我们不能只自救追求个人的荣誉,更重要的是要和大家、各自己的团队学会合作。
这些在我们走进自己的工作岗位上时,是我们每个人都应该也是必须学会的。
当然这此实验也培养了我们实践为主的良好的科学研究精神。
加强了每个人对计算机的进一步认识。
增强了我们的实践能力。
为今后的工作打下了良好的基础。
参考文献
[1]白中英.计算机组成原理(第四版).科学出版社.2008
[2]DJ-CPTH超强型计算机组成原理与系统结构实验指导书.启东市东疆计算机有限公司.2008