Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Языки VHDL и VERILOG в проектировании цифровой аппаратуры
.pdf
Приложение 1 261
16. Спецификация
Спецификация ассоциирует дополнительную информацию с ранее выполнен-
ными VHDL- описаниями.
спецификация атрибута
attribute {имя атрибута -- атрибут емкость контакта
of {список объектов или attribute CAPACITANCE
others èëè of KONTAKT :signal is 15 PF;
all} :класс is выpажение; -- атрибут номер контакта
класс::=entity или рrocedure или attribute PIN_NO of
procedure èëè function èëè package èëè CIN : signal is 10;
type èëè subtype èëè constant èëè signal
èëè variable èëè component èëè label
спецификация конфигурации
спецификация конфигуpации
for {метка экземпляpа или связывает инфоpмацию с
others или меткой, соответствующей
all}: имя компоненты индивидуальному экземпляpу
use компонент данного типа
аспект объекта пpоекта
[generic map (список сопоставления for C1 : SUM use
параметров настройки)] entity WORK.ADD(PA);
[port map(список сопоставления поpтов)];
аспект объекта пpоекта ::= for all: INER use
entity имя объекта[(имя аpхитектуpы)] entity LIB.LA3(X);
for E1, E2 : RECT use
entity XY
generic map (10 ns)
port map (X1, X2, X3);
спецификация разъединения
disconnect disconnect X, Y:BIT after 10 ns;
{others или all или список имен disconnect others after 50 ns;
охpаняемых сигналов: тип}
after задеpжка;
17. Фрагмент проекта
Фрагмент проекта ::= library X, Y; use X.all, Y.D;
[указание контекста] entity Z is port
(A, B: in MM;C:inout EE);
библиотечный модуль end Z;
библиотечный модуль::= -- Из библиотеки Х доступно все,
объявление объекта или -- из Y - модуль D.
объявление конфигурации или -- Библиотеки WORK и STD
объявление пакета или -- не нуждаются
описание архитектуры или -- в указании видимости.
тело пакета

262 Приложение 1
указание контекста::=
library список имен или
use список составных имен;
18. Последовательные операторы
Синтаксис Пояснения и примеры
оператор присваивания переменной
левая часть:=выражение; Y := X+1; A(i):=D(j+1);
левая часть::=имя или агрегат B(1 to 3) := C(5 downto 3);
оператор назначения сигнала
левая часть<=[reject] -выходные
[inertial или transport]диаграмма; --формы сигнала
диаграмма::=список элементов X<= M after 10 ns;
диаграммы
элемент диаграммы::=выражение X<='0'after 10 ns, '1' after 20 ns;
[after время] или null [after время] X<=TRANSPORT M after N;
оператор ожидания
wait [on список сигналов] wait on A, B until C='1';
[until условие][for задержка]; wait untilX>Y;
условие::=булево выражение wait for 15 ns;
оператор утверждения
assert условие [report сообщение] ------формирует сообщение,
[severity NOTE или WARNING -- если условие ложно
или ERROR или FAILURE]; assert X<0 report "X больше 0"
cообщение::="строка" severity WARNING;
оператор сообщения
report cтрока; report "VASIA";
условный оператор
if условие then опеpатоpы -- из альтернатив
[elsif условие then опеpатоpы] if A>B then X:=Y; Z:=K;
[else îïåpàòîpû] else M:=K;
end if; end if;
--Изменяет значение переменной
--Изменяет планируемые
--Вызывает приостановку процесса
--Проверяет истинность условия и
--выдача сообщения
report "AA" & integer'image(20)
-- Выбирает для выполнения одну
оператор выбора
case выpажение is case Y is
when выбор_1 => опеpатоpы_1 when 2|3 => X:=0;
when выбор_2 => операторы_2 when 5 => X:=X+1; L:=F;
when выбор_i => операторы_i when 6 => Z:=X; C:=M+N;
end case; when 7 to 9 => M:=N;
выбор ::= значение или диапазон when others => C:=D;
или простое имя или others end case;
оператор цикла (3 варианта)
[имя:] loop последовательность i:=1; -- примеры эквивалентны
операторов C1:loop X(i):=X(i+1);i:=i+1;
-- Выбирает для выполнения
--одну из aльтернатив
-- Выполняет тело цикла 0 или
-- более раз. Ниже

Приложение 1 263
end loop [èìÿ]; exit C1 when i>10;
[имя:] for индекс in end loop Ñ1;
интервал loop C2:for i in 1 to 10 loop
последовательность операторов X(i):=X(i+1);
end loop [метка]; end loop C2;
[имя:] while условие loop i:=1;
последовательность операторов C3:while i<=10 loop
end loop [èìÿ]; X(i):=X(i+1); i:=i+1;
end loop C3;
оператор выхода
exit [метка цикла] [when условие]; exit when A>B;
оператор перехода
next [метка цикла] [when условие]; -- итераций цикла
пустой оператор
null;
оператор возврата
return [выpажение]; return A+B;
оператор вызова подпрограммы
имя процедуры [(список паpаметpов)]; PR1( X, Y, Z );--PR1- процедура
имя функции [(список паpаметpов)] X:=FUNC(E+1);--FUNK- функция
19. Параллельные операторы VHDL
Синтаксис Пояснения и примеры
-- Служит для выхода из цикла
-- Служит для завершения одной из
-- Не вызывает никаких действий
-- Завершает исполнение функции
-- или процедуры.
-- Обеспечивает вызов процедуры
-- или функции
оператор процесса
[имя:][postponed] process P1:process (X1, X2)
[(список чувствительности)] variable Z: BIT;
[объявления] begin
begin Z:=X1 and X2;
[последовательные операторы] wait for 10 ns;
end process[postponed] [èìÿ]; Y<=Z;
end process P1;
оператор блока
[имя]:block[(охранное выpажение)] -- D-триггер срабатывает
[параметры настройки][поpты] -- описан в форме охраняемого
[объявления] B1:block (C='1' and not C'STABLE')
begin begin
параллельные операторы Q<=guarded D after 10 ns;
end block [èìÿ]; end block B1;
параллельный оператор назначения
сигнала
[имя:][postponed]условное назначение A<=B after 10 ns;
-- Определяет внутренний блок,
-- представляющий часть проекта
-- по фронту С
-- блока

264 Приложение 1
или выборочное назначение; -- инерциальная задержка
условное назначение::= С<= transport '1' after 60 ns;
левая часть<=[guarded][transport] -- транспортная задержка
условная диаграмма; -- ниже условное назначение
условная диаграмма::= A<='1' when X>Y else
[диаграмма when условие else] '0' when X=Y else
диаграмма 'Z' after 4 ns;
выборочное назначение::= -- ниже выборочное назначение
with выражение select with i select
левая часть<=[guarded][transport] D<="1000" when 10,
[диаграмма when выбор,] "0100" when 20,
диаграмма when выбор; "0011" when others;
параллельный оператор утверждения
[имя:] [postponed] assert условие
[report сообщение] assert X>0 OR (X<-5)
[severity NOTE èëè WARNING èëè ERROR report " X вне пpеделов"
или FAILURE]; severity WARNING;
оператор параллельного вызова процедуры
[метки:] [postponed]
имя [(фактические паpаметpы)]; PR1( X, Y, Z );
оператор конкретизации компонента
имя:имя компонента[generic map D1:INER port map(X1, X2, Y);
фактические значения параметров)] D2:ILI generic map(10 ns)
[port map(фактические значения)]; port map(A=>X,B=>2,C=>1);
оператор генерации (2 варианта)
метка: if условие generate M1:for i in range 1 to 10
параллельные операторы generate
end generate [метка]; --10 компонент INER
метка: for паpаметp in диапазон B: INER(X(i),Y(i),Z(i));
generate end generate M1;
параллельные опеpатоpы
end generate [метка];
2. Основные различия версий VHDL-93 и VHDL-87
1. Откладываемый процесс (postponed)
Это процесс, который может запускаться любым событием в одном из несколь-
ких дельта-циклов модели, но только после достижения системой устойчивого состояния, т. е. послепоследнего дельта-цикла в данный момент модельного времени.
Синтаксис — слово postponed, употребленное перед одним из четырех типов
параллельных операторов:
postponed оператор утверждения аssert или
оператор процесса process или
оператор параллельного вызова процедуры или
оператор параллельного назначения сигнала
Примеры: postponed A<=X or Y; -- отложенное назначение А.
postponed process N, K -- отложенный процесс
begin c:=d; end postponed process;

Приложение 1 265
2. Разделяемые переменные (shared)
Допускается описание переменных в блоках, т. е. вне процессов и подпрог-
рамм. Тем самым обеспечивается доступ к этим переменным из нескольких процессов. В связи с этим возможен недетерминизм в модели. Использование подобных переменных целесообразно лишь в моделях системного уровня для поддержки объектно-ориентированного стиля программирования и с применением
контроля доступа к разделяемым переменным из нескольких процессов.
Пример: shared variable X: integer:=25;
3. Непосредственная конкретизация (прямое создание экземпляров компонент)
Для тех пользователей, которые находят трехступенчатый механизм, состоя-
ùèé èç:
1) описания компонент,
2) конкретизации компонент,
3) связывания посредством конфигурации,
излишне «многословным» при структурном описании систем, VHDL-93 допу-
скает непосредственную конкретизацию. Прямым использованием идентификаторов объектов проекта и архитектур в операторах конкретизации можно задавать
всю необходимую информацию в конкретизациях компонент.
Пример:
X:entity WORK.F(F_A) port map (A1,A2,B1,B2);
Пояснение — в операторе конкретизации по имени Х — указан объект проек-
та F, помещенный в библиотеку проекта WORK вместе с его архитектурой F_A, и
карта его портов.
4. Группы (group)
Понятие группы используется для выделения подмножеств объектов. Конст-
рукция предназначена не для моделирования, а для спецификации систем при автоматическом синтезе.
5. Оператор сообщений(report)
6. Оператор параллельного назначения сигнала-несколько изменен синтаксис и
добавлено ключевое слово UNAFFECTED для описания случая отсутствия
транзакций на выход
Изменения в предопределенном окружении
(стандартных пакетах) VHDL
1. Дополнения в составе операций
Они включают операцию исключающего ИЛИ-НЕ (XNOR) в группе логиче-
ских операций и новую группу сдвиговых влево (l) или вправо (r) операций — логического sll, srl, арифметического sla, sra и циклического rol, ror сдвига. Первый
аргумент — это сдвигаемая величина (одномерный массив bit или boolean), второй — направление и величина сдвига (integer).
Пример: B"1011" sll 2 равно B"0110"
B"1011" sla 1 равно B"1110"
B"1011" rol 1 равно B"0111".

266 Приложение 1
2. Новые предопределенные атрибуты
Возможность преобразования значений скалярного типа в строковое пред-
ставление и наоборот обеспечивается атрибутами 'IMAGE и 'VALUE.
Атрибут DRIVING_VALUE обеспечивает доступ к значению, назначенному
заданным процессом в сигнал (оно может отличаться от эффективного значения
этого сигнала).
Атрибут FOREIGN обеспечивает связь с подпрограммами на других языках, а
атрибут IMPURE позволяет использовать функции с побочным эффектом.
Атрибуты 'ASCENDING, 'BEHAVIOR, 'STRUCTURE, 'PATH_NAME, INS-
TANT_NAME, 'SIMPLE_NAME обеспечивают дополнительные возможности.
Незначительные изменения и уточнения
1. Механизм задержки с резекцией
Механизм задержки расширен возможностью указания максимальной длины
входного импульса, который не изменяет выходной сигнал — более продолжительные сигналы проходят на выход даже еслит длина их меньше, чем задержка,
указанная в операторе назначения (в VHDL-87 это было невозможно!). Используется ключевое слово reject — резекция.
Пример:
S<= reject 3 ns transport X after 7 ns;
Импульс Х длительностью менее 3 ns не проходит через S. Задержка же более
продолжительного сигнала в S равна 7 ns.
2. Расширенные идентификаторы
Синтаксис идентификаторов обогащен т. н. «расширенными идентификато-
рами». Эти идентификаторы заключаются в скобки из символов \ и могут включать любые графические символы, допускаемые в качестве лексических элементов
языка, включая символ пробела. Это расширение упрощает связь с уже существующими библиотеками компонент и пакетов на других языках.
3. Алиасы для разных объектов
В VHDL допускаются альтернативные имена (alias) не только для объектов
типа константа, переменных и сигналов, но и для всех других элементов, определяемых объявленными именами, например, для объектов проекта.
4. Оператор генерации (generate) с объявлениями
Оператор генерации в VHDL-93 определен, как область объявлений, и может
дополнительно включать собственные объявления, в том числе объявления компонент, конкретизируемых в этом операторе.
5. Оператор report для выдачи сообщений
В ряде случаев при отслеживании состояния модели необходимо получать со-
общения без тестирования определенных условий, что в VHDL-87 делается с по
мощью оператора assert, в котором проверка условия заменена константой FAL
SE. В VHDL-93 введен специальный оператор report для этих же целей.
-
-

Приложение 1 267
6. Симметричные операторные скобки
Определенное упрощение синтаксиса языка достигается единообразным сти-
лем скобочных форм. Закрывающая скобка содержит повторение открывающей.
Помимо симметричных скобок типа if - end if, process - end process и т. п. допускаются (но не обязательны) дополнения после end в следующих случаях: entity end entity, architecture - end architecture, configuration - end configuration, package end package, package body - end package body.
7. Открытие и закрытие файлов
Файлы могут открываться и закрываться — процедуры FILE_OPEN,
FILE_CLOSE.
3. Cинтезабельное подмножество
языка VHDL
Синтезабельное подмножество VHDL определено стандартом IEEE P1076.6 .
Cписок ocновных синтезабельных ключевых слов и конструкций приведен
íèæå.
Ключевые слова VHDL
alias, all, and, architecture, abs, array, attribute, begin, block, body
buffer, case, component, character, constant, downto, else, elsif,
end, entity, exit, for, function, generate, generic, if, in, inout, is,
library, loop, map, pañkage, mod, nand, nor, next, null, of, on, open,
or, others, out, then, port, procedure, process, range, record, rem, return, select,
signal, subtype, to, type, until, use, variable, wait, when, while, with, xor
Типы и виды данных (объектов)
Скаляры и вектора
Std_logic, Std_ulogic, Boolean, bit, integer,
Std_logic_vector, Std_ulogic_vector, bit_vector,
а также типы SIGNED и UNSIGNED, предопределенные в пакетах
NUMERIC_BIT, NUMERIC_STD.
Описания (объявления)
Описание объекта проекта entity,architecture
Oписание параметров generic
Описание портов in,out,inout
Описание сигналов signal
Описание констант constant
Описание переменных variable
Описание типа type,subtype
Описание функций function
Описание процедур procedure
Операторы
Процесса process end process
Конкретизации компонентов — допускается как позиционное так и поиме
нованное (ключевое) соответствие портов сигналам
Назначение сигнала <=
-

268 Приложение 1
Присваивание переменной :=
Условный if, then, elsif, else, end if
Цикла, выхода, перехода for, while, loop, end loop
Выбора case, end case
Процедуры
Дополнительные ограничения и пояснения
Задержки. Система синтеза обычно игнорирует задержки
Неопределенные и высокоимпедансные значения сигналов. Запрещается использовать значения X и Z в выражениях — только при описании тристабильных
буферов разрешается присваивать значение Z.
Начальные значения сигналов. Запрещается указывать их в объявлениях сигналов (в реальной схеме при включении питания и до поступления сигнала сброса
значение триггеров не определено).
Часть других конструкций языка, как и задержки, просто игнорируется системами синтеза, а иные вызывают появление предупреждающих сообщений и сообщений об ошибках.
4. Предопределенное окружение
языка VHDL
4.1. Пакет STANDARD
Пакет STANDARD определяет ряд типов, подтипов и функций. Предполагается, что в начале каждого модуля проекта присутствует неявное описание контекста, ссылающееся на этот пaкет. Пакет STANDARD не может быть изменен
пользователем.
package STANDARD is
- предопределенные перечислимые типы:
type boolean is (false,true);
type bit is ('0', '1');
type character is (
nul, soh, stx, etx, eot, enq, ack, bel,
bs, ht, lf, vt, ff, cr, so, si,
dle, dc1, dc2, dc3, dc4, nak, syn, etb,
can, em, sub, esc, fsp, gsp, rsp, usp,
' ', '!', '"', '#', '$', '%', '&', ''',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\', ']', '^', '_',

Приложение 1 269
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', del,
c128, c129, c130, c131, c132, c133, c134, c135,
c136, c137, c138, c139, c140, c141, c142, c143,
c144, c145, c146, c147, c148, c149, c150, c151,
c152, c153, c154, c155, c156, c157, c158, c159,
-- the character code for 160 is there (NBSP),
-- but prints as no char
' ', '¡', '¢', '?', '¤', '?', '|', §'',
'¨', '©', 'ª', '«', 'ª', '', '®', '¯',
'°', '+', 'I', 'i', 'µ', 'µ', '¶', '.',
'¸', '¹', 'º', '»', 'j', 'S', 's', '¿',
--ниже настройка на кириллицу
'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç',
'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï',
'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×',
'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß',
'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç',
'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï',
'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷',
'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ' );
type severity_level is (note, warning, error, failure);
-- предопределенные перечислимые типы:
type integer is range -2147483648 to 2147483647; -- определен реализацией;
type real is range -1.0E308 to 1.0E308; -- определен реализацией;
--предопределенный тип TIME;
type time is range -2147483647 to 2147483647
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
subtype delay_length is time range 0 fs to time'high;
-- функция, возвращающая текущее время моделирования;
impure function now return delay_length;
- предопределенные целые подтипы;

270 Приложение 1
subtype natural is integer range 0 to integer'high;
subtype positive is integer range 1 to integer'high;
-- предопределенные индексируемые типы;
type string is array (positive range <>) of character; --номера позицийс1!!!
type bit_vector is array (natural range <>) of bit;-- номера позицийс0!!!
type file_open_kind is (
read_mode,
write_mode,
append_mode);
type file_open_status is (
open_ok,
status_error,
name_error,
mode_error);
attribute foreign : string;
end standard;
Примечание: ASCII мнемоники для символов FS, GS, и US представлены в
типе CHARACTER, соответственно, символами FSP, GSP, RSP, USP во избежание конфликта с единицами типа TIME.
4.2. Пакет TEXTIO
package TEXTIO is
type LINE is access string;
type TEXT is file of string;
type SIDE is (right, left);
subtype WIDTH is natural;
-- changed for vhdl92 syntax:
file input : TEXT open read_mode is "STD_INPUT";
file output : TEXT open write_mode is "STD_OUTPUT";
-- changed for vhdl92 syntax (and now a built-in):
procedure READLINE(file f: TEXT; L: out LINE);
procedure READ(L:inout LINE; VALUE: out bit; GOOD : out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out bit);
procedure READ(L:inout LINE; VALUE: out bit_vector; GOOD : out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out bit_vector);
procedure READ(L:inout LINE; VALUE: out BOOLEAN; GOOD : out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out character; GOOD : out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out character);
procedure READ(L:inout LINE; VALUE: out integer; GOOD : out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out integer);
procedure READ(L:inout LINE; VALUE: out real; GOOD : out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out real);
procedure READ(L:inout LINE; VALUE: out string; GOOD : out BOOLEAN);
procedure READ(L:inout LINE; VALUE: out string);
procedure READ(L:inout LINE; VALUE: out time; GOOD : out BOOLEAN);
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
