Menu
Coddy logo textTech

Цикл While

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

Цикл while повторяет блок кода пока условие истинно. В отличие от цикла for, у него нет встроенного счётчика — вы должны обновлять переменную цикла самостоятельно.

Цикл while проверяет условие перед каждой итерацией. Если условие истинно, цикл выполняется. Если ложно, цикл останавливается.

Синтаксис:

while (condition) begin
  // Код для повторения
end

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

integer i = 0;

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

Вывод:

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

Цикл выполняется до тех пор, пока i < 5.

Сравнение циклов While и For

 Цикл ForЦикл While
СчетчикВстроенныйВы управляете им
Когда использоватьИзвестное количество итерацийНеизвестно, когда цикл остановится
Синтаксисfor (i=0; i<5; i=i+1)while (i < 5)

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

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

integer i = 0;

while (i < 16) begin
  $display("Testing value %d", i);
  i = i + 1;
end

Поиск конкретного значения

integer i = 0;
reg [7:0] data;

while (data[i] != 1) begin
  i = i + 1;
end
$display("First 1 found at position %d", i);

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

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

Задание

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

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

Шпаргалка

Цикл while повторяет блок кода до тех пор, пока условие истинно. Вы должны обновлять переменную цикла вручную.

integer i = 0;

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

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

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

While против For: Используйте for, когда количество итераций известно; используйте while, когда условие остановки динамическое (например, поиск значения).

// Поиск первого установленного бита
while (data[i] != 1) begin
  i = i + 1;
end

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

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

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

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