Laço For
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 58 de 90.
Loops em Verilog permitem que você execute um bloco de código várias vezes. Eles são especialmente úteis em testbenches para gerar padrões de teste repetitivos, inicializar memória e iterar sobre arrays. Ao contrário das descrições de hardware que rodam em paralelo, os loops executam sequencialmente, tornando-os ideais para simulação e testes.
O laço mais comumente usado é o laço for, que se repete um número específico de vezes. Um laço for executa um bloco de código repetidamente, com uma variável de laço 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 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 executa 5 vezes (i = 0, 1, 2, 3, 4).
Loop For em Testbenches
Loops for são comumente usados para testar todas as combinações de entrada:
reg [3:0] 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 locais 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 múltiplas instruções | Necessário para mais de uma linha |
| Evite loops infinitos | Certifique-se de que a condição eventualmente se torne falsa |
| Melhor utilizado em testbenches | A maioria dos loops não é sintetizável |
Desafio
O que fazer:
Adicione o loop for que falta para imprimir os números de 0 a 3.
Folha de consulta
O laço for em Verilog repete um bloco de código um número específico de vezes:
for (initialization; condition; increment) begin
// Código para repetir
endExemplo imprimindo de 0 a 4:
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
endRegras principais:
- A variável do laço deve ser
integeroureg(nãowire) - Use
begin/endpara múltiplas instruções - Garanta que a condição eventualmente se torne falsa para evitar laços infinitos
- Laços são melhor utilizados em testbenches (na maioria das vezes não são sintetizáveis)
Experimente você mesmo
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: Adicionar loop for
// Inicializar i = 0
// Loop enquanto i < 4
// Incrementar i = i + 1
// Dentro, imprimir 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 SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
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ão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo