桂林电子科技大学计算机组成原理课设A3题目

一、课设题目:

设计一台嵌入式CISC模型计算机,完成功能:输入包含5个整数(有符号数)的数组M,按从小到大的顺序输出这5个整数。

参考书籍:计算机原理课程设计(第二版)陈智勇

源文件见最底

二、CICS模型机数据通路框图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

三总线架构:数据总线,指令总线,地址总线

课本里面做的那个题目采用的是单总线结构的模型,所以有些地方需要注意

举个例子:

三总线的取指令过程如下:

三、微程序控制器逻辑结构框图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

 

 

 

四、指令系统

(1)指令格式

系统中共设计了11条指令:IN1(输入),MOV(将一个数送入寄存器),CMP(比较),OUT1(输出),JB(无符号数的小于后跳转),JL有符号数跳转,JMP(无条件跳转),INC(自增1),DEC(自减1),LAD(从RAM取值)、STO(将值存入RAM)

指令格式如下:

下列指令格式中的  Rs:源寄存器 Rd:目的寄存器

  1. I/O指令。

输入(IN1)指令采用双字长指令,格式如下:

15-12

11     10

9      8

7-0

操作码

x       x

Rd

xxxxxxxx

 

输出(OUT1)指令采用双字长指令,格式如下:

15-12

11     10

9      8

7-0

操作码

Rs

x       x

xxxxxxxx

  1. 转移指令。

无条件转移指令(JMP)采用双字节指令,格式如下:

15-12

11     10

9      8

7-0

操作码

x       x

x       x

addr

无符号数条件转移指令(JB)

15-12

11     10

9      8

7-0

操作码

x       x

x       x

addr

 

有符号数条件转移指令(JL)

15-12

11     10

9      8

7-0

操作码

x       x

x       x

addr

 

其中“地址”就是要转移的地址值

  1. 自增1(INC)指令,单字节指令,格式如下:

15-12

11     10

9      8

7-0

操作码

x       x

Rd

xxxxxxxx

 

  1. 自减1(DEC)指令,单字节指令,格式如下:

15-12

11     10

9      8

7-0

操作码

x       x

Rd

xxxxxxxx

 

  1. 比较(CMP)指令,单字节指令,格式如下:

15-12

11     10

9      8

7-0

操作码

Rs

Rd

xxxxxxxx

 

  1. MOV指令。双字节指令。其格式如下:

15-12

11     10

9      8

7-0

操作码

x       x

Rd

im

 

  1. STO指令。双字节指令。其格式如下:

15-12

11     10

9      8

7-0

操作码

Rs

Rd

xxxxxxxx

   其中Rd存放的是目的操作数所在的地址,Rs存放的是源操作数

  1. LAD指令。双字节指令。其格式如下:

15-12

11     10

9      8

7-0

操作码

Rs

Rd

xxxxxxxx

其中Rd存放的是目的操作数,Rs存放的是源操作数所在的地址

  1. 对源寄存器Rs和目的寄存器Rd的规定:

Rs或者Rd

选定的寄存器

00

R0

01

R1

10

R2

11

R3

 

模型机规定数据采用定点整数补码表示,单字长为8位,其格式如下:

7

6     5     4     3     2     1     0

符号位

尾数

 

 

T1、T2、T3、T4 与 CLR、Q 之间的关系图:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

(2)指令编码

如下图所示:

助记符

指令格式

功能

15-12

11   10

9    8

7-0

IN1 Rd

0001

x     x

    Rd

xxxxxxxx

输入设备->Rd

MOV Rd im

0010

x     x

Rd

im

Im->Rd

JMP addr

0011

x    x

x    x

addr

addr->PC

CMP Rs Rd

0100

Rs

Rd

xxxxxxxx

Rs-Rd,锁存OF,ZF

INC Rd

0101

x     x

Rd

xxxxxxxx

(Rd)+1->Rd

DEC Rd

0110

x     x

Rd

xxxxxxxx

(Rd)-1->Rd

STO Rs (Rd)

0111

Rs

Rd

xxxxxxxx

Rs->(Rd)

LAD (Rs) Rd

1000

Rs

Rd

xxxxxxxx

(Rs)->Rd

OUT1 Rs

1001

Rs

x    x

xxxxxxxx

Rs->输出设备

JB  addr

1010

x     x

x      x

addr

Addr->PC

JL  addr

1011

x    x

x    x

addr

addr->PC

注:xxxxxxxx表示什么数值都可以,默认00000000,其实我觉得JB和JL来说是一样的,所以可以砍掉其中一个,不砍影响也不大。

 

五、微程序

(1)流程图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

 

 

 

 

 

 

 

 

 

 

 

 

 

编码随意,但是紧跟在p字段后面的一定要考虑清楚,上面标的数字是用二进制的六位微地址转换成十六进制的,例如01(16)=00 0001(2)

(2)逻辑转移表达式

     SE5<=NOT(CF AND NOT(ZF) AND P3 AND T4);   

                //这SE4和SE5是一样的逻辑,把一个砍了也可以,留着也行,不影响程序运行

 

     SE4<=NOT(CF AND NOT(ZF) AND P2 AND T4);     

               //用于P2跳转,也就是JB,通过判断标志位来进行跳转,举例如下:

          CMP R1,R2   JB  process  :当R1比R2小的时候,跳转到process程序段,因为CMP指令  的功能就是将R1-R2然后保存状态位,例如CF、ZF等等

所以P2后面的微地址设置为:01 0000(2)=10(16)理由:P2测试字段只能更改SE4位的数值

 

     SE3<=NOT(I15 AND P1 AND T4);

     SE2<=NOT(I14 AND P1 AND T4);

     SE1<=NOT(I13 AND P1 AND T4);

     SE0<=NOT(I12 AND P1 AND T4);

     //P1可以控制四位二进制,也就是可以产生十六种译码方式,进行十六路跳转

微地址:xx0000-xx1111即可,不能与P2、P3所用的冲突

(3)微指令代码表

CISC模型机系统使用的微指令采用全水平型微指令,字长为27位,其中微命令字段为18位,P字段为3位,后继微地址为6位,其格式如下:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

 

 

六、汇编语言及其机器语言

算法思想:先从外界传入5个整数存入RAM单元,而后用R0存放最外层的循环次数,R1来存放地址,用R2,R3来存放两个相互比较的数,首先从R1的地址开始,用R3来存放大的数,如果在比较的过程中有更大的数,则进行交换,最后的数就会成为最大的数,然后将R0自减,以此进入下一次循环。在比较结束之后进行结果的输出。

如果题目是十个整数,那么只需要修改汇编代码中的三个部分,即ROM里面的部分修改成下面的样子,将5个数的排序变成十个数的排序就可以了,注意一个问题,由于从五个数变成了十个数,400us的仿真时间是不够的,需要自己手动修改一下仿真时长,具体时间你们自己试一下,调到排序好就可以了。

仿真时间修改可以参照这个毕业设计预习:maxplus2入门教程 - 5319zl - 博客园 (cnblogs.com)ab9b011d81ee4694912fc5eb679c383b.png

 

 

汇编语句及机器码

助记符

地址

机器代码

十六进制

功能

MOV   R0  05H

00

0010 0000 0000 0101

2005

05H->R0

MOV   R1  00H

01

0010 0001 0000 0000

2100

0->R1,设置初始地址

L1:  IN1  R2

02

0001 0010 0000 0000

1200

输入一个数到R2

STO   R2  [R1] 

03

0111 1001 0000 0000

7900

将R2的值存入R1对应的地址单元

INC   R1

04

0101 0001 0000 0000

5100

自增R1

CMP  R1  R0

05

0100 0100 0000 0000

4400

比较R1,R0的大小

JB  L1

06

1010 0000 0000 0010

A002

若R1<R0,跳转L1

MOV  R0  04H

07

0010 0000 0000 0100

2004

4->R0,设置外循环值为4

MOV  R1  00H

08

0010 0001 0000 0000

2100

0->R1,设置RAM的初始地址0

L2:  LAD  [R1]  R2

09

1000 0110 0000 0000

8600

取R1所对应地址单元的值赋值给R2

INC   R1

0A

0101 0001 0000 0000

5100

自增R1

CMP  R0  R1

0B

0100 0001 0000 0000

4100

比较R1,R0的大小

JB  L4

0C

1010 0000 0001 0110

A016

若R0<R1,跳转L4

LAD [R1]  R3

0D

1000 0111 0000 0000

8700

取R1所对应地址单元的值赋值给R3

CMP  R3  R2

0E

0100 1110 0000 0000

4E00

比较R3,R2的大小

JL  L3

0F

1011 0000 0001 0001

B011

若R3<R2,跳转L4

JMP  L2

10

0011 0000 0000 1001

3009

跳转L2

L3:  STO  R2  [R1]

11

0111 1001 0000 0000

7900

将R2的值存入R1对应的地址单元

DEC  R1

12

0110 0001 0000 0000

6100

R1自减

STO  R3  [R1]

13

0111 1101 0000 0000

7D00

将R3的值存入R1对应的地址单元

INC  R1

14

0101 0001 0000 0000

5100

R1自增

JMP  L2

15

0011 0000 0000 1001

3009

跳转L2

L4:  DEC  R0

16

0110 0000 0000 0000

6000

R0自减

MOV  R1  00H

17

0010 0001 0000 0000

2100

设置R1的值为0

CMP  R1  R0

18

0100 0100 0000 0000

4400

比较R1,R0的大小

JB  L2

19

1010 0000 0000 1001

A009

如果R1<R0,跳转L2

MOV  R0  05H

1A

0010 0000 0000 0101

2005

设置循环值为5

MOV  R1  00H

1B

0010 0001 0000 0000

2100

设RAM初始地址为0

L5:  LAD  [R1]  R2

1C

1000 0110 0000 0000

8600

取R1所对应地址单元的值赋值给R2

OUT  R2

1D

1001 1000 0000 0000

9800

将R2输出到LED

INC  R1

1E

0101 0001 0000 0000

5100

R1自增

CMP   R1   R0

1F

0100 0100 0000 0000

4400

比较R1,R0的大小

JB  L5

20

1010 0000 0001 1100

A01C

如果R1<R0,跳转L5

七、功能仿真

根据上述的设计,构建了模型机的相关的波形图。我们首先设置 CLR=1,CLK=200.0ns,设置其 end time 为 400.0us 根据IN1指令对应的周期输入 5 个值:54,55,56,12,81(十六进制)。结果如图:在输入指令上面输入

第一个输入:

 
 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70


第二个输入:

 
 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

第三个输入:

 
 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

 

第四个输入:

 
 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

 

 

 

第五个输入:

 
 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

 

 

 

在五个输入都输入之后,RAM里面就存入了五个十六进制数(补码),最后的输出和排序结果如下:

 
 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1h4cmxr,size_16,color_FFFFFF,t_70

 

 

 

 

 

 

百度云盘地址:链接:https://pan.baidu.com/s/1Axqsg8q73MpY-eLq0dBNIA 
提取码:1234

 

  • 18
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值