计算机组成原理课程设计桂林电子科技大学.docx

上传人:b****8 文档编号:11949005 上传时间:2023-06-03 格式:DOCX 页数:34 大小:721.90KB
下载 相关 举报
计算机组成原理课程设计桂林电子科技大学.docx_第1页
第1页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第2页
第2页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第3页
第3页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第4页
第4页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第5页
第5页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第6页
第6页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第7页
第7页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第8页
第8页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第9页
第9页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第10页
第10页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第11页
第11页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第12页
第12页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第13页
第13页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第14页
第14页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第15页
第15页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第16页
第16页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第17页
第17页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第18页
第18页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第19页
第19页 / 共34页
计算机组成原理课程设计桂林电子科技大学.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机组成原理课程设计桂林电子科技大学.docx

《计算机组成原理课程设计桂林电子科技大学.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计桂林电子科技大学.docx(34页珍藏版)》请在冰点文库上搜索。

计算机组成原理课程设计桂林电子科技大学.docx

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

 

计算机组成原理课程设计说明书

题目:

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

院(系):

计算机科学与工程学院

专业:

网络工程

学生姓名:

唐波

学号:

1100380219

指导教师:

陈智勇

 

一、课设题目:

设计一台嵌入式CISC模型计算机(采用定长CPU周期、联合控制方式),并运行能完成一定功能的机器语言程序进行验证,实现方法可从以下4类中任选一个:

●连续输入5个有符号整数(8位二进制补码表示,用十六进制数输入),求最小的负数的绝对值并输出显示。

说明:

①5个有符号数从外部输入;

②一定要使用符号标志位(比如说SF),并且要使用为负的时候转移(比如JS)或不为负的时候转移(比如JNS)指令。

 

二.CISC模型机系统总体设计

三.操作控制器的逻辑框图

 

说明:

在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。

四.模型机的指令系统和所有指令的指令格式

由此可见,本模型机中的指令系统中共有8条基本指令,下表9列出了每条指令的格式、汇编符号和指令功能。

指令助记符

指令格式

功能

15--12

1110

98

7-----------0

IN1Rd

0101

××

Rd

××××××××

(Rd)+1→Rd,锁存标志位

MOVRd,im

0001

××

Rd

im

立即数→Rd

CMPRs,Rd

0011

Rs

Rd

××××××××

Rs,Rd比较,

INCRd

0010

××

Rd

××××××××

输入设备→Rd

JNSaddr

0100

××

××

addr

若大于,则addr→PC

JMPaddr

0110

××

××

addr

addr→PC

OUT1Rs

1001

Rs

××

××××××××

(Rs)→输出设备

MOV1Rs,Rd

1000

Rs

Rd

××××××××

(Rs)→Rd

NOTRd

0111

××

Rd

××××××××

Data取反

 

指令格式:

(1)I/O指令(单字节)

I说明:

对Rs和Rd的规定:

Rs或Rd

选定的寄存器

00

R0

01

R1

10

R2

11

R3

五.所有机器指令的微程序流程图

 

 

 

设计操作控制器单元(即微程序控制器)

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

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

252423222120191817161514131211109876543210

LOADLDPCLDARLDIRLDRiRD_BRS_BS2S1S0ALU_BSW_BLED_BRD_DCS_DRAM_BCS_IADDR_BP1P2后继微地址

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

LOADLDPCLDARLDIRLDRiRD_BRS_BS2S1S0ALU_BSW_BLED_BRD_DCS_DRAM_BCS_IADDR_B

微地址

微命令字段

P1

P2

后继微地址

00

1

1

0

1

0

0

1

0

0

0

1

1

1

1

1

1

0

1

1

0

000010

01

1

0

0

0

1

0

1

0

0

0

1

1

1

1

1

1

1

0

0

0

000000

02

1

0

0

0

1

1

1

0

1

0

0

1

1

1

1

1

1

1

0

0

000001

03

1

0

0

0

0

1

1

0

0

1

1

1

1

1

1

1

1

1

0

0

000000

04

1

0

0

0

0

0

1

0

0

0

1

1

0

1

1

1

1

1

0

1

000011

05

1

0

0

0

1

0

1

0

0

0

1

0

1

1

1

1

1

1

0

0

000100

06

0

1

0

0

0

0

1

0

0

0

1

1

1

1

1

1

1

0

0

0

100000

07

1

0

0

0

1

1

1

1

0

0

0

1

1

1

1

1

1

1

0

0

000000

08

1

0

0

0

1

0

1

1

0

1

0

1

1

1

1

1

1

1

0

0

010010

09

1

0

0

0

0

0

0

0

0

0

1

1

0

1

1

1

1

1

0

0

010100

10

0

1

0

0

0

0

1

0

0

0

1

1

1

1

1

1

1

0

0

0

000000

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

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

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

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

SE5=FS·P

(2)·T4

SE4=I7·P

(1)·T4

SE3=I6·P

(1)·T4

SE2=I5·P

(1)·T4

SE1=I4·P

(1)·T4

六.嵌入式CISC模型计算机的顶层电路图

CROM:

 

AA;

 

七.汇编代码:

MOVR0,00H功能:

将0赋给R0

MOVR1,FFH将FF赋给R1

MOVR2,05H将05赋给R2

L0:

INCR0计数加1

CMPR0,R2R0与R2比较,是否输入五个数

JNSL3是跳转L2输出

IN1R3输入一个数到R3

CMPR3,R1R3和R1比较,锁存CF,ZF

JNSL2跳转L2输出

JMPL1跳转L1

L1:

MOV1R1,R3(R3)→(R1)

JMPL0跳转L0

L2:

NOTR1R1取反

INCR1R1加1

OUT1R1输出R1

 

八.机器语言源程序

地址(十六进制)

汇编语言源程序

机器语言源程序

代码

00

MOVR0,00H

0001000000000000

1000

01

MOVR1,FFH

0001000111111111

11FF

02

MOVR2,05H

0001001000000101

1025

03

L0:

INCR0

0010000000000000

2000

04

CMPR0,R2

0011100000000000

3800

05

JNSL3

0100000000001100

400C

06

IN1R3

0101001100000000

5300

07

CMPR3,R1

0011110100000000

3D00

08

JNSL2

0100000000001010

400A

09

JMPL1

0110000000000011

6003

0A

L1:

MOV1R1,R3

1000110100000000

8D00

0B

JMPL0

0110000000000011

6003

0C

L2:

NOTR1

0111000100000000

7100

0D

INCR1

0010000100000000

2100

0E

OUT1R1

1001010000000000

9400

 

 

九.机器语言源程序的功能仿真波形图及结果分析

1.MOVR0,00H2.MOVR1,FFH3.MOVR2,05H4.CMPR2,R05.IN1R3(F4存到R3)

6.MOV1R3,R1(F4存入R1)

7.IN1R3(02存到R3)8.02是大于F4的正数,不跳到L1存R1,直接跳回L0。

9.IN1R3(F1存到R3)。

10.F1是小于于F4的负数,跳到L1,MOV1R3,R1(F1存入R1)

11.FNOTR1,INCR1(F1取反加1存入R1)。

12。

OUT1R1(输出R1,最终结果是0F)

十.故障现象和故障分析

故障一:

在进行仿真的时候,当输入一个正数存进R3之后,执行CMPR3,R1之后,没有执行JNSL0,而是错将正数也存入R1。

查看之后发现是ALU里“CMP”运算代码有问题。

故障二:

计数(R0)一直加,到5时不会跳转输出,检查机器指令发现JNSL2的地址写成了06

故障三:

,输出结果时,取反都变成FB,检查很久之后发现原本应该对AC里的数取反的,结果弄成了DR的.

故障N:

汇编程序出错、连线错误、微指令错误、修改器件没有重新编译等。

 

十一.心得体会

刚开始去上老师的课时,听得一头雾水,因为发现好多地方自己同不懂。

然后我就去看课本,同时问老师一些问题,当看到其他同学也问老师问题时,自己也跑过去凑热闹,因为这样可以了解更多的知识。

直到后来才发现,原来除了设计自己的指令外,我们需要写MCOMMAND,写CONTROM来解析我们写的指令,这或许可以算得上一个极简单的CPU模型了吧。

就是有了微程序控制器,计算机才认识我们自己设计的指令,才知道当读取到什么指令时该执行什么操作。

听得多了,看得多了,就渐渐的明白了一些课设的相关知识,然后画指令流程图,设计指令,写程序完成任务,这些几乎都是水到渠成的工作了,很多都可以依葫芦画瓢来完成。

本次课设,由于汇编学的很差,期汇编代码是和班级同学的相同,但是自己重新设计了指令周期流程图,经过调试得出的结果

其实只要把最基本的原理搞明白了,后续工作开展是非常快的。

但在没明白原理前,千万不要畏惧困难,慢慢的一点一点学习,特别是仿真软件的学习和使用,需要花费相当的时间。

只要认真了,就有可能实现。

 

十二.软件清单

AA里的MMM:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMMMIS

PORT(

SE:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

D:

INSTD_LOGIC;

CLR:

INSTD_LOGIC;

UA:

OUTSTD_LOGIC

);

ENDMMM;

ARCHITECTUREAOFMMMIS

BEGIN

PROCESS(CLR,SE,CLK)

BEGIN

IF(CLR='0')THEN

UA<='0';

ELSIF(SE='0')THEN

UA<='1';

ELSIF(CLK'EVENTANDCLK='1')THEN

UA<=D;

ENDIF;

ENDPROCESS;

ENDA;

 

CROM的:

ADDR

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYADDRIS

PORT(

I15,I14,I13,I12:

INSTD_LOGIC;

ZF,CF,T4,P1,P2:

INSTD_LOGIC;

SE5,SE4,SE3,SE2,SE1,SE0:

OUTSTD_LOGIC

);

ENDADDR;

ARCHITECTUREAOFADDRIS

BEGIN

SE5<='1';--预留给JB或JAE指令使用

SE4<=NOT((NOTZFANDCF)ANDP2ANDT4);

SE3<=NOT(I15ANDP1ANDT4);

SE2<=NOT(I14ANDP1ANDT4);

SE1<=NOT(I13ANDP1ANDT4);

SE0<=NOT(I12ANDP1ANDT4);

ENDA;

 

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYF1IS

PORT(

UA5,UA4,UA3,UA2,UA1,UA0:

INSTD_LOGIC;

D:

OUTSTD_LOGIC_VECTOR(5DOWNTO0)

);

ENDF1;

ARCHITECTUREAOFF1IS

BEGIN

D(5)<=UA5;

D(4)<=UA4;

D(3)<=UA3;

D

(2)<=UA2;

D

(1)<=UA1;

D(0)<=UA0;

ENDA;

 

 

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYF2IS

PORT(

D:

INSTD_LOGIC_VECTOR(5DOWNTO0);

UA5,UA4,UA3,UA2,UA1,UA0:

OUTSTD_LOGIC

);

ENDF2;

ARCHITECTUREAOFF2IS

BEGIN

UA5<=D(5);

UA4<=D(4);

UA3<=D(3);

UA2<=D

(2);

UA1<=D

(1);

UA0<=D(0);

ENDA;

 

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCONTROMIS

PORT(ADDR:

INSTD_LOGIC_VECTOR(5DOWNTO0);

UA:

OUTSTD_LOGIC_VECTOR(5DOWNTO0);

O:

OUTSTD_LOGIC_VECTOR(19DOWNTO0)

);

ENDCONTROM;

ARCHITECTUREAOFCONTROMIS

SIGNALDATAOUT:

STD_LOGIC_VECTOR(25DOWNTO0);

BEGIN

PROCESS

BEGIN

CASEADDRIS

WHEN"000000"=>DATAOUT<="11010010001111110110000000";

WHEN"000001"=>DATAOUT<="10001010001111111000000000";

WHEN"000010"=>DATAOUT<="10001110100111111100000000";

WHEN"000011"=>DATAOUT<="10000110011111111100000000";

WHEN"000100"=>DATAOUT<="10000010001111111001000000";

WHEN"000101"=>DATAOUT<="10001010001011111100000000";

WHEN"000110"=>DATAOUT<="01000010001111111000000000";

WHEN"000111"=>DATAOUT<="10001111000111111100000000";

WHEN"001000"=>DATAOUT<="10001011010111111100000000";

WHEN"001001"=>DATAOUT<="10000000001101111100000000";

WHEN"010000"=>DATAOUT<="01000010001111111000000000";

WHENOTHERS=>DATAOUT<="10000010001111111100000000";

ENDCASE;

UA(5DOWNTO0)<=DATAOUT(5DOWNTO0);

O(19DOWNTO0)<=DATAOUT(25DOWNTO6);

ENDPROCESS;

ENDA;

 

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYF3IS

PORT(

D:

INSTD_LOGIC_VECTOR(3DOWNTO0);

UA3,UA2,UA1,UA0:

OUTSTD_LOGIC

);

ENDF3;

ARCHITECTUREAOFF3IS

BEGIN

UA3<=D(3);

UA2<=D

(2);

UA1<=D

(1);

UA0<=D(0);

ENDA;

 

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYMCOMMANDIS

PORT(

T2,T3,T4:

INSTD_LOGIC;

D:

INSTD_LOGIC_VECTOR(19DOWNTO0);

LOAD,LDPC,LDAR,LDIR,LDRI,LDPSW,RS_B,S2,S1,S0:

OUTSTD_LOGIC;

ALU_B,SW_B,LED_B,RD_D,CS_D,RAM_B,CS_I,ADDR_B,P1,P2:

OUTSTD_LOGIC

);

ENDMCOMMAND;

ARCHITECTUREAOFMCOMMANDIS

SIGNALDATAOUT:

STD_LOGIC_VECTOR(19DOWNTO0);

BEGIN

PROCESS(T2)

BEGIN

IF(T2'EVENTANDT2='1')THEN

DATAOUT(19DOWNTO0)<=D(19DOWNTO0);

ENDIF;

LOAD<=DATAOUT(19);

LDPC<=DATAOUT(18)ANDT4;

LDAR<=DATAOUT(17)ANDT3;

LDIR<=DATAOUT(16)ANDT3;

LDRI<=DATAOUT(15)ANDT4;

LDPSW<=DATAOUT(14)ANDT4;

RS_B<=DATAOUT(13);

S2<=DATAOUT(12);

S1<=DATAOUT(11);

S0<=DATAOUT(10);

ALU_B<=DATAOUT(9);

SW_B<=DATAOUT(8);

LED_B<=DATAOUT(7);

RD_D<=NOT(NOTDATAOUT(6)AND(T2ORT3));

CS_D<=NOT(NOTDATAOUT(5)ANDT3);

RAM_B<=DATAOUT(4);

CS_I<=DATAOUT(3);

ADDR_B<=DATAOUT

(2);

P1<=DATAOUT

(1);

P2<=DATAOUT(0);

ENDPROCESS;

ENDA;

Top顶层图的:

MUX3功能表

输入输出

SW-BCSID[7..0]N1[7..0]N2[7..0]EW[7..0]

0XXXXIN[7..0]

10XXXN2[7..0]

11XXXN1[7..0]

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMUX3IS

PORT(

ID:

INSTD_LOGIC_VECTOR(7DOWNTO0);

SW_B,CS:

INSTD_LOGIC;

N1,N2:

INSTD_LOGIC_VECTOR(7DOWNTO0);

EW:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);

ENDMUX3;

ARCHITECTUREAOFMUX3IS

BEGIN

PROCESS(SW_B,CS)

BEGIN

IF(SW_B='0')THEN

EW<=ID;

ELSIF(CS='0')THEN

EW<=N2;

ELSE

EW<=N1;

ENDIF;

ENDPROCESS;

ENDA;

 

ROM功能

CS=1,不选择

CS=0,读

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

"0001000111111111"WHENADDR="00000001"ANDCS_I='0'ELSE

"0001001000000101"WHENADDR="00000010"ANDCS_I='0'ELSE

"0010000000000000"WHENADDR="00000011"ANDCS_I='0'ELSE

"0011100000000000"WHENADDR="00000100"ANDCS_I='0'ELSE

"0100000000001100"WHENADDR="00000101"ANDCS_I='0'ELSE

"0101001100000000"WHENADDR="00000110"ANDCS_I='0'ELSE

"0011110100000000"

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2