SlideShare a Scribd company logo
Куланов В.А.
[v.kulanov@csn.khai.edu]
Базовые принципы
описания моделей
устройств в VHDL
«Технологии проектирования
компьютерных систем»
Файлы проекта в языке VHDL
В языке VHDL определено три типа файлов проекта
(*.vhd):
 Основной файл проекта – алгоритмическое
описание разрабатываемого устройства и его
модулей.
 Пакет – вспомогательная единица проекта,
позволяющая систематизировать часто
используемые описания, определения констант,
типов, подпрограмм и т.д. Пакеты входят в состав
библиотек.
 Конфигурационная декларация – настроечные
параметры системы (основных файлов проекта) на
этапе интеграции ее составных частей.
Структура основного файла проекта
8-bit register
clk
Din0
Din1
Din2
Din3
Din4
Din5
Din6
Din7
Dout0
Dout1
Dout2
Dout3
Dout4
Dout5
Dout6
Dout7
ENTITY eight_bit_reg IS
GENERIC (WIDTH: NATURAL := 8);
PORT(
Din : in std_logic_vector (WIDTH-1 DOWNTO 0);
clk : in std_logic;
Dout: out std_logic_vector (WIDTH-1 DOWNTO 0);
);
END ENTITY eight_bit_reg;
ENTITY eight_bit_reg IS
GENERIC (WIDTH: NATURAL := 8);
PORT(
Din : in std_logic_vector (WIDTH-1 DOWNTO 0);
clk : in std_logic;
Dout: out std_logic_vector (WIDTH-1 DOWNTO 0);
);
END ENTITY eight_bit_reg;
ARCHITECTURE behave_reg OF eight_bit_reg IS
...
BEGIN
... -- Описание для временного моделирования
END ARCHITECTURE behave_reg;
ARCHITECTURE struct_reg OF eight_bit_reg IS
...
BEGIN
... -- Описание для синтеза
END ARCHITECTURE struct_reg;
ARCHITECTURE behave_reg OF eight_bit_reg IS
...
BEGIN
... -- Описание для временного моделирования
END ARCHITECTURE behave_reg;
ARCHITECTURE struct_reg OF eight_bit_reg IS
...
BEGIN
... -- Описание для синтеза
END ARCHITECTURE struct_reg;
eight_bit_reg.vhd
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
Декларативная часть (ENTITY)
ENTITY entity_name IS
[GENERIC (generic_interface_list);]
[PORT (port_interface_list);]
-- раздел операторов сущности
[BEGIN{concurrent_assertion_statement|
passive_concurrent_procedure_call_statement|
passive_process_statement}]
-- раздел деклараций сущности
{entity_declarative_item}
END [ENTITY] [entity_name];
Имя сущности
(проектного модуля)
Параметры
проектного
модуля
Входные/Выходные
порты
(внешние сигналы)
Декларативная часть (ENTITY)
 должно быть уникальным в рамках всего проекта
 должно совпадать с именем файла
 в одном файле проекта может быть только одно
объявление сущности
entity_name
 раздел декларации сущности используется для
объявление локальных типов данных,
подпрограмм, сигналов и т.д.
 объявленные объекты доступны во всех
архитектурных телах, подчиненных этой сущности
 используется редко, чаще в testbench-модулях
BEGIN …
Декларативная часть (ENTITY)
ENTITY complex IS
GENERIC(N: NATURAL := 8;
RETARD: TIME := 10 ns);
PORT(a: IN BIT;
b: OUT BIT_VECTOR(N-1 DOWNTO 0));
-- entity declarative part
TYPE word IS ARRAY(15 DOWNTO 0) OF BIT;
PROCEDURE start(SIGNAL sig: word) IS
sig <= (OTHERS =>'1') AFTER RETARD;
END start;
-- entity executable part
BEGIN
ASSERT a'delayed'stable(4 ns)
REPORT "error" SEVERITY ERROR;
END ENTITY complex;
Используется редко
Секция PORT
[port (port_interface_list);]
{identifier, {…}: [mode] type_indication [:= expression]};
Имя порта
Тип порта Значение
умолчанию IN – входной порт (прием);
 OUT – выходной порт (передача);
 INOUT – двунаправленный порт (прием и передача) –
возможны операции чтения и записи при работе с портом;
 BUFFER – буферный порт (передача и использование как
сигнал-операнд внутри объекта проекта), в отличие от порта
вида INOUT источник данных для BUFFER может быть только
внутренним;
 LINKAGE – связный порт (двунаправленное соединение с
другим портом таким же режимом, как и buffer).
Режимы:
Не рекомендуется использовать, т.к. результаты
синтеза (аппаратная реализация) могут оказаться
далекими от желаемых
Секция PORT
-- Декларативная часть n-разрядного сумматора
ENTITY adder_n IS
GENERIC (N : NATURAL := 4);
PORT (a, b : IN STD_LOGIC_VECTOR(0 TO N-1);
s : OUT STD_LOGIC_VECTOR(0 TO N-1);
c : OUT STD_LOGIC); -- Перенос
-- раздел деклараций сущности
CONSTANT GND: STD_LOGIC := '0';
CONSTANT VCC: STD_LOGIC := '1';
CONSTANT TRI: STD_LOGIC := 'Z';
-- раздел операторов сущности
BEGIN
ASSERT N > 1
REPORT "N is too small" SEVERITY ERROR;
END ENTITY adder_n;
Секция PORT
-- Декларация интерфейса двоично-десятичного
-- синхронного счетчика с синхронной загрузкой
-- (load) и синхронным сбросом (reset)
ENTITY bcd_counter IS
PORT (clk : IN STD_LOGIC;
load : IN STD_LOGIC;
reset : IN STD_LOGIC;
data : IN INTEGER RANGE 0 TO 9;
q : OUT INTEGER RANGE 0 TO 9);
END ENTITY bcd_counter;
 При объявлении входных/выходных портов (сигналов)
рекомендуется группировать их по функциональному
назначению (даже если их тип и вид.режим совпадают):
• данные, управляющие сигналы, сигналы синхронизации и т.д.
Секция GENERIC
 используется для спецификации параметров проектируемого
устройства
 является необязательной секцией при описании ENTITY
(декларативной сущности)
 параметры, объявленные в GENERIC доступны во всем файле
проекта
 общепринятым правилом является именование констант, в
том числе и задаваемых в секции generic, в верхнем регистре.
GENERIC (parameter_name: parameter_type := parameter_value);
ENTITY n_register IS
GENERIC(WIDTH: NATURAL := 8);
PORT(clk : IN BIT;
en : IN BIT;
data_in : IN BIT_VECTOR(WIDTH – 1 DOWNTO 0);
data_out: OUT BIT_VECTOR(WIDTH – 1 DOWNTO 0));
END ENTITY n_register;
Секция GENERIC
ENTITY process_module IS
GENERIC(WIDTH: NATURAL := 8;
MASK_VALUE: BIT_VECTOR := "1010");
PORT(clk : IN BIT;
data_bus : IN BIT_VECTOR(0 TO WIDTH - 1);
out_port : out bit_vector(0 TO WIDTH – 1));
END ENTITY process_module;
…
-- & - оператор конкатенации
out_port <= data_bus XOR MASK_VALUE & "1111";
GENERIC(WIDTH: INTEGER := 640;
HEIGHT: INTEGER := 480;
-- Данное объявление недопустимо,
-- т.к. параметры WIDTH и HEIGHT
-- заданы в текущей секции GENERIC
RESOLUTION: INTEGER := WIDTH * HEIGHT;
NEW_RESOLUTION: NATURAL := 5 * HEIGHT);
Архитектурное тело (ARCHITECTURE)
 содержит алгоритм работы проектируемого
устройства
 количество архитектурных тел в файле проекта
может быть числом неограниченным
ARCHITECTURE identifier OF entity_name IS
{block_declarative_item}
BEGIN
{concurrent_statement}
END [ARCHITECTURE] [identifier]
Имя архитектурного
тела
Должно совпадать
с именем ENTITY
SIGNAL, TYPE, FILE,
SUBTYPE, PROCEDURE,
FUNCTION, VARIABLE,
SHARED VARIABLE,
COMPONENT, CONSTANT
...
ТОЛЬКО параллельные операторы
(PROCESS, WHEN, SELECT ...)
Архитектурное тело (ARCHITECTURE)
ARCHITECTURE identifier OF entity_name IS
{block_declarative_item}
BEGIN
END [ARCHITECTURE] [identifier]
Простой параллельный
оператор (WHEN)
Простой параллельный
оператор (<=)
Составной параллельный
оператор (PROCESS)
Последовательный
оператор 1
Последовательный
оператор 2
Последовательный
оператор 3
Архитектурное тело (ARCHITECTURE)
ARCHITECTURE dataflow OF mux IS
SIGNAL select : INTEGER RANGE 0 TO 3;
BEGIN
select <= 0 WHEN s0 = '0' AND s1 = '0' ELSE
1 WHEN s0 = '1' AND s1 = '0' ELSE
2 WHEN s0 = '0' AND s1 = '1' ELSE
3;
END dataflow; Простой параллельный
оператор
Архитектурное тело (ARCHITECTURE)
ARCHITECTURE fsm_rtl OF fsm IS
TYPE fsm_states IS (INIT, IDLE, RUN, STOP);
SIGNAL fsm_state: fsm_states := INIT;
BEGIN
…
IF (input_data = "01") THEN
fsm_state <= RUN;
ELSE
fsm_state <= STOP;
END IF;
…
END fsm_rtl;
Находится в теле
составного
параллельного
оператора
PROCESS
Стили описания проекта
 Поведенческий стиль – алгоритм функционирования
устройства записывается в поведенческой форме, т.е.
архитектурное тело содержит набор поведенческих
конструкций (условные операторы, операторы цикла, ожидания
и т.д.).
 Структурный стиль – архитектурное тело состоит из некоторого
набора компонентов (модулей), реализация которых
выполнена в других файлах проекта.
 Потоковый стиль – архитектурное тело состоит из операторов
параллельного присваивания значения сигналу и его
разновидностей (оператор условного и селективного
присваивания значения сигналу).
 Смешанный стиль – предполагает сочетание в одном
архитектурном теле множество стилей, чаще всего
поведенческий и структурный.
Библиотеки (LIBRARY)
 позволяет группировать наиболее часто используемые
части исходного кода
 могут быть скомпилированы для определенной САПР
 библиотека STD является стандартной и подключается к
проекту по умолчанию, включает пакеты (STANDARD и
TEXTIO)
 рабочая папка («библиотека»), в которой размещается
текущий проект имеет имя WORK (подключается
неявно)
 в общем виде библиотеки представляют собой
директорию, в которой размещаются (чаще всего)
пакеты, реже – проектные решения в виде описания
готовых устройств
Библиотеки (LIBRARY)
LIBRARY identifier;
LIBRARY ieee;
LIBRARY xilinxcorelib;
-- включение нескольких библиотек
LIBRARY altera_mf, lpm;
Имя библиотеки
STD_LOGIC_1164
NUMERIC_STD
LIBRARY IEEE
Пакеты
Библиотека
Пакеты (PACKAGE)
 механизм пакетов позволяет сгруппировать
некоторые описания в единую совокупность
 представляют собой отдельный файл (*.vhd)
• при именовании файла пакета рекомендуется
добавлять суффикс _pckg (cpu_pckg.vhd)
 не могут содержать реализации готовых устройств,
а только их декларацию (на уровне компонентов)
 имеют строгую структуру, которая определяется
набором операторов
Пакеты (PACKAGE)
PACKAGE package_name IS
{package_declarative_item}
END [PACKAGE] [package_name];
PACKAGE BODY package_name IS
{package_body_declarative_item}
END [PACKGAGE BODY] [package_name];
some_pckg.vhd
Декларативная
часть пакета
Тело
пакета
(Может
отсутствовать)
Имя пакета, должно совпадать с именем файла
SIGNAL, TYPE, FILE,
SUBTYPE, PROCEDURE,
FUNCTION, VARIABLE,
COMPONENT, CONSTANT
реализация подпрограмм, определяются
значения констант с отложенной
инициализацией
Пакеты (PACKAGE)
PACKAGE cpu_types IS
CONSTANT WORD_SIZE: POSITIVE := 16;
CONSTANT ADDRESS_SIZE : POSITIVE := 24;
SUBTYPE word IS BIT_VECTOR(WORD_SIZE - 1 DOWNTO 0);
SUBTYPE address IS BIT_VECTOR(ADDRESS_SIZE-1 DOWNTO 0);
TYPE status_value IS (HALTED, IDLE, FETCH,
MEM_READ, MEM_WRITE, IO_READ,
IO_WRITE, INT_ACK);
END PACKAGE cpu_types;
 Для получения доступа к объектам пакета:
library_name.packet_name.object_name;
Название
библиотеки
Название
пакета
Объект (TYPE,
SUBTYPE, …)
Пакеты (PACKAGE)
ENTITY address_decoder IS
PORT(addr : IN work.cpu_types.address;
status : IN work.cpu_types.status_value;
mem_sel, int_sel, io_sel: OUT BIT);
END ENTITY address_decoder;
 Каждый раз при использовании объектов,
расположенных в пакетах, указывать полный
к ним путь (имя)?
USE library_name.packet_name.object_name;
 Символьный литерал
 Операторный символ
 ALL
Используй условные ссылки:
Пакеты (PACKAGE)
USE work.cpu_types.ALL;
-- Используем условную ссылку и клаузу USE
ENTITY address_decoder IS
PORT(addr : IN address;
status : IN status_value;
mem_sel, int_sel, io_sel: OUT BIT);
END ENTITY address_decoder;
-- Пакеты могут включать сторонние пакеты и библиотеки
LIBRARY IEEE;
USE ieee.std_logic_1164.ALL;
-- Тип std_logic определен в пакете std_logic_1164
PACKAGE project_types IS
SUBTYPE logic IS std_logic RANGE std_logic'left to 'Z';
END PACKAGE project_types;
Пакеты (PACKAGE)
PACKAGE various IS
-- Отложенная константа, декларация которой
-- проводится в теле пакета
CONSTANT hold: TIME;
-- Декларация прототипа процедуры
PROCEDURE push(SIGNAL btn: INOUT STD_LOGIC; hold:
TIME);
END PACKAGE various;
-- Тело пакета
PACKAGE BODY various IS
CONSTANT hold: TIME := 100 ns; -- отложенная константа
PROCEDURE push(SIGNAL btn: INOUT std_logic; hold: TIME) IS
BEGIN
button <= '0', '1' AFTER hold;
WAIT FOR 2*hold;
END PROCEDURE push;
END PACKAGE BODY various;
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBRARY, PACKAGE

More Related Content

PPTX
Structural project description in VHDL
PPTX
Subprograms in VHDL, Procedures in VHDL
PPTX
Statements in VHDL - Concurrent Statements
PPTX
File input/output in VHDL
PPTX
Subprograms in VHDL, Functions in VHDL
PPTX
Statements in VHDL - Sequential Statements
PDF
апкс 2011 05_verilog
PPTX
Attributes in VHDL
Structural project description in VHDL
Subprograms in VHDL, Procedures in VHDL
Statements in VHDL - Concurrent Statements
File input/output in VHDL
Subprograms in VHDL, Functions in VHDL
Statements in VHDL - Sequential Statements
апкс 2011 05_verilog
Attributes in VHDL

What's hot (20)

PDF
Релиз PHP7 - что нас ждет в октябре 2015
PPTX
Cpp/cli types
PPTX
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
PPTX
особенности программирования на с++
PPT
паттерны программирования
PPT
подпрограммы в языке программирования паскаль
PPT
22 pascal urok_6
PPTX
Подпрограммы
PPT
язык програмирования
PPS
Vba программы
PPTX
алгоритмы stl
PPT
4 4 pascal_urok_1
PPT
10 10 pascal_urok_
PPT
02 if for
PPTX
C++ и базы данных
PDF
лек9 10
PDF
C++ Базовый. Занятие 04.
PDF
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
PPTX
стандартная библиотека с++: введение
PDF
C++ Базовый. Занятие 02.
Релиз PHP7 - что нас ждет в октябре 2015
Cpp/cli types
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
особенности программирования на с++
паттерны программирования
подпрограммы в языке программирования паскаль
22 pascal urok_6
Подпрограммы
язык програмирования
Vba программы
алгоритмы stl
4 4 pascal_urok_1
10 10 pascal_urok_
02 if for
C++ и базы данных
лек9 10
C++ Базовый. Занятие 04.
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
стандартная библиотека с++: введение
C++ Базовый. Занятие 02.
Ad

Similar to Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBRARY, PACKAGE (20)

PPTX
Genome
PPTX
документирование долгоживущих веб проектов. г. белогорцев. зал 3
PPTX
C++ осень 2012 лекция 12
PPTX
Взломать сайт на ASP.NET
PPTX
Применение фреймворка GStreamer в системе видеонаблюдения
PPTX
Взломать Web-сайт на ASP.NET? Сложно, но можно!
PPTX
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
PDF
C++ STL & Qt. Занятие 06.
PPTX
Автоматизированное проектирование эис (Case технология)
PDF
Practical Language for Extracting Data from Source Codes and Preparing Them f...
PDF
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
PPTX
Как пройти собеседование и получить первую работу на Swift
PPTX
Online TechTalk “Flutter Mobile Development”
PDF
Formal verification of operating system kernels
PPT
The Best Portlet
PPTX
Расширение библиотеки Slick
PPT
Drupal организация разработки
PPT
Drupal -organizaciya_razrabotki
PDF
Обратная разработка бинарных форматов с помощью Kaitai Struct
PDF
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Genome
документирование долгоживущих веб проектов. г. белогорцев. зал 3
C++ осень 2012 лекция 12
Взломать сайт на ASP.NET
Применение фреймворка GStreamer в системе видеонаблюдения
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
C++ STL & Qt. Занятие 06.
Автоматизированное проектирование эис (Case технология)
Practical Language for Extracting Data from Source Codes and Preparing Them f...
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
Как пройти собеседование и получить первую работу на Swift
Online TechTalk “Flutter Mobile Development”
Formal verification of operating system kernels
The Best Portlet
Расширение библиотеки Slick
Drupal организация разработки
Drupal -organizaciya_razrabotki
Обратная разработка бинарных форматов с помощью Kaitai Struct
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Ad

Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBRARY, PACKAGE

  • 1. Куланов В.А. [v.kulanov@csn.khai.edu] Базовые принципы описания моделей устройств в VHDL «Технологии проектирования компьютерных систем»
  • 2. Файлы проекта в языке VHDL В языке VHDL определено три типа файлов проекта (*.vhd):  Основной файл проекта – алгоритмическое описание разрабатываемого устройства и его модулей.  Пакет – вспомогательная единица проекта, позволяющая систематизировать часто используемые описания, определения констант, типов, подпрограмм и т.д. Пакеты входят в состав библиотек.  Конфигурационная декларация – настроечные параметры системы (основных файлов проекта) на этапе интеграции ее составных частей.
  • 3. Структура основного файла проекта 8-bit register clk Din0 Din1 Din2 Din3 Din4 Din5 Din6 Din7 Dout0 Dout1 Dout2 Dout3 Dout4 Dout5 Dout6 Dout7 ENTITY eight_bit_reg IS GENERIC (WIDTH: NATURAL := 8); PORT( Din : in std_logic_vector (WIDTH-1 DOWNTO 0); clk : in std_logic; Dout: out std_logic_vector (WIDTH-1 DOWNTO 0); ); END ENTITY eight_bit_reg; ENTITY eight_bit_reg IS GENERIC (WIDTH: NATURAL := 8); PORT( Din : in std_logic_vector (WIDTH-1 DOWNTO 0); clk : in std_logic; Dout: out std_logic_vector (WIDTH-1 DOWNTO 0); ); END ENTITY eight_bit_reg; ARCHITECTURE behave_reg OF eight_bit_reg IS ... BEGIN ... -- Описание для временного моделирования END ARCHITECTURE behave_reg; ARCHITECTURE struct_reg OF eight_bit_reg IS ... BEGIN ... -- Описание для синтеза END ARCHITECTURE struct_reg; ARCHITECTURE behave_reg OF eight_bit_reg IS ... BEGIN ... -- Описание для временного моделирования END ARCHITECTURE behave_reg; ARCHITECTURE struct_reg OF eight_bit_reg IS ... BEGIN ... -- Описание для синтеза END ARCHITECTURE struct_reg; eight_bit_reg.vhd LIBRARY IEEE; USE IEEE.std_logic_1164.all; LIBRARY IEEE; USE IEEE.std_logic_1164.all;
  • 4. Декларативная часть (ENTITY) ENTITY entity_name IS [GENERIC (generic_interface_list);] [PORT (port_interface_list);] -- раздел операторов сущности [BEGIN{concurrent_assertion_statement| passive_concurrent_procedure_call_statement| passive_process_statement}] -- раздел деклараций сущности {entity_declarative_item} END [ENTITY] [entity_name]; Имя сущности (проектного модуля) Параметры проектного модуля Входные/Выходные порты (внешние сигналы)
  • 5. Декларативная часть (ENTITY)  должно быть уникальным в рамках всего проекта  должно совпадать с именем файла  в одном файле проекта может быть только одно объявление сущности entity_name  раздел декларации сущности используется для объявление локальных типов данных, подпрограмм, сигналов и т.д.  объявленные объекты доступны во всех архитектурных телах, подчиненных этой сущности  используется редко, чаще в testbench-модулях BEGIN …
  • 6. Декларативная часть (ENTITY) ENTITY complex IS GENERIC(N: NATURAL := 8; RETARD: TIME := 10 ns); PORT(a: IN BIT; b: OUT BIT_VECTOR(N-1 DOWNTO 0)); -- entity declarative part TYPE word IS ARRAY(15 DOWNTO 0) OF BIT; PROCEDURE start(SIGNAL sig: word) IS sig <= (OTHERS =>'1') AFTER RETARD; END start; -- entity executable part BEGIN ASSERT a'delayed'stable(4 ns) REPORT "error" SEVERITY ERROR; END ENTITY complex; Используется редко
  • 7. Секция PORT [port (port_interface_list);] {identifier, {…}: [mode] type_indication [:= expression]}; Имя порта Тип порта Значение умолчанию IN – входной порт (прием);  OUT – выходной порт (передача);  INOUT – двунаправленный порт (прием и передача) – возможны операции чтения и записи при работе с портом;  BUFFER – буферный порт (передача и использование как сигнал-операнд внутри объекта проекта), в отличие от порта вида INOUT источник данных для BUFFER может быть только внутренним;  LINKAGE – связный порт (двунаправленное соединение с другим портом таким же режимом, как и buffer). Режимы: Не рекомендуется использовать, т.к. результаты синтеза (аппаратная реализация) могут оказаться далекими от желаемых
  • 8. Секция PORT -- Декларативная часть n-разрядного сумматора ENTITY adder_n IS GENERIC (N : NATURAL := 4); PORT (a, b : IN STD_LOGIC_VECTOR(0 TO N-1); s : OUT STD_LOGIC_VECTOR(0 TO N-1); c : OUT STD_LOGIC); -- Перенос -- раздел деклараций сущности CONSTANT GND: STD_LOGIC := '0'; CONSTANT VCC: STD_LOGIC := '1'; CONSTANT TRI: STD_LOGIC := 'Z'; -- раздел операторов сущности BEGIN ASSERT N > 1 REPORT "N is too small" SEVERITY ERROR; END ENTITY adder_n;
  • 9. Секция PORT -- Декларация интерфейса двоично-десятичного -- синхронного счетчика с синхронной загрузкой -- (load) и синхронным сбросом (reset) ENTITY bcd_counter IS PORT (clk : IN STD_LOGIC; load : IN STD_LOGIC; reset : IN STD_LOGIC; data : IN INTEGER RANGE 0 TO 9; q : OUT INTEGER RANGE 0 TO 9); END ENTITY bcd_counter;  При объявлении входных/выходных портов (сигналов) рекомендуется группировать их по функциональному назначению (даже если их тип и вид.режим совпадают): • данные, управляющие сигналы, сигналы синхронизации и т.д.
  • 10. Секция GENERIC  используется для спецификации параметров проектируемого устройства  является необязательной секцией при описании ENTITY (декларативной сущности)  параметры, объявленные в GENERIC доступны во всем файле проекта  общепринятым правилом является именование констант, в том числе и задаваемых в секции generic, в верхнем регистре. GENERIC (parameter_name: parameter_type := parameter_value); ENTITY n_register IS GENERIC(WIDTH: NATURAL := 8); PORT(clk : IN BIT; en : IN BIT; data_in : IN BIT_VECTOR(WIDTH – 1 DOWNTO 0); data_out: OUT BIT_VECTOR(WIDTH – 1 DOWNTO 0)); END ENTITY n_register;
  • 11. Секция GENERIC ENTITY process_module IS GENERIC(WIDTH: NATURAL := 8; MASK_VALUE: BIT_VECTOR := "1010"); PORT(clk : IN BIT; data_bus : IN BIT_VECTOR(0 TO WIDTH - 1); out_port : out bit_vector(0 TO WIDTH – 1)); END ENTITY process_module; … -- & - оператор конкатенации out_port <= data_bus XOR MASK_VALUE & "1111"; GENERIC(WIDTH: INTEGER := 640; HEIGHT: INTEGER := 480; -- Данное объявление недопустимо, -- т.к. параметры WIDTH и HEIGHT -- заданы в текущей секции GENERIC RESOLUTION: INTEGER := WIDTH * HEIGHT; NEW_RESOLUTION: NATURAL := 5 * HEIGHT);
  • 12. Архитектурное тело (ARCHITECTURE)  содержит алгоритм работы проектируемого устройства  количество архитектурных тел в файле проекта может быть числом неограниченным ARCHITECTURE identifier OF entity_name IS {block_declarative_item} BEGIN {concurrent_statement} END [ARCHITECTURE] [identifier] Имя архитектурного тела Должно совпадать с именем ENTITY SIGNAL, TYPE, FILE, SUBTYPE, PROCEDURE, FUNCTION, VARIABLE, SHARED VARIABLE, COMPONENT, CONSTANT ... ТОЛЬКО параллельные операторы (PROCESS, WHEN, SELECT ...)
  • 13. Архитектурное тело (ARCHITECTURE) ARCHITECTURE identifier OF entity_name IS {block_declarative_item} BEGIN END [ARCHITECTURE] [identifier] Простой параллельный оператор (WHEN) Простой параллельный оператор (<=) Составной параллельный оператор (PROCESS) Последовательный оператор 1 Последовательный оператор 2 Последовательный оператор 3
  • 14. Архитектурное тело (ARCHITECTURE) ARCHITECTURE dataflow OF mux IS SIGNAL select : INTEGER RANGE 0 TO 3; BEGIN select <= 0 WHEN s0 = '0' AND s1 = '0' ELSE 1 WHEN s0 = '1' AND s1 = '0' ELSE 2 WHEN s0 = '0' AND s1 = '1' ELSE 3; END dataflow; Простой параллельный оператор
  • 15. Архитектурное тело (ARCHITECTURE) ARCHITECTURE fsm_rtl OF fsm IS TYPE fsm_states IS (INIT, IDLE, RUN, STOP); SIGNAL fsm_state: fsm_states := INIT; BEGIN … IF (input_data = "01") THEN fsm_state <= RUN; ELSE fsm_state <= STOP; END IF; … END fsm_rtl; Находится в теле составного параллельного оператора PROCESS
  • 16. Стили описания проекта  Поведенческий стиль – алгоритм функционирования устройства записывается в поведенческой форме, т.е. архитектурное тело содержит набор поведенческих конструкций (условные операторы, операторы цикла, ожидания и т.д.).  Структурный стиль – архитектурное тело состоит из некоторого набора компонентов (модулей), реализация которых выполнена в других файлах проекта.  Потоковый стиль – архитектурное тело состоит из операторов параллельного присваивания значения сигналу и его разновидностей (оператор условного и селективного присваивания значения сигналу).  Смешанный стиль – предполагает сочетание в одном архитектурном теле множество стилей, чаще всего поведенческий и структурный.
  • 17. Библиотеки (LIBRARY)  позволяет группировать наиболее часто используемые части исходного кода  могут быть скомпилированы для определенной САПР  библиотека STD является стандартной и подключается к проекту по умолчанию, включает пакеты (STANDARD и TEXTIO)  рабочая папка («библиотека»), в которой размещается текущий проект имеет имя WORK (подключается неявно)  в общем виде библиотеки представляют собой директорию, в которой размещаются (чаще всего) пакеты, реже – проектные решения в виде описания готовых устройств
  • 18. Библиотеки (LIBRARY) LIBRARY identifier; LIBRARY ieee; LIBRARY xilinxcorelib; -- включение нескольких библиотек LIBRARY altera_mf, lpm; Имя библиотеки STD_LOGIC_1164 NUMERIC_STD LIBRARY IEEE Пакеты Библиотека
  • 19. Пакеты (PACKAGE)  механизм пакетов позволяет сгруппировать некоторые описания в единую совокупность  представляют собой отдельный файл (*.vhd) • при именовании файла пакета рекомендуется добавлять суффикс _pckg (cpu_pckg.vhd)  не могут содержать реализации готовых устройств, а только их декларацию (на уровне компонентов)  имеют строгую структуру, которая определяется набором операторов
  • 20. Пакеты (PACKAGE) PACKAGE package_name IS {package_declarative_item} END [PACKAGE] [package_name]; PACKAGE BODY package_name IS {package_body_declarative_item} END [PACKGAGE BODY] [package_name]; some_pckg.vhd Декларативная часть пакета Тело пакета (Может отсутствовать) Имя пакета, должно совпадать с именем файла SIGNAL, TYPE, FILE, SUBTYPE, PROCEDURE, FUNCTION, VARIABLE, COMPONENT, CONSTANT реализация подпрограмм, определяются значения констант с отложенной инициализацией
  • 21. Пакеты (PACKAGE) PACKAGE cpu_types IS CONSTANT WORD_SIZE: POSITIVE := 16; CONSTANT ADDRESS_SIZE : POSITIVE := 24; SUBTYPE word IS BIT_VECTOR(WORD_SIZE - 1 DOWNTO 0); SUBTYPE address IS BIT_VECTOR(ADDRESS_SIZE-1 DOWNTO 0); TYPE status_value IS (HALTED, IDLE, FETCH, MEM_READ, MEM_WRITE, IO_READ, IO_WRITE, INT_ACK); END PACKAGE cpu_types;  Для получения доступа к объектам пакета: library_name.packet_name.object_name; Название библиотеки Название пакета Объект (TYPE, SUBTYPE, …)
  • 22. Пакеты (PACKAGE) ENTITY address_decoder IS PORT(addr : IN work.cpu_types.address; status : IN work.cpu_types.status_value; mem_sel, int_sel, io_sel: OUT BIT); END ENTITY address_decoder;  Каждый раз при использовании объектов, расположенных в пакетах, указывать полный к ним путь (имя)? USE library_name.packet_name.object_name;  Символьный литерал  Операторный символ  ALL Используй условные ссылки:
  • 23. Пакеты (PACKAGE) USE work.cpu_types.ALL; -- Используем условную ссылку и клаузу USE ENTITY address_decoder IS PORT(addr : IN address; status : IN status_value; mem_sel, int_sel, io_sel: OUT BIT); END ENTITY address_decoder; -- Пакеты могут включать сторонние пакеты и библиотеки LIBRARY IEEE; USE ieee.std_logic_1164.ALL; -- Тип std_logic определен в пакете std_logic_1164 PACKAGE project_types IS SUBTYPE logic IS std_logic RANGE std_logic'left to 'Z'; END PACKAGE project_types;
  • 24. Пакеты (PACKAGE) PACKAGE various IS -- Отложенная константа, декларация которой -- проводится в теле пакета CONSTANT hold: TIME; -- Декларация прототипа процедуры PROCEDURE push(SIGNAL btn: INOUT STD_LOGIC; hold: TIME); END PACKAGE various; -- Тело пакета PACKAGE BODY various IS CONSTANT hold: TIME := 100 ns; -- отложенная константа PROCEDURE push(SIGNAL btn: INOUT std_logic; hold: TIME) IS BEGIN button <= '0', '1' AFTER hold; WAIT FOR 2*hold; END PROCEDURE push; END PACKAGE BODY various;