Изучение VHDL

       

Изучение VHDLОператор процесса.


Оператор процесса – это параллельный оператор, представляющий основу языка VHDL. Его упрощенный синтаксис:

\оператор процесса\ ::=[postponed] process [(\имя сигнала\ {,\имя сигнала\})] [is]

     {\объявление в процессе\}

begin

     {\последовательный оператор\}

end process;

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

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

В круглых скобках заголовка процесса указывается множество сигналов, по которым процесс запускается – список чувствительности. Это форма оператора процесса, альтернативная процессу с оператором wait on, стоящим последним в цепочке последовательных операторов тела процесса. Любой процесс со списком чувствительности может быть преобразован в эквивалентный процесс с оператором wait on, стоящим последним в списке последовательных операторов.  В операторе процесса со списком чувствительности ставить операторы wait не допускается.

Об отложенных процессах,  отмеченных ключевым словом postponed, уже говорилось, когда шла речь об архитектуре симулятора VHDL. Здесь следует добавить, что,  так как отложенный процесс запускается последним в цепочке процессов с дельта-задержкой, то он сам должен исполняться с ненулевой задержкой, т.е. в нем должен быть оператор wait for.

Процесс представляет собой маленькую программу, которая выполняется на виртуальном процессорном элементе. Рассмотрим процесс, вычисляющий функцию синуса y от аргумента x по аппроксимирующей формуле:


sin(x) = c1x+c2x3+c3x5+c4x7.



Процесс выглядит следующим образом:

process

    type tabl is array(0 to 3) of real;

    constant c:tabl:=(0.99999, -0.16666, 0.00831, -0.00019);

    variable xtmp, p: real:=0.0;

begin

   xtmp:=x;

   p:=c(0)*xtmp;

   for i in 1 to 3 loop         

        p:=p+c(i)*xtmp*x*x;

   end loop;

   y<=p;

   wait on x;

end process;

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

process(A)  begin

    c<= A or B;

  end process;

при моделировании дает графики как на рис. Из графиков видно, что изменение результирующего сигнала С происходит только в моменты изменения сигнала A,  т.е. процесс моделирует некоторую триггерную схему, а не схему ИЛИ.



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

При синтезе списки чувствительности игнорируются компилятором.


Анатолий Сергиенко
E-mail: aser@comsys.ntu-kpi.kiev.ua
Назад Содержание На главную Далее


Содержание раздела