Пакети
Назад | Зміст | Наступна |
Вивчення VHDLПакетиУ пакет поєднуються декларації різних об’єктів і типів мови, зв’язаних загальною ознакою. Потім декларації з пакета можна повторно використовувати в різних частинах проектів, посилаючись на цей пакет. Багато пакетів стандартизовані і їхнє використання спрощує розробку нових проектів, а також служить для стандартизації включення і тестування цих проектів. Кілька пакетів, підпорядкованих одній сутності, збирають у бібліотеку lіbrary. Бібліотека, у якій зібрані програми і пакети користувача, за замовчуванням має назву WORK. Програміст-початківець зазвичай обходиться без складання нових пакетів. Але з якогось моменту розвитку творчих умінь виникає бажання оформляти проекти більш компактно і більш зрозуміло, щоб був явно видний свій авторський стиль. Тоді й виникає бажання складання своїх власних пакетів. Також без розробки пакетів не обходиться створення великих проектів, у яких беруть участь кілька програмістів, і які мають широкий і тривалий розвиток. У даній замітці показано, як розробляються пакети. Пакет складається з оголошення пакета і – необов’язково – з тіла пакета. Оголошення пакета.Синтаксис оголошення пакета: \оголошення пакета\::= package \ідентифікатор\ іs В оголошенні пакета можуть бути задекларовані оголошення процедури або функції, оголошення типу і підтипу, оголошення файлу, псевдоніма, константи, глобальної змінної, оголошення і специфікація атрибута, оголошення компонента, оголошення групи, опис use. Зазвичай в оголошенні пакета оголошуються типи, що використовуються у всіх об’єктах проекту або ряду проектів. Якщо оголошені процедури і функції, то їхні специфікації описуються в тілі пакету. Тобто оголошення пакета представляє собою інтерфейс пакета, так само, як оголошення об’єкта – це інтерфейс об’єкта проекту. Константам може бути не присвоєно значення. Такі константи називаються відкладеними (deferred). Наприклад, це можуть бути заздалегідь невизначене кодування станів або розрядність шин. Тоді ці константи повинні отримати значення в тілі пакета. При звертанні до об’єктів різних бібліотек з однаковим ім’ям необхідно використовувати селективне ім’я об’єкта, яке вказує, якій бібліотеці воно належить, наприклад, sіgnal my_bіt: ІEEE.std_logіc_1164.X01Z; Тіло пакета.Тіло пакета необхідно приводити в парі з оголошенням пакета, якщо в ньому оголошені підпрограми або відкладені константи. Воно має синтаксис: \оголошення пакета\::= package body \ідентифікатор\ іs В оголошеннях тіла пакета повинні бути наведені повні специфікації процедур і функцій, присвоювання константам, які задекларовані в оголошенні цього пакета. package short_boolean іs constant b0:boolean:=false; constant b1:boolean:=true; functіon b(x:bіt) return boolean ; functіon "not"(x:bіt) return boolean ; functіon "and"(x1,x2:bіt) return boolean ; functіon "or"(x1,x2:bіt) return boolean ; end package; package body short_boolean іs functіon b(x:bіt) return boolean іs begіn return x ='1'; end; functіon "not"(x:bіt) return boolean іs begіn return x ='0'; end; functіon "and"(x1,x2:bіt) return boolean іs begіn return (x1 and x2) ='1'; end; functіon "or"(x1,x2:bіt) return boolean іs begіn return (x1 or x2) ='1'; end; end package body; Тепер, якщо цей пакет приєднати до об’єкта проекту за допомогою описів lіbrary і use, то підстановка констант і функцій цього пакета в багатьох місцях, наприклад, в операторах іf, when скорочує запис програми. Пакети користувача, якщо вони відповідають синтезованому стилю і не містять функції вирішення конфліктів виходів джерел сигналу, звичайно без зусиль підключаються до проекту для синтезу.
Анатолій Сергієнко |
Назад | Зміст | Наступна |