Пакети

Зміст Наступна

Вивчення VHDL

Пакети

У пакет поєднуються декларації різних об’єктів і типів мови, зв’язаних загальною ознакою. Потім декларації з пакета можна повторно використовувати в різних частинах проектів, посилаючись на цей пакет. Багато пакетів стандартизовані і їхнє використання спрощує розробку нових проектів, а також служить для стандартизації включення і тестування цих проектів. Кілька пакетів, підпорядкованих одній сутності, збирають у бібліотеку lіbrary. Бібліотека, у якій зібрані програми і пакети користувача, за замовчуванням має назву WORK.

Програміст-початківець зазвичай обходиться без складання нових пакетів. Але з якогось моменту розвитку творчих умінь виникає бажання оформляти проекти більш компактно і більш зрозуміло, щоб був явно видний свій авторський стиль. Тоді й виникає бажання складання своїх власних пакетів. Також без розробки пакетів не обходиться створення великих проектів, у яких беруть участь кілька програмістів, і які мають широкий і тривалий розвиток.

У даній замітці показано, як розробляються пакети. Пакет складається з оголошення пакета і – необов’язково – з тіла пакета.

Оголошення пакета.

Синтаксис оголошення пакета:

\оголошення пакета\::= package \ідентифікатор\ іs
       {оголошення в пакеті}
       end [package][\ідентифікатор\];

В оголошенні пакета можуть бути задекларовані оголошення процедури або функції, оголошення типу і підтипу, оголошення файлу, псевдоніма, константи, глобальної змінної, оголошення і специфікація атрибута, оголошення компонента, оголошення групи, опис use.

Зазвичай в оголошенні пакета оголошуються типи, що використовуються у всіх об’єктах проекту або ряду проектів. Якщо оголошені процедури і функції, то їхні специфікації описуються в тілі пакету. Тобто оголошення пакета представляє собою інтерфейс пакета, так само, як оголошення об’єкта – це інтерфейс об’єкта проекту.

Константам може бути не присвоєно значення. Такі константи називаються відкладеними (deferred). Наприклад, це можуть бути заздалегідь невизначене кодування станів або розрядність шин. Тоді ці константи повинні отримати значення в тілі пакета.

При звертанні до об’єктів різних бібліотек з однаковим ім’ям необхідно використовувати селективне ім’я об’єкта, яке вказує, якій бібліотеці воно належить, наприклад,

sіgnal my_bіt: ІEEE.std_logіc_1164.X01Z;

Тіло пакета.

Тіло пакета необхідно приводити в парі з оголошенням пакета, якщо в ньому оголошені підпрограми або відкладені константи. Воно має синтаксис:

\оголошення пакета\::= package body \ідентифікатор\ іs
       {оголошення в тілі пакета}
      end [package body][\ідентифікатор\];

В оголошеннях тіла пакета повинні бути наведені повні специфікації процедур і функцій, присвоювання константам, які задекларовані в оголошенні цього пакета.
Нижче наведений приклад пакета функцій і констант, який зручно застосовувати для скорочення роботи по програмуванню логіки з булевими типами.

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 скорочує запис програми.

Пакети користувача, якщо вони відповідають синтезованому стилю і не містять функції вирішення конфліктів виходів джерел сигналу, звичайно без зусиль підключаються до проекту для синтезу.

Анатолій Сергієнко
E-mail: aser@comsys.kpi.ua