Menu
CoddyTech

Цикл 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 обычно используются для проверки всех комбинаций входных данных:

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 ячеек памяти.

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

ПравилоОбъяснение
Переменная цикла должна иметь тип integer или reg Не может иметь тип wire
Используйте begin/end для нескольких операторовОбязательно, если строк больше одной
Избегайте бесконечных цикловУбедитесь, что условие в конечном счёте станет ложным
Используйте постоянные границы в синтезируемом кодеСинтез разворачивает цикл, создавая отдельную копию логики для каждой итерации
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
    // Внутри цикла выводите с помощью: $display("i = %d", i);
    
    $finish;
  end
endmodule
quiz iconПроверьте себя

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

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

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