Цикл Repeat
Часть раздела Основы путешествия по Verilog на Coddy — урок 60 из 90.
Цикл repeat выполняет блок кода фиксированное количество раз. В отличие от цикла for, он не использует переменную-счетчик цикла.
Цикл repeat выполняется заданное количество раз. Вы передаете ему константу или выражение, которое определяет, сколько итераций необходимо выполнить.
Синтаксис:
repeat (number) begin
// Код для повторения
endПростой пример
repeat (5) begin
$display("Hello");
endВывод:
Hello
Hello
Hello
Hello
HelloСообщение выводится ровно 5 раз.
Повторение с выражением
integer count = 3;
repeat (count) begin
$display("Looping");
endВывод:
Looping
Looping
LoopingЦикл Repeat против цикла For
| Цикл For | Цикл Repeat | |
|---|---|---|
| Переменная-счетчик | Да (явная) | Нет |
| Когда использовать | Нужно значение индекса | Нужно просто повторение |
| Пример | for (i=0; i<5; i=i+1) | repeat (5) |
Генерация нескольких тактовых циклов
initial begin
clk = 0;
repeat (20) begin
#5 clk = ~clk;
end
endЭто генерирует 20 фронтов тактового сигнала (10 полных циклов).
Важные правила
| Правило | Объяснение |
|---|---|
| Число должно быть неотрицательным | Нельзя повторять отрицательное количество раз |
| Можно использовать константу или выражение | repeat (10) или repeat (count) |
| Переменная цикла недоступна | Невозможно отследить номер итерации |
Используйте begin/end для нескольких операторов | Требуется для более чем одной строки |
Задание
Что нужно сделать:
Добавьте недостающий цикл repeat, чтобы вывести "Verilog" 4 раза.
Шпаргалка
Цикл repeat выполняет блок кода фиксированное количество раз без использования переменной счетчика цикла.
repeat (number) begin
// Код для повторения
endМожно использовать константу или выражение с переменной:
integer count = 3;
repeat (count) begin
$display("Looping");
endРаспространенный вариант использования — генерация тактовых сигналов:
repeat (20) begin
#5 clk = ~clk;
endRepeat против цикла For: Используйте repeat, когда вам нужно только повторение (индекс не требуется); используйте for, когда вам нужно значение счетчика итераций.
Попробуйте сами
module repeat_challenge;
initial begin
$display("Printing 4 times:");
// TODO: Добавить цикл repeat
// Повторить 4 раза
// Внутри вывести "Verilog"
$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