计算机组成原理第二次上机实验报告.docx

上传人:b****7 文档编号:9719062 上传时间:2023-02-06 格式:DOCX 页数:15 大小:137.32KB
下载 相关 举报
计算机组成原理第二次上机实验报告.docx_第1页
第1页 / 共15页
计算机组成原理第二次上机实验报告.docx_第2页
第2页 / 共15页
计算机组成原理第二次上机实验报告.docx_第3页
第3页 / 共15页
计算机组成原理第二次上机实验报告.docx_第4页
第4页 / 共15页
计算机组成原理第二次上机实验报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

计算机组成原理第二次上机实验报告.docx

《计算机组成原理第二次上机实验报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理第二次上机实验报告.docx(15页珍藏版)》请在冰豆网上搜索。

计算机组成原理第二次上机实验报告.docx

计算机组成原理第二次上机实验报告

青岛理工大学

实验报告

实验课程:

计算机组成原理I

实验日期:

2015年10月23日,交报告日期:

2015年11月2日,成绩:

实验地点:

现代教育技术中心303

计算机工程学院,计算机科学与技术专业,班级:

计算132班

实验指导教师:

林孟达批阅教师:

林孟达

同组学生

姓名

学号

一、实验课题及内容

按照题目要求设计一个通用寄存器组的逻辑,决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。

实验内容:

一、主要元件设计

1.16位寄存器

功能要求:

同步并行置数,异步复位(清零),三态输出,片选信号,读/写控制。

2.地址译码器

功能要求:

3-8译码器。

二、顶层设计

用层次结构设计的方法设计一个通用寄存器组。

包括8个16位寄存器,1个地址译码器等元件。

功能要求:

每个寄存器能够同步并行置数,异步复位(清零),三态输出。

每个都可以(用地址)独立访问。

三、仿真

设计仿真波形数据,要考虑到所有可能的情况。

在实验报告中必须清楚说明仿真波形数据是怎样设计的。

四、深入的课题

①上面设计的通用寄存器组,每次只能访问一个寄存器。

如果想同时访问两个寄存器,应该怎样设计?

②16位的寄存器每次读/写都是一个16位字,如果需要写入的是8位的字,即将8位的字写到16位寄存器的高8位或低8位(例如,16位寄存器A由AH和AL两个8位的寄存器组成),读出时,可一次读16位。

应该怎样设计?

 

二、逻辑设计

1、3-8译码器系统框图

 

 

 

端口说明:

a(2-0):

输入信号

S(2-0):

使能端,s0是高电平有效,s1,s2是低电平有效。

y(0-7):

输出端口

3-8译码器逻辑函数:

 

2、16位寄存器系统框图

 

端口说明:

d(0-15):

输入

q(0-15):

输出

cp,reset,chip,rw,z:

分别是时钟信号,异步清零信号,片选信号,读写控制信号,三态输出。

3、

通用寄存器组系统框图

 

通用寄存器组

 

端口说明:

d(0-15):

数据输入

q(0-15):

数据输出

a(0-2):

译码器的输入

s(0-2):

使能端控制

cp,z,reset,rw:

分别是时钟信号,三态输出,异步清零,读写控制

 

三、仿真设计

1、3-8译码器:

3-8译码器功能表

输入

输出

s0s1s2

a2a1a0

y7y6y5y4y3y2y1y0

100

100

100

100

100

100

100

100

000

001

010

011

100

101

110

111

11111110

11111101

11111011

11110111

11101111

11011111

10111111

01111111

从它的功能表可以知道输入的数据是有限的且只有八组,故可以按照功能表对全部数据进行仿真。

2、16位寄存器:

16位寄存器功能表

chip

cp

reset

z

rw

工作状态

1

不工作

0

1

异步清零(复位)

0

0

1

1

0

0

0

0

0

0

高阻态

根据功能表来输入各个端口验证各项功能。

(1)验证无工作状态功能:

令chip=‘1’,若输出为Z则说明其没有工作。

(2)验证异步清零功能:

使chip=‘0’且r=‘1’,接着使chip=‘0’,cp处于上升沿,reset=0,z=1,rw=‘1’。

若仿真结果是16个0则表明异步清零功能有效,且简洁验证了,读功能是正确的。

(3)验证写入寄存器的功能:

使chip=‘0’且cp处于上升沿,reset=‘0’,rw=0。

接着读出数据,若读出的数据是这之前写入寄存器的数据则表明写功能正确。

(4)验证读功能:

使chip=‘0’且cp处于上升沿,reset=‘0’,rw=‘1’。

若仿真的结果是之前写入寄存器的数据,则表明读功能是正确的。

3、十六位寄存器组:

对十六位寄存器组,共有8个寄存器。

每一个寄存器都要进行功能验证,一、为了验证译码

器的正确性;二、为了验证每个寄存器的功能是否都正确。

(实际上这些寄存器都是由一

个模板复制而来,之所以每个都进行验证是为了查看每个组件之间的连接是否正确)。

照十六位寄存器的仿真设计,对每一种片选信号都进行十六位寄存器的仿真。

四、实验步骤及工具

实验步骤:

1、逻辑设计

2、根据逻辑原理设计数据并得出理论结果

3、用VHDL语言编写程序

4、启动Quartus系统

5、建立一个工程

6、建立一个VHDL文件,输入源程序并检查错误

7、编译并修改语法错误

8、建立一个波形文件

9、功能仿真和时序仿真,修改逻辑错误,记录仿真波形

工具:

1、PC机

2、QuartusⅡ系统

五、结果分析讨论

1、3-8译码器功能仿真结果:

结果讨论:

从仿真图可以看出对于每种输入,都可以得到和功能表一致的结果。

故3-8译码器设计是正确的。

2、十六位寄存器仿真结果:

结果讨论:

从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

因此可以断定该十六位寄存器的设计是正确的。

3、十六位寄存器组的仿真结果:

各片寄存器的仿真图:

第一片:

第二片:

第三片:

第四片:

第五片:

第六片:

第七片:

第八片:

经过功能仿真,无论片选信号选择哪个寄存器时,由仿真图可知都能输出正确的结果,所以可以推断出该通用寄存器组的设计基本是正确的。

六、VHDL程序

--底层设计

libraryieee;--3-8译码器

useieee.std_logic_1164.all;

entityDecoderis

port(a:

instd_logic_vector(2downto0);

y:

outstd_logic_vector(7downto0);

s:

instd_logic_vector(2downto0));

endDecoder;

architecturebehaveofDecoderis

begin

process(s,a)

begin

ifs="100"then

ifa="000"theny<="11111110";

elsifa="001"theny<="11111101";

elsifa="010"theny<="11111011";

elsifa="011"theny<="11110111";

elsifa="100"theny<="11101111";

elsifa="101"theny<="11011111";

elsifa="110"theny<="10111111";

elsifa="111"theny<="01111111";

endif;

elsey<="00000000";

endif;

endprocess;

endbehave;

libraryieee;--16位寄存器

useieee.std_logic_1164.all;

entitySregisteris

port(cp,chip,rw,z,reset:

instd_logic;

d:

instd_logic_vector(15downto0);

q:

outstd_logic_vector(15downto0));

endSregister;

architecturebehave1ofSregisteris

signalsign:

std_logic_vector(15downto0);

begin

process(cp,chip,rw,z,reset)

begin

ifchip='0'then

ifreset='1'then

sign<=(others=>'0');

elsifrising_edge(cp)then

ifrw='1'then

q<=sign;

else

sign<=d;

endif;

ifz='0'then

q<=(others=>'Z');

endif;

endif;

else

q<=(others=>'Z');

endif;

endprocess;

endbehave1;

--顶层设计

libraryieee;--通用寄存器

useieee.std_logic_1164.all;

entityUsual_registeris

port(d:

instd_logic_vector(15downto0);

q:

outstd_logic_vector(15downto0);

z,reset,cp,rw:

instd_logic;

a:

instd_logic_vector(2downto0);

s:

instd_logic_vector(2downto0));

endUsual_register;

architecturebehave3ofUsual_registeris

signalY:

std_logic_vector(7downto0);

componentSregister

port(cp,reset,chip,z,rw:

instd_logic;

d:

instd_logic_vector(15downto0);

q:

outstd_logic_vector(15downto0));

endcomponent;

componentDecoder

port(a:

instd_logic_vector(2downto0);

y:

outstd_logic_vector(7downto0);

s:

instd_logic_vector(2downto0));

endcomponent;

begin

D0:

Decoderportmap

(a=>a,y=>y,s=>s);

G0:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y(0));

G1:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y

(1));

G2:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y

(2));

G3:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y(3));

G4:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y(4));

G5:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y(5));

G6:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y(6));

G7:

Sregisterportmap

(cp=>cp,z=>z,reset=>reset,rw=>rw,q=>q,d=>d,chip=>Y(7));

endbehave3;

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

当前位置:首页 > 人文社科 > 文学研究

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

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