AHDL (англ. Altera Hardware Definition Language) — комп'ютерна мова опису апаратних засобів, розроблена компанією Altera, що призначена для опису комбінаційних логічних пристроїв, цифрових автоматів і таблиць істинності з врахуванням архітектурних особливостей ПЛІС цієї фірми. Мова має Ada-подібний синтаксис; порівнюючи AHDL з Verilog можна зазначити, що це наче мова асемблера та мова високого рівня: перша має більше контролю, проте немає високорівневої підтримки.
AHDL | |
---|---|
Парадигма | паралельна |
Система типізації | сильна |
Під впливом від | Ada, VHDL, Verilog |
Звичайні розширення файлів | TDF (англ. Text Design File) |
AHDL, природно, сумісний з компіляторами фірми Altera: та та дає можливість створювати ієрархічні проєкти в рамках цієї мови чи комбінувати різні типи файлів в один проєкт.
Структура програми
Програма на мові AHDL має визначену структуру. Її розділи повинні слідувати в такому порядку:
Назва | Призначення | Особливості |
---|---|---|
Заголовок (англ. Title Statement) | Дає назву модулю | Починається з ключевого слова TITLE, за яким слідує назва модуля. |
Оператор включення (англ. Include Statement) | Включає вміст вказаного файлу в текст програми | Починається з ключевого слова INCLUDE, за яким слідує ім'я файлу, без шляху до нього. |
Оголошення константи (англ. Constant Statement) | Присвоює імені константи число | Починається з ключевого слова CONSTANT, за яким слідує ім'я, символ (=), а далі число чи арифметичний вираз. |
Оператор визначення (англ. Define Statement) | Присвоює арифметичним виразам символьні імена | Починається з ключевого слова DEFINE, за яким слідує ім'я зі списком аргументів, за яким ставиться символ (=), а далі арифметичний вираз. |
Оголошення параметрів (англ. Parameters Statement) | Оголошує параметри модуля | Починається з ключевого слова PARAMETERS, за яким слідує список параметрів. Значення параметру за замовчуванням вказується після символу (=). |
Опис прототипу (англ. Function Prototype Statement) | Описує параметри модулів, що використовуються | Починається з ключевого слова FUNCTION, за яким слідує ім'я, а потім список входів. Якщо модуль параметризований, далі йде ключове слово WITH і список параметрів. Потім вказується ключове слово RETURNS і список виходів модуля. |
Оператор опцій (англ. Options Statement) | Визначає елемент з меншим індексом | Починається з ключевого слова OPTIONS, за яким слідує ключове слово BITO, символ (=), а далі одне з ключевих слів: LSB (молодший розряд), MSB (старший розряд) чи ANY (будь-який). |
Оператор контролю (англ. Assert Statement) | Перевіряє істинність логічного виразу | Починається з ключевого слова ASSERT, за яким в дужках слідує арифметичний вираз. Якщо значення виразу false, на екран виводиться повідомлення, записане після ключевого слова REPORT. |
Опис модуля (англ. Subdesign Section) | Задає ім'я модуля й перераховує його порти | Починається з ключевого слова SUBDESIGN, за яким слідує назва модуля та список виводів в дужках. В кінці списку однотипних виводів вказується їх тип. |
Розділ змінних (англ. Variable Section) | Задає внутрішні змінні | Починається з ключевого слова VARIABLE, за яким слідують імена однотипних змінних, а далі тип змінних. Розділ може містити оператор IF GENERATE, що керує створення змінних залежно від результату арифметичного виразу. |
Опис логіки (англ. Logic Section) | Описує функціонал модуля | Починається з ключевого слова BEGIN, закінчується ключевим словом END. |
З усіх названих, лише розділи опису модуля та логіки є обов'язковими; заголовок, оператор опцій, розділи змінних, опису модуля та логіки можуть вживатися в програмі лише раз.
Конструкції мови
Множина символів мови
До множини символів мови відносять букви, цифри та спеціальні символи, призначення яких наведено в таблиці нижче.
Символ | Функція |
---|---|
-- | Коментар в стилі VHDL, що продовжується до кінця рядка |
% | Ставляться з обох боків коментаря в стилі AHDL |
() | Використовуються для підвищення пріоритету в операціях, оточують порти в іменах модуля та списки параметрів |
[] | Використовуються для створення діапазону значень |
'' | Використовуються для створення символічних імен |
"" | Використовуються в заголовку, для вказування файлу для включення, оточують цифри в недесяткових константах |
. | Відділяє ім'я файлу від розширення |
.. | Розділяє найбільші та найменші значення в діапазонах |
; | Закінчує розділи і секції мови |
, | Розділяє елементи списків та груп |
: | Відділяє символьні імена від типів |
= | Присвоює значення в операціях |
=> | Відділяє входи і виходи в таблицях істинності та операторі CASE |
З символів складаються імена, що в мові AHDL можуть даватися:
- портам, шинам;
- константам;
- змінним кінцевих автоматів, бітам та іменам станів;
- екземплярам;
- параметрам;
- функціям;
- іменованим операторам;
- сегментам пам'яті;
- підпроєктам.
Синтаксис імен в AHDL схожий на синтаксис імен в інших комп'ютерних мовах:
- ім'я може містити букви, цифри, символ підкреслення та не може бути зарезервованим словом;
- зарезервовані слова можна використовувати як символічні імена лише коли вони вживаються в одинарних лапках або в коментарях;
- великі та малі літери не розрізняються;
- ім'я повинне починатися з букви і не може закінчуватися знаком підкреслення.
Зарезервовані слова
В документації компанії Altera вказано, що для поліпшення прочитності програми зарезервовані слова варто писати великими літерами. До ключевих слів належать наступні:
AND | ASSERT | BEGIN | BIDIR | BITS | BURIED | CASE | CLIQUE | CONNECTED_PINS |
CONSTANT | DEFAULTS | DEFINE | DESIGN | DEVICE | DIV | ELSE | ELSEIF | END |
FOR | FUNCTION | GENERATE | GND | HELP_ID | IF | INCLUDE | INPUT | IS |
LOG2 | MACHINE | MOD | NAND | NODE | NOR | NOT | OF | OPTIONS |
OR | OTHERS | OUTPUT | PARAMETERS | REPORT | RETURNS | SEGMENTS | SEVERITY | STATES |
SUBDESIGN | TABLE | THEN | TITLE | TO | TRI_STATE_NODE | VARIABLE | VCC | WHEN |
WITH | XNOR | XOR |
До службових імен належать:
CARRY | CASCADE | CEIL | DFFE | DFF | EXP | FLOOR | GLOBAL | JKFFE | JKFF | LATCH | LCELL | MCELL | MEMORY | OPENDRN | SOFT |
SRFFE | SRFF | TFFE | TFF | TRI | USED | WIRE | X |
Змінні
Змінні використовуються для збереження проміжних результатів обчислень. Допустимими типами змінних є:
- NODE;
- TRI_STATE_NODE;
- імена примітивів, мегафункцій, макрофункцій та машин станів.
Кілька провідників, що несуть однакове смислове навантаження можна об'єднати в шину. Кожна з них може мати до 255 біт і працює як одне ціле. Визначити шину можна наступними способами, після чого [] стануть еквівалентними звертанню до всієї шини:
a[1..5] b[7..0] (c, d, e)
Порти
Порт — це вхід чи вихід логічної функції. Може мати один з наступних типів:
- INPUT — вхід;
- OUTPUT — вихід;
- BIDIR — двонаправлений вивід;
- MACHINE INPUT — вхід станів автомата;
- MACHINE OUTPUT — вихід станів автомата.
Мова AHDL дає можливість описати двонаправлений порт, що корисно для зменшення кількості провідників. На прикладі нижче, двонаправлений сигнал io, що запускається примітивом TRI, використовується як вхід та вихід для (D-тригера) (DFF). Варто відмітити, що входи тригера clrn та prn не підключені, що видно з відділених комами місць.
SUBDESIGN bus_register ( clk, oe : INPUT; io : BIDIR; ) BEGIN io = TRI(DFF(io, clk, , ), oe); END;
Числа
Мова AHDL підтримує запис чисел в десятковій, двійковій, вісімковій та шістнадцятковій системах числення. Таблиця нижче ілюструє формат запису чисел.
Основа системи | Формат |
---|---|
10 | <послідовність цифр 0..9> |
2 | B"<послідовність цифр 0, 1, X>" |
8 | O"<послідовність цифр 0..7>" чи Q"<послідовність цифр 0..7>" |
16 | X"<послідовність цифр 0..9, A..F>" чи H"<послідовність цифр 0..9, A..F>" |
Константи можна використати для того, щоб надати конкретному числу більше інформативності. Окрім підвищення прочитності програми, їх застосування стає корисним тоді, коли це число неодноразово повторюється. Нижче наведено приклад селектора адреси, що забезпечує підключення певного пристрою до шини лише за умови подання на його вхід адреси 21 в шістнадцятковій системі числення.
CONSTANT io_address = H"21"; SUBDESIGN address_selector ( a[15..0] : INPUT; select : OUTPUT; ) BEGIN select = (a[15..0] == io_adress); END;
Арифметичні і булеві вирази
Арифметичні вирази — це засіб формування конструкцій мови, що обраховуються компілятором і не займають ресурсів ПЛІС. Їх результатом завжди є ціле додатне число, для його отримання є функції явного задання правил округлення: CEIL (до більшого цілого) та FLOOR (до меншого цілого).
Операції, що можуть використовуватись в арифметичних виразах наведені в таблиці:
Операція | Опис | Пріоритет |
---|---|---|
+ (унарний) | Плюс | 1 |
— (унарний) | Мінус | 1 |
! (NOT) | Заперечення | 1 |
^ | Степінь | 1 |
MOD | Залишок від ділення | 2 |
DIV | Ділення | 2 |
* | Множення | 2 |
LOG2 | (Двійковий логарифм) | 2 |
+ | Додавання | 3 |
— | Віднімання | 3 |
== (numeric) | Рівність чисел | 4 |
== (string) | Рівність рядків | 4 |
!= | Не рівно | 4 |
> | Більше | 4 |
>= | Більше рівно | 4 |
< | Менше | 4 |
<= | Менше рівно | 4 |
& (AND) | Кон'юнкція | 5 |
!& (NAND) | Штрих Шефера | 5 |
$ (XOR) | Виключна диз'юнкція | 6 |
!$ (XNOR) | Заперечення виключної диз'юнкції, еквівалентність | 6 |
# (OR) | Диз'юнкція | 7 |
!# (NOR) | Стрілка Пірса | 7 |
? | Умовна операція | 8 |
Булеві вирази — це операнди, розділені знаками арифметичних, логічних операцій та операторами порівняння, згруповані дужками. Варто зазначити, що порядок слідування булевих рівнянь в програмі не важливий, оскільки логічні стани встановлюються одночасно.
Операції, що можуть використовуватись в булевих виразах наведені в таблиці:
Операція | Опис | Пріоритет |
---|---|---|
— | Доповнення до 2 | 1 |
! | Інверсія | 1 |
+ | Додавання | 2 |
— | Віднімання | 2 |
== | Рівно | 3 |
!= | Не рівно | 3 |
> | Більше | 3 |
>= | Більше рівно | 3 |
< | Менше | 3 |
<= | Менше рівно | 3 |
& (AND) | Елемент «І» | 4 |
!& (NAND) | Елемент «І-НЕ» | 4 |
$ (XOR) | Елемент «ВИКЛЮЧНЕ АБО» | 5 |
!$ (XNOR) | Елемент «ВИКЛЮЧНЕ АБО-НЕ» | 5 |
# (OR) | Елемент «АБО» | 6 |
!# (NOR) | Елемент «АБО-НЕ» | 6 |
Приклади використання
Комбінаційна логіка
Комбінаційна логіка — це кінцеві автомати без пам'яті, що реалізуються за допомогою булевих виразів та таблиць істинності.
Таблична логіка
Таблична логіка в мові AHDL реалізується за допомогою наступного синтаксису:
- оператор починається ключевим словом TABLE, за яким йде заголовок таблиці;
- в заголовку перераховуються список входів, символ (=>) та список виходів;
- наступні рядки таблиці містять списки значень входів і виходів, розділені символом (=>). Вхідні значення можуть бути в неважливому стані X, проте варто слідкувати, щоб діапазони значень не перекривались в межах однієї таблиці;
- оператор закінчується ключевими словами END TABLE.
На прикладі нижче наведено контролер, що формує управляючі сигнали для відображення цифр в шістнадцятковій системі числення на семисегментному індикаторі.
% -a- % % f| |b % % -g- % % e| |c % % -d- % SUBDESIGN segment7 ( i[3..0] : INPUT; a, b, c, d, e, f, g : OUTPUT; ) BEGIN TABLE i[3..0] => a, b, c, d, e, f, g; H"0" => 1, 1, 1, 1, 1, 1, 0; H"1" => 0, 1, 1, 0, 0, 0, 0; H"2" => 1, 1, 0, 1, 1, 0, 1; H"3" => 1, 1, 1, 1, 0, 0, 1; H"4" => 0, 1, 1, 0, 0, 1, 1; H"5" => 1, 0, 1, 1, 0, 1, 1; H"6" => 1, 0, 1, 1, 1, 1, 1; H"7" => 1, 1, 1, 0, 0, 0, 0; H"8" => 1, 1, 1, 1, 1, 1, 1; H"9" => 1, 1, 1, 1, 0, 1, 1; H"A" => 1, 1, 1, 0, 1, 1, 1; H"B" => 0, 0, 1, 1, 1, 1, 1; H"C" => 1, 0, 0, 1, 1, 1, 0; H"D" => 0, 1, 1, 1, 1, 0, 1; H"E" => 1, 0, 0, 1, 1, 1, 1; H"F" => 1, 0, 0, 0, 1, 1, 1; END TABLE; END;
Умовна логіка
Умовна логіка в мові реалізується операторами IF та CASE.
Оператор CASE, як і в більшості комп'ютерних мовах, визначає вписок альтернативних варіантів, один з яких виконується при певному значенні селектора. Його синтаксис наступний:
- оператор починається ключевим словом CASE, за яким записується селектор, а потім — ключове слово IS;
- кожен альтернативний варіант починається ключевим словом WHEN, після якого йде константа, потім символ (=>) та набір операторів;
- на відміну від інших, останній альтернативний варіант може починатися з WHEN OTHERS;
- якщо селектор рівний одній з констант, виконується блок її операторів, якщо ж така константа не передбачена — виконується блок з WHEN OTHERS;
- завершується оператор ключевими словами END CASE.
Нижче наведено приклад дешифратора, що перетворює двохрозрядний код на вході в код «one hot» (чотири значення, кожне має одну одиницю):
SUBDESIGN decoder2x4 ( code[1..0] : INPUT; out[3..0] : OUTPUT; ) BEGIN CASE code[] IS WHEN 0 => out[] = B"0001"; WHEN 1 => out[] = B"0010"; WHEN 2 => out[] = B"0100"; WHEN 3 => out[] = B"1000"; END CASE; END;
Послідовна логіка
Регістр
Регістр необхідний для збереження інформації і створюється після його оголошення в розділі змінних. На прикладі нижче сформовано восьмирозрядний регістр, що використовує виходи як D-тригери, що дає економію ресурсів мікросхеми.
SUBDESIGN register8 ( clk, load, d[7..0] : INPUT; q[7..0] : OUTPUT; ) VARIABLE q[7..0] : DFFE; -- виводи оголошені тригерами BEGIN q[].clk = clk; q[].ena = load; q[] = d[]; END;
Лічильник
Лічильник зазвичай створюється з використанням оператора IF. Синтаксис його використання наступний:
- оператор починається з ключевого слова IF, за яким вказується булева умова, а потім ключеве слово THEN і список операторів, що виконуються при вірності умови;
- між ключевими словами ELSEIF та THEN може бути додатковий вираз, а за THEN — список операторів, що виконуються якщо цей вираз виконується;
- за цією конструкцією (що є необов'язковою, але може повторюватись багато разів), може слідувати ключове слово ELSE з списком операторів, що виконуються тоді, коли інші умови не вірні;
- оператор завершується ключевим словом END IF.
В наступному прикладі реалізовано чотирьохрозрядний лічильник зі скиданням.
SUBDESIGN counter4 ( clk, load, ena, clr, d[3..0] : INPUT; q[3..0] : OUTPUT; ) VARIABLE count[3..0] : DFF; BEGIN count[].clk = clk; count[].clrn = !clr; IF load THEN count[].d = d[]; ELSEIF ena THEN count[].d = count[].q + 1; ELSE count[].d = count[].q; END IF; q[] = count[]; END;
Машина станів
Машина станів в AHDL — це мовна структура, що дозволяє описувати скінченний автомат в вигляді множини внутрішніх станів. Переходи між станами синхронізуються тактовим сигналом. Умова та напрямок переходу визначаються для кожного стану індивідуально. Кожному стану можна поставити у відповідність один чи кілька управляючих сигналів.
Машина станів описується як змінна в відповідному розділі, а її поведінка — у розділі логіки. Поведінку машини можна описати двома способами:
- за допомогою оператора CASE;
- за допомогою конструкції TABLE.
Нижче наведено приклади двох видів автоматів — автомата Мура та автомата Мілі. Відмінності між ними полягають в тому, що автомат Мура — машина станів з синхронними сигналами на виходах. Формування вихідного сигналу виконується синхронно з переходом до наступного стану по стробу синхросигналу.
SUBDESIGN moore ( clk, reset, y : INPUT; z : OUTPUT; ) VARIABLE ss: MACHINE WITH STATES (s0, s1, s2, s3); zd: NODE; BEGIN ss.clk = clk; ss.reset = reset; z = DFF(zd, clk, VCC, VCC); -- вихідний тригер, що синхронізує зміну сигналу TABLE -- поточний стан, вхідний сигнал, наступний стан, вихідний сигнал ss, y => ss, zd; s0, 0 => s0, 0; s0, 1 => s2, 1; s1, 0 => s0, 0; s1, 1 => s2, 1; s2, 0 => s2, 1; s2, 1 => s3, 0; s3, 0 => s3, 0; s3, 1 => s1, 1; END TABLE; END;
А от автомат Мілі — це машина станів з асинхронними сигналами на виходах. Формування вихідного сигналу здійснюється комбінаційною логікою. Після переходу до наступного стану, синхронізованого тактовим сигналом, зміна вихідного сигналу відбувається з затримкою, яку вносить комбінаційна логіка.
SUBDESIGN mealy ( clk, reset, y : INPUT; z : OUTPUT; ) VARIABLE ss: MACHINE WITH STATES (s0, s1, s2, s3); BEGIN ss.clk = clk; ss.reset = reset; TABLE -- поточний стан, вхідний сигнал, вихідний сигнал, наступний стан ss, y => z, ss; s0, 0 => 0, s0; s0, 1 => 1, s1; s1, 0 => 1, s1; s1, 1 => 0, s2; s2, 0 => 0, s2; s2, 1 => 1, s3; s3, 0 => 0, s3; s3, 1 => 1, s0; END TABLE; END;
Див. також
Література
- Бродин В. Б., Калинин А. В. Системы на микроконтроллерах и БИС программируемой логики. — М.: Издательство ЭКОМ, 2002. — 400 с.: илл. — . (рос.)
- Каршенбойм И., Косткин М. Шпаргалка для перехода от AHDL к VHDL. [ 18 жовтня 2011 у Wayback Machine.] — Компоненты и технологии № 1, 2003. (рос.)
- Стешенко В. Б. ПЛИС фирмы ALTERA: проектирование устройств обработки сигналов. — М.: ДОДЭКА, 2000. — 128 с. — . (рос.)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
AHDL angl Altera Hardware Definition Language komp yuterna mova opisu aparatnih zasobiv rozroblena kompaniyeyu Altera sho priznachena dlya opisu kombinacijnih logichnih pristroyiv cifrovih avtomativ i tablic istinnosti z vrahuvannyam arhitekturnih osoblivostej PLIS ciyeyi firmi Mova maye Ada podibnij sintaksis porivnyuyuchi AHDL z Verilog mozhna zaznachiti sho ce nache mova asemblera ta mova visokogo rivnya persha maye bilshe kontrolyu prote nemaye visokorivnevoyi pidtrimki AHDLParadigmaparalelnaSistema tipizaciyisilnaPid vplivom vidAda VHDL VerilogZvichajni rozshirennya fajlivTDF angl Text Design File AHDL prirodno sumisnij z kompilyatorami firmi Altera ta ta daye mozhlivist stvoryuvati iyerarhichni proyekti v ramkah ciyeyi movi chi kombinuvati rizni tipi fajliv v odin proyekt Struktura programiPrograma na movi AHDL maye viznachenu strukturu Yiyi rozdili povinni sliduvati v takomu poryadku Nazva Priznachennya OsoblivostiZagolovok angl Title Statement Daye nazvu modulyu Pochinayetsya z klyuchevogo slova TITLE za yakim sliduye nazva modulya Operator vklyuchennya angl Include Statement Vklyuchaye vmist vkazanogo fajlu v tekst programi Pochinayetsya z klyuchevogo slova INCLUDE za yakim sliduye im ya fajlu bez shlyahu do nogo Ogoloshennya konstanti angl Constant Statement Prisvoyuye imeni konstanti chislo Pochinayetsya z klyuchevogo slova CONSTANT za yakim sliduye im ya simvol a dali chislo chi arifmetichnij viraz Operator viznachennya angl Define Statement Prisvoyuye arifmetichnim virazam simvolni imena Pochinayetsya z klyuchevogo slova DEFINE za yakim sliduye im ya zi spiskom argumentiv za yakim stavitsya simvol a dali arifmetichnij viraz Ogoloshennya parametriv angl Parameters Statement Ogoloshuye parametri modulya Pochinayetsya z klyuchevogo slova PARAMETERS za yakim sliduye spisok parametriv Znachennya parametru za zamovchuvannyam vkazuyetsya pislya simvolu Opis prototipu angl Function Prototype Statement Opisuye parametri moduliv sho vikoristovuyutsya Pochinayetsya z klyuchevogo slova FUNCTION za yakim sliduye im ya a potim spisok vhodiv Yaksho modul parametrizovanij dali jde klyuchove slovo WITH i spisok parametriv Potim vkazuyetsya klyuchove slovo RETURNS i spisok vihodiv modulya Operator opcij angl Options Statement Viznachaye element z menshim indeksom Pochinayetsya z klyuchevogo slova OPTIONS za yakim sliduye klyuchove slovo BITO simvol a dali odne z klyuchevih sliv LSB molodshij rozryad MSB starshij rozryad chi ANY bud yakij Operator kontrolyu angl Assert Statement Pereviryaye istinnist logichnogo virazu Pochinayetsya z klyuchevogo slova ASSERT za yakim v duzhkah sliduye arifmetichnij viraz Yaksho znachennya virazu false na ekran vivoditsya povidomlennya zapisane pislya klyuchevogo slova REPORT Opis modulya angl Subdesign Section Zadaye im ya modulya j pererahovuye jogo porti Pochinayetsya z klyuchevogo slova SUBDESIGN za yakim sliduye nazva modulya ta spisok vivodiv v duzhkah V kinci spisku odnotipnih vivodiv vkazuyetsya yih tip Rozdil zminnih angl Variable Section Zadaye vnutrishni zminni Pochinayetsya z klyuchevogo slova VARIABLE za yakim sliduyut imena odnotipnih zminnih a dali tip zminnih Rozdil mozhe mistiti operator IF GENERATE sho keruye stvorennya zminnih zalezhno vid rezultatu arifmetichnogo virazu Opis logiki angl Logic Section Opisuye funkcional modulya Pochinayetsya z klyuchevogo slova BEGIN zakinchuyetsya klyuchevim slovom END Z usih nazvanih lishe rozdili opisu modulya ta logiki ye obov yazkovimi zagolovok operator opcij rozdili zminnih opisu modulya ta logiki mozhut vzhivatisya v programi lishe raz Konstrukciyi moviMnozhina simvoliv movi Do mnozhini simvoliv movi vidnosyat bukvi cifri ta specialni simvoli priznachennya yakih navedeno v tablici nizhche Simvol Funkciya Komentar v stili VHDL sho prodovzhuyetsya do kincya ryadka Stavlyatsya z oboh bokiv komentarya v stili AHDL Vikoristovuyutsya dlya pidvishennya prioritetu v operaciyah otochuyut porti v imenah modulya ta spiski parametriv Vikoristovuyutsya dlya stvorennya diapazonu znachen Vikoristovuyutsya dlya stvorennya simvolichnih imen Vikoristovuyutsya v zagolovku dlya vkazuvannya fajlu dlya vklyuchennya otochuyut cifri v nedesyatkovih konstantah Viddilyaye im ya fajlu vid rozshirennya Rozdilyaye najbilshi ta najmenshi znachennya v diapazonah Zakinchuye rozdili i sekciyi movi Rozdilyaye elementi spiskiv ta grup Viddilyaye simvolni imena vid tipiv Prisvoyuye znachennya v operaciyah gt Viddilyaye vhodi i vihodi v tablicyah istinnosti ta operatori CASE Z simvoliv skladayutsya imena sho v movi AHDL mozhut davatisya portam shinam konstantam zminnim kincevih avtomativ bitam ta imenam staniv ekzemplyaram parametram funkciyam imenovanim operatoram segmentam pam yati pidproyektam Sintaksis imen v AHDL shozhij na sintaksis imen v inshih komp yuternih movah im ya mozhe mistiti bukvi cifri simvol pidkreslennya ta ne mozhe buti zarezervovanim slovom zarezervovani slova mozhna vikoristovuvati yak simvolichni imena lishe koli voni vzhivayutsya v odinarnih lapkah abo v komentaryah veliki ta mali literi ne rozriznyayutsya im ya povinne pochinatisya z bukvi i ne mozhe zakinchuvatisya znakom pidkreslennya Zarezervovani slova V dokumentaciyi kompaniyi Altera vkazano sho dlya polipshennya prochitnosti programi zarezervovani slova varto pisati velikimi literami Do klyuchevih sliv nalezhat nastupni AND ASSERT BEGIN BIDIR BITS BURIED CASE CLIQUE CONNECTED PINSCONSTANT DEFAULTS DEFINE DESIGN DEVICE DIV ELSE ELSEIF ENDFOR FUNCTION GENERATE GND HELP ID IF INCLUDE INPUT ISLOG2 MACHINE MOD NAND NODE NOR NOT OF OPTIONSOR OTHERS OUTPUT PARAMETERS REPORT RETURNS SEGMENTS SEVERITY STATESSUBDESIGN TABLE THEN TITLE TO TRI STATE NODE VARIABLE VCC WHENWITH XNOR XOR Do sluzhbovih imen nalezhat CARRY CASCADE CEIL DFFE DFF EXP FLOOR GLOBAL JKFFE JKFF LATCH LCELL MCELL MEMORY OPENDRN SOFTSRFFE SRFF TFFE TFF TRI USED WIRE XZminni Zminni vikoristovuyutsya dlya zberezhennya promizhnih rezultativ obchislen Dopustimimi tipami zminnih ye NODE TRI STATE NODE imena primitiviv megafunkcij makrofunkcij ta mashin staniv Kilka providnikiv sho nesut odnakove smislove navantazhennya mozhna ob yednati v shinu Kozhna z nih mozhe mati do 255 bit i pracyuye yak odne cile Viznachiti shinu mozhna nastupnimi sposobami pislya chogo stanut ekvivalentnimi zvertannyu do vsiyeyi shini a 1 5 b 7 0 c d e Porti Port ce vhid chi vihid logichnoyi funkciyi Mozhe mati odin z nastupnih tipiv INPUT vhid OUTPUT vihid BIDIR dvonapravlenij vivid MACHINE INPUT vhid staniv avtomata MACHINE OUTPUT vihid staniv avtomata Mova AHDL daye mozhlivist opisati dvonapravlenij port sho korisno dlya zmenshennya kilkosti providnikiv Na prikladi nizhche dvonapravlenij signal io sho zapuskayetsya primitivom TRI vikoristovuyetsya yak vhid ta vihid dlya D trigera DFF Varto vidmititi sho vhodi trigera clrn ta prn ne pidklyucheni sho vidno z viddilenih komami misc SUBDESIGN bus register clk oe INPUT io BIDIR BEGIN io TRI DFF io clk oe END Chisla Mova AHDL pidtrimuye zapis chisel v desyatkovij dvijkovij visimkovij ta shistnadcyatkovij sistemah chislennya Tablicya nizhche ilyustruye format zapisu chisel Osnova sistemi Format10 lt poslidovnist cifr 0 9 gt 2 B lt poslidovnist cifr 0 1 X gt 8 O lt poslidovnist cifr 0 7 gt chi Q lt poslidovnist cifr 0 7 gt 16 X lt poslidovnist cifr 0 9 A F gt chi H lt poslidovnist cifr 0 9 A F gt Konstanti mozhna vikoristati dlya togo shob nadati konkretnomu chislu bilshe informativnosti Okrim pidvishennya prochitnosti programi yih zastosuvannya staye korisnim todi koli ce chislo neodnorazovo povtoryuyetsya Nizhche navedeno priklad selektora adresi sho zabezpechuye pidklyuchennya pevnogo pristroyu do shini lishe za umovi podannya na jogo vhid adresi 21 v shistnadcyatkovij sistemi chislennya CONSTANT io address H 21 SUBDESIGN address selector a 15 0 INPUT select OUTPUT BEGIN select a 15 0 io adress END Arifmetichni i bulevi virazi Arifmetichni virazi ce zasib formuvannya konstrukcij movi sho obrahovuyutsya kompilyatorom i ne zajmayut resursiv PLIS Yih rezultatom zavzhdi ye cile dodatne chislo dlya jogo otrimannya ye funkciyi yavnogo zadannya pravil okruglennya CEIL do bilshogo cilogo ta FLOOR do menshogo cilogo Operaciyi sho mozhut vikoristovuvatis v arifmetichnih virazah navedeni v tablici Operaciya Opis Prioritet unarnij Plyus 1 unarnij Minus 1 NOT Zaperechennya 1 Stepin 1MOD Zalishok vid dilennya 2DIV Dilennya 2 Mnozhennya 2LOG2 Dvijkovij logarifm 2 Dodavannya 3 Vidnimannya 3 numeric Rivnist chisel 4 string Rivnist ryadkiv 4 Ne rivno 4 gt Bilshe 4 gt Bilshe rivno 4 lt Menshe 4 lt Menshe rivno 4 amp AND Kon yunkciya 5 amp NAND Shtrih Shefera 5 XOR Viklyuchna diz yunkciya 6 XNOR Zaperechennya viklyuchnoyi diz yunkciyi ekvivalentnist 6 OR Diz yunkciya 7 NOR Strilka Pirsa 7 Umovna operaciya 8 Bulevi virazi ce operandi rozdileni znakami arifmetichnih logichnih operacij ta operatorami porivnyannya zgrupovani duzhkami Varto zaznachiti sho poryadok sliduvannya bulevih rivnyan v programi ne vazhlivij oskilki logichni stani vstanovlyuyutsya odnochasno Operaciyi sho mozhut vikoristovuvatis v bulevih virazah navedeni v tablici Operaciya Opis Prioritet Dopovnennya do 2 1 Inversiya 1 Dodavannya 2 Vidnimannya 2 Rivno 3 Ne rivno 3 gt Bilshe 3 gt Bilshe rivno 3 lt Menshe 3 lt Menshe rivno 3 amp AND Element I 4 amp NAND Element I NE 4 XOR Element VIKLYuChNE ABO 5 XNOR Element VIKLYuChNE ABO NE 5 OR Element ABO 6 NOR Element ABO NE 6Prikladi vikoristannyaKombinacijna logika Kombinacijna logika ce kincevi avtomati bez pam yati sho realizuyutsya za dopomogoyu bulevih viraziv ta tablic istinnosti Tablichna logika Tablichna logika v movi AHDL realizuyetsya za dopomogoyu nastupnogo sintaksisu operator pochinayetsya klyuchevim slovom TABLE za yakim jde zagolovok tablici v zagolovku pererahovuyutsya spisok vhodiv simvol gt ta spisok vihodiv nastupni ryadki tablici mistyat spiski znachen vhodiv i vihodiv rozdileni simvolom gt Vhidni znachennya mozhut buti v nevazhlivomu stani X prote varto slidkuvati shob diapazoni znachen ne perekrivalis v mezhah odniyeyi tablici operator zakinchuyetsya klyuchevimi slovami END TABLE Na prikladi nizhche navedeno kontroler sho formuye upravlyayuchi signali dlya vidobrazhennya cifr v shistnadcyatkovij sistemi chislennya na semisegmentnomu indikatori a f b g e c d SUBDESIGN segment7 i 3 0 INPUT a b c d e f g OUTPUT BEGIN TABLE i 3 0 gt a b c d e f g H 0 gt 1 1 1 1 1 1 0 H 1 gt 0 1 1 0 0 0 0 H 2 gt 1 1 0 1 1 0 1 H 3 gt 1 1 1 1 0 0 1 H 4 gt 0 1 1 0 0 1 1 H 5 gt 1 0 1 1 0 1 1 H 6 gt 1 0 1 1 1 1 1 H 7 gt 1 1 1 0 0 0 0 H 8 gt 1 1 1 1 1 1 1 H 9 gt 1 1 1 1 0 1 1 H A gt 1 1 1 0 1 1 1 H B gt 0 0 1 1 1 1 1 H C gt 1 0 0 1 1 1 0 H D gt 0 1 1 1 1 0 1 H E gt 1 0 0 1 1 1 1 H F gt 1 0 0 0 1 1 1 END TABLE END Umovna logika Umovna logika v movi realizuyetsya operatorami IF ta CASE Operator CASE yak i v bilshosti komp yuternih movah viznachaye vpisok alternativnih variantiv odin z yakih vikonuyetsya pri pevnomu znachenni selektora Jogo sintaksis nastupnij operator pochinayetsya klyuchevim slovom CASE za yakim zapisuyetsya selektor a potim klyuchove slovo IS kozhen alternativnij variant pochinayetsya klyuchevim slovom WHEN pislya yakogo jde konstanta potim simvol gt ta nabir operatoriv na vidminu vid inshih ostannij alternativnij variant mozhe pochinatisya z WHEN OTHERS yaksho selektor rivnij odnij z konstant vikonuyetsya blok yiyi operatoriv yaksho zh taka konstanta ne peredbachena vikonuyetsya blok z WHEN OTHERS zavershuyetsya operator klyuchevimi slovami END CASE Nizhche navedeno priklad deshifratora sho peretvoryuye dvohrozryadnij kod na vhodi v kod one hot chotiri znachennya kozhne maye odnu odinicyu SUBDESIGN decoder2x4 code 1 0 INPUT out 3 0 OUTPUT BEGIN CASE code IS WHEN 0 gt out B 0001 WHEN 1 gt out B 0010 WHEN 2 gt out B 0100 WHEN 3 gt out B 1000 END CASE END Poslidovna logika Registr Registr neobhidnij dlya zberezhennya informaciyi i stvoryuyetsya pislya jogo ogoloshennya v rozdili zminnih Na prikladi nizhche sformovano vosmirozryadnij registr sho vikoristovuye vihodi yak D trigeri sho daye ekonomiyu resursiv mikroshemi SUBDESIGN register8 clk load d 7 0 INPUT q 7 0 OUTPUT VARIABLE q 7 0 DFFE vivodi ogolosheni trigerami BEGIN q clk clk q ena load q d END Lichilnik Lichilnik zazvichaj stvoryuyetsya z vikoristannyam operatora IF Sintaksis jogo vikoristannya nastupnij operator pochinayetsya z klyuchevogo slova IF za yakim vkazuyetsya buleva umova a potim klyucheve slovo THEN i spisok operatoriv sho vikonuyutsya pri virnosti umovi mizh klyuchevimi slovami ELSEIF ta THEN mozhe buti dodatkovij viraz a za THEN spisok operatoriv sho vikonuyutsya yaksho cej viraz vikonuyetsya za ciyeyu konstrukciyeyu sho ye neobov yazkovoyu ale mozhe povtoryuvatis bagato raziv mozhe sliduvati klyuchove slovo ELSE z spiskom operatoriv sho vikonuyutsya todi koli inshi umovi ne virni operator zavershuyetsya klyuchevim slovom END IF V nastupnomu prikladi realizovano chotirohrozryadnij lichilnik zi skidannyam SUBDESIGN counter4 clk load ena clr d 3 0 INPUT q 3 0 OUTPUT VARIABLE count 3 0 DFF BEGIN count clk clk count clrn clr IF load THEN count d d ELSEIF ena THEN count d count q 1 ELSE count d count q END IF q count END Mashina staniv Mashina staniv v AHDL ce movna struktura sho dozvolyaye opisuvati skinchennij avtomat v viglyadi mnozhini vnutrishnih staniv Perehodi mizh stanami sinhronizuyutsya taktovim signalom Umova ta napryamok perehodu viznachayutsya dlya kozhnogo stanu individualno Kozhnomu stanu mozhna postaviti u vidpovidnist odin chi kilka upravlyayuchih signaliv Mashina staniv opisuyetsya yak zminna v vidpovidnomu rozdili a yiyi povedinka u rozdili logiki Povedinku mashini mozhna opisati dvoma sposobami za dopomogoyu operatora CASE za dopomogoyu konstrukciyi TABLE Nizhche navedeno prikladi dvoh vidiv avtomativ avtomata Mura ta avtomata Mili Vidminnosti mizh nimi polyagayut v tomu sho avtomat Mura mashina staniv z sinhronnimi signalami na vihodah Formuvannya vihidnogo signalu vikonuyetsya sinhronno z perehodom do nastupnogo stanu po strobu sinhrosignalu SUBDESIGN moore clk reset y INPUT z OUTPUT VARIABLE ss MACHINE WITH STATES s0 s1 s2 s3 zd NODE BEGIN ss clk clk ss reset reset z DFF zd clk VCC VCC vihidnij triger sho sinhronizuye zminu signalu TABLE potochnij stan vhidnij signal nastupnij stan vihidnij signal ss y gt ss zd s0 0 gt s0 0 s0 1 gt s2 1 s1 0 gt s0 0 s1 1 gt s2 1 s2 0 gt s2 1 s2 1 gt s3 0 s3 0 gt s3 0 s3 1 gt s1 1 END TABLE END A ot avtomat Mili ce mashina staniv z asinhronnimi signalami na vihodah Formuvannya vihidnogo signalu zdijsnyuyetsya kombinacijnoyu logikoyu Pislya perehodu do nastupnogo stanu sinhronizovanogo taktovim signalom zmina vihidnogo signalu vidbuvayetsya z zatrimkoyu yaku vnosit kombinacijna logika SUBDESIGN mealy clk reset y INPUT z OUTPUT VARIABLE ss MACHINE WITH STATES s0 s1 s2 s3 BEGIN ss clk clk ss reset reset TABLE potochnij stan vhidnij signal vihidnij signal nastupnij stan ss y gt z ss s0 0 gt 0 s0 s0 1 gt 1 s1 s1 0 gt 1 s1 s1 1 gt 0 s2 s2 0 gt 0 s2 s2 1 gt 1 s3 s3 0 gt 0 s3 s3 1 gt 1 s0 END TABLE END Div takozhVHDL VerilogLiteraturaBrodin V B Kalinin A V Sistemy na mikrokontrollerah i BIS programmiruemoj logiki M Izdatelstvo EKOM 2002 400 s ill ISBN 5 7163 0089 8 ros Karshenbojm I Kostkin M Shpargalka dlya perehoda ot AHDL k VHDL 18 zhovtnya 2011 u Wayback Machine Komponenty i tehnologii 1 2003 ros Steshenko V B PLIS firmy ALTERA proektirovanie ustrojstv obrabotki signalov M DODEKA 2000 128 s ISBN 5 94020 001 X ros