Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Dominando Fluxo de Controle em Verilog: IF-ELSE, Case, Loops e Mais

Comportamento de hardware não pode ser implementado sem instruções condicionais e outras formas de controlar o fluxo de lógica. Verilog possui um conjunto de blocos e mecanismos de controle de fluxo para isso.

if-else-if

Esta instrução condicional decide se certas instruções devem ser executadas ou não. Muito semelhante ao if-else-if em C. Se a expressão for verdadeira, a primeira instrução executa. Se falsa e existir parte else, esta será executada.

Sintaxe
// if sem parte else
if (expressao) [instrucao]

// if com parte else
if (expressao) [instrucao] else [instrucao]

// if-else para múltiplas instruções deve usar begin-end
if (expressao) begin [múltiplas instruções] end
else begin [múltiplas instruções] end

// if-else-if
if (expressao) [instrucao]
else if (expressao) [instrucao]
else [instrucao]

A parte else é opcional e pode causar confusão se omitida em if aninhados. Para evitar isso, associe o else ao if anterior que não tem else, ou use blocos begin-end. O último else trata o caso padrão onde nenhuma condição foi satisfeita.

Clique aqui para ler mais sobre if-else-if

Loops permitem executar instruções simples ou múltiplas dentro de um bloco uma ou mais vezes. Existem quatro tipos de loops em Verilog.

Loop forever

Executa continuamente as instruções dentro do bloco.

forever [instrucao]
forever begin [múltiplas instruções] end

Exemplo

module my_design;
  initial begin
    forever begin
      $display ("Isto será impresso para sempre, a simulação pode travar ...");
    end
  end
endmodule

Log de Simulação

ncsim> run
This will be printed forever, simulation can hang ...
This will be printed forever, simulation can hang ...
...
This will be printed forever, simulation can hang ...
Result reached the maximum of 5000 lines. Killing process.

Loop repeat

Executa instruções um número fixo de vezes. Se a expressão for X ou Z, trata como zero e não executa.

repeat ([num_vezes]) begin [instruções] end
repeat ([num_vezes]) @ ([algum_evento]) begin [instruções] end

Exemplo

module my_design;
  initial begin
    repeat(4) begin
      $display("Esta é uma nova iteração ...");
    end
  end
endmodule

Log de Simulação

ncsim> run
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
This is a new iteration ...
ncsim: *W,RNQUIE: Simulation is complete.

Loop while

Executa instruções enquanto uma expressão for verdadeira e sai quando a condição se torna falsa. Se a condição for falsa desde o início, as instruções não executam.

while (expressao) begin [instruções] end

Exemplo

module my_design;
  integer i = 5;
  initial begin
    while (i > 0) begin
      $display ("Iteração#%0d", i);
      i = i - 1;
    end
  end
endmodule

Log de Simulação

ncsim> run
Iteration#5
Iteration#4
Iteration#3
Iteration#2
Iteration#1
ncsim: *W,RNQUIE: Simulation is complete.

Loop for

for (atribuicao_inicial; condicao; incremento_variavel) begin [instruções] end

Controla instruções em três etapas:

Exemplo

module my_design;
  integer i = 5;
  initial begin
    for (i = 0; i < 5; i = i + 1) begin
      $display ("Loop #%0d", i);
    end
  end
endmodule

Log de Simulação

ncsim> run
Loop #0
Loop #1
Loop #2
Loop #3
Loop #4
ncsim: *W,RNQUIE: Simulation is complete.

Clique aqui para ler mais sobre loops for.

Verilog

  1. Expressões, Instruções e Blocos em C#: Guia Completo com Exemplos Práticos
  2. Entendendo Expressões, Instruções e Blocos em Java
  3. Domine o Verilog: Tutorial Completo para Projeto de Circuitos Digitais
  4. Dominando Concatenação Verilog: Guia Prático
  5. Entendendo Atribuições em Verilog: Tipos, Sintaxe e Boas Práticas
  6. Verilog Blocking vs Non-Blocking: Diferenças Essenciais Explicadas
  7. Dominando Fluxo de Controle em Verilog: IF-ELSE, Case, Loops e Mais
  8. Dominando Funções em Verilog para Design RTL Eficiente
  9. Entendendo Tasks em Verilog: Funções vs Tasks, Sintaxe e Uso
  10. Entendendo Controle de Atraso em Verilog: Técnicas de Timing e Boas Práticas