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

Блоки initial в Verilog: назначение, синтаксис и несинтезируемость

Набор Verilog-операторов обычно выполняется последовательно в симуляции. Эти операторы помещаются в процедурный блок. В Verilog два основных типа процедурных блоков — initial и always.

Синтаксис

initial [single statement]
initial begin [multiple statements] end

Для чего нужен initial блок?

initial блок не синтезируем и не может быть преобразован в аппаратную схему с цифровыми элементами. Поэтому initial блоки служат только для симуляций. Основное применение — инициализация переменных и управление портами дизайна конкретными значениями.

Когда initial блок начинается и заканчивается?

initial блок стартует в начале симуляции в момент времени 0. Выполняется только один раз за всю симуляцию. Завершается, когда все операторы внутри выполнены.

На изображении модуль behave с внутренними сигналами a и b. В initial блоке один оператор, поэтому begin/end не обязательны. Этот оператор присваивает 2'b10 в a при старте в 0 времени.

Что если есть задержка?

Код ниже имеет дополнительный оператор присваивания значения b. Это происходит только через 10 единиц времени после предыдущего оператора. Сначала a получает значение, затем через 10 единиц — b получает 0.

Сколько initial блоков разрешено в модуле?

Нет ограничений на количество initial блоков в модуле.

Код ниже имеет три initial блока, все стартуют одновременно и выполняются параллельно. Однако время завершения каждого может отличаться в зависимости от операторов и задержек внутри.

В примере первый блок задерживается на 20 единиц, второй — суммарно 50 (10+40), третий — 60. Симуляция длится 60 единиц, пока хотя бы один блок активен.

$finish — системная задача Verilog, сообщающая симулятору завершить текущую симуляцию.

Если бы последний блок имел задержку 30, симуляция закончилась бы в 30 единиц, убив все остальные активные initial блоки.

initial begin #30 $finish; end

Нажмите для слайд-шоу с примером симуляции!

Verilog

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