Laço For
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 58 de 90.
Os loops em Verilog permitem executar um bloco de código várias vezes. Eles são especialmente úteis em testbenches para gerar padrões de teste repetitivos, inicializar a memória e percorrer arrays. Ao contrário 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 comumente usado é o loop for, 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 a repetir
end| Parte | O que faz | Exemplo |
|---|---|---|
initialization | Define o valor inicial | i = 0 |
condition | Quando parar | i < 10 |
increment | Altera a cada repetição | 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 bancadas de teste
Os 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.
Laço 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 controle do loop deve ser integer ou reg | Não pode ser wire |
Use begin/end para várias instruções | Necessário para mais de uma linha |
| Evite loops infinitos | Certifique-se de que a condição eventualmente se torne falsa |
| Use limites constantes em código sintetizável | A síntese desenrola o loop em uma cópia da lógica para cada iteração |
Desafio
O que fazer:
Adicione o laço for 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 um loop for
// Inicialize i = 0
// Repita enquanto i < 4
// Incremente i = i + 1
// Dentro do loop, 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 projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online