青岛理工大学通用寄存器组设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

青岛理工大学
实验报告
实验课程:计算机组成原理I Array实验日期:2014年10月15日,交报告日期:2014年11月日,成绩:
实验地点:现代教育技术中心305(计算机实验室)
计算机工程学院,计算机科学与技术专业,班级:计算122班
实验指导教师:龚玉玺批阅教师:龚玉玺
一、实验课题
一、主要元件设计
1.16位寄存器
功能要求:同步并行置数,异步复位(清零),三态输出,片选信号,读/写控制。

2.地址译码器
功能要求:3-8译码器
二、顶层设计
用层次结构设计的方法设计一个通用寄存器组。

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

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

每个都可以(用地址)独立访问
三、仿真
设计仿真波形数据,要考虑到所有可能的情况。

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

四、深入的课题
①上面设计的通用寄存器组,每次只能访问一个寄存器。

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

应该怎样设计
二、逻辑设计
端口说明:A(1-3):输入信号 S(1-3):使能端 Y(0-7):输出端口
功能表:
321逻辑函数:S A A A Y ⋅⋅⋅=)(0120,
S A A A Y ⋅⋅⋅=)(0121,S A A A Y ⋅⋅⋅=)(0122 S A A A Y ⋅⋅⋅=)(0123,S A A A Y ⋅⋅⋅=)(0124,S A A A Y ⋅⋅⋅=)(0125 S A A A Y ⋅⋅⋅=)(0126,S A A A Y ⋅⋅⋅=)(0127
十六位寄存器系统框图
端口说明: A(0-15):输入 D(0-15):输出 Clk:时钟信号
r,chip,z:分别是异步清零信号,片选信号,三态输出 rw,:分别是读写控制信号
功能表:
十六位寄存器组系统框图
端口说明: AI(0-3):给译码器的输入
z,r,clk,rw:分别是三态输出,异步置零,时钟,读写控制 A(0-15):数据输入 D(0-15):数据输出
十六位寄存器逻辑图
1、3-8译码器:
--Decode
library ieee;
use ieee.std_logic_1164.all;
entity decode is
port
(
s1,s2,s3: in std_logic;--使能端
A : in std_logic_vector(2 downto 0);--输入
Y : out std_logic_vector(7 downto 0)--输出
);
end decode;
architecture de_behave of decode is
signal s: std_logic;
begin
s<=s1 and (not s2) and (not s3);
Y(0)<=not( ((not A(2)) and (not A(1)) and (not A(0))) and s );
Y(1)<=not( ((not A(2)) and (not A(1)) and A(0)) and s);
Y(2)<=not( ((not A(2)) and A(1) and (not A(0))) and s );
Y(3)<=not( (not A(2) and A(1) and A(0)) and s);
Y(4)<=not( (A(2) and (not A(1)) and (not A(0))) and s);
Y(5)<=not( (A(2) and (not A(1)) and A(0)) and s);
Y(6)<=not( (A(2) and A(1) and (not A(0))) and s);
Y(7)<=not( (A(2) and A(1) and A(0)) and s);
end de_behave;
2、十六位寄存器:
--十六位寄存器
library ieee;
use ieee.std_logic_1164.all;
entity Sixteen_Register is
port
( --clk:时钟信号(上升沿有效)
--r:异步清零信号(高电平有效)
--chip:片选信号(低电平有效)
--z:三态门(z=1三态门打开)
--load:同步置数信号
--rw:读写控制信号rw = 1 is Read ,or is Write
clk,r,chip,z,rw : in std_logic ;
a : in std_logic_vector(15 downto 0);
d : out std_logic_vector(15 downto 0)
);
end Sixteen_Register;
architecture behave of Sixteen_Register is
signal sign : std_logic_vector(15 downto 0);--中间信号begin
process(clk,r,chip,z,rw)
begin
if chip = '0' then --片选信号有效时候
if r = '1' then --异步置零
sign <= (others=>'0');
elsif rising_edge(clk) then --clk上升沿
if rw = '1' then
d <= sign;
else --时钟上升沿,写
sign<=a;
end if;
if z = '0' then
d<=(others=>'Z');
end if;
end if;
else
d<=(others=>'Z');
end if;
end process;
end behave;3、十六位寄存器组
--通用寄存器组
library ieee;
use ieee.std_logic_1164.all;
entity Sixteen_Register_group is
port(
--A是选择信号,端口和3-8译码器相连
--clk是时钟信号
--load是同步置数控制端
--rw是读写控制
--r异步清零
--load:同步置数信号
--z三态门
--a输入
--d输出
s1,s2,s3 : in std_logic;
AI : in std_logic_vector(2 downto 0);
clk,rw,r,z: in std_logic;
a : in std_logic_vector(15 downto 0);
d : out std_logic_vector(15 downto 0)
);
end Sixteen_Register_Group;
architecture struct of Sixteen_Register_Group is
signal Y : std_logic_vector(7 downto 0);--暂时存储3-8译码器产生的信号
component Sixteen_Register --十六位寄存器元件说明
port
( --clk:时钟信号(上升沿有效)
--r:异步清零信号(高电平有效)
--chip:片选信号(低电平有效)
--z:三态门(z=1三态门打开)
--load:同步置数信号
--rw:读写控制信号rw = 1 is Read ,or is Write
clk,r,chip,z,rw : in std_logic ;
a : in std_logic_vector(15 downto 0);
d : out std_logic_vector(15 downto 0)
);
end component;
component decode --3-8译码器元件说明
port
(
s1,s2,s3: in std_logic;--使能端
A : in std_logic_vector(2 downto 0);--输入
Y : out std_logic_vector(7 downto 0)--输出
);
end component;
begin
--3-8译码器的一次例化
TEdecode: decode port map
(A=>AI , Y=>Y,s1=>s1,s2=>s2,s3=>s3);
--十六位寄存器的例化
G0:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(0),a=>a,d=>d);
G1:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(1),a=>a,d=>d);
G2:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(2),a=>a,d=>d);
G3:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(3),a=>a,d=>d);
G4:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(4),a=>a,d=>d);
G5:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(5),a=>a,d=>d);
G6:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(6),a=>a,d=>d);
G7:Sixteen_Register port map
(clk=>clk,r=>r,z=>z,rw=>rw,chip=>Y(7),a=>a,d=>d);
end struct;
四、仿真设计
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、十六位寄存器组的仿真结果:
当片选第一片寄存器时的仿真图:
结果讨论:在片选信号选择第一片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。

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

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

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

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

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

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

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

相关文档
最新文档