Разработка светодиодных систем отображения информации

Системы передачи по волоконно-оптическим линиям связи

 

Светодиодные экраны

Бегущие строки

НПП “Цифровые решения”

Контрактная разработка радиоэлектронных устройств

Цифровая обработка сигналов и изображений

Поставка высокотехнологичных изделий

 

ПЛИС фирмы Altera: проектирование устройств обработки сигналов.

Стешенко В.Б.

 

Глава4. Язык описания аппаратуры VHDL

4.12. Синтезируемое подмножество VHDL

4.12.1. Общие сведения

Как известно, изначально язык описания аппаратуры VHDL создавался как средство моделирования цифровых систем. Однако, его популярность и определенные удобства, каковые появляются у разработчика, привели к тому, что модели на языке VHDL стали средством описания алгоритмов, синтезируемых специальными программными средствами в файлы прошивки (межсоединений) ПЛИС. В то же время для каждого програмного продукта набор поддерживаемых конструкций языка различается и порой довольно существенно. В настоящее время сделана попытка в стандарте IEEE P1076.6 определить синтезируемое подмножество языка VHDL. В этом стандарте определяются те элементы языка, которые могли бы быть синтезированы средствами синтеза (компиляторами) на уровне регистровых передач (register transfer level). В этом случае средства синтеза (synthesis tools), удовлетворяющие стандарту IEEE P1076.6, могли бы обеспечить подлинную переносимость проекта и возможность единообразного описания. Рассмотрим элементы синтезируемого подмножества языка VHDL.

4.12.2. Переопределенные типы (redefined types)

Средства синтеза, которые соответствуют стангдарту IEEE P1076.6 должны поддерживать следующие переопределенные типы:

BIT, BOOLEAN и BIT_VECTOR в соответствии со стандартом IEEE Std 1076-1993

INTEGER в соответствии со стандартом IEEE Std 1076-1993

STD_ULOGIC, STD_ULOGIC_VECTOR, STD_LOGIC and STD_LOGIC_ в соответствии со пакетом (ackage) STD_LOGIC_1164 (стандарт IEEE Std 1164-1993)

SIGNED and UNSIGNED в соответствии с пакетом NUMERIC_BIT, являющегося частью стандарта IEEE Std 1076.3-1997

SIGNED and UNSIGNED в соответствии с пакетом (package) NUMERIC_STD, являющегося частью стандарта IEEE Std 1076.3-1997 

Кроме того, должна быть обеспечена поддержка средствами синтеза типов, определенных пользователем (user-defined types).

4.12.3. Методика верификации синтезируемого описания (Verification methodology)

Схемы, полученные в результате процедуры синтеза, могут быть как последовательностные (sequential), так и комбинационные (combinational). Как известно, последовательностные схемы содержат некоторые элементы памяти (internal storage), такие как защелки, регистры и т.п. (latch, register, memory), которые учитываются при определении выходного значения сигнала, в то время, как выход комбинационной схемы зависит только от входных переменных.

Процесс верификации синтезированного проекта состоит в подаче тестовых воздействий как на поведенческую модель, так и на синтезированную, с последующим сравнением результатов их функционирования. Нетрудно понять, что такой подход к процессу проектирования позволяет по заранее обкатанной «чисто поведенческой » модели отработать методику тестирования системы.

Как правило входной тестовый сигнал должен удовлетворять следующим критериям:

  • входные данные не содержат неизвестных величин
  • при верификации последовательностных устройств следует иметь в виду, что триггеры имеют время установления и тестовые сигналы должны иметь необходимую для завершения переходных процессов длительность
  • Тактовые сигналы и входные данные должны изменяться спустя достаточное время после асинхронного сброса или установки
  • Для синхронных последовательностных устройств, первичные входные сигналы должны измениться достаточнозначительно раньше, чем активный фронт синхроимпульса. Также, входные данные должны остаться неизменными достаточно долго, чтобыбыть удержаными относительно активного фронта синхроимпульса.
  • Аналогичные требования к времени удержаия сигнала и на входах последовательностной схемы, управляемой потенциалами

Таким образом, входные данные должны остаться неизменными достаточно долго, чтобы обеспечить требуемое время удержания (hold times) сигнала на входе.

Средства синтеза могут доопределять неопределенные значения, появляющиеся на магистральных выходах в одной модели как эквивалент к логическим значениям в другой модели. По этой причине, следует запоминать входной задающий сигнал до того,как выходы проведено сравнение логических значений на выходах обеих моделей

4.12.3.1. Верификация комбинационных устройств (Combinational verification)

При верификации комбинационной логической схемы после подачивходной задающего тестового сигнала должно пройти некоторое время, прежде чем начать анализ сигнала выходах схемы. Как правило, это досуществляется в цикле, таким образом, что выходы анализируются непосредственно перед подачей следующего набор входных воздействий, то есть по завершению переходных процессов. Каждая итерация цикла должна включать достаточную задержку, превышающую задержки распространения (transient delays) и паузы (timeout clause delays). Если не придерживаться этих правил, то тестируемое устройство может никогда не достигнуть установившегося состояния (то есть демонстрировать колебательное поведение), например:

A <= not A after 5 ns;

4.12.3.2. Верификация последовательностных устройств (Sequential verification)

При верификации последовательностных устройств обычно к входам схемы прикладываются внешние воздействия, затем оценивается состояние выходов. Затем процесс повторяется. Но поскольку последовательностное устройство управляется либо фронтом, либо уровнем тактового сигнала, то процесс верификации имеет некоторые особенности.

При верификации устройств, тактируемых фронтом (Edge-sensitive models) подача входных данных и проверка выхода тактируется синхросигналом. Проверка выхода должна выполняться до подачи следующего активного фронта тактового сигнала. Таким образом время переходных процессов в триггерах и период синхросигнала должны соответствовать друг другу.

При верификации устройств, тактируемых уровнем ( Level-sensitive models) следует учитывать, что их поведение, вообще говоря, гораздо сложнее предсказать, чем поведение устройств, тактируемых фронтом из-за асинхронной природы взаимодействий сигналов. Проверка результатов синтеза зависит от приложения. Общее правило - вводные данные должны установиться пока активен сигнал разрешения, проверка выходов осуществляется при неактивном сигнале разрешения.

4.12.4. Моделирование элементов аппаратуры (Modeling hardware elements)

Рассмотрим особенности описания таких устройств, как тактируемые фронтом последовательностные схемы (edge-sensitive storage elements), последовательностные схемы, тактируемые уровнем (level-sensitive storage elements) и схемы с тремя состояниями (three-state drivers).

4.12.4.1. Синхронные последовательностные схемы (Edge-sensitive sequential logic)

4.12.4.1.1. Типы тактового сигнала (Clock signal type)

Для задания тактового сигнала могут быть использованы типы BIT, STD_ULOGIC и их подтипы (например,. STD_LOGIC) с минимальным набором значений '0' и '1'. Рассмотрим пример описания тпктового сигнала.

 

signal BUS8: std_logic_vector(7 downto 0);

...

process (BUS8(0))

begin

if BUS8(0) = '1' and BUS8(0)'EVENT then

...

...

-- BUS8(0) используется как тактовый сигнал.

4.12.4.1.2. Определение фронта тактового сигнала

Функция RISING_EDGE представляет передний фронт импульса, а функция FALLING_EDGE используется для описания заднего фронта тактового импульса. Функции RISING_EDGE и FALLING_EDGE объявляются в пакете STD_LOGIC_1164 (стандарт IEEE Std 1164-1993) или NUMERIC_BIT, определенном в стандарте IEEE Std 1076.3-1997. Синтаксис определения тактового сигнала имеет вид:

 

clock_edge ::=

RISING_EDGE(clk_signal_name)

| FALLING_EDGE(clk_signal_name)

clock_level and event_expr

event_expr and clock_level

clock_level ::=

clk_signal_name = '0' | clk_signal_name = '1'

event_expr ::=

clk_signal_name'EVENT

| not clk_signal_name'STABLE

 

4.12.4.1.3. Передний фронт

Ниже показано задание переднего фронта тактового сигнала для использования в качестве условия в условном операторе ( if statement)

 

(positive <clock_edge>):

RISING_EDGE(clk_signal_name)

clk_signal_name'EVENT and clk_signal_name = '1'

clk_signal_name = '1' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '1'

clk_signal_name = '1' and not clk_signal_name'STABLE

Для использования в качестве условия в операторе wait until используются следующие конструкции для задания переднего фронта

 

RISING_EDGE(clk_signal_name)

clk_signal_name = '1'

clk_signal_name'EVENT and clk_signal_name = '1'

clk_signal_name = '1' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '1'

clk_signal_name = '1' and not clk_signal_name'STABLE

 

4.12.4.1.4. Задний фронт

Ниже показано задание заднего фронта тактового сигнала для использования в качестве условия в условном операторе ( if statement)

 

FALLING_EDGE(clk_signal_name)

clk_signal_name'EVENT and clk_signal_name = '0'

clk_signal_name = '0' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '0'

clk_signal_name = '0' and not clk_signal_name'STABLE

 

Для использования в качестве условия в операторе wait until используются следующие конструкции для задания заднего фронта

 

FALLING_EDGE(clk_signal_name)

clk_signal_name = '0'

clk_signal_name'EVENT and clk_signal_name = '0'

clk_signal_name = '0' and clk_signal_name'EVENT

not clk_signal_name'STABLE and clk_signal_name = '0'

clk_signal_name = '0' and not clk_signal_name'STABLE

4.12.4.2. Описание синхронных последовательностных устройств

При синхронном назначении (synchronous assignment) переменных или сигналов их изменение происходит по фронту тактового импульса (clock edge).

Сигнал, модифицированный в синхронном назначении, описывает один или несколько синхронных триггеров (edge-sensitive storage elements).

Переменная, модифицированная в синхронном назначении, может быть использована для описания синхронного триггера. В одном процессе может быть использован только один фронт тактового сигнала

4.12.4.2.1. Использование оператора IF

Для описания синхронных последовательностных устройств удобно использовать условный оператор if, задавая фронт сигнала в качестве условия (см. выше). Приведем типовой шаблон (template) для описания синхронного последовательностного устройства

 

process (<clock_signal>)

<declarations>

begin

if <clock_edge> then

<sequential_statements>

end if;

end process;

 

Тактовый сигнал в секции <clock_edge> должен задаваться в списке сигналов возбуждения процесса (process sensitivity list).

Последовательностные операторы, предшествующие или следующие за условным оператором не поддерживаются средствами синтеза. Например

DFF: process(CLOCK)

<declarations>

begin

if CLOCK'EVENT and CLOCK = '1' then

Q <= D; -- тактироваие передним фронтом

end if;

end process;

4.12.4.2.2. Использование конструкции wait

Синхронные последовательностные устройства (edge-sensitive storage element) могут быть описаны с использованием тактового сигнала (clock edge) как условия в операторе wait until.

Оператор ожидания ( wait until statement) всегда является первым оператором процесса. В каждом процессе может быть только один оператор wait until. Ниже приводится типовой шаблон для создания описания синхронных последовательностных устройств с помощью оператора wait:

 

process

<declarations>

begin

wait until <clock_edge>;

-- должен быть первым оператором в процессе

<sequential_statements>

end process;

Поскольку оператор wait until является первым оператором процесса, асинхронные сброс или установка не могут быть описаны с его помощью.

Сигналы, назначенные с помощью условного оператора или оператора выбора, не могут быть использованы для описания синхронных последовательностных устройств

Приведем пример D триггера

 

DFF: process

begin

wait until CLOCK = '0';

Q <= D; -- синхронизация задним фронтом

end process;

 

Еще один пример (счетчик)

process

variable VAR: UNSIGNED(3 downto 0);

begin

wait until CLOCK = '1';

VAR := VAR + 1;

COUNT <= VAR;

end process;

 

Переменная VAR может описывать четыре триггера, синхронизируемых по переднему фронту

 

4.12.4.3. Асинхронные сброс и установка (asynchronous set-reset)

В схемах тактируемых фронтом, возможны асинхронные сброс и установка (asynchronous set/reset). Ниже приводится шаблон асинхронного сброса и установки.

 

process (<clock_signal>, <asynchronous_signals>)

<declarations>

begin

if <condition1> then

<sequential_statements>

elsif <condition2> then

<sequential_statements>

elsif <condition3> then

...

elsif <clock_edge> then

<sequential_statements>

end if;

end process;

 

В ветвях оператора if проверяется условие сброса или установки. Фронт тактового сигнала может появиться только пр выполнении условия в операторе elsif.

Последовательостные операторы (Sequential statements) не должны использовать тактовый импульс в условиях операторов if.

Список сигналов возбуждения процесса (sensitivity list) должен содержать следующие сигналы:

Тактовый сигнал задаваемый с помощью соответствующего выражения

Все сигналы, проверяемые в условиях оператора if, который содержит выражение для фронта синхроимпульса

Все сигналы, использующиеся в последовательностных операторах, управляемых оператором if

Последовательностные операторы, предшествующие или следующие за условным оператором не поддерживаются средствами синтеза.

Следует помнить что условия асинхронного сброса и установки не должны содержать выражений для фронта синхросигнала. Асинхронные сброс или установка имеют более высокий приоритет, чем синхросигнал.

Очевидно, что необязательно описывать как сброс, так и установку. В 70% случаев достаточно асинхронного сброса.

Приведем пример описания D-триггера с асинхронной установкой.

 

AS_DFF: process (CLOCK, RESET, SET, SET_OR_RESET, A)

begin

if RESET = '1' then

Q <= '0';

elsif SET = '1' then

Q <= '1';

elsif SET_OR_RESET = '1' then

Q <= A;

elsif CLOCK'EVENT and CLOCK = '1' then

Q <= D;

end if;

end process;

 

В этом примере сигнал Q сбрасывается по сигналу RESET и устанавливается по сигналу, SET, сигнал SET_OR_RESET может либо сбрасывать, либо устанавливать триггер в зависимости от величины A.

4.12.4.4. Последовательностные узлы с потенциальным управлением (Level-sensitive sequential logic)

Последовательностные узлы (storage element), управляемыми уровнями, моделируются с помощью сигналов или переменных, при этом внутри процесса не должно присутствовать конструкций, работающих по фронтам импульсов, а также в процессе не должно быть явных назначений сигналов с использованием оператора назначения (assignment statement). Все сигналы и переменные, участвующие в процессе должны иметь четко определенные значения. Сигналы или переменные, назначаемые в процессе, не должны использовать фронты синхроимпульса.

В списке сигналов возбуждения процесса (process sensitivity list) должны быть отражены все сигналы, учавствующие в процессе.

Переменные в подпрограммах никогда не используются при описании последовательностных узлов с потенциальным управлением, потому что переменные в подпрограммах всегда инициализируются на каждом запросе. Назначения сигнала с использованием операторов if или case не следует использовать при описании последовательностных узлов с потенциальным управлением.

рекомендует избежать стиля моделирования, в котором значение сигнала или переменной читается перед его назначением.

Пример последовательностного узла с потенциальным управлением.

 

LEV_SENS:process (ENABLE, D)

begin

if ENABLE = '1' then

Q <= D;

end if;

end process;

4.12.4.5. Логика с третьим состоянием и моделирование шин (Three-state and bus modeling)

Трехстабильная щина моделируется когда сигналу назначается значение 'Z' в соответсвии со стандартом IEEE Std 1164-1993. Назначение третьего состояния может быть условным (conditional) или безусловным (unconditional). Для сигналов, имеющих несколько источников – драйверов (drivers) если хотя бы один драйвер имеет третье состояние, то остальные сигналы-драйверы должны иметь по крайней мере одно назначение в 'Z состояние.

Следует заметить, что если объект назначен в 'Z' состояние в процессе, инициализируемом фронтом или уровнем, средства синтеза могут ввести триггерры на всех входах устройства с третьим состоянием.

4.12.4.6. Описание комбинационных логических схем (Modeling combinational logic)

Любой процесс, не содержащий тактовых импульсов (clock edge) или оператора ожидания (wait statement) описывыяется или с использованием конструкций комбинационной логики, или последовательностных схем, управляемыми уровнями.

Если назначение переменной или сигнала происходит во всех возможных вариантах выполнения процесса, и все переменные и сигналы имеют определенные значения, то переменная или сигнал описывают комбинационную логику.

Если сигнал или переменная считываются до их изменения, то они могут быть использованы для описания комбинационной логики. Оператор параллельного назначения сигналов (Concurrent signal assignment statements) всегда описывает комбинационную схему.

Список чувствительности (сигналов возбуждения) процесса (process sensitivity list) должен содержать все сигналы, влияющие на процесс.

4.12.5. Директивы компилятора (псевдокомментарии, Pragmas)

Псевдокомментарии влияют на способ синтеза модели. В VHDL приняты следующие псевдокомментарии (Pragmas) – Аттрибуты (Attributes) и метакомментарии (Metacomments).

4.12.5.1. Аттрибуты компилятора(Attributes)

Аттрибуты компилятора не следует путать с аттрибутами сигналов – это «две большие разницы». Первые используются для кодирования представлений перечислимых типов, а атрибуты сигналов определяют свойства сингнала – его изменение и т.п.

4.12.5.1.1. Аттрибут компилятора ENUM_ENCODING

Атрибут ENUM_ENCODING определяет способ кодирования значений перечисляемых типов. В определении этого атрибута задается представление литералов перечисляемых типов в форме строки. Строка состоит из символов, разделенных одним или несколькими пробелами. Число символов должно соответствовать числу литералов в перечеслимом типе.

Каждый символ состоит из последовательности '0' и '1'.. Символ '0', очевидно означает низкий логический уровень, символ '1' - высокий.

Рассмотрим пример объявления атрибута:

type <enumeration_type> is (<enum_lit1>, <enum_lit2>, ... <enum_litN>);

attribute ENUM_ENCODING: STRING;

 

Спецификация атрибута определяют кодирование для перечисления литералов

 

attribute ENUM_ENCODING of <enumeration_type>: type is

"<token1><space><token2><space>... <tokenN>";

 

Символ <token1> задает представление <enum_lit1>, и т.д.

Следует помнить, что использование этого аттрибута приводить к несоответствиям моделирования, например при использованием операторов отношения.

Например

attribute ENUM_ENCODING: string;

type COLOR is (RED, GREEN, BLUE, YELLOW, ORANGE);

attribute ENUM_ENCODING of COLOR: type is "10000 01000 00100 00010 00001";

-- перечислимый литерал RED представляется как 10000,

-- GREEN как 01000, и т.д.

4.12.5.2. Метакомментарии (Metacomments)

Метакомментарии используются для управления компиляцией. Существует два типа метакомментариев –

-- RTL_SYNTHESIS OFF

-- RTL_SYNTHESIS ON

 

Средства синтеза игнорируют любое описание на VHDL после диррективы “RTL_SYNTHESIS OFF” и возобнавляют процесс синтеза по директиве “RTL_SYNTHESIS ON” .

4.12.6. Синтаксис синтезируемого подмножества VHDL

4.12.6.1. Описание интерфейса (Entity declarations)

entity_declaration ::=

entity identifier is

entity_header

entity_declarative_part

[ begin

entity_statement_part ]

end [ entity ] [ entity_simple_name ] ;

Поддерживаемые средствами синтеза конструкции

• entity_declaration

Игнорируемые при синтезе конструкции

• entity_statement_part

Не поддерживаемые средствами синтеза конструкции

• entity_declarative_part

• Зарезервированное слово entity после end

 

Например

library IEEE;

use IEEE.std_Logic_1164.all;

entity E is

generic(DEPTH : Integer := 8);

port (CLOCK : in std_logic;

RESET : in std_logic;

A :in std_logic_vector(7 downto 0);

B :inout std_logic_vector(7 downto 0);

C :out std_logic_vector(7 downto 0));

end E;

4.12.6.2. Заголовок интерфейса (Entity header)

entity_header ::=

[ formal_generic_clause ]

[ formal_port_clause ]

generic_clause ::= generi c(generic_list);

port_clause ::= por t(port_list);

Поддерживаемые средствами синтеза конструкции

• entity_header

• generic_clause

• port_clause

4.12.6.3. Настраиваемые типы (Generics)

generic_list ::= generic_interface_list

Поддерживаемые средствами синтеза конструкции

• generic_list

4.12.6.4. Порты (Ports)

port_list ::= port_interface_list

Поддерживаемые средствами синтеза конструкции

• port_list

Игнорируемые при синтезе конструкции

• Начальные значения в списке портов (port_list)

4.12.6.5. Описание интерфейсной части (Entity declarative part)

entity_declarative_part ::=

{ entity_declarative_item }

entity_declarative_item ::

subprogram_declaration

| subprogram_body

| type_declaration

| subtype_declaration

| constant_declaration

| signal_declaration

| shared_variable_declaration

| file_declaration

| alias_declaration

| attribute_declaration

| attribute_specification

| disconnection_specification

| use_clause

| group_template_declaration

| group_declaration

Не поддерживаемые средствами синтеза конструкции

• entity_declarative_part

• entity_declarative_item

4.12.6.6. Описание операторов интерфейса (Entity statement part)

entity_statement_part ::=

{ entity_statement }

entity_statement ::=

concurrent_assertion_statement

| passive_concurrent_procedure_call

| passive_process_statement

Игнорируемые при синтезе конструкции

• entity_statement_part

• entity_statement

 

Описание операторов интерфейса (entity statement part) используется для контроля моделирования. Оно не может задавать сигналы в архитектурном теле и соответственно не оказывает влияение на поведение архитектурного тела.

4.12.6.7. Архитектурные тела (Architecture bodies)

architecture_body ::=

architecture identifier of entity_name is

architecture_declarative_part

begin

[ architecture_statement_part ]

end [ architecture ] [ architecture_simple_name ] ;

 

Поддерживаемые средствами синтеза конструкции

• architecture_body

• Множественные архитектуры (Multiple architectures)

Не поддерживаемые средствами синтеза конструкции

• Глобальные взаимодействия сигналов между синтезируемыми архитекурными телами

• Зарезервированное слово architecture после зарезервированного слова end

4.12.6.8. Объявление архитектуры (Architecture declarative part)

 

architecture_declarative_part ::=

{ block_declarative_item }

block_declarative_item ::=

subprogram_declaration

| subprogram_body

| type_declaration

| subtype_declaration

| constant_declaration

| signal_declaration

| shared_variable_declaration

| file_declaration

| alias_declaration

| component_declaration

| attribute_declaration

| attribute_specification

| configuration_specification

| disconnection_specification

| use_clause

| group_template_declaration

| group_declaration

Поддерживаемые конструкции

• architecture_declarative_part

• block_declarative_item

Игнорируемые при синтезе конструкции

• alias_declaration

• configuration_specification

• disconnection_specification

• Определенные пользователем аттрибуты

Не поддерживаемые средствами синтеза конструкции

• shared_variable_declaration

• file_declaration

• group_template_declaration

• group_declaration

 

4.12.6.9. Операторы архитектуры (Architecture statement part)

architecture_statement_part ::=

{ concurrent_statement }

Поддерживаемые средствами синтеза конструкции

• architecture_statement_part

4.12.6.10. Объявление конфигурации (Configuration declaration)

configuration_declaration ::=

configuration identifier of entity_name is

configuration_declarative_part

block_configuration

end [configuration] [ configuration_simple_name];

configuration_declarative_part ::=

{ configuration_declarative_item }

configuration_declarative_item ::=

use_clause

| attribute_specification

| group_declaration

Поддерживаемые средствами синтеза конструкции

• configuration_declaration

Не поддерживаемые средствами синтеза конструкции

•configuration_declarative_part

•configuration_declarative_item

•Зарезервированное слово configuration после зарезервированного слова end

Объявление конфигурации поддерживается для расширения возможностей описания архитектуры в многоуровневых иерархических проектах.

4.12.6.11. Конфигурация блока (Block configuration)

block_configuration ::=

for block_specification

{ use_clause }

{ configuration_item }

end for ;

block_specification ::=

architecture_name

| block_statement_label

| generate_statement_label [ (index_specification) ]

index_specification ::=

discrete_range

| static_expresion

configuration_item ::=

block_configuration

| component_configuration

Поддерживаемые конструкции

• block_configuration

• block_specification

Не поддерживаемые средствами синтеза конструкции

• use_clause

• index_specification

• configuration_item

• block_statement_label

• generate_statement_label

4.12.6.12. Конфигурация компонента (Component c onfiguration)

component_configuration ::=

for component_specification

[ binding_indication ; ]

[ block_configuration ]

end for ;

Не поддерживаемые средствами синтеза конструкции

• component_configuration

4.12.6.13. Объявление подпрограмм (Subprogram decla rations)

subprogram_declaration ::=

subprogram_specification ;

subprogram_specification ::=

procedure designator [ (formal_parameter_list) ]

| [ pure | impure ] function designator [ (formal_parameter_list) ]

return type_mark

designator ::= identifier | operator_symbol

operator_symbol ::= string_literal

Поддерживаемые средствами синтеза конструкции

• subprogram_declaration

• subprogram_specification

• designator

• operator_symbol

Не поддерживаемые средствами синтеза конструкции

• Зарезервированное слова pure и impure

Формальные параметры (Formal parame ters)

formal_parameter_list ::= parameter_interface_list

Поддерживаемые средствами синтеза конструкции

• formal_parameter_list

 

Значения по умолчанию для формальных параметров игнорируются средствами синтеза.

Переменные, константы и сигналы как параметры подпрограмм поддерживаются средствами синтеза, в то время как файлы не могут быть параметрами синтезируемых подпрограмм

4.12.6.14. Тело подпрограммы (Subprogram bodies)

subprogram_body ::=

subprogram_specification is

subprogram_declarative_part

begin

[ subprogram_statement_part ]

end [ subprogram_kind ] [ designator ] ;

subprogram_declarative_part ::=

{ subprogram_declarative_item }

subprogram_declarative_item ::=

subprogram_declaration

| subprogram_body

| type_declaration

| subtype_declaration

| constant_declaration

| variable_declaration

| file_declaration

| alias_declaration

| attribute_declaration

| attribute_specification

| use_clause

| group_template_declaration

| group_declaration

subprogram_statement_part ::=

{ sequential_statement }

subprogram_kind ::= procedure | function

Поддерживаемые средствами синтеза конструкции

• subprogram_body

• subprogram_declarative_part

• subprogram_declarative_item

• subprogram_statement_part

Игнорируемые при синтезе конструкции

• file_declaration

• alias_declaration

Не поддерживаемые средствами синтеза конструкции

• subprogram_kind

• group_template_declaration

• group_declaration

 

Другие объявления аттрибутов игнорируются при синтезе. Рекурсивный вызов подпрограмм поддерживается в том случае, если он статичен.

4.12.6.15. Перегрузка подпрограмм (Subprogram overloading)

Оператор перегрузки подпрограмм (Operator overloading) поддерживается средствами синтеза. Сигнатуры (Signatures) не синтезируются

4.12.6.16. Разрешающие функции (Resolution functions)

Функции разрешения игнорируются компилятором при синтезе.

Функция разрешения RESOLVED поддерживается в поддтипе STD_LOGIC.

4.12.6.17. Объявление пакета (Package declarations)

package_declaration ::=

package identifier is

package_declarative_part

end [ package ] [ package_simple_name ] ;

package_declarative_part ::=

{ package_declarative_item }

package_declarative_item ::=

subprogram_declaration

| type_declaration

| subtype_declaration

| constant_declaration

| signal_declaration

| shared_variable_declaration

| file_declaration

| alias_declaration

| component_declaration

| attribute_declaration

| attribute_specification

| disconnection_specification

| use_clause

| group_template_declaration

| group_declaration

Поддерживаемые средствами синтеза конструкции

• package_declaration

• package_declarative_part

• package_declarative_item

Игнорируемые при синтезе конструкции

• file_declaration

• alias_declaration

• disconnection_specification

• Определенные пользователем объявления аттрибутов и их описания

Не поддерживаемые средствами синтеза конструкции

• Зарезервированное слово package после end

• shared_variable_declaration

• group_template_declaration

• group_declaration

Объявления cигналов должны содержать его начальное значение. Кроме того, сигнал, объявленный в пакете не должен иметь никаких источников. Описание константы должно включать начальное значение.

4.12.6.18. Тело пакета (Package bodies)

package_body ::=

package body package_simple_name is

package_body_declarative_part

end [ package body ] [ package_simple_name ] ;

package_body_declarative_part ::=

{ package_body_declarative_item }

package_body_declarative_item ::=

subprogram_declaration

| subprogram_body

| type_declaration

| subtype_declaration

| constant_declaration

| shared_variable_declaration

| file_declaration

| alias_declaration

| use_clause

| group_template_declaration

| group_declaration

Поддерживаемые конструкции

• package_body

• package_body_declarative_part

• package_body_declarative_item

Игнорируемые при синтезе конструкции:

• alias_declaration

• file_declaration

Не поддерживаемые средствами синтеза конструкции

• shared_variable_declaration

• group_template_declaration

• group_declaration

• Зарезервированное словоs package body после зарезервированного слова end

4.12.6.19. Скалярные типы (Scalar types)

scalar_type_definition ::=

enumeration_type_definition

| integer_type_definition

| physical_type_definition

| floating_type_definition

range_constraint ::= range range

range ::=

range_attribute_name

| simple_expression direction simple_expression

direction ::= to | downto

Поддерживаемые средствами синтеза конструкции

• scalar_type_definition

• range_constraint

• range

• direction

Игнорируемые при синтезе конструкции

• physical_type_definition

• floating_type_definition

 

Пустой диапазон (Null ranges) не поддерживается средствами синтеза.

4.12.6.20. Перечеслимые типы (Enumeration types)

enumeration_type_definition ::=

(enumeration_literal {, enumeration_literal })

enumeration_literal ::= identifier | character_literal

 

Поддерживаемые средствами синтеза конструкции

• enumeration_type_definition

• enumeration_literal

 

Элементы типов BIT, BOOLEAN и STD_ULOGIC должны быть определены как однобитные в соответствии со стандартом IEEE Std 1076.3-1997. Средства синтеза могут иметь предопределенные значения и для других перечеслимых типов. Пользователь также может переопределить их с использованием аттрибута ENUM_ENCODING.

4.12.6.21. Предопределенные перечислимые типы (Predefined enumeration types)

Поддерживаемые средствами синтеза конструкции

• CHARACTER

Игнорируемые при синтезе конструкции

• SEVERITY_LEVEL

Не поддерживаемые средствами синтеза конструкции

• FILE_OPEN_KIND

• FILE_OPEN_STATUS

4.12.6.22. Целочисленные типы (Integer types)

integer_type_definition ::= range_constraint

Поддерживаемые средствами синтеза конструкции

• integer_type_definition

 

Рекомендуется преобразовывать соответствующий целый сигнал или переменную в бит-вектор (vector of bits) соответствующей длины. Если не используются отрицательные числа, то сигнал или переменная должны иметь беззнаковое двоичное представление (unsigned binary representation), в противном случае используется дополнительный код (twos-complement implementation). Естественно, следует стремиться к тому, чтобы размерность вектора была минимально необходимой.

Средства синтеза должны поддерживать положительные, отрицательные целые числа в диапазоне от -2,147,483,648 до +2,147,483,647, что соответствует 32 битной целочисленной арифметике в дополнительном коде.

Подтипы NATURAL и POSITIVE поддерживаются средствами синтеза.

4.12.6.23. Физические типы (Physical types)

physical_type_definition ::=

range_constraint

units

primary_unit_declaration

{ secondary_unit_declaration }

end units [ physical_type_simple_name ]

primary_unit_declaration ::= identifier

secondary_unit_declaration ::= identifier = physical_literal ;

physical_literal ::= [ abstract_literal ] unit_name

Игнорируемые при синтезе конструкции

• physical_type_definition

• physical_literal

 

Поддерживается только тип TIME, при этом конструкции типа after игнорируются

4.12.6.24. Типы с плавающей точкой (Floating point types)

floating_type_definition ::= range_constraint

Игнорируемые при синтезе конструкции

• floating_type_definition

 

Конструкции, использующие вещественные типы данных, игнорируются компилятором.

4.12.6.25. Смешанные типы (Composite types)

composite_type_definition ::=

array_type_definition

| record_type_definition

 

Поддерживаемые средствами синтеза конструкции

• composite_type_definition

4.12.6.26. Векторные типы (Array types)

array_type_definition ::=

unconstrained_array_definition

| constrained_array_definition

unconstrained_array_definition ::=

array (index_subtype_definition {, index_subtype_definition })

of element_subtype_indication

constrained_array_definition ::=

array index_constraint of element_subtype_indication

index_subtype_definition ::= type_mark range <>

index_constraint ::= (discrete_range {, discrete_range })

discrete_range ::= discrete_subtype_indication | range

range ::= range_attribute_name |

simple_expression direction simple_expression

 

Поддерживаемые средствами синтеза конструкции

• array_type_definition

• unconstrained_array_definition

• constrained_array_definition

• index_subtype_definition

• index_constraint

• discrete_range

 

Синтезируются только одномеерные массивы. Диапазон векторного типа задается целым числом. Пустой диапазон ( null range) не синтезируется. Средства синтеза поддерживают только одно индексное определение подтипа Выражение для диапазона должно возвратить целочисленные значения.

4.12.6.27. Ограничения индекса и дискретные диапазоны (Index constraints and discrete ranges)

Поддерживаются средствами синтеза

4.12.6.28. Предопределенный вектор (Predefined array types)

Поддерживается средствами синтеза

4.12.6.29. Записи (Record types)

record_type_definition ::=

record

element_declaration

{ element_declaration }

end record [ record_type_simple_name ]

element_declaration ::= identifier_list : element_subtype_definition ;

identifier_list ::= identifier {, identifier }

element_subtype_definition ::= subtype_indication

Поддерживаемые средствами синтеза конструкции

• record_type_definition

• element_declaration

• identifier_list

• element_subtype_definition

4.12.6.30. Типы доступа (Access types)

access_type_definition ::= access subtype_indication

Игнорируемые при синтезе конструкции

• access_type_definition

Средства синтеза не поддерживают типы доступа

4.12.6.31. Неполное объявление типов (Incomplete type declarations)

incomplete_type_declaration ::= type identifier ;

Игнорируемые при синтезе конструкции

• incomplete_type_declaration

Неполное объявление типов не поддерживаеся средствами синтеза

4.12.6.32. Распределение объектов (Allocation and deallocation of objects)

Распределение объектов не поддерживаются средствами синтеза.

4.12.6.33. Файловые типы (File types)

file_type_definition ::= file of type_mark

Файловые типы не поддерживаются средствами синтеза.

4.12.6.34. Операции над файлами (File operations)

Не поддерживаются средствами синтеза конструкции

4.12.6.35. Объявления (Declarations)

declaration ::=

type_declaration

| subtype_declaration

| object_declaration

| interface_declaration

| alias_declaration

| attribute_declaration

| component_declaration

| group_template_declaration

| group_declaration

| entity_declaration

| configuration_declaration

| subprogram_declaration

| package_declaration

Поддерживаемые средствами синтеза конструкции

• declaration

Игнорируемые при синтезе конструкции

• alias_declaration

Не поддерживаемые средствами синтеза конструкции

• group_template_declaration

• group_declaration

4.12.6.36. Объявление типов (Type declara tions)

type_declaration ::=

full_type_declaration

| incomplete_type_declaration

full_type_declaration ::=

type identifier is type_definition ;

type_definition ::=

scalar_type_definition

| composite_type_definition

| access_type_definition

| file_type_definition

Поддерживаемые средствами синтеза конструкции

• type_declaration

• full_type_declaration

• type_definition

Игнорируемые при синтезе конструкции

• incomplete_type_declaration

• access_type_definition

• file_type_definition

4.12.6.37. Объявление подтипов ( Subtype declarations)

subtype_declaration ::=

subtype identifier is subtype_indication;

subtype_indication ::=

[ resolution_function_name ] type_mark [ constraint ]

type_mark ::=

type_name

| subtype_name

constraint ::=

range_constraint

| index_constraint

Поддерживаемые средствами синтеза конструкции

• subtype_declaration

• subtype_indication

• type_mark

• constraint

Игнорируемые при синтезе конструкции

• Определенные пользователем функции разрешения (User-defined resolution functions)

4.12.6.38. Объявление объектов (Object declarations)

object_declaration ::=

constant_declaration

| signal_declaration

| variable_declaration

| file_declaration

Поддерживаемые средствами синтеза конструкции

• object_declaration

Игнорируемые при синтезе конструкции

• file_declaration

4.12.6.39. Объявление констант (Constant declarations)

constant_declaration ::=

constant identifier_list : subtype_indication := expression ;

Поддерживаемые средствами синтеза конструкции

• constant_declaration

Косвенное объявление констант не поддерживается средствами синтеза, пожэтому выражения должны быть включены в объявление константы

4.12.6.40. Объявление сигналов (Signal declarations)

signal_declaration ::=

signal identifier_list : subtype_indication [signal_kind][:= expression];

signal_kind ::= register | bus

Поддерживаемые средствами синтеза конструкции

• signal_declaration

Игнорируемые при синтезе конструкции

• expression

Не поддерживаемые средствами синтеза конструкции

• signal_kind

 

Начальное значение выражения игнорируется, за исключением объявления пакета (package). Назначение сигнала, объявленного в пакете (package), не поддерживается при синтезе.

4.12.6.41. Объявление переменных (Variable declarations)

variable_declaration ::=

[share d] variable identifier_list : subtype_indication [:= expression] ;

Поддерживаемые средствами синтеза конструкции

• variable_declaration

Игнорируемые при синтезе конструкции

• expression

Не поддерживаемые средствами синтеза конструкции

• Зарезервированное слово shared

Зарезервированное слово shared не поддерживается. Начальные значения игнорируются. Использование объектов доступа также не поддерживается синтезаторами.

4.12.6.42. Объявление файла (File declarations)

file_declaration ::=

file identifier_list : subtype_indication [ file_open_information ] ;

file_open_information ::=

[ open file_open_kind_expression ] is file_logical_name

file_logical_name ::= string_expression

Игнорируемые при синтезе конструкции

• file_declaration

Использование файлов не поддерживается средствами синтеза

4.12.6.43. Объявление интерфейса(Interface declarations)

interface_declaration ::=

interface_constant_declaration

| interface_signal_declaration

| interface_variable_declaration

| interface_file_declaration

interface_constant_declaration ::=

[constan t] identifier_list : [i n] subtype_indication [:= static_expression]

interface_signal_declaration ::=

[signal] identifier_list : [mode] subtype_indication [bu s]

[:= static_expression]

interface_variable_declaration ::=

[variable] identifier_list : [mode] subtype_indication

[:= static_expression]

interface_file_declaration ::=

file identifier_list : subtype_indication

mode ::= in | out | inout | buffer | linkage

Поддерживаемые средствами синтеза конструкции

• interface_declaration

• interface_constant_declaration

• interface_signal_declaration

• interface_variable_declaration

Игнорируемые при синтезе конструкции

• static_expression

Не поддерживаемые средствами синтеза конструкции

• interface_file_declaration

• Режим linkage

• Зарезервированное слово bus

4.12.6.44. Список интерфейса (Interface lists)

interface_list ::=

interface_element {; interface_element}

interface_element ::= interface_declaration

Поддерживаемые средствами синтеза конструкции

• interface_list

• interface_element

4.12.6.45. Список ассоциаций (Association lists)

association_list ::=

association_element {, association_element}

association_element ::=

[formal_part =>] actual_part

formal_part ::=

formal_designator

| function_name(formal_designator)

| type_mark(formal_designator)

formal_designator ::=

generic_name

| port_name

| parameter_name

actual_part ::=

actual_designator

| function_name(actual_designator)

| type_mark(actual_designator)

actual_designator ::=

expression

| signal_name

| variable_name

| file_name

| open

Поддерживаемые средствами синтеза конструкции

• association_list

• association_element

• formal_part

• formal_designator

• actual_part

• actual_designator

Не поддерживаемые средствами синтеза конструкции

• function_name

• type_mark

• file_name

4.12.6.46. Объявление псевдонимов (Alias declarations)

alias_declaration ::=

alias alias_designator [: subtype_indication] is name [signature];

alias_designator ::= identifier | character_literal | operator_symbol

Игнорируемые при синтезе конструкции

• alias_declaration

• alias_designator

Не поддерживаемые средствами синтеза конструкции

• signature

Использование псевдонимов не поддерживается средствами синтеза

4.12.6.47. Объявление аттрибутов (Attribute declarations)

attribute_declaration ::=

attribute identifier : type_mark ;

Игнорируемые при синтезе конструкции

• attribute_declaration

Поддерживаются не все аттрибуты, определенные в языке

4.12.6.48. Объявление компонентов (Component declarations)

component_declaration ::=

component identifier [i s]

[ local_generic_clause]

[ local_port_clause]

end component [ component_simple_name] ;

Поддерживаемые средствами синтеза конструкции

• component_declaration

Не поддерживаемые средствами синтеза конструкции

• Зарезервированное слово is

• component_simple_name

4.12.6.49. Объявление шаблона группы (Group template declarations)

group_template_declaration ::=

group identifier is (entity_class_entry_list) ;

entity_class_entry_list ::=

entity_class_entry {, entity_class_entry }

entity_class_entry ::= enitity_class [<>]

Не поддерживаемые средствами синтеза конструкции

• group_template_declaration

• entity_class_entry_list

• entity_class_entry

4.12.6.50. Объявление группы (Group declarations)

group_declarataion ::=

group identifier : group_template_name(group_consituent_list);

group_constituent_list ::= group_constituent {, group_constituent }

group_constituent ::= name | character_literal

Не поддерживаемые средствами синтеза конструкции

• group_declaration

• group_constituent_list

• group_constituent

4.12.6.51. Оперделение аттрибутов (A ttribute specification)

attribute_specification ::=

attribute attribute_designator of entity_specification is expression;

entity_specification ::=

entity_name_list : entity_class

entity_class ::=

entity| architecture| configuration

| procedure| function| package

| type| subtype| constant

| signal| variable| component

| label| literal| units

| group| file

entity_name_list ::=

entity_designator {, entity_designator}

| others

| all

entity_designator ::= entity_tag [signature]

entity_tag ::= simple_name | character_literal | operator_symbol

Поддерживаемые средствами синтеза конструкции

• attribute_specification

• entity_specification

• entity_class

• entity_name_list

• entity_designator

• entity_tag

Игнорируемые при синтезе конструкции

• Объявление аттрибутов пользователя

Не поддерживаемые средствами синтеза конструкции

• signature

• Интерфейсы group и file

• Использование аттрибутов пользователя

• Зарезервированные слова other и all в списке итерфейса

4.12.6.52. Определение конфигурации (Configuration specification)

configuration_specification ::=

for component_specification binding_indication;

component_specification ::=

instantiation_list : component_name

instantiation_list ::=

instantiation_label {, instantiation_label}

| others

| all

Игнорируемые при синтезе конструкции

• configuration_specification

• component_specification

• instantiation_list

4.12.6.53. Индикация связей (Binding indication)

binding_indication ::=

[ use entity_aspect ]

[ port_map_aspect ]

Игнорируемые при синтезе конструкции

• binding_indication

Не поддерживаемые средствами синтеза конструкции

• generic_map_aspect

• port_map_aspect

4.12.6.54. Индикация связей по умолчанию (Default binding indication)

Поддерживается компилятором.

4.12.6.55. Определение разрыва связи (Disconnection specificati on)

Не поддерживается при синтезе

4.12.6.56. Имена (Names)

name ::=

simple_name

| operator_symbol

| selected_name

| indexed_name

| slice_name

| attribute_name

prefix ::=

name

| function_call

Поддерживаемые средствами синтеза конструкции

• name

• prefix

4.12.6.57. Простые имена (Simple names)

simple_name ::= identifier:

Поддерживаемые средствами синтеза конструкции

• simple_name

4.12.6.58. Выбранные имена (Selected names)

selected_name ::= prefix.suffix

suffix ::=

simple_name

| character_literal

| operator_symbol

| all

Поддерживаемые средствами синтеза конструкции

• selected_name

• suffix

4.12.6.59. Индексированные имена (Indexed names)

indexed_name ::= prefix (expression {, expression })

Поддерживаемые средствами синтеза конструкции

• indexed_name

 

Использование индексируемых имен (indexed name) в процедурах не синтезируется

4.12.6.60. Имена части массива (Slice names)

slice_name ::= prefix (discrete_range)

Поддерживаемые средствами синтеза конструкции

• slice_name

Использование имен части массива (slice name) при неограниченных пароаметрах не поддерживается. Нулевой диапазон индексов части массива (Null slices) также не может быть синтезирован

4.12.6.61. Имена атрибутов(Attribute names)

attribute_name ::=

prefix [signature]’attribute_designator [ (expression) ]

attribute_designator ::= attribute_simple_name

 

Поддерживаются следующие идентификаторы аттрибутов:

• 'BASE

• 'LEFT

• 'RIGHT

• 'HIGH

• 'LOW

• 'RANGE

• 'REVERSE_RANGE

• 'LENGTH

• 'EVENT

• 'STABLE

Поддерживаемые средствами синтеза конструкции

• attribute_name

• attribute_designator

Не поддерживаемые средствами синтеза конструкции

• signature

• expression

4.12.6.62. Выражения (Expressions)

expression ::=

relation { and relation }

| relation { or relation }

| relation { xor relation }

| relation [ nand relation ]

| relation [ nor relation ]

| relation { xnor relation }

relation ::=

shift_expression [ relational_operator shift_expression ]

shift_expression ::=

simple_expression [ shift_operator simple_expression ]

simple_expression ::=

[ sign ] term { adding_operator term }

term ::=

factor { multiplying_operator factor }

factor ::=

primary [ ** primary ]

| abs primary

| not primary

primary ::=

name

| literal

| aggregate

| function_call

| qualified_expression

| type_conversion

| allocator

| (expression):

Поддерживаемые средствами синтеза конструкции

• expression

• relation

• shift_expression

• simple_expression

• term

• factor

• primary

Не поддерживаемые средствами синтеза конструкции

• оператор xnor

• Все операторы сдвига (operators)

4.12.6.63. Операторы (Operators)

logical_operator ::= and | or | nand | nor | xor | xnor

relational_operator ::= = | /= | < | <= | > | >=

shift_operator ::= sll | srl | sla | sra | rol | ror

adding_operator ::= + | - | &

sign ::= + | -multiplying_

operator ::= * | / | mod | rem

miscellaneous_operator ::= ** | abs | not

Поддерживаемые средствами синтеза конструкции

• logical_operator

• relational_operator

• adding_operator

• sign

• multiplying_operator

• miscellaneous_operator

Не поддерживаемые средствами синтеза конструкции

• оператор xnor

• операторы сдвига (shift_opera tor)

4.12.6.64. Логические операторы (Logical operators)

Не поддерживаемые средствами синтеза конструкции

• оператор xnor.

4.12.6.65. Операторы отношения (Relational operators)

Поддерживаются без ограничения всеми средствами синтеза.

Использование логических операторов для перечислимых типов возможно в случае применения аттрибута компилятора ENUM_ENCODING.

4.12.6.66. Операторы сдвига (Shift operators)

Операторы сдвига не поддерживаются средствами синтеза

4.12.6.67. Операторы сложения (Adding operators)

Поддерживаются без ограничения всеми средствами синтеза.

4.12.6.68. Операторы смены знака (Sign operators)

Поддерживаются без ограничения всеми средствами синтеза.

4.12.6.69. Операторы умножения (Multiplying operators)

Поддерживаемые средствами синтеза конструкции

• * (multiply)

• / (division), mod, and rem operators

• Все операторы умножения, определенные в стандарте IEEE Std 1076.3-1997

 

Деление / (division), остаток (mod), и оператор rem не поддерживаются в том случае, если оба операнда статические.

Вообще говоря, результат синтеза может быть ужасен – используйте быстрые умножители.

4.12.6.70. Остальные операторы (Miscellaneous operators)

Поддерживаемые средствами синтеза конструкции

• ** возведение в степень

abs модуль

Возведение в степень ** не поддерживаются в том случае, если оба операнда статические.

4.12.6.71. Литералы (Literals)

literal ::=

numeric_literal

| enumeration_literal

| string_literal

| bit_string_literal

| null

numeric_literal ::=

abstract_literal

| physical_literal

Поддерживаемые средствами синтеза конструкции

• literal

• numeric_literal

Не поддерживаемые средствами синтеза конструкции

• null

Физические литералы в типе TIME и литералы с плавающей точкой (floating point literals) могут быть использованы только в конструкции after, которая игнорируется средствами синтеза.

4.12.6.72. Агрегаты (Aggregates)

aggregate ::=

(element_association {, element_association})

element_association ::=

[ choices => ] expression

choices ::= choice { | choice }

choice ::=

simple_expression

| discrete_range

| element_simple_name

| others

Поддерживаемые средствами синтеза конструкции

• aggregate

• element_association

• choices

• choice

Пример

subtype Src_Typ is Integer range 7 downto 4;

subtype Dest_Typ is Integer range 3 downto 0;

-- Constant definition with aggregates

constant Data_c : Std_Logic_Vector(7 downto 0) := (Src_Typ => '1', Dest_Typ => '0');

Объединения записей (Record aggregates) не поддерживаются средствами синтеза.

Объединения массивов (векторов, Array aggregates) поддерживаются без ограничения всеми средствами синтеза.

4.12.6.73. Обращение к функции (Function calls)

function_call ::=

function_name [ (actual_parameter_part) ]

actual_parameter_part ::= parameter_association_list

Поддерживаемые средствами синтеза конструкции

• function_call

• actual_parameter_part

4.12.6.74. Составные выражения (Qualified expressions)

qualified_expression ::=

type_mark’(expression)

| type_mark’aggregate

Поддерживаются средствами синтеза.

4.12.6.75. Преобразование типов (Type conversions)

type_conversion ::= type_mark(expression)

преобразование типов поддерживается средствами синтеза.

4.12.6.76. Распределение ресурсов (Allocators)

allocator ::=

new subtype_indication

| new qualified_expression

Распределение ресурсов не поддерживается средствами синтеза.

4.12.6.77. Статические выражения (Static expressions)

Локальные и глобальные статические выражения поддерживаются средствами синтеза.

Выражения с плавающей точкой (Floating-point expressions) не поддерживаются синтезатором. Бесконечная точность (Infinite-precision expressions) недопустима. Максимальная точность представления – 32 бит.

4.12.6.78. Последовательностные операторы (Sequential statements)

sequence_of_statements ::=

{ sequential_statement }

sequential_statement ::=

wait_statement

| assertion_statement

| report_statement

| signal_assignment_statement

| variable_assignment

| procedure_call_statement

| if_statement

| case_statement

| loop_statement

| next_statement

| exit_statement

| return_statement

| null_statement

Поддерживаемые средствами синтеза конструкции

• sequence_of_statements

• sequential_statement

4.12.6.79. Оператор ожидания (Wait statement)

wait_statement ::=

[label:] wait [sensitivity_clause] [condition_clause] [timeout_clause] ;

sensitivity_clause ::= on sensitivity_list

sensitivity_list ::= signal_name {, signal_name}

condition_clause ::= until condition

condition ::= boolean_expression

timeout_clause ::= for time_expression

Поддерживаемые средствами синтеза конструкции

• wait_statement

• condition_clause

• condition

Игнорируемые при синтезе конструкции

• timeout_clause

• sensitivity_list

Не поддерживаемые средствами синтеза конструкции

• label

• sensitivity_clause

В каждом процессе может быть не более одного оператора wait until, который всегда является первым оператором процесса.

4.12.6.80. Оператор контроля (Assertion statement)

assertion_statement ::= [ label: ] assertion ;

assertion ::=

assert condition

[ report expression ]

[ severity expression ]

Игнорируемые при синтезе конструкции

• assertion_statement

• assertion

Не поддерживаемые средствами синтеза конструкции

• label

4.12.6.81. Оператор отчета (Report statement)

report_statement ::=

[label:] report expression

[severity expression] ;

 

Оператор отчета относится к конструкциям, не поддерживаемым средствами синтеза

4.12.6.82. Оператор назначения сигнала (Signal assignment statement)

signal_assignment_statement ::=

[ label: ] target <= [ delay_mechanism ] waveform ;

delay_mechanism ::=

transport

| [ reject time_expression ] inertial

target ::=

name

| aggregate

waveform ::=

waveform_element {, waveform_element}

| unaffected

Поддерживаемые средствами синтеза конструкции

• signal_assignment_statement

• target

• waveform

Игнорируемые при синтезе конструкции

• delay_mechanism

Не поддерживаемые средствами синтеза конструкции

• метки

• Зарезервированные слова reject, inertial и unaffected

• time_expression

• Множественные элементы waveform_elements

 

Следует не забывать, что назначение сигнала в пакете не синтезируется

4.12.6.83. Модификация выходного сигнала (Updating a projected output waveform)

waveform_element ::=

value_expression [after time_expression]

| null [after time_expression]

Поддерживаемые средствами синтеза конструкции

• waveform_element

Игнорируемые при синтезе конструкции

• time_expression после зарезервированного слова after

Не поддерживаемые средствами синтеза конструкции

• null_waveform_elements

4.12.6.84. Оператор назначения переменной (Variable assignment statement)

variable_assignment_statement ::=

[ label: ] target := expression ;

Поддерживаемые средствами синтеза конструкции

• variable_assignment_statement

Не поддерживаемые средствами синтеза конструкции

• label

4.12.6.85. Назначение векторных переменных (Array variable assignments)

Назначение векторных переменных поддерживается при синтезе

4.12.6.86. Оператор вызова процедуры (Procedure call statement)

procedure_call_statement ::= [ label: ] procedure_call ;

procedure_call ::= procedure_name [ (actual_parameter_part) ]

Поддерживаемые средствами синтеза конструкции

• procedure_call_statement

• procedure_call

Не поддерживаемые средствами синтеза конструкции

• label

4.12.6.87. Оператор if (If statement)

if_statement ::=

[ if_label: ]

if condition then

sequence_of_statements

{ elsif condition then

sequence_of_statements }

[ else

sequence_of_statements ]

end if [ if_label ] ;

Поддерживаемые средствами синтеза конструкции

• if_statement

Не поддерживаемые средствами синтеза конструкции

• if_label

 

4.12.6.88. Оператор выбора case (Case statement)

case_statement ::=

[ case_label: ]

case expression is

case_statement_alternative

{ case_statement_alternative }

end case [ case_label ] ;

case_statement_alternative ::=

when choices =>

sequence_of_statements

Поддерживаемые средствами синтеза конструкции

• case_statement

• case_statement_alternative

Не поддерживаемые средствами синтеза конструкции

• label

Неопределенные величины компилятор может синтезировать наиболее простым способом

4.12.6.89. Операторы цикла (Loop statement)

loop_statement ::=

[ loop_label: ]

[ iteration_scheme ] loop

sequence_of_statements

end loop [ loop_label ] ;

iteration_scheme ::=

while condition

| for loop_parameter_specification

parameter_specification ::=

identifier in discrete_range

discrete_range ::= discrete_subtype_indication | range

Поддерживаемые средствами синтеза конструкции

• loop_statement

• iteration_scheme

• parameter_specification

• discrete_range

Не поддерживаемые средствами синтеза конструкции

• while

 

В определении параметра цикла, границы дискретного диапазона должны быть определены прямо или косвенно как статические значения, принадлежащие к целочисленному типу.

4.12.6.90. Оператор next (Next statement)

next_statement ::=

[ label: ] next [ loop_label ] [ when condition ] ;

Поддерживаемые средствами синтеза конструкции

• next_statement

Не поддерживаемые средствами синтеза конструкции

• label

4.12.6.91. Оператор Exit (Exit statement)

exit_statement ::=

[ label: ] exit [ loop_label ] [ when condition ] ;

Поддерживаемые средствами синтеза конструкции

• exit_statement

Не поддерживаемые средствами синтеза конструкции

• label

4.12.6.92. Оператор возврата ( Return statement)

return_statement ::=

[ label: ] return [ expression ] ;

Поддерживаемые средствами синтеза конструкции

• return_statement

Не поддерживаемые средствами синтеза конструкции

• label

4.12.6.93. Пустой оператор (Null statement)

null_statement ::=

[ label: ] null ;

Поддерживаемые средствами синтеза конструкции

• null_statement

Не поддерживаемые средствами синтеза конструкции

• label

4.12.6.94. Параллельные операторы (Concurrent statements)

concurrent_statement ::=

block_statement

| process_statement

| concurrent_procedure_call_statement

| concurrent_assertion_statement

| concurrent_signal_assignment_statement

| component_instantiation_statement

| generate_statement

 

Параллельные операторы поддерживаются средствами синтеза.

4.12.6.95. Оператор блока (Block statement)

block_statement ::=

block_label:

block [ (guard_expression) ] [ is ]

block_header

block_declarative_part

begin

block_statement_part

end block [ block_label ] ;

block_header ::=

[ generic_clause

[ generic_map_clause ;] ]

[ port_clause

[ port_map_clause ;] ]

block_declarative_part ::=

{ block_declarative_item }

block_statement_part ::=

{ concurrent_statement }

Поддерживаемые средствами синтеза конструкции

• block_statement

• block_declarative_part

• block_statement_part

Не поддерживаемые средствами синтеза конструкции

• block_header

• guard_expression

• Зарезервированное слово is

4.12.6.96. Операторы процесса (Process statement)

process_statement ::=

[ process_label: ]

[ postponed ] process [ (sensitivity_list) ] [ is ]

process_declarative_part

begin

process_statement_part

end process [ process_label] ;

process_declarative_part ::=

{ process_declarative_item }

process_declarative_item ::=

subprogram_declaration

| subprogram_body

| type_declaration

| subtype_declaration

| constant_declaration

| variable_declaration

| file_declaration

| alias_declaration

| attribute_declaration

| attribute_specification

| use_clause

| group_template_declaration

| group_declaration

process_statement_part ::=

{ sequential_statement }

Поддерживаемые средствами синтеза конструкции

• process_statement

• sensitivity_list

• process_declarative_part

• process_declarative_item

• process_statement_part

Игнорируемые при синтезе конструкции

• file_declaration

• alias_declaration

• Предопределенное пользователем объявление

Не поддерживаемые средствами синтеза конструкции

• Зарезервированные слова postponed и is

• group_template_declaration

• group_declaration

Список чувствительности (sensitivity list) должен включить те сигналы или элементы сигналов, которые читаются процессом, за исключением сигналов, доступных только для чтения по фронту синхроимпульса. Использование файлов, объектов доступа (переменных типа доступа) и условных названий (псевдонимов) в процессе не поддерживается комптляторами

4.12.6.97. Параллельный вызов процедур (Concurrent procedure call statement)

concurrent_procedure_call_statement ::=

[ label: ] [ postponed ] procedure_call ;

Поддерживаемые средствами синтеза конструкции

• concurrent_procedure_call_statement

Не поддерживаемые средствами синтеза конструкции

• Зарезервированное слово postponed

4.12.6.98. Параллельный контроль (Concurrent assertion statement)

concurrent_assertion_statement ::=

[ label: ] [ postponed ] assertion ;

Не поддерживается средствами синтеза

4.12.6.99. Параллельное назначение сигналов (Concurrent signal assignment statement)

concurrent_signal_assignment_statement ::=

[ label: ] [ postponed ] conditional_signal_assignment

| [ label: ] [ postponed ] selected_signal_assignment

options ::= [ guarded ] [delay_mechanism]

Поддерживаемые средствами синтеза конструкции

• concurrent_signal_assignment_statement

Игнорируемые при синтезе конструкции

• options

Не поддерживаемые средствами синтеза конструкции

• Зарезервированное словоs postponed and guarded

Конструкция after игнорируется . Многократные элементы сигналов ( multiple waveform elements) не поддерживаются. Значение unaffected не поддерживается. Определение фронта тактового импульса (<clock_edge> or <clock_level>) недопустимо при параллельном назначении сигналов. Например

 

architecture A of E is

begin

B(7) <= A(6);

B(3 downto 0) <= A(7 downto 4);

C <= not A;

end A;

4.12.6.100. Условное назначение сигналов (Conditional signal assignment)

conditional_signal_assignment ::=

target <= options conditional_waveforms ;

conditional_waveforms ::=

{ waveform when condition else }

waveform [ when condition ]

Поддерживаемые средствами синтеза конструкции

• conditional_signal_assignment

• conditional_waveforms

Игнорируемые при синтезе конструкции

• options

Не поддерживаемые средствами синтеза конструкции

• Last when condition

Условное назначение сигналов содержит ссылку на один или несколько элементов целевого сигнала (target signal). Пример условного назначения сигнала

architecture A of E is

begin

C <= B when A(0) = '1' else

not B when A(1) = '1' else

"00000000" when A(2) = '1' and RESET = '1' else

(others => ('1'));

end A;

4.12.6.101. Выборочное назначение сигналов (Selected signal assignments)

selected_signal_assignment ::=

with expression select

target <= options selected_waveforms ;

select_waveforms ::=

{ waveform when choices, }

waveform when choices

Поддерживаемые средствами синтеза конструкции

• selected_signal_assignment

• select_waveforms

Игнорируемые при синтезе конструкции

• options

 

При выборочном назначение сигнала выбранный сигнал содержит ссылку на один или несколько целевых сигналов (target signal). Например

architecture A of E is

begin

with A select

C <= B when "00000000",

not B when "10101010",

(others => ('1')) when "11110001",

not A when others;

end A;

4.12.6.102. Оператор реализации компонента (Component instantiation statement)

component_instantiation_statement ::=

instantiation_label:

instantiated_unit

[ generic_map_aspect ]

[ port_map_aspect ] ;

instantiated_unit ::=

[component] component_name

| entity entity_name [(architecture_name)]

| configuration configuration_name

Поддерживаемые средствами синтеза конструкции

• component_instantiation_statement

• instantiated_unit

Не поддерживаемые средствами синтеза конструкции

• формы entity и configuration

• Зарезервированное слово component

4.12.6.103. Задание экземпляра компонента (Instantiation of a component)

Полностью поддерживается средствами синтеза

4.12.6.104. Экземпляр интерфейса проекта (Instantiation of a design entity)

Не поддерживается средствами синтеза

4.12.6.105. Оператор Generate (Generate statement)

generate_statement ::=

generate_label:

generation_scheme generate

[ { block_declarative_item }

begin ]

{ concurrent_statement }

end generate [ generate_label] ;

generation_scheme ::=

for generate_parameter_specification

| if condition

label ::= identifier

Поддерживаемые средствами синтеза конструкции

• generate_statement

• generate_scheme

• label

Не поддерживаемые средствами синтеза конструкции

• block_declarative_item (the declarative region)

• Зарезервированное слово begin

4.12.6.106. Область объявления (Declarative region)

Поддерживается средствами синтеза

4.12.6.107. Контекст объявлений (scope of declarations)

Поддерживается средствами синтеза

4.12.6.108. Видимость (Visibility)

Правила видимости переменных поддерживаются средствами синтеза.

4.12.6.109. Использование предложений (Use clause)

use_clause ::=

use selected_name {, selected_name} ;

Поддерживаемые средствами синтеза конструкции

• use_clause

4.12.6.110. Контекст перезагруженного разрешения (The context of overloaded resolution)

Поддерживается средствами синтеза.

4.12.6.111. Части проекта и их анализ (Design units and their analysis)

design_file ::= design_unit { design_unit }

design_unit ::= context_clause library_unit

library_unit ::=

primary_unit

| secondary_unit

primary_unit ::=

entity_declaration

| configuration_declaration

| package_declaration

secondary_unit ::=

architecture_body

| package_body

Поддерживаемые средствами синтеза конструкции

• design_file

• design_unit

• library_unit

• primary_unit

• secondary_unit

4.12.6.112. Библиотеки проекта (Design libraries)

library_clause ::= library logical_name_list ;

logical_name_list ::= logical_name {, logical_name}

logical_name ::= identifier

Поддерживаемые средствами синтеза конструкции

• library_clause

• logical_name_list

• logical_name

4.12.6.113. Контекстные предложения (Context clauses)

context_clause ::= { context_item }

context_item ::=

library_clause

| use_clause

Поддерживаемые средствами синтеза конструкции

• context_clause

• context_item

4.12.6.114. Предопределенные аттрибуты (Predefined attributes)

Аттрибуты с префиксом t (Attributes whose prefix is a type t)

t'BASE

t'LEFT

t'RIGHT

t'HIGH

t'LOW

t'ASCENDING

t'IMAGE

t'VALUE(x)

t'POS(x)

t'VAL(x)

t'SUCC(x)

t'PRED(x)

t'LEFTOF(x)

t'RIGHTOF(x)

Аттрибуты массивов (Attributes whose prefix is an array object a)

a'LEFT[(n)]

a'RIGHT[(n)]

a'HIGH[(n)]

a'LOW[(n)]

a'RANGE[(n)]

a'REVERSE_RANGE[(n)]

a'LENGTH[(n)]

a'ASCENDING[(n)]

Аттрибуты с префиксом сигнала s (Attributes whose prefix is a signal s)

s'DELAYED[(t)]

s'STABLE[(t)]

s'QUIET

s'TRANSACTION

s'EVENT

s'ECTIVE

s'LAST_EVENT

s'LAST_ACTIVE

s'LAST_VALUE

s'DRIVING

s'DRIVING_VALUE

Attributes STABLE and EVENT may only be used as described in clause 6.

Аттрибуты именнованного объекта с префиксом е (A ttributes whose prefix is a named object e)

e'SIMPLE_NAME

e'INSTANCE_NAME

e'PATH_NAME

4.12.6.115. Пакет STANDARD

Поддерживаемые средствами синтеза конструкции

• Функции одного или нескольких аргументов типа CHARACTER

• Функции одного или нескольких аргументов типа STRING

• Все функции аргументов типа BOOLEAN

• Все функции аргументов типа BIT

• Все функции аргументов типа BIT_VECTOR

Игнорируемые при синтезе конструкции

• Аттрибут'FOREIGN

Не поддерживаемые средствами синтеза конструкции

• Функции одного или нескольких аргументов типа SEVERITY_LEVEL

• Функции одного или нескольких аргументов типа TIME

• Функция NOW

• Функции одного или нескольких аргументов типа FILE_OPEN_KIND

• Функции одного или нескольких аргументов типа FILE_OPEN_STATUS

4.12.6.116. Пакет TEXTIO

Подпрограммы, определенные в пакете TEXTIO не поддерживаются средствами синтеза.

 

- Наверх -

 

Координаты:

   г. Москва, пр. Мира, 102

Для писем:

   105066, Россия, г. Москва, а/я 18

Тел.: (495) 778-97-04

e-mail: mail@dsol.ru, info@dsol.ru

 

© НПП “Цифровые решения” 2003 — 2006

Разработка светодиодных экранов | Разработка бегущих строк | Проектирование ПЛИС и СБИС | Разработка законченных устройств и модулей | Синтез алгоритмов |

Rambler's Top100 Rambler's Top100