Бабак VHDL
.pdf
110 Глава 10. Структурная форма проекта
Пример 10.1. Проект со структурной формой, состоящий из мастер проекта и субпроекта
Файл Top_file.vhd, содержащий VHDL код мастер проекта top:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
entity top is |
|
port(w_in, x_in, y_in |
:IN std_logic; |
clock |
:IN std_logic; |
z_out |
:OUT std_logic); |
end top; |
|
architecture a of top is
component logic Объявление компонента logic. port(a,b,c :IN std_logic;
x :OUT std_logic); end component;
signal w_reg, x_reg, y_reg, z_reg :std_logic; begin
Оператор port MAP, реализующий межкомпонентные связи
экземпляра low_logic компонента logic.
low_logic : logic port MAP(a => w_reg, b => x_reg, c => y_reg, x => z_reg);
process(clock) begin
if (clock'event and clock='1') then
Операторы установки значений внутренних сигналов
мастер проекта в соответствии со значениями на
внешних портах.
w_reg<=w_in; x_reg<=x_in; y_reg<=y_in; z_out<=z_reg; end if;
end process; end a;
Файл Logic_lower.vhd, содержащий VHDL код субпроекта logic:
10.2. Оператор PORT MAP 111
LIBRARY ieee;
USE ieee.std_logic_1164.ALL; entity logic is
port(a,b,c |
: |
in std_logic; |
x |
: |
out std_logic); |
end logic; |
|
|
architecture a of logic is begin
process (a, b, c) begin
x<=(a and b) or c; end process;
END;
Теперь разберем более сложный пример, основанный на использо вании двух субпроектов в одном мастер проекте. Предположим, нам требуется построить VHDL проект ЦУ, структурная схема которого показана на Рис. 10.1. Такой VHDL проект удобно реализовать в структурной форме, поскольку при этом мы можем использовать в ка честве компонентов ранее созданные субпроекты ЦУ.
з |
з |
Рис. 10.1. Структурная схема VHDL проекта ЦУ |
Программный код VHDL проекта представлен в примере 10.2. Мастер проект D_FF использует два субпроекта — INV_e и DL_e, ко торые применяются в мастер проекте в качестве компонентов.
112 Глава 10. Структурная форма проекта
Пример 10.2. Проект со структурной формой, состоящий из мастер проекта и двух разных субпроектов
Файл D_FF.VHD, содержащий VHDL код мастер проекта D_FF:
entity D_FF is
port (D_in : in bit; CLK : in bit;
Q_out : in bit); end D_FF;
architecture D_FF_a of D_FF is
component INV_e Оператор объявления компонента INV_e. port (X : in bit;
Y : out bit); end component;
component DL_e Оператор объявления компонента DL_e. port (D, C : in bit;
Q : out bit);
end component;
signal q_t, inv_t, inv_t1 : bit; Объявление внутренних сигналов. begin
Реализация экземпляров U1 и U2 компонента INV_e. U1 : INV_e port map (CLK, inv_t);
U2 : INV_e port map (inv_t, inv_t1);
Реализация экземпляров U3 и U4 компонента DL_e.
U3 : DL_e port map (D => D_in, C => inv_t, Q => q_t);
U4 : DL_e port map (D => q_t, C => inv_t1, Q => Q_out); end D_FF_a;
Файл DL_E.VHD, содержащий VHDL код субпроекта DL_e:
entity DL_e is
port (D,C : in bit; Q : out bit);
end DL_e;
architecture DL_a of DL_e is begin
U1 : process (C) begin
if C = '1' then Q <= D; end if;
end process;
end DL_a;
|
|
10.2. Оператор PORT MAP 113 |
Файл INV_E.VHD, содержащий VHDL код субпроекта INV_e: |
||
entity INV_e is |
|
|
port (X : in bit; |
||
Y : out |
bit); |
|
end INV_e; |
|
|
architecture INV_a of INV_e is |
||
begin |
|
|
U1: process (C) |
||
|
begin |
|
|
|
Y <= not X; |
|
end process; |
|
end INV_a; |
|
|
В примере 10.3 мы рассмотрим VHDL проект 4 битного регистра |
||
на базе D триггера с асинхронным сбросом (Рис. 10.2). Его имеет |
||
смысл создать в виде проекта со структурной формой, поскольку в |
||
этом случае в мастер проекте можно использовать 4 экземпляра суб |
||
проекта D триггера. |
||
Рис. 10.2. Структурная схема мастер проекта 4 битного регистра |
||
Пример 10.3. Проект 4 битного регистра со структурной формой, |
||
состоящий из мастер проекта, в котором реализуется |
||
4 экземпляра одного компонента |
||
Файл |
Reg4_CO.VHD, содержащий VHDL код мастер проекта |
|
Reg4_CO: |
|
|
114 Глава 10. Структурная форма проекта
entity Reg4_CO is
port (RedD : in bit_vector (3 downto 0); clk, rst : in bit;
RegQ : out bit_vector (3 downto 0); end Reg4_CO;
architecture Reg4_CO_arch of Reg4_CO is
component DFF_RST is |
Объявление компонента DFF_RST. |
port (D, clk, rst : in bit; |
|
Q : out |
bit); |
end component; |
|
begin |
|
Реализация четырех экземпляров компонента.
bit0 :component DFF_RST port map (D => RedD(0),
clk => clk, rst => rst, Q => RegQ(0)); bit1 :component DFF_RST port map (D => RedD(1),
clk => clk, rst => rst, Q => RegQ(1)); bit2 :component DFF_RST port map (D => RedD(2),
clk => clk, rst => rst, Q => RegQ(2)); bit3 :component DFF_RST port map (D => RedD(3),
clk => clk, rst => rst, Q => RegQ(3));
end Reg4_CO_arch ;
Файл DFF_RST.VHD, содержащий VHDL код субпроекта D триг гера с асинхронным сбросом DFF_RST :
entity DFF_RST is
port (D, clk, rst : in bit;
Q : out bit);
end DFF_RST;
architecture DFF_RST_arch of DFF_RST is begin
process (rst, clk) begin
if rst = '1' then Q <= '0'; else
if clk’event and clk = '1' then Q <= D;
end if; end if;
end process; end DFF_RST _arch;
11.1. Проекты ЦУ общего назначения115
ГЛ А В А Гл
ПРИМЕРЫ VHDL9ПРОЕКТОВ ЦУ РАЗЛИЧНОГО НАЗНАЧЕНИЯ
11.1. Проекты ЦУ общего назначения
11.1.1. Логический элемент AND на 4 входа
Работа 4 входового логического элемента and описывается таб лицей истинности, представленной в Табл. 11.1.
Таблица 11.1. Таблица истинности логического элемента AND на 4 входа
|
|
Вход |
|
Выход |
|
|
|
|
|
|
|
I0 |
I1 |
|
I2 |
I3 |
O |
|
|
|
|
|
|
0 |
0 |
|
0 |
0 |
0 |
|
|
|
|
|
|
0 |
0 |
|
0 |
1 |
0 |
|
|
|
|
|
|
0 |
0 |
|
1 |
0 |
0 |
|
|
|
|
|
|
0 |
0 |
|
1 |
1 |
0 |
|
|
|
|
|
|
0 |
1 |
|
0 |
0 |
0 |
|
|
|
|
|
|
0 |
1 |
|
0 |
1 |
0 |
|
|
|
|
|
|
0 |
1 |
|
1 |
0 |
0 |
|
|
|
|
|
|
0 |
1 |
|
1 |
1 |
0 |
|
|
|
|
|
|
1 |
0 |
|
0 |
0 |
0 |
|
|
|
|
|
|
1 |
0 |
|
0 |
1 |
0 |
|
|
|
|
|
|
1 |
0 |
|
1 |
0 |
0 |
|
|
|
|
|
|
1 |
0 |
|
1 |
1 |
0 |
|
|
|
|
|
|
1 |
1 |
|
0 |
0 |
0 |
|
|
|
|
|
|
1 |
1 |
|
0 |
1 |
0 |
|
|
|
|
|
|
1 |
1 |
|
1 |
0 |
0 |
|
|
|
|
|
|
1 |
1 |
|
1 |
1 |
1 |
|
|
|
|
|
|
116 Глава 11. Примеры VHDL"проектов ЦУ различного назначения
Работа 4 входового элемента and может быть также представлена такой булевой функцией:
O = I0 and I1 and I2 and I3
Ее программная реализация имеет следующий вид:
|
Проект gate_AND |
+++++ Copyright © 1992 2007 by Yuriy Kovtanyuk +++++
++++++++++++++++++ www.ysk books.com +++++++++++++++
Заголовок проекта (раздел подключения библиотек и пакетов). library ieee; Оператор подключения библиотеки.
use ieee.std_logic_1164.all; Оператор подключения пакета.
Раздел объявлений проекта.
entity gate_and is Оператор объявления интерфейса компонента.
port ( |
|
Оператор объявления портов интерфейса. |
I0 |
: in |
std_logic; |
I1 |
: in |
std_logic; |
I2 |
: in |
std_logic; |
I3 |
: in std_logic; |
|
O |
: out std_logic); |
|
end entity;
Раздел архитектуры проекта.
architecture gate_arch of gate_and is Оператор объявления архитектуры.
Раздел объявлений архитектуры проекта. begin
Раздел выполняемых ОПО архитектуры проекта. O <= I0 and I1 and I2 and I3; ОПО ПУЗС. end architecture gate_arch;
Примечание. В VHDL"проектах значения входных и выходных портов часто имеют тип bit, boolean, std_logic. В проекте полужир" ным шрифтом выделены ключевые слова языка VHDL.
11.1.2.Логический элемент OR на 2 входа
Работа 2 входового элемента or описывается таблицей истиннос ти (Табл. 11.2).
11.1. Проекты ЦУ общего назначения 117
Таблица 11.2. Таблица истинности логического элемента OR на 2 входа
|
Вход |
Выход |
|
|
|
|
|
I0 |
|
I1 |
O |
|
|
|
|
0 |
|
0 |
0 |
|
|
|
|
0 |
|
1 |
1 |
|
|
|
|
1 |
|
0 |
1 |
|
|
|
|
1 |
|
1 |
1 |
|
|
|
|
Работа 2 входового элемента or может быть также представлена булевой функцией:
O = I0 or I1
Ее программная реализация имеет следующий вид:
|
Проект gate_OR |
+++++ Copyright © 1992 2007 by Yuriy Kovtanyuk +++++
++++++++++++++++++ www.ysk books.com +++++++++++++++
library ieee;
use ieee.std_logic_1164.all; entity gate_or is
port (
I0 : in std_logic;
I1 : in std_logic; O : out std_logic
);
end entity;
architecture gate_arch of gate_or is begin
O <= I0 or I1;
end architecture gate_arch;
11.1.3. Логический элемент OR на 4 инверсных входа
Работа 4 входового элемента or c 4 инверсными входами описы вается таблицей истинности (Табл. 11.3).
118 Глава 11. Примеры VHDL"проектов ЦУ различного назначения
Таблица 11.3. Таблица истинности логического элемента OR на 4 инверсных входа
|
|
Вход |
|
Выход |
|
|
|
|
|
|
|
I0 |
I1 |
|
I2 |
I3 |
O |
|
|
|
|
|
|
0 |
0 |
|
0 |
0 |
1 |
|
|
|
|
|
|
0 |
0 |
|
0 |
1 |
1 |
|
|
|
|
|
|
0 |
0 |
|
1 |
0 |
1 |
|
|
|
|
|
|
0 |
0 |
|
1 |
1 |
1 |
|
|
|
|
|
|
0 |
1 |
|
0 |
0 |
1 |
|
|
|
|
|
|
0 |
1 |
|
0 |
1 |
1 |
|
|
|
|
|
|
0 |
1 |
|
1 |
0 |
1 |
|
|
|
|
|
|
0 |
1 |
|
1 |
1 |
1 |
|
|
|
|
|
|
1 |
0 |
|
0 |
0 |
1 |
|
|
|
|
|
|
1 |
0 |
|
0 |
1 |
1 |
|
|
|
|
|
|
1 |
0 |
|
1 |
0 |
1 |
|
|
|
|
|
|
1 |
0 |
|
1 |
1 |
1 |
|
|
|
|
|
|
1 |
1 |
|
0 |
0 |
1 |
|
|
|
|
|
|
1 |
1 |
|
0 |
1 |
1 |
|
|
|
|
|
|
1 |
1 |
|
1 |
0 |
1 |
|
|
|
|
|
|
1 |
1 |
|
1 |
1 |
0 |
|
|
|
|
|
|
Работа 4 входового элемента or может быть также представлена булевой функцией:
O = not(I0) or not(I1) or not(I2) or not(I3)
Ее программная реализация имеет следующий вид:
|
Проект gate_NOT_OR |
+++++ Copyright © 1992 2007 by Yuriy Kovtanyuk +++++
++++++++++++++++++ www.ysk books.com +++++++++++++++
library ieee;
use ieee.std_logic_1164.all; entity gate_not_or is
port (
I0 : in std_logic;
I1 : in std_logic;
I2 : in std_logic;
I3 : in std_logic;
11.1. Проекты ЦУ общего назначения 119
O : out std_logic); end entity;
architecture gate_arch of gate_not_or is begin
O <= not I0 or not I1 or not I2 or not I3; end architecture gate_arch;
11.1.4. Логический элемент NOR на 3 входа
Работа элемента nor c 3 входами описывается таблицей истиннос ти (Табл. 11.4).
Таблица 11.4. Таблица истинности элемента NOR на 3 входа
|
Вход |
|
Выход |
|
|
|
|
I0 |
I1 |
I2 |
O |
|
|
|
|
0 |
0 |
0 |
1 |
|
|
|
|
0 |
0 |
1 |
0 |
|
|
|
|
0 |
1 |
0 |
0 |
|
|
|
|
0 |
1 |
1 |
0 |
|
|
|
|
1 |
0 |
0 |
0 |
|
|
|
|
1 |
0 |
1 |
0 |
|
|
|
|
1 |
1 |
0 |
0 |
|
|
|
|
1 |
1 |
1 |
0 |
|
|
|
|
Работа 3 входового элемента NOR может быть также представлена булевой функцией:
O = not(I0 or I1 or I2)
Ее программная реализация имеет следующий вид:
|
Проект gate_NOR |
+++++ Copyright © 1992 2007 by Yuriy Kovtanyuk +++++
++++++++++++++++++ www.ysk books.com +++++++++++++++
library ieee;
use ieee.std_logic_1164.all; entity gate_nor is
port (
I0 : in std_logic;
