广州大学计算机组成原理课程设计

news/2024/12/25 9:06:39/

一.课设性质,目的,任务

《计算机组成与系统结构课程设计》是计算机学院各专业集中实践性环节之一,是学习完《计算机组成与系统结构》课程后进行的一次全面的综合练习。其目的是综合运用所学计算机原理知识,设计并实现一台模型计算机,以便巩固所学的知识,提高分析问题和解决问题的能力。

二.课设基本理论

1、掌握算术、逻辑、移位运算实验,熟悉ALU运算控制位的运用。

2、掌握存储器组织、读写方式及与总路线组成的数据通路,掌握地址总线、数据总线的工作原理。

3、掌握指令结构和指令取指、执行工作过程。

4、掌握CPU的微程序控制原理。

三. 题目

综合运用所学计算机原理知识,设计并实现具有以下16条指令的指令集结构的模型计算机:

编号

助记符

机器指令码

说明

0

SUB  Rd,Rs

0000 RdRs

110 0000 0000

Rd-Rs→Rd

1

ADD  Rd,Rs

0001 RdRs

110 0010 0000

Rd+Rs→Rd

2

AND  Rd,Rs

0010 RdRs

110 0100 0000

Rd&Rs→Rd (Rd和Rs相与)

3

DEC Rd

0011 Rd00

110 0110 0000

将Rd值减1

4

CLR Rd

0100 Rd00

110 1000 0000

将Rd清零

5

RL  Rd

0101 Rd00 

110 1010 0000

Rd循环左移一位

6

RRC  Rd

0110 Rd00

110 1100 0000

Rd带进位右移一位

7

MOV Rd,Rs

0111 RdRs

110 1110 0000

Rs→Rd

8

LDI  Rd,*

1000 Rd00   XXXXXXXX

111 0000 0000

将指令中的立即数(第二字节)送入Rd

9

OUT  IOH,Rs

1001 00Rs Rs送到高字节显示

111 0010 0000

Rs→i/o(数据开关)高字节

10

LDA  Rd,M

1010 Rd00   XXXXXXXX   XXXXXXXX

三个字节 将16位地址取出来 送到Rd寄存器

111 0100 0000

[M] →Rd

11

STA  M,Rs

1011 00Rs   XXXXXXXX   XXXXXXXX

将Rs内容存到这16位地址中

111 0110 0000

Rs→[M]

12

JMP M

1100 0000  XXXXXXXX   XXXXXXXX

跳转到某个地址

111 1000 0000

[M]→PC,即跳转到M所指单元

13

JZ M

1101 0000  XXXXXXXX   XXXXXXXX

111 1010 0000

当Z=1时,跳转到M所指单元

14

JC M

1110 0000  XXXXXXXX   XXXXXXXX

111 1100 0000

当CY=1时,跳转到M所指单元

15

HALT

1111 0000

111 1110 0000

6A0

停机

设计提示:

1、上表中,机器指令码的高4位为指令操作码,M为16位存储器地址, Rs为源寄存器,Rd为目的寄存器,占2位,并规定:

RsRd

选定的寄存器

00

01

10

11

R0

R1

R2

R3

2、在微程序中,微地址001为取指,微指令为BF FB F8。

3、各指令指行阶段微程序入口地址的确定方式:

微地址位号

10   9

8   7  6   5

4  3  2  1  0

内容

1    1

IR7~IR4

0  0  0  0  0

例如,第5条指令”RL  Rd”  的指令码为0101 Rd00  则指令码的高4位IR7~IR4为0101,由上表知,微程序入口微地址为: 11 0101 00000 ,即6A0H。

4、主要步骤:

(1)按照第3点的方法,给出所有16条指令的微程序入口微地址;

(2)通过分析每条指令的功能明确其的微程序流程,可参考实验指导书图3-4-1、图3-2-2、图3-3-1;

(3)写出每条微指令的微命令,即24个微控制位信号,可参考实验指导书表3.4.1、表3.2.1、表3.3.1和“微控制器编程手册”第2章。

(4)建议采用逐条指令设计实现的方式,一条实现并用汇编语句测试通过后(指令功能、下址顺序均正确)再进行下一条的设计。

5、检查

模型计算机设计完成后,用所给的测试程序check_1.asm(测12条非转移指令)和check_2.asm(测3条转移指令)检查正确性。检查方法:在测试程序中#load s本人的.IS微指令程序,实验箱电源关闭重启并连接,装载后选择“运行”或“单步”执行。

check_1.asm运行的正确结果为:寄存器R0R1R2R3分别显示00112233,IOH显示33。

check_2.asm运行的正确结果为:寄存器R0R1R2R3分别显示00112233,如果显示EE则执行有错误。

四.微程序流程图(树形图)

五.机器指令程序的说明(微指令地址,指令码,助记符)

  1. 实验源代码

过程分析

Check20_1.ASM 实验源代码如下:

Check20_1.ASM 实验源代码如下:

2、微指令地址

;分段/RISC模型机指令系统;助记符 操作数              指令码 长度;-----------------------------------------------------;Rd-Rs→RdSUB     R0,R0               00     1SUB     R0,R1               01     1SUB     R0,R2               02     1SUB     R0,R3               03     1SUB     R1,R0               04     1SUB     R1,R1               05     1SUB     R1,R2               06     1SUB     R1,R3               07     1SUB     R2,R0               08     1SUB     R2,R1               09     1SUB     R2,R2               0A     1SUB     R2,R3               0B     1SUB     R3,R0               0C     1SUB     R3,R1               0D     1SUB     R3,R2               0E     1SUB     R3,R3               0F     1;Rd+Rs→RdADD     R0,R0               10     1ADD     R0,R1               11     1ADD     R0,R2               12     1ADD     R0,R3               13     1ADD     R1,R0               14     1ADD     R1,R1               15     1ADD     R1,R2               16     1ADD     R1,R3               17     1ADD     R2,R0               18     1ADD     R2,R1               19     1ADD     R2,R2               1A     1ADD     R2,R3               1B     1ADD     R3,R0               1C     1ADD     R3,R1               1D     1ADD     R3,R2               1E     1ADD     R3,R3               1F     1;Rd&Rs→Rd (Rd和Rs相与)AND     R0,R0               20     1AND     R0,R1               21     1AND     R0,R2               22     1AND     R0,R3               23     1AND     R1,R0               24     1AND     R1,R1               25     1AND     R1,R2               26     1AND     R1,R3               27     1AND     R2,R0               28     1AND     R2,R1               29     1AND     R2,R2               2A     1AND     R2,R3               2B     1AND     R3,R0               2C     1AND     R3,R1               2D     1AND     R3,R2               2E     1AND     R3,R3               2F     1;将Rd值减1DEC     R0                  30     1DEC     R1                  34     1DEC     R2                  38     1DEC     R3                  3C     1;将Rd清零CLR     R0                  40     1CLR     R1                  44     1CLR     R2                  48     1CLR     R3                  4C     1;Rd循环左移一位RL      R0                  50     1RL      R1                  54     1RL      R2                  58     1RL      R3                  5C     1;Rd带进位右移一位RRC     R0                  60     1RRC     R1                  64     1RRC     R2                  68     1RRC     R3                  6C     1;Rs→RdMOV     R0,R0               70     1MOV     R0,R1               71     1MOV     R0,R2               72     1MOV     R0,R3               73     1MOV     R1,R0               74     1MOV     R1,R1               75     1MOV     R1,R2               76     1MOV     R1,R3               77     1MOV     R2,R0               78     1MOV     R2,R1               79     1MOV     R2,R2               7A     1MOV     R2,R3               7B     1MOV     R3,R0               7C     1MOV     R3,R1               7D     1MOV     R3,R2               7E     1MOV     R3,R3               7F     1;将指令中的立即数(第二字节)送入RdLDI     R0,*                80     2LDI     R1,*                84     2LDI     R2,*                88     2LDI     R3,*                8C     2;Rs→I/O(数据开关)高字节OUT     IOH,R0              90     1OUT     IOH,R1              91     1OUT     IOH,R2              92     1OUT     IOH,R3              93     1;[M] →RdLDA     R0,*                A0     3LDA     R1,*                A4     3LDA     R2,*                A8     3LDA     R3,*                AC     3;Rs→[M]STA     *,R0                B0     3STA     *,R1                B1     3STA     *,R2                B2     3STA     *,R3                B3     3;[M]→PC,即跳转到M所指单元JMP     *                   C0     3;当Z=1时,跳转到M所指单元JZ      *                   D0     3;当CY=1时,跳转到M所指单元JC      *                   E0     3;停机HALT    ""                  F0     1

六.微型机微指令表

微址00002)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

o2

o1

O0

OP

M

CN

S2

S2

S0

X2

X1

X0

XP

W

ALU

Iu

IE

IR

Icz

Ids

0600

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

1

0

0

0

88

+1

Rd->AX

0601

0

0

0

0

0

1

1

1

05

0

0

0

0

0

1

1

0

06

0

0

0

0

0

0

0

0

00

+1

Rs->BX

0602

0

0

0

0

1

1

1

1

0F

1

0

0

1

0

0

0

1

91

1

0

0

1

0

0

1

0

92

0001

AX-BX->Rd

0620

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

1

0

0

0

88

+1

Rd->AX

0621

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

1

0

06

0

0

0

0

0

0

0

0

00

+1

Rs->BX

0622

0

0

0

0

1

1

1

1

0F

1

0

0

1

1

0

0

1

99

1

0

0

1

0

0

1

0

92

0001

AX+BX->Rd

0640

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

Rd->AX

0641

0

0

0

0

0

1

0

1

05

0

0

0

0

0

1

1

0

06

0

0

0

0

0

0

0

0

00

+1

Rs->BX

0642

0

0

0

0

1

1

1

1

0F

0

0

0

1

0

0

0

1

11

1

0

0

1

0

0

1

0

92

0001

AX&BX->Rd

0660

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

Rd->AX

0661

0

0

0

0

1

1

1

1

0F

0

0

1

0

1

0

0

1

29

1

0

0

1

0

0

1

0

92

0001

AX-1->Rd

0680

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

1

0

0

0

0

0

A0

+1

Rd->AX

0681

0

0

0

0

1

1

1

1

0F

0

0

1

0

0

0

0

1

21

1

0

1

1

0

0

1

0

B2

0001

Ax=0->Rd

06A0

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

Rd->AX

06A1

0

0

0

0

1

1

1

1

0F

1

0

1

0

1

0

0

1

A9

1

0

0

1

0

0

1

0

92

0001

RLA->Rd

06C0

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

0

06

1

0

0

0

0

0

0

0

80

+1

Rd->AX

06C1

0

0

0

0

1

1

1

1

0F

1

0

1

0

0

0

0

1

A1

1

0

0

1

0

0

1

0

92

0001

RRCA->Rd

06E0

0

0

0

0

1

1

1

1

0F

0

0

0

0

0

1

1

0

06

0

0

0

1

0

0

1

0

12

0001

Rd=Rs

0700

0

0

0

0

0

1

1

1

05

0

0

0

0

0

0

1

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BX

0701

0

1

0

0

1

1

1

1

4F

0

0

1

1

1

0

0

1

39

1

0

0

1

0

0

1

0

92

0001

BX->Rd

0720

0

0

0

0

1

0

1

0

0A

0

0

0

0

0

1

1

0

06

0

0

0

1

0

0

1

0

12

0001

Rs->IOH

0740

0

0

0

0

0

1

1

1

05

0

0

0

0

0

0

1

0

04

0

0

1

0

0

0

0

0

20

+1

ROM->BL

0741

0

1

0

0

0

1

0

0

44

0

0

1

1

0

1

0

0

34

0

0

1

0

0

0

0

0

20

+1

ROM->BH

0742

0

1

0

0

0

0

1

1

43

0

0

1

1

1

0

0

1

39

1

1

0

0

0

0

0

0

C0

+1

BX->AR

0743

0

1

0

0

1

1

1

1

8F

0

0

0

0

0

1

0

0

04

0

0

0

1

0

0

1

0

12

0001

RAM->Rd

0760

0

0

0

0

0

1

1

1

05

0

0

0

0

0

0

1

0

04

1

0

0

0

0

0

0

0

80

+1

ROM->BL

0761

0

1

0

0

0

1

0

0

44

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BH

0762

0

1

0

0

0

0

1

1

43

0

0

1

1

1

0

0

1

39

1

1

0

0

0

0

0

0

C0

+1

BX->AR

0763

1

0

1

0

0

 0

0

0

A0

0

0

0

0

0

1

1

0

06

0

0

0

1

0

0

1

0

12

0001

Rs->RAM

0780

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BL

0781

0

1

0

0

0

1

1

0

46

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BH

0782

1

1

0

0

0

0

0

1

C1

0

0

0

0

0

0

0

1

01

1

1

0

1

0

0

1

0

D2

0001

BX->PC

07A0

0

0

0

0

0

1

1

1

05

0

0

1

1

1

1

0

0

3C

0

0

0

0

0

0

0

0

00

+1

ROM->BL

07A1

0

1

0

0

0

1

0

0

44

0

0

1

1

1

1

0

0

3C

0

0

0

0

0

0

0

0

00

+1

ROM->BH

07A2

0

1

0

0

0

0

0

0

40

0

0

1

1

1

0

0

0

38

0

0

0

0

0

0

1

1

03

07A4

判定0标志

07A4

0

0

0

0

0

0

0

0

00

0

0

1

1

1

0

0

0

38

0

0

0

1

0

0

1

0

12

0001

空操作

07A5

1

1

0

0

0

0

0

1

C1

0

0

1

1

1

0

0

0

38

1

1

0

1

0

0

1

0

D2

0001

BX->PC

07C0

0

0

0

0

0

1

1

1

05

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BL

07C1

0

1

0

0

0

1

0

0

44

0

0

0

0

0

1

0

0

04

0

0

0

0

0

0

0

0

00

+1

ROM->BH

07C2

0

1

0

0

0

0

0

0

40

0

0

0

0

0

0

0

0

00

0

0

0

0

0

1

0

1

05

07C4

判定CY标志

07C4

0

0

0

0

0

0

0

0

00

0

0

0

0

0

0

0

0

00

0

0

0

1

0

0

1

0

12

0001

空操作

07C5

1

1

0

0

0

0

0

1

C1

0

0

1

1

1

0

0

1

39

1

1

0

1

0

0

1

0

D2

0001

BX->PC

07E0

0

0

0

0

0

1

1

1

07

0

0

0

0

0

1

1

1

07

1

1

0

0

0

0

0

0

C0

+1

PC->AX

07E1

1

1

0

0

0

0

0

0

C0

0

0

1

0

1

0

0

1

29

1

1

0

1

0

0

1

0

D2

07E0

AX-1->PC

七.结果与指令调试过程

     Check_1(截图)

     Check_2(截图)

check20_1.asm程序的运行结果

check20_2.asm程序的运行结果

八.存在的问题和体会

1、过程中出现的问题:

(1)时序问题:

 在设计RL(Rd循环左移一位)这条微指令时,由于时序关系设置不正确,导致RL指令执行的时序出错。后来重新检查RL指令对应的微指令的时序关系,并且使用CMStudio的时序分析工具进行调试,最终解决问题。

(2)在设计JZ,JC指令的时候,刚开始没有考虑到设计一个空操作,在逻辑上没有实现当CY进位/Z置零跳转是在标志位为1时,跳转到地址转移的微指令地址的下一个地址,出现直接跳转到地址转移的微指令地址入口的情况。后来分别在07A3和07C3设置空操作,并且在07A2和07C2出分别设置跳转地址07A4和07C4,最终解决问题。

2、心得体会:

  1. 针对需要取立即数的指令(比如 LDI 指令),在设计相应的微指令时,这些微指令应包括读取 ROM 的操作,同时,对于设置微指令的控制信号,要确保在执行指定指令时,能够将 ROM 中的立即数读取到 AX/BX 寄存器中。
  2. 在设计微指令时,要注意ROM和RAM的区别

ROM 寄存器(只读存储器): ROM 通常用于存储不变的固定数据,如程序代码或常数。在 CMStudio 中,可以通过设置 ROM 的地址线和数据线,将需要的数据存储在 ROM 中。ROM 寄存器一般是只读的,其内容在运行时不能被修改。

RAM 寄存器(随机存储器): RAM 用于存储可读写的数据,如变量、中间结果等。RAM 在 CMStudio 中设计时需要考虑写入和读取操作,以及地址的变化。RAM 寄存器的内容可以在运行时通过指令进行修改。


http://www.ppmy.cn/news/1557953.html

相关文章

Vue.js前端框架教程14:Vue组件el-popover

文章目录 el-popover 组件基础用法嵌套信息手动控制显示状态自定义挂载节点触发事件el-popover 组件 el-popover 是 Element UI 库中的一个弹出框组件,它用于在用户交互时显示额外的信息或操作。以下是 el-popover 组件的一些基本用法: 基础用法 el-popover 可以通过不同的…

ensp 关于acl的运用和讲解

ACL(Access Control List,访问控制列表)是一种常用于网络设备(如路由器、交换机)上的安全机制,用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口,基于不同的…

Java项目--仿RabbitMQ的消息队列--基于MQ的生产者消费者模型

目录 一、引言 二、生产者 三、消费者 四、扩展 五、总结 一、引言 本篇文章就是本次Java项目的最后一篇文章了,本篇文章主要介绍基于MQ的生产者消费者模型的代码编写 二、生产者 public class DemoConsumer {public static void main(String[] args) throws…

物联网网络中的设备认证方法

论文标题:DEVICE AUTHENTICATION METHOD IN INTERNET OF THINGS NETWORKS(物联网网络中的设备认证方法) 作者信息: A.Ya. Davletova,West Ukrainian National University, 11, Lvivska Str. Ternopil, 46009, Ukraine…

C# WPF开发

WPF基础 WPF开发主要学习使用控件来布局,利用各种样式包装丰富控件,然后通过使用模板来达到预期的布局显示效果,还可以使用常见的MVVM框架来实现前后端互联。 布局: 主要掌握常用的布局方式,Grid,StackPanel、WrapPanel.根据内容分割行列、…

UDP基本了解

UDP基本了解 TCP、UDP区别 TCP(Transfer Control Protocol) UDP(User Datagram Protocol ) 连接:TCP是面向连接的传输协议,传输数据前需要先建立连接。而UDP不需要连接,即刻传输数据 服务对象…

第20天:JS信息收集-Web应用JS架构URL提取数据匹配Fuzz接口WebPack分析自动化

#知识点 1、信息收集-Web应用-JS提取分析-人工&插件*项目 2、信息收集-Web应用-JS提取分析-URL&配置&逻辑 标签 名称 地址 FUZZ测试 ffuf GitHub - ffuf/ffuf: Fast web fuzzer written in Go 匹配插件(bp) Hae GitHub - gh0stkey/HaE: HaE - H…

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di个单位时间,即它最早可以于 Ti时刻开始降落&am…