计算机组成原理课程设计 复杂模型机.docx
《计算机组成原理课程设计 复杂模型机.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计 复杂模型机.docx(15页珍藏版)》请在冰豆网上搜索。
计算机组成原理课程设计复杂模型机
计算机与信息学院
计算机组成原理
课程设计报告
专业班级
学生姓名及学号
5
合作者
实验指导教师
实验地点
逸夫楼407实验室
2011~2012学年第1学期
一、课程设计目的:
本课程设计是《计算机组成原理》课程之后开设的实践环节课程。
通过本课程设计,使学生进一步加深对计算机原理系列课程相关内容的理解,掌握CPU设计的基本方法和计算机系统的组成原理,进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力;锻炼计算机硬件的设计能力、调试能力;培养严谨的科学实验作风、良好的工程素质及团队协作精神,为今后的工作打下基础。
基于计算机组成原理教学实验系统设计并实现一个具有16条机器指令、采用微程序控制器的8位计算机。
二、课程设计要求:
根据设计课题要求,给出模型机的设计方案(包括指令系统和硬件结构)。
画出所设计计算机的硬件连接图,针对所设计的指令系统编写出相应的微程序。
对所设计的计算机进行安装与调试。
编写测试程序,对系统进行验证。
编写课程设计报告。
(1)BZC—>NBZC
(2)INCRd—>INCRs,Rd(3)RRCRd—>RRRs,Rd(4)RLCRd—>RLCRs,Rd
指令格式和指令系统
数据格式
模型机规定采用定点补码表示数据,且字长为8位,其格式如下:
7
6543210
符号
尾 数
其中第7位为符号位,数值表示范围是:
-1≤X<1。
指令格式
模型机设计四大类指令共16条,其中包括算术逻辑指令、I/O指令、访问及转移指令和停机指令。
⑴算术逻辑指令
设计9条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:
7654
32
10
OP-CODE
Rs
Rd
其中,OP-CODE为操作码,Rs为源寄存器,Rd为目的寄存器,并规定:
Rs或Rd
选定的寄存器
00
01
10
11
R0
R1
R2
R3
9条算术逻辑指令的名称、功能和具体格式见表7-12-1。
⑵访问指令及转移指令
模型机设计2条访问指令,即存数(STA)、取数(LDA),2条转移指令,即无条件转移(JMP)、结果为零或有进
位转移指令(BZC),指令格式为:
7
6
54
32
10
0
0
M
2OP-CODE
Rd
D(低八)
D(高八)
其中“00M”为源码段,2OP-CODE为目的码段(LDA、STA指令使用)。
D为十六位地址段(低八在前,高八随后),M为源寻址模式,其定义如下:
寻址模式M
有效地址E
说明
00
01
10
11
E=D
E=(D)
E=(SP)+D
E=(PC)+D
直接寻址
间接寻址
SP变址寻址
相对寻址
⑶I/O指令
输入(IN)和输出(OUT)指令采用单字节指令,其格式如下:
7654
32
10
OP-CODE
00
Rd
⑷停机指令
指令格式如下:
7654
32
10
OP-CODE
00
00
HALT指令,用于实现停机操作。
指令系统
本模型机共有16条基本指令,其中算术逻辑指令7条,访问内存指令和程序控制指令4条,输入输出指令2条,其它指令1条。
下表列出了各条指令的格式、汇编符号、指令功能。
助记符
指令格式
功 能
LDAM,D,Rd
0
0
M
00
Rd
E→Rd
STAM,D,Rd
0
0
M
01
Rd
Rd→E
JMPM,D
0
0
M
10
00
E→PC
BZCM,D
0
0
M
11
00
当CY=1或Z=1时,E→PC
MOVRd,Rs
0
1
0
0
Rs
Rd
Rs→Rd
ADCRd,Rs
0
1
0
1
Rs
Rd
Rs+Rd+CY→Rd
SBCRd,Rs
0
1
1
0
Rs
Rd
Rs-Rd-CY→Rd
ANDRd,Rs
0
1
1
1
Rs
Rd
Rs∧Rd→Rd
CLRRd
1
0
0
0
00
Rd
0→Rd
INCRd
1
0
0
1
00
Rd
Rd+1→Rd
CPLRd
1
0
1
0
00
Rd
Rd→Rd
RRCRd
1
0
1
1
00
Rd
CY→Rd
RLCRd
1
1
0
0
00
Rd
CY→Rd
INRd,I/O
1
1
0
1
00
Rd
I/O→Rd
OUTRd,I/O
1
1
1
0
00
Rd
Rd→I/O
HALT
1
1
1
1
00
00
停机
、复杂模型机数据通路图。
微程序控制器原理、设计方法及步骤。
1、微指令格式
按照系统建议的微指令格式,参照微指令流程图,将每条微指令代码化,译成二进制代码,并将二进制代码表转换成十六进制格式文件。
M23
M22
M21
M20
M19
M18
M17
M16
M15
M14
M13
M12
M11
M10
M9
M8
M7
M6
M5
M4
M3
M2
M1
M0
E/M
IP
MWR
R/M
目的编码
OP
M
CN
S2
S1
S0
源编码
XP
W
ALU
Iu
IE
IR
Icz
Ids
源编码
目的编码
M10
M9
M8
功能
M19
M18
M17
功能
X2
X1
X0
O2
O1
O0
1
1
1
禁止
1
1
1
禁止
1
1
0
ALU
1
1
0
MAR
1
0
1
SP
1
0
1
BX
1
0
0
IOR
1
0
0
AX
0
1
1
MRD
0
1
1
SP
0
1
0
XRD
0
1
0
IOW
0
0
1
RRD
0
0
1
XWR
0
0
0
PC
0
0
0
RWR
实验所用的机器指令程序:
地址
指令代码
助记符
功能
000
D0
INR0
iol→r0
001
D2
INR2
ioh→r2
002
58
ADCR0,R2
r0+r2→r0
003
41
MOVR1,R0
r0→r1
004
C0
RLCR0
rlcr0
005
0C0000
BZC000H
bzc000h
008
F0
HALT
停机
2、复杂模型机微程序流程图
复杂模型机微程序流程图
图3-4-1 复杂模型机微程序流程图
3、十六进制格式微程序文件。
NBZC:
CY=0与ZF=0:
CY=1或ZF=1:
INCRs,Rd
RRRs,Rd
RLCRs,Rd
五、设计思路:
(1)BZC—>NBZC即将原来CY=1与ZF=1转移条件,改为CY=0与ZF=0,当CY=0与ZF=0成立时,则转移到指定地址处,否则仍顺序执行下去。
(2)INCRd—>INCRs,Rd
将一个操作数改写为两个操作数,即源与目的操作数。
首先要把Rs—>A运算寄存器,然后ALU运算器+1—>Rd,最后通过修改相应的微指令,实现INC指令功能。
其中Rs保持不变
(3)RRCRd—>RRRs,Rd
将一个操作数改写为两个操作数,即源与目的操作数。
首先知道原来的右移指令,是带进位的循环右移,需要我们修改为将源寄存器不带进位、不循环右移,放到目的寄存器中。
我们先解决不带进位——CY清零,微指令为FFBF7F,这样右移后高位补零,相当于逻辑右移功能。
再解决源寄存器传给目的寄存器问题,Rs—>A运算寄存器,ALU运算寄存器算术右移——>Rd,其中Rs保持不变,实现了RR指令功能。
(4)RLCRd—>RLCRs,Rd
将一个操作数改写为两个操作数,即源与目的操作数。
Rs—A运算器寄存器,ALU运算寄存器算术左移—>Rd,其中Rs保持不变
、复杂模型机指令系统
;助记符操作数指令码长度
;-----------------------------------------------------
NBZC_D*0C3;CY=0且Z=0时直接转移
NBZC_I*1C3;CY=0且Z=1时间接转移
NBZC_X*2C3;CY=0且Z=0时变址转移
NBZC_R*3C3;CY=0且Z=0时相对转移
INCR0,R0901;寄存器R0加1给R0
INCR0,R1911;寄存器R0加1给R1
INCR0,R2921;寄存器R0加1给R2
INCR0,R3931;寄存器R0加1给R3
INCR1,R0941;寄存器R1加1给R0
INCR1,R1951;寄存器R1加1给R1
INCR1,R2961;寄存器R1加1给R2
INCR1,R3971;寄存器R1加1给R3
INCR2,R0981;寄存器R2加1给R0
INCR2,R1991;寄存器R2加1给R1
INCR2,R29A1;寄存器R2加1给R2
INCR2,R39B1;寄存器R2加1给R3
INCR3,R09C1;寄存器R3加1给R0
INCR3,R19D1;寄存器R3加1给R1
INCR3,R29E1;寄存器R3加1给R2
INCR3,R39F1;寄存器R3加1给R3
RRR0,R0B01;寄存器R0右移给R0
RRR0,R1B11;寄存器R0右移给R1
RRR0,R2B21;寄存器R0右移给R2
RRR0,R3B31;寄存器R0右移给R3
RRR1,R0B41;寄存器R1右移给R0
RRR1,R1B51;寄存器R1右移给R1
RRR1,R2B61;寄存器R1右移给R2
RRR1,R3B71;寄存器R1右移给R3
RRR2,R0B81;寄存器R2右移给R0
RRR2,R1B91;寄存器R2右移给R1
RRR2,R2BA1;寄存器R2右移给R2
RRR2,R3BB1;寄存器R2右移给R3
RRR3,R0BC1;寄存器R3右移给R0
RRR3,R1BD1;寄存器R3右移给R1
RRR3,R2BE1;寄存器R3右移给R2
RRR3,R3BF1;寄存器R3右移给R3
RLCR0,ROC01;寄存器R0左移给R0
RLCR0,R1C11;寄存器R0左移给R1
RLCR0,R2C21;寄存器R0左移给R2
RLCR0,R3C31;寄存器R0左移给R3
RLCR1,R0C41;寄存器R1左移给R0
RLCR1,R1C51;寄存器R1左移给R1
RLCR1,R2C61;寄存器R1左移给R2
RLCR1,R3C71;寄存器R1左移给R3
RLCR2,ROC81;寄存器R2左移给R0
RLCR2,R1C91;寄存器R2左移给R1
RLCR2,R2CA1;寄存器R2左移给R2
RLCR2,R3CB1;寄存器R2左移给R3
RLCR3,ROCC1;寄存器R3左移给R0
RLCR3,R1CD1;寄存器R3左移给R1
RLCR3,R2CE1;寄存器R3左移给R2
RLCR3,R3CF1;寄存器R3左移给R3
六、调试情况。
1、㈠键盘操作
⑴首先卸去实验连接,把系统工作方式设为“微控/在线”。
⑵机器程序与对应的微控制程序的写入:
在待令状态下,键入数字键“4”(复杂模型机代号),然后再键入【减址】命令键,实验装置自动装载由数字键定义的模型机机器程序及对应的微程序,装载完毕自动返待令态。
⑶运行程序
①单拍运行:
每按一次【单拍】按钮模型机运行一拍,系统提供可变时序,非“取指”微周期它的节拍按
次序循环,在取指微周期按
次序循环。
②微单步:
每按一次【单步】命令键运行一条微指令,对照微程序流程,观察微址是否和流程一致。
对照微指令表,观察执行结果是否和理论值一致。
③宏运行(指令单步或宏调用):
每按动一次【宏运】命令键,运行一条机器指令。
对照机器指令程序,观察PC地址是否和流程一致。
④程序运行与暂停:
按动【运行】命令键使模型机进入实时运行状态;在实时运行状态按左下方任一数字键即可暂停模型机程序的运行,以便实验者查看模型机现场。
㈡联机运行
若在联机状态下,首先应打开caizhao.asm(复杂模型机机器指令及对应微指令代码文件),然后点击工具栏“装载”按钮开始装载,如源程序无语法错误即可完成装载,进入调试状态。
可点击工具栏快捷按钮:
单拍:
单节拍运行微指令微单步:
单周期运行微指令
单步:
单步跟踪机器指令宏单步:
单步跨越机器指令
运行:
以全速方式运行模型机程序暂停:
暂停正在运行的模型机程序
2、调试过程中出现的问题及解决方法,测试程序及运行结果
(1)程序在运行时经常会跑到不是我设定的微地址的地方。
后来问老师和同学才知道:
一开始,由于我不清楚指令码的散转地址,所以没能把微指令填到正确的微地址处,导致了程序的跑飞现象。
所以我通过认真改写复杂模型机的指令系统,再去对照散转地址,修改微指令。
(2)在设计NBZC指令时,不知道怎样下手,生怕把程序改错了,后来仔细分析NBZC和BZC的区别,才想到我可以在原来的基础上,把后两条微指令调换一下,这样不就可以使它在当CY=0与ZF=0条件下,转到我想要到的地方。
(3)在程序调试时,由于粗心,在钩选微指令时,把ALU设为了0,导致我的结果怎么弄都不对。
后来在与同学的合作排查中找到了这么一个细节错误。
(4)在设计总线规则,遇到奇和偶,即高八位和低八位之间的传递问题。
我在设计微指令时,钩得不对,导致传送数据时寄存器之间的混乱。
(5)还有就是数据区数据的改写,为了配合我编写的程序,我得细心地把里面我用到的地址单元里的数据改写为我的测试数据。
七、测试程序:
;复杂模型机程序
org0
start:
inr0,iol;(将i/o单元的低八位送给r0)
lda_dr3,0000h;(直接寻址,内容传给r3)
lda_ir2,0003h;(间接寻址,内容给r2)
movr0,r2;(将r2的内容传给r3)
nbzc_r1;(相对转移,若CY=0与ZF=0,则相对转移一条指令)
adcr3,r2;
clrr2;
sbcr3,r2;
andr3,r2;
outioh,r3;
sta_x0060h,r2;(寄存器变址IX=SP,)
incr0,r1;(R0+1→R1,R0不变)
;jmp_d0000h;
RRR0,R1;(R0右移一位->R1,不带进位,不循环)
RLCR0,R1;(R0左移一位->R1,R0不变)
nbzc_dstart;(当CY=0与Z=0时,E→PC,即跳转到START)
halt;(停止)
end
运行结果:
首先我在I/O单元里输入0012,在0000h中存放的数为33,在0003h中存放的是01,在0101h中存放了44,sp为0600h。
在经过运行之后我可以得出以下的结果:
(1)r0=12
(2)r3=33
(3)r2=44
(4)r0=44
(5)因CY=0与ZF=0,跳过adcr3,r2指令
(6)r2=00
(7)r3-r2—>r3,r3=33
(8)r3=00
(9)I/O高八位为00
(10)因sp=0600h,把r2=0放到0660h中
(11)r0+1=45—>r1,r1=45,r0=44
(12)r0右移一位给r1,r1=22,r0=44
(13)r0左移一位给r1,r1=88,r0=44
(14)因CY=0与ZF=0,回到start。
经检验,输出结果与计算结果相符证明实验设计正确。
八、课程设计收获。