МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
З дисципліни : «Моделювання комп’ютерних систем»
Лабораторна робота №8
Тема: «Використання блок-діаграм для декомпозиції складних пристроїв в САПР Active-HDL»
Підготував:
Прийняв:
Львів 2012
Мета роботи: Навчитися використовувати блок-діаграми (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-сегментного індикатора.
Константи generic
При компонуванні складних об’єктів часто виникає необхідність у зміні параметрів компонентів. Можливість такої зміни без перекомпілювання компоненти дає застосування констант generic. Ці константи розміщуються в розділі опису об’єкта entity. Синтаксисконстант generic наведено нижче:
entity Entity_Name is
generic (a,b,c: integer range 0 to 255;
d: Std_Logic);
port(port_list);
end Entity_Name;
Як видно з наведеного прикладу, константам, описаним у розділі generic, не присвоюється конкретне значення на етапі компіляції об’єкта, однак вирази, що містять ці константи, є локально-статично
визначеними. Це дає можливість застосовувати константи generic для задавання діапазонів індексів масивів, підтипів тощо. Конкретне значення цим константам присвоюється при включенні об’єкта як компонента складного об’єкта.
Тексти VHDL-описів, що були розроблені в роботі.
decoder.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity Decoder5 is
port(
X : in STD_LOGIC_VECTOR(3 downto 0);
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end Decoder5;
architecture Decoder5 of Decoder5 is
begin
Show:process(X)
begin
case X is
when "0000" => Y<="1110111";
when "0001" => Y<="0100100";
when "0010" => Y<="1011101";
when "0011" => Y<="1101101";
when "0100" => Y<="0101110";
when "0101" => Y<="1101011";
when "0110" => Y<="1111011";
when "0111" => Y<="0100101";
when "1000" => Y<="1111111";
when "1001" => Y<="1101111";
when others => Y<="0000000";
end case;
end process Show;
end Decoder5;
demux.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DeMUX 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 DeMUX;
architecture DeMUX of DeMUX is
begin
process (X)
begin
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 process;
end DeMUX;
rx.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity rx is
generic (Width:Integer:=31);
port(
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
WE : in STD_LOGIC;
DATA_IN : in STD_LOGIC_VECTOR(Width downto 0);
DATA_OUT : out STD_LOGIC_VECTOR(Width downto 0)
);
end rx;
architecture rx of rx is
begin
process (CLK)
variable DATA: STD_LOGIC_VECTOR(Width downto 0);
begin
if CLK'event and CLK = '1' then
if WE = '1' and RE = '0' then
DATA := DATA_IN;
elsif WE = '0' and RE = '1' then
DATA_OUT <= DATA;
else
DATA_OUT <= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
end if;
end if;
end process;
end rx;
shema.vhd
library IEEE;
use IEEE.std_logic_1164.all;
library lb8;
entity shema is
port(
CLK : in STD_LOGIC;
RE : 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 shema;
architecture shema of shema is
component Decoder5
port (
X : in STD_LOGIC_VECTOR(3 downto 0);
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DeMUX
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 rx
generic(
Width : INTEGER := 31
);
port (
CLK : in STD_LOGIC;
DATA_IN : in STD_LOGIC_VECTOR(Width downto 0);
RE : in STD_LOGIC;
WE : in STD_LOGIC;
DATA_OUT : out STD_LOGIC_VECTOR(Width downto 0)
);
end component;
signal BUS118 : STD_LOGIC_VECTOR (7 downto 0);
signal BUS132 : STD_LOGIC_VECTOR (7 downto 0);
signal BUS144 : STD_LOGIC_VECTOR (7 downto 0);
signal BUS309 : STD_LOGIC_VECTOR (7 downto 0);
signal BUS310 : STD_LOGIC_VECTOR (7 downto 0);
signal BUS79 : STD_LOGIC_VECTOR (7 downto 0);
signal BUS87 : STD_LOGIC_VECTOR (7 downto 0);
signal BUS99 : STD_LOGIC_VECTOR (7 downto 0);
signal Seg : STD_LOGIC_VECTOR (31 downto 0);
begin
U0 : Decoder5
port map(
X(0) => BUS309(4),
X(1) => BUS309(5),
X(2) => BUS309(6),
X(3) => BUS309(7),
Y => LCD0
);
U1 : Decoder5
port map(
X(0) => BUS79(4),
X(1) => BUS79(5),
X(2) => BUS79(6),
X(3) => BUS79(7),
Y => LCD1
);
U2 : Decoder5
port map(
X(0) => BUS87(4),
X(1) => BUS87(5),
X(2) => BUS87(6),
X(3) => BUS87(7),
Y => LCD2
);
U3 : Decoder5
port map(
X(0) => BUS99(4),
X(1) => BUS99(5),
X(2) => BUS99(6),
X(3) => BUS99(7),
Y => LCD3
);
U4 : Decoder5
port map(
X(0) => BUS310(4),
X(1) => BUS310(5),
X(2) => BUS310(6),
X(3) => BUS310(7),
Y => LCD4
);
U5 : Decoder5
port map(
X(0) => BUS118(4),
X(1) => BUS118(5),
X(2) => BUS118(6),
X(3) => BUS118(7),
Y => LCD5
);
U6 : Decoder5
port map(
X(0) => BUS132(4),
X(1) => BUS132(5),
X(2) => BUS132(6),
X(3) => BUS132(7),
Y => LCD6
);
U7 : Decoder5
port map(
X(0) => BUS144(4),
X(1) => BUS144(5),
X(2) => BUS144(6),
X(3) => BUS144(7),
Y => LCD7
);
U8 : DeMUX
port map(
CLK => CLK,
X => Seg,
Y0(0) => BUS309(4),
Y0(1) => BUS309(5),
Y0(2) => BUS309(6),
Y0(3) => BUS309(7),
Y1(0) => BUS79(4),
Y1(1) => BUS79(5),
Y1(2) => BUS79(6),
Y1(3) => BUS79(7),
Y2(0) => BUS87(4),
Y2(1) => BUS87(5),
Y2(2) => BUS87(6),
Y2(3) => BUS87(7),
Y3(0) => BUS99(4),
Y3(1) => BUS99(5),
Y3(2) => BUS99(6),
Y3(3) => BUS99(7),
Y4(0) => BUS310(4),
Y4(1) => BUS310(5),
Y4(2) => BUS310(6),
Y4(3) => BUS310(7),
Y5(0) => BUS118(4),
Y5(1) => BUS118(5),
Y5(2) => BUS118(6),
Y5(3) => BUS118(7),
Y6(0) => BUS132(4),
Y6(1) => BUS132(5),
Y6(2) => BUS132(6),
Y6(3) => BUS132(7),
Y7(0) => BUS144(4),
Y7(1) => BUS144(5),
Y7(2) => BUS144(6),
Y7(3) => BUS144(7)
);
U9 : rx
port map(
CLK => CLK,
DATA_IN => X( 31 downto 0 ),
DATA_OUT => Seg( 31 downto 0 ),
RE => RE,
WE => WE
);
end shema;
Схема блоку, створеною за допомогою блок-діаграм САПР Active-HDL.
/
Часові діаграми роботи структурних складових та блоку в цілому
/
Висновок. На даній лабораторній роботі я навчився використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові. Отримав навички застосування констант generic для проектування структурних елементів. Розробив модель 8-розрядного 7-сегментного індикатора.