青岛理工大学通用寄存器组设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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