Пакеты

Cодержание Следующая

Изучение VHDL

Пакеты.

В пакет объединяются декларации различных объектов и типов языка, связанных общим признаком. Затем декларации из пакета можно повторно использовать в различных частях проектов, ссылаясь на этот пакет. Многие пакеты стандартизированы и их использование упрощает разработку новых проектов, а также служит для стандартизации включения и тестирования этих проектов. Несколько пакетов, подчиненных одной сущности, собирают в библиотеку library. Библиотека, в которой собраны программы и пакеты пользователя, по умолчанию имеет название WORK.

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

В данной заметке показано, как разрабатываются пакеты. Пакет состоит из объявления пакета и необязательно, из тела пакета.

Объявление пакета.

Синтаксис объявления пакета:

\объявление пакета\::= package \идентификатор\ is
       {объявление в пакете}
       end [package][\идентификатор\];

В объявлении пакета могут быть объявленными объявление процедуры или функции, объявление типа и подтипа, объявление файла, псевдонима, константы, глобальной переменной, объявление и спецификация атрибута, объявление компонента, объявление группы, описание use.

Обычно в объявлении пакета объявляются типы, используемые во всех объектах проекта или ряда проектов. Если объявлены процедуры и функции, то их спецификации описываются в теле пакета. Т.е. объявление пакета представляет собой интерфейс пакета, также как объявление объекта — это интерфейс объекта проекта.

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

При обращении к объектам различных библиотек с одинаковым именем необходимо использовать селективное имя объекта, указывающее, какой библиотеке оно принадлежит, например,

signal my_bit: IEEE.std_logic_1164.X01Z;

Тело пакета.

Тело пакета необходимо приводить в паре с объявлением пакета, если в последнем объявлены подпрограммы или отложенные константы. Оно имеет синтаксис:

\объявление пакета\::= package body \идентификатор\ is
       объявление в теле пакета}
      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;

Теперь, если данный пакет присоединить к объекту проекта с помощью описаний library и use, то подстановка констант и функций этого пакета во многих местах, например, в операторах if, when сокращает запись программы.

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

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