Цикл 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Цикл loop выполняется до тех пор, пока i < 5.
While против For Loop
| For Loop | While Loop | |
|---|---|---|
| Счётчик | Встроенный | Вы управляете им |
| Когда использовать | Известное количество итераций | Неизвестно, когда остановится цикл |
| Синтаксис | 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);Важные правила
| Правило | Объяснение |
|---|---|
| condition должна стать false | Иначе возникнет бесконечный loop |
| Обновляй переменную loop внутри | Иначе loop никогда не завершится |
Переменная 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Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog