计算机组成原理课设论文.docx

上传人:b****5 文档编号:12579034 上传时间:2023-04-20 格式:DOCX 页数:45 大小:2.37MB
下载 相关 举报
计算机组成原理课设论文.docx_第1页
第1页 / 共45页
计算机组成原理课设论文.docx_第2页
第2页 / 共45页
计算机组成原理课设论文.docx_第3页
第3页 / 共45页
计算机组成原理课设论文.docx_第4页
第4页 / 共45页
计算机组成原理课设论文.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

计算机组成原理课设论文.docx

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

计算机组成原理课设论文.docx

计算机组成原理课设论文

 

计算机组成原理课程设计

 

题目:

计算机原理课程设计

学院:

计算机科学与工程学院

专业:

计算机科学与技术

姓名:

孤狼

学号:

1100310315

指导教师:

 

2014年03月20日

 

2.5最终机器码……………………………………………………………………..........................5

三、时序产生器…………………………………………………………………………………………5

5.1模型机顶层电路设计…………………………………………………………………...…….11

5.2模型机crom单元电路设计……………………………………………………………..…….12

6.2STO(STOR2(R0))存储位置每次都为00H…………………………………………..13

各个单元的电路设计或VHDL源文件

一.课程设计选题和完成内容

选题:

本设计选择题目为A类第一题

题目:

设计一台嵌入式CISC模型计算机

采用定长CPU周期、联合控制方式,并运行能完成一定功能的机器语言源程序进行验证,机器语言源程序功能如下:

A类(最高成绩为“优”):

●输入包含5个整数(有符号数)的数组M,输出所有负数的平方和。

(非卓越班)

●输入包含5个整数(有符号数)的数组M,输出最大负数的绝对值。

(非卓越班)

●输入包含10个整数(无符号数)的数组M,输出众数(出现次数最多的数)及其出现的次数。

(卓越班)

●输入包含10个整数(无符号数)的数组M,输出中位数。

(卓越班)

说明:

A类题目的嵌入式模型计算机内必须设计和使用RAM存储器读写数据,相应地需要设计对RAM存储器数据的读写指令,以及对RAM中数组操作必须的寄存器间接寻址方式等。

B类(最高成绩为“良”):

●输入5个整数(有符号数),输出所有负数的平方和。

(非卓越班)

●输入5个整数(有符号数),输出最大负数的绝对值。

(非卓越班)

●输入5个整数(有符号数),输出它们的平均值,以及小于此平均值的数的个数。

(卓越班)

要完成的内容:

1.完成系统的总体设计,画出模型机数据通路框图;

2.设计微程序控制器(CISC模型计算机)的逻辑结构框图;

3.设计机器指令格式和指令系统;

4.设计时序产生器电路;

5.设计所有机器指令的微程序流程图;

6.设计操作

7.的所有单元电路,并用VHDL语言(也可使用GDF文件--图形描述文件)

8.对模型机中控制器单元;

设计模型机的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路。

9.由给出的题目和设计的指令系统编写相应的汇编语言源程序;

9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计

到模型机中的ROM中去;

10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软

件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。

二、系统的总体设计

2.1嵌入式CISC模型机的数据通路框图

 

图2-1

 

2.2系统的操作控制器的逻辑框图

2.3模型机的指令格式

这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。

此模型的系统共设计了共有10条指令,分别为:

IN,MOV,LAD,STO,INC,JNS,ADD,MUL,OUT,TEST。

2.3.1具体指令格式如下:

微地址

助记符号

指令格式

指令功能

15--12

1110

98

7-----0

000001

MOVRd,im

0001

xx

Rd

im

立即数im→Rd

000010

INTRd

0010

xx

Rd

xx

将输入数据存到Rd寄存器

000011

STORs,(Rd)

0011

Rs

Rd

xx

(Rs)--->((Rd))将Rs的内容存到Rd地址中

000100

INCRd

0100

xx

Rd

xx

(Rd)+1→Rd锁存SF和ZF

000101

DECRd

0101

xx

Rd

xx

(Rd)-1→Rd锁存SF和ZF

000110

TESTRd

0110

xx

Rd

xx

测试(Rd)是否为负,锁存SF

000111

JNSaddr

0111

xx

xx

addr

若不为负数,则addr→PC

001000

LAD(Rs),Rd

1000

Rs

Rd

xx

((Rs))--->Rd将Rs地址的内容读到Rd

001001

MULRsRd

1001

Rs

Rd

xx

(Rs)*(Rd)-->Rd

001010

ADDRs,Rd

1010

Rs

Rd

addr

(Rs)+(Rd)-->Rd

001011

OUTRs

1011

Rs

xx

xx

(Rs)→OUTBUS

 

2.3.2对Rs和Rd的规定:

Rs或Rd

选定的寄存器

00

R0

01

R1

10

R2

11

R3

 

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

7

6543210

符号位

尾数

 

2.4编写汇编源程序

我们要实现的功能是对连续输入的5个数据并存储到RAM的连续的存储单元中,然后再从RAM中将这5个数据依次读取出来并作判断是否为数,将5个数中所有的负数其求平方和,并对其结果进行显示等功能,从而得到一个简单的复杂指令模型机所实现的功能和结果

//根据要求编写如下汇编源程序:

MOVR0,00H;数据存放在RAM中的地址

MOVR1,4H;计数从4H(4)开始,到-1时结束

L1:

INTR2;输入一个数到R2

STOR2,(R0);将输入的数存放到RAM的(R0)地址

INCR0;RAM地址指针+1

DECR1;计数-1

TESTR1;测试计数是否到达5次,(R1)是否为负数

JNSL1;根据SF符号标志的判断,若不为负数,则跳转

MOVR000H;当5个数输入存储完成后,重新初始化RAM指针

MOVR14H;重置计数

L2:

LAD(R0)R2;将(R0)地址的数取出送到R2中

TESTR2;测试取出的数是否为负数

JNSL3;若不为负数,则跳转到L3

MULR2,R2;若为负数,则求平方

ADDR2,R3;再求平方和,把结果送到R3

L3:

INCR0;RAM地址+1

DECR1;计数-1+

TSTR1;测试计数是否到达5次,(R1)是否为负数

JNSL2;为正数,计数还不到5次,则跳转到L2

OUTR3;计数到达5次,则将最后结果输出

 

2.5最终机器码为:

地址

助记符(汇编)

机器代码

作用

00

MOVR0,00H

0001000000000000

数据存放在RAM中的地址00H开始

01

MOVR1,4H

0001000100000100

计数从4H(4)开始,到-1时结束

02

L1:

INTR2

0010001000000000

输入一个数到R2

03

STOR2,(R0)

0011100000000000

将输入的数存放到RAM的(R0)地址

04

INCR0

010*********

RAM地址指针+1

05

DECR1

010*********

计数-1

06

TESTR1

0110000100000000

测试计数是否到达5次,(R1)是否为负数,锁存SF

07

JNSL1

0111000000000010

根据SF符号标志的判断,若不为负数,则跳转

08

MOVR0,00H

0001000000000000

当5个数输入存储完成后,重新初始化RAM指针

09

MOVR1,4H

0001000100000100

重置计数

0A

L2:

LAD(R0),R2

1000001000000000

将(R0)地址的数取出送到R2中

0B

TESTR2

0110001000000000

测试取出的数是否为负数,锁存SF

0C

JNSL3

0111000000001111

若不为负数,则跳转到L3

0D

MULR2,R2

1001101000000000

若为负数,则求平方

0E

ADDR2,R3

1010101100000000

再求平方和,把结果送到R3

0F

L3:

INCR0

010*********

RAM地址+1

10

DECR1

010*********

计数-1+

11

TESTR1

0110000100000000

测试计数是否到达5次,(R1)是否为负数,锁存SF

12

JNSL2

0111000000001010

为正数,计数还不到5次,则跳转到L2

13

OUTR3

1011110000000000

计数到达5次,则将最后结果输出

三.时序产生器

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

四.微程序控制器的设计

微程序控制器的设计过程包括:

(1)根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;

(2)设计微指令格式和微指令代码表;

(3)设计地址转移逻辑电路;

(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器;

(5)设计微程序控制器的顶层电路(由多个模块组成)。

4.1设计微指令流程图

根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;

 

00

 

MOVINTSTOINCDECTESTJNSLADMULADDOUT

0102030405060708090A0B

 

0E0C

0000000000

00000000

SF=1SF=000

10

00

 

00

4.2设计微指令格式和微指令代码表

指令流程图设计完成后,开始设计微指令格式和微指令代码表,按照要求,CISC模型机系统使用的微指令采用全水平型微指令,字长为26位,其中微命令字段为18位,P字段为2位,后继微地址为6位,其格式如下:

按照此格式并根据设计的指令流程图,可以得到:

由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:

LOAD、LDPC、LDAR、LDIR、LDRi、LDPSW、RS_B、S2、S1、S0、ALU_B、SW_B、LED_B、RD_B、CS_B、RAM_B、CS_I、ADDR_B。

CLR

LOAD

LDPC

功能

0

X

X

将PC清0

1

0

BUS->PC

1

1

0

不装入,不计数

1

1

PC+1

S2

S1

S0

功能

0

0

0

X+Y,修改ZF,SF

0

1

0

Y+1,修改ZF,SF

0

1

1

Y-1,修改ZF,SF

1

1

1

X*Y,修改ZF,SF

1

0

0

0&Y,修改ZF,SF

1

1

0

->Y

 

4.3设计地址转移逻辑电路

地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。

地址转移逻辑电路中异步置“1”信号SE6~SE1表达式的确定与P字段测试时转移微地址的确定密切相关.

由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA4~µA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:

(µA5的异步置“1”端SE6实际未使用)

SE6<='1';

SE5<=NOT(NOT(SF)ANDP2ANDT4);

SE4<=NOT(I4ANDP1ANDT4);

SE3<=NOT(I3ANDP1ANDT4);

SE2<=NOT(I2ANDP1ANDT4);

SE1<=NOT(I1ANDP1ANDT4);

五、单元电路设计

设计模型机中的所有单元电路,并用VHDL语言(也可使用GDF文件----图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件。

具体设计方法见附录。

重点设计单元电路为:

CR0M,ALU,ROM.

CROM内部重点单元:

COUNTROM,ADDR,MCOMMAND

 

5.1模型机(顶层)电路:

 

5.2模型机crom单元电路:

六.设计测试过程所遇到的问题及解决记录

6.1JNS(JNSL2\JNSL3)无法实现循环跳转

问题所在:

没有认真注意到P测试的返回地址与指令IR->PC地址的关系,开始时随便设置了IR->PC的地址

问题解决:

后来了解到改地址与P

(2)测试相关,改为010000后,跳转成功。

6.2STO(STOR2(R0))存储位置每次都为00H

问题所在:

STO指令中开启ADDR_B,关ALU_B,导致取地址来自于ROM内的机器码后八位addr,该机器码后八位为00H。

问题解决:

微指令中关ADDR_B,开ALU_B,ALU设置直接输出Y,此时Y值来源于(R0),即为目的地址。

七、测试及结果分析

根据设计的汇编程序和对应的机器代码,对设计的模型机进行仿真测试,并分析结果:

7.1下图显示了RAM地址的初值设置00H,循环计数设置04H,第一个循环读入40H至R2并存进RAM的过程。

7.2下图截取了其中3个循环,分别读进数40H,FCH,FEH.

7.3下图为5次循环后读进的5个数,如图从地址00H开始存放。

7.4下图为一次从RAM中读取负数,并计算平方并加到R3的过程

7.5下图为3个负数从RAM中读取判断,求得平方并求和的过程。

FC*FC+FE*FE+FF*FF=15H.

九、心得体会

通过课程设计的学习设计过程,我从对CISC模型机的组成和工作原理毫不了解,到慢慢的独立设计完成,并实现了预期功能。

这次课程设计我学会AlteraMAX+plusⅡEDA软件的使用,熟悉了VHDL语言,并能使用其进行期间的编程,当然,也能用图形描述文件(.Gdf)进行顶层电路的设计。

最终能用EDA软件设计一个能完成一定功能的模型计算机,并通过功能仿真和在EDA实验平台上运行一个程序来验证模型机设计的正确性。

在设计的过程中,我了解了每个机器码,每个微指令的作用,懂得模型机的原理。

此次的课程设计让我收获的不单单有课程的知识,也学会了自主学习、学会了细心解决问题,培养了自己做事的耐心活认真的态度,培养了调试纠错的良好素养,更有的就是加强了自己的实践动手能力。

十、附录(VHDL源文件)

8.1ROM的设计(保存汇编源代码对应的机器码以及地址)

程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYROMIS

PORT(

DOUT:

OUTSTD_LOGIC_VECTOR(15DOWNTO0);

ADDR:

INSTD_LOGIC_VECTOR(7DOWNTO0);

CS_I:

INSTD_LOGIC

);

ENDROM;

ARCHITECTUREAOFROMIS

BEGIN

DOUT<=

"0001000000000000"WHENADDR="00000000"ANDCS_I='0'ELSE--MOVR0,10H

"0001000100000100"WHENADDR="00000001"ANDCS_I='0'ELSE--MOVR1,4H

"0010001000000000"WHENADDR="00000010"ANDCS_I='0'ELSE--L1:

INTR2

"0011100000000000"WHENADDR="00000011"ANDCS_I='0'ELSE--STOR2,(R0)

"0100000000000000"WHENADDR="00000100"ANDCS_I='0'ELSE--INCR0

"0101000100000000"WHENADDR="00000101"ANDCS_I='0'ELSE--DECR1

"0110000100000000"WHENADDR="00000110"ANDCS_I='0'ELSE--TESTR1

"0111000000000010"WHENADDR="00000111"ANDCS_I='0'ELSE--JNSL1

"0001000000000000"WHENADDR="00001000"ANDCS_I='0'ELSE--MOVR010H

"0001000100000100"WHENADDR="00001001"ANDCS_I='0'ELSE--MOVR14H

"1000001000000000"WHENADDR="00001010"ANDCS_I='0'ELSE--L2:

LAD(R0)R2

"0110001000000000"WHENADDR="00001011"ANDCS_I='0'ELSE--TESTR2

"0111000000001111"WHENADDR="00001100"ANDCS_I='0'ELSE--JNSL3

"1001101000000000"WHENADDR="00001101"ANDCS_I='0'ELSE--MULR2,R2

"1010101100000000"WHENADDR="00001110"ANDCS_I='0'ELSE--ADDR2,R3

"0100000000000000"WHENADDR="00001111"ANDCS_I='0'ELSE--L3:

INCR0

"0101000100000000"WHENADDR="00010000"ANDCS_I='0'ELSE--DECR1

"0110000100000000"WHENADDR="00010001"ANDCS_I='0'ELSE--TESTR1

"0111000000001010"WHENADDR="00010010"ANDCS_I='0'ELSE--JNSL2

"1011110000000000"WHENADDR="00010011"ANDCS_I='0'ELSE--OUTR3

"0000000000000000";

ENDA;

8.2ALU(运算器)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;1

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYALUIS

PORT(

X:

INSTD_LOGIC_VECTOR(7DOWNTO0);

Y:

INSTD_LOGIC_VECTOR(7DOWNTO0);

S2,S1,S0:

INSTD_LOGIC;

ALUOUT:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

SF:

OUTSTD_LOGIC

);

ENDALU;

ARCHITECTUREAOFALUIS

SIGNALAA,BB,TEMP:

STD_LOGIC_VECTOR(8DOWNTO0);

BEGIN

PROCESS

BEGIN

IF(S2='0'ANDS1='0'ANDS0='0')THEN--ADD

AA<='0'&X;

BB<='0'&Y;

TEMP<=AA+BB;

ALUOUT<=TEMP(7DOWNTO0);

SF<=TEMP(7);

ELSIF(S2='0'ANDS1='1'ANDS0='0')THEN--INC

AA<='0'&Y;

TEMP<=AA+1;

ALUOUT<=TEMP(7DOWNTO0);

SF<=TEMP(7);

ELSIF(S2='0'ANDS1='1'ANDS0='1')THEN--DEC

AA<='0'&Y;

TEMP<=AA-1;

ALUOUT<=TEMP(7DOWNTO0);

SF<=TEMP(7);

ELSIF(S2='1'ANDS1='1'ANDS0='1')THEN--MUL

AA<='0'&X;

BB<='0'&Y;

TEMP<=AA*BB;

ALUOUT<=TEMP(7DOWNTO0);

ELSIF(S2='1'ANDS1='0'ANDS0='0')THEN--TEST

AA<='0'&Y;

SF<=AA(7);

ELSIF(S2='1'ANDS1='1'ANDS0='0')THEN--Rd->BUS

ALUOUT<=Y;

ELSE

ALUOUT<="00000000";

SF<='0';

ENDIF;

ENDPROCESS;

ENDA;

 

8.3状态条件寄存器

只保留了用到的SF

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYPSWIS

PORT(

S,LDPSW:

INSTD_LOGIC;

SF:

OUTSTD_LOGIC

);

ENDPSW;

ARCHITECTUREAOFPSWIS

BEGIN

PROCESS(LDPSW)

BEGIN

IF(LDPSW'EVENTANDLDPSW='1')THEN

SF<=S;

ENDIF;

ENDPROCESS;

ENDA;

8.4微程序控制器

内部结构:

(1)

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

当前位置:首页 > IT计算机 > 计算机硬件及网络

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

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