Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 8
з курсу „ Мови опису апаратних засобів ”
Тема:
Використання блок-діаграм для декомпозиції складних пристроїв в САПР Active-HDL
Львів – 2005
Мета роботи: Навчитися використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові. Отримати навички застосування констант generic для проектування структурних елементів. Розробити модель 8-розрядного 7-сегментного індикатора.
Теоретичні відомості:
Створити блок - генератор сигналів для 8-розрядного 7-сегментного індикатора. Декодер розряду індикатора та паралельний регістр (моделі яких було розроблено в лабораторних роботах №2 і №5) мають входити до проекту як структурні складові.
Інтерфейс генератора сигналів містить:
вхідний 32-розрядний порт Х типу std_logic_vector (31 downto 0), на який у двійково-десятковій формі подається 8-розрядне десяткове число (на кожний десятковий розряд по 4 двійкові розряди);
вхідний порт WE типу std_logic, подання '1' на який дозволяє запис у проміжний регістр блоку;
сигнал синхронізації CLK типу std_logic,
вісім 7-розрядних вихідних портів LCD7 … LCD0 типу std_logic_vector (6 downto 0), що підключаються безпосередньо до відповідних розрядів 7-сегментного індикатора.
Текст програми
Paralel_register.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity paralel_register is
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
RE : in STD_LOGIC;
DATA_IN : in STD_LOGIC_VECTOR (7 downto 0);
DATA_OUT : out STD_LOGIC_VECTOR (7 downto 0)
);
end paralel_register;
architecture paralel_register of paralel_register is
begin
-- enter your statements here --
process(CLK)
variable DATA : STD_LOGIC_VECTOR (7 downto 0);
begin
if rising_edge(CLK) then
DATA_OUT <="ZZZZZZZZ";
if WE='1' and RE='0' then
DATA:=DATA_IN;
elsif WE='0' and RE='1' then
DATA_OUT<=DATA;
end if;
end if;
end process;
end paralel_register;
reg.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity reg is
generic(N:integer:=4);
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
RE : in STD_LOGIC;
REG_IN : in STD_LOGIC_VECTOR(31 downto 0);
REG_OUT : out STD_LOGIC_VECTOR(31 downto 0)
);
end reg;
architecture reg of reg is
component paralel_register is
port (
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
RE : in STD_LOGIC;
DATA_IN : in STD_LOGIC_VECTOR(7 downto 0);
DATA_OUT : out STD_LOGIC_VECTOR(7 downto 0)
);
end component paralel_register;
begin
-- enter your statements here --
reg_N: for i in 0 to N-1 generate
reg8_label: component paralel_register
port map(
CLK=>CLK,
WE=>WE,
RE=>RE,
DATA_IN=>REG_IN(8*i+7 downto 8*i),
DATA_OUT=>REG_OUT(8*i+7 downto 8*i)
);
end generate;
end reg;
de_mux.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity de_mux is
port(
CLK : in STD_LOGIC;
X : in STD_LOGIC_VECTOR(31 downto 0);
Y7 : out STD_LOGIC_VECTOR(3 downto 0);
Y6 : out STD_LOGIC_VECTOR(3 downto 0);
Y5 : out STD_LOGIC_VECTOR(3 downto 0);
Y4 : out STD_LOGIC_VECTOR(3 downto 0);
Y3 : out STD_LOGIC_VECTOR(3 downto 0);
Y2 : out STD_LOGIC_VECTOR(3 downto 0);
Y1 : out STD_LOGIC_VECTOR(3 downto 0);
Y0 : out STD_LOGIC_VECTOR(3 downto 0)
);
end de_mux;
architecture de_mux of de_mux is
begin
process(CLK)
begin
if rising_edge(CLK) then
Y0<=X(3 downto 0);
Y1<=X(7 downto 4);
Y2<=X(11 downto 8);
Y3<=X(15 downto 12);
Y4<=X(19 downto 16);
Y5<=X(23 downto 20);
Y6<=X(27 downto 24);
Y7<=X(31 downto 28);
end if;
end process;
end de_mux;
invertor.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity invertor is
port(
IN_PORT : in STD_LOGIC;
OUT_PORT : out STD_LOGIC
);
end invertor;
architecture invertor of invertor is
begin
OUT_PORT<=not IN_PORT;
end invertor;
sch.vhd
library IEEE;
use IEEE.std_logic_1164.all;
entity sch is
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
X : in STD_LOGIC_VECTOR(31 downto 0);
LCD0 : out STD_LOGIC_VECTOR(6 downto 0);
LCD1 : out STD_LOGIC_VECTOR(6 downto 0);
LCD2 : out STD_LOGIC_VECTOR(6 downto 0);
LCD3 : out STD_LOGIC_VECTOR(6 downto 0);
LCD4 : out STD_LOGIC_VECTOR(6 downto 0);
LCD5 : out STD_LOGIC_VECTOR(6 downto 0);
LCD6 : out STD_LOGIC_VECTOR(6 downto 0);
LCD7 : out STD_LOGIC_VECTOR(6 downto 0)
);
end sch;
architecture sch of sch is
component decoder
port (
X : in STD_LOGIC_VECTOR(3 downto 0);
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component de_mux
port (
CLK : in STD_LOGIC;
X : in STD_LOGIC_VECTOR(31 downto 0);
Y0 : out STD_LOGIC_VECTOR(3 downto 0);
Y1 : out STD_LOGIC_VECTOR(3 downto 0);
Y2 : out STD_LOGIC_VECTOR(3 downto 0);
Y3 : out STD_LOGIC_VECTOR(3 downto 0);
Y4 : out STD_LOGIC_VECTOR(3 downto 0);
Y5 : out STD_LOGIC_VECTOR(3 downto 0);
Y6 : out STD_LOGIC_VECTOR(3 downto 0);
Y7 : out STD_LOGIC_VECTOR(3 downto 0)
);
end component;
component invertor
port (
IN_PORT : in STD_LOGIC;
OUT_PORT : out STD_LOGIC
);
end component;
component reg
generic(
N : INTEGER := 4
);
port (
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
REG_IN : in STD_LOGIC_VECTOR(31 downto 0);
WE : in STD_LOGIC;
REG_OUT : out STD_LOGIC_VECTOR(31 downto 0)
);
end component;
---- Signal declarations used on the diagram ----
signal NET121 :
STD_LOGIC;
signal BUS657 :
STD_LOGIC_VECTOR (31 downto 0);
signal BUS671 :
STD_LOGIC_VECTOR (3 downto 0);
signal BUS677 :
STD_LOGIC_VECTOR (3 downto 0);
signal BUS685 :
STD_LOGIC_VECTOR (3 downto 0);
signal BUS693 :
STD_LOGIC_VECTOR (3 downto 0);
signal BUS701 :
STD_LOGIC_VECTOR (3 downto 0);
signal BUS709 :
STD_LOGIC_VECTOR (3 downto 0);
signal BUS720 :
STD_LOGIC_VECTOR (3 downto 0);
signal BUS728 :
STD_LOGIC_VECTOR (3 downto 0);
begin -- Component instantiations --
U1 : reg
port map(
CLK => CLK,
RE => NET121,
REG_IN => X,
REG_OUT => BUS657,
WE => WE
);
U10 : decoder
port map(
X => BUS671,
Y => LCD0
);
U11 : de_mux
port map(
CLK => CLK,
X => BUS657,
Y0 => BUS671,
Y1 => BUS677,
Y2 => BUS685,
Y3 => BUS728,
Y4 => BUS720,
Y5 => BUS709,
Y6 => BUS701,
Y7 => BUS693
);
U2 : invertor
port map(
IN_PORT => WE,
OUT_PORT => NET121
);
U3 : decoder
port map(
X => BUS693,
Y => LCD7
);
U4 : decoder
port map(
X => BUS701,
Y => LCD6
);
U5 : decoder
port map(
X => BUS709,
Y => LCD5
);
U6 : decoder
port map(
X => BUS720,
Y => LCD4
);
U7 : decoder
port map(
X => BUS728,
Y => LCD3
);
U8 : decoder
port map(
X => BUS685,
Y => LCD2
);
U9 : decoder
port map(
X => BUS677,
Y => LCD1
);
end sch;
Часові діаграми роботи пристрою
Висновки: виконуючи дану лабораторну роботу, я навчився використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові та отримати навички застосування констант generic для проектування структурних елементів.