. При позиционной реализации список оператора PORT MAP имеет вид PORT MAP (сигнал 1, сигнал 2, … сигнала);, а при ключевом соответствии PORT MAP (порт => сигнал); Допускается использовать синтаксис комбинированной (смешанной) реализации PORT MAP (порт => сигнал, сигнал 1, сигнал 2).">
Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемАнтонина Лошкомоева
1 ОСНОВЫ ЯЗЫКА VHDL 1
2 Структурное представление проекта 2 Язык VHDL предоставляет возможность структуризации описания так называемые структурные архитектурные тела (Structural Architectural Body, SAB). Структурное архитектурное тело представляет проект в виде набора компонентов и их связей, т.е. приближает описание к реальной конфигурации проектируемого устройства. Все используемые в проекте компоненты должны иметь свое ENTITY и однозначно заданное поведение, например поведенческое архитектурное тело, которое следует заранее скомпилировать в библиотеку проекта или иную библиотеку, объявленную перед ENTITY составного проекта. В разделе объявлений SAB, кроме характерных для любых архитектурных тел деклараций, таких как декларации типов, сигналов, констант, включаются специфические подразделы: обязательный подраздел декларации прототипов используемых компонентов и необязательный подраздел объявления конфигураций. Раздел операторов SAB содержит операторы вхождения компонентов, которые, собственно, и определяют порядок соединения компонентов. COMPONENT IS [ ] END COMPONENT [ ]; Здесь и - прямая копия высказываний GENERIC и PORT из текста объявления ENTITY соответствующего компонента. Если в устройстве есть несколько одинаковых модулей, то прототип декларируется только один раз. В подразделе объявления сигналов обязательно объявление всех соединений между блоками. Каждый сигнал относят к типу, определенному в разделе PORT соответствующего модуля.
3 Структурное представление проекта 3 Основными операторами SAB являются операторы вхождения компонентов, которые определяют порядок соединения включаемых в проект модулей и, возможно, их параметры. ::= : [ COMPONENT ] GENERIC MAP ( ) PORT MAP ( ); ::= ([ ] => «,[ ] => ») Для параметров настройки фактическим параметром может быть только константное выражение, а для порта - только имя сигнала либо имя порта "главного" модуля. С помощью оператора PORT MAP реализуются межкомпонентные связи заданного экземпляра компонента. Реализация связей выполняется путем создания схемы (map) соединений портов и внутренних сигналов проекта. Список таких портов и сигналов указывается в круглых скобках оператора port map. Соответствие портов при создании экземпляров компонентов может быть осуществлено либо позиционным сопоставлением, либо ключевым соответствием с использованием оператора =>. При позиционной реализации список оператора PORT MAP имеет вид PORT MAP (сигнал 1, сигнал 2, … сигнала);, а при ключевом соответствии PORT MAP (порт => сигнал); Допускается использовать синтаксис комбинированной (смешанной) реализации PORT MAP (порт => сигнал, сигнал 1, сигнал 2). . При позиционной реализации список оператора PORT MAP имеет вид PORT MAP (сигнал 1, сигнал 2, … сигнала);, а при ключевом соответствии PORT MAP (порт => сигнал); Допускается использовать синтаксис комбинированной (смешанной) реализации PORT MAP (порт => сигнал, сигнал 1, сигнал 2).">
4 Структурное представление проекта 4 Пусть проект задан следующей структурной схемой Каждый компонент проекта должен быть описан и скомпилирован в библиотеку проекта. Например, компонент AND2 может быть описан следующим образом: entity AND2 is port (in1, in2: in std_logic; out1: out std_logic); end AND2; architecture behav2 of AND2 is begin out1 key1, out1 => key1_NOT); U1: NOT1 port map (in1 => key2, out1 => key2_NOT); -- и т.д.
5 Настройка и конфигурирование компонентов 5 Очень часто устройства проектируются не только как изделия с наперед заданными свойствами, но и для возможности их применения в различных приложениях, требующих однотипных преобразований. Есть два основных пути создания программ, описывающих множество модулей с идентичными функциями, иначе перестраиваемых модулей: - использование параметров настройки (GENERIC); - разработка нескольких архитектурных тел, подчиненных общему ENTITY, иными словами, имеющих одинаковую алгоритмическую сущность при различии способа описания или способа реализации. Модуль, содержащий декларацию параметров настройки (GENERIC), называют параметризованным. Фактическое значение задается в списке соответствий оператора вхождения. Параметры, определяющие количественные свойства реализаций (например, разрядность данных, время задержки объявляются в операторах генерации, синтаксис которых определен как: ::= : GENERATE » END GENERATE [ ];
6 Настройка и конфигурирование компонентов 6 Программа, представленная ниже, иллюстрирует регистр с синхронной загрузкой параллельного кода, который, в зависимости от параметров настройки, может интерпретироваться как сдвигающий регистр со сдвигом в сторону старших разрядов (right), со сдвигом в сторону младших (left), или как реверсивный регистр сдвига (bidir). LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY shift_register IS GENERIC( num_bits: integer:=8; -- число разрядов dir: string:="right"); -- тип регистра - "left" - со сдвигом влево -- "right" - со сдвигом вправо -- "bidir" реверсивный PORT (clk: IN std_logic; oper: IN std_logic_vector (1 DOWNTO 0); пустая операция левый сдвиг для типа "bidir" и сдвиг для других типов правый сдвиг для типа "bidir" и сдвиг для других типов загрузка кода dl, dr: IN std_logic; input: IN std_logic_vector (num_bits-1 DOWNTO 0) ; output: OUT std_logic_vector (num_bits-1 DOWNTO 0) ); END shift_register; ARCHITECTURE behave OF shift_register IS BEGIN ASSERT (dir="left" OR dir="right" OR dir= "bidir") REPORT "mode must be 'left', 'right' or 'bidir' " SEVERITY error; LEFTSHIFT: IF dir="left" GENERATE PROCESS (clk) VARIABLE state: std_logic_vector (num_bits-1 DOWNTO 0); BEGIN IF (clk='1' AND clk'event) THEN IF (oper="11") THEN state:=input; ELSIF (oper="10" OR oper="01") THEN FOR i IN num_bits-1 DOWNTO 1 LOOP state(i):=state(i-1); END LOOP; state(0):=dl; END IF; --oper END IF; --clk='1' output
7 Настройка и конфигурирование компонентов 7 RIGHTSHIFT: IF dir="right" GENERATE PROCESS (clk) VARIABLE state: std_logic_vector (num_bits-1 DOWNTO 0); BEGIN IF (clk='1' AND сlk'event) THEN IF (oper="11") THEN state:=input; ELSIF (oper="01" OR oper="10") THEN FOR i IN 0 TO num_bits-2 LOOP state(i):=state(i+1); END LOOP; State (num_bits -1):=dR; END IF; --oper END IF; --clk='1' output
8 Настройка и конфигурирование компонентов 8 В случаях, когда вариативность компонента достигается разработкой нескольких архитектурных тел, т.е. первичному проектному модулю (ENTITY) этого компонента в библиотеке проекта соответствует несколько различных архитектурных тел, проектный модуль высшего уровня иерархии должен содержать объявление конфигурации компонента. Объявление конфигурации определяет, какое именно архитектурное тело компонента используется в текущем проекте или сеансе отладки. Объявление конфигурации компонента подчиняется следующему синтаксическому правилу: :: = FOR USE ; ::= ENTITY ( ) ::= : ::= «, » | OTHERS | ALL Пусть, например, в библиотеку проекта скомпилирован текст программы LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY bit_count IS PORT( input : IN std_logic_vector (15 DOWNTO 0); output: OUT integer RANGE 0 TO 15); END bit_count; ARCHITECTURE pure_behave OF bit_count IS -- END pure_behave; ARCHITECTURE four_channel_behave OF bit_count IS -- END four_channel_behave; ARCHITECTURE comb_logic OF bit_count IS -- END comb_logic;
9 Настройка и конфигурирование компонентов 9 ENTITY bit_count_usage IS PORT (real_input: IN std_logic_vector ( 47 DOWNTO 0); real_output: OUT integer RANGE 0 TO 48); END bit_count_usage; ARCHITECTURE selected_architectures OF bit_count_usage IS COMPONENT bit_count PORT (input : IN std_logic_vector (15 DOWNTO 0); output: OUT integer RANGE 0 TO 15); ЕND COMPONENT; FOR m1: bit_count USE ENTITY work.bit_count (pure_behave); FOR OTHERS: bit_count USE ENTITY work.bit_count (comb_logic); SIGNAL first, second, third: integer: RANGE 0 TO 15; BEGIN m1: bit_count PORT MAP (input => real_input (15 DOWNTO 0),output=>first); m2: bit_count PORT MAP (input => real_input (31 DOWNTO 16), output=> second); m3: bit_count PORT MAP (input => real_input (47 DOWNTO 32), output=> third); real_output
10 Пакеты в VHDL 10 Пакет - это программный модуль, содержащий описание объектов, доступных нескольким другим программным модулям. В пакете могут быть объявлены глобальные типы, константы, функции, сигналы и т. п. Фактически, общие для нескольких под проектов типы и сигналы можно объявить только в пакете. Пакет представляется двумя структурными единицами - обязательным первичным модулем "декларация пакета" и необязательным вторичным модулем "тело пакета". ::= PACKAGE IS END [ PACKAGE ] [ ]; Раздел деклараций пакета может содержать спецификации подпрограмм, декларации типов и подтипов, констант, сигналов, атрибутов, компонентов и ряда других объектов. Тело пакета содержит конкретизацию способов вычисления функций и записывается в соответствии со следующим синтаксическим правилом: :: = PACKAGE BODY IS END [ PACKAGE BODY ] [ ]; Раздел деклараций тела пакета содержит тела подпрограмм (спецификация этих подпрограмм обязательно присутствует в разделе деклараций пакета), а также дополнительные декларации объектов, используемых в представленных подпрограммах. Могут декларироваться типы, константы, вложенные подпрограммы, объекты некоторых иных классов. Эти объекты недоступны для других проектных модулей.
11 Пакеты в VHDL 11 Пример. Декларация пакета содержит объявление функций, включенных в тело пакета, в данном случае, функций преобразования типов данных из std_iogic_vector в положительное целое и наоборот. LIBRARY ieee; USE IEEE.std_logic_1164.all; PACKAGE std_logic_util IS FUNCTION CONV_STD_LOGIG_VECTOR (ARG: INTEGER; SIZE: INTEGER) RETURN STD_LOGIC_VECTOR; FUNCTION CONV_INTEGER (ARG: STD_LOGIC_VECTOR) RETURN INTEGER; END std_logic_util; PACKAGE BODY std_logic_util IS TYPE tbl_type IS ARRAY (STD_ULOGIC) OF STD_ULOGIC; CONSTANT tbl_BINARY : tbl_type := ('0', '0', '0', '1' '0', '0', '0', '1' '0'); FUNCTION CONV_STD_LOGIC_VECTOR (ARG: INTEGER; SIZE: INTEGER) RETURN STD_LOGIC_VECTOR IS --- END; FUNCTION CONV_INTEGER(ARG: STD_LOGIC_VECTOR) RETURN integer IS --- END; END std_logic_util; Декларация использования пакета, приведенного в листинге, и скомпилированного в рабочую библиотеку проекта work, может выглядеть следующим образом: USE work.std_logic_util.all; Спецификация функций Декларация типов Декларация констант Тела подпрограмм
12 СПАСИБО ЗА ВНИМАНИЕ
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.