For Loop
Часть раздела Основы путешествия по Verilog на Coddy. Урок 58 из 90.
Циклы в Verilog позволяют выполнять блок кода многократно. Они особенно полезны в тестбенчах для генерации повторяющихся тестовых шаблонов, инициализации памяти и перебора массивов. В отличие от описаний аппаратного обеспечения, которые выполняются параллельно, циклы выполняются последовательно, что делает их идеальными для моделирования и тестирования.
Наиболее часто используемый loop — это <strong>for</strong> loop, который повторяется заданное количество раз. Loop for многократно выполняет блок кода с переменной loop, которая изменяется на каждой итерации. Ты точно управляешь количеством его запусков.
Синтаксис:
for (initialization; condition; increment) begin
// Код для повторения
end| Часть | Что делает | Пример |
|---|---|---|
initialization | Задаёт начальное значение | i = 0 |
condition | Когда остановиться | i < 10 |
increment | Изменяется в каждом loop | i = i + 1 |
Простой пример
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endВывод:
i = 0
i = 1
i = 2
i = 3
i = 4Цикл выполняется 5 раз (i = 0, 1, 2, 3, 4).
Цикл For в тестовых стендах
Циклы For часто используются для проверки всех комбинаций входных данных:
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endТак проверяются все 16 возможных значений 4-битного сигнала.
Цикл For с массивами
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endИнициализирует 10 ячеек памяти.
Важные правила
| Правило | Пояснение |
|---|---|
Переменная Loop должна быть типа integer или reg | Не может быть типа wire |
Используйте begin/end для нескольких операторов | Требуется, если строк больше одной |
| Избегайте бесконечных циклов | Убедитесь, что condition в конечном итоге станет ложным |
| Лучше всего использовать в тестовых стендах | Большинство циклов нельзя синтезировать |
Задание
Что нужно сделать:
Add пропущенный for loop, чтобы print числа от 0 до 3.
Попробуйте сами
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: Добавьте цикл for
// Инициализируйте i = 0
// Цикл пока i < 4
// Инкрементируйте i = i + 1
// Внутри выведите с помощью: $display("i = %d", i);
$finish;
end
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog