Blocos de controle Verilog
O comportamento do hardware não pode ser implementado sem instruções condicionais e outras formas de controlar o fluxo da lógica. A Verilog possui um conjunto de blocos de fluxo de controle e mecanismos para alcançar o mesmo.
if-else-if
Esta declaração condicional é usado para tomar uma decisão sobre se certas instruções devem ser executadas ou não. Isso é muito semelhante ao
if-else-if
instruções em C. Se a expressão for avaliada como verdadeira, a primeira instrução será executada. Se a expressão for avaliada como falsa e se um else
existe, o else
parte será executada. Sintaxe
// if statement without else part
if (expression)
[statement]
// if statment with an else part
if (expression)
[statement]
else
[statement]
// if else for multiple statements should be
// enclosed within "begin" and "end"
if (expression) begin
[multiple statements]
end else begin
[multiple statements]
end
// if-else-if statement
if (expression)
[statement]
else if (expression)
[statement]
else
[statement]
O
else
parte de um if-else é opcional e pode causar confusão se um else
é omitido em uma sequência if aninhada. Para evitar essa confusão, é mais fácil sempre associar o else ao anterior se faltar um else. Outra maneira é incluir instruções dentro de um begin-end
quadra. Os últimos else
parte lida com nenhum dos casos acima ou padrão em que nenhuma das outras condições foi satisfeita. Clique aqui para ler mais sobre if-else-if
Os loops fornecem uma maneira de executar instruções únicas ou múltiplas dentro de um bloco uma ou mais vezes. Existem quatro tipos diferentes de instruções de loop no Verilog.
loop para sempre
Isso executará continuamente as instruções dentro do bloco.
forever
[statement]
forever begin
[multiple statements]
end
Exemplo
module my_design;
initial begin
forever begin
$display ("This will be printed forever, simulation can hang ...");
end
end
endmodule
Registro 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 ... 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.
repetir loop
Isso executará as instruções um número fixo de vezes. Se a expressão for avaliada como X ou Z, ela será tratada como zero e não será executada.
repeat ([num_of_times]) begin
[statements]
end
repeat ([num_of_times]) @ ([some_event]) begin
[statements]
end
Exemplo
module my_design;
initial begin
repeat(4) begin
$display("This is a new iteration ...");
end
end
endmodule
Registro 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.
enquanto loop
Isso executará instruções enquanto uma expressão for verdadeira e sairá quando a condição se tornar falsa. Se a condição for falsa desde o início, as instruções não serão executadas.
while (expression) begin
[statements]
end
Exemplo
module my_design;
integer i = 5;
initial begin
while (i > 0) begin
$display ("Iteration#%0d", i);
i = i - 1;
end
end
endmodule
Registro de simulação ncsim> run Iteration#5 Iteration#4 Iteration#3 Iteration#2 Iteration#1 ncsim: *W,RNQUIE: Simulation is complete.
for loop
for ( initial_assignment; condition; increment_variable) begin
[statements]
end
Isso controlará as instruções usando um processo de três etapas:
- Inicializar uma variável de contador de loop
- Avalie a expressão, geralmente envolvendo a variável do contador de loop
- Incremente a variável do contador de loops para que posteriormente a expressão se torne falsa e o loop seja encerrado.
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
Registro 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