计组课设微指令地设计实验.docx

上传人:b****7 文档编号:9077793 上传时间:2023-02-03 格式:DOCX 页数:33 大小:660.29KB
下载 相关 举报
计组课设微指令地设计实验.docx_第1页
第1页 / 共33页
计组课设微指令地设计实验.docx_第2页
第2页 / 共33页
计组课设微指令地设计实验.docx_第3页
第3页 / 共33页
计组课设微指令地设计实验.docx_第4页
第4页 / 共33页
计组课设微指令地设计实验.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

计组课设微指令地设计实验.docx

《计组课设微指令地设计实验.docx》由会员分享,可在线阅读,更多相关《计组课设微指令地设计实验.docx(33页珍藏版)》请在冰豆网上搜索。

计组课设微指令地设计实验.docx

计组课设微指令地设计实验

计算机组成原理课程设计报告

班级:

计算机/物联网班姓名:

学号:

完成时间:

2016.1.14

一、课程设计目的

1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;

2.通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;

3.培养综合实践及独立分析、解决问题的能力。

二、课程设计的任务

针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。

三、课程设计使用的设备(环境)

1.硬件

●COP2000实验仪

●PC机

2.软件

●COP2000仿真软件

四、课程设计的具体内容(步骤)

1.详细了解并掌握COP2000模型机的微程序控制器原理,通过综合实验来实现

该模型机指令系统的特点:

从指令字长来看该模型机指令系统包含单字长和双字长两种格式的指令,字长为8位,对于需要访问内存的指令都是双字长的,指令系统中大多数指令是单字长;从指令操作码是定长和变长来看,这里认为,虽然ADDA,R?

和ADDA,@R?

都是执行加法操作,但他们是不同的指令,将指令格式中寻址寄存器的两位也认为是操作码的一部分,这两条指令的操作码不同。

因此,指令系统的指令格式是定长操作码的,操作码为6位。

1)双字长的指令格式如下:

举例:

助记符

机器码1

机器码2

ADDA,MM

000110xx

MM

ADDA,#II

000111xx

II

MOVA,MM

011110xx

MM

2)单字长的指令格式如下:

举例:

助记符

机器码1

机器码2

ADDA,R?

000100xx

ORA,R?

011000xx

MOVR?

A

100000xx

 

该模型机微指令系统的特点(包括其微指令格式的说明等):

该模型机微指令系统的微指令格式是水平型微指令,微指令的字长为24位,是机器字长的3倍,每条微指令仅包含微操作控制字段,无顺序控制字段。

操作控制字段的每一位对应一个微操作,采用字段直接译码的方式对系统进行控制。

微指令的具体格式如下:

IREN

PCOE

S0

S1

S2

AEN

WEN

X0

X1

X2

FEN

CN

RWR

RRD

STEN

OUTEN

MAROE

MAREN

ELP

EINT

EMEN

EMRD

EMWR

XRD

举例:

微指令CBFFFF:

取指令

1

1

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

 

表2微指令控制信号的功能

操作控制信号

控制信号的说明

XRD

外部设备读信号,当给出了外设的地址后,输出此信号,从指定外设读数据。

EMWR

程序存储器EM写信号。

EMRD

程序存储器EM读信号。

PCOE

将程序计数器PC的值送到地址总线ABUS上。

EMEN

将程序存储器EM与数据总线DBUS接通,由EMWR和EMRD决定是将DBUS数据写到EM中,还是从EM读出数据送到DBUS。

IREN

将程序存储器EM读出的数据打入指令寄存器IR和微指令计数器μPC。

EINT

中断返回时清除中断响应和中断请求标志,便于下次中断。

ELP

PC打入允许,与指令寄存器的IR3、IR2位结合,控制程序跳转。

MAREN

将数据总线DBUS上数据打入地址寄存器MAR。

MAROE

将地址寄存器MAR的值送到地址总线ABUS上。

OUTEN

将数据总线DBUS上数据送到输出端口寄存器OUT里。

STEN

将数据总线DBUS上数据存入堆栈寄存器ST中。

RRD

读寄存器组R0~R3,寄存器R?

的选择由指令的最低两位决定。

RWR

写寄存器组R0~R3,寄存器R?

的选择由指令的最低两位决定。

CN

决定运算器是否带进位移位,CN=1带进位,CN=0不带进位。

FEN

将标志位存入ALU内部的标志寄存器。

X2

X2、X1、X0三位组合来译码选择将数据送到DBUS上的寄存器。

X1

X0

WEN

将数据总线DBUS的值打入工作寄存器W中。

AEN

将数据总线DBUS的值打入累加器A中。

S2

S2、S1、S0三位组合决定ALU做何种运算。

S1

S0

COP2000中有7个寄存器可以向数据总线输出数据,但在某一特定时刻只能有一个寄存器输出数据.由X2,X1,X0决定那一个寄存器输出数据。

X2X1X0

输出寄存器

000

IN_OE外部输入门

001

IA_OE中断向量

010

ST_OE堆栈寄存器

011

PC_OEPC寄存器

100

D_OE直通门

101

R_OE右移门

110

L_OE左移门

111

没有输出

COP2000中的运算器由一片EPLD实现.有8种运算,通过S2,S1,S0来选择。

运算数据由寄存器A及寄存器W给出,运算结果输出到直通门D。

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.计算机中实现乘法和除法的原理

(1)无符号乘法

①算法流程图:

 

②硬件原理框图:

 

(2)无符号除法

①算法流程图:

②硬件原理框图:

3.对应于以上算法如何分配使用COP2000实验仪中的硬件

(初步分配,设计完成后再将准确的使用情况填写在此处)

1)乘法程序的硬件分配:

硬件名称

在乘法算法中的功能

R0

1用来存放被乘数2保存乘积结果

R1

用来存放乘数

R2

未使用

R3

用做计数器,来控制程序循环次数

A

1、存放中间结果2、用来存放操作数参加ALU的运算

W

用来存放操作数参加ALU的运算

PC

程序计数器

EM

内存(存放程序)

IR

指令寄存器

ST

堆栈寄存器,可以用来暂存寄存器A的值

MAR

地址寄存器

2)除法程序的硬件分配

硬件名称

在除法运算中的功能

R0

用来存放被除数

R1

用来存放除数

R2

用来存放商

R3

1用作计数器,控制循环的次数2保存余数

A

1、存放中间数据2、用来存放操作数参加ALU的运算

W

用来存放操作数参加ALU的运算

PC

程序计数器

EM

内存(存放程序)

IR

指令寄存器

ST

堆栈寄存器,可以用来暂存寄存器A的值

MAR

地址寄存器

4.在COP2000集成开发环境下设计全新的指令/微指令系统

设计结果如表所示(可按需要增删表项)

(1)新的指令集

(如果针对乘除法设计了两个不同指令集要分别列表)

助记符

机器码1

机器码2

指令说明

_FATCH_

000000XX

实验机占用,不可修改。

复位后,所有寄存器清0,首先执行_FATCH_指令取指

MOVR?

#II

000001XX

II

将立即数II送到寄存器R?

MOVR?

A

000010XX

将累加器A的值送到寄存器R?

MOVA,R?

000011xx

将寄存器R?

的值送入累加器A中

ANDA,#II

000100xx

II

将立即数与累加器A中的数相与

ANDR?

,#II

000101xx

II

将立即数与寄存器R?

中的数相与

SHRR?

000110xx

寄存器R?

带进位右移

SHLR?

000111xx

寄存器R?

带进位左移

JCMM

001000xx

MM

若进位标志置1,跳转到MM地址

JZMM

001001xx

MM

若零标志置1,跳转到MM地址

ADDR?

,#II

001010xx

II

将寄存器R?

中的数与立即数相加

ADDA,R?

001011xx

将累加器与寄存器R?

相加,结果存入累加器

SUBR?

,#II

001100xx

II

将寄存器R?

中的值与立即数相减

SUBA,R?

001101xx

将累加器与寄存器R?

的值相减,结果存入累加器

CMPA,R?

001110xx

累加器与寄存器R?

的值比较,结果影响进位、零标志

JMPMM

001111xx

MM

无条件跳转到MM处

PUSHA

010000xx

将累加器中的值暂存

POPA

010001xx

将暂存结果送回到累加器A中

SHRNR?

010010xx

寄存器R?

不带进位右移

SHLNR?

010011xx

寄存器R?

不带进位左移

TEST

010100xx

(2)新的微指令集

助记符

状态

微地址

微程序

数据输出

数据打入

地址输出

运算器

移位控制

uPC

PC

_FATCH_

T0

00

CBFFFFF

指令寄存器IR

PC输出

A输出

写入

+1

01

FFFFFF

A输出

+1

02

FFFFFF

A输出

+1

03

FFFFFF

A输出

+1

MOVR?

#II

T1

04

C7FBFF

存储器EM

寄存器R?

PC输出

A输出

+1

+1

T0

05

CBFFFF

指令寄存器

PC输出

A输出

写入

+1

06

FFFFFF

A输出

+1

07

FFFFFF

A输出

+1

MOVR?

,A

T1

08

FFFB9F

ALU直通

寄存器R?

A输出

+1

T0

09

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

0A

A输出

+1

0B

A输出

+1

MOVA,R?

T1

OC

FFF7F7

寄存器值R?

寄存器A

A输出

T0

OD

CBFFFFF

指令寄存器IR

PC输出

A输出

写入

+1

0E

FFFFFF

A输出

+1

0F

FFFFFF

A输出

+1

ANDA,#II

T2

10

C&7FFEF

存储器值EM

寄存器W

PC输出

A输出

+1

+1

T1

11

FFFE93

ALU直通

寄存器A标志位C、Z

与运算

+1

T0

12

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

13

FFFFFF

A输出

+1

ANDR?

#II

T3

14

C7FFEF

存储器EM

寄存器W

PC输出

A输出

+1

+1

T2

15

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T1

16

FFFA9B

ALU直通

寄存器R?

标志位C、Z

与运算

+1

T0

17

CBFFFF

指令寄存器IR

PC输出

A输出

+1

+1

SHRR?

T3

18

FFEF9F

ALU直通

堆栈寄存器ST

A输出

+1

T2

19

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T1

1A

FFFABF

ALU右移

寄存器R?

标志位C、Z

A输出

带进位右移

+1

T0

1B

CBFF57

堆栈寄存器ST

寄存器A指令寄存器IR

PC输出

A输出

写入

+1

SHLR?

T3

1C

FFEF9F

AlU直通

推展寄存器ST

A输出

+1

T2

1D

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T1

1E

FFFADF

ALU左移

寄存器R?

标志位C、Z

A输出

带进位左移

+1

T0

1F

CBFF57

堆栈寄存器ST

寄存器A指令寄存器IR

PC输出

A输出

写入

+1

JCMM

T1

20

C6FFFF

存储器值EM

寄存器PC

PC输出

A输出

+1

+1

T0

21

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

22

FFFFFF

A输出

+1

23

FFFFFF

A输出

+1

JZMM

T1

24

C6FFFF

存储器值EM

寄存器PC

PC输出

A输出

+1

+1

T0

25

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

26

FFFFFF

A输出

+1

27

FFFFFF

A输出

+1

ADDR?

#II

T3

28

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T2

29

C7FFEF

存储器值EM

寄存器W

PC输出

A输出

+1

+1

T1

2A

FFFA98

ALU直通

寄存器R?

标志位C、Z

加运算

+1

T0

2B

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

ADDA,R?

T2

2C

FFF7EF

寄存器值R?

寄存器W

A输出

+1

T1

2D

FFFE90

ALU直通

寄存器R?

标志位C、Z

加运算

+1

T0

2E

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

2F

FFFFFF

A输出

+1

SUBR?

#II

T3

30

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T2

31

C7FFEF

存储器值EM

寄存器W

PC输出

A输出

+1

+1

T1

32

FFFA99

ALU直通

寄存器R?

标志位C、Z

减运算

+1

T0

33

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

SUBA,R?

T2

34

FFF7EF

寄存器值R?

寄存器W

A输出

+1

T1

35

FFFE91

ALU直通

寄存器A标志位C、Z

减运算

+1

T0

36

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

37

FFFFFF

A输出

+1

CMPA,R?

T3

38

FFF7EF

寄存器值R?

寄存器W

A输出

+1

T2

39

FFEF9F

ALU直通

堆栈寄存器ST

A输出

+1

T1

3A

FFFE91

ALU直通

寄存器A标志位C、Z

减运算

+1

T0

3B

CBFF57

堆栈寄存器

寄存器A指令寄存器IR

PC输出

A输出

+1

+1

JMPMM

T1

3C

C6FFFF

存储器EM

寄存器PC

PC输出

A输出

+1

+1

T0

3D

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

3E

FFFFFF

A输出

+1

3F

FFFFFF

A输出

+1

PUSHA

T1

40

FFEF9F

ALU直通

堆栈寄存器ST

A输出

+1

T0

41

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

42

FFFFFF

A输出

+1

43

FFFFFF

A输出

+1

POPA

T1

44

FFFF57

堆栈寄存器ST

寄存器A

A输出

+1

T0

45

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

46

FFFFF

A输出

+1

47

FFFFF

A输出

+1

SHRNR?

T3

48

FFEF9F

ALU直通

堆栈寄存器ST

A输出

+1

T2

49

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T1

4A

FFF9BF

ALU右移

寄存器R?

A输出

右移

+1

T0

4B

CBFF57

堆栈寄存器ST

寄存器A指令寄存器IR

PC输出

A输出

写入

+1

SHLNR?

T3

4C

FFEF9F

ALU直通

堆栈寄存器ST

A输出

+1

T2

4D

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T1

4E

FFF9DF

ALU左移

寄存器R?

A输出

左移

+1

T0

4F

CBFF57

堆栈寄存器

寄存器A指令寄存器IR

PC输出

A输出

写入

+1

TESTR?

T3

50

C7FFEF

存储器值EM

寄存器W

PC输出

A输出

+1

T2

51

FFF7F7

寄存器值R?

寄存器A

A输出

+1

T1

52

FFFE93

ALU直通

寄存器A标志位C

与运算

+1

T0

53

CBFFFF

指令寄存器IR

PC输出

A输出

写入

+1

5.用设计完成的新指令集编写实现无符号二进制乘法、除法功能的汇编语言程序

(1)乘法

4位乘法的算法流程图与汇编语言程序清单:

1)流程图如下:

 

 

2)汇编语言程序清单如下:

MOVR3#0FH将A赋值,用于比较

MOVA,R3

MOVR0,#0FH---被乘数在R0中

TESTR0,#0FH判断被乘数是否为0,是则结束

JZT3判断被乘数是否溢出,是则结束

CMPA,R0

JCT3

MOVR1,#0FH---乘数在R1中

TESTR1,#0FH判断乘数是否为0,是则结束

JZT3

CMPA,R1判断乘数是否溢出,是则结束

MOVR3,#04H

ANDA,#00H

LOOP1:

SHRR1

JCT1

JMPLOOP2

T1:

ADDA,R0

LOOP2:

SHLNR0

PUSHA

SUBR3,#01H

POPA

JZT2

JMPLOOP1

T2:

MOVR0,A--乘积结果在R0中

JMPEN

T3:

MOVR0,#00H

EN:

END

JMPEND

 

(2)除法

4位除法的算法流程图与汇编语言程序清单:

1)算法流程图如下

1)算法流程图如下

2)汇编语言程序清单如下:

MOVR0,#87H---被除数在R0中

MOVR1,#0DH---除数在R1中

MOVR3,#04H

ANDR2,#00H---商在R2中

TESTR1,#0FH

JZFL

SHLNR1

SHLNR1

SHLNR1

SHLNR1

MOVA,R0

CMPA,R1

JCT1

JMPFL

T1:

SHRNR1

SHLNR2

CMPA,R1

JCT2

SUBA,R1

PUSHA

ADDR2,#01H

POPA

T2:

PUSHA

SUBR3,#01H

POPA

JZQT

JMPT1

QT:

MOVR3,A---余数保存在R3中

JMPEN

FL:

MOVR2,#0FFH报错处理R2为0FFH

EN:

END

JMPEN

 

6.上述程序的运行情况(跟踪结果)

按下表填写描述以上各程序运行情况的内容。

按每个程序一张表进行。

程序运行的过程

1)乘法程序运行的过程

2)除法程序运行的过程

7.设计结果说明

调试运行程序时是否出现问题,是否有重新调整指令/微指令系统设计的情况出现?

请在此做具体说明。

答:

出现了问题。

之前没考虑到除数为0的异常操作,故操作中少了TESTR?

,#II;之后补齐操作

TESTR?

,#II微程序:

C7FFEF——FFF7F7——FFFE93——CBFFFF

在设计MOVR?

,#II指令时,EMRD没置低位,使程序在仿真上能运行,但在机器上运行时会置数FFH,之后EMRD置0后,在机器上正常运行。

五、本次课程设计的总结体会(不少于200字)

主要总结学到的具体知识、方法及设计中的切身体会;包括列出在设计的各个阶段出现的问题及解决方法。

1)加深了对指令系统、微指令系统的理解,自己亲自设计乘法和除法的指令系统,首先要了解指令的格式,包括单字长和双字长的指令,以及在指令设计时操作码和地址码的设计,运用何种寻址方式等等;通过设计微指令系统,了解微指令的格式,微指令控制部分的设计,以及如何设计与指令对应的微指令程序。

2)综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念通过微程序控制器的设计,进一步了解了控制器如何控

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

当前位置:首页 > 外语学习 > 英语学习

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

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