计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx

上传人:b****5 文档编号:16195952 上传时间:2022-11-21 格式:DOCX 页数:31 大小:674.71KB
下载 相关 举报
计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx_第1页
第1页 / 共31页
计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx_第2页
第2页 / 共31页
计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx_第3页
第3页 / 共31页
计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx_第4页
第4页 / 共31页
计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx

《计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。

计算机组成原理课程设计报告桂林电子科技大学Word格式文档下载.docx

输入设备→Rd

JNSaddr

0100

addr

若大于,则addr→PC

JMPaddr

0110

addr→PC

OUT1Rs

1001

(Rs)→输出设备

MOV1Rs,Rd

1000

(Rs)→Rd

NOTRd

0111

Data取反

指令格式:

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

I说明:

对Rs和Rd的规定:

Rs或Rd

选定的寄存器

00

R0

01

R1

10

R2

11

R3

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

00

PC→ABUS(I)

RDROM

IBUS→IR

PC+1

P

(1)

MOV1

OUT1

IN1

MOV

NOT

JMP

JNS

CMP

INC

03

02

09

08

01

07

O6

05

04

Rs→X

-X→Rs

锁存CF,ZF

Rd→Y

Y+1→Rd

IR(I)→Rd

Rs→LED

X→Rd

IR(A)

→PC

SW→Rd

20

P

(2)

CF=1

ZF=1

CF=0

ZF=0

10

ROM→BUS

BUS→PC

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

(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

后继微地址

1

000010

000000

000001

000011

000100

06

100000

010010

010100

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

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

由于微地址寄存器中的触发器异步置“1”端低电平有效,与µ

A4~µ

A0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:

(µ

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

SE5=FS·

P

(2)·

T4

SE4=I7·

P

(1)·

SE3=I6·

SE2=I5·

SE1=I4·

六.嵌入式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

八.机器语言源程序

地址(十六进制)

汇编语言源程序

机器语言源程序

代码

MOVR0,00H

0001000000000000

MOVR1,FFH

0001000111111111

11FF

MOVR2,05H

0001001000000101

1025

L0:

INCR0

0010000000000000

2000

CMPR0,R2

0011100000000000

3800

JNSL3

0100000000001100

400C

IN1R3

0101001100000000

5300

CMPR3,R1

0011110100000000

3D00

JNSL2

0100000000001010

400A

JMPL1

0110000000000011

6003

0A

L1:

MOV1R1,R3

1000110100000000

8D00

0B

JMPL0

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:

D:

CLR:

UA:

OUTSTD_LOGIC

);

ENDMMM;

ARCHITECTUREAOFMMMIS

BEGIN

PROCESS(CLR,SE,CLK)

BEGIN

IF(CLR='

0'

)THEN

UA<

='

;

ELSIF(SE='

)THEN

1'

ELSIF(CLK'

EVENTANDCLK='

=D;

ENDIF;

ENDPROCESS;

ENDA;

CROM的:

ADDR

ENTITYADDRIS

I15,I14,I13,I12:

ZF,CF,T4,P1,P2:

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

OUTSTD_LOGIC

ENDADDR;

ARCHITECTUREAOFADDRIS

SE5<

--预留给JB或JAE指令使用

SE4<

=NOT((NOTZFANDCF)ANDP2ANDT4);

SE3<

=NOT(I15ANDP1ANDT4);

SE2<

=NOT(I14ANDP1ANDT4);

SE1<

=NOT(I13ANDP1ANDT4);

SE0<

=NOT(I12ANDP1ANDT4);

ENTITYF1IS

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

INSTD_LOGIC;

OUTSTD_LOGIC_VECTOR(5DOWNTO0)

ENDF1;

ARCHITECTUREAOFF1IS

D(5)<

=UA5;

D(4)<

=UA4;

D(3)<

=UA3;

D

(2)<

=UA2;

D

(1)<

=UA1;

D(0)<

=UA0;

ENTITYF2IS

INSTD_LOGIC_VECTOR(5DOWNTO0);

OUTSTD_LOGIC

);

ENDF2;

ARCHITECTUREAOFF2IS

UA5<

=D(5);

UA4<

=D(4);

UA3<

=D(3);

UA2<

=D

(2);

UA1<

=D

(1);

UA0<

=D(0);

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCONTROMIS

PORT(ADDR:

INSTD_LOGIC_VECTOR(5DOWNTO0);

OUTSTD_LOGIC_VECTOR(5DOWNTO0);

O:

OUTSTD_LOGIC_VECTOR(19DOWNTO0)

ENDCONTROM;

ARCHITECTUREAOFCONTROMIS

SIGNALDATAOUT:

STD_LOGIC_VECTOR(25DOWNTO0);

BEGIN

PROCESS

CASEADDRIS

WHEN"

000000"

=>

DATAOUT<

="

11010010001111110110000000"

000001"

10001010001111111000000000"

000010"

10001110100111111100000000"

000011"

10000110011111111100000000"

000100"

10000010001111111001000000"

000101"

10001010001011111100000000"

000110"

01000010001111111000000000"

000111"

10001111000111111100000000"

001000"

10001011010111111100000000"

001001"

10000000001101111100000000"

010000"

WHENOTHERS=>

10000010001111111100000000"

ENDCASE;

UA(5DOWNTO0)<

=DATAOUT(5DOWNTO0);

O(19DOWNTO0)<

=DATAOUT(25DOWNTO6);

ENTITYF3IS

INSTD_LOGIC_VECTOR(3DOWNTO0);

UA3,UA2,UA1,UA0:

ENDF3;

ARCHITECTUREAOFF3IS

ENTITYMCOMMANDIS

T2,T3,T4:

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:

ENDMCOMMAND;

ARCHITECTUREAOFMCOMMANDIS

STD_LOGIC_VECTOR(19DOWNTO0);

PROCESS(T2)

IF(T2'

EVENTANDT2='

)THEN

DATAOUT(19DOWNTO0)<

=D(19DOWNTO0);

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);

Top顶层图的:

MUX3功能表

输入输出

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

0XXXXIN[7..0]

10XXXN2[7..0]

11XXXN1[7..0]

ENTITYMUX3IS

ID:

INSTD_LOGIC_VECTOR(7DOWNTO0);

SW_B,CS:

N1,N2:

EW:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

ENDMUX3;

ARCHITECTUREAOFMUX3IS

PROCESS(SW_B,CS)

BEGIN

IF(SW_B='

)THEN

EW<

=ID;

ELSIF(CS='

EW<

=N2;

ELSE

=N1;

ENDIF;

ROM功能

CS=1,不选择

CS=0,读

ENTITYROMIS

DOUT:

OUTSTD_LOGIC_VECTOR(15DOWNTO0);

ADDR:

CS_I:

INSTD_LOGIC

ENDROM;

ARCHITECTUREAOFROMIS

DOUT<

0001000000000000"

WHENADDR="

00000000"

ANDCS_I='

"

0001000111111111"

00000001"

A

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

当前位置:首页 > 工程科技 > 信息与通信

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

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