Процессы и сигналы в VHDL
В VHDL моделируемые объекты (объекты проекта) представляют собой совокупность параллельных процессов, взаимодействие между которыми осуществляется при помощи сигналов. Каждый процесс состоит из последовательности операторов и может находиться в одном из двух состояний — пассивном, когда процесс ожидает прихода сигналов запуска или наступления соответствующего момента времени, и активном — когда процесс исполняется.
Сигналом в VHDL называется объект, который переносит значение и синхронизирующее воздействие от одного процесса к другому (представляя в модели физические линии связи). Каждый сигнал имеет тип, историю прошлых и будущих значений, к которой можно обращаться при помощи атрибутов (см. далее). Также для сигналов определены стандартные логические и арифметические операторы, соответствующие типу сигнала, и два специальных оператора — параллельного присваивания и назначения значения. Более подробно эти операторы будут рассмотрены следующем посте.
В синхронизации процессов особая роль отводится механизму событийного воспроизведения модельного времени now. В VHDL реализован механизм воспроизведения модельного времени, состоящий из циклов.
На первой стадии цикла вырабатываются новые значения сигналов. Генерирование процессом события в виде нового значения сигнала называется будущим сообщением — транзакцией (transaction). С каждым сигналом может быть связано множество транзакций, которое называется драйвером (driver) сигнала. Фактически драйвер сигнала — это множество планируемых событий в виде пар «время—значение». Если несколько процессов изменяют один и тот же сигнал (так называемые разрешенные (resolved) сигналы), т.е. сигнал имеет несколько драйверов, в описании объектов может указываться функция разрешения. Эта функция получает в качестве аргумента массив конкурирующих значений сигнала и вырабатывает результирующее значение. Это позволяет реализовывать монтажное ИЛИ на общей шине.
На второй стадии процессы реагируют на изменения сигналов и переходят в активную фазу. Эта стадия завершается, когда все процессы снова переходят в состояние ожидания. После этого модельное время становится равным времени ближайшего запланированного события, и цикл моделирования повторяется.
Особый случай представляет ситуация, когда в процессах отсутствуют операторы задержки. Для этого в VHDL предусмотрен механизм так называемой дельта-задержки. В случае дельта-задержек новый цикл моделирования не связан с увеличением модельного времени.
1. Задержка инерционная и транспортная
Существуют два принципиально различных метода моделирования ДС на уровне логических схем: синхронное и асинхронное моделирование. При синхронном моделировании предполагается, что схемы не имеют задержки переключения, т.е. в модели отображается только логика работы схемы при постоянных значениях входных сигналов. Методы и алгоритмы синхронного моделирования подробно описаны в литературе. В VHDL реализован принцип асинхронного моделирования, суть которого состоит в учете для каждого элемента задержки времени переключения.
При этом предусмотрены два типа моделей задержки:
• инерционная задержка (по умолчанию)
Y <= not X1 and X2 AFTER 5 ns;
разрешает переключение выходного сигнала Y только при условии, что длительность входных сигналов (в данном случае результата логического умножения сигналов) не меньше времени задержки, заданного после слова AFTER, т.е. инерционная задержка имитирует устойчивость схемы от высокочастотного «дребезга» на ее входе;
• транспортная задержка
сопровождается ключевым словом TRANSPORT и соответствует «чистой» задержке (например, при имитации работы линии задержки); на выход передается любой сигнал, каким бы коротким он не был:
Z <= TRANSPORT X1 or not X2 after 3 n;
2. Атрибуты сигналов
Атрибут можно определить как функцию, задающую некоторую операцию над сигналом. Все атрибуты сигналов можно разделить в зависимости от принимаемых значений на следующие группы.
1. Атрибуты, имеющие тип boolean:
— s’quiet(T) — принимает значение true, если сигнал s пассивен в течение интервала времени T;
— s’stable(T) — принимает значение true, если сигнал s был стабильным в течение интервала времени T;
— s’active — принимает значение true, если сигнал s активен; естественно, что длительность активности сигнала равна бесконечно малой «дельта-задержке»; следует также иметь в виду, что активным будет любой сигнал, «подозреваемый» на переключение; например, «подозреваемым» будет выходной сигнал любого элемента, на входе которого изменяется хотя бы один сигнал, что приводит к необходимости решения логического уравнения этого элемента для определения значения сигнала на его выходе;
— s’event — принимает значение true, если происходит событие, связанное с сигналом s, т.е. происходит какое-либо изменение значения сигнала (для булевой модели сигнала это переходы ‘0’->’1, ‘1’ ->’0′, для четырехзначной модели это, например, переходы ‘1’ -> ‘z’, ‘x’ -> ‘0’ и т.д.).
2. Атрибуты, имеющие тип signal:
— s’delayed(T) — принимает значение сигнала s, задержанное на Т единиц времени;
— s’last_value — принимает значение, которое сигнал s имел перед последним событием (т.е. перед каким-либо изменением).
3. Атрибут, имеющий тип bit:
— s’transaction — инвертируется всякий раз, когда сигнал s активен.
4. Атрибуты, имеющие тип time:
— s’last_active — принимает значение момента времени, в который сигнал s был активным последний раз;
— s’last_event — принимает значение момента времени, в который последний раз происходило событие, связанное с сигналом s.
К объектам, возвращаемым атрибутами, могут применятся все допустимые в VHDL для объектов данного типа операции. Например, к сигналам, полученным в результате применения атрибутов, имеющих тип signal, могут также применятся атрибуты.
Например:
s’deleyed(tl)’stable(t2);
Замечание! Атрибуты, зависящие от значений сигнала, недопустимы в подпрограмме. Это значит, что исключаются из тела процедуры атрибуты STABLE, QUIET и DELAYED.