Menu
Coddy logo textTech

Блок initial

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

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

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

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

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

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

Синтаксис

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

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

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

Вывод:

Simulation started
This runs once

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

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

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

Initial vs Always

 initialalways
RunsOnceContinuously (forever)
Use forTestbenches, initializationHardware (flip-flops, counters)
Synthesizable?No (simulation only)Yes (with sensitivity list)

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

  • Блоки initial не синтезируемы — их нельзя превратить в аппаратное обеспечение
  • Используйте initial только в тестбенчах
  • Если тестбенч содержит непрерывный тактовый сигнал (например, always #5 clk = ~clk;), симуляция будет выполняться бесконечно, пока вы не вызовете $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, чтобы завершить симуляцию

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

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

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

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