计算机组成原理课程设计 复杂模型机.docx

上传人:b****8 文档编号:28280250 上传时间:2023-07-10 格式:DOCX 页数:15 大小:81.52KB
下载 相关 举报
计算机组成原理课程设计 复杂模型机.docx_第1页
第1页 / 共15页
计算机组成原理课程设计 复杂模型机.docx_第2页
第2页 / 共15页
计算机组成原理课程设计 复杂模型机.docx_第3页
第3页 / 共15页
计算机组成原理课程设计 复杂模型机.docx_第4页
第4页 / 共15页
计算机组成原理课程设计 复杂模型机.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

计算机组成原理课程设计 复杂模型机.docx

《计算机组成原理课程设计 复杂模型机.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计 复杂模型机.docx(15页珍藏版)》请在冰豆网上搜索。

计算机组成原理课程设计 复杂模型机.docx

计算机组成原理课程设计复杂模型机

计算机与信息学院

计算机组成原理

课程设计报告

 

专业班级

学生姓名及学号

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。

经检验,输出结果与计算结果相符证明实验设计正确。

八、课程设计收获。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1