Uploaded by tarasonov

VHDL справочное txt

advertisement
УДК 621,369.218
ББК 32.834. I
1
Оглавление
Гриф выдан Министерством образования и науки Украины
(письмо J\; I Ф/1 SI-'W? or 20.04.{№>
Б1 2
Бабак В. П., Корченко А. Г., Тимошенко Н. IL, Филоиенко С. Ф.
VHDL: Справочное пособие по основам языка, — м.: Изда¬
тельский дом «Додэкп-ХХК 2008. — 224 с.: ил. (Серия •■Програм¬
мируемые системы»).
ISBN 978-5-94120-169-3
Прслсган.тяст собой пишии n кури » язык VHDLII пред н извинена joiHCueiporooiii.Tкомлення е базовыми концептуальными положениями ною язык». К .шиной книге
ирниодятся базовые принципы пар1ллслыюго11ро1раммнронамин, положенные о основу
языка VHDL. а также принципы организации VHDL-ÿÿÿÿÿÿÿ и взаимосвязь компонен¬
тов проект» с физическими процессами, протекающими и реальных цифровых
устройствах, Содержит многочисленные практические примеры проектирования цифровык устройств, it частности цифровых устройств специального назначении (кринтолрбнессороа}.
Рассчитана на студентов, изучающих язык VHDL, и том числе и и рамках учебных
курсов, посвященных проектированию устройств зашиты информации,
Принятые сокращения
Глава I. Введение
Глава 3. Базовая структура VHDL-ÿÿÿÿÿ . . .
3.1.
защищены. Никакая часть лого издания нс может быть кос про и заедена
или любыми средствами, электронными или механическими, включая
фотографированне, ксерокопирование или иные средства копирования или сохранения
информации, бет письменного разрешения издпгольегни
irp.iira
и любой форме
■
,
.9
10
13
Глава 2. Уровни представления и формы абстракции цифровых систем 14
£
IS11N 97K-5-94I20- 169-3
.9
Современные языки проектирования цифровых устройств
1.2. Краткая характеристика языка VHDL
1.3, Этапы проектирования с использованием VHDL
УДК 621.369.218
Издательский дом -Дадэка-ХХ!
.8
] . I.
пек 32.Ш.1
Ike
..
......
...
20OS
Коианюк Ю, С , 200*
Серия «Программируемые системы"
18
.18
Общие сведения
.
3.2, Объявление интерфейса
3,3. Архитектура проекта
3.3 I . Архитектура проекта в поведенческой форме
3,3.2. Архитектура проекта в структурной форме . .
3.4. Библиотеки и пакеты
4.4. Числа..
4.5. Символы, строки и битовые строки
....
26
26
.33
.... 37
Глава 4. Лексические элементы языка VHDL
4.1. Идентификаторы
4,2. Ключевые слова
4.3. Зарезервированные слова
22
37
38
.-
39
,4П
41
4 яОлкаление
Oziae.ÿHtic
Глава 5, Программные элементы данных; константы, переменные
л сигналы ,
.
. ....
.
.
5.1. Константы
5.2. Переменные
5.3. Сигналы
.43
44
...
6.1. Встроенные типы данных пакете STANDARD. . ....
6.3.
.42
.
Глава б. Тилы данных
6.2,
.42
Пользовательские типы Н подтипы
6.2.1.Физические типы . . .
6.2,2. Перечислимые типы
6,2,3. Композитные пользовательские типы
Преобразование типов
.
..
6,4. Атрибуты
6.4.1,Атрибуты сигналов
6.4.2.Скалярные атрибуты
6,4,3, Атрибуты массивов
7.1. Логические операции
7.2, Операции отношений
7.3. Операции сдвига
7.4. Операции сложения
7.5. Унарные операции
7.6. Операции умножения
..
....
7.7. Вспомогательные операции
7.8. Символы комментария
7.9. Математические выражения
9.3. Сслсктншшм установка аначенпй сигналом
50
Глава 10. Структурная форма проекта
.
.....
- . ...
8.4. 1 , Базовая форма цикла
8.4.2. Итерационная форма шита WHILE ... LOOP
8.4.3, Итерационная форма никла FOR ..
LOOP
...
....
106
10.1. Оператор COMPONENT
64
Глава 1 1, Примеры VHDL-ÿÿÿÿÿÿÿÿ ЦУ различного назначения . .
71
.73
,73
74
.79
то
84
86
89
89
91
92
92
.98
I0O
105
10.2, Оператор PORT МАР
.72
.
.....
,97
102
61
.77
8.!. Явно заданный оператор PROCESS
8.2. Оператор условной передачи управления If
8.3, Оператор выбора CASE
8.4. Оператор цикла LOOP
8.4.4. Операторы NEXT и EXIT
49
.75
Глина 8. Поведенческая форма проекта: явно заданный
оператор Process
.
...47
. .70
... .
Глава 9. Поведенческая форма проекта: неявно жданный
оператор PROCESS ,
Простая параллельная установка значений сигналов ,
70
.
,
Условная установка значения сигнала
.69
..
..........
.......
...
9.1
68
Глава 7. Операции и символы операций
8.7. Пример VHDL- проекта
9.2,
64
... 65
.
93
94
95
8.5. Оператор ожидании WAIT
Я. 6. Оператор NU LL
,47
5!
Ч
я 5
.
М>7
115
115
1 J . 1 . Проекты ЦУ общего назначении . . , .
1)5
II 1.1 Логический элемент AND на *1 входа
1)6
II 1.2. Логический элемент OR на 2 входа
117
11.] . 3 . Л огический эле мент О R J ia 4 инвере нык входа
119
1 1 . 1 .4, Логический элемент NOR ил 3 входа , . . ,
120
11.1.5. Логический элемент XOR па 2 и хода
11.1,6. 4 -битный буфер логический усилитель. . ,
121
122
11.1.7. 8-бнтный буфер с тремя состояниями без обратной связи
11.1.8. 4-клналмтый мультиплексор 4х 1
122
с сигналом разрешения выбора номера канала
,
123
11.1.9 Демультиплексор 1 х4
II.1.10. 4-битный последовательный сумматоре фиксирован ной тонкий .. 124
125
11.1.11. 8 -битный сумматор с ускоренным переносом
11,1.12. 4 -битный каскадный вычитательс фиксированной точкой
126
11,1,13. 8-бнтный сумматор со сквозным пенником с уче том знаков битов 127
11,1.14. Универсальный плрлллельный арифметический процессор ,
129
1 1.1.15.4-битный компаратор е .знали юм никои сравниваемых чисел
... 130
и выбором режимов сравнения
131
.
1 1.M6, 8-бнтный контроллер четности
11.1 17, Простой IJ-ÿÿÿÿÿÿÿ. переключаемый передним фронтом тактового
132
импульсе
.
.
132
.
1 1,1.18. 1J-ÿÿÿÿÿÿÿ с асинхронным сбросом
31,1.19, D-ÿÿÿÿÿÿÿ с асинхронной предустановкой
133
1 1.1.20. D-ÿÿÿÿÿÿÿÿ асинхронным Сбросом и асинхронной предустановкой 134
134
1 1 .1,21. 1>-трштерс синхронным сбросим
... 135
! 1 ,1 .32, D- триггер с синхронной предустановкой
......
.
6 ■ Оглавление
Ошв-тие ■ 7
И . 1.33. D-ÿÿÿÿÿÿÿ с синхронным сбросом н сигналом, разрешающим
приход оче|мднаго тактового импульса
] 1.1.24. D-ÿÿÿÿÿÿÿ- зашелка
1 1.1.25. D-ÿÿÿ гср-эашелка со стробирующим сигналом
1 1 Л.26. 8- битный накапливающий счетчик со счетным входом
и асинхронным сбросом
136
137
137
.
138
11.1.27. S-ÿÿÿÿÿÿ накапливающий счетчик с синхронной загрузкой
н асинхронным сбросом
Ml 2S- 8-СнтныИ никаплиааюший/иы читающий счстчнк с выбором
направлении счета
...
.. ,
1 1 . 1 . 29.N -Си гмыи н а капл нвающий с четчик со счстн ыч входом.
синхронной загрузкой и асинхронным сбросом
11.1 1(1. Синхронный 4-бнтный ЦИКЛНЧССК11Й сдвнглпый регистр вправо
с параллельным входом и выходом
11.131. Универсальный синхронный 4 -битный сдвиговый регистр вправо
с параллельным входом и выходом
11.1,32. Расширитель разрядности шины знаковыми разрядами .
11,1 ,3J. VNDI.-npoeiCT расширителя разрядности шины нулями
11 .1 ,34, 8-йцтнад лиунайрлвленнпл шина с тремн состояниями ....
11.1 .36. Процессор возведения в степень N
.
1 1.1.36. Процессор нахождения факториала
1 1 1.37. Процессор нахождений натурального логарифма
1 1.1.38. Процессор нахождения квадратного корни, . . ,
1 1.1 39. Процессор, конвертирующий 16-ричныс значения в данные гип.ч
.
139
140
141
......
142
144
145
147
148
149
149
150
152
.
sidjogic_vcc(or ..... ....
153
1 1.2, Проекты НУ специального назначения
1 1,2. 1 Гоператор тактовых импульсов с периодам следовании 100 нс
и скважность» 505в
.
..
154
154
1 1.2.2. Комбинированный генератор псевдослучайных чисел с выходными
значениями разных типов
1 1.2,3, Многофункциональный конвертер типов данных. . .
1 1 .2.4,1клочислснныН чультнили кативший криитопроцсссор
L 1.2,5, Символьный адшпнмнмн крнптопроцессор
1 1.2,6. Подстановочный символьный криптопрОИессор
1 1.2.7.Перестановочный битовый крнптопроцсссор,
1 1.2.8 ,Крнптопроцсссор на базе сдвиговых операции
1 1.2-9 Кринтоироцсссор с многоуровневой системой шифрования,
формульный метод
1 1.2.10. Криптопроиеесор, реализующий метод эллиптических кривых
1 1.3. Проекты ЦУ специального назначения повышенного уровня
.
11.3. 1, Файловый криптопроиессор циклического сдиш л
1 1.3.2, Файловый KSA- криптопроиессор
...
168
... 170
.
сложности
154
156
157
158
161
16?
166
177
177
184
1 1 .3.3, Файловый криптопроцессор Нижние ра.
Приложение. Основы языка VHDL» реферативном изложении . ,
192
,
. 199
199
П.1. Язык VIIDL кпк универсальный язык проектирования ЦУ
201
....
. ..
П.2. Концептуальные положения языка VHDL.......
204
Г1..3. Объявление ннтср гсйса проекта . .
2%
П.4. Программные Элементы данных языка VHDL ....
П.5. Поведенческая форма проекта на основе ятю заданного
.
210
оператора PROCESS
П.6. Поведенческая форма проекта на основе неявно заданного оператора
212
PROCESS
21-1
П.7. Структурная форма проекта
...
ГЛАВА
Принятые сокращения
ллу
оно
ПО
САПР
СБИС
НУ
[iv;ic
УУЗС
СУЗС
— арифметико-логическое устройство.
оператор параллельной обработки.
программное обеспечение,
система автоматизированного проектирования.
сверхбольшая интегральная схема.
цифровое устройство.
простая установка значения сигнала.
условная установка значения сигнала.
— селективная установка значения сигнала.
1
ВВЕДЕНИЕ
1.1. Современные языки проектирования
цифровых устройств
VNDL. является аббревиатурой от Very liiÿh speed integrated circuits
Hardware Description Language, что переводится как зпык описании устроиств ни сверхбольших интегральных схемах (СВИС). В середине
1 980-х гг. Министерство обороны США и IEEE11 спонсировали разра¬
ботку згою языка описания цифровой аппаратуры с целью получе¬
нии простого и использовании средства проектирования н моделиро¬
вания логических схем для всех этапов разработки электронных сис¬
тем. начиная от модулей микросхем и кончая крупными
вычислительными системами. Первая версия стандарта была издана и
1987г. (IEEE 1076-I987E Очередные версии выхолили в 1991, 1993,
1996, 1997. 1999. 7000 и 2002 гг. 13 настоящее время действует стандарт
VHDL, наложенный в документе IEEE 1076-2602 н являющийся про¬
мышленным стандартом, который широко используется для описа¬
нии работы цифровых систем. И июне 2606 г. была опубликована вер¬
сия 3.0 проекта стандарта VIIDL-20O6, в который пошли все дочерние
стандарты, разработанные в ходе создания стандартов VHDL (IEEE
—
IЕЕЕ (Ins!i t me of E leei lit а I and Elect ion ic lingi nic rs И 1 ICTHTJT и нженерои тю
электротехнике и радиоэлектронике, ИИЭР) — международная организация,
созднннпя и США в 1963 г. Является разработчиком рллпстанлартов для локальных
пычислительных систем, втом числе по кабслышВ системе, фм лпсскоП топологии
Лримич. ро),
н методам доступа к среде передачи данных
1.Z Кроткая характеристика языка УН Hi ■ П
Ю ■ Г.та 1. Введение
1064, 1076.2, 1076.3). а также добавлены другие усовершенствования,
ла кис как интерфейс с языками высокого уровня C/C++ и ряд других.
В РФ язык VHDL закреплен стандартом ГОСТ РФ 50754-95 «Язык
описания аппаратуры цифровых систем VHDL. Описание языка».
В данной книге рассмотрены основные положения языка VHDL,
которые определены в стандарте IEEE 1076-1993, поскольку наследую¬
щие изменения (за исключением пока еще разрабатываемого
стандарта
VHDL-2006) были несущественными. Кроме того, псе последующие
стандарты VHDL, включая VHDL-2006, обеспечивают соимсстнмостьс
проектами, разработанными в соответствии со стандартом
1076-1993.
Еще одним представителем языков описания цифровой аппаратуры
является язык Vferilog. или Vvrilog HDL, Разработчики \feri1og сделали его
снптакспс очень похожим на синтаксис языка С. \fcrilog имеет препро¬
цессор, очень похожий на препроцессор языка С, а основные управля¬
ющие конструкции \ferilog также подобны одноименным конструкциям
языка С. В настоящее время действует стандарт \fcrilog, нзложепный в
документе IEEE 1364-2005, который представляет собой несколько до¬
работанный вариант очень популярного среди приверженцев
\fcrilog
стандарта IEEE 1364-2001 . Язык Vertlog применяется в промышленнос¬
ти так же широко, как и VHDL. поскольку оба этих языка позволяют
описывать и имитировать работу сложных цифровых систем.
Третьим представителем языков VHDL я ваяется язык
ABEL
(Advanced Boolean Equation Language
расширенный язык двоичных
уравнений), который был разработан в 1983 г. для создании проектов
цифровых устройств посредством программируемых логических уст¬
ройств ( PLD Programmable Logic Devices). Язык ABEL менее мощен,
чем VHDL и \ferilog, б частности нс позволяет проектировать устройства на перепрограммирусмых логических матрицах FPGA (Field
Programmable Gate Arrays), поэтому он менее популярен в нромышленности, хотя осе еще находит своих сторонников.
—
—
1 .2. Краткая характеристика языка VHDL
Хотя язык VHDL внешне выглядит так же, как н другие традицион¬
ные языки программирования (поскольку имеет литералы,
разделите¬
ли, операторы и т. д.), он обладает некоторыми
н ы ми хпра ктсрнсти камн.
важными отличитель-
Проекты цифровых устройств (ЦУ), созданные с помощью языка
VHDL, имеют, как правило, иерархическую структуру.
проектируемый модуль (субблок проекти¬
• Каждый автономный
руемого ЦУ) имеет;
строго определенный интерфейс взаимодействия с другими
модулями;
точную спецификацию внутреннего устройства просктируемого модуля. опнсывающую концепцию и функционирова¬
икс модуля.
модулей VHDL-ÿÿÿÿÿÿÿÿ могут использовать
Спецификации
*
или математические алгоритмы, описывающие их работу-, или
описание аппаратной структуры проектируемого модуля. В соот¬
ветствии с уровнями абстракций проектов описание модуля может иметь поведенческую или структурную форму.
проекта основывается на со* Моделирование алгоритма работы
управления,
бытийном принципе
моделирование протекания
• VHDL-ÿÿÿÿÿÿ позволяет выполнять
схемах, временной
электрических
параллельных процессов в
параметров.
анализ сигналов и их
инструментальными средствами синтеза
• VHDL поддерживается
проектирования (САПР)
автоматизированного
н системами
обеспечения (ПО), котопрограммного
многих производителей
рыс могут создавать прямо из описания VH DL-ÿÿÿÿÿÿÿ его аппа¬
ратную реализацию (связанные между собой структуры логичес-
•
—
—
ких элементов, содержащихся о СБИС).
можно проектировать, моделировать и синте¬
зировать практически любое ЦУ, начиная от простой комбина¬
ционной схемы до законченной микропроцессорной системы на
СБИС.
Перечисленные выше характеристики языка VHDL как специали¬
зированного языка описания ЦУ реализуются с помощью следующих
языковых средств:
• Библиотеки и пакеты. архитектура проекта.
* Проекты; интерфейс и
• Подпрограммы: функции и процедуры. числовые, физические.
перечислимые,
• Скалярные типы данных:данных;
константы, переменные, сигна¬
Программные элементы
* Используя VHDL,
•
лы, порты, идентификаторы.
1.3. Этапы проектирована с цглшьишнили I IIP! ■ 13
1 2 ■ J'.iana I. Вшк/ше
*
*
•
Via геми гимсскмс операции: логические, отношений, арифмети¬
ческие.
Программные операции: установка значений сигналов, присвое¬
ние значений переменным, реализация связи портов и сигналов.
Математические выражении: логические, алгебраические, логи¬
ко-алгебраические.
* Операторы объявления
•
•
программных элементов данных.
Операторы комбинаторной логики: простой установки значении
сигнала (ПУЗС). условной установки значения сигнала (УУЗС),
селективной установки значения сигнала (СУЗС), оператор
process, оператор реализации компонента port map.
Операторы регистровой логики: оператор process, ПУЗС, опе¬
ратор условной передачи управления, оператор цикла, оператор
выбора.
В отличие от процедурных языков программирования, языковые
средства которых обеспечивают выполнение вычислений над абстрак¬
тными данными и управление ими, VHDL-ÿÿÿÿÿÿ описыпаст ЦУ, учигыиая его многогранность. поведение, структуру, функциональные и
физические свойства, а также взаимодействие со специальной аппара¬
турой, физически реализующей проект ЦУ и СБИС,
Остановимся особо на некоторых важных отличиях языка VHDL.
VHDL по существу является языком параллельного программирования,
т. е. в его конструкции существуют операторы, соответствующие логи¬
ческим вентилям,
операторы обрабатываются (т. е, вычисляются)
\\о пара;ие.1ыюму принципу. Суть данною принципа состоит в гом, что,
как только сигнал, содержащийся в описании проектируемого ЦУ, из¬
меняет свое значение (говорят, что «происходит событие на сигнале»),
все операторы, принимающие участие в его обслуживании, мгновенно
запускаются на выполнение и одновременно выдают конечный ре¬
зультат. Поэтому такие операторы называются операторами параллель¬
ной обработки (ОПО) (concurence operator). Программа, написанная на
VIII)]. (каки на любом другом HDL-ÿÿÿÿÿ, например Mnilog), моделируст физическое поведение системы (как правило, цифровой), енгнзлы в которой распространяются мгновенно, (акая программа позволя¬
ет формировать временную спецификацию (время задержки распро¬
странения сигнала на логическом элементе), а также описывать
систему как соединение различного рода компонентов, или функцио¬
нальных блоков.
1 .3. Этапы проектирования с использованием
VHDL
В подавляющем большинстве случаев аппаратная реализация про¬
екта ЦУ с использованием VHDL протекает и соответс гимн со следую¬
щими
этапами:
Разработка иерархической блок-схемы проекта. Выяснение базового
конструктивно-технологического метода и стандартных блоков
на уровне структурной схемы. Поскольку большие логические
проекты являются, как правило, иерархическими, использова¬
ние VHDL позволяет легко разбить проект на модули (субпро¬
екты) и определить их интерфейсы.
Программирование. Запись VHDL-ÿÿÿÿ дли модулей и
их
интер¬
фейсов.
программного кола VH DL- проекта дли выяв¬
ления синтаксических ошибок, а также проверка его совмести¬
мости с другими модулями, li ходе компиляции также собирает¬
Компиляция. Анализ
ся внутренняя информация о структуре проекта, которая
необходима для моделирования работы проектируемого ЦУ.
Моделирование. Определение и применение входных воздействий
к откомпилированному коду проекта с наблюдением выходных
реакций. Моделирование может выполняться как в форме фун¬
кционального контроля, т, е. проверки логики работы проекта без
учета временных соотношений и задержек распространения
сигналов на логических элементах, так и в качестве одного из
этапов верификации завершенного проекта.
Синтез. Преобразование VHDL-ÿÿÿÿÿÿÿÿ в набор примитивов или
логических элементов, которые могут быть реализованы с уче¬
том конкретной технологии.
Компоновка, монтаж н разводка. Отображение проекта на карте
синтезирующих элементов, содержащихся » СБИС.
Временной анализ. Получение фактических задержек реализован¬
ной и СБИС цифровой схемы проекта с учетом длины соедине¬
ний, электрических нагрузок и других известных факторов.
ГЛАВА
2
УРОВНИ ПРЕДСТАВЛЕНИЯ И ФОРМЫ
АБСТРАКЦИИ ЦИФРОВЫХ СИСТЕМ
Глава 2. Уровни представлении и формы абстракции цифровых систем ш
[5
Как видно но Рис. 2.1. цифровая система может быть описана но
уровне комгюнснюи (транзисторов, диодов, логических племен гон),
на уровне архитектуры (структурной схемы, содержащей ЛЛУ,
регистры, компараторы и т.д,), на уровне автономной системы (ПК.
рабочей станнин, сервера и г л.), а также на уровне приложении
(программных модулей, входящих в состав систем более высокого
уровня).
Различные формы абстракции цифровой системы дают иозможиость сохранять описание и проект как комплексную управляемую
систему. На Рис. 2,2 показаны различные формы абстракции.
Цифровая система на языке VHDL может быть представлена на
различных уровнях и различными формами абстракции. Представле¬
ние цифровой системы на нескольких уровнях абстракции показано
на Рис. 2.1,
ПрИЛОЖвНИЙ
ГР
А +
в
Поведен ноская
Структурная
форма:
форма:
поток данных
I
Системы
Рабочие станции
’
межкомпонентные
алгоритм
1
I
!
ПК
s <-
связи
ran
Онэичвекэя
реализация
I I
Серверы
i’uc. 2.2. Формы абстракции: поведенческая, структурная и физическая
Я
А лшооурп
Компоненты
Z?
<
-W-
о-
/Уте, 2. /, 1 1редсм имение цифровой системы на нескольких уровнях абстракции
—
Первичная и наивысшая форма абстракции
это поведенческая
(behavioral) форма, которая позволяет описывать систему и терминах
того, что она делает (или как она ведет себя), а не и терминах ее элементовлибо компонентов и соединений между ними. Поведенческая
форма представления определяет зависимость между входными л вы¬
ходными сигналами, Поведенческая форма может быть булевым
(Boolean) выражением либо более абстрактным описанием, например
описанием межрегистровых пересылок (register transfer) иди описанием
в алгоритмической форме,
..........
......
Глава 2. Урании представления и формы сфрпщркцми цифровых систем я 17
16 ■ Г.юна 2. Уровни пряктм ‘опт и формы чЗстрикшш цифровых систем
и качсстпе пример»
поводе нчсско;! формы раеемот-
рпм Простое jÿTpuiicruo SIREN, которис ВЫдаСТ СИГНаЛ П(ЙгДуПр.еЖДеЮм {warningj веяЮТй рдэт кош ™ШоЕияьн$гй ключ вставлен в за*
мокзажпглкйя flgnit j on .onJ, если дверь открыта (DOC reopen) или
отстегнут реме]ijs; безо пасноети г i :it _of fj. I!» повела
уровне это словесное on иелние может быть выражено как;
шнеком
■
warning
-
iflniti a..on
and (Do r_open or seaibeltÿoffJ
Структурная <stru6lural> форма, c другой стороны, прсжмиикч
как на flop логических элементов и ком по центов, которые
с
чаны между собой гаким образом! чтобы нимол нить нужную функцию.
Гтруктурмуюфот'му предела вяв и ИЯ можно сравнить со схемным ре (не¬
мцем связанных логических вентилей. Структурный уровень является
нстоЦ
свЦ
...
.....
реализации
сис¬
окончательным Представлением физическом
Структурное
представление рассмотренного выше примера по¬
темы.
казано на lJirc. 23.
о
DOOR
IGNITION
SBELT
с
В1
WARNING
32
Рис. 2.3, Структурное прсдстпилсияс усграПетм si HEN
Как говорилось выше, я тык VI!DL позволяет описать цифровую
систему м и структурном, и й{поведенч&!кой форме. При этом гюиеденческая форма может быть реализована п одном из двух стилей: в виде
но/пока данных (dm a HT>VL si>te) и в
виде (atanrimiic
.......
алгоритмическом
style).
Представ] сние сметемы и виде потока данных позволяет описать
систему с учетом направления потока переметаемых через нее ламЭтот стиль характерен дгш описания поведении системы на уров¬
не
пересылок.
При представлении системы в алгоритмическом виде поведение
системы описывается с помощью операторов (operator). При этой для
описания поведения системы могут использоваться кик операторы лераш'лъноЦ обработки (concurrent), которые выполняются параллельно,
межрегистровых
как только
денные поступают на входы, тли м
посхедовЩерыше
которые выполняю! е я последовательно и по¬
рядке их записи. Язык VHDL допуск нет как параллельную, так п последоительную установку значений сигналов, которые определяют
способ н порядок их выполнения. Примеры обоих представлений бу¬
дут даны в но следую!них главах книги,
(sequential) операторы,
ГЛАВА
3
3, /, Общие сведения ш 19
БАЗОВАЯ СТРУКТУРА VHDL-ÿÿÿÿÿ
Оператор ы языка VHO L
1
I
Л
ЁСпгэ«агят<1Л№)1Ы1
Sntp-iFinpi- 0(1'ЬРвкГЧМН
&ЫП&№ИИ«№ЫЧ1
WpftlPfM
иярч/Э «тям
1 Argp£#A;q ПРИРГН IjMtl t*}
2 Двямгвпдоы провети
CtrhitM-ÿÿ*!'
?J rÿÿp«U4lilMK ВМЫПЦГ 2Й -11Г|»1»*ш1шЗ
ВЁтрННМиЙ И ПСГЬМШГВтгМви
В1ЦЦНП«!РЫ
e Sr«*iqp pragapti.
COfiPpMHIUÿJ
!!4MI!U|BNNtCPCrfl
■
Т*ГЮ6
■
3.1. Общие сведения
Проект любого ЦУ на языке VHDL -- з го прежде всего программа,
которая содержит ключевые и зарезервированные слова. Эти слова не
могут использоваться как имена сигналов или как идентификаторы. В
языке VHDL ключевые слова, зарезервированные слова и определяе¬
мые пользователем идентификаторы нечувствительны к регистру.
Строки с комментариями в VHDL-ÿÿÿÿÿÿÿÿÿ начинаются с двух
смежных дефисов (--) и при компиляции игнорируются компилято¬
ром так же, как символы конца строки и пробелы.
VHDL — это строго типизированный язык. Это означает, что все
программные элементы данных (константа, переменная, сигнал)
должны явно объявляться с обязательным указанием типа элемента.
Тип, указанный в объявлении программного элемента данных, опреде¬
ляет информационные характеристики этого элемента, диапазон до¬
пустимых числовых значений, которые может принимать этот про¬
граммный элемент, а также операции, которые могут над ним выпол¬
няться. Кроме того, в языке VHDL, в отличие от других строго
типизированных языком, не допускаются операции над разнотипными
элементами без предварительного преобразования типов.
В языке VHDL (как и и классических языках программирования)
из ключевых, зарезервированных слов и других лексических элементов
строятся образования, которые принято называть операторами. Опе¬
ратором в языке VHDL считается любая запись, начинающаяся с клю¬
чевого слова и заканчивающаяся символом точки с запятой
Диа¬
грамма, иллюстрирующая одну из возможных классификации опера¬
торов, показана на Рис, 3.1.
ОГЧ**ТврУ ■Ицус’ТИК.А
фвд/иы ГЦИИеТРВЛРРМР ПРНЛЯ
Сг«р|'йпи
ef*f»iepmiJib
■ Wtffiiiep- bayl п
■ егччяггер ««4
»gHni-n-l00*Jt*jrit;
•
тазечан-ныс lÿnKiiM*)
* ivrUBTO
* fttprai jiignall
tj
*
4. ИЬзль
r.
tjSBS
ыгягы:
iMrwi .nmiMujj
гаыЕЬиоторнаА пагод*
4y»lsi|rt* [ftincllnn’l
ii
ЦУ
-OfteNnUPBl
<41“>
anepnopf рпйийЬр
-СЛйркЛДй еег.Г Lg'itrbiian
гранта
спорим ptfit euLji
амягори $ц*евкй* цу
п&№£вач№Ы1рА Срагмярвврй|» гагн№
\
(PFB>?«ÿ*IX*3
npwnp» iÿs**rleii
7.
, 0, 1 «МЭ Г ггч («‘ÿFBI***!?)
(HjMSiaiBBSlJ ГЬйрнииы* лет? Hi
utrfe ЦЗНЬ1ЛХ |ÿcFnMflfti
i.)
В МИ**
нь*.
(blit. kb! тгйиЧ.0 г,
lri.-.]*F, F»* !, 4iP*«,
■Tti_LwiJtÿvee L J r, c&MABtflir,
wa s*sГйкеа r.'H c
ь= =
нHI объ я а-чiwnпялЬ5зят?ш»и
tÿ*.
гри
PiBSFWB
г
змГ'».ТУГИ
Н$*<нс ОДЬтА
OfWpatCp ресвшии
Ij
V** *ЧЬ *1* i{ j"j
я
WMpawp рымь**
PI——-—
*
j
I
‘Эпьргиц трюетоё
yclz wa w ггагажнл
уелйневчи агененРЛ
гзияапа |.СУ9С||
сигнзг a (fflVSG]
-
«
Crt*ptT0p-fWC4* yST*»-S4
МЧВИч*
щук;.
ФГарНГВД iiijbE
« тгирнгж HowsteftHm
«
смparse мкми -рс1#дури
ГГ яр Я' эр ыюм фумидо
з сз'арагор if
’
даиинмм струят/р ч фчр«РЦГ
ПрМйГяЬЧМ«Я ItJWft. WWW
енп#равп{ии*( nepwwiÿ qRfiiAn-
ПРИ1ИЧМ4ИВ 3.
£г Ярви гр c4r*»rni«?*
twonepmpfci. Гта;-
№ lorloj
rJs*c г адом*■*-*
ычрлтер ргччимгр
я «&т*рнГ5& иш11
ИВ *СГрМ4-»ы(
LMJIJ
;
j ;
Criftpirap
ус/
з
тгарвггр пним keep
янон J,4T:SH&|K(3 3Hfr*P*4> G*T*3l“4 (¥УЭС|<
пргыуямь* ItnjR Biiiflfc’iJg ЦУ rt»би-ядсрнё* гЮгока дагр пчи ОПО
Vue. 3. !. Классификация оператореш языка VIi DL
В языке VHDL операторы с точки зрения их функционального
программного назначения (как при поведенческой, так и при струк¬
турной методологии описания проектов) принято делить ив лис основ¬
ные группы;
• Операторы объявления программных элементов данных и их ти¬
пов, компонентов проектируемого ЦУ. их интерфейсов и архи¬
тектур, пользовательских типов, а также функций и процедур.
• Выполняемые операторы.
Кроме основных операторов в языке VHDL принято выделять еще
одну группу операторов, которую называют вспомогательными операторами передачи упрощения.
20 ■ lluwa
J, l, Общие сведения ■
Базовая структура УН1)1.-1/кш.ш
С точки зрения конструктивного устройства операторы обеих
примято подразделять на дна класса:
*■ Простые (однострочные) операторы. Простой оператор представ¬
ляет собой текстовую запись, располагающуюся, как правило, на
одной строке, которая не содержит других операторов,
• Составные (многострочные) операторы. Составной оператор пред¬
ставляет собой текстовую запись, занимающую, как правило.
много строк, которая содержит другие операторы.
Е! структуре языка VHDL. имеется д ш фундаментальных опера горл
(составные по своему конструктивному устройству), которые подде¬
рживают принцип системного проектирования. Принцип системного
проектирования предполагает, что любое проектируемое ЦУ рассмат¬
ривается как автономная подсистема, которая должна иметь:
• идентификатор (т. е. должна быть объявлена);
• способность взаимодействовать с другими проектируемыми под¬
системами посредством своею интерфейса (входиых/выходных
портов);
• описание внутренней структуры или алгоритма функционирова¬
1'рупп
входные и выходные интерфейсные сигналы, в то время как
архитектура представляет собой набор таких взаимосвязанных программных элементов. как подчиненные компоненты, операторы
ПНС1ШШС
параллельных вычислений, последовательные
операторы, подпрограммы (Рис. 3,2). 11 типичном проекте содержится
несколько таких взаимосвязанных объектов, предназначенных для вы¬
полнения преобразований, в ходе которых и обеспечивается собствен¬
process, операторы
но требуемая функциональность проекта.
VHDL-ÿÿÿÿÿÿ
Порты
Интерфейс
(огоратор entity)
in
out
incut
Архитектура
(егюряюр
architecture)
псслй»тс**ткч»ные
ния.
-I -
Такими фундаментальными операторами в языке VHDL являются
олеранры, ОНО,
елерзисы *>««■»,
операторы:
entity
.. end entity
architecture
..
(orepniapw
CCL«por.BHt‘i
I
.;
end architecture
I
..;
Проект НУ, или его компонент, описанный с помощью языка
VHDL, хранится и файле, который обычно снабжается расширением
VHD.
Представленный в виде VHD-ÿÿÿÿÿ проект ЦУ может содержать
другие объекты (лодсисгсмы), которые в тиком случае являются под¬
чиненными компонентами системы верхнего уровня.
Любой компонент, независимо от того, является ли он автономным
либо подчиненным компонентом, или же системой верхнего уровня, в
спою очередь является совокупностью интерфейса (entity) и архи¬
тектуры (architecture).
1) объявлении интерфейса (entity declaration) содержится объявле¬
ние портов (ports declaration) проектируемого компонента е внешним
миром. Объявление портов проектируемого компонента определяет
21
■u;'-,
—-
n*r.
Й¥1#9»НЧ
Щ*
л
I
№*ар«вАс
ни".1;1 sAtl Ну)
tJg
ШИИЬч**«■*»!>
iittcTjEwi
*(rv
wa-ÿÿÿ
;ПаЯ,ПрЙф1(ДМи
I
Пцш
KhOL JMeifl
-Т*у.
" .4Mi*4gMiut|i
t:
Нитцфй*с
WV4—
«сЬгьм
адй11ммй
гН■ ■'.v
S*£.J&L\3£mi
и s:I
*4 иъ ГМ ■ALHjl
шч
И
В
Ш\
Ш
Гиг, ,J,2. VHDL-npotKT, П|Х;лпавляя собой «люкун чисть инттрфсДся и архитемури, может исполкомть оувпроокты в качестве компоисятоп, а также пшил в ка¬
честве компонента и VHDL-ÿÿÿÿÿÿÿ Солсе иыеокого уровня иерархия
11 ■
{'лани 2.
3.2. Оймадаше интерфейса и
Fiusoew! структура УНШ-фаНш
3.2. Объявление интерфейса
кой вид:
entity '.ШЯ_КСШ0НЕ‘НТ2 is ( generic
port ( СЯГНЛП1 ! рожны Til!ГГ
i
JGJKIW?
•
'-'т.
елешм) i )
сигнал! : режим run;
СНГ HQJtNi
end [entity.
—
bit_vector.
.
;
Как видно из приведенного синтаксиса, объявление интерфейса
начинается с ключевого слова entity, за которым указываются
имя проектируемого компонента и ключевое слово 1в. Далее в объяв¬
лении интерфейса с помощью ключевого слова port размещается
объявление портов, Объявление интерфейса всегда заканчивается
ключевым словом and, после которого могут указываться ключевое
явлении интерфейса можно опускать),
Входящие в конструкцию объявления интерфейса проектируемого
компонента (т. е. проектируемого НУ) элементы имеют следующее на¬
значение:
* ИМ Я-КОМПОНЕНТА
определенный пользователем иденти¬
— списоквнешние
фикатор проекта.
•
та).
разделяемых запятыми идентнф и кагоров,
интерфейсные сигналы (порты проек¬
— ключевое слово, показывающее направление действия
сигнала (порта):
режим
• in ключевое слово, используемое для объявления входных
сигналов;
■
out — ключевое слово, используемое для объявления выход¬
ных сигналов. Значения выходных сигналов могут считываться другими проектами;
bit
—
character,
std_logic
I!
—
состоящим
(0 to 7);
■
слово entity, а также имя компонента (дна последних элемента н объ¬
представляющих
Boolean,
может принимать значение или 0. или I;
, bit vector
зарезервированное слово, показывающее,
что сигнал, переменная или константа являются вектором ,
всегда
* сигнал;
—
stc„ulcgic.
релин run);
1 ЖЧ_Х0Ш0>Ш7Л‘:
•
—
ключевое слово, используемое :UIH объявления
внутренних сигналов. Значения сигнала с этого порта могут
читаться только внутри архитектуры проекта;
ключевое с,юно, используемое для объявления сиг¬
■ inout
налов, которые могут быть как входными, гак И ВЫХОДНЫМИ,
тип зарезервированное слово, используемое для объявления
определенного пользователем типа сигнала, переменной или
константы, Примерами встроенных типов являются: bit,
buffer
■
В соответствии с синтаксисом языка VHDL объявление интерфей¬
са проектируемого компонента начинается с ключевого слова entity
и определяет имя компонента, а также содержит объявление входных и
выходных портов, Общий синтаксис объявления интерфейса имеет та¬
Д-1
•
■
■
.
*
из значений типа bit, например bit „vector
Btd_logic_vector,
std_uiogic,
std_le>gic,
s t d_u 1og i c_v e c: t or — зарезервированные слова, показы¬
вающие, что сигнал, переменная или константа могут прини¬
мать одно из девяти значений, отражающих его силу и реаль¬
ные физические значения. В проектах ЦУ предпочтительнее
использовать типы Btd._logic, std_ui ogic, чем типы bit,
bit „vector;
ос слово, означающее, чт о сиг¬
boolean
нал, переменная или константа могут принимать одно из
двух значений: TRUE или FALSE;
integer — зарезервированное слово, означающее, что сиг¬
нал, переменная или константа могу! принимать одно целое
значение, пои алию тес и указа; t н ы й дна i ia зон;
зарезервированное слово, означающее, что сигнал,
real
переменная или константа могут принимать одно веществен¬
ное значение, попадающее в указанный диапазон;
зарезервированное слово, означающее, что
'rhat денег
сигнал, переменная иди константа могут принимать значе¬
.....
.............
—
—
ние пе'гатаемого ASC 1 1 -символа:
зарезервированное слово, означающее, что сигнал
г. пш
или константа снабжены единицей измерения времени,
—
24 в {.та 3. Вашая структура VHDl..-<j*uua
•
generic (общие обьяоления) i
3,2. Обшеыеиие интерфейса * 25
объявление generic является
факультативным и определяет локальные константы, используе¬
мые для задания временных параметров и разрядности (напри¬
мер, разрядности шины) проектируемого ЦУ. В объявлении
generic могут указываться значения, не пользу мыс по умолча¬
нию. Синтаксис для объявления generic следующий:
generic (
ння кс>нствнты1: тип [.= значение]
нмя_ цонстан?к2 ; тип \ ;? значение]
имя_константнЯ1
;
;
тин [: -значение] I;
Лля примера НУ SIREN, структурное представление которого по¬
казано на Рис. 2,3, объявление интерфейса имеет следующий вид:
--
Припер объявления интерфейса лля ЦУ SIREN 1Рис. 2,3
entity SIREN la
port (DOOR, IGNITICH, 53ELT; in std_lorjic;
WARNING :
out
Std_logiC);
end SIREN;
общем случае it физической цифровой системе сигнал может прини¬
’ X 1 (неизвестное значение),
мать бинарные значения j или
(безразличное состояние) и
(неициалнзиропанное значение),
рял других (полный перечень значений приведен п подразд. 6,2.2). Оп¬
ределение типа E'.:d_logic находится п пакете :::td_logic_i 1 б -1
библиотеки iceu, Тип определяет набор значений, которые объект
1
1
может иметь.
Приведем сше два примера объявлений интерфейсов проектируе¬
мых объектов.
Объявление интерфейса 8-битного мультиплексора 4x1
entity mux4_to.J ie
port (10,11, 12,13: in 3tdLl03ic_vector (1 downto 0);
downto C ; j ,ÿ
СУТ1: out stcLlogic_vectoi
er.d тш4_то_1;
Объявление интерфейсе D- триггера со входами установки и сброса
entity dff_sr is
port (D, CL.K, S, R; in f--d_lcgic;
C , Qnot : out . 1 d_log i с I :
end d£f_ni-;
1
Как видно из объявления, проектируемый интерфейс имеет иден¬
тификатор SIREN, содержит три входных порта (DOOR, IGNITION* IE
SSILT) ii один выходной порт (WARNING). Обратите внимание на норядок их размещения и наличие в оформлении точек: с запятой1. Вход¬
ные порты обозначены с помощью ключевого слона in, а выходные
- с помощью ключевого слова
out. Так как язык VHDL является
языком со строгим контролем типов, и объявлении каждого порта
имеется указание о его информационном типе. Тип определяет набор
значений, которые могут присваиваться объекту (и данном случае —
сигналу). 13 этом проекте мы использовали тип std_Iogic. Это на¬
иболее предпочтительны)) тип для цифровых сигналов. В отличие oi
типа bit, который обеспечивает поддержку только бинарных значе¬
ний 1 или '0', типы :;td_iogic и stdLulogic позволяют при¬
сваивать соответствующим элементам данных одно из девяти значе¬
1
ний.
Использование типа std_logic и stcLulogie дает возможность
точнее описать значения сигналов физической цифровой системы. Н
Примечание. В языке VHDL любой конструктивный элемент, начина¬
некоторым ключевым словом и заканчивающийся ключевым сло¬
вом end и символом « /» (точка с запятой), принято называть составным
оператором. Однако операторы могут быть не только составными, т. е.
содержащими в себе другие операторы ( часто говорят , что составные
операторы «содержат тело*), но и простыми. Простые операторы раз¬
мещаются обычно в одной строке, не имеют ключевого слова end it
ющийся
всегда заканчиваются символом « ; » (точка с запятой).
Анализируя синтаксис объявления интерфейса, можно заключить
следующее: любой проект ЦУ реализуется и языке VHDL с помощью
end (entity] . . . ;. Этот оператор по своей
оператора entity,
конструкции является составным оператором и содержит другие опе¬
раторы. Так, и приведенных выше примерах составной оператор имеет
н своей конструкции оператор port ( .
. ) ;.
2(i К
Рима 3, Битовая структура
3,3, Архитектура проекта Ш 17
3-3. Архитектура проекта
Архшгюшура проекта (агсщйсшге body) определяет логику работы
схемы проектируемого ЦУ, г. е. уста напли наст алгоритм работы ЦУ. и
форму ее реализации {поведенческая иди структурная).
Примечание. Как eotfopiuocb выше, VHDL-ÿÿÿÿÿÿ ЦУ может иметь
разные формы представлена.л; поведенческую, структурную гин их комби-
нацию.
Синтаксис объявления архитектуры проекта имеет следующий вид:
architecture Ихя архитектуры (А ИХЯ_К0Н1ШЕКТА in
Объявления:
-- КОЬ!ПСИ&!!ТОЯ
-- сигналов
--
—--
—
--
begin
--
констант
функций
процедур
вычисления
архитектуры
ТИПОВ
Интерфейс и архитектура (поведенческая форма) дцухвходовото
логического элемента AND
Выполняемые оператору параллельной обработки.
entity AN I i is
port (ini, in2; in sta_].CÿiC;
:_1 gijc)|
И l : Out
Архитектура проекта в поведенческой форме
П опелем ческа я форма архитектуры проекта, представленного
Рис. 2.3, и мест следу гош isii вид:
architecture
behflV of SI REN
на
in
begin
WAKilMC <=
значения
..
end f awhit ecture ) Имя_ , архитектурi:;
3.3.1.
ьстстомя его си таксиса требованиям языка VHDL. li рассматриваем
мои примере компонент SIREN но ймеет;|вно оформленного раздела
объявлений вследствие его ненадобности:. Основная часть архитектуры
проекта шздел выполняемых операторов параллельном обработки)
начинается ключевым еловом begin. Он обычно содержит описание
внутреннего устройства (т. и. функциональности) проекта в форме бу¬
левых функции, оформленных в виде операторов параллельной Обра¬
ботки ЯЗЫКА VHDL
Как говорилось |ышс, Поведенческая форма проекте может быть
описана несколькими способами. № частности, в этом Примере основ¬
ная часть архитектуры проекта содержит один npocroi i оператор уста¬
сигнала, ti дай ном операторе имеется символ * *, ко¬
новки
торый означает, что сипи ту, стоя тему еле ва Ьт символа -■ », устанав¬
выражения, стоящего справа от
ливается результат
Ос нон мал часть архитектуры проекта заканчивается
символа г.ключевым словом end, которое может дополняться ключевым словом
architecture is именем архитектуры.
проекта.
Рассмотрим еик два примера оформлении
not TJOJR ana IGHITIO!) or (not j&BELT and IGNITION Г ;
end bebav;
В строке заголовка архитектуры проекта присутствует i где цти фи ка¬
гор архитектуры {в данном примере behav),. который играет роль
имени архитектуры и связывает эту архитектуру с объявлением интер¬
J) качества имени архитектуры может использоваться
фейса :
любой цдектифп каток выбираемый пользой и ел ем, при условии соот-
--
end AHD2(
architecture
behavioral J of .!Я0/ is
bEgin
Olitl <- ini and ir.2 r
end ;x]iavioral_2 j
Интерфейс и архитектура (поведенческая форма) двухвходового
логического элемента XNOR
entity КША2
la
port (л, В:
7, ;
In SCtLIoglC;
out stiLiugie :
Г
end XN0R2r
—
architecture i.iiimvicu i lÿjtntsi oC XN0R2 ia
Объявляю» внутренних сигналов К н
У,
3.3, Архитектура проекта
28 ■ Глава 3. Бажова» структура yfiDL-tfuiwia
signal X, T: i;ed_lo{iie;
begin
X
A ar.d 3;
У
.not A) and : not В) г
X or У;
2
end I . -ha v ior а 1 _xno r j
Операторы установки значения сигнала («<=*) в этих примерах со¬
держат логические операции and, or и not. Кроме указанных, в та¬
ких операторах могут использоваться операции nand, nor, хог и
xnor.
ш
29
Архитектура проекта в структурной форме
3.3.2.
Проект, показанный на Рис. 2.3, можно также создать, используя
структурную форму архитектуры, которая сводится к описанию проекга через майор логических элементов, или компонентой, и связей меж¬
ду н\ входами и выходами. Вариант такого структурного описания
имеет следующий вид:
architecture f;r: • of SiBEh' ip
Объявление компонентов .1
■
component AMPS
m2: in std_logic;
out I : out nr d_l: Tie} ;
port (ini,
Примечание. Следует особо заметить, что операторы установки то¬
чении сигнала (signal assignment statement) и вышеупомянутых примерах
жинются операторами параиелъной обработки (concurrent processing).
Такие операторы выполняются параллельно, когда один паи больше сигна¬
лов, входящих в состав выражений, которые расположены в правой части
оператора, изменяют свое значение (т. с. когда хотя бы на одном из еигttaioft происходит событие). Например, когда сигнал порта л изменит
свое значение, одновременно изменят свои значения внутренние сигналы :<
и у, которые в свою очередь одновременно (во всяком случае о идеале)
заставят последний оператор модифицировать значение сигнала на
выходном порту ". (В реальных цифровых системах при распространении
сигналов может существовать задержка, связанная с этими изменени¬
ями.)
Физические 1{У управляются данными, и также событиями, возиика¬
ющими при изменении донных. То есть событие, которое происходит на
одном из сигналов, приводит к появлению события на другом сигнале, и
т, д. Выполнение операторов детерминировано потоком изменении точе¬
ний сигналов, т. с. определена последовательностью возникновения собы¬
тий на сигналах. В результате такого принципа функционирования
порядок, и котором операторы параллельной обработки располагаются в
основной части архитектуры проекта, может быть любым. Иными сло¬
вам, если разместить оператор 7. перед операторами X и у. конечный
результат от этого не изменится. В ином состоит главное опыичие
языка VHDI . от языков программирования, в которых операторы выпол¬
няются последователь но или путем вызова процедур.
or.d component ;
component 0R2
port I
ini, in2 : in 3-a_logic;
out stcSÿliTicj г
out
end component:
component КДТ1
port i ini : in ;t;l_ logic;
out 1: out sttL'ogieP;
end component:
-- Объявление сигнйлон, испопъэувкнх для связей
3i, B2: sUL-iogie:
signal 1х,:;к_зйТ,
begin
Операторы реализации компонентов.
U0 : NOT 1 port map (DOOR, DODRJ'ICT) j
:
HI : N Ti port map ! SBRI.'l , .'PF.t.T
U2-. AND2 port nap (IGNITION, OOORJJOT, BU:
U3: AND 2 port map (IGNITION, SBELT_NQT , B2};
УА : OR,' port map (SI, 32, WARNING})
and acructj
--
компонент. н,
.
Если архитектура проекта имеет структурную форму, после заго¬
ловка архитектуры располагаются объявлений компонентой, которые
предполагается использовать в проекте- !! приведенном выше примере
проекта SIRoN использованы два двух входовых логических элемента
AND, один двухвходовой логический элемент OR и инвертор- Эти ком¬
поненты должны быть определены, г, с, их VHi>l.-проекты должны
уже существовать (объявления интерфейсов этих проектов приведены
в предыдущих примерах). Все VHDL- проекты компонентов ЦУ также
II Лрхшлекщра щхнкта ш 31
30 ■ Глава I Базовая структура VHDL -tfxiina
могут быть сохранены н виде одного пакета (package). доступ к которому можно получить включая объявления библиотек к пакетов и затоловок проекта (с.м. ДЕьлее разд. 3,4). Объявления компонентов содержат
описания входных (например, ini. in2) и выходных (например,
out 1) портов,
Затем необходимо определить внутренние связи путем объявления
именованных сигналов В нашем примере эти внутренние сигналы име¬
ют имена D00R_K07. SBELT_;-:OTT HI, 32 (слг. Рис. 2.3), Обратите внима¬
ние на то, что и объявлении сигнала всегда требуется указывать его тин.
При структурной форме в разделе выполняемых операторов архи¬
тектуры проекта (г. е, после ключевого слова begin) должны распола-
ыш.с>1 операторы реализации компонентов, а также операторы, опи¬
сывающие взаимосвязь компонентов между собой, Каждый оператор
реализации создает новый уровень иерархии и начинается е имени ре¬
ализуемого экземпляра компонента (например, U0), сопровождаемого
двоеточием, идентификатором самого компонента и ключевым сло¬
ном port map, 1оВОрЯТ, что оператор port map рент иэуст между ком¬
понентные связи объявляемого в нем конкретного экземпляра компо¬
нента.
В частности, н рассматриваемом примере междукомпонентные
связи экземпляра U0 компонента NOT) определены посредством «ознционной (неявной) реализации: внешний сигнал DOOR соответствует
входу ini логического компонента MOTI, а внутренний сигнал
DCORJIOT выходу компонента NQT1, Точно так же для экземпляра
и?:-. AND2 мерные дна сигнала (л;кг: неги гоок_кот) соответствуют
входам ini н in2 компонента АМШ соответственно, а сигнал в1
выходу out 1 этого компонента.
Альтернативный метод определения межкомпонентных связей со¬
стоит в использовании именованной (явной) релнзапии связей между
портами. В этом случае синтаксис оператора реализации имеет следу¬
ющий вид:
—
.,
U0:
U2:
N3:
U'l:
фические изображения больших интегральных ЦУ. Таким образом, не¬
сложно прийти к заключению о том, что иерархическое проектирова¬
ние всегда предпочтительнее, чем одноуровневое.
Давайте рассмотрим использование иерархической технологии
проектирования на примере проекта 4-битного сумматора, показанно¬
го на Рис. 3.3, Как известно, любой полный однобитный сумматор мо¬
жет быть описан следующими булевыми выражениями, используемы¬
ми для получения суммы (sum) и сигнала переноса (carry),
sum я (АФ В) © С;
—
сигнал', порт? - сигнал?,
компонент pore map (порт:
nopriv »> сигнала) s
N0T1 port тар (ini -> DOOR, out 1 => DOQRJNOT) ;
HOTl port map (ini => SBELT, out 1 => $BELT_NOT> ;
AND2 port map (ini : IGNITION, in2 > DOOB_NOT, out 1
B‘,'r;
AHD2 port map (ini => IGNITION, in?
SBELT „NOT, R2);
0R2 port map (ini > 01, in2
Б2, out 1 => EARNING) :
Экземпляр:
Ц1:
внимание на то, что порядок, н котором эти операторы
приведены в разделе выполняемых операторов архитектуры проекта,
не имеет никакого значения и не сказывается на конечном результате.
так как эти операторы выполняются параллельно, Это объясняется
тем, что схемное решение, которое описано этими операторами (гм.
Рис. 2.3), нс зависит от порядка расположения операторов, поскольку
оно фактически определяется списком выбранных компонентов и
жестко установленными соединениями между ними,
Теперь вернемся к тому обстоятельству, что структурная с|отрма ар¬
хитектуры, как уже отмечалось выше, позволяет создать иерархичес¬
кий VJ-fDL-ÿÿÿÿÿÿ, Е! котором заранее определенные компоненты мож¬
но использовать многократно. То же самое относится и к самому высо¬
коуровневому проекту, который и свою очередь может являться
компонентом для проекта еще более высокого уровня иерархии, и г, д.
Это свойство VHDL-ÿÿÿÿÿÿÿÿ позволяет значительно упростить гра¬
Обратите
carry = АВ + С(А© В).
Ь(3)
j
b
FA
carry е
ОД
■
■
зит(З)
•
■
IVc,
а{2)
Ь(2)
Iь т -fit*
Г
Ccutl
0(3)
од
FA
carry с
sum(2)
Ш
ИИ
а(1)
Ь а
FA
carry с
?игп{1}
Ь(0)
э<0)
1
&
cm
л
FA
■
carry с С(0) Cin
sum(0)
.и. Схем л 4 fiHTHorot ум Miimpn, построенная ha полных однобитных сумм,порах
■
32 ■ Г ниш 3. Бд-мнмя структура У/Ю1.-г/уи.ш
3.4. Б\&тотеки и пакеты
В VII DL- проекте Fои R л I т ADD мы определим субпроект (т, с,
VHDL-ÿÿÿÿÿÿ более низкого уровня иерархии) полного однобитного
сумматора FULLADDER, а затем используем его в качестве компонента
основного проекта. Обратите внимание на то. что архитектура
f u I. :add( : с.и -hav проекта FULLADDER имеет компонентную форму,
поскольку в ней не нужно использовать несколько экземпляров одно¬
го и того же компонента. Архитектурой fouradder_s true tore про¬
екта FOUR в г:ADD, имеющей структурную форму, реализуется четыре
экземпляра полного олнобитлого сумматора. Обратите внимание так¬
же на ключевое слово use, задействованное is проекте FOURBITADD, с
помощью которого к проекту подключаются внешние библиотеки и
пакеты (подробнее о них рассказывается далее),
-- Пример проекта 1 -битного сумматора.
library 1Сйе:
us о : ео f. at d_ioti i o_ 1 о 4 . Ш;
-- Субпроект полного одкдбитког: сумматора.
?
'
xor b) xar c ;
I and Ы
or {c and (a xor b) } ;
end ful ladder Jjehav;
* (a
■
J
'
вА-А
br c:
in
sttLloflic;
s;un, carry: out stcLlcgic) ;
end component;
begin
FA 0 : PULL ADDER
port nap
:
i
( C' ; ,
FA1: FULLADDER
port nap la(J
'
,
bf 0 )
C i ft , £ illn { 0 1 , с ( 1 I ) :
Ы1)
C<1-, SuaHl)
c(2':i;
FA2 i FULLADDER
port mnp fa 12), bi21
i
Ci2 ■,
:;on|2)
c(3::
j
уровням иерархического проекта. Однако для облегчения восприятия
текстов VHDL-ÿÿÿÿÿÿÿÿ на практике желательно назначать более ос¬
мысленные и уникальные имена.
J
3.4. Библиотеки и пакеты
Основной проект 4-битного сумматора.
library ij
UBS i :оз. :U . J_ : r i ; _.l 164 .all;
Объявление интерфейса FOURS JTADD.
--
--
entity FOURBITADD is
in s td„.l on ic_ vector (3 down to 0);
Cin: in std„logic;
sum: out std_logic_veetor (3 downto 0) ;
port (a, b:
Cout, V: out StcLlOgic );
ond FOURBITADD;
-- Архитектура проекта FOURBITADD,
port d,
Обратите внимание на то, что в проекте 4-битного сумматора ис¬
пользованы те же самые имена для входных портов, что и для портов
полною однобитного сумматора (они названы , и Ь). Это нс вызывает
проблем и языке VHDL, так как ли названия относятся к различным
а
begin
■
signal
end Eoutudd*n „at j ueturo;
'
rum
* lot
’ 1Ы.I -J<
nf FOURS I'TADL ie
[4 downto 0)
std_3ogie_vector
e:
conponent FULLADDER
architecture t
part map (all), b ■: 3 f , С{3), зит 1 3 ) , c{4
V <= c ( 3 ; коx c < 4 ] ;
Cout <= c(4l;
Объявлокио интерфейса FDLLArDER .
entity FULLADDER is
)i
?
port i a, b, c: in std„lojic;
V OV
;um, carry : out std_logic( ,'
end FULLADDER;
-- Архитектура лроехта FULLADDER.
architecture fulladdtr Jbehav of FULLADDER i6
I
carry
33
FA3 : FULLADDER
-■
I
Ш
Со
Ццйшотено (library) u VHDL
это нечто вроде каталога, и котором
компилятор получает недостающую информацию, используемую в
разрабатываемом проекте, но отсутствующую в явном виде в самом
проекте. В качестве пакета (package) компиляторы VHDL используют
библиотечные файлы или модули, которые содержат объявления на¬
иболее задействованных объектов: типов данных, компонентов, сигна¬
лов, процедур и функций и т. н. Применение пакетов позволяет подоб¬
ные объекты многократно использовать » разных VHDL-ÿÿÿÿÿÿÿÿ.
Например, как отмечалось выше, тип данных 8td__.logic опреде¬
лен и макете ieee.std_logic_U64, который входит в библиотеку
ЗЛ $<&шшекяЩ&хкяш я 35
34 Ш Гш#а 3. Hthvsex сщ/пцтура VflBL-'ÿÿ и!
Поэтому, чтобы и VHDL- проекте 1 1 <е ею;г ьюемът ь 'LL 111 etd logic,
требуется подключить к проекту соответствующие библиотеку и ткет.
Эти операции выполняются я начале VHDL- проекта с помощью кдЫ:
чсных ел on library и ива фотаетегиеннез, мл пример, таким Образом:
%«b.sbd_igHicjfll£i4.all:
Расширение . al]
означает» что и
Объектов,
всех
Описания
ieee . atdÿlogi 1 i G 4 .
проекте можно пенольюлать
содержащихся
и
пакете
Большинстио САПР VHDL поддерживают работу с библиотекой
ieee, 13 состав которой ВХОДЯТ СЛСДУЮШНС пакеты:
* Bto_.iogic_1164. Содержит определения оснонмых типов дан¬
ных.
* etd_.logic_arith. Содержит арифметическое
ции преобразования
ЬшныЦ
и
функции* функ¬
ергшнения. работающие с такими типами
как signed, unsigned, integer, st:d_ulogic,
Btd_logic, std_logic_unsigned и stcLlogicÿvector,
* 6td._logic._misc. Содержит определения
пов данных, а также
ESC помогательных
ти¬
подтипов, констант и функций, используе¬
0bd_logic_llSJ,
пикетом
мых
Чтобы заде iici во ватт, любой из этим пакетов, нужно включить в со¬
став проекта операторы объявления требуемых библиотек и пакетоЕ!
шд!
--
TI'JJJO
пакета .
library j.
ieee.sijS
Очень популярной библиотекой также является библиотека
5YN0PSYS, которая содержит пакет SYWOPSYS. attributes.-, all с
он и сап ними атрибутов:
library SVHOPSYSJ
use SYN0B5YS /it tributes- all;
может спадать и затем подключить к проекту
собственный пакет. Объявление пакета должно удовлетворять следую¬
щему синтаксису:
ЦУ
лфщ лфеета
oner avopiC
or.d package body
HaiLpn
■
1
I
лда
дакегл)
: i i - i IL‘ логические
■
функции AND2, 0R2, NAND2 , KOR2 ,
xoai и т. д. необходимо npeaiafpit ггельно определить как компоненты.
использовать
потом качестве и разрабатыпрежде чем их можно будет
функции р качестве
логические
насмон проекте. Определить базов ы&
од в U:_l one таким
можно,
именем
например»
в пакете С
ком лонентоа
образом:
-- юиерфейс пакета.
library i'
—
—
цпе
!■■
std.
.
■
I И -1 . 1 1 1
и
package baaic_£dllc is
о&ьяэгтеаие лж2 .
component
AND2
ganorlc HJE1AY! tine ;-:j r,:;) ;
port (:ni, LLI2; in s;<i_icgic; out 1: out Std_l sic;';
йг.й component /
объявление
component
use ieee.&tdJogi<_ll64 .-nil;
ues
logricÿaritfcallj
ua о ; ее e , st d_l og1e_u ns igned, d i.1 ;
Разработчик
Сбг-Jfe Л?ИИЯ_.ТЙК(? ГА
and package х.т-г. .ттйл'агл;
package body гШИ_РД Jfena is
library ieee;
use
- Интерфейс 1»кет«.
ияц_паквта i&
package
ОКЙ
.
)R;
|DELAY : Ь::г.Г' : 5 r.s ) г
port linlr ir,2: in £td_logLer out
end component;
end package 1» ; i с June;
■■
generic
li out stdÿlogic: г
течо вякета.
library ieee;
use iee e , 6tljLlogic_ 11 6Ж al 1:
package body bagic_fuilC ie
- 2 -входовый в (штиль find
entity A-4D2 to
generic (DELAY: time);
port '
I. L П Г : in ."ÿ:_] (
r:.c;
out 1: out std_J
end ЮЛЯ)
architecture
.
-li l_con»: of WED-1 in
34 ■ Глава л Базовая структура
ГЛАВА
bogln
Out! <= ini and i7.2 after DELAY;
end niorfol.jcanej
"ÿ
2 -МЯОДОВЕШ
ВСНТИЛЬ
4
ЛЕКСИЧЕСКИЕ ЭЛЕМЕНТЫ ЯЗЫКА VHDL
CR
•Utlty
in
F
generic DELAY; l. i:i„|;
ini,
port
inj|
end Ж.2;
architecture
№
in stcLlcoicj out
l#l_ ;onc2 of M.Ttf
out
std_lcgi
Ц
begin
Outl
:nl or ir.2 after DELAY;
end тс
_сойв2;
end package body baaic_furLc;
Обратите снимание на 70, что
интерфейсе
макпа и лсдтазделе
component указано время задержки 5 нс (DELAY; Same : =5 лб}.
Следует заметить, что явное указание времени задержки игнорируется
многими инструментальными средствами синтеза. I* конструкции раз«и;мою пакета использован встроенный тип ntd .logic, кото¬
рабе
рый объявлен и пакете sttxj;9gic_li§4. Для достижения видимости
описании типа eta._logi е из
макета в него низ каче¬
ны операторы library 1.0в.О7 иTIME ioee. std_logicm1164 all;.
СозданЙШ пакет должен Гиль отко MI им провал и помещен в поль¬
зовательскую библиотеку Такую библиотеку можно именовать как
ity_fun-T- Чтобы использовать компшеспты из пользоваталДвВЬй биб¬
лиотеки ijy_£uncs н создаваемой проекте требуется подключить эту
библиотеку : .у
тс н пакет bo:-. i.c
С ПОМОЩЬЮ операторов сле¬
......
и
разрабатываемо
■
.
■
дующего вила:
library ieee, myÿfunc;
!№(
.-j ii_l 10-1 al; ,
MI .
: лу_£ unci,biisi „func.all;
.
.
Внимание! Язык VHDL допускает перечисление имен библиотек и
Макетов после ключевых слан library и use соотастепшетю, разделяя
чх запятыми Естественно, что можно обтинть и создаваемом проекта
библиотеки и пакеты с тмощью отдельных операторов, как показано
дли примера 4-биЩюж сумматора.
4.1 Идентификаторы
......
(identifier*)
это определяемы! пользОртслем
используемые для обозначения программны* объектов ( просион копе*
то Et, интерфейсов архитектур, пакетов, сигналов, перемс
таит, ком ги тс и то в и лр,} И VHDL-проекта*. Пиша уже приводил псе,
примеры идентификаторов для входных к выходных си пталов, а также
Идентификаторы
СЛОЕ!!!,
для объявлений Интерфейсов н аркнтекгуп проектов- Мри выборе
адоитифнкатэдйп следует соблюдать ел еду пни не прешила:
Идентификатор может содержать прописные и (или) строчные
* символы
латинскою алфавита и цифры (А., ж a.„it, 0...9Й разде¬
символон подчерки1Йния,
одним
ляемые
символом II идентификаторе должен быть символ лйтйН* первым
|лфавнтаСимвол подчеркинация не может пьете» первым
скою
иди последний символом идентификатора,
идентиф ика¬
* Использовать подряд два символа ттоич ер киипнзтя в
горе запрещается.
Строчные и прописные сим молы латинскою алфавита и иденти¬
*
фикатор считаются одинаковыми, т. е, идентификаторы .-,Г:(52,
АШ2 или ап12 равнозначны. Другими словами, ндентмткагоры не чувствительны к регистру спивав,
длину:
* Идентификатор может пме о» любую
0, My_gatel,
При меры корректных идентификаторов: XI 0,
_Х10.
идентнфн катерок:
некорректных
ПpilMCpJ.I
ту, н .и. ейinput, gate- input,
3S ■ Глава 4. Лексические элементы языка VHDL
Идентификаторы, создаваемые но приведенным выше правилам,
называют базовыми идентификаторами (haze identifier). Однако эти
правила часто слишком ограничивал разработчиков, не позволял со¬
здавать имена сигналов с особыми свойствами. Например, если н
VHDL-ÿÿÿÿÿÿÿ требуется обозначить сигнал RES ВТ с активным низ¬
ким уровнем, проще всего использовать идентификатор \ RESET. Огра¬
ничения, наложенные на базовые идентификаторы, сняты в группе так
называемых расширенных идентификаторов (extended identifier). К рас¬
ширенным идентификаторам применяются нее те же правила, что и
для базовых, иос учетом следующих особенностей:
* Расширенные идентификаторы могут начинаться и заканчивать¬
ся символом обратной косой черты «\»,
* Расширенные идентификаторы должны отличаться от зарезерви¬
рованных слов, ключевых слов и любых других базовых мденгнфикаторов. Например можно использовать расширенный иденти¬
фикатор \if , который нс будет восприниматься компилятором в
качестве ключевого слова if,
* Внутри расширенного идентификатора также может содержаться
символ обратной косой черты. В такой ситуации он должен пред¬
варяться дополнительным символом обратной косой черты, г, е,
данных символов внутри расширенного идет нфика гора должно
быть два.
Расширенные идентификаторы поддерживаются только в версии
языка VHDL-93. R версии VHDI -87 они отсутствуют.
Примеры корректного оформления расширенных идентификато¬
ров; Input, .Input' , \ input #1\, \Rst\ \аэ\,
4.2,
Ключевые слова
Некоторые идентификаторы и о пользуются системой проектировакак ключевые слова (keyword) для организации особых, специфи¬
ческих конструкций языка (операторов языка). Эти ключевые слова не
могут применяться как идентификаторы для сигналов или объектом.
которые мы определяем в создаваемом проекте. Некоторые из этих
ключевых слов приводились ранее: in, out. or. and, port, map, and
и T, д. Ключевые слова часто выделяются САПР VIII)] полужирным
шрифтом или цветом. Полный список ключевых слов языка VHDL:
■1.3. Зарезервированные сши
dba
access
niter
Alia*
all
and
architecture
exit
£11«
(or
f unct ion
generate
generic
array
group
guarded
aaeert
attribute
IE
impure
begin
blocfe
in
inertial
body
incut
buf far
bus
case
component
is
not
a ignal
null
of
others
shared
ala
all
ага
ar 1
subtype
out
package
to
on
open
or
transport
units
library
proconu
pure
range
record
linkage
reglater
reject
«ait
when
disconnect
literal
loop
map
downto
mad
configuration
constant
else
nand
elaif
end
entity
new
next
nor
rem
report
return
rol
Л9
then
port
postponed
procedure
label
*
type
unaffected
until
use
variable
while
with
xnor
xor
ror
select
severity
4.3. Зарезервированные слова
Некоторые идентификаторы являются в конкретных САПР VHDL
зарезервированными. Зарезервированные идентификаторы использу¬
ются для указания информационных характеристик (типов) програм¬
мных объектов в операторах их объявлений- В частности, зарезервиро¬
ванными идентификаторами являются такие идентификаторы, как
bit, bit ..vector, atd .logic, etd logic vector и т.д. Зарезер¬
вированные идентификаторы запрещено применять в качестве базовых
идентификаторов.
Стандарт VHDL- 8 7 поддерживает следующие зарезервированные
слова: bit. bit. vector, integer, float, atring, character.
4.5. Ош/Mikj, строки и битовые строки ■ 41
40 ■ Глава 4. Лексические шменян языка VHDL
Стандарт VHDL-93 дополняет этот перечень следующими зарезер¬
вированными идентификаторами: otd _logic, 0td.,logic_vector,
std_logic_signed, std_logic_unsigned.
4.5. Символы, строки и битовые строки
4.4. Числа
мер:
По умолчанию числа, или числовые литералы, в языке VHDL пред¬
ставляются в десятичной системе счисления. Язык VHDL поддержива¬
ет работу с целочисле иными (Integer) и действительными (real)
литералами. Целочисленный литерал состоит из целого числа без деся¬
тичной точки, а действительный литерал всегда содержит десятичную
точку Экспоненциальное представление как целых, так и действитель¬
ных чисел поддерживается путем использования символов «е» или
«е». Ятя целочисленных литералов экспонента должна всегда быть
t юл Ожител ьн ым ч ислом ,
Примеры целочисленных лнтсралоп: 12 10 25653 12е+б
Примеры шкественных литералом: : , , ?.ъ б.?.б з не 2
Число 12 является комбинацией операция минус н целочислен¬
ного литерала.
Язык VHDL также поддерживает работу с числами других систем
счисления, Такие числа принято называть базированными литералами.
Синтаксис представления базированных литералов имеет вид
ба?сЗт’,-исло11
.
Ниже приведено несколько примеров представления десятичных
чисел L 6 н 29 с помощью базированных литералов для разных основа¬
ний систем счисления.
• Двоичная система: 2s.00lc* (эквивалент десятичного числа
•
ie>; 2 IT 1 1 0К1 (эквивалент десятичного числа 2f>).
Восьмеричная система: 8 #22 (десятичное 18); 8 it ЗБ (десятичное
29).
• Шестнадцатеричная система: 1 б в 12#
(десятичное 29).
(десятичное L8); J6#1D#
Для повышения наглядности при записи больших чисел допускает¬
ся вставлять символы подчеркивания между группами цифр ( напри
мер,
тетродами)
базированного
литерала,
например
2Р1001_1101_1100_0 010#1 Э(Ш5_123# ит, и.
-
Отдельные символьные литералы, используемые с коде VHDLпроекта, должны заключаться в одинарные прямые кавычки, напри¬
'8'
■а'
Строки символов заключаются и двойные кавычки, например;
’ Пример
строки . "
двойник кавичек внутри строки куано удваивать
соответствующий №-:йол. "
"Пример " ' пчо1.оянойн " стрэки."
"Для
использования
В состав строки может Сыть включен любой печатаемый символ.
Битовая строка (bit-string) представляет собой последовательность
значений, представленных в виде набора битов. Чтобы указать, что
строка является не обычным текстом, а битовой строкой, последняя
должна предваряться символом, который обозначает основание систе¬
мы счисления. 13 частности, для обозначения двоичной системы счис¬
ления нс пользуется символ в, восьмеричной символ о, а шестнадца¬
—
теричной
символ х, Например: в"И00_Ю01я, Ь'чооюи",
О " 311 ■ , О р 11 3 " , X " С 9 " , х " 4Ь " .
Вникание! Следует заметить, что при записи битовых строк в шест¬
надцатеричной системе счиоеиин каждая цифра соответствует одной
тетради. Поэтому битовая строка ЬЧООХ 01 1 ", представля¬
поскольку последняя соот¬
ющая 7 бит, не равна битовой строке
ветствует 8 битам. По этой же причине битовая строка о“113“
(9 бит ) нс равна битовой строке х " 4Ь " (8 бит).
ГЛАВА
5
ПРОГРАММНЫЕ ЭЛЕМЕНТЫ ДАННЫХ:
КОНСТАНТЫ, ПЕРЕМЕННЫЕ
И СИГНАЛЫ
Любой программный элемент данных в языке VHDL прежде чем
использовал ься в проекте, должен быть объявлен (declared) с указанием
шна (type) н значения (value). Программным элементом данных может
быть константа (constant), переменная (variable), сигнал (signal), а также
фаи-i (Шс). До енх пор мы имели дело с сигналами, которые использо¬
вали как входные или выходные порты или п качестве внутренних свя¬
зей. Сигналы можно рассматривать как программное представление
проводников (wire) в схемном решении. Сигналы могут иметь текущее
значение и определенный набор возможных значений, являясь функ¬
циями операторов устаноеки значения еигнала (signal assignment ). Пере¬
менные и константы используются а качестве вспомогательных про¬
граммных элементов, используемых для моделирования поведения
схем, с операторах process, подпрограммах-процедурах и подпро¬
граммах-функциях, подобно тому как они используются в других язы¬
ках программирования, Давайте кратко обсудим назначение и синтак¬
сис каждого класса этих программных элементов данных.
5.1,
Константы
5.2. Переменные т 43
В операторе объя плени» константы может отсутствовать та часть
объявления, в которой укатывается начальное значение константы,
т. е. [ : началыюе_знрчсн«е } , Константы могут быть объявлены в
=
разделе объявлений архитектуры проекта, В этом случае константа яв¬
ляется видим ой и пределах всей архитектуры того проекта, и котором
она объявлена. Константы, объявленные в разделе объявлений оператора process, видимы только в пределах этого оператора process н
могут использоваться только в этом конкретном операторе. Константы
могут также объявляться в пакетах. Если константы имеют одинако¬
вый тип и одинаковое начальное значение, их идентификаторы можно
перечислять и операторе объявления в виде списка, отделяя одно имя
от другого запятой.
Ниже приведены примеры операторов объявлений констант.
constant RISE_FAIib_THE: time := 2 ns;
4 ns;
constant DELAY! ; timeЛИГ, FALi._TlMt: rime-:
constant
constant D.\TA_BUS : intept-r: 1.6 j
=
i ns;
5.2. Переменные
—
Переменная это программный элемент данных, который в про¬
цессе моделирования работы проекта может принимать любое, по
всегда единственное значение и определенный момент. В другой мо¬
мент переменная может иметь другое значение. Значение переменной
может быть модифицировано оператором присваивания значения пе¬
ременной. При этом считается, что значение переменной модифици¬
руется оператором присваивания значения немедленно (т. е. без временой задержки), как только этот оператор выполнен, Переменные
должны объявляться только и подразделе объявлений оператора
имеет следующий синтаксис:
Константа — это программный элемент данных, значение которо¬
го остается всегда настоянным в процессе моделирования н работы
проекта. Объявление программной величины константы имеет следу¬
process. Объявление переменной
constant кия_кси :тянты-.
variable CHTR_BIT: bit : 3;
variable VAR1 : boolean J FALSE]
to 2'ЭТ :
variable ЛУИ: integer range
variable ST2_BIT; bit_ve«or i. ■' downto Q);
ющий синтаксис:
тип (
:= начальнсе
эн-зчение]
;
начальна нмчеяле] ;
Ниже приведены примеры операторов объявлений переменных.
variable )ия_лереяенноЙ; тип [
=ÿ
44 ■ {'.шла 5. Программные з.кмснты teM: константы, переменные и пинты
U рассмотренном примере переменила -;зк является целым чис¬
лом, которое имеет диапазон от 0 до 256 н начальное значение 16 и на¬
чале процесса моделирования, В четвертом примере определен бито¬
вый вектор STS_BrT, содержащий S элементов, к каждому из которых
можно обращаться но имени переменной с указанием индекса бита н
векторе: зт$_вгг (7} STS_BIT {б), ... STS_BIT (01.
Как говорилось выше, значение переменной может модифициро¬
ваться с помощью оператора присвоения значения переменной. Этот
оператор имеет следующий синтаксис:
истечении которой следует присвоить сигналу результат вычисления
соответствующего выражения, например:
;
пн
г. А хог
В) after
Если переменные имеют одинаковый тип и одинаковое начальное
значение, их идентификаторы можно перечислять а операторе объяв¬
ления а виде списка, отделяя одно имя от другого запятой.
5.3. Сигналы
Сигнал -- это основной программный элемент данных n VHDLпрпектах. предназначенный дня переноса информации между компо¬
нентами. Фактически сигналы связывают компоненты проекта и еди¬
ную систему, Оператор Объявления сигнала имеет следующим
синтаксис;
;гачальжк?_
)мчек«е] ;
Если сигналы и ме юг одинаковый пт и одинаковое начальное зна¬
чение, их идентификаторы можно перечислять в операторе объявле¬
ния в виде списка, отделяя одно имя от другого запятой.
I I иже приведены примеры операторов объявлений сигналов.
eignal SUM, CARRV : sf.(J_logic;
signal CLOCK: bit;
signal TRIGGER: int-::;c‘r ;ÿ];
signal :AI,' ли:;: l it „vector (0 to
;
signal VALUE: integer range 0 to 100;
Значения сигналов изменяются при выполнении операторов уста¬
новки значения сигналов, В отличие от переменных а операторе
установки значения сигналов можно указать временную задержку, но
2 ns?
Кроме того, у сигнала есть сше одно отличие от переменной: он
может представлять не одно значение, а несколько значений на своей
временной диаграмме, используя семейство событий, например:
wave frit
oavefrm <ÿ C '
jtd_iogic;
signal
■
1
Кмя_перененной : = выражение!
signal JOWL. сигнала; ТИП |
5.3. Смиты ■ 45
after >
i'.:i ,
*
0
1
after I fl
ты , 1 after 20
1
as;
Внимание! Помните, что переменная изменяет свое значение сразу же
/г ос, if завершения выполнения оператора присвоении. Сигнал же и шепнет
снос значение после завершения выполнения оператора установки знакепин сигнала не сразу, а лишь по истечении заданной временной задержки.
Пели время задержки явно не задано, сигнал изменится после задержки
, установленной па умолчанию. Последнее обстоятельство, т.с.
. у.
возможность явно не указывать временную задержку в операторах уста¬
новки значения сигналов, может привести к неверным результатам моде¬
лирования из-за исправил ънои трактовки разработчиком программного
кади, а котором используются переменные и сигналы.
Давайте рассмотрим два примера, в первом из которых использу¬
ются переменные, а во втором сигналы,
—
Пример 5. 1. Процесс, использующий переменные
architecture 7AF: of EXAMPLE is
signal TRIGGER, RESULT: integer :a 0;
begin
process
variable variable! : intetjvi : I ;
variable variables: integer : 2;
variable v-.ir i ibl< 3: inti
begin
wait on TRIGGER;
variablel : = variable?;
variable’. ■* variables ;
variable*!
variables
:
variable!
varUblol + variable? * variable!;
RESULT
'
■
46 ■ Г.шее л Программные .цементы данных: константы, переменные и сигналы
ГЛАВА
end process ;
end VAR
ТИПЫ ДАННЫХ
Пример 5.2. Процесс, использующей сигналы
.
architecture
5N of SAMPLE ie
TRIGGER, RESULT: integer
signal!: integer :=I;
signal
signal
signal
signal
begin
6
j=
0;
signalÿ: integer :*2;
rignaU: int 'к: : 'r
process
begin
wait on TRIGGER;
signall
signal2;
signalÿ <= signall + signal! г
signal! <= signals;
RESULT <= signall * signal2 * signall;
end process ;
end SIGH;
R примере 5,1 операторы присвоения значении переменным
varloblel. va: i )ЫпЭ и variable! вычисляются последователь¬
но, г. е, строка за строкой. При этом их значения модифицируются
этими операторами мгновенно и становятся известными к моменту
появления сигнала TRIGGER. Следовательно, сигнал RESULT вычисля¬
ется уже с новыми значениями переменных, а именно:
variablel - 2, variable2
5 {=2*3), variable! = 5. Так
как сигнал RESULT Судет вычислен во время активизации сигнала
TRIGGER, то момент модификации сто значения будет определяться
установленной но умолчанию задержкой: TRIGGER ' dolt а. Новое
значение сигнала RESULT будет рапно RESULT- 12.
В примере 5,2 сигналы начнут вычисляться во время активизации
сигнала TRIGGER, При вычислении новых значений сигналов в этот
момент будут использоваться начальные значения сигналов. Все сиг¬
налы, участвующие и процессе вычислений, будут модифицированы с
временной задержкой delta после того, как активизирован сигнал
'.'RIGGER. Таким образом, сигналы будут иметь следующие значения:
~
signall
=
RESULTÿ 7,
2,
Bignal2
=
f,
(=1+ 3)
signals
~
2
w
К HR уже от менялось к предыдущих главах, is языке любой програм¬
мный элемент данных, будьте константа, переменная или Сигнал, от¬
носится к тому или иному конкретному типу. Tun (type) задает инфор¬
мационные характеристики программного элемента данных, опрсдеI нет набор допустимых значений элемента, а также набор операции.
которые применимы к этому элементу. Язык VHDL относится к разря¬
ду языков со строгим контролем шпон, т. с. в VHDL не допускается ис¬
пользование нетипизнровапмых данных, как, например, это имеет
место к языке Basic. Более того, и VHDL не допускается также присво¬
ение значения одного типа элементу данных другого типа, что являет»
вполне легитимной операцией is таких языках программирования со
строгим контролем типов, как C++ или Pascal. В C++, например,
можно присвоить целочисленное значение переменной, имеющей
действительный тип. В C++ при этом компилятор автоматически вы¬
полняет приведение типов, тогда как в VHDL та tom операция присвое¬
ния является недопустимой: разработчик должен позаботиться о пре¬
образовании типов до выполнения операции присвоения,
6,1 . Встроенные типы данных пакета STANDARD
Спецификации языка V1IDL предусматривают использование не¬
скольких встроенных типов данных (Табл. 6.1 ), определенных и пакете
standard библиотеки std, Для того чтобы использовать эти типы
данных, в проект следует включить следующие операторы:
library ".d, work;
uae Jtd. standard. all;
4Й
•I
ut6ii
6-2. Пыькмяпгежкие тиныи подтипы m 44
6. ТииыАаиных
чл
к
.
и
■;
■
SТ
.
*i
£
4J
■
&
4—
I
CL
1
<
I
*E
-ÿ
fi
t
I
2
-
Л
Oj
■
и
f
*Н
И
..
S
hi
I
щ
D
ii
E
■g
в
ч
"2-г
-
й
с:
£
л
i?
г IС
Г;
-
=
E
=
"
■
г
&
Я
a
3
I
S
c
I
ч>
Й
.n
II
.4
.о
%й1
**
8
д
■-
■-1
л
1
= i5f
я
a
I2
%
■
*!
-I
ыъ
-J
:i:
I '.'I
=4-
r.
re,
■я
/
и
:•
■
%c
%
—
Я—
..
i
'
■Н
■
■
>
"
*
gь
■И +J
Йг-
.
4
J_'
■■■
a-
I :=
я
5
li Si
aЁ
II II
f
%
I5
%
I
2
sI
1:11
iff
Щ1
ч ifIff
■
I
4
\ч
о
;J
js
5
ё
■■
&
I
4?
т
IH
■-
I
■= X
Л
15
aJ
ns sII
li sHi*
5a В ftll a = i В a 5 ft
“ a 1i
G
-
I
§
FJ E
■
■
•и
*Н г1
Й
IT |
'ni
ъ
и
i
r
5
kl
S
и
£
||C
S•
•
..
в
li
■н
"
7
■J
I
'
Разработчик может ввести и проект новые типы, используя Опера»
гор объявления типи, который начинается ключевым словом type,
снабжается идентификатором и определяет диапазон значении для ноi ют пользовательскою гига. Синтаксис объявления типа имеет следу¬
ющий
х
р
8
ri
;| :
6.2. Пользовательские типы и подтипы
пил:
>ÿ
в 1Ё
I
кг
.tn
"
IR s
“
■■■
:j
I
'й
I
с.
■
.
e
i-
в
в
jjM
■
'
■
I
i/l
~h
N i =
“уs п
К
ч П. Is li iil = £ s1£ s
:li£ 5
=5 Т5
г з |g|fc
О
i.
*
Г,
f=
I
ill
i В
ь*
33
;
..
U о:
■= '-i
j
*
г
К
не
Illll!
=
lllb
т
щ
ill
iStsif
= И it
1 gH ri 1 Ks IИн§1I
ill Ф-ii пI U №|j
|J i iа №
ш III !i = flip
i S !*-'
£j 3
а
;■
Г
■
Ъ
7
:
о
2Z
и
—1
> шI
.а а :
s£ =
i:
>■
i
f
■u
is
ё
=J
u
i!
I
вй
!
II
&3
i
>
4J
Z CL
r
■V
u
4
-+
3-j ■и 4,
№
гг
г
г
1-
<4
а
KJ
I'J
№
U
>н
li 3
5
&J
type идвнтпфнкатор тнг.ci Li таив* u.'Hivt'HwI |to|/ Iflowito)
значению? ;
Кроме того, в VHDL допускается создание пользовательских под¬
типов but» у ре). Оператор объявления полтина начинается ключевым
словом oubtype, снабжается идентификатором н п.теишфпкгггором
родительского типа, а также диапазоном значений для нового пользЯ
илтельского подтипа. Синтаксис объявления подтипа имеет следую¬
щий вид:
subtype идентификатор is еденгификагер_гта
г«щ*
эннченна! to
знйЧенив2:
downto)
Подтип представляет собой подмножество значений, взятое из щ
лптепьского типа. Подтипы удобно испЯрэопатъ в тех случаях! когда
по тем или иным причинам в VHDL-ÿÿÿÿÿÿÿ нужно i к: пользовать
часть диапазона, определенного типом, но при ,&том создавать
отдельный тип не обязательно.
Ниже приведены примеры операторов объявления пользователь?
ских типов и подтипов:
.I: ifi: is range
to L 1 . -I ,,Jj downto &;
тапде
nÿ_word_iejigth Is
subtype Датл .'.ÿ.'Oi'cl is Bÿ_HO r d_le ri g t b range " dovr-ta 0 ;
□ubtype int_Enuin 4b i.ntage.i r&ngo 102-4 to *1024;
typo c;-1 )c. r.vei la range 0.C to :.3;
type pi- ;_1 t:-ve I is range r:,0 to 0 , C :
type probability is range 0.0 to I ;
range 0.0 to +1.8;
aubtypE Cb.»s„lt)HLY i-ÿ
type
1
;i;
type
.
I lphttie])E,i операторов объявлен mi переменных н сигналов с пользоып ел ыкн м и типами и подтипами таковы:
62. Пользовательские тины и подтипы и 51
50 ■ Глава (5. Типы дШНых
variable ВиЗ_Ш!>ГН
; bn i Ll_;nt :
signal D AT A_a'JS
i iy_wor dLlengt h ;
variable VAR1 : cmos_level := 1.45;
signal DATA_5U512
my_word_length;
r
Ниже
показан
пример
имеющей
,1NE_C0ND,
оператора
объявления константы
тип
физический
пользовательский
6.2.1. Физические типы
conductance;
Язык VHDL поддерживает работу с физическими величинами, Од¬
на ко в п а кете s t d s t a ndard о 11 ределе f i ы топ ъ ко сл шиш ы и ч мере]iия
времени. В терминах языка VHDL это означает, что н пакете scetub I
объявлен только физический тин (physical type) time. Синтаксис опре¬
деления этого типа имеет следующий вид;
constant [.ТН*_С0н0: conductances 125 umhc;
.
time is range -2 1474836-37 to 214*7483647
units
type
fs;
ps
ns
10 30
1000
1000
1000
fs;
ps;
ns;
US =
us;
ms
sec 1000 ms;
60 sec;
min
hr 60 min;
*
=
er.d
unite;
--
small_int Is range 0 to 1024;
typo iry.word.loitflth is range 31 duwnto 0;
type conductance- is range Э to 2E 9
■
mho;
mmho = IE-3 mho;
umho =» IE-6 mho;
mr.ho * IE- 9 mho;
П тех случаях, когда нужно многократно использовать однажды
объявленный пользовательский тип, следует либо включить оператор
объявления этого типа в раздел объявлений архитектуры проекта, либо
поместить такой оператор в пакет (package). Последний подключается
к проекту с помощью оператора package. Например, приведенный
ниже пакет ту_гуре ; можно подключить к проекту, воспользовав¬
шись оператором package п\у„ types ; .
type
conductance может иметь вид
unite
Внимание! При сопровождении числового значения единицей измерения
перед именем единицы измерении должен присутствовать пробел.
package my_tyi>e$ is
Для работы с другими физическими величинами разработчик дол¬
жен сам определить дли них единицы измерения, т, с, объявить пользо¬
вательский тип для представления н VHDL-ÿÿÿÿÿÿÿ требуемой физи¬
ческой величины. Так. например, если пользователю требуется в про¬
екте работать с единицами измерения сопротивления участка цепи, он
должен определить физический тип, например с именем
conductance,
И этом случае оператор объявления типа
L
jxnho ■ IE- 12 i(ihO;
end unite ccnduet&nce;
subtype dataÿword is my_w ord_1 e ng t h is range 7 dowoto 0j
typo cirjCiS_level is range 0.0 to 3.3;
type conductance is range 0 to 2E-0
units
mho;
mho = IE-3 mho;
untho - IE-6 iriho;
:imho = IE-9 mho;
pmho * IE- 12 oho;
end unite conductance;
package iry_typ-?s;
6,2.2. Перечислимые типы
Разовым компонентом перечислимых типов (enumerated type) явля¬
ется список литеральных символов и (или) идентификаторов. Язык
VHDL поддерживает работу как со встроенным перечислимым типом,
гак и с пользовательскими перечислимыми типами. Последние очень
52 ■ Глава 6. Типы данных
■ Н"
удобно использовать При формировании проектов на абстрактном
■
уровне, т. е. проектов конечных автоматов. Синтаксис объявления пе¬
речислимого типа имеет следующий вид:
type
имя тнг.а 1а
mi и:
п(_пд(‘нгн
Ниже приведено несколько примеров операторов объявлений мсречислимых типов,
г
typo my_3valu&s in {'O', 'Г
• 't ;
type РС_ОРЕн is Head, store, add, sub, div, mult, shifcl,
'6', '7'
'f
Примеры операторов объявлений программных элементов данных
с приведенными выше перечислимыми типами таковы:
SIS!: my_ lvalues;
signal
variable
ALU_OP
variable
fieseÿdigit
Signal
STATE
»c_Oper;
hex_digit r= 'S';
S2;
9tate_type •
-
Примечание, Если в операторе объявления сигнала с перечислимым
типом явно нс указывается начальное значение сигнала, по умолчанию
используется первое (крайнее левое) значение из списка, указанного аобъ*
явлении соответствующего перечислимом типа.
Примером встроенного перечислимого типа, объявленного в паке¬
те std_Iogic_1164, является тин scd„ulogic. Оператор объявле¬
ния типа std_ulogic имеет вид
type STDJ/LCGIC is
‘V
-- uninitialized
-- forcing unknown
■O', -- forcing 0
'1 1 , -- forcing i
‘X‘,
z
w
L'
--
----
high impedance
weak unknown
weak 0
");
—
--
Пользовательские шШ и подтипы * 53
weak 1
don't саге
Чтобы нс пользовать этот тип
|1
проекте, разработчик должен вклю¬
чит перед каждым объявлением интерфейса проекта следующую пару
операторов:
I»
):кг\п'’юо_ип)1_счт\опоп) ;
ahiftrt;
type hex_digit is CO1 '1', '2'
■)', '4' , '5'
’5' 'A', 1 В' 'С ‘P’ 'E1 ’PJ;
type :Mte_typo is [SO, SI, S2 , S3 J j
-
6.2,
library ieee;
ieee, 5t4_logic_1164.all;
use
Этот тип создан исходя и з того, что и ЦУ и общем случае может
быть несколько формирователей сигнала, называемых также драйвераMU (driver), между которыми может возникнуть конкуренция, В случае
возникновения конфликтной ситуации между несколькими источни¬
ками выходной сигнал будет неопределенным, Простейший пример
это соединение выходов логического
.акой конфликтной ситуации
элемента and и логического элемента хот с подключением общего
выходного сигнала к вы попу оит1. Для того чтобы разрешить коифI и кт между источниками сигнала и установить окончательное значе¬
ние для сигнала на выводе OVT1, требуется вызвать так называемую
—
разрешающую функцию (resolution function).
Так, если сигнал имеет тип n":id_u logic и может формироваться
несколькими драйверами, разработчик должен позаботиться о созда¬
нии разрешающей функции. В пакете std„lo<ric_lI64 определена
используемая по умолчанию разрешающая функния RESOLVED. Со¬
здав н VHD! .-проекте пользовательскую функцию с таким именем,
можно использовать следующий оператор объявления сигнала f 'JTI .
формируемого двумя конфликтующими источниками:
signal ООП; RESOLVED: Etd_uiogic;
Таким образом, если возникнет конкуренция нескольких форми¬
рователей сигнала, для разрешения конфликта будет вызвана функция
НЕ,SOLVED, it которой разработчик .должен разместить программный
код, определяющий конечное значение сигнала 0ит1, Можно также
объявить сигнал ОШТ как сигнал типа cl_ lo ric, поскольку в опера¬
торе объявления подтипа stcLlogic, определенного в пакете
atd_logic_l 6<, на основе родительского типа st.cl_u logic, разре¬
шающая функция г ELOLVED исполыуется по умолчанию. Это 11031(0'
l
54 ■ Гяавй 6. Тт;к данных
ляег разработчику u VHDL- проекте ограничиться объявлением сигна¬
ла следующего вида*
signal 0"Ti - :td_lcgic;
Лля разрешен конфликтов разработчику остается лишь сослать
соответствующий программный код функции RESOI-VRDi
6,2,3, Композитные пользовательские типы
Композитные пользовательские типы используются ти объявле¬
ния программных алемеп той данных [констант, переменных ч сигна¬
лов). состояшиз; ш нескольких простых типов, Полученные Йрмпоэитnjjie программные элементы представляют собой либо
массив (array),
либр запись (record),
Массивы
Оператор объявлении массная в языке УНОЦлыглядит следующим
Образом:
т)ша_,ча ссива
type
rvrn_ Sa эоаогс
э.теменга;
й двксацц
of
type МУ_>;о?:Э
ie array ( 1Б dour,to "■
of std.Lÿgic;
Т-.Дк_к,-.т.п ia array ■'. to Hi of std_] .nir
type VhV. iu array
(e to
I o£ integer;
type sr.r;_LT.;ic„lU is array (srd_ulogic) o£ std„:oaiej
■
typ а
R первых двух примерах onределt нм типы одномерных массивов
HY_WpR гл л Yut)R„v;oRD, каждый ие которых состой г in № элементов
гизта etc Llogic. Индексация массива типа KY_V;CRJ.
и
Нисходящем порядке (первый элемент массива — МУ TiQPi) .; т - j , fTOcл дннй
MY_WORD( 0 ) ), а массива типа YOURÿWORD - п восходящем
(первый элемент млеет т
V OUR_ '.J OlRL> ( 0 : , П&ЛОДНИЙ
YOU5t_WORD( 15))R третьем примере Определен тип одномерного массива VAR, со¬
выполняется
—
элементов типа in; .
■
с
г
.
■
j:,
* 55
И последнем примере определен гии одномерного массив
std_logic_.il>, содержащего элементы типа atcLlogic, НсобычSH,IM и операторе объявления этого типа массива является то. что колпчестео длементо]) такого массива определи стел не числами, а типом
это перечислимый тип,
Logic. Поскольку тин 3td_ulogic
-7r.d_logic_lD
также имеет
состоящий из 9 элементов, массив тина
каждого
является
симмассива
элемента такого
размер 9, а значением
t.qjulogic.
Навол, 01] редел нем ыи соответствующим элементом л
пример, std_logiC_lD( ’IT ) = ’U‘, std_logic_lD ( ' К' ) = 'X1,
L:'itL_Iogic_LD( ' 1 ) = '0 н т. д. до s fed_l oyi c_! D (
Объявив композитный тип массива, разработчик может исполцо¬
пать его в качестве польэовате ль§ко то типа в операторе объявления
программного элемента данных (константы, переменной или еи ша¬
—
_
|
ли), например:
signal ИЕМЛВД \
signal DATA_WORD
ccjnHtmt
SETTING
VA3
вчшнуоютош*:
1.2, I'l, 1G);
(2, 1, i, 9, ТО
ЕЗ первом операторе объявлен сигнал
is array ; сх«цй
Ниже ]]рнведены примеры операторов объявления массивов,
держащий 8
mmaii подтипы
6.2.
представляющий
собой (б-биййый массив, инициализированный нулями. Сигнал
От.та _W0R'J - это также 16-бвтмый маееил, но инициалпзиррЬаннЫй
оптовой строкой, й программном коде VHDL-ÿÿÿÿÿÿÿ к элементам мнесивов обращаются, используя идентификатор соответствующего про¬
три ммпого элемента данных и индекс. Например, для обращения к пер¬
вым элементам обьяплентпдх выше массивов следует попользовать
иленп1фнкОТоры вида МЕМ_А£Ш (15), DATA_WORD ( 0 ) и SETTING ( 0 )
R VHDL можно также создать массив, представляющий собой
фрагмент, или сектор, соответствующего пользовательского типа массива Для этого необходимо в операторе объявлении массива шит ука¬
зать схему индексании, являющейся подмножеством схемы индекса¬
ции базового типа массива: MEM_ADDR '15 downto в:, DATA WORD
.
!0 to
7) КТ. |ti
подло рживлет работу не только с одномер-!
иычн„ но и с двухмерными массивами. Для объявления двухмерных
о£. в
гифов массивов иетОЛъзуютсл операторы type
ie array
схеме индекс amш которых указывается не один, а два диапазона ин¬
Кроме того, язык VJ (1)1
...
дексов, Йапрлыер;
6.2. Патоввтын Kite типы и подпиты ■ 57
56 ■ Глава 6. Типы данных
type MY_MATRIX3X2 la array |1 to
. to 2) of natural;
type Y:;UR_HATRIX4X2 la array II to , I to it of integer;
type 5td_iogic_2D is array (stcLu logic, std_ulogic) o£ std_logic;
В последнем примере тип std . 1 c.q
п представляет собой
двухмерный миссии размерностью 9x9 или таблицу, индексированную
по столбцам и строкам элементами std_jl ogic.
Для иллюстрации того, как в языке VHDL реализовано размеще¬
ние элементов двухмерного массива » памяти, рассмотрим пример
объявления псрсмсннОй-массива DATA_AR?. типа YOUR_MATR 1X4X2,
variable НАТАЛИ :
YOURJtATR 1X4X2 : =
Здесь переменная \ >л
1(0, 2), 1, 3J, :4, 6), (5, ?!);
которая представляет собой двухмер¬
ный массив типа YOUR_MATRI Х4Х2, инициализирована парами значе¬
ний. Первое значение каждой пары размещается в первом столбце со¬
/■. _ARR,
ответствующей строки, а второе
— во втором столбце этой же строки:
О 2
I |ри объявлении программного элемента данных с типом открыто¬
го массива задастся фактический размер массива, т. с. диапазоны изме¬
нения значений его индексов, например:
variable MATR1X8
MATRIX (2 downto -8>
variable ARRAY 3x2 : VICTORS [1 to
4,
(3, 5, 1, 4, 7, 9, 12,
i to 3) )
11, 20, 18b
■ОМ, СО’
Cl
'-’I
{1, ’2‘И;
—
Записи
это композитный пользовательский тип
Как и массив, запись
данных, содержащий несколько простых типов. Однако в отличие от
элементы записи в общем случае могут иметь разные типы.
Синтаксис оператора объявления типа записи имеет следующий вид:
массива,
is record
идентификатор: тип;
type нмя_тяпа_зат!си
идентификатор ; тип;
1 3
4 6
5 7
tjt.rJ record;
Дли доступа к элементу массива требуется указать идентификатор
перемен I юй -масс и на с номерами строки и столбца, т. е. обращение к
переменной вида DATA_ARR{3 , 1 ) вернет значение 4.
Иногда при объявлении типа массива целесообразно нс определять
его размерность. В языке VHDL поддерживается такая возможность,
что позволяет создавать массивы неогра ничейного размера, или omкрытые массивы. Синтаксис оператора объявления типа открытого
массива II мест следующий вид:
тнпа кассивл is array (тип range о) о£
г;ш_ба 3QSC го_эпехенгл ;
type имц
Ниже приведены примеры объявления
type
MATRIX is array : integer range
типов открытых массивов.
of integer;
type VECTOR_INT is array (natural range <>( of integer;
type VECTOR! is array (natural range
natural range
of !.;':_logic?
<>)
•
■
На практике операторы объявления типа записи могут иметь раз¬
личный вид, определяемый номенклатурой и типом входящих в запись
базовых элементов, например:
type MY_MODULE is record
time;
RISEJTINE
EALLJTIHE
SIZE
DATA
end record;
;
time;
mb ;. : range ) to : . ,
Sjit_ vector (Lb downto 01;
■
Объявив тин записи MY_MODULX, разработчик может создать про¬
граммный элемент данных {константу, переменную или сигнал) с этим
типом. Например, объявление сигналов типа MY_MODULE может иметь
следующий вид:
signal А, В: HY_HODULE;
Для того чтобы в программном коде VJ I DL-ÿÿÿÿÿÿÿ назначить зна¬
чения нужному элементу записи, необходимо использовать одну из
следующих форм обращений к таким элементам:
6.2. JJaibiomme.MKiie паты и подтипы
58 ■ Г.ша 6. Типы данных
A.RISEJTIHE
<-
5
!i3;
---
A. SIZE = 120;
в
<- А:
--
--
---
установить значение сигнале RISE_TIHE
записи Л типа MY_H0-DfJL£;
присвоить значение Элементу SIZE записи А
типа
HYJTODULE;
установить сигналу
значение сигнала А
в типа MYJIODULE
типа MYJHODULE.
Как видно из приведенных примеров, для обращения к элементу
записи требуется указать общее имя записи и имя конкретного элемен¬
та записи, разделив эти имена точкой.
Записи очень полезны при создании проектов арифметико-логи¬
ческих устройств (АЛУ) персон альных компьютеров (ПК) или других
ЦУ. управляемых командами со сложной структурой, поскольку ис¬
пользование записей повышает наглядность н упрощает восприятие
программного кода. Рассмотрим, например, следующий фрагмент по¬
добного проекта;
type Rot] Name is (AX, BX, CM, DX) ;
гьэречпэ-пшиЛ гия
KcTiand ia record
Mnemonic String : i to 10) ;
type
Codc_Oper
B: t_Vector I 3 downto ::i
Operand, Operand, Adres : RegHano;
end record;
Определенный в этом фрагменте тип записи Xomand содержит ин¬
формацию о списке команд процессора, В структуре объявленного ти¬
па Komand содержится 5 элементов, каждый из которых является
фрагментом отдельной инструкции (например, инструкций Instrl,
Instr2, 1гяегЗ, Tnstr-i.
InstrK) программы, управляющей ра¬
ботой процессора ПК, Так, элемент Mnomon и- типа : i г,<т представ¬
ляет собо|[ мнемоническую часть кода инструкции. Элемент
Ссае_Ориг с типом Bit_Vector является кодом операции. Элемен¬
ты Operand:, Operands, Acres типа RegMame являются соответс¬
твенно операндами инструкции и адресом. Обратите внимание на то,
что последние три элемента объявлены и одной строке, поскольку они
Программе, например:
59
Inatri, Instr2, lnstrl; Remand;
variable
THSvfl:= CADDAX,
БХ" , "0001\ АХ, ЕХ, АХ) ;
РХ\ ’001С\ АХ, DX, ВХ) ;
instr2:=
[r.StrJi ч CKUIi AXt DX* , *0Ш\ AX, DX, BX) ;
( “ SUB АХ,
Доступ к
элементом записей типа Komand и присвоение мм значе¬
нии можно организовать но такой схеме:
г 3 . Mfit-roni с : - " KUL АХ , К 4 ;
*шо";
rnstr3.Code_0per •.
:nstr3 .ОрегапсЗЗ
= DX;
L |:
=
Рассмотрим примеры использования записи.
Пример 6. 1. Использование
результатов
library
записи для хранения промежуточных
ieeer
п г vl_ I j i c_ 1 1 о jl . L L;
entity Arith fa
in INTEGER range C to 256;
port (A
in INTEGER range 0 to ?M;
В
Kod_Op
in ;td_U:gic_vector(] downto 11;
Result
out INTEGER range- 0 to 12563);
uuo
ii-.-oe ,
end Arith;
architecture Arith_ar of Arith is
type prrn_rei
Sum
Sub
Mul
Div
ia record
INTEGER range 0
INTEGER range INTEGER range 3
INTEGER range 0
to
to
to
to
32563;
32563,32563;
32563 ;
end record:
signal -nit : prja_T-ssi
имеют одинаковый тип,
Теперь, используя тип Komar. о. разработчик может в удобной для
восприятия форме представить любую инструкцию, содержащуюся в
Я
signal F;es_sum
aignal Re::_,sUb
signal Res_Mul
signal Raa_Div
INTEGER range 0 to 32561;
INTEGER range 0 to 32563;
to 32563;
INTEGER range
12563;
range
to
.
INTEGER
60 ш Пнма А.
ТЬпы данных
rU Ц/жобраюнанче типов Щ _&!
bfiji п
!jUf,S-jir, <= A + В S
<- A “ B;
butJtul ■<:- A * =;
buf.Siib
Res_5um
buf.Susi;
R93_fLib <= b.lf . ?Llb ;
hut . Piv <= A / Bj
Rea_Hul
Rl . i Lv
olaif A.nyJ&le
B,yo_bie
B,$o_cirar
buf.Hulj
■■
-
■
■
and
А, г у. -it
■'
then
3 ;
<- 'S':
<ÿ
1
1
B.yoÿint <= 3;
i if , С IV!
end if r
end process,-
end
Result <* Res_Sum when Koct_cp
*00' else
Res_$ub when К od_Op
" . : 1 olae
Rcajful whan RocL Эр ' "JO" oUt
Rea_Div when Kod_Op
"II" :
end Arith._arr
=
Проект Ar:.th (пример 6.1) моделирует работу универсального
арифметического процессора, который параллельно выполняет набор
арифметических операции над беззнаковыми целыми числами. Ре¬
зультаты своей работы, т. с, результаты параллельно выполненных опе¬
рации, он сохраняет и элементах буфера but', и рслста ил я юше го собой
запись типа j . m_:
В зависимости от значения кода операции
КосЦЭр. поступающею на входной порт, процессор пересылает на вы¬
ходной порт Result только результаты одной операции.
Пример 6. 2, Использование записи в качестве входных/выходных
портов
library i-
■■
■■■
;
use
::!:cLtr-gic_116>l..ill ;
library Work;
use fltark.rec_packagel.all;
entity roc ia
port (A: in my_roc;
3: out yo_rec) ;
end гос;
architecture rec_ar of rec is
begin
procO ; procoen lA)
begin
if A.myJjit
=
f0‘ and A.~,y_int /= 'i then
B.yo_bit <= 1 l' t
B,yo_chnr с* H r
B,yo_int <= 5)
1
1
rtc_£r;
Обратите внимание на то, что для корректном работы проекта Коо
(пример 6.2) требуется определить пользой птельекпй макет с именем
имя rec_packaoel и поместить его и библиотеку Work. В пакете
должно храниться описание пользовательских типов my_ree и
, которые определяют типы входи ых/выходных портов,
Содержимое пакета может иметь следующий вид;
■
package гес_рзскй5'н1 ia
type
my_rec i& record
hit;
my_bit
character ;
my_chtxr
intv,ier tflnge i to 1 5;
my_i.r.c
end record J
суре
уо_1чт is record
yo_bit ; bit;
character;
yo_char
integer range & to
yo_int
15;
end record;
end rac_packagel;
6.3. Преобразование типов
Как уже отмечалось выше, язык VHDL относится к классу языков
со строгим контролем типов. Причем, если в других языках этого клас¬
са допускается назначение программным элементам данных значений
других типов, в VH PI. ткан операция ииляется недопустимой. Данное
ограничение распространяется как на сигналы, так н на константы к
переменные. Более того, is VHDL запрещено также выполнять совмес¬
тные операции надданными разных типов в одном выражении.
Однако на практике иногда необходимо использовать водном ВЫРйженпи разнотипные программные элементы данных, Разрешить
6,Х Иреобрачонание пимов ■ 63
62 ■ Глава б. Типы данных
проблему совместимости разных типов и одном выражении можно ну¬
том преобразовании одного типа в другой (такую операцию называют
также приведением типов). В других языках программирования приве¬
дение типов, как правило, выполняется автоматически компилятором.
В VHDL разработчик должен позаботиться о соответствующих опера¬
циях самостоятельно, создавая нужный программный код но мере не¬
обходимости. В пакетах std_lcgic_1164 и std_logic_arith биб¬
лиотеки i кее имеется целый ряд функции преобразования типов, зна¬
чительно упрощающих решение этой задачи. Функции пакета
scd_logic_li64 приведены и Табл, 6,2
Таблица 6.2 Функции нрсоСразоияиия типов, сплсржшцнссл л пакете
std_loRlc_l 164
<1)41 клил
'Гил ;i pc VMLJLEU
tO_B . :
std_ulogic
Ы;
tO_Bi tVeCtor
to_l3itVeeear
!)td_lfr';:c_Vgctor
atd_uiL::; ic_Vi'ct >:
bi t_vootor
bit_vector
bit
bit „vector
std_logic_vgctor
tc._StdULc<jlc
•
•"
:
■
to_5Ldu log i
V.
evect or
bit_vector
ta_St dtag i c Vector
I (.fjl r
std_log:ic
;;
to_StdUlogicve стог
Кроме
того,
в
пикетах
'Гни
library ieee;
цае ieae.std_logic_1164.allf
entity QUAD_NAND2 ie
port (A, B: in bit „vector 0 downto 0);
0Ut4 ; out 3tQ_loÿic_vector (1 downto 0)3;
er.d QUADJtTANM;
architecture behavioral_2 of QUAD_MAND2 ie
baglo
it ** <= to_stdLogic Vector (A and BJ;
er.d behavioral_2;
примере б.З проекта QIJAD_NAMJ2 выражение A and В, которое
имеет тип bit_vector, должно быть приведено к типу
■_
1og ic_'vector, прежде чем может быть использовано для уста¬
I)
ргЗулыАГГД
■
новки сигнала
out 4. имеющего тип std_logic_vector,
Пример 6.4. Преобразование типа Unsigned в тип Integer
std_ulogic
library ieee;
-no ieee.std_logic_arith.ali;
std_uTogic„vector
etd_ locrlc_voceor
std„uloglc„vector
std_logic_unslgned
Пример 6.3. Преобразование типа bit_vector в тип stdjoglcj/ector
и
stc_logic_vector библиотеки ieee содержатся определен ин функ¬
ций,
ПОЗВОЛЯЮЩИХ
преобразовывать
integer
тип
в
std_iogic_vector п наоборот.
Для достижения подключения функции преобразования ТИПОВ Ft
подраздел объявления библиотек и пакетов проекта нужно включить
слсдую ш ис операторы:
library iee*;
ueo ieoe. scd_logic_il64 . all г
ieee. std_l0gic_unsi5rned.aH :
■jso
В примерах 6.3 и 6.4 проиллюстрированы методы организации
приведения типов в VHDL, основанной на использовании функций
преобразования типов программных элементов данных.
entity odd_int ie
part (A : in unsigned (7 downto 0) : fc" 11110001* ;
В
in unsigned (3 downto 0) : = b’10010001* ;
out integer) ;
r-3S
ond udd_int;
architecture conv of add_int i*
begin
<= conv_integer (A) + conv_integer IB) ;
end conv;
—
В примере 6.4 приведен проект сумматора <3dd_int, входные дан¬
тип
В имеют тип unsigned, а результат res
integer. Несмотря на подобие типов integer и unsigned, прямое
назначение результату суммы входных данных в VHDL является недо¬
пустимым, Поэтому с целью приведения типов входных данных к типу
результата в проекте используется функция conv_integer, преобра¬
зующая тип unsigned в тип integer. Объявление этой функции хра¬
нится в пакете iepe.utd_logic_ari.th.
ные которого А и
6.4, Атрибуты
64 ш r.iaea 6. ТЬпы данных
6.4. Атрибуты
Назначение
Атрибут
Атрибуты (attributes) — это специальный комплекс лодпрограммфупкппй. которые позволяют получить информацию о характеристи¬
ках программных объектов. It языке VHDL поддерживает несколько
типов встроенных атрибутов, т, е. атрибутов, определенных и ядре язы¬
ка. Некоторые из встроенных атрибутов для своей работы требуют на¬
личия фактического параметра (аргумента). Предопределенные атри¬
буты всегда присоединяются в виде суффикса к идентификатору сиг¬
нала, переменной inи типа, отделяясь от него символом апострофа
( ), за которым следует идентификатор атрибута:
1
И(к>нп1ификатор_%1смента данных ' идентификатор
Такой синтаксис позволяет получать различную информацию о
сигнале, переменной или типе. Кроме встроенных атрибутов, разра¬
ботчик может определять пользовательские атрибуты, а затем назна¬
чать их именованным объектам, указывая при определении объекта
возможные значения его атрибута.
■
|.
■ 65
сигнала, Л1Н
Возвращает сигнал, чье значение соответствует значению
- необязательный
lyfct (7'i которого считывается атрибут, с задержкой г<Т*0|
|ищммс1р, лианное но умолчанию значение
интервала
Возвращает значение : е типа boolean, если и течение (з
случае
значенисСиП1Ш1и нс менялось и .М : и противном
т=0)
■
;езЫе(?)
- -
необязательный параметр, заданное по умолчанию значение
Г 1ГЛ
значение тнЧКтипл boolean, если в течение интервала
{Вопрошаетri[»ncxamioiiHkaKHXCo6iniill.
и противном случае I
и
гл:
вс
duiot m Сигнале
|< : нсоГнгцисльныЙ парамор, ьшнкое по умолчанию значение : .0 |
if
Пример применения атрибута event к сигналу CLOCK:
проверя¬
выражение
•
Это
(CLOCK 'event and CLOCK- i ’ ) then
сигнале .'LOCK. Что¬
тактовом
на
фронта
переднего
появлении
ет факт
появления переднего
бы узнать, сколько времени прошло с момента
атрибут
фронта последнего импульса CLOCK, можно использовать
astÿevent: CLOCK' lastÿevent.
....
6.4.2. Скалярные атрибуты
Атрибуты сигналов - это встроенный и ядро языка комплекс спе¬
подпрограмм, обеспечивающий возможность получать ха¬
рактеристики сигналов при моделировании работы проекта (Табл. 6.3),
в ядро
Скалярные атрибуты (scalar attributes) — это встроенный
получеобеспечивающий
л зыка комплекс специальных подпрограмм,
моделировании рабопне характеристик скалярных типов данных при
атрибуты проекта. Язык VH DL поддерживает несколько встроенных
тов скалярного типа, приведенных в Табл. 6.4.
Гиншци 6,,?, Часто используем Ыс атрибуты сш налои
ГаГиица 6.4, Чисто используемые скалярные атрибуты
6.4.1. Атрибуты сигналов
циальных
Атрибут
.....
.......
Назначение
фозпр.шыст значение ТИРЕ типа ЪчоТ, сеть, если гга сигнале произошло
.собыгие. н i'Ai..3t inipdimiHOM случае
]Возвращает значение C'fUJE типа boo] ear., если произошла установка
Event
Active
сипни
I Противно» случае
Возвращает сигнал типа Ь .знамен не которого переключается (от Ока 1
и,1 0) при каждой транзакции на сигнале, для которого
о н.-.лс: ...л. нднот I
считывается атрибут
iflgt_evont
1.Л :т L
7|Возпрпшпет интервал времени, начиная с последнего события на сигнале
active
laiitÿvalue
Возвращает интервал времени, начиная с последней транзакции па
If!
\v;
Полепилcl лмчажссипиим, которое он имел перед последним
nipOtnOlUC.UIJHM МаОЕПШС пй'нги
1
.
Атрибут
Назначение
значений,
Возвращает крайнее левое значение лиана зона допустимых
определяемого скалярным типом
значений,
Возврвшаст крайнее правое значение диапазон* допустимых
г ight
определяемою скалярным типом
значений,
Возвращает наименьшее значение нз диапазона допустимых
•'
Low
Ш
.'
i
скалярным
определяемого
значений,
Возирашлет наибольшее ЗНВЧешн из днЯЛЖЮНа допустимых
high
типом
скалярным
определяемого
диапазон. н
Возвращает ТЯОЕ, сели скалярный тин имеет возрастающий
isCur.uir.g
FALSE п противном случае
и
Bojnpainaei индекс элемента перечислении и i его представлении
-1
| форме сим вольной строки S
индексу м лечен м . перечислимою шил
-•-'.•ддо is| |Возвращает строку символов по
Lolt
_
г
6. Атрибуты ■ Ы
66 ■ Глам 6. Типы данных
Далее яр и негде ны
rrpvi меры-йсг
юл изон ;111 ил скал#i р 11 м х атрибута в.
-- Объявление типов.
ccTuluctatce is range l.E-6 to I-:
unite nho;
type
.
end unitH ■: nductance;
typo г y_ index la tinge 3 to ;5?
type щу_ДйУе1б ia tlowj high, '5' cion t care, lighZl;
-- Примеры использования атрибутов.
con du c L fin со ’ r i ght
-- возвращает значение 1E3.
возвращает значение 1ЕЭ.
conductance ' hJ-glri
Возвращает значение :к -б.
conductance ri™
my _1пс.ея ■■ lef"
возвращает значение 3,
сну _index' value {"S'J
возврата от значение 5.
my_levi>l:i le Jit
-- во-э вращает значение low,
ny_ levels jj low
-- возвращает Значение low,
ny„levols'higb
возвращает значение high!!,
eiy„levels' image tdont care)
возвращает
■dontcate’.
возвращает значение doheeare.
nK-Uvels' value ("donteag*)
---
1
—
—
-ÿ
Технология
примере 6.5-
использования скалярных
значение
атрибутов представлена и
Пример 6,5, Технология использования скалярных атрибутов
library iiree;
UM ieer- , utd_logic_L ISi , all ;
entity jskal.aetr U
port i Out
out string : I to 4);
out_raL5
out string ; L to |3) ) ;
end skal_artr;
architecture sfcaljctrÿar of akal„att: le
type mu Hftv ie (tr:,
5', dont, Sira, maina, petrflSlj
r
type my_index is ranga Э to ;?456;
signal sig_val
r-u_lev
vira;
signal 3ig_lov
nuJUyij
1
1
signal uigÿhigh
iiu.L_l#V;
signal sig_indeÿ_Val : IIY_ index;
signal sipihdeÿ_Val_Chsr : character;
signaL i n_ i ndex vu 11: ; ; rny_ j ndoH
oijnal с igÿvalue i mu_lev;
begin
_
- mujev image (don:] ;
out ilia цетана вЩ1В*атсл равнкм строке "dont*.
flutLlm
. :-цлче!лм
_ он t
--
:m5
■;
а
пшЩ1
1
indge 15);
зН;1ч“Ни--ь out _Im5 |кт&нан)швается равны» '5',
nig уд! - ?.м_ ] e v ' 1он ;
значение sigjyal устанавливается равным vira.
=ig_lov <- ]GJ_IKV' left;
значение sifl„lev у стана вливается равный ctt|
sifj_hi(]h -.= яиДеи' right;
значение JJ<J„1OV ускрна впиваете я ]:■■.; лиим pot г '15.
1 < = жу_ index * jfa Lue ( 7 56 ) ;
sigJ.i||«$_Val ус та а вшиваете я равнин 7Г,1irty_ i ndex v.i Itu.- ■: 14 * i ;
в ig_ i nrlen _,ул1 u е
siffl_indestÿa
рачение
■
-
1
1
эмадате «1ф.Ш}ех_Д№1ие устанавливается равнин 1 4 ■
rtiu_l«av 'value i 'ptrtt -IS’) ;
slg_vah:e
- -пэчениа si rvalue
устанавливай
разЙЙ petr433
;
Big_inG0x_Vai_Ctiar <= character 'velue
значение ■jJiLindfixj/Qi устанавливается равьпм 65.
end 3kal_attr_er;
Временная диаграмма работы проект показана на Рис. 6.1.
WW?
D О OlltJjTI
dont
(do hi
£ ■* «jHm5
i
SE
■
vira
g_v*l
niinit
« sgjov
«I
" tisLhigh
pelr45
—
u ±io__iri rltixÿV
ммд|||Ц||лш1||Щ1ч— limn
[vlr-i
l4Ht«4
■
il
■fpHr45
7П6
iv
t»g_indw_Va(ue
14
v
Ttg_ value
pstr45
w
rijLlnddtiiVeLC..,v A
№
— -- »if«
:ii
—
шменная
ii
Рис, 6J.
—
iitiirr—
—
ч
r-i;-:—
лиягрямма работы проекта, приведенного в примере 6J
6®
■ Глава 6, Типы данных
ГЛАВА
Атрибуты массивов
6.4.3.
7
ОПЕРАЦИИ И СИМВОЛЫ ОПЕРАЦИЙ
Массииы в тыке VHDL также могу* иметь собственные атрибуты.
часть которых представлена и Табл. 6.5, В частности, использование
одного in видов атрибутом массивов (array atiriliutes) позполяет полу¬
чить параметры сот истствуюшс го диапазона, определяемого индекса¬
ми соответствующего типа массива.
Тц&ица 6.5, Часто используемые атрибуты массивов
Атрибут
Left <Ш
]laiH>l4LTIIIL‘
Пизщшиаст значение пи него индски
ничем нс правого нндсксв
right
lUviaiummcT
r.ighilt)
Htu)i|\LLimL-i iip.iLivin
low (К)
Length cm
•,
INI
Возврату
1
in-pMHioni ipaiimiy HHUCXW
левую нижнюю драниц;, шискеи
Возврлвясг количеств з.демгкгон в индексе
Подчищает диапазон массива
envoi а;о,гапщ_-<!41 III) НфаНЦСГ nfipjlllCimiiHI Д Hlin.L 'И1Л ilillV И 141
escendine (К)
.г, сели индекс им«т
в противном случае
Возвращает значение v: mnirni
■
возрастают» к диапазон . и
Числом, стоящее и круглых скобках после идентификатора атрибу¬
та. обозначает размерность массива, но которой опрашивается атри¬
бут. Для одномерного массива, число N всегда равно 1, поэтому его
можно Опустить, как ниже показано в примерах, Атрибуты, приведен¬
ные в Табл. 6.5, можно применять и к двухмерным массивам:
UTARR8x4 ie array (e downto ir J to ‘ of ЬосДёЭй;
typo J1YAKR1 1b array - 2 to ■! : of iftcti.wrj
-- возвращает значение -2,
MYARR1 'left
'
type
MYARR1’ right
MYAHRL'high
MYARRL гБ%-ЁГ&е_гапде
MYARR8x4'lef t ll]
KYARRBX'l ' left (2)
HYARR8x4 ' right ( 2 )
XYARR8x4 hlgh(l)
1
Таблица
Классы операций языкл VHtHu сичколыотряинП
Класс
i. Логические операции
a ad
or
nand
<
Операции сдвига
•11
f■
arl
■I. Операции сложения
+
5. Унарные оперении
+
'
значение
<>. Операции умножения
-- возвращает значение
возвращает диапазон
-- возвращает значение
4.
7. вспомогательные операции
-- возпраслет
--
-----
4 downto -2.
8.
возвращает значение
0.
возвращает значение
3.
возвращает значение
возвращает значение
8.
1.
M■I
IH.IBDHIIC
Tnlee.
Символы операции
2. Операции отношении
4,
MYARR8st4
MYARK?x4 ' пя tending (1 i -- воз пращ
'low(l)
В языке VHDI-. как и п других языках программирования, подде¬
рживаются различные операции, подразделяемые на семь основных
классов (Табл. 7.1). Операции записываются с помощью символов опе¬
раций (operator), которые применяются к двум (бинарные операции)
или к одному (унарные операции) операнду (operand), и роли которых
могут использоваться сигналы, переменные п константы. Как уже от¬
мечалось выше, в VHDL в отличие от других языков программирова¬
ния бинарные операнды обязательно должны иметь одинаковый тип.
•la
ЙОГ
ага
xor
хпог
>
>■
rol
гаг
&
*
/
mod
й #
вЬв
not
ГОШ
Наиболее высоким приоритетом обладают операции 7-го класса, за
ними идут операции б*го класса и т.д.. «плоть до операций 1-го класса,
приоритет которых самый низкий. Если круглые скобки нс использу¬
ются, то сначала «ыполняются операции с более нысоким приорите¬
том. Операции одного класса имеют одинакоиый приоритет и выпол¬
няются слепа
направо по ходу JPIIHCII ныражепня. Для примера рдс-
7.Х Оперении сдвига ■ 71
70 ■ Г.шва 7. Операции ислчком операции
порядок выполнения операций нал векторами типа
std_ulogic_vectors (Xs' 010', Y = ' 10' и z= ‘ 10101 '), снизан¬
ных выражением not X & Y xor z rol 1. Эш выражение эквива¬
((101) &
лентно выражению {: not X) & Y) xor (Z rol 1)
10) xor (01011) =(10110) xor (01011)
11 101. Операция
побитно,
xor выполняется
смотрим
=
Логические операции осуществляются с операндами типов bit,
boo ]' >Л п , к г d_ 1 OfJ i С н t d_ij 1 ОС I i , il та КЖС СП ПТВСТСТ I Wioi них искторо II. Они используются, чтобы определять логические выражения
(выражения булевой алгебры) и выполнять побитные операции на
массивах битов. Результат имеет тот же тип. что и операнды. Эти опе¬
рации могут применяться к сигналам, переменным и константам.
Обратите внимание на то. что операции nand и пог не ассоциатив¬
ны, в связи с чем и последовательностях нескольких операции nand
или nor нужно использовать круглые скобки, чтобы предотвратить
синтаксическую ошибку. Например, попытка компиляции выражения
"
X nand V nand 2
возникновению синтаксической ошибки.
исправить ее. следует переписать выражение н виде
приведет к
H приведенных ниже примерах (строки 5. 6, и 7) первый левый
символ <= обозначает операцию установки значения сигнала, В выра¬
жениях примеров (строки 5. 6, и 7) иллюстрируются символы опера¬
ций отношений,
7. 1 . Логические операции
■
Внимании! Обратите внимание на то, что символ операции меньше
или равно (< -) выглядит так же, как символ операции установки значе¬
ния сигнала.
Для
тот чтобы
nand У) nand Z
7.2. Операции отношений
Операции отношений проверяют отношения значений двух операн¬
дов одинакового типа и возвращают результат TRUi или FALSE. Опе¬
рации проверки равенства или неравенства можно выполнять над дву¬
мя операндами любых i ипов, лишь бы этот тип был одинаков у обоих
операндов. Остальные операции можно выполнять только с операнда¬
ми скалярного или дискретного типа.
Boolean;
variable .:;:S
integer ;=2-5;
constant A
integer L=32;
constant 2_C0L':.:
integer
constant C
STS *= (A < B_C0UXT) ;
-- S7S устанавливается
“TS'Jt1
> о); -- значение STS
"TRUE'.
'1') c stdJLogicl
'1'));
значений
s?s <= UA »- э.ссжт) or (а
STS <- (std_loglc Cl'
'0',
typo new_std_icgic is f’0'
0’ , *1'
значение STS
,
1
'1'
*Z'
--1
'
1
'FALSE'1.
г
variable Ali new_std_logic
'1“ ;
variable A2-. ne‘rtJ_stc)„logie ;= ' Z‘ ;
(Al < All;
STS
Значение STS
"TRUE*, поскольку СИМВОЛ *1'
---- меньше, чех скхвел
'2'.
Обратите внимание на то, что операнды дискретного типа (например,
перечислимого типа) сравниваются поэлементно, начиная слева направо.
7.3. Операции сдвига
Операции сдвига выполняют побитный или циклический сдвиг на
одномерных массивах элементов типа bic, std_loyic или Boolean.
Эти операции являются бинарными. Левым операндом является одно¬
мерный битовый массив, массив с элементами типа std_iogic или
массив, содержащий элементы типа Boolean. Правый операнд дол¬
жен быть целым числом (числом типа integer). Значение правого
операнда определяет количество сдвиговых операций (Табл, 7.2). Тип
результата определяется типом левого операнда.
7.5. Унарные операции ■ 73
72 ■ Г.шип 7 Операции дглидыы те/мчий
используется дли объединения двух
ESC к гор. Чтобы
нслольтоЕ)атЕ. эт[[ операции, необходима и дополнение к пакету
подключить
проекту
iee? , su';_Iogic_il6ii
гтакетЕ-i
к
riiTia. Операция конкатенации
Ш.шии 7.2. Описание операций един га
О I ги- 1 ) a u 11 Я
.........
Ошгащвб
.....
.....
ЛсвыП логический с.шн; Правый 6т мполиится нулями
nil
а .ю г1 1 'к
лг!
киЙ СЛ.1ИГ Лсн||| Я GUT
стел 1 1 у г, ям к
П рлвмй Сит счхчрантщт предншуикс эиичс мне
Правы!! арифметический сдвиг. Левый Сит сохраняет предыдущее значение
н'к I п J и ;ф ml i ммнческнй сдимг
ill
.....
sra
Пений инк; ескип сдвиг
1 1 рйвый цикл нмсс к н (1 ели иг
Г01
t ог
лэюсм
Н".
bitÿvicior
dc-wnto
vairiabl? NUM
bit,,, vector 1 7 dowr.tO 0
variable HUM2
МШ2 : 1ДШ Id 2 1
jj= "HCM-LIO*;
■
variabLe й ; Lit_vectcT ;= 'lUlCtl";
А = ЧЙ100';
.4-;- A flll 2;
A erl 2} - А ■■ " 0 0 1 0 1 10 " г
A ala
А
A era 2;
А
А гог 2;
<А<-
А;$»
2i
к>Щ|
----
--
signal MVBUS
ve-c t or ; j L downto 0);
з r_d_1оg
signal STATUS
sL-dÿlogicJBe-ctOT ;; dcwr.to C);
signa 1 F.vr , Тй 1 , C$2 t g t i 3 о j i c ;
signal MDATA
at I .legi :_v< l t fO to : j
HYBUE <= STTO & Rtf & CSl i SC 2 t MDATA ;
iiJS
■
■
выполняемся конкатенация
примеры
A-;.
ieee . sld_logic_unsigned. all или std_logic_arith,
Ниже приведен пример конкатенации i руины объя пленник сигна¬
лов в одну дгину, роль которой на программном уровне играет сигнал
В первой строке снятующс го примери
первых 8 единичных битов с S младшими
;
Сдвиговые операции обратимы, Это шив част, что, когда правый
опера еш при выполнений сдвига плело ноля пен yip и нательным чис¬
лом, результат омердмпи эквивалентен сдвигу вправо, Например, им есю операций tJTJM :- к ‘м.1 sri 2 ; в приведенном выше фрагменте
; и подучи N. дикой
ШК: »11
можно было бы записать МШ2
же результат.
сленговый операций для пере¬
Ниже приведены другие
"
1001 ".
менной ttiiiEi bit vnctoi с начальным 3|Щчеиием А
А<-
}
mm
В Приведенном ниже примере в результате выполнения операции
ari над переменибй Жгш последней будет присвоено значение:
"
\
лвкторШ в результате чего получается более длинный
А
•10СШ-1
А =■ '111010' г
А = -100110' f
А - ■ Д1 1017" :
7.4, Операции сложения
Операции спасении используются для выполнения арнгаШстичсских
действий (сложение н вычитжие) над операндами любого числового
битами массиву мойТА с
MYAKKAY, Во второй
строке выпаднЖтся конкатенация строк "v;m:,n и "■=
с йрисаоснисм результата наган ну НЕМжШ:
присвоением мрулшпа конклтешшии массиву
■
MYARf AY
HEMp
:
|
downto
TÿDL"
U
)
'.111
Ш ’ Ь КС AT,\
(2
to
■
i
.!
'910
7.5. Унарные операции
Унарными операциями называются операции, выполняемые над
одним операндом. К таким операциям отноожея операции изменения
л|дки (л - > или •" о операнда любых числовых типов.
7,6. Операции умножения
Операции умножении нсполы уплел для сознания математических
выражений, содержащих операнды числовых типов {как целых, так и с
плавающей точкой). Особенности использования операций умноже¬
ния сводятся к учету шиз правого операнда (ТиГ>л, 7.3),
7.&. Citnuft-Jbf тлоштШя я 75
74 ■ Г.-ша 1. Операции и симваы емратш
Оиисйиж!
Оигрпипт
Т'нп .тптш он CjM или
Тип результата
Тип niUFHirttoncpjilJitt
Любой tJf.lLtil тин Ток HiL‘Tf1IL4l1l 11 у
Ш1Н тип с
плпюкнжи точке П левого oftcpaiciD
Умножение Любой фюнчмкнй Тин integer ИЛИ
Til 1 1
Tim Integer tut 1 1
real
Любой целый тип
ИЛИ тип с
плавающей точкой
г
Тит ли чин, 'ПО II >'
левого отиянда
Татжйчлл.что ну
ли и ото операнда
reel
Тот КС Tilt). ЧТО 11 у
Любой фпзичССкИЯ
правого си-юрлил |
т ни
Любой аса i-jii тип ьын
Тог же тип, чтон у
типе плавающей
левого оперди-'ю
ТП'ГКОИ
Любой фиШ'ЩСКМГЕ Тип integer и м:
Деление
Tm*.L'lnH,4»ll>'
левого Glicpniutfl
real,
Любой фшичккий ЩИС nil], 4TU L! 1
Модуль
rood
Lp.teger
левого операнда
TIN:
(деление
ипело)
Остаток ог
.ТниТоИ мел и П тип
Тог *е тип. чтупу
ЛЮКПП (Ч1СЯЯ1Ы1)
Любой щлнб тип
Toi АОП 1111.' iron у
левого операнда
]
гет
деления
Операции нахождения остатка отделения (гелй и
дуля (mod) определяются следуютим образом:
Л гет В = А
Л mod О
А
- (А/В) '3
в
*
к
-- А/в
U
нахождения мо¬
целое чкелонекое число,
Результат оме ранни гет имеет знак его первого операнда, и го промя как результат о п ераiши mod имеет знак второго операнда.
Примеры результатов этих операций показаны ниже, это:
-
J.1 rem 't
—
гет 1
"
А - ? mod 4
А = 7 mod (-1)
--
А
А
(-11)
—
—
(not) создаст шпек и to от входной величины битового типа.
Результат операции имеет тот же тип, что к тип л:ного оперли;).
Следует заметите что не нее САПР подле ржипают операции) .юзпеления и степень в полном объеме. Как правило, в САПР реализуется
лишь ноэможиость возводить лев Mii операнд но лторую степень.
цаиис
Шлица 7.J. OiiiiejKHt eiiepiuuit) умножения
А ■ Э
А * -Э
А = 1
А - -1г поскольку
7
4+2
■=
-1,
7.8. Символы комментария
символы
В языке VHDL
коммсцтрщг (comjhent opeiiiiorsj и гтзиют
важную роль, поскольку сяк пометило поддерживается система докумепт пролаю! я (входного кода проектов пояснениями и примечания¬
ми разработчик;!. называемыми: комментариями. Наличие коммент Рисее к проектам н тпростам значите лги о облегчает процедуру со¬
здания комплекенмк проектов, так как любой участник рабочей
группы проекта может из комментария выяснить характеристики про¬
екта, интерфейсы его компонентой, требования к энергопотреблению
и т.д. Наличие комментариев пйаоляет также распределить работу
над проектом В рабочеп группе, что обычно значительно сокращает
сроки создания окончательною вариант;) проекта,
Как иы уже знаете, и VMDJ. символы комментария представляются
двойным дефисом ( ). Это означает, чго коммеч парии и VHDL одно¬
строчные. т, е, область действия символов комментария л VHDL-про¬
екте распространяется только на одну строку правее символа комментарин, Следопагедьно, сели разработчику необходимо создать много¬
строчный комментарий) ему придется разместить символы
комментария и начале каждой пояснительной записки.
С другой стороны, свойство распространения области действия
символов комментария от той позиции, те они намолятся, и но конца
строки позволяет разработчику сопровождать комментариями опера¬
торов, располагая комментарии правее после операторов) кик было л е-
олнократмо показано в приведенных выше примерах.
Вес, что находится и строке прл чес символа комментария, пглорнкомпилятором н не принимает никакого участия и процессах
вы числе леей и моделирования работы проекта.
Следует отмстить, что комментарии играют также важную роль в
процессах отладки проект. Известно, что проект с зад аннон функцио¬
нальностью можно сформировать с помощью нескольких различных
рустся
7.7. Вспомогательные операции
Операции нахождения абсолютного значения <&ьи) и возведения в
степень (**) могут применяться к числовым типам. Логическое огри-
76 ■
j;\<:nu
7. 9. Мапт\и)шч$скщ’ выражения шП
7. Qwpawit и с\(Мволы т(’р<щ<Ф
наборов операторов. При этом каждый набор влияет на ге иди иные
характеристики проекта, чго требует Вт разработчика выбора
мального н' ора путем тестирощння имеющихся вариантов.
Сформировал несколько i пкмч вариантов Проекта, разработчик
может поочередно протестировать каждый йэ НЙХ, комментируя <т. е,
размешай символы комментария перед операторами) одни варианты н
убрав эти символы перед операторами тестируемого варианта.
Ниже приноси пример V! ID I..- проекта, содержащего комментарни,
опти¬
-- Проект моделирует
ярйпкгафичесхого процессоры
-- построенного на базе (терапий шиического сленга влет
-- н логического сдвига г право.
n|::;.f!if.T разработан lQ,llKl!992 года,
—
Автор проекта: Ковталюк Срлй
-
-hHHH - 4<‘H ‘
■■
-■■
ЕпавОйИ
All rights reserved,
WWW. ysKÿbOOXS. COli
library isee;
Подключение к проекту библиотек и пакетов.
uae iee:-. 5t ::_lf-’5ic_l '■ 54 - 3l! ;
entity . is
Mi : ' ifi - Объявление интерфейса птюокт ..
port(
elk
in atd_logic;
• in a i "„vector ( 1 dour,to
in
kluch
ШТЕ0ЕЕ range 0 to 7;
(7 downto !;
L.it ! .i : out LdTji/ec;
deuhif r_data_bit : out BIT„Veetor P dOMflto Cllj
dataJiiÿiT-
■
end ..dt_3hiEt;
-- Объявление архитектуры проекта.
architecture i:i Г' shifta of I
L T =- la
BIT_Veccorf? dnwnto
signal da_sbi
01
j
■
закомментированный
-- оператор,
(clkl
Объявления оператора process .
variable ■_■.,! L
"i , data_pi
--
i
■
_ i iffb
]!TT_Vc-ctt>r(7
domto C) ;
begin
Выполняемый
■■■
Оппрпторн
опера 7
dftta_bit_inr
data_,iiT_prcm ;
Шифрование данных,
;ÿ.!
process.
iiO.J..: i:_;.- 1 ->m oil
daca£in_pro(m
hluchi
;
-- Пересылка зашифрованных данайце на вккодрей гтерт.
.
-- Деяифроваиие
ditfl рт СКЛ_Д dv_)C3,(Ф : ’■■ datfl_im>rQPl яг1 к1ЧСЩ
deshifrmdata„btt <- da ta_jjroni_Sdy_r igrb;
end
process;
end bitÿshi fta;
7.9, Математические выражения
Математические вырйжегшя (expression)
это важнейшие конс¬
труктивные элементы языка VHDL, которые us ют а форме, наиболее
приближенной к обычной ШтематичеекоН записи, выполнять вычис¬
ления значений программны?; ал емеитов Донных проекта. Иными сло¬
нами, выражение это запись, которая определяет способ, с помощью
которого вычисляются лтчспии, состав операндон, состава псрнШИй и
порядок их расположении и записи. Порядок, и котором выполняются
операции над операнда ми. зависит От Приоритета Операций. Если опе¬
ра НИИ, содержащееся п выражении, имеют одинаковый приоритет, то
по умолчанию вычисления производя i ем слевп нан ради, Если грсбустся изменить порядок вычислений, следуоп применить крутые скобки.
Математические выражения входят в состав оператор®;' присваи¬
вания, инициализации значений и установки значений сигналам, Они
также являют ся конструктивными элементами друг их операторов язы¬
ка VHDL (операторе!! if, tor и т. д,),
Математические выражения и программировании принято делить
на такие классы:
* арифметические;
■■
* логические;
* логико- алгебраические.
begin
procesH
II. :
—
cjpyriglit & try Yuriy
■
:i_p-
shifr„clatiij»c
Арифметическим принято называть выражение, содержащее такие
операнды, как идентификаторы констант, переменных и сигналов, а
также имена математических фу п кии и и функции преобразования ти¬
пов. которые объединены знаками арифметических операций Щ
*. /, **, то<э, rem. операторы сдвига). Тип вычисленного значения
выражения эшдасит от основной о пера ила выражения (как п рапид о,
левый операнд).
78 ■ Глава 7. Оперении и символы операций
Логическим называют выражение, содержащее такие опер.тнды. как
идентификаторы констант, переменных н сигналов, имеющих тип
bitv bit_vector, std„logic, std„iogic_vector, Boolean, ко¬
торые объединяются символами логических операций с использовани¬
ем символа вспомогательной операции not. Такие выражения часто
называют булевыми выражениями (Boolean expression). Тйп вычислен¬
ного значения выражения зависит ОТ типа ОСНОВНОГО Операнда выра¬
жения.
выражения содержат некоторый набор
Логика
арифметических выражений, объединенных символами операций от¬
ношении, а также символами арифметических и (или) логических опе¬
раций, Тип вычисленного значения логико-алгебраических выраже¬
ний всегда является типом boolean (значения TRUE или FALSE).
Примеры выражений языка VHDL:
—
арифметичес¬
b- 2*c- conv_integer (alpha)
*a
а,
Ь,
имеют тип
с
котором
переменные
выражение,
в
кое
signed.
alpha
переменная
integer, а
тип
логико-алгебраичес¬
* а - 35 >в (2 * с '+ 4*7) /23**2
+
—
—
кое выражение.
переменные типа
* из and в - логическое выражение; шив
bit, bit_vector std_logic или std_logic_vector.
—
ГЛАВА
8
ПОВЕДЕНЧЕСКАЯ ФОРМА ПРОЕКТА:
ЯВНО ЗАДАННЫЙ
ОПЕРАТОР PROCESS
Как говорилось в гл. 2, язык VH DL поддерживает две (]юрмы пред¬
ставления ЦУ; поведенческую и структурную. Далее мы рассмотрим
конструкции последовательных операторов языка VHDL, называемых
также операторами регистровой логики, на использовании которых
основывается поведенческая форма представления проектов ЦУ.
Последовательные операторы подчинены оператору process.
При этом сам process имеет двоякую природу. С одной стороны, он
относится к классу операторов параллельной обработки, что лает воз¬
можность использовать его для проектирования ЦУ комбинаторного
типа. С другой стороны, он является родительским оператором для
всех других выполняемых операторов, которые разрешено располагать
в его теле. Часто говорят, что все выполняемые операторы, располагае¬
мые в теле оператора process, выполняются по последовательному
принципу. Эта особенность даст возможность применять это свойство
оператора для проектирования ЦУ регистрового типа.
Оператор process может использоваться как в явном виде, так и а
неявном. Об особенностях реализации VHDL-ÿÿÿÿÿÿÿÿ в поведенчес¬
кой форме па основе последнего мы поговорим в следующей главе, а в
этой главе разберем особенности использования оператора process,
задаваемого в явном виде.
8.1. Явно заданный оператор PROCESS
—
Явно заданный оператор process
это основная конструкция
для поведенческой формы описания проектов, которая позволяет ис¬
пользовать:} его теле последовательные операторы языка для описания
S. I. Явно мдрнный оператор PROCESS в 8 1
80 ■ Глава А', Поведенческая форма проекта: явно заданный оператор Provas
поведения проектируемого ЦУ регистрового типа на некотором «ре¬
менном интервале,
Н языке VHDL различают дна подкласса явно заданного оператора
process:
• кино
заданны!)
ности;
оператор process {) со списком чувствитель¬
• явно заданны]'! оператор process без списка чувствительности.
Синтаксис явно заданного оператора process имеет следующий
пил:
(wecJCiL.-htpOliec'ca: ] process ’ icnitccKjчувств иге яьнссти) ] (is'.
[ опере.тори_объявлений_проивсса ) -- Раздел объязлений.
begin
--
■
■
Раздел
выполняемых операторе»,
В этой разделе размешаются операторы следующих типов:
-- установки значений
-
■
сигналов:
присвоении значения переменном;
-- вызовы процедур;
- - операторы ела*;
-- операторы exit;
-
-■
операторы
if;
операторы loop;
операторы next;
операторы null;
операторы wait;
end process [ иетка прсцесса ] ;
-■
Примечание. И конструкции приведенного выше синтаксиса опера¬
тора process в квадратных скобках указаны факультативные конс¬
труктивные элементы .
Давайте рассмотрим пример использования оператора process а
проекте D-ÿÿÿÿÿÿÿÿ с асинхронной очисткой, переключающегося по
переднему фронту синхроимпульса ськ:
library iee*j
uae ic-ss.Bt(Llojie_1164.aH3
entity DFF_CLEAR is
port (CLK, CLEAR, D
in std„logic;
0 : out stvLl'.vjic) r
end :>FF„:LEn?.;
architecture BEHAV_OEF of t)FF_CLEAF. ia
begin
Li'F_proce S It : (CLK , CLEA U )
begin
if (CLEAR
o
<ÿ
elalf
=
J
o
then
1
j
CLK* event and "К
Q <= Э;
=
l1) then
end if:
end process:
end BEHAV_DFF ;
Сам явно заданный оператор process располагается в разделе вы¬
полняемых операторов параллельной обработки, поскольку относит¬
ся, как было сказано выше, к операторам соответствующего класса.
Однако операторы, расположенные внутри оператора process, вы¬
полняются последовательно. Подобно другим операторам параллель¬
ной обработки, оператор process может считывать значения из вход¬
ных портов и устанавливать значения сигналов на выходных портах
интерфейса, я также взаимодействовать с остальн ими объектами архи¬
тектуры проекта. Иными словами, внутри оператора process можно
устанавливать сигналы, определенные как внешние по отношению к
этому оператору (и частности, на портах интерфейса, каким является,
например, выход v триггера рассматриваемого примера). Выражение
CLK' event and CLK = '1 проверяет наличие переднего фронта
сигнала CLK.
Список чувствительности (sensitivity list), который может использо¬
ваться и объявлении явного оператора process,
это набор сигна¬
лов. изменение значения которых вызывает немедленный запуск на
выполнение оператора process, Если список чувствительности в опе¬
раторе process нс определен, внутри такого оператора process дол¬
жен содержаться оператор wait, чтобы предоставить разработчику
возможность управлять запуском и остановкой соответствующего опе¬
ратора process. Оператор process без списка чувствительности
всегда запускается на выполнение автоматически (без анализа актив¬
ности каких-либо сигналов) в момент начала процесса моделирования
—
работы проекта,
Нниминие! Одновременное использование в конструкции оператора
process и списка чувствительности, а оператора wai е недопустимо.
Я2 ■ r.wiaS, Пббеденческщ оодма проекта: мио задаЩы&р/герапюр Ртсеи
И. !. Яйнагедаиныуунеряпюр PROCESS ■ 83
Переменные и коиепты, которые используются цтеле оператора
а! разделе объявлений оператора,
Ключевое t л ™m begin сообщает
о начале выполняемой части оператора process. Операторы, которые
л
могут располагаться в л ом [игздеде, пшенлн лютен
нроскр,
алгоритмом
соответствии с
Необходимо отметить, что присвоение значения переменной в теле
оператора ргосесв выполняется немедленно и обозначено символа¬
ми ■■, Операция присвоения значения переменной отличается от
операции установки значении сигнала! обозначенной й*=», поскольку
значение сп глада изменяется после заданного времени задержки. 11 отрг осени, должны быть определена
т, е, перед ключевым словом begin.
ШГГЯ
А
последовательно,
пы1н||пример
проекта D-ÿÿÿÿÿÿÿÿ поясняет, как со¬
Приведенный
здать последовательную форму VHDL-проекта нп основе оператора
process. Тем не менее, хотя оператор process ГЛАВНЫМ образом ИСпол ьзуется для описания последовательных схем, с его помощью мож¬
но также описывать комбиШЕЦПОННые схемы
ЩУ. В частности, в приве¬
со¬
оператор
денном ниже примере проекта пол его то однобитного сумматора,
стоящего из дпух полусумматоров, показано, как один
process может генерировать сигналы, указанные в списках чувств®
гс.пьности других операторов process и тем самым запускающие эти
операторы нее выполнений: Булевы функций описывающие работу по¬
лусумматора и полного однобитною сумматор;), имеют следующий
где ©
—
(A © B) Cin + All
- SjigCln + CJia,
операция i ICK.T ю ча ю ее te го ИЛИ. представляемая
I
1
М1
|
НА1
Cjw
в VHDL- про¬
Т>
лЕЗ
i.T?
+
5им
Соит
Cm
щг. S.I. Схема 1|и,!1тлч>идиоЬитиогоеумм.1Гп]Ч1
Проект полного однобитного сумматора
library ieee;
VFfl
VC"-' О.
I
i
I Л i.- 1 . ,L 1 1 Г
Utity FEJLLÿADDER ia
port (А, fi, cir.
in :;td„lc<jic;
Sum, Cout
oat L-tc_log: c) :
ond .-HLEÿASPSft;
Jirehitocturd ВЕНДОРА of TULi ЛРМД lo
signal ice:, inÿt inti !
logic:
begin
— Процесс FI, Определямжй первый полусумматор,
Г1) proceae [A. B)
bog in
=
inti
■;
intS
< = A and
end
А ЯОГ 3 ;
B;
prcccusj
Процесс № апредвппщЕ1й вторая тюлусунна-тор
~'2i ртосавв I inti, iat2; cin;
begin
<" vat. кот Cin;
SUE
inti
Lnt and till:
ектах ключевым СЛОВОМ ХОТ.
Ни Рис. 8.1 но казана структурная схема полного однобитного Сумматора, состоящая из пэух полусумматоров,
t
|
-
• Описание полного однобитного одмивйзра:
Sum - (AS В} Ф Cm -- SJia © Cm;
Coni
■
HA1
вид,
* Описание полусумматора;
SJia : {АФ II); C_ha :: A anti it.
5 гп
В
-
лнчне от сигналов и1менепное значение Переменной доступно немед¬
ленно всем ПОСЛСДО ГСЛ ЬНЬГМ операторам, раешиоженмым и пределам
рогоже ел м ого оператора ргосе в s (e/i. примеры 5.1 ее 5.2).
"р?
CflElt <= int2
end ргогеэв;
QT
и
авкТНяь OR,
L sit? ;
end BEHAVJAj
Примечание. Cmpteo еовоШ, и приведенном fume примере программы
Ыюнт/сь u одним оператором process.
Можно
S.2. Оператор условной передачи управления IJ ■ 85
84 ■ Глава Л'. Поведенческая форма проекта: явно заданный оператор Process
8.2. Оператор условной передачи управления If
Оператор if относится к семейству последовательных операторов
располагаемых к разделе выполняе¬
мых операторов явно лианного оператора process ( )
Оператор if ответствен за выполнение гою или иного блока пос¬
ледовательных операторов, располагаемых в его теле. Выбор для вы¬
полнения конкретного блока зависит от истинное гн одного или не¬
скольких условии (condition). Синтаксис оператора if имеет следую¬
(операторов регистровой логики),
.
щий вид:
if условие! then
6лок_опсрл торов! s
[eleif условие! then
бяок_опера TOpO B2 ; ]
>lee
Сл5я_сггердтОров; ]
end if;
Как видно ит синтаксиса, оператор if является составным опера¬
тором. Он относится к подклассу операторов, допускающих вложен¬
ность, г, е, ом может содержа гыюиыс операторы if млн несколько до¬
черних конструкций elsif. При этом дочерняя конструкция else в
структуре оператора if может быть только одна. Тело оператора ''за¬
крывается» словами end if. Когда и структуре оператора if исполь¬
зуется много конструкций elaif. то тело каждой такой конструкции
«закрывается* (заканчивается) соответствующими конструкциями
end if. Количество end if должно соответствовать количеству вло¬
женных eleif плюс I.
Каждое условие является булевым выражением, г. е. выражением,
значение которого имеет тип boolean. ! 1ри выполнении оператор if
проверяет каждое вложенное условие (вложенные операторы if,
elaif ) в том порядке, как они представлены в его теле, пока не будет
найдено первое условие со значением тяи; , Как только такое условие
найдено, выполнение передается тому блоку последовательных опера¬
торов, который соответствует данному условию.
Оператор if должен располагаться в подразделе выполняемых
операторов оператора ргосеев.
Пример конструкции оператора if приводился выше и проекте Dгршт ера с асинхронной установкой. Оператор if может использовать¬
ся также для описания комбинационных устройств. Поясним это на
следующем примере проекта однобитного четырехканального мульти¬
плексора <1x1 со входами данных А, в, с и D, входами выбора канава ко
и н выходом ",.
Примечание. Как будет показано да tee, dvi проектирования подобных
устроена удобнее применять нс оператор if, а другие
конструкции, такие кок условная установка значения сигнала, опера¬
торы when ... else и when ... select.
комбинационных
entity MVX_4_;
is
port (SI, SO, А, В, C, D: in
Z: out Std_l0tic);
and MUX_4_la;
architecture : л
W.IKI л of MUK_d_: -i io
begin
PI г process (Ы, 50 А, Б, C. D)
begin
if i nor L and not 30)- 1 ) then
Z <ÿ A;
elaif ((not SI and SO) = '14 chan
1
=
Z< B;
elaif ( fSL and not $0) - '14 then
Z <*C;
else
Z<=D;
end if;
end process Г 4
ond I t-havjHUXilj;
Этот же мультиплексор можно также реализовать е помощью опе¬
ратора if в следующем виде:
if SJ ' О ' and S0"*fl
them
". <= А;
alsif SI-' ' and SO- ‘ ' then
Z <= 3;
•laif s 1 a 1 ' and SO-'O' then
Z <» C;
1
S.3. Оператор atwopu CASK ■ S7
Кб ■ Глава R. Понс нчакал форма принта: явно заданный оператор Process
elsif SI
К <- Dj
and Щ"'1
then
end if :
Примечание* Owpantop if часто нашмуетсн при разраГю/нкс VHDL~
проектов конечных ацтомапнм ( КА).
8.3. Оператор выбора CASE
Оператор табора case всегда выполняет только один блок пдамедовательных операторов из нескольких имеющиеся и теле оператора
блоков на основе значения задающего выражения, Ммбпрзс ген тот
блок, у которою сопровождающее значение тождестве! и ю равно теку¬
щему значению задающего в ы раже щ м. Оператор выбора саве имей
следующий синтаксис:
саао зддаишгсе_аь|рл-жв|0(* ie
when
Энакюия?! *>
б нс x_Qr.$ph Торга1;
when значение:? =?
бябЩтер&торовй ;
-- о Лйбои блоке ьпвратсцхш допу скауте л
-- нйпользованяе, вгщщенны омратмов сазе.
when others =■> фгвдк сле5&торов ]
«nd Сан»;
Значение задающего выражения дат ж но иметь целый или перечис¬
лимый тип либо представлять собой одномерный массив би тов, При
выполнении оператор елее сравнивает текущее вычисленное значе¬
ние выражения с каждым указанным в теле опер:пора значением, Ког¬
да сравниваемые значения тождественно раины, происходит выбор со¬
ответствующего блока последовательных операторов. При написавши
операторов сане должны соблюдаться следующие правила:
* и одной операторе нельзя указывать та блока с одинаковыми
значениями выбора;
• если и операторе ease отсутствует конструкция when others,
асе возможные значения задаю ше го пы раже мня должны быть
1 1 рщ ie I л идс nil! CL ю I ною. т вую щимн з паче пнями выбора .
Ниже прицелен пример продета, основанного на использовании
оператор Li case, и котором в йгчсстве задающего выражения лслодьзустел целочийснный сигнал VALUE. В тгом проекте реализуется следу¬
ющая логика:
. \ когда сигнал VALUE имеет значение,
леж:н нее между 5 ! is 60;
f, когда сигнал VALUE имеет значение,
* выходной порт с
лежащее между 61. и 70 или между и 75:
: f, когда
• выходной порт А
VALUE имеет значение,
лежашее между 86 и 5 00.
При веек остальных значения* сигнала VALUE выходной порт
1
Р
' ] Проиллюстрируем зтн положения наследующем примере]
* нмходщш
порт D
1
7$
сигнал
library
L<
scd_L: jic_l 1-. 4-311;
entity GHDÿiOL ie
PbtUVMTJE: in : III: TIT range Q to LGOj
h, fi. ", 13: out bit];
end GRDjm;
behav_grd of GRE_2C is
begin
use
icc-ÿ ,
.
ргосивв
VALUE]
begin
A <= 'O';
в <= 1 D * :
' 0' :
C
1
P’ j
□
Г <= ' D " ;
ease VALUE is
when Si to P0 ->
D <* ' 1 1 ;
when 61 to 7i I " I to 75 ->
C <- 1 ‘ r
when -6 to S5
li <ÿ 11'
when : h to I ' Q
h <= 1 1 ■!
when others
F cu ' 1 1 j
end саве;
■
■
В-Ы ■ Г.шва S. Поиеденчсская форма проекта: явно шкнтый оператор Process
S.4. Оперто? UUKM LOOP
* 89
8.4. Оператор цикла LOOP
end process.
end I:<hav_ijrc3;
Обратите внимание на операцию, содержащуюся и проекте и обоз¬
наченную символом вертикальной черты ( ), которая ни листе и эквнвален гной операции ИЛИ». Это очень полезная операция, которая поз¬
воляет и одном выражении указать несколько несмежных диапазонов
(например, для представления диапазона [0...4; 6... 10] следует указать в
операторе 0 to А‘6 to 10).
Ниже припелон пример проекта мультиплексора 4x1, который пос¬
троен с использованием оператор,! севе.
-
entity HUX„0 ie
port (.“KL s in td_logic_voct or ( 2 downto ,!;
Л, E, C, D: in 3td_i03ic;
Z; out std_logic ) ;
end MUX_l_l!
architecture bohavjdttvii of
ie
begin
PRJ<UX; process (SEL, A, 5, C. D)
begin
саво SEI. is
whsn ’CO'
Z
when UL1' =:> 2
whan "10"
Z
when "11" => 2
when others ->
end саво;
end process PR_MUX;
end hchavJTOil;
Aj
<- E;
Ci
<= D;
<=
2 -
:
‘X1;
В этом примере конструкции when others определяет блок опе¬
раторов (в данном случае представлен оператором установки значения
сигнала Z) в тех ситуациях, когда задающее выражение SEL имеет зна¬
чение "OX", "0Z" "XZ" , ■их ит.д.
-
Примечание, Данная комбинационная схема может быть описана и
другими способами, например с помощью операторов параллельной обра¬
ботки when
select.
Оператор цикла loop используется длл м нога кратно го выполне¬
ния блока последовательных операторов, располагаемых п его теле,
Оператор loop имеет следующий обобщенный синтаксис:
[ .чема_дилла :] ит раинопийя схема loop
блок_оперзторов ;
[nÿxt [мегм_лереяода] (when шражение_>тереходе| ; ]
[exit (*гегм_аыхй1йд] [when эиражоиио_аыходл) 1 3
end loop i метк „цнкл,1 J ;
Метки являются необязательными элементами конструкции опе¬
ратора цикла, но они очень полезны при записи вложенных циклон.
На практике оператор никла loop применяется не в форме обобщен¬
ного синтаксиса, а и форме базового синтаксиса (без итерационной
схемы) либо в форме синтаксиса с одной из двух итерационных схем
(while ... loop и for
loop). Да лее и этом разделе мы рассмотрим
все три формы подробнее.
Операторы вспомогательной передачи управления — next и exit
являются последовательными операторами, которые используются
лишь для формирования тела оператора loop. Обладают следующими
особенностями:
• Оператор next приостанавливает в текущей итерации выполне¬
ние операторов тела цикла, расположенных под ним, и осущест¬
вляет переход на следующую итерацию цикла.
* Оператор exit приостанавливает выполнение операторов тела
цикла, которые расположены под ним, и перелает управление за
пределы тела цикла, тем самым [годностью прекращал его вы¬
полнение.
8.4.1.
Базовая форма цикла
Как было сказано выше, оператор цикла loop в базовой форме не
содержит в своей структуре итерационной схемы. I! остальном сто син¬
таксис по своему устройству совпадаете приведенным выше обобщен¬
ным синтаксисом.
[
метка., цикла
:]
Опок операторюх i
loop
90 ■ Глава 8. Поведенческая форма проекта: явно заданный оператор Process
S.4. Оператор пиша IJOOP ■ 91
[next [кетка Пврехсм] [when .МфМвннвиИ'рехадд) ; 1
[exit [кейса,выхода) [when выр&жение выхода ) : j
end loop [хетка_цикла] ;
Оператор цикла
it
6.4.2,
базовой форме запускается на исполнен не без
анализа каких-либо условии и выполняется непрерывно, пока в ело те¬
ле не встретится оператор exit или next. Такой оператор loop (так
же. как и оператор цикла п форме с итерационной схемой while
loop) должен иметь в споем теле не менее одного оператора wait,
II качестве примера можно привести проект пятибптного счетчика
с диапазоном выходных значений от 0 до 31 (см. пример 8.1), Когда
значение счетчика достигает 31. на следующей итерации отсчет начи¬
нается снова отО. В теле цикла имеется оператор wait, чтобы опера¬
тор loop изменял выходные значения каждый раз при обнаружении
переднего фронта тактового импульса CLK, г. е. при изменении значе¬
ния сигнала CLK из ‘0' к * 1 г .
...
Пример 8,1 , Использование базовой формы оператора loop для
реализации 5-битного счетчика
entity COUNT!1 is
port (CLK: in 5td_lopic;
COUNT: oat intwjee):
end COUNT31;
architecture be'r.av.COUWT of COUNT'sl is
begin
: .COUNT: procaaa
variable intern_valua : integer
begin
COUNT
<=ÿ
intern.valuor
loop
wait until CLK= ‘1 1 ;
=
incern_valuei tintern._value + 1) nod 32;
COUNT <= intern_value;
end icr>p;
end ргосеев t_COUKT:
end behav.COUNT;
Примечание. В проекте в теле оператора process дополнительно
определена переменная intern_ value, потому что выходные порты не
могут считывать в пите процесса.
Итерационная форма цикла WHILE ... LOOP
Оператор цикла формы while
loop перед выполнением каж¬
итсраиии проверяет истинность выражения, имеющего тип
boolean. Когда выражение имеет значение ■:
оператор никла вы¬
полняет очередную итерацию, в противном случае выполнение тела
цикла либо вообще пропускается, либо приостанавливается. Синтак¬
сис оператора формы while „ loop выглядит следующим образом:
дой
[
иегка.цихла
:) while
«грджедег*.-
loop
блок.операторов;
[next [ мегха_ перехода 1 (when выра-ение.перехода] ; :
[exit | не гкл_ иыхело ] [ when вь,-ряжецие_выхова ) ; !
Е 6лск_опера торов г ]
ОЯ ер. i т j_jrrp« э пенаЯ-Пёр ояс-ин-ч (_1снх га;
в nd L зор [ )■:•? тк в_цияпа ) ;
Выражение, стоящее после ключевого слова while в операторе
никла, может быть логико-плгебранческнм или логическим и содер¬
жать переменную цикла {loop variable). Начальное значение переменной
цикла должно быть известно до начала выполнения цикла формы
while
loop. Важно также помнить, что последним оператором
в теле цикла должен быть оператор, изменяющий значение перемен¬
ной цикла, в противном случае может возникнуть ситуация бесконеч¬
ного цн кл а (так пазы ваемое за цикл иван и е ).
Далее при велел пример, иллюстрирующий правила применении и
оформления оператора цикла loop в итерационной форме while
loop:
entity tfhile.lcop; is
port (inp : in bit.ve .;tor (Э downto 0(;
Enab : in bit;
?,es
т out bit.vactor (3 downto 0));
end WhilOoopli
architecture Wbi Lo_lc:i ;; l_.Tt of WjiLlo.toopl le
■
begin
process (inp)
variable ki : integer; -- Объявление переменной цикла.
begin
0;
K1
while (ki <- 3) loop
8.5- Оператор ожидания WAIT ■ 93
92 ■ Г.шва К. Поведенческая форма проекте: явш) mitm/wh оператор Process
йс: :
■: k J
■
■
КЛЮЧСЯОС СЛО№ when НШ1ЯСТСИ НСОбяЗаТСЛЬНЫМ. ПсртХОЛ К CJ]C—
дуюшей итерации оператора цикла loop реализуется, когда логико¬
ал гебраичсскос выражение перехода, стоящее после ключевого слома
when, имеет значение TRVTH.
и..;- and inpda ; ;
K1 := Ki + Lj
end loop;
end Process;
end VlhilO iCipi_.il':
8.4.3. Итерационная форма цикла FOR ... LOOP
...
loop использует целочисленную
Оператор цикла формы for
итеративную схему, в которой заранее задано количество выполняе¬
loop выглядит
мых итераций. Синтаксис оператора формы for
следующим образом;
...
№-тм_.щшм :! for Гс'.'г •. ценная
in дилпятн loop
6.r.!Cur_L>r:t)p.4TOj; л;
,rn&xi [метха_перехода] 'whan ялрй.!.а.ч;:й_п5рех ;да]; ]
lexit 1ме!,ка_дыхода] Iwhen дырал?ение_вьгхадл] ; ]
>r л 1 ;
ond loop ;.wrxM
I
Переменная цикла объявляется автоматически непосредственно в
теле цикла loop, поэтому ее не нужно объявлять явно вне цикла. Зна¬
чение переменной цикла в теле пикта может лишь считываться, а за
пределами цикла вообще недоступно. В отличие от циклов while .„
loop, в которых работа цикла основана именно иа изменении значе¬
ния переменной никла, в циклах for ... loop попытки изменения
значения переменной никла недопустимы, Диапазон должен быть цсиосходятей
заданны м
диапазоном,
лочнеленным
в
(ничалыт' значение to конечное_значе1ше) или п нисходящей
(начальное значение downto конечное
форме.
8.4.4. Операторы NEXT и EXIT
II отличие от оператора next оператор exit приостанавливает
выполнение оператором тела цикла, которые расположены под ним, и
передает управление та пределы тела цикла. тем самым полностью
прекращая его выполнение. Управление процессом вычислении пере¬
дастся либо на ближайший оператор, стоящий после тела цикла, либо
на оператор, помеченный меткой выхода, при условии, что логико-ал¬
гебраическое выражение перехода, стоящее после ключевого слова
when, имеет значение :'RUE,
Оператор exit имеет следующий снитнкснс:
exit [,хегка_ выхода I -when Fд;
ние_ зих ода];
Ключевое слово when является необязательным. Завершение вы¬
полнения оператора цикла loop прекращается окончательно, когда
условие, стоящее после ключевого слона when, имеет значение TR'JE.
8.5. Оператор ожидания WAIT
Оператор wait ttp постанавливает выполнение тела оператора
process, до тех пор. пока нс про исходит очередное событие, В общем
случае язык VTIDL поддержнпает несколько форм оператора wait, а
именно:
_
wait until условие;
wait for !;у;:s;а-тчи гвгл tiяе;
wait on сигнал;
wait;
Как было сказано выше, оператор next приостанавливает в теку¬
щем итерации выполнение операторов тела цикла, расположенных под
ним, и осуществляет переход на следующую итерацию цикла, Такой
переход реализуется при условии истинности логнко*аллебралчсеко|о
выражения перехода. Синтаксис оператора next имеет вид
Однако на практике не все САПР поддерживают все четыре формы
оператора wait. Примеры оформления оператора wait первой формы
показаны ниже:
next \мв-гка_по; «сода]
wait until сигнал'event tad сигнал = значение;
wait until not сигнал" L-.t.-ibin and зггндл значение;
when внригецме_т>гкг-хед.э ] ;
wait until сиги о л =
некие;
94 ■ Гтма 8. Поведенческая форма проекта: явно заданный оператор Proass
Для остановки выполнения оператора process условие, заданное
а операторе wait until, должно иметь значение TRUE. Примеры
практического использования таких операторов:
8.7. Пример VllDL-ÿÿÿÿÿÿÿ я 95
begin
P_WAIT
begin
■
-ÿ
wait until :iK'evt!!t and CLK1 1';
1
Внимание! Оператор process, содержащий оператор wait, не
может иметь список чувствительности.
■
CNTL)
2 <=А;
case CNTL i о
when 3 I IS =>
S <* А ког B;
wait until :.K ' I ;
wait until TLX- “O' ;
В мерном примере о nqximp process будет приостановлен ( г. с. пе¬
реведен п состояние ожидания), когда фронт сигнала ранен 1, Но вто¬
ром примере оператор process будет приостановлен, когдафронт сиг¬
нала равен 0. Ь третьем примере оператор process будет приостанов¬
лен при обнаружении переднего фронта единичного синхроимпульса.
process
when others »>
null;
end case;
end process PJ.'/AIT;
end arch_wait;
8.7, Пример VHDL-ÿÿÿÿÿÿÿ
Прицеленным ниже проект моделирует работу ЦУ, которое вычислнег значения квадратного корил на вещественных чисел, поступаю¬
щих на входной порт А (диапазон допустимых значений
от fl.O до
325(>3,б), Результаты вычислений устанавливаются на выходном порту
з. Проект1 имеет поведенческую форму на основе явно заданного опе¬
ратора process, в котором используются операторы if и while
—
8.6. Оператор NULL
Пустой оператор null соответствует состоянию, в котором не вы¬
полняется никаких операции, Синтаксис оператора достаточно прост:
...
null;
loop.
Этот оператор очень полезен в операторе выбора case, когда при
некотором выборе не следует выполнять какие-либо вычислительные
entity narija_sqrt is
port [h
In real range 0.0 to 12561.0;
out real range 0,0 to 32563.0);
В
end jttanja„sqrt;
architecture nanja.sqrt.a of rr.ania_sqrt is
constant eps; real ;= 0.00001;
begin
- Метку LABEL! можно
process (A)
LABEL1
действия.
Ниже приведен пример проекта, где используется пустой оператор.
В этом проекте проверяется значение управляющего сигнала CNTL, ко¬
торый может принимать значения от 0 до 3 1 , Когда значение СКТЗ рав¬
но 3 или 15, сигналу должно быть установлено значение хог и, а во
всех остальных случаях не следует выполнять никакие другие опера¬
ции, ‘гто и делает уместным использование оператора null-
entity EX_WA IT is
in integer range и to 11;
port (CHTL
in std_l< r i revert or П downto 0) ;
A, В
Z: out 5td_logic_vectf:c 17 downto 0)1,end EX_KA1T:
architecture irchjurait of
EX_WAIT
is
■
--
Объявление переменных .
real;
■variable х
не задавать.
variable Ы
real;
■Функция SORT вичисляет квадратны!) корень аргумента,
В данной случае функция основана на аппроксимации
-- Ныиона-Рафсона: Е(п-1] = 0,5* [Fin) - х/Р(пИ
function SQR7 )х: real) return real is
constant inlval : real : 1.5;
-- Вычисление первых двух переменных ряда.
--
я Г.-шва 8. Поепкнчсдсая форма проекта: явно заданный оператор ГпКМа
real : sr.lv..:.:
variable
variable newval: real :» tx/ojdval ■»
begin
-- Проверка корректности аргумента.
П, ■) then
if (к
ГЛАВА
oldyai;
лваеге
tal-'ij report
1
л
■.
In
!ÿ
oldval ) / 2 . 0 ;
9
ПОВЕДЕНЧЕСКАЯ ФОРМА ПРОЕКТА:
НЕЯВНО ЗАДАННЫЙ
ОПЕРАТОР PROCESS
1' IXI " severity ERROR;
return :0 .0] ;
end if;
-- Вычисление остальных слагаемых ряда,
while abe (newval - oldval) :ÿ op •: loop
oldval i= newval;
newva 1 i = ( x / oldval * cldval1/2.0;
end loop;
return nowval;
end SQRT;
begin
if A
х
Ь1
;>
;*
0 C then
i
А;
SORT I х I :
13 <= Ы;
end if;
end process;
end rr.rmjfl_eqrt_a;
Временная диаграмма работы проекта представлена
Папе
о- А
■*
В
VdJj*
5.60»
2.3364
Shrm/Aioi
I Fermi*
■
'
—%т>о
———
р 1 г-
.Г «и
:>
на
«о
на Рис. 8.2.
.
е»
I
t»
I
Ч<яШ
хгйёг
Рис. 8.2. Пример временно!! диаграммы для моделирования вычисления
квадратного корня
В предыдущей главе было показано, что поведенческая форма
VHDL-ÿÿÿÿÿÿÿ (как ЦУ регистровой логики, так и ЦУ комбинаторной
логики) может быть создана на основе явно заданных операторов
process, в которых нс пользуются блоки операторов последователь¬
ной логики. В отой главе мы рассмотрим специальный класс операто¬
ров process, которые в языке VHDL называются нетто заданными.
Это означает, что в конструкции ever разновидностей лого оператора
отсутствует ключевое слово process. Заметим, язык VHDL подде¬
рживает три формы синтаксиса неявно заданного оператора process.
Нее эти формы синтаксиса могут использоваться исключительно для
создания проектов НУ комбинаторной логики. Формы синтаксиса не¬
явно заданного оператора process получили следующие названия:
* Простая параллельная установка значений сигналов (simple
concurrent signal assignments).
• Условная установка значений сигналов (conditional signal
assignments).
■ Селективная установка значений сигналов (selected signal
assignments).
Неявно заданные операторы process и любой из этих трех форм
являются операторами параллельной обработки (concurrent statement).
Это означает, что они выполняются параллельно и запускаются на вы¬
полнение происходящими на сигналах событиями {event), т. е. управля¬
ются событиями. Иными слонам и .операторы параллельной обработки
запускаются на выполнение, как только происходит событие, содержа¬
щееся б том или ином виде в конструкции оператора. Все три формы
неявно заданных операторов ргосвав располагаются в архитектуре
проекта в разделе выполняемых операторов параллельной обработки.
98
* Глава 9. /lrm-rktt4L'£Kb'f! форма проекта: неявно заданный оператор PROCESS
В последующих разделах этой питы мы детально рассмотрим син¬
таксические конструкции операторов параллельной обработки, ис¬
пользуемых для создания поведенческих форм проектов НУ комбина¬
торной логики. Как будет показано в гл. 10. подобные конструкции от¬
личаются от конструкций, используемых для создания структурных
фирм проектов НУ, и которых описывается схема в терминах компо¬
нентов и их соединений.
9.1. Простая параллельная установка значений
сигналов
Оператор параллельной обработки (ОПО), используемый для
простой установки значения сигнала (ПУЗС), имеет следующий обоб¬
щенный синтаксис:
Оггкал
BS2 <=■
Sun <= !А хог
Carry <- (A
(not х
г
В) хОг
$i<|46
--
Cir.;
roj
xl*xi кЗ-та + integer ( 34.6) ;
V12
Z_55 <= X1/X2 ' геа1(56П:>
Si g -1 <- (2 * A23) < integer(34.6)-34 ;
-----
Логическое выражение.
Логическое выражение,
лоппеское выражение.
Алгебраическое выражение.
Алгебраическое нйражение.
-- Логико-алгебраическое
выражение ,
--
69 г
зацией данных (с.я.
Логико-алгебраическое
выражение.
гл. 6),
В примере 9.1 приведен VHDL-ÿÿÿÿÿÿ 4-битного сумматора, в ко¬
тором используются операторы ПУЗС. Обратите внимание на го, что в
этом проекте для поддержки операции арифметического сложения над
данными типа std_logic_veccor к проекту подключается пакет
iet't? , at dJLog lc_ur.s igned. Сим мод Л обозначает операции конка¬
тенации На Рис. 9.1 представлена временная диаграмма моделирова¬
ния работы проекта,
Nan»
and Bl ;
ос у after 2
>
При формировании конструкций ОНО ПУЗС необходимо пом¬
нить, что тип вычисленного значения выражения должен совпадать с
типом сигнала, для которого устанавливается это значение. Это прави¬
ло обусловлено тем. что язык VI IDL является языком со строгой типи¬
выражение;
Этот оператор устанавливает значение вычисленного выражения
указанному в операторе сигналу. Как видно из синтаксиса, конструк¬
ция ОПО ПУЗС состоит из трех частей:
I. Идентификатор сигнала, для которого устанавливается значение
вычисленного выражения.
2. Символы операции установки значения сигнала {<=)3. Вычисляемое выражение оператора, которое может быть по сво¬
ей структуре алгебраическим, логическим или логико-алгебра¬
ическим.
Ниже приведены некоторые примеры оформления операторов
ПУЗС с указанием в комментарии типа выражения, используемого в
каждом примере.
■
9. 1, Простая парадгшыш установка значений сигнаш ш 99
__
VAe
ь
зое
jiFcnmia
C0UT
PH -o SUM
.
$
Ж
Ж
<£
Ж
3
«0
,
tO
.
й.О
iFcrim/a
1
V! w SUMINT
2.0
Slm.4a<of
J
QA
a
A
Рис. 9.1. Врсменввн диаграмма модс.'шровгити работы проекта 4-6втнаго
сумматора (пример 9. 1 )
Пример 9. 1 . Проект 4 -битного сумматора в поведенческой форме
на основе ОПО ПУЗС
library ieee;
.
.
иве ieeo stdÿlogicÿLlSfl all:
uta ieoe,atd_logic_unsioned.all)
entity ADD4 is
port
:
: logic_Vectcr ■;? downtD I);
Bs in .••.••Lloqi "..vo-:: tor (3 down to 0) j
CIN: in atd_le>git;
A:
in
.
■
•
100 ■
Глава 9. Поведенческая форма проекта: неявно заданный оператор PROCESS
.
SUM: out t d_l ogic_vr-c t Or (3 downto 0);
CCJI i out utd_locj: :-) ;
er.d ADD4 ;
architecture ADD4_concumt of ADD4 is
Объявление внутреннего 5 -битного сигнала.
-SUMINT
std_loaic_vector (4
downed
приведен VHDL-ÿÿÿÿÿÿ 4-бнтного мультиплексора 4x1 построенного
на основе операторов УУЗС,
Пример 9.2. Проект 4-битного мультиплексора 4*1 в поведенческой
форме на основе операторов УУЗС
3] )
begin
-- Раздел операторов пара л леденей обработки архитектуры: проекта.
SUMINT ■;= : ’ 0 ■ к А) + (’О" к В) + C00D0" к CIN! ;
Перенос и старший бит.
СОРТ <= SUHINTMJ ;
SUM <= SUMINT [3 dewnto t : г -- Результат суммирования
end Аис4_сстсигп.ь;Обрлткте внимание на то, что для проверки
--
.
работоспособности проекта входние данные задавались н
шестнадцатеричной системе счисления, поэтому на временной
диаграмма работы проекта результаты вычислений также отобрдшенк в
шестнадцатеричной
системе
счислений.
9.2. Условная установка значения сигнала
Синтаксис оператора условной установки значения сигнала
(УУЗС) имеет следующий вид:
Лм\ч.1л
92 Условная установке значения сиена га ■ 101
■выражение! when усдонне! elee
supaxenise2 when усяовнеЭ еЛяе,
№pa*ejUfeW;
Иными словами, и операторе УУЗС сигнал устанавливается равным
значению выражения!, если условие1 имеет значение TRUE. В лротипком случае проверяется условие2 и т. д. При этом, если IHI одно из
указанных условий не будет иметь значение TRUE, сигнал будет уста¬
новлен ранным значению выражениям. Если же значение TRUE имеют
несколько условий, сигнал устанавливается равным тому значению,
условие которого указано а списке первым.
Необходимость введения в язык VHDL оператора УУЗС вызвана
тем, что некоторые ЦУ (шифраторы, дешифраторы, мультиплексоры,
демультиплексоры), оставаясь по сути комбинаторными устройствами,
требуют наличия в своей структуре таких управляющих сигналов, как
выбор номера камаза, выбор разрядности канала и т, д. И примере 9.2
entity MU>L4_l_Conc ia
port (SI, SO, А. в, c, D: in std_lcÿic:
2: out 5td_lotric) ;
end MVX_4_l_Conci
architecture concurr_hUX4 1 of KUX_-l_
begin
A when л: 1 [г md SO n 1 P * alee
Ъ В when st='D and S0 1 1 ' olae
when si '1 and SO '
else
D;
end concur r_HUX41;
=
'
: is
' 1
Операторы УУЗС всегда отслеживают значения содержащихся в
них выражении и изменяют значения сигналов, к которым эти опера¬
торы применяются, в соответствии с изменением значений выраже¬
ний. Можно сказать, что конструкции when
alee оператора
УУЗС фактически выражают логическую функцию, опнсы вающую ра¬
боту комбинаторного устройства в форме таблицы истинности.
Проект, представленный в примере 9.2. можно записать в более
компактном виде с использованием битовых строк;
entity М:..'Ц_4_ 1 _.г uiicTab is
port :А, В, с, D: in stdJUsgic;
in std_j.ogic_veetor (1 downto Cl:
Z: out Gtd_logic);
end ИУХ_:_1_ funcTab;
architecture concur r_t-!UX4l of
EuncTafc is
SEE;
_
begin
2 <= A when SEE
3 when SEL
- when SEE
-
"00" else
"Of" else
"10" else
D;
end
concur r_HUX41 t
Обратите внимание на ю, что эта конструкции более проста, чем
конструкции if ... then ... е!ве или оператор case, используемые
102 ■ Г.-ши 9.
fioeftiemeciiia форма прсеша: неявно заданный оператор
9.3.Саективная установка значений сшня-юе ■ 103
PROCESS
и явно заданном операторе ргоаеяе, и примерах проектов мульти¬
плексоров, рассмотренных в разд. S.2 и 8,3,
Подобно операторам УУЗС, операторы СУЗС пригодятся лзя опи¬
сания работы устройств, работа которые может быть представлена и
форме таблицы истинности (примеры 9,3 и 9,4),
9.3. Селективная установка значений сигналов
Пример 9.3. Проект 4-битного мультиплексора 4*1 в поведенческой
форме не основе операторов СУЗС
Оператор селективной установки значения сигнала (СУЗС) подо¬
бен описанному в предыдущем разделе оператору УУЗС. Это объясня¬
ется тем. что по функциональному назначению они практически иден¬
тичны и решаю! задачу выбора требуемого в текущий момент направ¬
ления приема или передачи потока информации в ЦУ,
Синтаксис оператора СУЗС имеет следующий вид;
with
.
out sttLlogic);
end MUK_l_4_Concif
architecture c r,: ::-r_ rrjx ]_ÿ::ÿÿ of >щ_1_.;_Сог. ? is
2
begin
э «;л тое_ лup;ч жеme
сигнал <
entity киК_г_4„Соп!:2 is
port (А, В, С, D; in std_iogic;
SEL: in 3td„l(jgic_vector 1 downto CO;
select
выражение! when значение! ,
яираяенне2 when значенхе2,
with SEC neloct
Z <- A when 40" ,
В when "Cl",
C whesn "10" ,
D when "11" ;
[лир.тееннеМ when others);
Иными словами, в операторе СУЗС сшиты устанавливается равным
значению того выражения, номер которого определяется значением
задающего выражения. Поэтому задающее выражение всегда анализи¬
руется компилятором па предмет сю тождественного равенс гва значе¬
нию одного из возможных вариантов выбора. Последние могут быть
как выражениями статического гипа (например, числом 5), так и диа¬
пазоном (например 4 to 9)либо комбинацией значений, задаваемых
с помощью символа операции ИЛИ ( I). например:
with selector select
target <= valuel when 'ООО*,
value2 when *00)* I "Oli"
v<vlue3 when others;
"101",
Разработчик при формировании значений вариантов выбора дол¬
жен соблюдать следующие требования.
• 13 операторе СУЗС не должно быть двух одинаковых значений ва¬
•
риантов выбора,
Если в операторе СУЗС отсутствует конструкция when others,
среди значений вариантов выбора, перечисленных в операторе,
должны присутствовать псе возможные значения задающего вы¬
ражении.
end concurr_KUXl_4bj
Пример 9.4. Проект полного однобитного сумма тора,
реализованного в поведенческой форме на основе операторов
СУЗС
library ieee;
иве i iree . !>tcl_logic_i J 64 . a 1 1 ;
entity "ullAddjConc is
port | A, E, C: in stdÿlogic;
sum, cout: out stc„Lcgici;
ond FullAd;l_Conc;
architecture FulIr,dd_Conc of FullAdCLConc is
-- Объявление внутреннего сигнала ins с типом $tcl_logic_vector .
signal IMS: std_logie_vector :2 downto 0 ) ;
begin
--
Установка значений сигнала IMS.
IMS (2) <= A;
ШЗШ <= BEINS (0) <= C;
with
ir;s
select
[3\UT, cout) < =
s t d_.og i c_voc t or ' i " 0
'
when
*
0 00* ,
1 04 ■ Г.шяа 9. Пмсдежесма форма проекта: ишио ?дЛаидш вператая PROCESS
.4r.4j.0g ic_Vt>ctor ( * 10 "
srd_logic_vrCtor' ( ■ 10"
s tea I og:c_v-ector' ( * 0 1"
; t d_ iogi c_v ? g t or 1 ( ' i. 0 "
etÿloglc_v«Cor'(* 01 h 1
3td— logic.,vector ' ( * 01 '
scd_logic_vector' ( ’ 11’
std_logic_ve tea ' (4 1*
_
1
ОС I ' ,
when *010*,
when * ". 1’ ,
when "ICO”,
when
■
ГЛАВА
10
СТРУКТУРНАЯ ФОРМА ПРОЕКТА
when *101*,
when '110*,
when "111*,
when others ;
end FullAdd_COnc;
В примере 9.4 объявлен вспомогательный сигнал INS как вектор
5 с d_l og i c_voc ter, состоящий из трех элементов. Затем элементам
этого вектора устанавливаются значения входных портов, после чего
они используются в качестве задающего выражения оператора СУЗС
Сигнал, устанавливаемы!] в операторе СУЗС, имеет составную конс¬
трукцию перечислимого типа (sum, coat . Использование такой
конструкции позволяет с помощью одного оператора СУЗС одновре¬
менно устанавливать значения двух сигналов - sum и cout, Кроме товида
атрибуты
СУЗС-выражении
не пользой;! мы
го,
в
ё t d„
1og ie_ vector ' { "01" 1. Такие атрибуты выполняют преобразо¬
вание символьной строки (например, строки 01 ) в се битовое пред¬
"
"
(в форму 01). Наличие битового представления позволяет
установить соответс твующие значения сигналов, указанных в перечис¬
лении (в данном случае сигналу sum устанавливается Значение Э, а
сигналу coot значение
ставление
—
Поскольку в раза. 3.3 методика создания проектов в структурной
форме была описана достаточно подробно, мы не будем здесь на ней
останавливаться, а лишь подчеркнем, что любой проект НУ. имеющий
структурную форму, является иерархическим проектом как минимум с
двумя уровнями иерархии.
Это объясняется тем, что структурная форма проекта описывает
ЦУ в терминах компонентов (component) и н\ связей между собой. 11ри
этом предполагается, что каждый компонент уже был объявлен ранее
(например, в пакете) и в с вою очередь может представлять VHDL- про¬
ект более низкого уровня иерархии как в структурной, так и а поведен¬
ческой форме. Тем нс менее на самом низком уровне иерархии каждый
компонент должен представлять собой VHDL-ÿÿÿÿÿÿ поведенческой
формы, реализованный с помошью соответствующих операторов {с.ч.
гл. 8 и 9),
Таким образом, неоспоримым достоинством структурной формы
проекта является то. чго она позволяет описывать сложные ЦУ на ос¬
нове заранее определенного ограниченного набора компонентов,
Структурную форму проекта лучше всего сравнивать с изображе¬
нием традиционной блок-схемы ЦУ, которая состоит из функциональ¬
ных узлов цифровой схемотехники (компоненты VHDL-ÿÿÿÿÿÿÿ) и их
соединений (сот. Рис. 2.3).
Язык VHDL обеспечивает формальный способ воплощения такой
аналогии с помощью следующих подходов.
* Объявление перечня используемых компонентов.
• Объявление в проекте структурной формы внутренних сигналов,
которые определяют связи между компонентами, содержащими¬
ся и проектируемом ЦУ. Кроме того, в проекте объявляются сиг-
106 ■
f.iana 10. Структурная форма проекта
налы, определяющие связи между внешними портами проекта и
компонентами, включенными в проект,
• Реализация множества экземпляров одного и того же компонен¬
та. что позволяет рассматривать каждый экземпляр как уникаль¬
ный программный объекте сохранением общих характеристик,
п ри су щнх базовому ком ионе нту.
Компоненты и сигналы объявляются в разделе объявлении архи¬
тектуры проекта, как показано ниже.
architecture имя_архитёктуры
--
ot
ИЯЯ_К0МЛ0НЕНТА ie
10.2. Оператор PORT ШР я 107
пакете библиотечных компонентов, либо непосредственно в VHDLфайле проекта структурной формы.
Имена, режимы и типы портов интерфейса, содержащиеся и опе¬
раторе component, должны соответствовать именам, режимам и ти¬
пам аналогичных портов, содержащихся и объявлении интерфейса
компонента в операторе entity,
Ниже приведено несколько примеров объявления компонентов.
с opponent OR 2
(ini, in2; in stcLioyicj
port
Объявления.
объявления_компонентов ;
об ъявлен:1я_сигнаяов:
begin
Оператори.
ояераторц_соэдания_эхзехппяров_кон1Ктентов1
--
end иня_архнт£К ту;;it;
10.1 , Оператор COMPONENT
Длн того чтобы в проекте можно было создать экземпляры компо¬
нентов и реализовать связи между ними, эти компоненты должны
быть объявлены либо в разделе объявлений архитектуры проекта, либо
в пакете, подключенном к проекту, Объявление компонента содержит
его идентификатор, а также объявление интерфейса (описание вход¬
ных и выходных портов). Объявление компонента осуществляется с
помощью оператора component и имеет синтаксис
component :шл_ компонента lie’
[port (лмя_ сигнала: mode run;
икя_ сигиа ла: mode тип;
иня_снгнала; mode тал);]
end component [иия.комлонентл) ;
Идентификатор объявленного компонента (пмя_ком>юнешт/ ) со¬
ответствует аналогичному идентификатору проекта, интерфейс кото¬
рого определен с помощью оператора entity либо ь библиотеке или в
out 1: out std_Logic);
end
component;
component
port
РЯСС
(CLK, XST, BW, 3TP: in 8td_l0gicj
ADDRBUs : out acd_Iogic_vecter (Э1 downto Cj;
DATA: inout integer range 1 to 1 C 2 Л ) ;
end competent;
component FULL ADDER
;a, b, e: in Std_lcgic;
port
sum, carry: out stcLlogic);
end component;
Как отмечалось выше, оператор component должен находиться
либо в архитектуре того проекта, в котором нужно реализовывать эк¬
земпляры компонента, либо в отдельном пакете. В последнем случае
повторно объявлять компонент в архитектуре проекта не нужно для
реализации его экземпляров достаточно подключить к проекту соот¬
ветствующие библиотеку и пакет.
—
10.2. Оператор PORT МАР
Оператор port шар, о котором также уже рассказывалось в гл. 3,
предназначен для создания необходимого количества экземпляров
компонента и реализации межлукомпоиентых связей в проекте струк¬
турной формы. Оператор port map может сохраняться на текущем
уровне иерархии проекта, в пакете библиотеки, поставляемой разра¬
ботчиком САПР, или в пакете библиотеки, созданной пользователем.
Оператор реализации компонента имеет следующий синтаксис:
10.2. Оператор ЮЯГ.ШР ш 109
108 ■ Глава 10. Структурная форма проекта
port rap ([порт
|портН =>| сигнала) ;
[лорт2 =>1 сигнал2, . ,
I смгкоя1
В качестве имени жчем/инра реяли дуемого компонента можно взять
любой идентификатор, допустимый а языке VHDL Имя экземпляра
используется а программном коде проекта для ссылки на конкретный
экземпляр компонента, как в случае с любым другим объектом про¬
граммы, 11 качестве имени компонента берется идентификатор, кото¬
рый применялся дли объявления компонента с помонемо оператора
component. Далее с помощью оператора port map реализуются междукомпонеитные связи заданного экземпляра компонента. Реализация
связей выполняется путем создания схемы (шар) соединений портов и
внутренних сигналов проекта. Список таких Нортон и сигналов указы¬
вается в круглых скобках оператора port шар.
Как вы уже знаете из гл. 3, междукомионентные связи каждого эк¬
земпляра компонента можно определять с помощью позиционной
(неявной) реализации пли с помощью именованной (явной реализа¬
ции). Допускается также комбинированная реализация, при которой в
операторе port map используются оба метода одновременно.
При позиционной реализации список оператора port map имеет
следующий вид:
port шар (сигнал!, сигнал?
....
сигналы):
В случае использования синтаксиса позиционной реали лиши пер¬
вый порт, указанный и списке портов соответствующего оператора
component, связывается с сигналом! в операторе port map, реали¬
зующем экземпляр этого компонента. Второй порт, указанный в спис¬
ке Портов оператора component, связывается с <л-; :•••■. , •; <у и г. л.
Примером позиционной реализации является экземпляр ul компо¬
нент &JAND2 и приведенном ниже фрагменте проекта структурной
формы,
При именованной реализации взаимосвязь портов и сигналов эк¬
земпляра реализуемого компонента задается в списке оператора port
map явно с обозначением связи с помощью символов
. В уже упоми¬
навшемся фрагменте проекта примером использования такой реализа¬
ции является оператор port шар, реализующим экземпляр ’ . компо¬
нента NAMD2. Следует заметить, что при именованной реализации но-
рядок расположения пар /юрт
сигнал и списке оператора port шар
не имеет значении,
Наконец, как уже отмечалось, допускается использовать синтаксис
комбинированной реализации, что показано на примере экземпляра
;
компонент
:р;>.
СО[Г,рОПОП- KAMD-
port
I
in! i ;n2: in stcLlc-mc;
out J : out St !_1 r. fir- ' ;
end component !
signal inti, inc2, inti: sidj pic;
architecture struct of EXAMPLE is
■;i! NMM port nap :A,B, inti);
WANt; port nap il
-1, out
Г,
"is HANDS port nap ; inl-.-intl , int2, Z) ;
:
■
i Г. Г Д ] ;
end architecture struct;
Рассмотрим ешс три примера 10.1. ,.10,3, иллюстрирующие подхо¬
ды к созданию VHDL-ÿÿÿÿÿÿÿÿ структурной формы,
В примере 10,] показан подход, предусматривающий наличие мас| ер-проекта и подчиненных ему суб проектов
11 простейшем случае
субпроскт может быть один, т, е. при таком подходе VHDL- проект
как минимум из двух проектов: основного мас¬
тер-проекта и одного суб проекта.
В примере 10, 1 мастер- проект называется тер и содержит и качест¬
ве компонента субпроскт с именем Logic. Мастер -проект и субпроскгы могут храниться в отдельных файлах. Так, в данном примере мас¬
тер-проект сохранен в файле Top..file. vhd, а субпроект - - в файле
Log i с _ 1 oweг.vhd.
Если все подобные файлы находятся в одном каталоге (обычно
САПР но умолчанию считает, что имя каталога совпадает с именем
мастер-проекта), САПР автоматически связывает файл субпроекта
(1с 1 с _ lov;, : г . vhd) с файлом мастор-Проекта (Top_f ilo . vhd). Для
этого нужно, чтобы выполнялось только одно условие: субироскты
должны быть откомпилированы заранее, начиная от субпроектов са¬
мого низкого уровня. Если это условие не выполняется, соответствую¬
щий компонент не будет доступен из субпроекта более высокого уров¬
ня или и I мастер-проекта,
всегда будет состоять
10-2. Оператор PORT МАР ш 111
110* Глава 10. Структурная форма проекта
Пример 10. 1. Проект со структурной формой, состоящий из мастерпроекта и субпроекта
Файл '?op_f ile.vhd, содержащий VHDL-ÿÿÿ мастер- проекта
top:
LIBRARY it-c-e;
USE i eo c- v d_Icgic_llfi4,ALLj
entity top is
port(w„in, x„in, y_in
clock
: IN 3td_logic;
: IN std_logic;
2_OUt
: OUT sttÿlogic);
end top;
5 of top ie
component logic - об* ян пениportla, b, c : IN 3td_logic;
x : OUT &td_logic:' г
architecture
компонента logic.
end с exponent;
eignal w_rog , x_,r-:a, y_i:eg, z_reg :std_log;i-i
begin
-- дперлтор pert HAP, реализующий каж компонентные
-- экземпляра Low_logic компонента logic.
LIBRARY ifleej
USB iefte 3teLlogic_1161 , ALL;
entity Logic ia
port (a,b,c
in fltd_iogic;
x
out :;td_logic) ;
end logic;
architecture s of logic ie
.
begin
procooe (a, b, c)
begin
x<= (a and b) or c;
end procees;
END г
Теперь разберем Солее сложный пример, основанный на использо¬
вании двух субпроектов & одном мастер-проекте. Предположим, нам
требуется построить VHDL-ÿÿÿÿÿÿ ЦУ, структурная схема которого
показана на Рис, 10.1. Такой VI IDL- проект удобно реализовать и
структурной (]юрмо, поскольку при отом мы можем использовать в ка¬
честве компонентов ранее созданные субпроекты ЦУ.
logic port MAP (a => w_r<?g ,
loH_logic
x_reg,
c => y_rog,
к -> 2_xeg ) :
b
Наш MKTl(p-<TP0*otl»
*>
process'! clock;
begin
) then
if (clock 'event and clock-;
-- Операторы установки значений внутренних
3H)tvnn*pv
Dui
0
Ин»р(»ЛИ!Гв“МО
Q
JH «МГСйрЛ
■
--
сигналов
мастер-лреекта в соответствии со значениями на
внешних портах.
w_teo<*w_in;
x_reg<=x_in;
y_reg<=y_in;
=
2„o‘jt< 2_reg;
end if;
end process;
end a;
Файл
logic:
Loeric_lowe:L . vhd, содержащий VHDL-ÿÿÿ суб проекта
D_FF
U3
иг
U1
CLK
\
П
in*_i
/
Внутренний
СММЛЛ
£
LM
О
ши
у-
И .11
О
Г
“Г
a
out
1
ЭкЛЬЫПАнры t
1Щ_Р
Puc, 10.1. Структурная схема VH I Л.-проекта ЦУ
—
Программный код VHDL-ÿÿÿÿÿÿÿ представлен в примере 10,2.
Мастер- проект D_FF использует два субпроекта rHV_e и DL_e, ко¬
торые применяются в мастер-проекте в качестве компонентов.
112 ■ Гмта 10. Структурам 4>ор№ проекта
10,2. Оператор PORT МАР Ш 113
Пример 10.2 , Проект со структурной формой, состоящий из мнегерпроектв и двух разных субпроектов
Файл
.
D_FF VHD, содержащий
VH DL-ÿÿÿ мастер-проекта ё>_г F:
entity D_FF in
port )D_in
in bit
CLK
in bit;
0_o'Jt : in bit: ;
end
architecture 1)_1Т_.т of :_r: ie
cceponent INV_e
Оператор объявления компонента IHV_e.
port {X
in bit;
out bit I ;
Y
end eemponent :
component r:._i-- Оператор обытвл&кия компонента
port О, С
in bit г
Q
out bit ) i
end component;
signal -!_t
, i r.v_r l : bit;- 06t паленке внутренних сигналов.
begin
Реализация экземпляров ’Л и 02 компонента INV_e.
01 IMV_e port шр (CLK, inv_t ;
02 : IW.e port asp (inv_t, inv_tl):
-- Реализация экземпляров Ш ;; U4 компонента DL_e .
DL_e port uap тЭ => P_inr C => ir.v_t , Q => q_i)r
03
> C_0'Jt } ;
i ; ;V_t 1 , Q
Yi : DY port map Э “• T_t , C
end D_TF_.\;
Файл I : rv_E-: . v:ii , содержащим УНРк-кодсуЙлроекта iuv..,e:
entity lNV_e is
in bit;
Y : out bit);
port {X
end (NV_e ;
architecture :KV_;t of
■
Yl : proceos [C!
begin
not X;
Y
end ргосевз;
■
.
•
end lNY_a ;
13 примере 10,3 мы рассмотрим VHDL-ÿÿÿÿÿÿ 4-бптною регистра
на базе D-ÿÿÿÿÿÿÿÿ с асинхронным сбросом (Рис. 10.2), Его имеет
смысл создать в икде проекта со структурно)! формой, поскольку it
этом случнс и мастер -проекте можно использовать 4 экземпляра субпроекта D-ÿÿÿÿÿÿÿÿ.
RegQ(O)
--
■
■
is
begin
'
г
RegCKI)
RegQ(2)
Ред2_СО
Эпмлimp
ксипонапша OTFÿFST
Q
-
*
D elk ret
a
О ck rat
U1
end
i;
ргосевв (С)
begin
if С = '1' then Q <= D;
end if;
end process,
О
Q
D <jk ret
D elk rat
I
Файл DL_E . VHD, содержащий VHDL-ÿÿÿ субпроскта DL_e:
entity 0Г._',н is
port (B,C : in bit ;
out bit);
Q
end DL_e;
architecture Di ,,т of DL_e is
begin
RegQ{3)
f
J
ctK R*»(0}
RodD(l)
RodD(2)
RedD|3)
Puc. 10,2, Структурная схема мастср-проекта 4-бит кого регистра
Пример 10.3. Проект 4-битного регистра со структурной формой,
состоящий из мастер-проекта, в котором реализуется
4 экземпляра одного компонента
Фпйд
Reg4_CQi
R&tr'i—GOi VHD, содержащий VHDL-ÿÿÿ мастер-проекта
114 а
Глава 10. Структурная форма п/юекта
on city t-'
I
ГЛАВА
t_CO ie
in bit_V*Ctor
port <R*dD
elk, rst
RegQ
end K<3S4_OT;
(3
downto Cl;
ПРИМЕРЫ VHDL-ÿÿÿÿÿÿÿÿ ЦУ
РАЗЛИЧНОГО НАЗНАЧЕНИЯ
in bit;
out
bit„VGttor
(3 downto 0);
: is
architecture Reg4_C< _.w .:h of
component DFF_RST is
Объявление компонента DFF_RST ,
port (D, elk, rst
in bit;
bit);
0 out
--
--
11
•
end component:
begin
Реализация четырех экземпляров компонента ,
bitC г component DFF_R5T port map •ID => RedD(0: ,
elk => elk, rat я> rst, Q “> RegO(Ol);
bit! : component :)FF_RST port map •:!; =;• Rc-diJ(l),,
bic2
Clk => elk, rst => rst. Q -> RegQ(l));
: component L'FF_R$T port map <D = > RedD ( 2 :
elk => elk, rat => rst, Q => Re$0<2));
bit! ; component DFF_R5T port map (D •> Re:iD[3)
elk => elk, rat ■=;> rst, Q => FtegQ[3));
end Reg4_CO_arch ;
Файл DFF_RST , VHD, содержащий VHDL-ÿÿÿ субпроекта D-ÿÿÿÿ¬
гера с асинхронным сбросом UFF_RST :
entity DFF_?.ST is
port (D, elk, rst : in bit;
0 ; out bit) ;
end L>T_RST;
architecture DFF_RST_arch of CFF_RF7 is
begin
process (rut, elk)
begin
if rst
' Г then Q <H ' 0 ' ;
else
if elk 'event and elk - '1' then
-
0 <• Dj
end i £ ;
end t£:
end
process ;
end D?T_RST _arch;
11.1 Проекты ЦУ общего назначения
11.1.1. Логический элемент AND на 4 входа
Работа 4-входового логического элемента and описывается таб¬
лицей истинности, представленной в Табл. П.1,
Таблица 11. 1. Таблица истинности логического элемента AND ни 4 входа
Ними
11*0,1
10
II
О
0
0
0
о
0
1
0
0
0
1
I
1
1
1
1
)
1
в
I>
13
О
I
0
0
о
0
0
и
12
0
0
0
I
0
l
T
I
0
0
0
0
0
0
1
0
0
]
1
I
0
1
в
в
1
В
I
о
0
в
В
в
0
в
в
0
в
и
0
0
0
I
130 ■ Глава 1 1. Примеры t'HDL-ÿÿÿÿÿÿÿÿ ЦУ различною паштета
о:
<* 1 '0' ь А) *
S;
А
02
03 <-
А
-/
В;
Q4 <- А
со ь
BJ ;
В; -- Умножение .
-- Сложение,
-- Вычитание ,
—
II.].
Проекты ЦУ общего назначения ■ 131
11.1.16. Побитный контроллер четности
В данном примере проиллюстрирован синтаксис объявления и ис¬
функций в языке VHDL
Деление.
пользован™
end ргосева,-
end behav;
11.1.15. 4-битный компаратор с анализом знаков
сравниваемых чисел и выбором режимов
сравнения
Проект Compare
-- + м+4
—
Copyright 6 1992-2003 by Yuriy Kovtanyuk, +++**
T+V+,V-+4--+4--+T- www, yak-book в, соя r+t+++4-(t++.tt
library ieee;
ieee. 3Cd_iogic_1164 .all;
uae ieee.std_Logic_arith.all;
UBG
entity compare is
port (
inAeB
inAgB
inA.nB
outAeB
outAgB
in
in
in
ctd_logic;
std_logic;
stcLlogic;
out std_logic;
out std_logic;
out std_logic;
outAmB
std_logic_vector (3 downto 01;
A
in
std„logic_vector (3 dovr.to 01);
В : in
end entity;
architecture eompare_urch o£ compare le
begin
out-.eB <- '1' when (А = B) and IttiAeB = ' 1'; else "0';
OUtAga * = '1' when (SIGNEDIAl > SIGNED(BI) or ( (SIGHED! A) SIGNED [B}) and (inAgB <= 1 Г)1 eluo 1 C \outAmB <= ‘Г when (SIGHED (A) < SIGMED(B) ) or { (SIGNED(A) =
SIGNED (B) ) and (itlAttB = 1 1MJ elee 1 0' ;
end architecture ootr.pare_arch;
Copyright
..
Проект Parity
by Yuriy Kovtanyuk -м---www , yek-fcooke. com -*-++-*t+*++**t
в 1ЭЭ2-203”
++-**»+»*++.+++++)■
library ieee;
иве ieee.s:d_losi.e_U64.allr
entity parity 18
port (
in std_lcgic;
выбор j ежика контроля 1,
IE
10
in srd_Iogic,- -- Выбор режима контроля 0.
OE : out std_logic;
out std_iegic;
00
: In std_l«fic_veetor >'? dotmto 0) l;
D
Контролируемый байт.
end entity;
architecture parity_arch of parity is
-- СФькэленле к сттрсгеление полпрограикы -функции контроля четности,
function perity_parity_fur.c (INfljT: std_loflic_voctor (V downto ЭМ
return std_loaic ie
variable TEMP; std_lcgic;
begin
TEMP: INPUT) ШОТ1 high);
1) domto INPUT' low loop
for I in ! INPUT 'HIGH
ТЕУ.Р: TEMP ХОГ INPUT (1);
end loop;
return TEMP;
end function;
begin
0E <= parity_parity_£uncfD) xor IE;
00 <- parity_parity_func(D) яог 10;
end architecture:
-•
—
-
=
II. I. Проекты ЦУябщего шпначения
132 ■ Г.кма II. Примера УНРк'Щюектой ЦУ рагшигкактначета
11,1.17, Простой D-ÿÿÿÿÿÿÿ, переключаемый передним
фронтом тактового импульса
проект
--
--
DPF
*++.+ copyright v 1932-2007 Ivy Yuny Kovtanyuk + *+++
++++++++t+++f +*+t+ wwH.yak-booke.com +*f*+*+++++*+*+
library ieee;
use ieea . atd_lcgi :_116 .all ;
entity iff io
port (data, elk : in std_lcgic;
out etcLlogic);
ч
end d£f;
architecture behav of dr: is
Триггер сбрасыиастсд и 0 нулевым значением сигнала гоыо; (не
ожидая очередного синхроимпульса сТк) и записывав i момыс данные
data по заднему фронту синхроимпульса elk.
■
process (elk,
! begin
if Preset
' 0 } then
q <= ' 0 '
elsif (elk* event end elk
q <= tlata;
end if;
end process;
end behav;
=
ПрС'1-КТ DPF. ADynC.ROt
Copyright © I992-20Q7 by Yuriy Kovtanyuk *t + „
r4+.T++t+-+++-r»++ www,узк-Ьоокв.сот .+++.+++.TT++..
+4+4.
1
■■
‘!
then
Триггер устанавлн мается и
] нулем ы м
значением сигнала preset
п записывает (юные дан¬
die ожидая очередного синхроимпульса с! к)
--
j* -i- + + * Copyright
-- 4+-+.+H
entity dff_async_rst is
in std_log;C;
port (data, elk, reset
q
out std_logic);
one! lf£_async_i :t;
architecture J: -anv of dCf_async_r3t is
Проект Df f..Async_Pre
0 1992-2 007 by Yuriy Kovtanyuk
■„++.._+..+- +
www.yak-books.com
end d£f_osync_pre;
architecture behav of dff_asyne_pre is
begin
process ■: elk , preset) begin
if (preset a i o') then
CJ <a ' 1 1 J
elsif (clk'event and elk
q ч= data;
end if;
end process;
end behav;
=
'11
+ ++-*
т++--н“н++м
library i
;
use ieee.3td_logic_il64.iilb
entity df f_async_pre is
port (data, elk, preset : in std_logio;
<( ! out std_ Logic);
library ieee;
use It- . &td_logic_l 164 .all;
i
■
11.1.19. D-ÿÿÿÿÿÿÿ с асинхронной предустановкой
1 1 ) then
11.1.18. D-ÿÿÿÿÿÿÿ с асинхронным сбросом
...
buffin
ные data (изменяет состояние) но переднему фронту синхроимпульса
elk.
begin
process I elk! begin
if (elk ‘ evrat and "Lk
q <- data;
end if;
end process;
end D#hav;
• 133
■
then
134 ■ Глава П. Примеры VtfDI.-npocxnm иУрвгмнагонатметя
11.}.
11.1 .20. D-ÿÿÿÿÿÿÿ с асинхронным сбросом
и асинхронной предустановкой
Проекты ЦУ общего назначения я 135
Проект Df£_Sync_RBt
Триггер сбрасывается в 0 нулевым значением сигнала reset (нс
ожидая очередного синхроимпульса сШ, устанавливается в 1 нуле¬
вым значением сигнала preset (не ожидая очередного синхроим¬
пульса elk) и записывает новые данные data (изменяет состояние) по
переднему фронту синхроимпульса elk.
Проект Dff_Aeync
+ ,-+>+ Copyright © 1992-2 ЭЭ7 ty Yuriy Kcvtanyuk ич
-- +++++ÿ+>+..++*+++ÿ www, yek-book в .com .+++++ÿ+ÿ**++**
--
library ieee;
use ieee,std_lcgic_H64 .all;
entity d,ff_async is
in std_logie!
port (data, elk, reset, preset
q
out std_logic);
end d£f_async;
architecture behav of rlf f_.ir.ync is
begin
process (elk, reset, preset ;
begin.
if (reset = 0 1 1 then
q <= * 0 ' ;
1 ' ) then
elsif (preset
q <= '1';
elsif (elk’ event and elk = 1 ' I then
q <- data;
ond if;
Copyright © 1992-200? by Yuriy
-- +4+++
+
++++
+
f +*4++- www.ysk-bookB.com
--T
+ÿ 1
«
*
Kovtanyuft --+ + *
+*+HÿH++*++*t
library ieee;
use ieee , 3td_logic_lli.4 .all ;
entity dff„Sync_rst is
port (data, elk, reset : in std_iogic;
q i out std_logic);
end df f_syne_rst ;
architecture behav of df £_£упс_гз t is
begin
process (elk)
begin
if (elk'event and elk = 'l') then
if (reset = ' 1 ' I then
q <“ 0 ;
else
q <= data;
end if;
1
1
end if;
end process;
end beiiav;
1 1 .1 .22. D-ÿÿÿÿÿÿÿ с синхронной предустановкой
Триггер устанавливается в I нулевым значением сигнала
■■
и за¬
писывает новые данные data {изменяет состояние) также по передне¬
му фронту синхроимпульса с lk .
end process
end bshav;
11.1.21. D-ÿÿÿÿÿÿÿ с синхронным сбросом
Триггер сбрасывается в 0 единичным значением сигнала reset
(при приходе очередного переднего фронта синхроимпульса elk) и за¬
писывает новые данные data (изменяет состояние) также по передне¬
му фронту синхроимпульса elk,
preset
(при приходе очередного переднею фронта синхроимпульса elk)
--
•+*+ÿ
.
+
Проект Df f_sync_Pre
Copyright © 1Э92-20'>7 by Yuriy Kovtanyuk
. ..+**ÿ++++.
+*+*;
www.ynk-bookfl.com
library ieee;
use ieee.std_logic_1164.all;
entity if f _sync_pre io
port
(data, elk, pre:u‘t : in std.logie;
п*н
11.1. Проекты ЦУ общего наъючепия ■ 137
136 ■ Глава 11. Примеры V1IDL -проектов ПУрапикШО назкаченчм
q <в * 0 * :
(elk'evor.t
and elk - '1'
olsif
if (en
'1' ) then
q <= data:
end if г
end if;
end process ;
q i out std_logic>;
end df f_sync_pre;
architecture bskav of df f_$yne_pre is
=
begin
process (elk!
begin
if (cik'ev&r-t ar.d elk - '!’) then
if (preset = '0') then
q <= ' i 1 ;
else
11.1.24. D-ÿÿÿÿÿÿÿ-ÿÿÿÿÿÿÿ
Tpnrrep-ÿÿÿÿÿÿÿ записывает данные data только когда сигнал
end if;
end
end behav;
data;
q
enable ранен 1.
if;
end procees;
end behav;
..
1 1 1 23. D-ÿÿÿÿÿÿÿ с синхронным сбросом и сигналом,
разрешающим приход очередного тактового
импульса
Триггер сбрасывается к 0 единичным значением сигнала гояос
приходе очередного переднего фронта синхроимпульса с 1 к) и за¬
писывает новые данные data (изменяет состояние) также но передне¬
му фронту синхроимпульса elk, но только тогда, когда значение раз¬
решающего сигнала еп равно I.
{ при
----
Проект P_bstcb
copyright
<?> 1992-20Q7 by Yuriy Kovtanyuk
t + 44-+++44-4-*++4 4*f4 wwM, yek- book S.COnl + + t++ + 4it +
+ ++++
-
Проект Df£_Clk_En
+*-+4 Copyright e 1992-2007 by Yuriy Kovtanyuk **4+4
4.4H*+*++ + *144»‘+ www.ysk-booke .can *+ 14-1+4 4-4-4- -t-4-4-4-
library iete;
use ieee.stdLlogic_ll64.all;
entity df £_clk_en is
port :data. elk, : aflat , eh : In
:<t :1_1с--з1с«
q ; out 3tc1_logic) ;
end df£_clk_en;
architecture behav of cf f_clk_en is
begin
process
:k,
rojt't:
if (reset
=
begin
'O'; then
-
4
+ч •
library ic-c-o ;
use L6ee.std_logic_llci,all;
entity d_latch is
port ; enable, data: in st<L logic;
у
out at;!_lo;;ir : ;
end d_iatch;
architecture fc-ehave of d_latch is
begin
procees (GII ibl
--
then
data!
■
begin
if
(enable
л
'
у <;= data;
end if;
end process;
end behave
11
>
then
1 1.1.25. D-ÿÿÿÿÿÿÿ-ÿÿÿÿÿÿÿ со стробирующим
сигналом
Трмггер-зашелка записывает данные, только если сигнал enable
равен 1. Конечное состояние триггера-защелки определяется как зна¬
чением сигнала data, так и значением стробирующего сигнала gate.
1Э8 ■ Глш
П, Прилкры VftDL- проектов НУ рйшишко назначения
Проект D._Lafcch„B
Copyright $ 1Э 32-2 D'SV by Yuriy
-■
+*+++
--
+n +*f+**++*t-n-n
Хт Вуик
44 + **
Hww.yek-bookB ,com ++*4-+++*-+,+4+*+t
_
library ieoe i
uee ieee , seci lc-gijcjiLl Ifid , all;
entity fÿlatch_-e is
port I enable r
л t e r data : in std_Logi.c;
q ; out htdjkgi :
1 i. I. Приданы МУЫтауо шштенп» ■ 139
out std_lo3ic_vecEor
count
and counterS;
architecture мшу of counters is
signal ent : Etd_!.Cvj:c_.vet;T . г i. dawnto j) г
begin
process (elk, ел, fcnt, гяЫ
begin
if
c «=
data
-
4
1 4 1 then
1 I then
1
*
'1':
end behav;
Проект Counters
Copyright О 1992-2007 by Yuriy kovtanyiik +++4+
*ПШ,увк -bOOkS .C031 44-* (-4 *- *4 *ÿ+- *
11.1 ,27. 8-битный накапливающий счетчик
с синхронной загрузкой
и асинхронным сбросом
ил него тактовых
количестве поступивших
При
присутствует
Счетчик ш5счишмст
нмпуяьсов elk, когда на его входе
сигнал 0.
ioÿd
приходе очередного переднего Актового импульса elk счетчик уста¬
липли настоя п состояние data (записывает значение data), когда на
ею входе 1 oad присутствует сип мл 0. Счетчик сбрасывается в 0 сигна¬
лом reset, не ожидая прихода очереди ого тактового ЬгШШ elki
Copyright
“
- ++++J-+4 *+++
-*ÿ
,щЦ
1
count <= cut;
Счетчик подсчитывает количество поступивших на него, тактовых
импульсов 'ik, когда на его счетном входе он Присутствует сигнал ].
Счетчик сбрасывается в 0 сигналом rat, нс ожидал прихода очередного тактового сигара <rik.
library b' --;
иве ietie . itÿLlogig_ll$ij
use ieee.std_logi consigned, all ;
)gic_nritli.all;
use s-'f-o.
entity djuncore is
poet folk| on, cat ; in ettLlogic;
=
'0 4;
■=
end process j
'1' ) then
and gate;
1 1 . 1 .26, 8-битный накапливающий счетчик
со счетным входом
и асинхронным сбросом
--
then
(others
ent <= ent
end if;
end if;
end procdEiuend. behave;
-Мтг
= '0')
ent
if ien
end if;
--
(ret
•lalf (elk 'event end cife
begin
ргаенр i enable, gate, data)
begin
(enable
0} ) /
'
end
architecture behave of d_Iatch_e is
if
П derate
library
UJJES
1
■ ■
i
—
г
-
Проект Counter
1992-2007 by Yuriy
+4-T ;
КД йПуик
mm.yak-toooks.cgÿi
:
leee.istdUrWiOlGJfSl S ;
use ieee.stdLlcgic_unaign*d,all;
use ieee.std_logic_arith.alL;
ontity counter io
port (elk, «set, load; in std„logic;
+-‘Н
+*+444+4 т +4 +'+ +
(
НО ■ Глава II. Примеры VtitfL-nfoeimtOi ЫУ различимо япзншция
|data:
stdLJ
in
out
end
:
><jic_veictoi
■'
T-l„! jic„vec(:oi :
■'
iwnto 0 ;
downto 0) j J
iflurtteifj
cik.
C) ;
■
=
' 1 ' then
Ceuntÿi e= data;
elac
■
<
cour.l:_L
■
1
1
1
;
1 1 .1 .28. В-битный накапливающий/вычитающий
счетчик с выбором направления счета
ПрI
i
--
I
I
-
■
■
load
uptown
q;L
end
!
кт counters
by Vuiiy
uww. yak- book я . сов
entity counters ia
port [
d
in integer
clk
in bit;
clear
■
О I992-2Q0""
in bit;
in bit г
in hi!, г
out L lit
■
)or
tango
range
0 to 2 55,-
to 2! : ) ;
counters;
architecture a of
bog in
counter::
is
РГОСОЕН
uritblo cut
intecret
rangu
..
to 255;
лпучк
.....
Kovl
1
+ Hrt-Ctj
-
ent
-i
Организация
cut
Ccipyright
'
out
if (clear -
behave:
-
i
ent
end ргосевн;
1+и *
ulso
end IE;
count t" eounc_i;
-
BuGo? направления::
then --
I;
Ul;
else
end if;
end
direction
cut.
eount_:
end if;
'tier. : linger :
=
= "51) then
1
'
(others
r. urit .. i
!!
eleif (elk'evert aad elk = '14 then
(reset
if Lead
■
■ J4i
direct ion :» -1)
and if;
'
if (elk1 Е¥ЩГ and elk
> then
□
(load
l1: then
if
cut : = d;
end if;
If folk' EVENT ui elk - 1 1 ' : then
if (up_ddwn = 'l‘[ than
reset,
begin
if
variable :
Проекты ДУо&фв наз/тмия
begin
if [upjdotwn = '1'
architecture behave of counter Ц
signal count_i
st ! .lorj ic„ve :toi i 7 derate
begin
process
II.].
||.,|Ччм
;
direction;
рннхдонкотй
сбросе счетчика.
then
= 0;
end if;
end if;
end 11 ;
qd ■ = cut;
end process г
cr.d A;
11.1 .29. N -битный накапливающий счётчик со счетным
входом, синхронной загрузкой
и асинхронным сбросом
Счетчик сбрдсыаается и 0 сигналом rati ранным I, не ожидая при¬
хода очередного тактового сигнала elk. Счетчик подсчитывает количастно поступи в лих на него тактов ы к импульсов с IX, когда на его
учетном диоде ?п лйсулстиует
I. При приходе очередного пе¬
реднего тактового импулЩв elk счетчик устанавливается и состояние
d,= ra (записи паст значение data), когда EKL его входе load присутс¬
(width)&Ka3biB(ieTCn и операторе
твует сигнал 1. Разрядность
сигнал
generic ( ) ,
счетчика
142 ■ Г.тт 11 Примеры
---
+++++
*->.*
*
ЦУрииткого иа
Copyright в
нн
-
M-
-
-+*+-+
Проект counter
15 92-21)07 by SfUriy Kcvranyuk *++*www.yek-boeke.coit ч'-ни...ц-.
иве 1ме. 5tdLlopie_unsifjnfld.aLl;
иве ieMHStcLlosic_arith.au :
antifcy count..-: Is
integer := 1$) ;
generic (widBl
pore (data
in std_; :i;ic_vi;ntc;r (width- 1 downed L, ;
load, an, eJk, rst : In r:t:L_ltgic;
out std_lcglc_vecto!' (width. I downto В И 1
counter;
architecture behave at counter is
signaL count
begin
.3td_lcgic_ve;tor
Обнаружение очередного переднего фронта тактового сигнала elk
осуществляется а проекте с помощью специальной подпрограммыфункции г:, й: яс_е -Г1П- elk) (объявление этой функции содержится
и ядре языка VHDL). Очистка регистра сигналом г ! г, предустановка
сигналом sec и загрузка данными data спитом load также возмож¬
при наличии (обнаружении) очередного переднего фронта тактово¬
го сигнала elk н значения разрешающего сигнала се, равного I. Сиг¬
налы el г, at- и load должны быть единичными при выборе еоот-
на
library ieags;
use ioee,std_logiciLU£4.all г
flnd
IU. Проекты ЦУойщего назначения ■ М3
начгния
(width*! dosmto C;;
proccaa (elk, rstf)
begin
if rat = : ’ then
count <= ( others »> 'ffiiK
- '1') then
cleif (clk'event and
it load ~ Щ then
count <- data:
elsif on r '1' then
count 4 1;
count
endl if;
end if ;
end process;
q <- count;
end behave:
1
olÿ
1 1 ,1 .30. Синхронный 4-битный циклический
сдвиговый регистр вправо
с параллельным входом и выходом
Этот регистр выполняет операцию циклического сдвига вправо
только при наличии (обнаружений) очередного переднею фронта так*
тоэого сигнала сЗ и значения разрешающего сигнала се, ранного 3
встствуюшсП операции.
--
__
Проект Shf t_Aeg_RCR
+ *++4 Copyright C 1 392 -2007 by Yuriy Kcvtÿhyuk *+ÿ+*
и wwvr. ye k-booko . сот тн*чн*н4-
library i-ÿÿÿ;
иве ieee.str)_logic_I16( . nil;
entity sh£t_reg_jror 1b
port
CLK
in itd_iogic;
CLH : in 5td_lcgic;
SET
in sitd_l ogle j
СЯ : in Jtd„logic;
LQZD
in std_icgic;
DATA
in std_lcgic„vector !3 downto 0);
out stct|logiH,vecEor (3 downto 0i;;
0
end entity;
architecture shftjsjjrch of chft_reg_ror is
signal TEHPJD
stdjiogic_voctor(3 downto 0 J j
signal Si
in 3td_lcgic;
begin
pro сева CLK)
begin
if rislng_edg£ (CLK) then
4' then
if C£
if CLK ■ 4' then
<- "OQOO'r
els if SET “ '1' then
-
ТЕМЩе
TEMP_0 <=
eleif LOAD
TEKl>_0
else
-
■
"llll" ;
1
1
then
<7 PAT A;
ILL Проекты ЦУ общего назначении * 145
144 ■ Глава II. Примеры VHDL-ÿÿÿÿÿÿÿÿ НУ рсгничввго щииачень»
SI
■-=
begin
?ЕНР_р I L' I :
!■ si-t
ТЕЗ!?_1
рсо-зеав|L'LK)
begin
Т£ИР_0 ( 3 downto I) ;
end И;
if ipi*ing_e<ige((SHlE) then
if bE * 4' than
if CLP,
'1' than
TEM?_0 < "ШОК?
eLaif SET - i ’ then
end if;
end If;
end process;
=
TEMpJjj
0
.
TEMP_0 <"
11 , 1 .31 Универсальный синхронный 4-битный
elaif ЫМШ -
TEMPJO
сдвиговый регистр вправо
с параллельным входом и выходом
TEMPJO
КОТОР
сигнала
подам витал, поступающий от другого источника. По очередному пе¬
i к нцненлю соответствующего
реднему фришу т .1ктоио1чт
конкатенации
операции
посредством
ft подсоединяются 3
бита
Младший
бит, хранящийся в та¬
старших бита, хранящихся в регистре.
ким регистре до момента выполнения операции сдвига, теряется ,
■
к
Проект shft_Heg
Cupyriabt 0 1 392-2 337 by Yuriy Kovtanyuk ;+++*-
т-44т
~
* + 4- 4 4 *
library
¥*
+ ■* + ♦ + -! + * + 4
www .yak -bosks
.
coffi +++4*4+44++++*
iieer
ijeiee.sÿd_logicÿLiffi4ffllll;
entity <jfflft_reg ia
ийе
port l :’l.K
CLR
SET
CE
SI
LOAD
■
"Ull'f
..'than
DATA;
<- SI & ТЕМ Р„0 ( 3 doi«t& II;
end if;
end if;
or.d if;
и подраэд. Н . ] -24 этот проект содержит
Ве личие от прицеленного
ЫЙ может быть
входной порт Si), на
ОД1Ш ДОПОЛИ ИГОЛЬНЫЙ ВХОД
__
=
1
and architecture;
end process;
О t- Г£МР_0;
end architecture г
11.1.32. Расширитель разрядности шины знаковыми
разрядами
—
В пакете ;3td_logic„ari:J$i библиотеки i
определены специ¬
альные функции Вот I н SXT ( ) , которые можно использовать со¬
ответственно для распил ре пня таком и дополнения нулями сигналов
типа 3t<3_logic_veetor. Однако зти функций напрямую не подде¬
ржи лаются урезанной версией VHDL, которая используется is пскоторих САПР Выход заключается и определении ЭТИХ функций как
VI! DL- проекте в с последующим подключением ЭТИХ VHDL- проектов
и новые проекты в виде
В данном подразделе рассмотрен проект sign_EJtt .vhd, предна¬
значенный для расширения шины знаковыми разрядами. А п
1 1 одраэд. 3 \ . !. 33 при веде!i i ipoe кт Z е г о _е к t . vh d , пред!тэ начин ны it
для расширения шины нулями.
компонентов.
in E‘.o_].CT;it';
: in Std_l0<jiCj
: in std_itvgie;
: in stcLL&aic;
: in Std_Lo$ie;
: in 3t4,l0fliCj
DATA : in atd_LoS'lc„vector 13 downto 0 j ;
out sT;dClogipjvect
3 downeo 0)J;
0
end entity;
nvh of hftLtcq is
architecture 'Ti: ■.
uignai THIKPJJ : r.td„i gie_v< tc; ) dQwntQ
or'f
Проект Sign Ext
■
Copyright о 1$$2н2007 by Y;iriy Kovtanyuk H-**+
н>чн,гЦч-4н - . i
> 4
ffuy , ynk-booka , eoai • J M-*H
■
■
11. ]. Проекты иУотегонамйчения ш 147
146 ■ Г,ша П. Примеры УИШ-праектов ЦУ paimvitw назначения
11 .1 .33. VHDL- проект расширителя разрядности шины
нулями
library ieee;
use ieee.st(i_logic_I164 .all
use ieee.sCG_lo3ic_0rith.alI
entity sign.ext iu
-- Оператор generic используется, чтобы определить разрядность
-- (ширкну) входных и бккОДных портов ( век-тороз ! .
generic {WIDTK.IN f INTEGER :ÿ 4; SIZE.OUT : INTEGER :* 8»;
port ( cl_i n
in Std_logiC_vector(MIDTH_IN-l downto 0);
d_out
out etd_iogic_vector (SIZE.OUT-1 downto 0));
end sign.ext;
architecture behavior of sign.ext is
Проект
+-V-++44+4+++++4+++
www.ysk-ÿÿÿÿÿ.ÿÿÿ
-444-444+444444
nee ieee.std_logic_arith.aIl;
entity rero.ext is
4; SISE.OUT ; INTEGER := 8);
GENERIC (WIDTH.!!! ; INTEGER
port: d_in ; IN std.Iogic.vector :WIDTH_IN-1 downto 01;
d.out OUT std.logic.vectcr )SIEE_CUT-1 downto Cl);
end 2ERQ.EXT;
architecture behavior of
true;
begin
proceee (d_in)
begin
for ; in
else
zero := false;
end if;
for i in WIDTH. IN to (size.out-li loop
if (tore) then
d.cut { j t <B 1 0 1 r
else
d.out
(
j)
zero.oxt ie
width.in
to gii:e_cut-l loop
<" '0 ;
1
end loop;
d_Out(WIDTH_IN-l downto 0) <= d_in!WIDTH_IN-l downto 3>;
end process;
<B '1';
end if;
end loop;
d.out IWIPTH.IS-1 downto C: <=
--
fcero.Ext
copyright 0 1992-2007 by Yuriy Kovtanyuk ++ + ♦+
library ieee;
process ;d_ir.)
variable zero; boolean;
begin
if (d_in(WIPrH_IN-U = r0' I then
d.out (j)
+*,+4
use ieee.std_logic_li64.all;
begin
-его :=
--
end behavior;
Субпроект Zero.Ext.vhd можно использовать
высокого уровня в вине компонента zero_ext:
d_in (WIDTH.IN-L downto 0) ;
end process;
end behavior;
и проектах более
component zero.ext
GENERIC (WlWHJWs INTEGER; SI2E.QUT; INTEGER);
port ( d_in : in std_logic_vector (WTDTH_IN-1 downto 0! ;
d.out : out std_lcgic_vector (SIZE_OUT-l downto 0));
component;
end
Субпроект Sign_Ext .vhd можно использовать в проектах более
высокого уровня в виде компонента s ign.ext:
component sign.ext
GENERIC (WIOTH.IN; INTEGER; SIZE.0UT: INTEGER) ;
port ( d_in; in std.Iogic.vector (WIDTH.IN-I downto 0) ;
d.out : out std.logic.vector (SI2E.OUT-1 downto 0));
end component;
L
Download