Menu
Coddy logo textTech

Initial Block

Часть раздела Основы путешествия по Verilog на Coddy. Урок 47 из 90.

В Verilog есть два процедурных блока: initial (выполняется один раз) и always (выполняется непрерывно). Теперь рассмотрим блок initial.

Что такое блок Initial?

Блок initial выполняется только один раз в начале симуляции (в момент time 0). Когда он завершает работу, он больше не выполняется.

В основном используется в тестовых стендах для:

  • Установки начальных значений
  • Генерации тестовых сигналов
  • Отображения сообщений
  • Запуска симуляции

Синтаксис

initial begin
  // Операторы выполняются один раз, последовательно
end

Базовый пример

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

Вывод:

Simulation started
This runs once

Использование initial block для тестовых сигналов

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

Это изменяет a в моменты времени: 0, 10 и 20.

initial vs всегда

 initialalways
RunsOnceНепрерывно (бесконечно)
Используется дляТестбенчей, инициализацииАппаратного обеспечения (триггеров, счётчиков)
Синтезируемый?Нет (только симуляция)Да (со списком чувствительности)

Важные примечания

  • initial-блоки не подлежат синтезу. Их нельзя преобразовать в аппаратное обеспечение
  • Используйте initial только в тестбенчах
  • Если тестбенч содержит свободно работающие часы (например, always #5 clk = ~clk;), simulation runs бесконечно, если не вызвать $finish; при наличии только initial-блока симулятор останавливается сам, когда не остаётся событий, но добавление $finish всё равно является хорошей практикой
challenge icon

Задание

Добавьте пропущенный блок initial, который устанавливает a в 0, затем после 10 единиц времени устанавливает a в 1.

Что нужно сделать:

  1. Добавьте initial begin и end
  2. Установите a = 0
  3. Подождите #10
  4. Установите a = 1
  5. Добавьте $finish, чтобы завершить simulation

Попробуйте сами

module test;
  reg a;
  
  // TODO: Добавьте блок initial здесь
  // Установите a = 0
  // Подождите #10
  // Установите a = 1
  // Добавьте $finish; для завершения симуляции
  
endmodule
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog