Цикл 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 vs For Loop
| Цикл For | Цикл While | |
|---|---|---|
| Счётчик | Встроенный | Управляется вручную |
| Когда использовать | Известно число итераций | Неизвестно, когда цикл остановится |
| Синтаксис | for (i=0; i<5; i=i+1) | while (i < 5) |
Цикл While в тестовых окружениях (Testbenches)
Циклы 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);Важные правила
| Правило | Пояснение |
|---|---|
condition должно стать false | Иначе получится бесконечный loop |
Обновляйте переменную цикла Inside | Иначе loop никогда не завершится |
Переменная цикла должна быть integer или reg | Не может быть wire |
Используйте begin/end для нескольких операторов | Требуется, если строк больше одной |
Задание
Что нужно сделать:
Добавьте пропущенный цикл while, чтобы вычеканить числа от 0 до 2.
Попробуйте сами
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: Добавьте цикл while
// Цикл, пока i < 3
// Внутри выведите i
// Увеличьте i на 1
$finish;
end
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial