Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Управление потоком в Verilog: IF-ELSE, Case, циклы и не только

Реализация поведения оборудования невозможна без условных операторов и механизмов управления логикой. Verilog предоставляет набор блоков управления потоком для этих целей.

if-else-if

Этот условный оператор решает, выполнять ли определенные операторы. Он очень похож на if-else-if в C. Если выражение истинно, выполняется первый оператор. Если ложно и существует else, выполняется часть else.

Синтаксис
// if без else
if (expression) [statement]

// if с else
if (expression) [statement] else [statement]

// Несколько операторов — в begin/end
if (expression) begin [multiple statements] end
else begin [multiple statements] end

// if-else-if цепочка
if (expression) [statement]
else if (expression) [statement]
else [statement]

Часть else опциональна. Пропуск else во вложенных if может вызывать путаницу. Чтобы избежать этого, всегда ассоциируйте else с ближайшим предшествующим if, у которого нет else, или заключайте операторы в begin-end. Последний else обрабатывает случай «ни одно условие не выполнилось» (default).

Нажмите здесь для подробностей об if-else-if

Циклы позволяют выполнять один или несколько операторов в блоке заданное число раз. В Verilog есть четыре типа циклов.

Цикл forever

Выполняет операторы в блоке бесконечно.

forever [statement]
forever begin [multiple statements] end

Пример

module my_design;
  initial begin
    forever begin
      $display ("Это будет печататься вечно, симуляция может зависнуть...");
    end
  end
endmodule

Simulation Log

ncsim> run
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
...
This will be printed forever, simulation can hang ...
Result reached the maximum of 5000 lines. Killing process.

Цикл repeat

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

repeat ([num_of_times]) begin [statements] end
repeat ([num_of_times]) @ ([some_event]) begin [statements] end

Пример

module my_design;
  initial begin
    repeat(4) begin
      $display("Это новая итерация ...");
    end
  end
endmodule

Simulation Log

ncsim> run
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
ncsim: *W,RNQUIE: Simulation is complete.

Цикл while

Выполняет операторы, пока выражение истинно, и завершается, когда условие становится ложным. Если условие ложно с начала, операторы не выполняются ни разу.

while (expression) begin [statements] end

Пример

module my_design;
  integer i = 5;
  initial begin
    while (i > 0) begin
      $display ("Итерация#%0d", i);
      i = i - 1;
    end
  end
endmodule

Simulation Log

ncsim> run
Iteration#5
Iteration#4
Iteration#3
Iteration#2
Iteration#1
ncsim: *W,RNQUIE: Simulation is complete.

Цикл for

for ( initial_assignment; condition; increment_variable) begin [statements] end

Управляет операторами трехшаговым процессом:

Пример

module my_design;
  integer i = 5;
  initial begin
    for (i = 0; i < 5; i = i + 1) begin
      $display ("Loop #%0d", i);
    end
  end
endmodule

Simulation Log

ncsim> run
Loop #0
Loop #1
Loop #2
Loop #3
Loop #4
ncsim: *W,RNQUIE: Simulation is complete.

Нажмите здесь для подробностей о циклах for.

Verilog

  1. Выражения, операторы и блоки в C#: подробное руководство с примерами
  2. Понимание выражений, операторов и блоков в Java
  3. Освоение Verilog: полное руководство по проектированию цифровых схем
  4. Освоение конкатенации в Verilog: практическое руководство
  5. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  6. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  7. Управление потоком в Verilog: IF-ELSE, Case, циклы и не только
  8. Мастерство функций в Verilog для эффективного RTL дизайна
  9. Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
  10. Управление задержками в Verilog: техники таймингов и лучшие практики