- •47.Оператор паралельного умовного присвоєння. Приклад.
- •48.Оператор паралельного присвоєння за вибором. Приклад
- •49.Оператор блоку. Призначення та синтаксис.
- •51.Оператор блоку з захищеним оператором присвоєння. Приклад
- •52.Підпрограми у vhdl. Призначення, види підпрограм. Синтаксис оголошення підпрограм.
- •54. Послідовний і паралельний виклик підпрограми-процедури. Приклад оголошення і виклику підпрограми-процедури.
- •55. Послідовний і паралельний виклик підпрограми-функції. Приклад оголошення і виклику підпрограми-функції
47.Оператор паралельного умовного присвоєння. Приклад.
Умовне присвоєння сигналу
Деколи необхідно виконати присвоєння сигналу, якщо умова істинна. В зв’язку з тим, що умовний оператор “if…then…” є послідовним оператором і може використовуватись тільки впроцесах, необхідне умовне присвоєння сигналу, яке можна було би використовувати всередині архітектури. Це функціональний еквівалент умовного оператора, але він записується інакше для того , щоби їх можна було б розрізнити між собою .Синтаксис умовного оператора присвоєння відповідає порядку, за яким він записується:“присвоїти визначене значення сигналу, якщо виконується умова, а якщо ні (else) – присвоїти іншезначення”. Підоператор else може бути відсутнім.Важлива різниця між у мовним присвоєнням сигналу і умовним оператором полягає в тому ,що використання першого обмежено тільки присвоєннями сигналів, в той час як останній може використовуватись для довільних послідовних операторів.
48.Оператор паралельного присвоєння за вибором. Приклад
Присвоєння сигналу із вибором
Для умовного присвоєння сигналу одного з декількох значень використовується конструкція присвоєння сигналу із вибором. Це паралельна конструкція, яка не може використовуватись всередині процесів, де замість неї використовується оператор case, і навпаки, оператор case не може використовуватись поза процесами, замість нього в такому випадку використовується присвоєння сигналу із вибором. Слід зауважити, що присвоєння сигналу із вибором, на відміну від оператора case, обмежено тільки операторами присвоєння і не може містити інших операторів.
49.Оператор блоку. Призначення та синтаксис.
Пакет
(package) у VHDL – це блок, який може містити багато різних декларацій для того ,щоби використовувати їх в різних проектах. Для більшої зручності вони зберігаються вбібліотеках.
Синтаксис опису пакету:
Пакет складається з обов’язкової декларації пакету і може містити одне необов’язкове тіло
пакету.Пакети використовуються для декларування типів, підтипів, констант, сигналів, компонетів ,
процедур та фу нкцій, що можуть розділятись між різними незалежними проектами.
Об’єкти, задекларовані в пакеті, видимі в інших частинах проекту , якщо використовується
Оператор
Двохрівнева специфікація пакету (декларація та тіло) дозволяє декларувати так звані
відкладені константи, значення для яких не задається в декларації пакету. Значення відкладеної
константи повинно бути вказане у відповідному тілі пакету.Стандарт мови VHDL визначає два стандартних пакети, що мають бути доступними в довільному середовищі VHDL – пакет STANDARD і пакет TEXTIO. Перший містить базові декларації типів, констант та операторів, а другий визначає операції для маніпулювання текстовими файлами. Обидва розташовані в бібліотеці STD. Тіло пакету містить закінчені визначення декларацій тіл підпрограм та значеня відкладених констант, задекларованих у відповідній декларації пакету. Інші декларації (подібні до декларації пакету) в тілі пакету також допускаються, але вони будуть видимі тільки всередині тіла пакету.
Відкладені
константи, задекларовані в декларації
пакету, можуть використовуватись тільки
у
виразах
за замовчуванням для локальних
параметрів
generic
,
локальних портів та формальних
параметрів
підпрограм.
Відкладені
константи, задекларовані в декларації
пакету, можуть використовуватись тільки
у
виразах
за замовчуванням для локальних
параметрів
generic
,
локальних портів та формальних
параметрів
підпрограм.
Відкладені
константи, задекларовані в декларації
пакету, можуть використовуватись тільки
у
виразах
за замовчуванням для локальних
параметрів
generic
,
локальних портів та формальних
параметрів
підпрограм.
Відкладені
константи, задекларовані в декларації
пакету, можуть використовуватись тільки
у
виразах
за замовчуванням для локальних
параметрів
generic
,
локальних портів та формальних
параметрів
підпрограм.
виразах за замовчуванням для локальних параметрів generic, локальних портів та формальних параметрів підпрограм. На рис.7.3 наведено приклад пакету
50.Оперратор блоку з охоронним виразом.приклад
Оператор блоку BLOCK, подібно до оператора PROCESS, є складовим оператором, тіло якого включає декілька операторів, але, в даному випадку, паралельних. Оператори тіла блоку, як і інші паралельні оператори, забезпечують можливість подання паралелізму в моделюється системі. Ці оператори ініціюються не за послідовного, а по подієвому принципом, а результати їх виконання стають доступні іншим операторам як включеним до блоку, так і розміщеним в інших блоках або "індивідуально", тільки після виконання всіх операторів, ініційованих однією подією. У цьому сенсі оператори, включені в блок, не відрізняються від "індивідуальних" паралельних операторів. Об'єднання операторів в блоки забезпечує наступні можливості: структуризація тексту опису, тобто можливість явного і наочного виділення сукупності операторів, що описують закінчений функціональний вузол; можливість оголошення в блоці локальних типів, сигналів, підпрограм і деяких інших локальних об'єктів; можливість приписування всіх або деяким операторам блоку загальних умов ініціалізації. Спрощені правила запису оператора блоку визначені таким чином <Мітка блоку>: BLOCK [(охоронне вираз)] [IS] [<Розділ декларацій блоку>] BEGIN <Розділ операторів блоку>
END BLOCK [<мітка блоку>]; Найбільш специфічними аспектами блокової організації є поняття охоронного вираження і охороняється оператора присвоювання. Охоронне вираз - це будь-який вираз логічного типу, аргументами якого є сигнали. Будь-яка зміна сигналів, що входять в охоронне вираз, викликає обчислення значення цього виразу і присвоєння отриманого значення визначеної змінної QUARD. Область дії змінної QUARD - все тіло блоку, і вона може використовуватися як звичайна логічна змінна у вкладених операторах блоку. Охороняється оператор присвоювання використовує значення змінної QUARD без явної вказівки умови в програмі. Якщо QUARD = 0 ", то виконання операторів присвоювання, що містять ключове слово QUARDED, у такому блоці заборонено. Розглянемо однорозрядних суматор. ENTITY add1_e IS PORT (b1, b2, enable: IN BIT; c1, s1: out BIT); END add1_e; ARCHITECTURE struct OF add1_e is BEGIN
p0: BLOCK (enable = '1 ') BEGIN s1 <= GUARDED (b1 XOR b2); c1 <= GUARDED (b1 AND b2); END BLOCK p0; END struct; Охоронним виразом блоку є вираз enable = 1. Якщо цей вислів набуває значення TRUE (істина), то охоронювані конструкції (призначення сигналів) виконуються, тобто однорозрядних суматор складає числа, якщо ж значення виразу є FALSE (неправда), то охоронювані призначення сигналів не виконуються, тобто суматор не складає числа b1, b2. Охорона призначення сигналів, здійснюється вказівкою ключового слова GUARDED. В якості іншого прикладу охороняється блоку наведемо приклад опису D-тригера з асинхронним скиданням у вигляді блоку з охоронним виразом (clk = '1 'or clr = '1'). D_LATCH: block (clk = '1 'or clr = '1') begin Q <= guarded 0 "when clr = '1 '; else D when clk = '1 '; else Q; end block D_LATCH; У даному прикладі clk - вхід синхронізації, clr - асинхронний скидання, D - вхід даних, Q - вихід тригера. Коли охоронне вираз має значення брехня, то сигнал Q в лівій частині зберігає своє колишнє значення. Cігнал асинхронного скидання має пріоритет по відношенню до сигналу clk.