Блоки 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
- Освоение Verilog: полное руководство по проектированию цифровых схем
- Освоение конкатенации в Verilog: практическое руководство
- Основы Verilog: краткий обзор
- Понимание назначений в Verilog: типы, синтаксис и лучшие практики
- Блокирующие и неблокирующие назначения в Verilog: ключевые различия
- Мастерство функций в Verilog для эффективного RTL дизайна
- Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Мастерство математических функций Verilog для эффективного аппаратного дизайна
- Мастерство $timeformat в Verilog: точность и контроль отображения времени