Menu
Coddy logo textTech

Forever Loop

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

Цикл forever повторяет блок кода непрерывно, forever. Он никогда не останавливается сам.

Цикл forever выполняется повторно без end. Он полезен для генерации тактовых сигналов и других непрерывных сигналов в тестовых стендах.

Синтаксис:

forever begin
  // Код, который повторяется вечно
end

Простой пример

forever begin
  $display("This prints forever");
end

Это будет выводиться бесконечно и приведёт к сбою вашей симуляции. Всегда добавляйте задержку или условие остановки.

Создание часов (распространённое применение)

Наиболее распространённое применение forever — создание тактового сигнала:

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;   // Переключать каждые 5 единиц времени
  end
end

Это создаёт часы, которые работают на протяжении всей симуляции.

forever с disable

Остановить цикл forever можно с помощью оператора disable:

initial begin : clock_gen   // Имя добавлено здесь
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // Теперь это работает
end

Forever и другие циклы

ЦиклОстанавливается?Когда использовать
forДа (после фиксированного числа итераций)Известное число repeats
whileДа (когда условие ложно)Неизвестное условие остановки
repeatДа (после фиксированного числа итераций)Известное число repeats
foreverНет (никогда)Непрерывные сигналы (часы)

Важные правила

ПравилоОбъяснение
Обязательно включать задержку#10 или @(posedge clk)
Без задержки симуляция зависаетБесконечный loop без продвижения time
Использовать с disable, чтобы остановитьИначе симуляция никогда не заканчивается
Лучше всего использовать в тестбенчахНе поддерживается синтезом
challenge icon

Задание

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

Добавьте отсутствующий цикл forever, чтобы создать часы, которые переключаются через каждые 10 единиц времени.

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

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: Добавить цикл forever для переключения clk каждые 10 единиц времени
  end
endmodule
quiz iconПроверьте себя

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

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

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