Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет «Львівська Політехніка»
Кафедра ЕОМ
/
ЗВІТ
до лабораторної роботи №8
з дисципліни «Моделювання комп’ютерних систем»
на тему : Використання блок-діаграм для декомпозиції складних пристроїв в САПР Active-HDL
Мета роботи: Навчитися використовувати блок-діаграми (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-сегментного індикатора.
VHDL код схеми генератора :
library IEEE;
use IEEE.std_logic_1164.all;
entity generator 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 generator;
architecture generator of generator is
component DC0
port (
Y0 : in STD_LOGIC_VECTOR(3 downto 0);
LCD0 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC1
port (
Y1 : in STD_LOGIC_VECTOR(3 downto 0);
LCD1 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC2
port (
Y2 : in STD_LOGIC_VECTOR(3 downto 0);
LCD2 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC3
port (
Y3 : in STD_LOGIC_VECTOR(3 downto 0);
LCD3 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC4
port (
Y4 : in STD_LOGIC_VECTOR(3 downto 0);
LCD4 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC5
port (
Y5 : in STD_LOGIC_VECTOR(3 downto 0);
LCD5 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC6
port (
Y6 : in STD_LOGIC_VECTOR(3 downto 0);
LCD6 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC7
port (
Y7 : in STD_LOGIC_VECTOR(3 downto 0);
LCD7 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DM
port (
C : in STD_LOGIC_VECTOR(31 downto 0);
CLK : in STD_LOGIC;
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 parvreg
port (
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
WE : in STD_LOGIC;
X : in STD_LOGIC_VECTOR(31 downto 0);
C : out STD_LOGIC_VECTOR(31 downto 0)
);
end component;
signal RE : STD_LOGIC;
signal C : STD_LOGIC_VECTOR (31 downto 0);
signal Y0 : STD_LOGIC_VECTOR (3 downto 0);
signal Y1 : STD_LOGIC_VECTOR (3 downto 0);
signal Y2 : STD_LOGIC_VECTOR (3 downto 0);
signal Y3 : STD_LOGIC_VECTOR (3 downto 0);
signal Y4 : STD_LOGIC_VECTOR (3 downto 0);
signal Y5 : STD_LOGIC_VECTOR (3 downto 0);
signal Y6 : STD_LOGIC_VECTOR (3 downto 0);
signal Y7 : STD_LOGIC_VECTOR (3 downto 0);
begin
U1 : parvreg
port map(
C => C,
CLK => CLK,
RE => RE,
WE => WE,
X => X
);
U10 : DC0
port map(
LCD0 => LCD0,
Y0 => Y0
);
RE <= not(WE);
U2 : DM
port map(
C => C,
CLK => CLK,
Y0 => Y0,
Y1 => Y1,
Y2 => Y2,
Y3 => Y3,
Y4 => Y4,
Y5 => Y5,
Y6 => Y6,
Y7 => Y7
);
U3 : DC7
port map(
LCD7 => LCD7,
Y7 => Y7
);
U4 : DC5
port map(
LCD5 => LCD5,
Y5 => Y5
);
U5 : DC3
port map(
LCD3 => LCD3,
Y3 => Y3
);
U6 : DC1
port map(
LCD1 => LCD1,
Y1 => Y1
);
U7 : DC6
port map(
LCD6 => LCD6,
Y6 => Y6
);
U8 : DC4
port map(
LCD4 => LCD4,
Y4 => Y4
);
U9 : DC2
port map(
LCD2 => LCD2,
Y2 => Y2
);
end generator;
VHDL код регістра:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity parvreg is
generic(N:integer:=32);
port(
X : in STD_LOGIC_VECTOR(31 downto 0);
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
WE : in STD_LOGIC;
C : out STD_LOGIC_VECTOR(31 downto 0)
);
end parvreg;
architecture parvreg of parvreg is
begin
process(CLK)
variable reg: std_logic_vector(N-1 downto 0);
begin
if (CLK = '1' and WE = '1' and RE = '0') then reg := X;
elsif (CLK = '1' and WE = '0' and RE = '1') then C <= reg;
end if;
end process;
end parvreg;
VHDL код демультиплексора:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DM is
port(
C : in STD_LOGIC_VECTOR(31 downto 0);
CLK : in STD_LOGIC;
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 DM;
architecture DM of DM is
begin
process(CLK)
begin
if (CLK='1') then
Y7<=C(31 downto 28);
Y6<=C(27 downto 24);
Y5<=C(23 downto 20);
Y4<=C(19 downto 16);
Y3<=C(15 downto 12);
Y2<=C(11 downto 8);
Y1<=C(7 downto 4);
Y0<=C(3 downto 0);
end if;
end process;
end DM;
VHDL код семисегментного індикатора:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity DC0 is
port(
Y0 : in STD_LOGIC_VECTOR(3 downto 0);
LCD0 : out STD_LOGIC_VECTOR(6 downto 0)
);
end DC0;
architecture DC0 of DC0 is
begin
process(Y0)
begin
case Conv_Integer(Y0) is
when 0 =>LCD0<= "1110111";
when 1 =>LCD0<= "0010010";
when 2 =>LCD0<= "1011101";
when 3 =>LCD0<= "1101101";
when 4 =>LCD0<= "0111010";
when 5 =>LCD0<= "1101011";
when 6 =>LCD0<= "1101111";
when 7 =>LCD0<= "1010010";
when 8 =>LCD0<= "1111111";
when 9 =>LCD0<= "1111011";
when others =>LCD0<= "1110111";
end case;
end process;
end DC0;
Рис.1 Діаграма роботи генератора сигналів.
Висновок. На даній лабораторній роботі я навчився використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові. Отримав навички застосування констант generic для проектування структурних елементів. Розробив модель 8-розрядного 7-сегментного індикатора.