Text
                    4
02Лавлеlluе
3.5. Архитектура . .. . . . . . . . . .. .. .. .. . .. . . . . .. . . .. .. .. .. . .. . . . . . 4О. 129
3.6. Декларация интерфейса объекта. . .. .. .. . .. . . ..'4О . . . . . . .... 130
3.7.. Карта портов и карта настройки ........4О.................. 133
3.8. Конфиryрация ........................................... 134
3.9. Модули проекта и VНDL..библиотеки ..... .. .. . . .. . . . ... 138
Упражнения ................................................ 140
rлава 4. Прнмеры проектировання на VHDL .................. 143
4.1. Стили описания поведения. .. .. . .. . .. .. . .. . .. . . .. . .. . . .. . .. ... 143
4.2. Формы описания сиrналов . .. .. .. . .. . . . .. .. .. . .. . . . .. .. .. . .. "" 146
4.3. Описание автоматов .........................4О............... 150
4.4. Отладка VНDL...описаний .. . . .. .. . .. . .. . . .. .. .. . . .. . . .. .. . .. ... 168
4.5. Синтезируемое подмножество языка VHDL .. .. . . .. . . ... 170
Упражнения .......................................... 182
rлава 5. Методические материалы.. .. . . .. .. . .. . . . . . . .. .. .. . . .. 185
5.1. Лабораторные работы . . . . . . . .. . . . .. .. . . . . . . .. . . .. . . . .... 185
5.2. Контрольная работа.. .. . . .. . . . . .. . . .. . . .. . . . .. . . .. .. . .. . . .. 263
5.3. Тестовые (да/нет) вопросы.. . . . . . .. . .. .. . . . . . .. . . . . . . ... 27]
5.4. Контрольные задачи ............... .. . . . .. . .. . .. .. .. .. . . . .. .. .... 281
5.5. Литература по языку VHDL . . . .. .. . .. . .. . .. .. .. . . . . . . . .. .... 290
5.6. Интернет..ресурсы .. .. . . . .. .. .. .. .. .. .. .. .. .. .. . . .. . . . .. .. . . . . .. ... 292
Литераryра . . . . . . . . . . . .. . . . .. . .. .. .. .. . .. .. .. . . .. . . .. . .. . .. . . .. . . . . .. .. 294
Приложения .. .. .. .. . . . . .. . . . . .. .. .. . . .. . . . .. .. .. .. . . . . . . .. . .. .. .. . . . . .... 295
1. Форма задания синтаксических конструкций
языка VHDL . .. . . . . .. . . . . . . . . . .. .. . . . .. . . . . . .. . .. . .. .. .. .. .... 295
2. Синтаксис языка VНDL '93 ..................................... 296
з. Пакет ST AND ARD . . . .. . . .. .. . .. . .. .. . . . . .. .. . . . .. .. . .. . . .. . ". 3 2 ]
4. Пакет STD LOGIC 1164.................................. 323
...... 


Предисловие ЯЗЫJ( VПDL (Very high speed integrated circuits Hardware Descrip.. tion Language) является фактически международным стандартом в области автоматизации проектирования цифровых систем, это " входнои язык мноrих современных систем автоматизированноrо проектирования (САПР) как заказных, так и проrpаммируемых лоrических интеrpальныx схем (ПЛИС) Programmable Logic Devices (PLD) и проrpаммируемых пользователями вентильных матриц Field..Programmable Gate Arrays (FPGA). VHDL предна... значен, в первую очередь, для спецификации точноrо описания проектируемыx систем и их моделирования на начальных этапах проектирования алrоритмическом и лоrическом. _ С помощью VHDL можно моделировать электронныс схемы с учетом реаль..  . Hыx временных задержек. В последнее время весьма успешно разрабатываются и сие.. темы сицтеза схем по спецификациям на этом зые.. Например, используя САПР WebPACK ISE, МОЖНО провести моделирование исходноrо описания схемы на языке VHDL, а затем синтезировать схему и получить файл настройки (конфиryрации) микросхемы типа РРОА фирмы Xilinx. Использование САПР МАХ +PLUSII позволяет решать аН8Лоrичные задачи для проrpаммируемых микросхем, выпускаемых фирмой Altera. Для заказных СБИС мо" ryT быть использованы САПР фирмы Mentor Graphics: система моделирования ModelSim позволяет провести моделирование описаний, представленныx на языке VHDL, система синтеза Leo.. .nardoSpectrurn позволяет автоматически получать по описаниям на языке VHDL схемы в заданных базисах лоrических элементов. Такие крупнейшие фирмы производитепи проrраммноrо обес.. печения САПР в области микроэлектроники, как Cadence, Synop... 
6 Предисловие sys и мноrие друrие используют ЯЗЫК VHDL н качестве языка не... ходноrо описания проектон. VHDL это МОЩНЫЙ язык, он позволяет описывать поведе... иие" т. е. алrоритмы функционирования ЦИфРОВЫХ систем, а также ПрОБОДИТЬ иерархическое Функционально--структурное описание систем, имеет средства ДЛЯ описания параллельныx асинхронных процессов, реryлярныx (систолических) структур и в то же время обладает возможностями языка проrpаммирования BLICOKoro урон-- ия позволяет создавать свои типы данных, имеет широкий набор арифметических и лоrических операций и т.д. Язык VHDL был разработан в США по инициативе министер... ства обороны этой страны. В 1987 r. VHDL был принят в качестве стандарта ANSI/IEEE Std 1076...1987. Данный стандарт часто пазы... вают VHDL' 87. Затем язык был усовершенствован, НОВЫЙ стандарт ANSI/IEEE Std 1076...1993 (стандарт VHDL'93) появился в 1993 r. Язык VHDL развивается, ему посвящаются международные конфе.. ренции, выходят научные журналы, в которых изучаются проблемы использования VHDL. Он стал языком разработки международных проектов, в ТОМ числе осуществляемых с помощью всемирной ком... пьютерной сети Intemet. Знакомство с этим языком необходимо для эффективной работы по созданию самой разнообразной электрон... ной аппаратуры на современной элементной базе сверхбольших ИН.. теrpальных схем. Данная книrа предназначена ДЛЯ первоначалъноrо ознаком... пения с языком VHDL. Приводимые в ней опреде'ления синтакси", ческих конструкций языка ориентируются на стандарт VHDL '93. В приложении дается синтаксис стандарта VHDL '93. Основной упор в книrе делается на применение языка VHDL на этапах ал- rоритмическоrо и лоrическоrо проектирования цифровых систем, она оказалась незаменимой при начальном изучении языка VHDL сту дентами Белrосуниверситета (специализация «Математическая электроника») и студентами факультета компьютерноrо проекти", рования Белорусскоrо rосударственноrо университета информа тики и радиоэлектроники. При написании книrи за основу был взят материал лекционных курсов, читаемых автором в этих вузах на протяжении ряда пет. В конце каждой rлавы даются вопросы, задачи и упражнения ДЛЯ самостоятельной работы. Книrа будет 
Предисловие 7 полезна как для студентов и аспирантов соответствующих специ.. альноетей, так и для специалистов, занимаЮЩИХСJl разработкой электронной аппаратуры с помощью средств САПР. Данное третье издаIJИС книrи пополнено ПЯТОЙ rлавой, содер- '" жащеи методические материалы, взJlтыIe из практики преподавания языка VНDL в университетах. 
rлава 1 Основные элементы языка VHDL 1.1. Структурное и поведенческос описание UИфрОDОЙ системы Цифровая система может быть описана на уровне поведения посредством описания функций, реализуемых системой, и IIa СТРУК- турном уровне. СтруктУР1l0е описаuие это описание системы в виде СОВО'" купности компонент (подсхем, элементов) и связей между компо- неllтами. Поведеllческое описаllие ЭТО описание системы при помощи """ некоторых процедур на уровне зависимостеи ВЫХОДОВ ОТ ВХОДОВ. Иначе rО80рЯ, поведенческое описание залает алrоритм, реализуе..  '"' МЫИ системои.. Цифровая система может быть сложной, как, например, мик...  ропроцессор или весьма простои, как лоrическая схема, состоящая из нескольких лоrических элементов (вентилей). ECTeCТBeIIHO, некоторые компоненты системы в структурном описании MOryT состоять из нескольких частей КОМПОJIент более низкоrо уровня иерархии описаJIИЯ. Представляя отношение вхож.. дения подсхем в схемы в виде rpафа, можно получить дерево (rpаф)  иерархии описания вееи системы.. Например, пусть цифровая система S (рис. 1.1) реализует сле- ДУЮЩИЙ алrоритм. На вхолные полюсы системы S подаются два двухразРЯДНЫХ числа а = (а2, аl), Ь == (Ь2, Ы), rде а2, Ь2 старшие разряды чисел 8, Ь соответственно и х управляющий сиrнал [3]. Если х == 1, система S должна персмножитъ числа 8, Ь и выдать четырехразрядное ЧИСЛО d == (d4, dЗ, d2, dl), rде d == а х Ь.. 
Оси081lые эле.меllmы языка VHDL 9 Если х == О, то числа 8, Ь ДОЛЖНЫ быть сложены, при этом в разряде d4 всеrда должен быть НУЛЬ, в разряде d3 перенос с2, в разряде d2 старПIИЙ разряд суммы s2 в разряде dl - младший разряд суммы s 1. Предпопаrается, что (а2, аl) + (Ь2, Ы) == (с2, s2, sl). Мы описали алrоритм, который должна реализовать система S, на русском языке. Однако для автоматизированпоrо (компьютер.. ното) проектирования требуется формальная спецификация. Ь2 ы а2 аl 1 .. 1 I I I  . ... . I . I . . I . I . . I I .  . .. - . I . ... i I S I I I . . I . .  I . ... ... 1 I ... I I . I I .......... I ................... : I .. I j . d4 dЗ d2 dl Порты х Рис. 1.1. Цифровая система S 
10 rлйва J Формальные спецификации ДОЛЖНЫ быть записаны на соот... ветствующем формальном языке. Позже будет показано, что алrо... ритм, реализуемый системой S, может быть очень коротко описаll на языке VНDL. Если же рассматривать структурный уровень опи- сания системы S, ТО можно леrко увидеть, что в систему S ВХОДИТ двухразряд1lЫU суМJИаmор и двухразрядный УМ1l0ж:итель. ДвухразрядllЫЙ су.м.матор ЭТО устройство ДЛЯ сложения двухразРЯДНЫХ чисел, двухразрядllЫЙ УJИ"ожuтель устройство ДЛЯ перемножсния двух чисел, каждое из которых имеет только два разряда. В систему S ДОЛЖНО ВХОДИТЬ также простейшее устройство управления и схема дизъюнктивноrо объединения ВЫХОДНЫХ сиrна... ЛОВ. Структура системы S изображена на рис. 1.2. d4 d3 d2 dl Ь2 bl   .,j .,j .,j  dd J  J ..  .. .  .. . J  14 t3 t2 tl с2 s2 51 .... Пlult 2 adder 2   I ,. А А ..  .  .. .. 4 ,.  r f2 fl f4 f3 f6 [5 .... .. "" х .... УУ ..   '" j  з2 al Рис. 1.2. CTpYKrypa цифровой системы S 
ОспО811ые элемеuты языка VHDL 11 На рис. 1.2 adder......2 двухразрядный сумматор, mult......2 двухразрядный умножитель, уу устройство управления, dd схема дизъюнктивноrо формирования выходных сиmалов. Схему dd образуют три дизъюнктора. Устройство управления уу является весьма I1pOCТbIM и функционирует следующим образом: если х :::: О, то (а2, al) == (f4, 13), (Ь2, Ь 1) == (f6, f5), (п, f1) == (О, О), т. с. числа а, Ь подаются на вход сумматора adder....2. Если же х == 1, то (f4, fЗ) == (О, О), (f6, f5) == (О, О), (а2, аl) == (12, f1), Т. с. числа 8, Ь подаются на ВХОД умножителя mult.....2. Пусть описание системы S имеет имя VLSII. Тотда иерархия CТPYKтypHoro описания системы S будет иметь ВИД (рис.l.З) VLSI 1  adder 2 mult 2  уу dd Рис. 1.3. Дерево иерархии cТPYКтypHoro описания системы S Рассмотрим двухразрядный умножитель mult......2. На ВХОД дан.. ной схемы (рис. 1.4) поступают сиrналы rl, rO, 81, 80. Сиrналы rl, rO интерпретируются как двухразрядное целое число r == (rl, rO), сиrна.. лы 81, sO как двухразрядное целое число s == (81, 80). Выходныс сиrНaJIЫ в t3, t2, tl, tO представляют собой разряды числа t == (t3, t2, tl, tO) про изведения чисел S, r: (tЗ, t2, tl, tO) :::: (rl, rO)x(sl, 80). 
12 rлава 1 t3 t2 tl tO I J . .11-    J I i I  addl circ2 1 J addl circ 1 - I I I j  J  i I рЗ  J. A р4 р2 and2 el 4 and2 eI 3   рl 1 .  j '" . J sl  .... rl rO I i and2 еl 2 and2 е] 1 1 f .....  . j .. . '" j sO ...  I .... I _. I J ! i I , i f , . i . . I , ! i , I r1 rO I I I I . , ................. ......... ............ ..  '" Рис. 1.4. ДвухразрЯДНЫЙ умножитель mult2 в схему ВХОДЯТ элементы двух типов addl и and2. Элемент and2 представляет собой лоrический элемент И ..... двухвходовыи конъюнктор. Заметим, что на языке VHDL знак & употребляется не для.. обозначения лоrической операции «И» (конъюнкции), а для опера... ции конкатенации векторов. Оператором лоrической КОНЪЮНКЦИИ служит оператор and, поэтому описание ФУНКЦJJИ элемента and2 на языке VHDL выrлядит СЛСДУЮIIИМ образом: у <== х} and х2; 
ОСllО611ые элемеllты языка V1IDL 13 rдс х 1, х2 имена ВХОДНЫХ сиrналов, у имя выходноrо сиrнала, <== оператор назначения сиrнала (будет рассмотрен позже). Элемент addl представляет собой одноразрядный полусумма.. тор, функционирование Koтoporo описывается таблицей истинности (табл. 1.1). Таблица 1.1  ы Ь2 сl sl О О О О О 1 О 1 1 О О 1 1 1 1 О в данном случае Ь 1, Ь2 интерпретируются как одноразрядные числа, s 1 сумма, с 1 перенос в СЛСДУIОЩИЙ разряд. В привычной математической записи булевы ФУНКЦИИ 81, с] MOryT быть представлены СЛСДУЮIЦИМ образом: ...... ...... S 1 == Ы еэ ь2 == ( bl л Ь2 )v( Ы л Ь2), с 1 == bl л Ь2. в языке VI-IDL функционирование элемента addl записывает.. ся следующим образом: 81 <== «ыl and (not Ь2» or (not Ы) and Ь2»; сl <== Ы and Ы; .... rде or оператор лоmчсскои дизъюнкции; and оператор лоrической конъюнкции; not оператор отрицания. Итак, в дерево проскта схемы умножителя, которую назовем mu)t 2, ВХОДЯТ элемент and2 и подсхема addl. Если использовать  лоrические элементы or2 (двухвходовый дизъюнктор) И inv (инвер.. тор) и and2 (двухвходовый конъюнктор) ДЛЯ реализации подсхемы addl, то дерево проекта будет трехуровневым. 
14 rлава 1 Элементы and2, or2, inv являются листьями проекта. Ли-- . 'LI стья проекта не имеют составных чается и называются примити.. вами проекта.. Примитив описывается ТОЛЬКО на повсденческом уровне. Объектами проекта для двухразрядноrо умножителя являют... ся mult 2, addl, and2. .... Обозначение корня дерева (mult.......2) является именем проекта.. Каждый объект проекта имеет два различных типа описаний: описание объекта «В целом» (cntity); описание архитектуры объекта (architecturc). Упрощенно можно сказать, что описаl-lие объекта «В целом» СОСТОИТ ИЗ имени объекта и описания портов (ВХОДОВ, ВЫХОДОВ) объекта. Описание объекта «В целом» в языке VHDL носит Ifззва... иие «интерфейс» объекта. Чтобы отличать один объект проекта ОТ друrоrо, термин cntity будет пониматься иноrда и как объект про.. екта. Для сиrналов, подаваемых, снимаемых с портов указывается вид (режим, направление) сиrнала: ВХОДIIОЙ (in), ВЫХОДНОЙ (out) и cro тип. Описание объекта проекта and2 имеет ВИД. cntity and2 is port (xl, х2: in BIT; у: out BIT); cnd and2; .. дскларация имени объекта проекта .... декларация ВХОДIIЫХ портов ..... декларация выходноrо порта architecturc functional of and2 is дсклараuия архитектуры bcgin у <== хl aod х2; ...... описание функции объекта cnd functional; в тексте данной проrpаммы имеются комментарии. КоММеН.... тарий начинается двумя смежными дефисами и продолжается до конца строки. В данном примере BIT ЭТО тип сиrнала. Архитектурное те.. по может определять поведение объекта проекта непосредственно (быть ПРИМИТИ80М), либо представлятъ собой структурную деком... 
Основные элементы языка VHDL 15 позицию на более простые компоненты. Описание объекта проекта addl: cntity addl is port (bl, Ь2 : in BIT; cl, sl : ont BIT); end addl; 8rchitecture struct 1 of add 1 is ...... begin sl <== «Ы and (not Ы» or «not Ы) and Ь2»; сl <== Ы and Ь2; end 8truct 1 ;  Описание объекта проекта mnlt.....2: entity mult...... 2 is port (sl, 80, rl, rO : in BIT; t3, t2, tl, tO : ont BIT); end mult...... 2; architccture structure of mult 2 is ..... component addl port (Ы, Ь2: in BIT; сl, 81: out BIT); end componcnt; signal рl, р2, рЗ, р4 : BIT; begin tO <== rO and 80; р2 <== rO and 81; рl <== rl and sO; р4 <== rl and sl; circl: addl port тар (pl, р2, р3, tl); circ2: addl port map (рЗ, р4, t3, t2); end structure; в описании архитектуры объявляются (декларируются) две подсхемы (компоненты). После ключевоrо слова bcgin прИВОДЯТСЯ экземпляры описаний. Каждый экземпляр имеет уникальную метку (circl, circ2 метки). Каждый экземпляр имеет карту портов (роМ тар). Карта портов отражает связь между входами, выходами опи.. саний компонента и экземплярами компонента. Заметим, что в дан.. ном описании мы использовали понятие компонента (подсхемы) для addl, в то время как лоrические элементыI И схемы мы описали на 
16 Fлава 1 функциональном уровне, не используя понятие компонеmа. Воз... .... " можность проведения таких смешанных описании является важноя полезной особенностью языка VНDL. Данная rибкостъ весьма удоб... на при проектировании на начальных этапах, коrда важно получить точное алrоритмическое описанис, не вдаваясь в детали С1руктур... v "" нои орrанизации некоторых частеи проекта. Аналоrично можно рассмотреть двухразрядный сумматор adder.......2 (рис. 1.5), состоящий из двух подсхем addl, add2, rде addl это уже известный нам одноразРЯДНЫЙ полусумматор, а add2 од... норазрядный сумматор, функционирование KOToporo описывается следующей таблицей ИСТИНIIОСТИ (табл. 1.2): Таблица 1.2 сl al а2 с2 82 О О О О О О О 1 О 1 О 1 О О 1 О 1 1 1 О 1 О О О ] 1 О 1 1 О 1 1 О 1 О 1 1 1 1 1 Описание объекта "роекта add2: entity add2 is port (cl, аl, а2: in BIT; с2, 82: оп. BIT); cod add2; . architecture struct 1 of add2 is ...... begin s2 <== «not cl) and (not аl ) and а2 ) or «not cl) and аl and (по. а2» or ( сl and (not 81) and (not а2) ) or (аl and а2 and cI); с2 <== (аl and сl) or (а2 and cl) or (аl aod а2 ); cnd struct 1; ...... 
Основuые элементы языка VJIDL 17 а с2 sl s2 А8 .. adder 2 ...... t t t t аl Ы а2 Ь2 б sl 82  .  I ...........  .............01 addl сl add2   .... .... .     J .. с2 ы Ь2 аl а2 Рис. 1.5. ДвухразРЯДНЫЙ сумматор (аl, Ы)+{а2, Ь2) == (с2, s2, sl): а условное обозначение; 6 схема в виде K8CKaднoro соединения одноразрядноrо полусумматора add 1 и одноразрядноrо сумматора add2 в дерево проекта для подсхемы addcr...... 2 входят подсхемы addl, add2, а VНDL..описание имеет ВИД entity adder  2 is port (аl, ы1' а2, Ь2 : 10 BIT; с2, 82, s 1 : out BIT); end adder 2; ..... architecture structure of adder 2 is  component addl port (ы1, Ь2: in BIT; cl, sl: out ВIТ); cnd component; 
18 rЛQеQ J component add2 port(cl, аl, а2: in BIT; с2, s2: out BIT); cnd component; signal cl: BIT; begin cjrcl: addl port тар (Ь1, Ы, cl, sl); circ2: add2 port тар (cl, аl, а2, с2, 82); cod structure; Можно заметить, что в различные подсхемы ВХОДИТ addl, при этом подсхема addl, входящая в сумматор adder ......2, является листом проекта и поэтому описана на поведенческом уровне. Подсхема addl, входящая в умножитель mult......2, описана на структурном уровне. Предлаrасм читателю самостоятельно описать подсхему addl в виде объекта проекта, используя примитивы and2, or2, inv. Итак, VНDL....Код для структурното описания системы S (СМ. рис. 1.2) выrлядит следующим образом: entity v lsi  1 15 port (а2, а1, Ь2, Ы, х: in BIT; д4, d3, d2, dl: out BIT); end vlsi 1;  architecture structure ofvlsi ] is component adder......2 ...... декларация компонента port (al, ы1, а2, Ь2: in BIT; с2, s2, s 1: out BIT); end component; component mult2 port(sl, 50, rl, rO: in BIT; tЗ  t2, t 1, tO: out BIT); end component; component dd .... декларация компонента роп (хl, х2, хЗ, х4, х5, х6 : in BIT; уl, у2, уЗ : out BIT); ...... ....... декларация компонента 
ОСIIО8uые элемеllты языка VHDL 19 end component; component уу ... декларация компонента port( а2, аl, Ь2, ы1, х : in BIT; ffi,5,,fl,п,fl:outb; end component; signal f1, й, fЗ, f4, f5, f6, t4, t3, t2" tl, с2, 82, sl: BIT; ..... декларация внутренних сиrналов begin circl: уу . port map ( а2, аl, Ь2, Ы, х, f6, f5, f4, fЗ, 12, fl); circ2: mult 2  port тар ( 12, f1, Ь2, Ы, d4, t3, t2, tl); сirсЗ: adder 2  port шар ( f4, 13, f6, f5, с2, 82, 81); circ4: dd port тар ( 81, tl, 82, t2, с2, t3, dl, d2, dЗ); cnd structure; Описания подсхем УУ, dd на функциональном уровне имеют u . следующии вид: cntity УУ is port (а2, аl, Ь2, ы1, х : in BIT; f6, f5, f4, fЗ, 12, f1 : out BIT); end УУ; architecture struct 1 оС УУ is  begin f1 <== х aod аl; п<== х aod а2; fЗ<== not х and аl; f4 <== not х aod а2; f5 <== not х and ы1; f6 <== not х and Ь2; end struct 1 ; ...... entity dd is 
20 rлава 1 port (хl, х2, хЗ, х4, х5, х6 : in BIT; уl, у2, уЗ : out BIT); end dd; architecture struct 1 оС dd is ...... begin yl<== х] or х2; у2<== хЗ or х4; уЗ<== х5 or х6; end struct 1 ; ...... Дерево проекта для системы S изображено на рис. 1.6. VLSI 1  adder 2 mult 2 уу dd addl add2 and2 addI Рис.l.6. Дерево проекта цифровой системы S Приведем ОДИН из вариантов алrоритмическоrо описания сие... темы S в цепом. Следует обратить внимание на то, что входные и выходные сиrналы интерпретируются как целые числа, что позволя... ет сдслать aлrоритмическое описание весьма компактным. entity vlsi 1 is port (з, Ь : in integer range О to 3; х : in BIT; D : out integer range О to 15); end vlsi 1; ...... 
Основные элементы языка VHDL 21 architecture functional of vlsi 1 is ..... signal е: integer range О to 15; begin рО: process(a, Ь, х) begin if (х == 'О') then е <== а + Ь; elsif ( х == '1 ') then е <== а * Ь ; end if; end process; D <== е; end functional; Как ВИДНО, оно значительно компактнее CтpyктypHoro описа.. пия. Очевидно, что переход от алrоритмическоrо описания к струк" турному представляет значительный практический интерес. К сожа.. v лению, автоматическии переход возможен только для подмножества языка VHDL. Такое подмножество языка называется сuнтезuруе.. -МЫМ. Получение функционально"структурной схемы по ее алrорит.. мическому описанию называется 8ЫСОКОУРО81lевы-м сuнтезом в от.. личие от лоzuческоzо синтеза, коrда по Функционально",структур" НОМУ описанию цифровой системы надо получить лоrическую схе... му из заданных базисных лоrических элементов. Проrpамму, осу.. ществляющую по VНDL..описанию ситез схемы, например схемы FPGA, часто называют компwzяторо,М. Однако в системах модели.. рования VНDL..кодов под компиляцией также понимается прео6ра.. зование VНDL..кода в промежуточный ЯЗЫК, с которым оперируют непосредственно проrpаммы моделирования. Как и для языков про- rpаммирования, сборку откомпилированных модулей осуществляет ПрОУрамма LINK. Проrpамма, осуществляющая проверку синтакси" ческой корректности, называется VНDL...аllaJluзаторо.м. 
22 rлава J Приведенное VНDL..описание системы S станет ПОПЯТНЫМ позже, коrда будут введены типы даННЬ1Х и основные операторы языка VНDL операторы процессов, назначения сиrналов и др. 1.2. Лексические элементы и типы данных Лексические элементы, разделители, операторы. Текст на языке VHDL есть последовательность раздельных лексических элементов, таких как . идентификатор; . разделитель; . ключевое (зарезервированное) слово; . литерал (десятичный базовый, СИМВОЛЬНЫЙ, СтрОКQБЫЙ, стро- ка бит); ..... . комментарии. Смежные лексические элементы разделяются . разделителями; . концами строк; . знаками форматирования. Разделитель есть один из следующих специальных символов: &().+?..../:;< == >1 СостаВ1l0Й разделитель есть композиция двух смежных специальных символов ==> ** :== /:= >== <== < > Пример. VНDL...предложение А <== в and с. , имеет шесть лексических элементов <<А», «<}), «В», «and», «С», «;» · Два из шести лексических элементов являются разделителем: « <==» (составной разделитель оператор назначения сиrнала); « ; » В качестве разделителей в данном примере используются про.. белы, однако нет необходимости иметь разделитель между операто- ром « ; » и лексическим элементом «С». 
Основные элемеиты языка VHDL 23 Ко.м.ментарuй начинается с двух смежных дефисов и про.. должается до конца строки. Комментарии не учитываются при МО" делировании VНDL...описаний и синтезе схем по VНDL..описаниям.. Идентификаторы Определение. basic ......identifier ::== letter { [underline ] letter.... or  digit }  Внимание! Здесь и далее формальная запись сиiпаксических КОНСТРУКЦИЙ языка VНDL основывается на формах Бэкуса Наура, употребление которых разъясняется в Приложении 1. Далее важная информация" на которую следует обратить особое внимание, будет сопровождаться только восклицательным знаком. Для 06леrчения понимания КОНСТРУКЦИЙ языка VНDL в данной книrе будем использовать также упрощенную форму: будем записы.. вать общий вид консtpУКЦИИ, В записи конструкции будут ключевые слова и друrие символы алфавита языка VНDL, фразы pyccKoro ЯЗЫ" ка и символы фиrypные и квадратные скобки, вертикальные чер.. точки. Используемые фиryрные скобки, также как и при задании   форм Бэкуса Наура, будут служить ДЛЯ обозначения повторения выражения, заключенноrо в них; вертикальная черта для обозна... чепия альтернативных случаев; квадратные скобки для обозначе.. ния необязательноrо выражения или нео6язательноrо слова (см.. приложение 1).. ! При изучении языка VHDL и написании проrpамм настоятельно рекомендуем пользоваться точными определениями синтаксиче.. -... ских конструкции, приводимыми В описаниях соответСТВУЮЩИХ стандартов [10, 11].. Идеllтифuкаторы употребляются как пользовательские имена и "КЛючевые слова. Идентификатор должен начинаться с буквы (не цифры). Может употребляться кроме букв и цифр, знак подчеркивания.. Два ПОДРЯД идущих подчеркивания не допускаются.. 
24 rлава 1 ! в VНDL"коде нет различия между прописныии и строчными 6YI\'" вами. АЬС7 эквивалентно аВС?, А 3 не эквивалентно АЗ.. Идентификатор не должен оканчиваться подчеркиванием. Пример. Правилъные Идентификаторы Неправильные Идентификаторы Сапу  OUT Dim Sum ...... Count7SUB  2goX АаВВЬ 7АВ (начинается с цифры) А@В (специальный символ @) SUМ(кончается подчеркиванием) PI ......  А (два подчеркивания подряд) Зарезервuрова""ые (ключевые) слова Как и мноrие друrие языки проrpаммирования, VHDL имест ключевые (спеЧUШlЬ1iые) слова. Список ключевых слов (стандарт VHDL '87) abs access after alias аl1 and architecture array assert attribute begin block body buffer bus case component configuration constant disconnect downto else elsif end entity exit file for function generate . guarded if . . genenc In lnout . label 1ibrary linkage loop IS тар mod nand new next 
ОСIIОВllые эле.меllты языка VHDL 25 Окончание таблицы nar not nul1 of оп орen or others out package port procedure process range record register сет report retum select severity signal subtype then to transport type units  unti1 U8e variable wait when whi1e with xor в стандарт VНDL'93 добавлены следующие слова: sra 8rl postponed shared unaffected group . Impure reject sll inertia1 соl literal pure sla сос xnor  Литералы Классификация литералов (константных числовых значе.. пий) языка VНDL приведена на рис. 1.7. Десятичный лuтерШl может быть целым, вещественным или  вещественным с экспонентои. Примеры. Целые литералы: 21, О, lE2, 3е4, 123......000. Вещественные литералы: 11.0, 0.0, 0.468, 3 .141......592...... 6. Вещественные литералы с экспонентой: 1.2зЕ......l1, 1.0Е+4, З.О24Е+23. Знак экспоненты Е может бьпь строчным либо ПРОПИСНЫМ. Подчеркивание в десятичном литерале не является значащим. Экс" понента для целоrо литерала не должна иметь знак МИ:нУс. Базовый лuтерШl указывает на систему счисления: от двоич" '-1 .... нои до шестнадцатеричнои: 
26 Fлава 1 Двоичная 2# 1111 1100# Всезти  . UUестнадцатеричная 16# fc# литералы имеют UПестнцдцатеричная 016# OFC# значение 252 Десятичная 10#252# Семерична.ч 7# 510# Literal (литерал ) Abstract (абстрактный) Character (символь'Ный) String (строковый) BitString (строка бит) Decimal (десятичный) Based (базовый) Рис. 1.7. Классификация литералов Число 16#6#Еl означает 6 * 16 ** 1 это число 96 в десятич... ной системе счисления: 96 == 6х 161. СИМВОЛ * знак умножения ** возведение в степень. Число 2ЕЗ не является целым, Зе4 это число 3 х 104.. сu.мволыlйй JluтерШl формируется одним из СИМВОЛОВ (бук) между апострофами: 'А','а','%', '" (литерал апостроф), ' , (пробел); 'А' отличается от 'al в случае сИМВоПьноrо литерала. СтрОКО8ЫЙ литерал формируется как послсдовательность букв (ВОЗМОЖНО пустая) между двумя кавычками, употребляемыми как строковые скобки. 
ОС1l0811ые элементы языка VHDL 27 Строковый литерал должен располаrаться в ОДНОЙ строке. Для формирования <<ДЛИННЫХ» строковых литералов может быть упот... реблена операция конкатенации & (напомним, что для оператора лоrическоrо И употребляется оператор AND). Литерал "строка бит" ЛuтерШl "строка бит" формируется как последовательность цифр О, ..., 9, А, ..., F (или а, ..., f) между двумя кавычками. Подчер.. .. кивание в таком литерале не является значащим. Литерал "строка бит" может быть В бинарным; О восьмеричным; Х mестнадцатеричным. Очевидно, вместо прописных букв В, О, Х MOryT употреблять.. ся строчные буквы Ь, o х. Длина C1pOKOBoro битовоrо литерала есть число бит в после.. довательности, представляю щей литерал. для примера: все литера.. лы X"F  РР", 0"7777", В "1111  1111......111111 имеют длину 12. Примеры. . В" 1010110" О" 126" Х"56" .... длина 7 ..... эквивалентно В"ООl 010 110", длина 9 ...... ..... ..... эквивалентно В"О101 0110", длина 8 ...... Пакеты Пакет (package) в VНDL это VHDL"TexcT, который может .... включать множество декларации: . типов; . подтипов; . констат; . процсдур; . функций; . компонент; . и др. 
28 rлава J в теле пакета (packagc body) находятся тела ФУНКЦИЙ, тела процедур и друrие vНDL....описаНия (рис. 1.8). Однако в пакете не декларируются, а в тело пакета не записываются entity, архитектур... ные тела (architecture), конфиryрации (configuration). Функции и процедуры иноrда называют подпРО2рам.мами. Пример ФУНКЦИИ языка VНDL: функция NOW возвращает текущее время системы моделирования. Приведем только пример деклара... ции процедуры, более подробно подпроrpаммы будут рассмотрены далее. entjty archjtecture configuration 6 6. package package body Рис. 1.8. В пакете MOryT размеlцаться различные VНDL..описания Пакет multiplexcr показываст, что процедура МХ декларирует.. ся в пакете и тело процсдуры определяется в теле пакета. package multiplcxer is proccdurc МХ( sgnal SEL : in bit; 
ОСllовные элементы языка VHDL 29 signal хО : in bit; signal х 1 : in bit; signal F : out bit); end multiplexer; paekage body multiplexer is procedure МХ( signaI SEL : in bit; signal хО : in bit; signal х 1 : in bit; signal F : out bit) is begin case SEL is when 'О' ......> F <== хО. , when others ==> F <== х 1 ; end case; cod МХ; end multiplexer; Типы Большинство языков проrpаммирования предусматривает раз.. личные типы данныI,, и язык VHDL не является в этом смысле НС-- ключением. Однако, поскольку этот. язык используется для пред- ставления аппаратных проектов в самых разНЫХ вариантах, средства типизации данных приобретают здесь особенно важное значение. Например, они дают разработчику возможность представить rpуппу линий (проводиикав ) шины В виде . массива битов; . целоrо числа. В языке VНDL реализована строzая типизация. Эrо означает, что смешение различных типов в одной операции является ошиб.. кой. Средства cтpororo контроля типов иrpают ответственную роль, поскольку позволяют уточнять намерения разработчика [1]. Тип поименованное множество значений с некоторыми 06... Щими характеристиками. Подтип подмножество значений данноrо типа. Например, тип NA ТURAL есть подтип типа INTEGER. Классификация типов языка VНDL дана на рис. 1.9. 
30 Fлава J Типы Скалярный Составной Файл Доступ Целый Вещественный Физический ПеречиСЛИМЫЙ Рис. 1.9. Классификация типов Типы определяются обычно в . пакете; . процессе; . архитектурном теле. Тип «целый» Примеры декларации целых ТИПОВ. type byte......int is range О to 255; type signed......word......int is rangc 32768 to 32767; type bitindex is range 31 downto о; в та6л. 1.3 приведены основные ТИПЫ данных языка VНDL. В пакете ST ANDARD (СМ. приложение 3), поставляемом с системами моделирования и синтеза, декларируются типы БОО.. LEAN, BIT, BIT VECTOR, INTEGER!f POSITIV, NATURAL, CНARACTER, STRING, а также ТИП TIME. 
Основные эле.меllты языка VHDL 31 Таблица 1.3 Лоrические Арифметические Символьные ТИПЫ ТИПЫ типы BOOLEAN INТEGER CHARACTER (булев) (целый) (символьный) BIT POSITIV SТRING (БИТQБЫЙ) (положительный) ( стрОКОБЫЙ) BIT VECTOR NAТURAL ....  (БИТQВЫЙ вектор) (натуральный) - REAL ... (вещественный) Тип BOOLEAN состоит из значений TRUE (истина), FALSE (ложь). Все операторы IF (если) в языке должны проверять объекты или выражения этоrо типа. Тип BIT состоит из значений 0,1. Значение TRUE типа БОО... LEAN не эквивалентно значению 1 типа BIT, аналоrично, значение F ALSE не эквивалентно значению о. Тип CНARACTER, по сути дела, представляет набор симво.. лов кода ASCII. Числовые типы имеют диапазон (range), или область значений. Примеры. type INDEX is range О to 9; ...... тип целый, type VOLTAGE is range 0.0 to 10.0; ..... тип вещественный. Физический тип Поскольку VHDL это язык описания аппаратуры, в нем предусмотрены физические типы. Например, тип TIМE (время) МО" жет бьrrъ описан следующим образом type ТIМE is range О to lЕ20 units fs; ps == 1000fs; 
32 rлава 1 =: 1000ps; == lOOOns; == lOOOus. , :;:: lOOOms; == 60s. , nr =: 60min; cnd units; ns us ms s . mlП в качестве базовой выбрана фемтосекунда (1015 с). Диапазон (lЕ20) обеспечивает максимальныIй период времени 100000 с (27,7 ч). Естественно, диапазон оrpаничивается ДЛИНОЙ слова инструмен.. LI тальнои машины. ПеречиСЛUJНые типы Примеры перечислимых ТИПОВ. type logic....Jevel is (unknown, low, undriven, high); type alu......function is (disable, pass, add, subtract, multiply, di.. vide ); type octaldigit is ('О', '1 " '2', '3', '41, '5', '6', '7'); Определения некоторых перечислимых типов: type severity ......1cvel is (note, warning, error, failurc); type boolean is (false, true); type bit is ('О', '1 '); Составные типы это тип «массив» (индексируемый тип) и тип «запись» (структурныIй тип). Массивы Примеры декларации типа «массив». type word is array (31 downto О) of bit; 
ОС1l0вные зле.менты языка VHDL 33 type memory is array (address) оС word; type transform is array (1 to 4, 1 to 4) ofreal; type registerbank is аиау (byte range О to 132) ofinteger; Тип BIT...... VECTOR определяет массив битов, например BIT VECTOR (О to 7). Тип BIT VECTOR есть тип массива, который  ...... нсявно описывается следующим образом: type BIT..... VECTOR is array (NA ТURAL range <» оС BIT; BIT базовый тип элементов массива, выражение NA TURAL rangc (диапазон натуральный) это стандартный способ указать, что длина массива будет задаваться диапазоном натуральных чи.. сел. Пользователь должен задавать конкретный диапазон при при-- менении TaKoro типа, например, BIT...... VECTOR (О to З) возрастающий диапазон, BIT ...... VECTOR (7 downto О) убывающий диапазон. Пример. r  signal DataBus: bit vector (7 downto О); 1 О О 1 О 1 О 1 7 6 5 4 3 2 1 О номер разряда DataBus  "10010101" DataBus(7)=='1 ' DataBus( 6)=='0' DataBus( 5)'O' DataB us (4)==' 1 , DаtаВus(З )=='0' DataBus(2)=='1 ' DataBus( 1 )=='0' DataBus(O)'1 ' 
34 rлава J Прнмеры массивов, определяемых пользователем (рис. 1.1 О). 3 2 1 О 15 14 ... 2 1 О О .. . 1 ... . .. . .. . .. . .. . .. . .. .. . .. . . .. . . . . . .. . .. . . .. " .. . . . . .. . .. . 4094 r . 4095 о 1 /'"  ""'"" "-, " " 1022 1023 lk х 4 4k х16 signal Memlk4: штау(О to 1023) ofbit vесtоr(З downto О); signal Mem4k 16: array(O to 4095) ofbit vector(l5 downto О); Рис. 1.10. Примеры массивов, определяемых пользователем Пример Д8умерноrо массива. Туре TWODIMENSION is array (natural range <>, natural rangc <» оС bit; Записи Тип «запись» v ..... ..... это составнои ТИП, СОСТОЯIЦИИ из ряда полеи. Примеры декларации типа <<запись». . .. type lnstructlon IS rccord ор  code : processor  ор; address modc: mode;  operandl, operand2: integer rangc О to 15; end rccord; 
Основные элемеllты языка VHDL 35 type Instr...... Т is record , Mnemonic: String (О to 5); Code: Bit......vector (3 downto О); ExeCycles: Integer; end record; signal Instr 1, Instr2, Instr3: Instr Т; ...... Примеры сиrналов типа Instr...... Т Instrl.Mnemonic:"add regl, reg2" Instr 1. Code: "0010" Instrl. ExeCycles: 2 Instr2.Mnemonic:"or regl, reg2" Instr2. Code: "0001" Instr2. ExeCycles: 1 Instr3 . Mnemonic: "null reg 1, reg2" IпstrЗ. Code: "111 О" IпstrЗ. ExeCycles: 8 Например, тип ОА ТЕ (дата) можно описать как тип «запись» следующим образом: type DATE is record DA У: INTEGER range 1 to 31; MONTH: MONTH ТУРЕ; ...... YEAR:INТEGER rangc О to 3000; end record; Здесь MONTH......ТYPE (имя месяца) это перечислимый ТИП, содержащий имена месяцев. Определение данноrо перечислимоrо типа содержится в разд. 2.1 (см. описание оператора case). VНDL предусматривает (СМ. ри. 1.9) определенныe типы фай.. лов (FILE) и типы доступа (ACCSESS). В данной книrе они не рас-- сматриваются. 
36 Fлава J Подmипы КО1,версuя типов Подтип определяется как тип с оrpаничением (уточнением) следующим образом subtype имя подтипа is базовый тип [уточнение]; Например, пусть базовый тип определен так Туре big......integer is rangc О to 2000; Тоrда ПОДТИП smal1......integer может быть определен так Subtypc small......integer is biginteger range О to 15; СмеПJение типов в VHDL ЭТО ошибка. Однако значения подтипа MOryT быть переданы типу (конверсия типов). Прнмер. Туре biginteger is rangc О to 2000; Subtypc smaJlintcgcr is bigjntcgcr range О to 15; Sigпаl intcnncdiatc : smallintcgcr; Signal final : bigintcgcr; . . . Iin'-ll < inlnl1cdiatc * 5; .. IIT UIlIИUКИ. КОНВСрСИЯ ТИПОВ в данном фраrмснтс VНDL"кода НСТ ОIlIи6ки, так как smallintegcr ссть ПОДТИП баЗО80rо типа. bigintegcr. Если же типы определяются независимо друr ОТ друrа, то при.. ..... своение значении одноrо типа лруrому невозможно, Тоо е. ПРИВОДИТ к ОПIибкс. Пример. Туре big......integer is rangc О to 2000; Туре smallinteger is rangc О to 15; Signal intermediate : small....intcger; Signal final : bigintegcr; . . . Final <== intennediatc * 5; ..... ОUIибка, смешение типов 
ОСIIО811ые элементы языка VHDL 37 1..3. Декларации Имеются три класса объектов языка VHDL: . константы; . сиrналы; . переменные. С помощью объектов языка VHDL описываются объекты про- екта, Т. с. различные подсистемы проектируемой (моделируемой) цифровой системы. Поэтому, eCTeCTBeI!HO, следует отличать объек" ты проекта от объектов языка VHDL ДеЮlарация KOHcтaHты Общий вид конструкции, употребляемой при декларации кон.. стаит одноrо и Toro же типа constant список констант : тип [ :== выражение] ; в VHDL константы подобны константам в друrих языках проrpаммирования. Примеры декларации констант. constant PERIOD: time:== 100 ns; constant PI: real:== 3.14159; constant WIDTH: integer:== 32; constant DEFAULT: bitvector(O to З):== "0101"; const8nt 8, Ь, с, d : integer :== 5; Каждая из декларированных в последней строке констант а, Ь, с, d равна 5. Если символов «:» нет в декларации константы, то константа называется задержаllН,ОU. Такие константы MoryT быть в разделе деклараций пакета. Соответствующая полная декларация появляется в теле пакета. Если 8 VНDL"коде символы «:==» следуют после выражения, ТО выражение принимает значение объекта, находящеrося справа от данных символов, при этом, естественно, не должно быть смешения ТИПОВ. 
38 rлава J ДеIOlарация nере.менной Общий вид КОНС'Ipукции, употребляемой при декларации пе.. ременных variabIe список переменныx : тип [ :== выражение]; Перемеll1lая в VHDL подобна идентификатору, употребляе.. мому в дрyrих языках проrpаммирования BыoKoroo уровня. 3наче-- ние переменной может быть инициализировано и изменено не.мед.. леНIIО после выполнения предложения, присваивающеrо "еремеи.. ..... нои новое значение. Примеры декларации переменны.. variabIe ROM, COLUМN: integer range О to 31; variabIe COUNT : positive :== 100; variabIe MEMORY: TWODIMENSION (О to 15, О to 31); variabIe а, Ь, с, d: bit :== '1 '; Каждая из декларированных в последней строке битовых пе... ременных а, Ь, с, d равна '1'. Декларация сиZНШlQ Общий вид конструкции, употребляемой при декларации сиr... налов одноrо типа signal список сиrналов : тип [register I bus] [:== выражение]; в необязательной опции [register I bBS] может быть указано только одно из ключевых слов либо слово register, либо слово ЬО5. Концепция сuzuшzа в VНDL является ОДНОЙ из самых важных. Сиrналы подобны (соответствуют) физическим линиям (ПрОБQДНИ" кам), которые соединяют элементы схемы.. Сиrналы и переменные будут рассмотрены далее.. 
ОС1l081lые элементы языка VHDL 39 Примеры декларации снrналов. signal CLK, RESETn: bit; signal COUNTER: integer range О to 3 1 ; signal RAM: TWODIМENSION (О to 15, О to 31); signal INSTRUCTION: bitvector (15 downto О); signal а, Ь, с, d: bit :== 'О'; Как видно из последней строки примера, сиrналам при декла...  рации может быть "рисвоено начальное значение. Декларация компонента Общий вид конструкции, употребляемой при декларации ком.. понента component имя компонента generic (список параметров); port (список портов); end component; Список портов, - начинающийся с ключевоrо слова port, опре.. деляет имя, направление (режим тоде) и тип каждоrо порта. Тип порта это тип сиrнала, аССQциированноrо с данным портом. Ha правление порта может быть: in входной порт, опt выходной, inout двунаправленный, linkage, Ьпffеr. Компоненты, имеющие направления портов linkage или buffer, в данной книrе не будут рас... сматриваться. Компоненты декларируются в архитектурном теле прежде оператора begin. Ключевое слово generic служит для пере.. дачи параметров, чаще Bcero таких, как разрядность, число полюсов и друrих настраиваемых параметров. Примеры настраиваемых па.. рамеТРО8 будут даны позже. Компонент является частью проекта. Ero реализация осуществляется соответствующим entity и одним либо несколькими архитектурными телами. ,В . · entlty и декларируемом компоненте должны совпадать специ-- фикации.. 
40 rлава 1 1.4. Интерфейс и архитектура объекта Понятие eпtity определяется как «интерфейс объекта проекта». В entity описывается интерфейс между объектом проекта и окруже... вием, в котором употребляется объект. «Внутренность» объекта в entjty не описывается и может быть уподоблена «черному ящику». Термин «архитектура» безотносительно к языку VНDL может быть определен как распределение функций, реализуемых системой, по отдельным ее уровням и точное определение rpаниц между эти... ми уровнями. К термину «архитектура» близок термин «структура», пони... "  маемыи как совокупность элементов системы и связен между ними. Архитектура это структура системы на функциональном уровне ее описания. Архитектурное тело (architecture) определяет тело объекта, Т. е. раскрывает внутренность «черноrо ящика». В архитектурном теле описываются ФУНКЦИИ (поведение) либо структура объекта проекта. В приведенном ниже примере архитектурные тела RТL 1, RTL2 задают поведение схемы, представленной на рис. 1.11. Архи.. тектурпые тела, в данном примере ЗТО RTLl, RTL2, MOryT быть раз.. личными, задавая одно и то же поведение. Пример. entity ANDOR is port (xl, х2, хЗ : f : , end ANDOR; in bit; out bit); architecture RTLl of ANDOR is begin f <== (хl and х2) or х3; end RTLl; architecture RTL2 of ANDOR is signal w : bit; begin w <== xl aod х2; рl : process (w, х3) 
Основные элементы языка VHDL 41 begin f<== w or х3; end process рl; end RTL2; ----------------- I I I I I I I I I I хl I I I I & I I I х2 W I I I 1 I I I I I I I I f I IX3 I I I I I architecture 1: I IL. .... -:- .... .... ..... ... ... .... .... -- -- ... .... I I I mb I I .........------------------ Рис. 1.11. Комбинационная лоrическая схема ф в entity (в разделе деклараций) наряду с декларацией портов MoryT быть декларированы параметры. Для деЮIарации таких пара... метров употребляется ключевое слово generic (настраиваемый).. С по.. . мощью genenc MOryт передаваться такие параметры, как ширина (разрядность) шины, число входных либо выходных полюсов, за.. держки элементов и т. д. Пример декларации объекта с настраиваемым (изменяемым) параметром N. entity Cate is . generlc (N: Natural:== 4); port (Inputs: in bit...... vector ( 1 to N); Result: ont bit); end Cate; 
42 rлава J Изменяя параметр N, можно получать объект Cate с различ.. ныIM числом ВХОДОВ. При ЭТОМ вносить друrие изменения в VНDL.. код нет необходимости. Прнмер «минимальной» декларации объекта entity TestBench is end TestBench; в rЛА4. будет показано, ЧТО минимальная декларация объекта проекта используется при отладке VНDL...описания. Прнмер использования generic для описания объекта Proces.. sor с переменной шириной шины (рис. 1. 12). а 2 Processor 1 О DataBus BusWidth == 3 б 3 2 Processor 1 О DataBus BusWidth == 4 Рис. 1.12. Объект Processor с переменной шириной шины: а ширина ШИНЫ равна З; 6 ширина шины равна 4 
Основные эле.меllты !lЗыка VHDL 43 entity Processor is generic (BusWidth: Intcger:== З); port (DataBus: inout bit.... vector (Bus Width  1 downto О); . . . ); end Processor; 1.5. Атрибуты Атрибуты это значения, связанные с поименованным эле... ментом объектом языка VHDL. В VHDL имеются предопределенные (predejiпed) атрибуты и определенные пользователем (user--dejiпed) атрибуты. Для построе.. ния моделей и моделирования важную роль иrpают атрибуты сиrна.. ЛОВ. Например, предопределенный атрибут event ассоциируется с каким--либо сиrналом (например, с сиrналом CLK). Атрибут запп.. сыаетсяя CLK'event. Этот атрибут имеет тип BOOLEAN с значени.. ем TRUE, коrда значение CLK изменилось. Атрибут S'last...... value (прошлое значение S) предыдущее значение, которое сиrнал имел непосредственно перед последним изменением s. ОтIfОСИТСЯ к тому же самому типу, что и s. Атрибут S'trans8ction имеет тип bit, атрибут изменяет СБое значение в циклах моделирования, в которых происходит изменение (транзакция) s. Атрибут S'stabIe(T) имеет тип BOOLEAN. Атрибут имеет истинное значение, если сиrнал S стабилен в течение последних т единиц времени. Если Т == О, атрибут записывается S'stabIe. Атрибуты сиrналов, в том числе и такие, как S'delayed(t), S'quiet(t), S'transaction, S'active(t), S'last......cvent, S'driving, S'drivin value используются rлавным образом при моделировании. Пример. На рис. 1.13 показано, как изменяются значения ат-- риБУТQВ ex'transaction, ex'event, ex'last......value при изменении сиrна.. па ех. Временная диаrpамма (рис.. 1.13) получена в результате моде.. ЛИрования следующеrо VНDL"кода. 
44 Fлава 1 entity signalex is end signal ех; architecture beh 01 signal ех is signal ех, уl, уЗ : bit; signal у2 : boolean; begin ех <== 'О' after 20 ns, '1' alter 50 nS, 'О' after 60 ns, '1' after 80 ns; уl <== ex'transaction; у2  ex'event; уЗ <== ex'last value; end ЬеЬ; Ons 10ns 20ns 30ns 40ns 50ns БОns 70ns 80ns 90ns 1 (}О ns Время I I I I . I I I I I I ех 1 I I I о 1 t I I I уl о 1 J у2 о 1 I I уЗ о Рис. 1.13. Изменение сиrнала ех и ero аtpибутов На временной диаrpамме (рис. 1.13) значение true сиrнала у2 представляется единичным значением, значение false нулевым значением. Рассмотрим на временной диаrpамме (рис. 1.13) измене... ине значения у 1 атрибута 'transaction сиrнала ех. В момент вре-- мени 20ns произошла транзакция сиrнала ех (назначение сиrнала 'О' after 20 ns), поэтому атрибут изменил свое значение, следующее из.. менение произошло в момент времени 50 ns, Т. е. тоrда, коrда про.. изошло следующее изменение сиrнала ех, и Т. д. Атрибут 'event (сиrнал у2) один раз изменил свое значение, а именно, после Toro, как первый раз изменилось значение сиrнала ех. Атрибут 'last value (сиrнал уЗ) показывает предыдущее значение сиrнала ех. При моделировании и синтезе схем большее значение имеют следующие предопределенные атрибуты типа (та6л. 1.4). 
Основные элементы языка VHDL 45 Таблица 1.4 предопределенныIe атрибуты А'Ipибут Тип атрибута Результат объекта S S 'Ieft такой, как S крайнее левое значение в S S'right tt крайнее правое значение в S  ...... S'low tt нижняя rpаница   S'high " верхняя rpаница  ...... S'ascending boolean truet если S возрастающеrо диапа"'ЗОН8, false в противном случае S'image(x) string текстовое представление значения х типа S S'value(t) базовый тип S значение в S, представленное С1рОКОЙ t S'pos(x) integer номер позиции объекта х в S S'val(x) базовый тип S значеl:lие в позиции х в S S'succ(x) базовый тип S значение в позиции на единицу боль... ше, чем х S 'pred базовый тип S значение в позиции на единицу мень...  те, чем х S'leftof(x) базовый тип S значение левой от х позиции в S S'rightof(x) базовый тип S значение правой от х ПОЗИЦИИ в S S'base базовый тип S базовый тип S с использованием атрибута 'high в пакете STANDARD опре... деляются подтипыI NA ТURAL, POSIТIVE subtype natural is integer range О to integer'high; subtype positive is integer range 1 to integer'high; Полезный набор атрибутов относится к массивам (табл.l.5). Атрибуты A'left(N), A'right(N), A'high(N), A'low(N) ассоции.. РУЮТСЯ с массивом объектов или конструируемым массивом подти" П08. Атрибуты возвращают значение N..ro объекта в массиве. Пара... метр N является необязательныM и по умолчанию равен 1. Атрибут TS'base возвращает базовый тип TS. 
46 rлава 1 Таблица 1.5 А триБУТЬJ типа «массив» Атрибут Результат S tleft левая rpаница S S'right правая rpаница S S ')ow нижняя rpаница S S'high верхняя rpаница S S'range(n) v диапазон индексов пи размерноCПl S Ireverse..... range(n) .... перевернутыи по направлению и rpаницам диапа  зон индексов nи размерности 81Ienght(n) длина диапазона индексов размерности n 81ascending (п) true, если S возрастающеrо диапазона, false в противном случае Пример. Пусть тип type А  БУТЕ есть массив бит убывающеrо диапа ЗОllа (7 downto О). Тоrда ABYTE'left == ABYТE'high == 7; l\......BYТE'low == А...... BYTE'right == о; в случае typc tablc is array (1 to 8) ofbit; variabIe апау......l : table :== "00001111 "; значением атрибута апау  1 'Ieft является 1 тающеrо диапазона. левая rpаница возрас- Прнмеры. 1. Пусть Туре TWODIMENSION is array (natural range <>, natural range <» о! bit; 
Основные элементы языка VHDL 47 signal RAM: TWO......DIМENSION (О to 10, О to 15); Тоrда RAM'left(2) = RAM'Iow(2) == RAM'low(l) == RAM'Iow == == RAM'left == RAM'left(l) == о; RAM'high(l) == RAM'right(l) == 10; RAM'high(2) == RAM'right(2) == 15; 2. Пусть Туре newvalues is (low, high, middle); Тоrда значением атрибута new...... values'pred (high) является '} ow' . з. Ниже приведен тест для определения значений атрибутов типа vector, декларированноrо type vector is array (7 downto О) of bit; как массив бит у6ывающеrо диапазона. entity testattr...... vector is end test attr vector;   architecture beh оС test attr vector is ...... ...... typc vector is array (7 downto О) ofbit; signal х : vector; signal А, В, С, D : integer; signal Е : boolean; signal F, О, Н : integer; begin А <== vector'left. , В <== vector'right; С <== vector'low; D <== vector'high; Е <== vector'ascending; F <== vector'range; G <== vector'reverse...... range; Н <== vector'length; end ЬеЬ; 
48 rлава 1 в результате моделирования А == 7, В == О, С == О, D == 7, Е == false, F == 7, G == О, Н == 8. 4. Ниже приведен тест для определения значений атрибутов перечислимоrо типа, состоящеrо из элементов аl, ы1, а2, Ь2, а3, Ь3, w. entity test attr  scalar is end test...... attr ...... scalar; architecture ЬеЬ of test attr scalar is ......  type new...... values is (аl, Ь 1, а2, Ь2, а3, Ь3, w); signal А, В, С, D : new...... values; signal Н : integer; signal К, L, М, N, Р : new  values; begin А <== new  values'left; В <== new...... values'right; С <== new values'low;  D <== new  values'high; Н <== new  vаluеs'роs(ЬЗ); К < new values'val(2); ...... .... L <== new...... values'succ(w); .... bad L <::::: new  values'succ(b3); М <== new  values'pred(b2); .... N <== new...... values'leftof(al); ..... bad N <== new...... values'leftof(bl); ...... Р <== new  values'rightof(w); .... bad Р <== new...... vаluеs'rightоf(ЬЗ); end ЬеЬ; в строках, оформленных как комментарии, содержатся при.. меры ошибок: неправомерно пытаться определить значение атрибу.. та 'leftof ДЛЯ элемента аl (назначение сиrнала N). Также неправо" мерно «заходить» за правую rpаницу перечислимоrо типа, Т. е. пы... таться узнать значения атрибутов 'rightof, 'succ для элемента w (на.. значение сиrналов L, Р)оо 
Основные элементы языка VHDL 49 в результате моделирования А == al, В == W, С = аl, D == w, Н 5 К == а2 L == w М == а2 N аl Р == w , , , , , . в некоторых системах моделирования реализация атрибутов может быть иная в таких системах можно «заходить» за rpаницы перечислимых ТИПОВ. Атрибуты, определенные пользователем Если атрибут определяется пользователем, то сначала дек.. ларируется ero ТИП, а затем определяется значение. Значение МО... жет быть сиrналом либо друrим объектом языка VHDL. Опреде... ленный пользователем атрибут при употреблении предваряется знаком' (апостроф). Пример определенноrо пользователем атри.. бута 'two .....Iength signal vect : bit vector (О to 5); attribute two length : integer; attribute two...Jength ofvect : signal is (vect'length) * 2; . . . с <== vect'two .. .1ength; Сиrнал С типа integer получит значение 12, так как длина vect'length массива vect равна 6. Атрибуты) определяемые пользователями, MOryT быть введе... ны не только для снrналов) НО и для меток, компонент и Т. д. [7].. 1.6. Имена Имеllа употребляются для обозначения декларируемых объек", ТОВ. Простые и.ме1lа являются идентификаторами, такими как COUNTER, CLK. Индексированные име1lа употребляются ДЛЯ обозначения эле.. ментов массива, например, RAМ(I,З) элемент двумерното масси... Ба, INSTRUCTION(5) элемент одномерноrо массива. Интервал uмеl' одномерноrо массива: INSTRUCTION (7 downto О).