Цикл 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 | Она не может иметь тип 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