Verilog HDL имеет богатую коллекцию операторов управления, которые можно использовать в процедурных разделах кода, т.е. е., внутри начального или всегда блока. Большинство из них знакомы программистам традиционных языков программирования, таких как C. Основное отличие состоит в том, что вместо скобок { } в языке C в Verilog HDL используется начало и конец. В Verilog скобки {} используются для объединения битовых строк. Поскольку большинство пользователей знакомы с C, в следующих подразделах обычно показаны только примеры каждой конструкции.

Выражения If и If Else

Условный оператор (или оператор if-else) используется для принятия решения о том, выполняется оператор или нет.

ПРИМЕР:
if (A == 4)
begin
B = 2;
конец
еще
начало
B = 4;
конец

Дело

Оператор case — это многосторонний оператор принятия решения, который проверяет, соответствует ли выражение одному из ряда других выражений, и соответственно разветвляется.

case (‹выражение›)
‹значение1›: ‹оператор›
‹значение2›: ‹оператор›
по умолчанию: ‹оператор ›
конец регистра

В следующем примере проверяется значение 1-битного сигнала.

ПРИМЕР:
case (sig)
1'bz: $display("Сигнал плавает");
1'bx: $display("Сигнал неизвестен");
по умолчанию: $display("Сигнал %b", сигнал);
конец регистра

Навсегда

Навсегда Непрерывно выполняет оператор или блок до конца симуляции.

ПРИМЕР:
начальные
часы =0;
навсегда
#10 clock = ~clock;
конец

Повторить

Выполняет оператор фиксированное количество раз. Если выражение оценивается как неизвестное или высокое сопротивление, оно должно рассматриваться как ноль, и оператор не должен выполняться.

ПРИМЕР:
параметр size = 8, longsize = 16;
reg [size:1] opa, opb;
reg [longsize:1] результат;
begin : mult
reg [longsize:1] shift_opa, shift_opb;
shift_opa = opa;
shift_opb = opb;
результат = 0;
повторить (размер) начать
если (shift_opb[1])
результат = результат + сдвиг_опа ;
shift_opa = shift_opa ‹‹ 1;
shift_opb = shift_opb ›› 1;
конец
конец

Пока

Выполняет оператор до тех пор, пока выражение не станет ложным. Если выражение начинается с false, оператор вообще не должен выполняться.

ПРИМЕР:
begin : count1s
reg [7:0] tempreg;
количество = 0;
tempreg = rega;
в то время как (tempreg) begin
if (tempreg[0])
count = count + 1 ;
tempreg = tempreg ›› 1;
конец
конец

Для

Управляет выполнением связанных с ним операторов с помощью трехэтапного процесса следующим образом:
a) Выполняет присваивание, обычно используемое для инициализации переменной, которая контролирует количество выполняемых циклов.
b) Вычисляет выражение, если результат равен нулю, цикл for должен выйти, а если он не равен нулю, цикл for должен выполнить связанный с ним оператор(ы), а затем выполнить шаг c. Если выражение оценивается как неизвестное или высокоимпедансное значение, оно должно рассматриваться как ноль.
c) Выполняет присваивание, обычно используемое для изменения значения переменной управления циклом, затем повторяет шаг b.

ПРИМЕР:
begin
initial_assignment;
пока (условие) begin
оператор
step_assignment;
конец
конец