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

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

Изучение VHDL

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

Объявление объекта указывает, как объект проекта выглядит снаружи и каким образом его можно включить в другом объекте в качестве компонента, т.е. он описывает внешний интерфейс объекта. Синтаксис объявления объекта:

\объявление объекта\::= entity \идентификатор\ is
       [generic(\объявление настроечной константы\
       {; \объявление настроечной константы\});]
       [port (\объявление порта\ {;\объявление порта\});]
       {\объявление в объекте\}
       [begin
        {\оператор assert\ | \пассивный вызов процедуры\ | \пассивный процесс\ }]
       end [entity][\идентификатор\];

Здесь \идентификатор\ — имя объекта. Синтаксис объявления настроечной константы и объявления порта рассмотрены в разделе описания объектов и типов языка.

Порт.

Порт представляет собой интерфейсный сигнал объекта проекта. Как и в декларации сигнала, в декларации порта указывается его идентификатор, тип, начальное значение. Дополнительно указывается режим работы: in — прием, out — передача, inout — прием и передача, buffer — передача и использование как сигнал-операнд внутри объекта проекта и link — двунаправленное соединение с другим портом с таким же режимом. Сразу укажем, что режим link — анахронизм, введенный на заре VHDL с целью дать возможность моделировать аналоговые схемы. Сейчас аналоговый VHDL для описания схем использует другие средства. Упрощенный синтаксис объявления портов объекта проекта следующий:

\объявление портов объекта\::=port (\объявление порта\
       {; \объявление порта\});
       \объявление порта\::=\идентификатор\: in |out|inout|buffer|link \тип\
       [:=\начальное значение\].

Настроечная константа generic.

Настроечная константа generic кодирует определенное свойство объекта проекта. Она используется, например, для задания разрядности линий связи, кодирования структуры моделируемого устройства. Упрощенный синтаксис объявления настроечных констант следующий:

\объявление настроечных констант\::=
generic(\объявление настроечной константы\
       {; \объявление настроечной константы\});
\объявление настроечной константы\::=
       \идентификатор\:\тип\[:=\начальное значение\]

Начальное значение порта или настроечной константы.

Начальное значение объекта в его объявлении — это то значение которое принимает объект перед первым циклом моделирования. Если начальное значение не присвоено, то симулятор присваивает наименьшее значение данного типа, если тип — числовой или самое левое значение, если тип — перечисляемый. Например, если тип STD_LOGIC, то начальное значение будет U — неинициализировано. Если при моделировании не предусматривается подача сигналов на порт такого типа, то этот порт лучше инициализировать, например, значением ‘0’.

Начальное значение может быть выражением. Но значение выражения должно быть вычисленным до момента трансляции данного объявления. Например, первое объявление порта:

port ( bb:bit:=aa;

       aa:bit:=’1′);

неверно, так как при его рассмотрении компилятор еще не имеет сведений об идентификаторе аа.

В аппаратной модели начальное значение порта эквивалентно состоянию шины сразу после включения питания до прихода сигналов сброса, т.е. оно не определено. Поэтому компиляторы — синтезаторы не допускают или игнорируют начальные значения всех объектов, кроме констант или объектов, которые не изменяют свое значение при вычислениях. Настроечные константы generic кодируют определенные свойства объекта проекта, например, разрядность линий связи, параметры задержки, кодирование структуры моделируемого устройства и их начальные значения принимаются во внимание.

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

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

Исполнительная часть.

В исполнительной части, которая открывается словом begin, вставляются параллельные операторы, которые не выполняют присваиваний сигналам, т.е. не влияют на поведение объекта. Поэтому такие вызовы процедуры и процессы называются пассивными. Наиболее частое применение этих операторов — проверка соответствия входных сигналов, поступающих через порты, заданным требованиям или соответствие включения объекта в окружение, задаваемое ограничениями на настроечные константы generic. Например, проверяется время предустановки сигнала относительно фронта синхросерии, соответствие его уровней, разрядность входных данных и т.п. При несоответствии сигналов или настроечных констант, оператор assert выдает сообщение об ошибке.

Рассмотрим пример объявления объекта RS-триггера:

entіty RS_FF іs
   generіc(delay:tіme);
   port(R, S: іn bіt;
        Q: out bіt:='0';
        nQ: out bіt:='1');
begіn
  assert (R and S)/='1' report" Іn RS_FF R=S=1" severіty error;
end entіty RS_FF;

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