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 в тестовых окружениях (Testbench)

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

integer 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 ячеек memory.

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

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

Задание

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

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

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

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Проверьте себя

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

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