В языке VHDL используются последовательный оператор присваивания :=, известный из других алгоритмических языков, и параллельный оператор назначения сигнала <=.
Примечание 1
Очевидно, что интерпретация символа <= как "присваивание значения сигнала" или того же знака как отношения "меньше или равно" определяется из контекста
Особенность оператора <= в том, что присвоение значений сигналам всегда происходит с задержкой, большей нуля, хотя, если задержка не указана, то она является пренебрежимо малой, например:
y <= x1 and x2; -- задержка на малую величину > 0.
y <= x1 and x2 after 200 ns; -- задержка на 200 нс.
Поэтому использование операторов присваивания и назначения сигналов в одной и той же ситуации может дать разные результаты. Например:
A := B or X;
C := A and Z;
Пусть B = 0, Z = 1 и в рассматриваемый момент времени X переключается из 0 в 1. После выполнения этих двух операторов C равно 1. В случае:
A <= B or X;
C <= A and Z;
в последнем операторе используется старое значение A. Поэтому поскольку старое значение A есть 0, то сигнал C в данный момент времени остается равным 0. Другими словами, в предыдущем примере имеем последовательное выполнение операторов, а в последнем — параллельное, не зависящее от того, в каком порядке операторы записаны.
Следует различать понятия инерционной и транспортной задержек. В операторе y <= x1 and x2 after 200 ns; подразумевается инерционная задержка, т.е. y примет после 200 нс новое значение x1 and x2, равное 1,только, если значение x1 and x2 оставалось равным 1 в течение этих 200 нс. В случае транспортной задержки, которая указывается в виде y <= transport x1 and x2 after 200 ns; сигнал проходит на выход вне зависимости от его длительности.
Оператор ожидания:
wait on <список_сигналов> until <условие> for <значение_времени>;
Возможны сокращенные формы:
wait on <список_сигналов>;
wait until <условие>;
wait for <значение_времени>;
Здесь подразумевается задержка до изменения хотя бы одного сигнала из списка, до выполнения условия или до исчерпания времени соответственно.