For Loop
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 58 de 90.
Loops em Verilog permitem executar um bloco de código várias vezes. Eles são especialmente úteis em bancadas de teste para gerar padrões de teste repetitivos, inicializar memory e iterar sobre arrays. Diferentemente das descrições de hardware, que são executadas em paralelo, os loops são executados sequencialmente, o que os torna ideais para simulação e testes.
O loop mais usado é o <strong>for</strong> loop, que se repete um número específico de vezes. Um loop for executa um bloco de código repetidamente, com uma variável de loop que muda a cada iteração. Você controla exatamente quantas vezes ele é executado.
Sintaxe:
for (initialization; condition; increment) begin
// Código para repetir
end| Parte | O que faz | Exemplo |
|---|---|---|
initialization | Define o valor inicial | i = 0 |
condition | Quando parar | i < 10 |
increment | Muda a cada loop | i = i + 1 |
Exemplo simples
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endSaída:
i = 0
i = 1
i = 2
i = 3
i = 4O loop é executado 5 vezes (i = 0, 1, 2, 3, 4).
Laço for em testbenches
Laços for são comumente usados para testar todas as combinações de entrada:
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
endIsso testa todos os 16 valores possíveis de um sinal de 4 bits.
Loop for com Arrays
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
endIsso inicializa 10 posições de memória.
Regras importantes
| Regra | Explicação |
|---|---|
A variável de loop deve ser integer ou reg | Não pode ser wire |
Use begin/end para várias instruções | Obrigatório para mais de uma linha |
| Evite loops infinitos | Certifique-se de que condition eventualmente se torne falsa |
| Mais bem utilizado em testbenches | A maioria dos loops não é sintetizável |
Desafio
O que fazer:
Adicione o for loop que está faltando para imprimir os números de 0 a 3.
Experimente você mesmo
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: Adicione o laço for
// Inicialize i = 0
// Loop enquanto i < 4
// Incremente i = i + 1
// Dentro, imprima com: $display("i = %d", i);
$finish;
end
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators 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 LogicPratique por conta própria: Compilador de Verilog online