1、寄存器组青岛理工大学实 验 报 告实验课程: 计算机组成原理I 实验日期: 2013 年 10月15日, 交报告日期:2013 年10月30日,成绩:实验地点:现代教育技术中心101(计算机实验室)计算机工程 学院,计算机科学与技术 专业, 班级:计算112班 实验指导教师:盛建伦 批阅教师:同组学生姓名任师锋秦世帅学号201107063201107061一、实验课题 一、主要元件设计 116位寄存器 功能要求:同步并行置数,异步复位(清零),三态输出,片选信号,读/写控制。 2地址译码器功能要求:3-8译码器二、顶层设计 用层次结构设计的方法设计一个通用寄存器组。包括8个16位寄存器,1个地
2、址译码器等元件。 功能要求:每个寄存器能够同步并行置数,异步复位(清零),三态输出。每个都可以(用地址)独立访问三、仿真 设计仿真波形数据,要考虑到所有可能的情况。在实验报告中必须清楚说明仿真波形数据是怎样设计的。 四、深入的课题 上面设计的通用寄存器组,每次只能访问一个寄存器。如果想同时访问两个寄存器,应该怎样设计? 16位的寄存器每次读/写都是一个16位字,如果需要写入的是8位的字,即将8位的字写到16位寄存器的高8位或低8位(例如,16位寄存器A由AH和AL两个8位的寄存器组成),读出时,可一次读16位。应该怎样设计S3S2S1二、逻辑设计 地址译码器(3-8译码器)系统框图3-8译码器
3、A2A3A1 Y7Y0端口说明:A(1-3):输入信号 S(1-3):使能端 Y(0-7):输出端口 功能表:输 入输 入Y0Y1Y2Y3Y4Y5Y6Y7A1A211111011111011110111101111101111111011001010A3101111101011100110011111111111011011011111111当s=1的时候3-8译码器工作逻辑函数:, , ,十六位寄存器系统框图z十六位寄存器chiprwrClk D0D0A15 A0端口说明:A(0-15):输入D(0-15):输出Clk:时钟信号r,chip,z:分别是异步清零信号,片选信号,三态输出rw,:
4、分别是读写控制信号功能表:10000clkChiprwz说明rX三态门关闭写入寄存器0X0读1异步清零X1X不工作XXXX1X000X十六位寄存器组系统框图AI0s0AI1S1十六位寄存器AI2S2zrwrClkD0D0A15 A0端口说明:S(0-2):使能端 AI(0-3):给译码器的输入 z,r,clk,rw:分别是三态输出,异步置零,时钟,读写控制 A(0-15):数据输入 D(0-15):数据输出 十六位寄存器逻辑图S1Y6Y7S2S33-8译码器AADClkClk。A1A3A2。十六位寄存器。十六位寄存器十六位寄存器DDrwrwrwrrrClkZZZA输出数据流输入数据流三、VHD
5、L程序1、3-8译码器:-Decodelibrary ieee;use ieee.std_logic_1164.all;entity decode isport( 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
6、)=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)
7、; 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 isport ( -clk:时钟信号(上升沿有效) -r:异步清零信号(高电平有效) -chip:片选信号(低电平有效) -z:三态门(z=1三态门打开) -load:同步置数信号 -rw:读写控制信号 rw = 1 is Rea
8、d ,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 issignal sign : std_logic_vector(15 downto 0);-中间信号begin process(clk,r,chip,z,rw) begin if chip = 0 then -片选信号有效时
9、候 if r = 1 then -异步置零 sign 0); elsif rising_edge(clk) then -clk上升沿 if rw = 1 then d = sign; else -时钟上升沿,写 sign=a; end if; if z = 0 then dZ); end if; end if; else dZ); end if; end process;end behave;3、十六位寄存器组-通用寄存器组library ieee;use ieee.std_logic_1164.all;entity Sixteen_Register_group is port( -A是选择信
10、号,端口和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
11、 Sixteen_Register_Group issignal 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_ve
12、ctor(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,s
13、3=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,
14、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 str
15、uct;四、仿真设计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
16、=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。(读出数
17、据,用来验证写入功能的正确性)。令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来代替的,它有可能使你和三态输出混淆,但是我实在不知道,该用什么样的数据来表示寄存器的不工作状态。
18、十六位寄存器组仿真设计:对十六位寄存器组,共有8个寄存器。每一个寄存器都要进行功能验证,一、为了验证译码器的正确性;二、为了验证每个寄存器的功能是否都正确。(实际上这些寄存器都是由一个模板复制而来,之所以每个都进行验证是为了查看每个组件之间的连接是否正确)。按照十六位寄存器的仿真设计,对每一种片选信号都进行十六位寄存器的仿真。五、结果分析讨论1、3-8译码器功能仿真结果:结果讨论:从仿真图可以看出对于每种输入,都可以得到和功能表一致的结果。故3-8译码器设计是正确的。2、十六位寄存器仿真结果:结果讨论:从仿真图可以看出对于精心选择的数据,都输出了正确的结果。因此可以断定该十六位寄存器的设计是正
19、确的。3、十六位寄存器组的仿真结果:当片选第一片寄存器时的仿真图:结果讨论:在片选信号选择第一片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。当片选信号选择第二篇寄存器的仿真图:结果讨论:在片选信号选择第二片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果当片选信号选择第三篇寄存器的仿真图:结果讨论:在片选信号选择第三片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。当片选信号选择第四篇寄存器的仿真图:结果讨论:在片选信号选择第四片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。当片选信号选择第五篇寄存器的仿真图:结果讨论:在片选信号选择第五片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。当片选信号选择第六篇寄存器的仿真图:结果讨论:在片选信号选择第六片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。当片选信号选择第七篇寄存器的仿真图:结果讨论:在片选信号选择第七片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。当片选信号选择第八篇寄存器的仿真图:结果讨论:在片选信号选择第八片寄存器下,从仿真图可以看出对于精心选择的数据,都输出了正确的结果。综合上面的结果分析,可以推断出该十六位寄存器组的设计基本是正确的。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2