当前位置:
文档之家› 计算机组成原理第三次实验报告
计算机组成原理第三次实验报告
7070
一、实验课题:
(1)主要元件设计 1.程序计数器
功能要求:8位二进制计数器,同步并行置数,同步复位(清零), 三态输出。
提示:注意程序计数器的“自动加一”功能。 2.数据寄存器 功能要求:8位,同步并行置数,双向三态输出。 3.地址寄存器 功能要求:8位,同步并行置数,三态输出。 4.指令寄存器 功能要求:8位,同步并行置数。 5.指令译码器 功能要求:3-8译码器。 (2)仿真 设计仿真波形数据,要考虑到所有可能的情况。在实验报告中必须清 楚说明仿真波形数据是怎样设计的。
load ,z ,clk : in std_logic; d : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0) ); end address_register;
architecture behave of address_register is signal iq : std_logic_vector(7 downto 0); begin
architecture behave of instruction_register is signal save : std_logic_vector(7 downto 0); begin
process(clk , load) begin if rising_edge(clk) and load='1' then
D7 D6 D5 D2 D4 D3 D1 D0 Load clk
指令译码器 8位指令寄存器
端口说明: clk:时钟信号 load:同步置数端口 d:输入端口 q:输入端口
5、指令译码器的设计: 指令译码器系统框图
Y0 Y1 Y2 Y4 Y7
Y6 Y5 Y3 A2 A1 A0
端口说明: A:指令码输入端,高电平有效 Y:指令码译码后的输出端。低电平有效。
入的数据,三态,上一次计数时的输出数据。 8位数据寄存器仿真设计:
数据寄存器的仿真设计的要点在于验证: 1、 能否从q、d端口分别读入数据,能否在三态门打开时正确输出寄 存器中的数据。 2、 三态门是否有效。
仿真数据: 1、 在clk上升是从d端口置入数据11111111,同时l同步置数端loadd 打开,loadq=0,zd=0,zq=0. 2、 下一个时钟上升沿:loadq=0,loadd=0,zd=0,zq=1. 3、 下一个时钟上升沿:loadq=0,loadd=0,zd=1,zq=0 4、 下一个时钟上升沿,从q端口置入数据11110000,通知同步置数端 loadq打开,loadd=0,zd=0,zq=0 5、 下一个时钟上升沿:loadd=0,loadq=0,zd=1,zq=1. 6、 下一个时钟上升沿:loadq=1,loadd=0,zd=1,z1=0(用于验证一端 输入一端输出发生的情况) 7、 下一个时钟上升沿:zd=1,z1=1,loadd=0,loadq=0
end if; if loadq = '1' and zq = '0' then
iq<=q; q<=(others=>'Z'); end if; end if; if zd = '0' then --三态门关闭
d<=(others=>'Z'); else d<=iq; end if; if zq = '0' then--三态门关闭
8位指令寄存器: library ieee; use ieee.std_logic_1164.all;
entity instruction_register is port (
clk ,load : in std_logic; d : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0) ); end instruction_register;
q<=(others=>'Z'); else q<=iq; end if; end process; end behave ;
8位地址寄存器 --address_register
library ieee; use ieee.std_logic_1164.all;
entity address_register is port ( --load同步并行置数 --z三态输出 z=1 is valide signal --d输入 --q输出
c<='Z'; q<=(others=>'Z'); end if; end process; end behave;
8位数据寄存器: --data register
library ieee; use ieee.std_logic_1164.all;
entity data_register is port ( --clk时钟信号 --zq控制q端口的三态 --zd控制d端口的三态 --load1,load2同步并行置数.loadd控制d,loadq控制q --d输入输出双向端口 --q输入输出端口
青岛理工大学
实验报告
实验课程: 计算机组成原理I
实验日期: 2013 年 11月3日, 交报告日期:2013 年11月22 日,成绩: 实验地点:现代教育技术中心101(计算机实验室) 计算机工程 学院,计算机科学与技术 专业, 班级:计算112
实验指导教师: 刘淑霞
批阅教师:
同组 姓 学生 名
学 号
architecture de_behave of decode is signal s: std_logic; begin
process(A) begin
case A is when "000"=> Y<="11111110"; when "001"=> Y<="11111101"; when "010"=> Y<="11111011"; when "011"=> Y<="11110111"; when "100"=> Y<="11101111"; when "101"=> Y<="11011111"; when "110"=> Y<="10111111"; when "111"=> Y<="01111111"; end case; end process; end de_behave;
8位地址寄存器的仿真设计:
地址寄存器的仿真设计要点在于验证: 1、 同步置数功能是否有效 2、 三态输出是否有效。
仿真数据: 1、 时钟上升沿d=11111111,load=1,z=0 2、 下一个时钟上升沿:load=0,d=00000001,z=0 3、 下一个时钟上升沿:load=1,d=00000010,z=0 4、 下一个时钟上升沿:load=1,d=00000011,z=1
save<=d; end if; q<=save; end process; end behave; 指令译码器(3-8译码器): --Decode library ieee; use ieee.std_logic_1164.all; entity decode is
port (
A : in std_logic_vector(2 downto 0);--输入 Y : out std_logic_vector(7 downto 0)--输出 ); end decode;
二、逻辑设计:
1、程序计数器的设计 8位程序计数器系统框图
Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 c
Z
r ld et clk D7 D6 D5 D3 D2 D1 D4 D0
8位程序计数器
端口说明: et:控制程序计数器自动加一的控制端 ld:预置数控制端 r:同步清零端 clk:时钟信号 z:三态控制端口 c:进位输出端口 q:输出端口 d:预置数端口。
四、仿真设计:
8位程序计数器仿真设计: 程序计数器的仿真设计的要点在于验证:
1、 程序在加1控制端有效的时候是否具有自动加1的功能。 2、 r同步置数端口的有效性。 3、 ld预置数端口的有效性。 4、 z三态端口的有效性。 5、 控制加1端口et的有效性。
令数据从00000000开始计数,观察数据是否是相邻数据相差1位,同时 在加1的过程中间插入r=0,ld=0,z=1,et=0信号,已验证其功能是否实 现,如果这些功能实现了,则相应的输出端,分别会显示出0000000,置
et,clk,z,ld,r :in std_logic; c : out std_logic; d : in unsigned(7 downto 0); q : out unsigned(7 downto 0) ); end eight_count; architecture behave of eight_count is signal iq : unsigned(7 downto 0); begin process (clk,et,z,ld,r) begin
process(clk,zd,zq,loadd,loadq) begin
if rising_edge(clk) then if loadd = '1' and zd = '0' then--因为d是双向端口,当d作为输入端
口时, --d作为输出端口时应该是高阻态,否则会产生