Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VHDL-47-56.docx
Скачиваний:
4
Добавлен:
10.12.2018
Размер:
489.47 Кб
Скачать

51.Оператор блоку з захищеним оператором присвоєння. Приклад

<Мітка блоку>: 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;

52.Підпрограми у vhdl. Призначення, види підпрограм. Синтаксис оголошення підпрограм.

Підпрограми

До підпрограм у VHDL відносяться процедури (procedure) і функції (function). Виклик процедури є оператором, а виклик функції повертає значення у виразі. Підпрограми можу ть бути задекларовані в тілі пакету, інтерфейсі об’єкту (entity),архітектурному тілі (architecture), процесі, процедурі або функції. Підпрограми можуть викликати інші підпрограми

У Розділі_Локальних_Оголошень можна створити локальні (не доступні за межами процедури) змінні, константи, сигналіз, типи, доступні за межами процедури) змінні, константи, сигнали, типу, підтіпі та підпрограмі. Список_Формальних_Параметрів візначає підтипи й підпрограми. Список_Формальних_Параметрів визначає механізм обміну данімі Між процедурою та програмою. механізм обміну даними між процедурою і програмою. оператор оператор оголошення процедури можна розміщуваті в розділах оголошень оголошення процедури можна розміщувати в розділах оголошень архітектур, процесів та пакетів (дівіться Наступний Розділ). архітектур, процесів та пакетів (дивіться наступний розділ)

ЯКЩО ВСІ процедури мают доступ до глобальних об'єктів Даних,. Це робіться для того, щоб для Певного набору значень вхідніх параметрів функції результат її роботи БУВ однакових незалежна від умов роботи цієї функції (значення глобальних об'єктів Даних). ЯКЩО така штучна Заборона Потрібна, то на початок заголовка функції ставитися Ключове слово pure, в іншому випадку - слово impure. Крім того, за допомога функцій можлива перевізначаті операції (Такі, як "+", "-", "<" ТОЩО) для створеня Користувачем нових типів Даних. Чи не зупіняючісь доповідну на даного пітанні, наведемо приклад такої такий функції та зазначімо, Що Спісок_Формальніх_Пара-метрів Для всіх таких функцій має один і той самий Вигляд

Оголошення підпрограм вставляється в частині оголошень в процесів, блоків, оголошеннях об'єктів і пакетів, якщо ці підпрограми використовуються в цих програмних одиницях. Воно являє собою частину специфікації процедури і функції до слова is: \ оголошення процедури \:: = procedure \ ім'я процедури \ [(\ список параметрів \)]; \ оголошення функції \:: = [pure | impure] function \ ім'я функції \ | \ знак функції \

  [(\ список параметрів \)] return \ тип параметра \;

53. Підпрограми у VHDL. Призначення, види підпрограм. Синтаксис виклику підпрограм.

Підпрограми

До підпрограм у VHDL відносяться процедури (procedure) і функції (function). Виклик процедури є оператором, а виклик функції повертає значення у виразі. Підпрограми можу ть бути задекларовані в тілі пакету, інтерфейсі об’єкту (entity),архітектурному тілі (architecture), процесі, процедурі або функції. Підпрограми можуть викликати інші підпрограми

У Розділі_Локальних_Оголошень можна створити локальні (не доступні за межами процедури) змінні, константи, сигналіз, типи, доступні за межами процедури) змінні, константи, сигнали, типу, підтіпі та підпрограмі. Список_Формальних_Параметрів візначає підтипи й підпрограми. Список_Формальних_Параметрів визначає механізм обміну данімі Між процедурою та програмою. механізм обміну даними між процедурою і програмою. оператор оператор оголошення процедури можна розміщуваті в розділах оголошень оголошення процедури можна розміщувати в розділах оголошень архітектур, процесів та пакетів (дівіться Наступний Розділ). архітектур, процесів та пакетів (дивіться наступний розділ)

ЯКЩО ВСІ процедури мают доступ до глобальних об'єктів Даних,. Це робіться для того, щоб для Певного набору значень вхідніх параметрів функції результат її роботи БУВ однакових незалежна від умов роботи цієї функції (значення глобальних об'єктів Даних). ЯКЩО така штучна Заборона Потрібна, то на початок заголовка функції ставитися Ключове слово pure, в іншому випадку - слово impure. Крім того, за допомога функцій можлива перевізначаті операції (Такі, як "+", "-", "<" ТОЩО) для створеня Користувачем нових типів Даних. Чи не зупіняючісь доповідну на даного пітанні, наведемо приклад такої такий функції та зазначімо, Що Спісок_Формальніх_Пара-метрів Для всіх таких функцій має один і той самий Вигляд

виклик процедури являє собою послідовний або паралельний оператор, залежно від того, чи варто він всередині або зовні процесу. Спрощений синтаксис послідовного виклику процедури: \ Виклик процедури \:: = \ ім'я процедури \ [([\ ім'я параметра => \] \ вираз \        {, [\ Ім'я параметра \ =>] \ вираз \})]; Тут \ ім'я процедури \ - ім'я раніше визначеної процедури. Зв'язування формальних і фактичних параметрів виконується аналогічно як у виклику функції. Вираз - параметр функції - повинно давати результат типу, відповідного імені параметра \ ім'я параметра \. Параметри можна задавати з пойменованим або позиційним зв'язуванням. При позиційному зв'язуванні параметри-вирази підставляються в порядку, визначеному порядком проходження імен параметрів у визначенні функції. При пойменованому зв'язуванні кожне ім'я, параметра зв'язується з відповідним параметром за допомогою символів "=>", причому порядок проходження параметрів може бути довільним. У пакеті IEEE.Math_Real визначена процедура генерації випадкових чисел: procedure UNIFORM (variable SEED1, SEED2: inout POSITIVE; variable X: out real); Вона може бути викликана зі зв'язуванням параметрів: variable s1, s2: natural: = 12345; variable Random: real;... UNIFORM (X => Random, SEED1 => s1, SEED2 => s2); або без зв'язування параметрів: UNIFORM (s1, s2, Random); Наступний приклад представляє використання процедури зі зв'язуванням не всіх формальних параметрів. procedure and4 (variable x1, x2, x3, x4: in bit: = '1 '; signal y: out bit) is begin y <= x1 and x2 and x3 and x4; end procedure; При виклику цієї процедури: and4 (a1, a2, a3, open, b); четвертий вхідний параметр відсутній, на що вказує ключове слово open і замість нього підставляється початкове значення '1 '. Виклик процедури без параметрів - це просто написане її ім'я. При виклику процедури вхідні параметри змінних копіюються всередину процедури. Після виконання процедури вихідні параметри записуються на місце відповідних змінних. Вхідні параметри сигналів представляються як посилання на сигнали. Параметру сигналу не можна привласнювати початкове значення, оскільки джерело цього сигналу недоступний. Тому не можна також використовувати такі атрибути сигналу, як 'delayed,' stable, 'quiet або' transaction. Вихідний параметр сигналу передається в процедуру разом з джерелом сигналу, в якому відбувається привласнення сигналу. Це еквівалентно тому, що ланцюжок послідовних операторів тіла процедури копіюється в процес на місце виклику процедури з відповідною підстановкою параметрів. На відміну від виклику процедури у звичайних алгоритмічних мовах, в яких використовується одне тіло процедури, в VHDL кожен обчислювальний процес, що викликає процедуру, використовує свій власний екземпляр тіла процедури. Паралельний виклик процедури має такий же синтаксис, як у послідовного виклику процедури. Він виконується точно так само, як процес, який має у своїй виконавчій частині такий же виклик процедури з такими ж параметрами і оператор wait очікування приходу сигналів - вхідних параметрів. Тому кожен паралельний виклик процедури відповідає деякому віртуальному процесорному елементу, виконуючому алгоритм цієї процедури. Якщо програма призначена для синтезу, то процедура, що викликається паралельно, не повинна мати операторів wait. Така процедура відображається в комбінаційну схему або комбінацію шин, тобто деякий спеціалізований процесорний елемент. Виклик функції. При виконанні функції виконується функція з заданими значеннями параметрів. Спрощений сінтасіс виклику функції: \ Виклик функції \:: = \ ім'я функції \ ([\ ім'я параметра \ =>] \ вираз \        {, [\ Ім'я параметра \ =>] \ вираз \}); де \ ім'я функції \ - ім'я функції, яка визначається раніше, \ ім'я параметра \ - не обов'язковий формальний параметр цієї функції. Вираз-параметр функції - повинно давати результат типу, що відповідає імені параметра. Параметри можна задавати з пойменованим або позиційованим зв'язуванням. При позиційованим зв'язуванні параметри-вирази підставляються в порядку, визначеному порядком проходження імен параметрів у визначенні функції. При пойменованому зв'язуванні кожне ім'я, параметра зв'язується з відповідним параметром за допомогою символів "=>", причому порядок проходження параметрів може бути довільним. На відміну від процедури, виклик функції повертає тільки один параметр, зате він може брати участь як операнд у виразах. У мові VHDL дуже мало вбудованих функцій. Більшість функцій реалізовано у вигляді підпрограм. Для перетворення типів найчастіше використовуються функції. Наприклад, функція function BIT_TO_INT (x: bit_vector) return natural is    variable t, j: integer: = 0;  begin     for I in x'reverse_range loop          if (x (I) = '1 ') then               t: = t + 2 ** j;          end if;               j: = j +1;          end loop;          return t; end function BIT_TO_INT; перетворить вектор бітів у ціле. При цьому атрибут x'reverse_range повертає діапазон, зворотний діапазону подання вхідного параметра. Наприклад, якщо вхідний параметр - bit_vector (7 downto 0), то в оператор циклу підставиться діапазон 0 to 7. Таким чином, виходить функція, універсальна для безлічі різних параметрів - операндів. Ключові слова pure і impure позначають ідеальну і неідеальну функції. На відміну від ідеальної функції, неідеальна функція може повертати різні результати для однакових наборів вхідних параметрів. Наприклад, якщо вхідний параметр - глобальна змінна, то вона може змінитися в момент виклику функції і результат буде відрізнятися від очікуваного. Тому глобальні змінні не можуть бути операндами в ідеальних функціях. Прикладом неідеальної функції є функція Now з пакета STANDARD, яка при виклику повертає змінну визначеного типу delay_length, рівну поточному моменту часу моделювання. Природно, що при різних викликах цієї функції вона повертає різні значення.

Також є варіант рекурсивного викликання процедури

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]