寄存器组.docx

上传人:b****8 文档编号:9482150 上传时间:2023-05-19 格式:DOCX 页数:24 大小:139.53KB
下载 相关 举报
寄存器组.docx_第1页
第1页 / 共24页
寄存器组.docx_第2页
第2页 / 共24页
寄存器组.docx_第3页
第3页 / 共24页
寄存器组.docx_第4页
第4页 / 共24页
寄存器组.docx_第5页
第5页 / 共24页
寄存器组.docx_第6页
第6页 / 共24页
寄存器组.docx_第7页
第7页 / 共24页
寄存器组.docx_第8页
第8页 / 共24页
寄存器组.docx_第9页
第9页 / 共24页
寄存器组.docx_第10页
第10页 / 共24页
寄存器组.docx_第11页
第11页 / 共24页
寄存器组.docx_第12页
第12页 / 共24页
寄存器组.docx_第13页
第13页 / 共24页
寄存器组.docx_第14页
第14页 / 共24页
寄存器组.docx_第15页
第15页 / 共24页
寄存器组.docx_第16页
第16页 / 共24页
寄存器组.docx_第17页
第17页 / 共24页
寄存器组.docx_第18页
第18页 / 共24页
寄存器组.docx_第19页
第19页 / 共24页
寄存器组.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

寄存器组.docx

《寄存器组.docx》由会员分享,可在线阅读,更多相关《寄存器组.docx(24页珍藏版)》请在冰点文库上搜索。

寄存器组.docx

寄存器组

青岛理工大学

实验报告

实验课程:

计算机组成原理I

实验日期:

2013年10月15日,交报告日期:

2013年10月30日,成绩:

实验地点:

现代教育技术中心101(计算机实验室)

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

计算112班

实验指导教师:

盛建伦批阅教师:

同组学生

姓名

任师锋

秦世帅

学号

201107063

201107061

一、实验课题

一、主要元件设计

1.16位寄存器

功能要求:

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

2.地址译码器

功能要求:

3-8译码器

二、顶层设计

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

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

功能要求:

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

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

三、仿真

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

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

四、深入的课题

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

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

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

应该怎样设计

S3

S2

S1

二、逻辑设计

地址译码器(3-8译码器)系统框图

3-8译码器

A2

A3

A1

……

Y7

Y0

端口说明:

A(1-3):

输入信号

S(1-3):

使能端

Y(0-7):

输出端口

功能表:

输入

输入

Y0

Y1

Y2

Y3

Y4

Y5

Y6

Y7

A1

A2

1

1

1

1

1

0

1

1

1

1

1

0

1

1

1

1

0

1

1

1

1

0

1

1

1

1

1

0

1

1

1

1

1

1

1

0

1

1

0

0

1

0

1

0

A3

1

0

1

1

1

1

1

0

1

0

1

1

1

0

0

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

0

1

1

0

1

1

0

1

1

1

1

1

1

1

1

当s=1的时候3-8译码器工作

逻辑函数:

十六位寄存器系统框图

z

十六位寄存器

chip

rw

r

Clk

……

D0

D0

A15

……

A0

端口说明:

A(0-15):

输入

D(0-15):

输出

Clk:

时钟信号

r,chip,z:

分别是异步清零信号,片选信号,三态输出

rw,:

分别是读写控制信号

功能表:

1

0

0

0

0

clk

Chip

rw

z

说明

r

X

三态门关闭

写入寄存器

0

X

0

1

异步清零

X

1

X

不工作

X

X

X

X

1

X

0

0

0

X

十六位寄存器组系统框图

AI0

s0

AI1

S1

十六位寄存器

AI2

S2

z

rw

r

Clk

D0

D0

A15

……

A0

端口说明:

S(0-2):

使能端

AI(0-3):

给译码器的输入

z,r,clk,rw:

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

A(0-15):

数据输入

D(0-15):

数据输出

 

十六位寄存器逻辑图

S1

Y6

Y7

S2

S3

3-8

译码器

A

A

D

Clk

Clk

A1

A3

A2

十六位寄存器

十六位寄存器

十六位寄存器

D

D

rw

rw

rw

r

r

r

Clk

Z

Z

Z

A

输出数据流

输入数据流

三、VHDL程序

1、3-8译码器:

--Decode

libraryieee;

useieee.std_logic_1164.all;

entitydecodeis

port

s1,s2,s3:

instd_logic;--使能端

A:

instd_logic_vector(2downto0);--输入

Y:

outstd_logic_vector(7downto0)--输出

);

enddecode;

architecturede_behaveofdecodeis

signals:

std_logic;

begin

s<=s1and(nots2)and(nots3);

Y(0)<=not(((notA

(2))and(notA

(1))and(notA(0)))ands);

Y

(1)<=not(((notA

(2))and(notA

(1))andA(0))ands);

Y

(2)<=not(((notA

(2))andA

(1)and(notA(0)))ands);

Y(3)<=not((notA

(2)andA

(1)andA(0))ands);

Y(4)<=not((A

(2)and(notA

(1))and(notA(0)))ands);

Y(5)<=not((A

(2)and(notA

(1))andA(0))ands);

Y(6)<=not((A

(2)andA

(1)and(notA(0)))ands);

Y(7)<=not((A

(2)andA

(1)andA(0))ands);

endde_behave;

2、十六位寄存器:

--十六位寄存器

libraryieee;

useieee.std_logic_1164.all;

entitySixteen_Registeris

port

(--clk:

时钟信号(上升沿有效)

--r:

异步清零信号(高电平有效)

--chip:

片选信号(低电平有效)

--z:

三态门(z=1三态门打开)

--load:

同步置数信号

--rw:

读写控制信号rw=1isRead,orisWrite

clk,r,chip,z,rw:

instd_logic;

a:

instd_logic_vector(15downto0);

d:

outstd_logic_vector(15downto0)

);

endSixteen_Register;

architecturebehaveofSixteen_Registeris

signalsign:

std_logic_vector(15downto0);--中间信号

begin

process(clk,r,chip,z,rw)

begin

ifchip='0'then--片选信号有效时候

ifr='1'then--异步置零

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

elsifrising_edge(clk)then--clk上升沿

ifrw='1'then

d<=sign;

else--时钟上升沿,写

sign<=a;

endif;

ifz='0'then

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

endif;

endif;

else

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

endif;

endprocess;

endbehave;3、十六位寄存器组

--通用寄存器组

libraryieee;

useieee.std_logic_1164.all;

entitySixteen_Register_groupis

port(

--A是选择信号,端口和3-8译码器相连

--clk是时钟信号

--load是同步置数控制端

--rw是读写控制

--r异步清零

--load:

同步置数信号

--z三态门

--a输入

--d输出

s1,s2,s3:

instd_logic;

AI:

instd_logic_vector(2downto0);

clk,rw,r,z:

instd_logic;

a:

instd_logic_vector(15downto0);

d:

outstd_logic_vector(15downto0)

);

endSixteen_Register_Group;

architecturestructofSixteen_Register_Groupis

signalY:

std_logic_vector(7downto0);--暂时存储3-8译码器产生的信号

componentSixteen_Register--十六位寄存器元件说明

port

(--clk:

时钟信号(上升沿有效)

--r:

异步清零信号(高电平有效)

--chip:

片选信号(低电平有效)

--z:

三态门(z=1三态门打开)

--load:

同步置数信号

--rw:

读写控制信号rw=1isRead,orisWrite

clk,r,chip,z,rw:

instd_logic;

a:

instd_logic_vector(15downto0);

d:

outstd_logic_vector(15downto0)

);

endcomponent;

componentdecode--3-8译码器元件说明

port

s1,s2,s3:

instd_logic;--使能端

A:

instd_logic_vector(2downto0);--输入

Y:

outstd_logic_vector(7downto0)--输出

);

endcomponent;

begin

--3-8译码器的一次例化

TEdecode:

decodeportmap

(A=>AI,Y=>Y,s1=>s1,s2=>s2,s3=>s3);

--十六位寄存器的例化

G0:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(0),a=>a,d=>d);

G1:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y

(1),a=>a,d=>d);

G2:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y

(2),a=>a,d=>d);

G3:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(3),a=>a,d=>d);

G4:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(4),a=>a,d=>d);

G5:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(5),a=>a,d=>d);

G6:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(6),a=>a,d=>d);

G7:

Sixteen_Registerportmap

(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(7),a=>a,d=>d);

endstruct;

四、仿真设计

3-8译码器仿真设计:

从它的功能表可以知道输入的数据是有限的且只有八组。

故可以按照功能表对全部数据进行仿真。

故仿真数据,大可以参考前边列出的功能表。

十六位寄存器仿真设计:

验证无工作状态功能:

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

验证异步清零功能:

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

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

验证写入寄存器的功能:

使chip=‘0’且clk处于上升沿,r=‘0’,rw=0。

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

验证读功能:

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

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

仿真数据:

(一个句号分割一组数据,不全的数据,则用仿真中的默认数据代替)

令chip=1。

令r=1。

(异步清零)

令chip=‘0’,clk处于上升沿,r=0,z=1,rw=‘1’。

(读出数据)

令chip=0,clk处于上升沿,r=0,z=1,rw=‘0。

(写入数据)这里有一点奇怪的地方是,写入数据时z=1,即三态门打开了。

其实读或者写入数据是由rw控制的,此处设置此数据的目的在于验证程序的正确性。

即:

三态的数据是由z控制的而不是其他信号。

令chip=‘0’,clk处于上升沿,r=0,z=1,rw=‘1’。

(读出数据,用来验证写入功能的正确性)。

令chip=0,r=1,z=1。

验证清零功能,它应该是不受三态输出的影响的。

令chip=‘0’,clk处于上升沿,r=0,z=1,rw=‘1’。

(读出数据,读出的数据应该为全零)

令chip=0,r=0,z=0,rw=0,验证三态门,和写入寄存器的功能。

输出应该是高祖态。

令chip=‘0’,clk处于上升沿,r=0,z=1,rw=‘1’。

(读出数据)读出的数据应该和之前写入的数据一致。

对于以上仿真,每种情况可多输入几组数据,以尽可能避免偶然误差。

注意:

对于chip不工作状态,我是用Z来代替的,它有可能使你和三态输出混淆,但是我实在不知道,该用什么样的数据来表示寄存器的不工作状态。

十六位寄存器组仿真设计:

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

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

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

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

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

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

五、结果分析讨论

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

结果讨论:

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

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

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

结果讨论:

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

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

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

当片选第一片寄存器时的仿真图:

结果讨论:

在片选信号选择第一片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

当片选信号选择第二篇寄存器的仿真图:

结果讨论:

在片选信号选择第二片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果

当片选信号选择第三篇寄存器的仿真图:

结果讨论:

在片选信号选择第三片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

当片选信号选择第四篇寄存器的仿真图:

结果讨论:

在片选信号选择第四片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

当片选信号选择第五篇寄存器的仿真图:

结果讨论:

在片选信号选择第五片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

当片选信号选择第六篇寄存器的仿真图:

结果讨论:

在片选信号选择第六片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

当片选信号选择第七篇寄存器的仿真图:

结果讨论:

在片选信号选择第七片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

当片选信号选择第八篇寄存器的仿真图:

结果讨论:

在片选信号选择第八片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

综合上面的结果分析,可以推断出该十六位寄存器组的设计基本是正确的。

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

当前位置:首页 > 初中教育 > 科学

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

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