Menu
Coddy logo textTech

Цикл For

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

Циклы в Verilog позволяют выполнять блок кода несколько раз. Они особенно полезны в тестбенчах для генерации повторяющихся тестовых шаблонов, инициализации памяти и итерации по массивам. В отличие от описаний оборудования, которые работают параллельно, циклы выполняются последовательно, что делает их идеальными для моделирования и тестирования.

Наиболее часто используемым циклом является цикл for, который повторяется определенное количество раз. Цикл for выполняет блок кода многократно, при этом переменная цикла меняется на каждой итерации. Вы точно контролируете, сколько раз он будет выполнен.

Синтаксис:

for (initialization; condition; increment) begin
  // Код для повторения
end
ЧастьЧто делаетПример
initializationУстанавливает начальное значениеi = 0
conditionКогда остановитьсяi < 10
incrementИзменяется в каждом циклеi = i + 1

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

integer i;

for (i = 0; i < 5; i = i + 1) begin
  $display("i = %d", i);
end

Вывод:

i = 0
i = 1
i = 2
i = 3
i = 4

Цикл выполняется 5 раз (i = 0, 1, 2, 3, 4).

Цикл For в тестбенчах

Циклы for обычно используются для проверки всех комбинаций входных сигналов:

reg [3:0] test_value;

for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
  $display("test_value = %d", test_value);
end

Это проверяет все 16 возможных значений 4-битного сигнала.

Цикл for с массивами

reg [7:0] memory [0:9];
integer i;

initial begin
  for (i = 0; i < 10; i = i + 1) begin
    memory[i] = i * 8;
  end
end

Это инициализирует 10 ячеек памяти.

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

ПравилоОбъяснение
Переменная цикла должна быть типа integer или reg Не может быть типа wire
Используйте begin/end для нескольких операторовТребуется для более чем одной строки
Избегайте бесконечных цикловУбедитесь, что условие в конечном итоге станет ложным
Лучше всего использовать в тестбенчахБольшинство циклов не являются синтезируемыми
challenge icon

Задание

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

Добавьте недостающий цикл for, чтобы вывести числа от 0 до 3.

Шпаргалка

Цикл for в Verilog повторяет блок кода определенное количество раз:

for (initialization; condition; increment) begin
  // Код для повторения
end

Пример вывода чисел от 0 до 4:

integer i;

for (i = 0; i < 5; i = i + 1) begin
  $display("i = %d", i);
end

Основные правила:

  • Переменная цикла должна иметь тип integer или reg (не wire)
  • Используйте begin/end для нескольких операторов
  • Убедитесь, что условие в конечном итоге станет ложным, чтобы избежать бесконечных циклов
  • Циклы лучше всего использовать в тестбенчах (в большинстве случаев они не синтезируемы)

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

module for_challenge;
  integer i;
  
  initial begin
    $display("Printing 0 to 3:");
    
    // TODO: Добавить цикл for
    // Инициализировать i = 0
    // Цикл, пока i < 4
    // Инкремент i = i + 1
    // Внутри вывести i
    
    $finish;
  end
endmodule
quiz iconПроверьте себя

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

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