
- •47.Оператор паралельного умовного присвоєння. Приклад.
- •48.Оператор паралельного присвоєння за вибором. Приклад
- •49.Оператор блоку. Призначення та синтаксис.
- •51.Оператор блоку з захищеним оператором присвоєння. Приклад
- •52.Підпрограми у vhdl. Призначення, види підпрограм. Синтаксис оголошення підпрограм.
- •54. Послідовний і паралельний виклик підпрограми-процедури. Приклад оголошення і виклику підпрограми-процедури.
- •55. Послідовний і паралельний виклик підпрограми-функції. Приклад оголошення і виклику підпрограми-функції
54. Послідовний і паралельний виклик підпрограми-процедури. Приклад оголошення і виклику підпрограми-процедури.
Виклик процедури може бути послідовним або паралельним оператором, в залежності від місця використання. Послідовний виклик процедури виконується при отриманні контроля, а паралельна процедура активізу ється, коли будь-який параметр з режимом in або inout
змінює своє значення.Процедури можуть бути вкладеними і можуть викликатись рекурсивно.
cпрощений синтаксис виклику процедури: \ виклик процедури \:: = \ ім'я процедури \ [([\ ім'я параметра => \] \ вираз \ {, [\ ім'я параметра \ =>] \ вираз \})];
синтаксис оголошення процедури
\ оголошення процедури \:: = procedure \ ім'я процедури \ [(\ список параметрів \)];
55. Послідовний і паралельний виклик підпрограми-функції. Приклад оголошення і виклику підпрограми-функції
При виконанні функції виконується функція з заданими значеннями параметрів. Спрощений сінтасіс виклику функції: \ Виклик функції \:: = \ ім'я функції \ ([\ ім'я параметра \ =>] \ вираз \ {, [\ Ім'я параметра \ =>] \ вираз \});
Оголошення
\ оголошення функції \:: = [pure | impure] function \ ім'я функції \ | \ знак функції \
[(\ список параметрів \)] return \ тип параметра \; де \ ім'я функції \ - ім'я функції, яка визначається раніше, \ ім'я параметра \ - не обов'язковий формальний параметр цієї функції. Вираз-параметр функції - повинно давати результат типу, що відповідає імені параметра. Параметри можна задавати з пойменованим або позиційованим зв'язуванням. При позиційованим зв'язуванні параметри-вирази підставляються в порядку, визначеному порядком проходження імен параметрів у визначенні функції. При пойменованому зв'язуванні кожне ім'я, параметра зв'язується з відповідним параметром за допомогою символів "=>", причому порядок проходження параметрів може бути довільним. На відміну від процедури, виклик функції повертає тільки один параметр, зате він може брати участь як операнд у виразах. У мові VHDL дуже мало вбудованих функцій. Більшість функцій реалізовано у вигляді підпрограм. Для перетворення типів найчастіше використовуються функції
Функція - це підпрограма, яка обчислює значення. Опції структуруються так само, як і процедури, з тією різницею, що функції містять фразу RETURN Як і процедура, функція має дві частини: специфікацію і тіло. Специфікація функції починається з ключового слова FUNCTION і закінчується фразою RETURN, яка специфікує тип результуючого значення. Оголошення аргументів необов'язкові. Якщо функція не приймає аргументів, дужки також не кодуються. Тіло функції починається з ключового слова IS і закінчується ключовим словом END, за яким може слідувати ім'я функції. Тіло функції складається з трьох частин: декларативної частини, виконуваної частини і необов'язковою частині обробки винятків Декларативна частина містить локальні оголошення, які містяться між ключовими словами IS і BEGIN. Ключове слово DECLARE, яке починає декларативну частину в анонімному блоці PL / SQL, тут не використовується. Частина, містит пропозиції, які містяться між ключовими словами BEGIN і EXCEPTION (або END). У виконуваної частини процедури повинно зустрітися хоча б одну пропозицію RETURN. Частина обробки винятків містить обробники винятків, що містяться між ключовими словами EXCEPTION і END.
56.Оператор процесу. Синтаксис, призначення, приклади Оператор процесу - це паралельний оператор, який представляє основу мови VHDL. Його спрощений синтаксис: \ Оператор процесу \:: = [postponed] process [(\ ім'я сигналу \ {, \ ім'я сигналу \})] [is] {\ Оголошення в процесі \} begin {\ Послідовний оператор \} end process; Оголошеними в процесі можуть бути: оголошення і тіло підпрограми, оголошення типу і підтипу, оголошення константи, змінної, файлу, псевдоніма, оголошення і специфікація атрибута, оголошення групи, опис use. Те, що оголошено в процесі, має область дії (видимість), обмежену даним процесом. Всі процеси в програмі виконуються паралельно. Процеси обмінюються сигналами, які виконують синхронізацію процесів і переносять значення між ними. Якщо над сигналами визначена функція дозволу, то виходи джерел сигналу можуть об'єднуватися. Сигнали можна оголошувати в процесах. Процес неможливо помістити в процес, так як там є місце тільки для послідовних операторів. В круглих дужках заголовка процесу вказується безліч сигналів, по яких процес запускається - список чутливості. Це форма оператора процесу, альтернативна процесу з оператором wait on, хто стоїть останнім у ланцюжку послідовних операторів тіла процесу. Будь-який процес зі списком чутливості може бути перетворений в еквівалентний процес з оператором wait on, хто стоїть останнім у списку послідовних операторів. У операторі процесу зі списком чутливості ставити оператори wait не допускається. Про відкладених процесах, зазначених ключовим словом postponed, вже говорилося, коли йшлося про архітектуру симулятора VHDL. Тут слід додати, що, так як відкладений процес запускається останнім у ланцюжку процесів з дельта-затримкою, то він сам повинен виконуватися з ненульовою затримкою, тобто в ньому повинен бути оператор wait for. Процес являє собою маленьку програму, яка виконується на віртуальному процесорному елементі. Розглянемо процес, який обчислює функцію синуса y від аргументу x по апроксимуючої формулою: sin (x) = c1x + c2x3 + c3x5 + c4x7. Процес виглядає наступним чином: process type tabl is array (0 to 3) of real; constant c: tabl: = (0.99999, -0.16666, 0.00831, -0.00019); variable xtmp, p: real: = 0.0; begin xtmp: = x; p: = c (0) * xtmp; for i in 1 to 3 loop p: = p + c (i) * xtmp * x * x; end loop; y <= p; wait on x; end process; При моделюванні логічних схем в список чутливості процесу необхідно вносити всі вхідні сигнали, інакше моделювання схеми буде відрізнятися від очікуваного. Наприклад, процес process (A) begin c <= A or B; end process; при моделюванні дає графіки як на рис. З графіків видно, що зміна результуючого сигналу С відбувається тільки в моменти зміни сигналу A, тобто процес моделює деяку триггерную схему, а не схему АБО. Якщо в процесі запрограмований алгоритм функціонування критичної схеми, наприклад, регістра, то допускається в списку чутливості залишати тільки сигнали управління записом і дозволу читання, наприклад, сигнали скидання і сінхросеріі. При синтезі списки чутливості ігноруються компілятором.