Конкурирующие (concurrent) операции названы так потому, что все действия в цифровой схеме выполняются одновременно. Текст на языках описания аппаратуры не описывает последовательность работы создаваемой схемы, а задает порядок ее синтеза. Поэтому добавление дополнительных строк в описание не увеличивает время выполнения операций, как в программах, исполняемых процессорами, а увеличивает размер схемы.
Простейшим видом конкурирующей операции является оператор безусловного присваивания. Его также называют continuous присваиванием, поскольку описываемая операция действует постоянно, а не выполняется один раз.
Пример:
a <= ‘1’;
d <= b and c;
Показанные строки создают схемы, которые постоянно поддерживают для сигнала a уровень логической единицы, а для сигнала d – результат логического выражения bandc. При изменении любого из сигналов b, c сигнал d изменится автоматически, постольку, поскольку созданная схема не требует дополнительного управления ее работой.
В рамках конкурирующего присваивания можно воспользоваться условным оператором when, имеющим следующий вид.
<сигнал_назначения><= <выражение1>when<условие>else<выражение2>;
Например
q <= ‘1’ when a = b else ‘0’;
Сигнал q будет равен ‘1’ все время, пока выполняется условие a = b. Поскольку схемы, построенные по такому описанию, формируются с помощью комбинаторной логики, ветка else обязательна, так как даже при невыполнении условия значение сигнала все равно должно быть определено.