Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Языки VHDL и VERILOG в проектировании цифровой аппаратуры

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Приложение 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);
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]