Bloques de control Verilog
El comportamiento del hardware no se puede implementar sin declaraciones condicionales y otras formas de controlar el flujo de la lógica. Verilog tiene un conjunto de bloques de flujo de control y mecanismos para lograr lo mismo.
si-otro-si
Esta sentencia condicional se utiliza para tomar una decisión sobre si ciertas declaraciones deben ejecutarse o no. Esto es muy similar al if-else-if
declaraciones en C. Si la expresión se evalúa como verdadera, entonces se ejecutará la primera declaración. Si la expresión se evalúa como falsa y si es un else
parte existe, el else
parte será ejecutada.
// 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]
El else
parte de un if-else es opcional y puede causar confusión si un else
se omite en una secuencia if anidada. Para evitar esta confusión, es más fácil asociar siempre el else al anterior si éste carece de else. Otra forma es encerrar declaraciones dentro de un begin-end
bloquear. El último else
parte maneja ninguno de los casos anteriores o predeterminados donde no se cumplió ninguna de las otras condiciones.
Haga clic aquí para leer más sobre if-else-if
Los bucles proporcionan una forma de ejecutar declaraciones únicas o múltiples dentro de un bloque una o más veces. Hay cuatro tipos diferentes de instrucciones de bucle en Verilog.
bucle eterno
Esto ejecutará continuamente las declaraciones dentro del bloque.
forever
[statement]
forever begin
[multiple statements]
end
Ejemplo
module my_design;
initial begin
forever begin
$display ("This will be printed forever, simulation can hang ...");
end
end
endmodule
Registro de simulación 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 bucle
Esto ejecutará declaraciones un número fijo de veces. Si la expresión se evalúa como X o Z, se tratará como cero y no se ejecutará en absoluto.
repeat ([num_of_times]) begin
[statements]
end
repeat ([num_of_times]) @ ([some_event]) begin
[statements]
end
Ejemplo
module my_design;
initial begin
repeat(4) begin
$display("This is a new iteration ...");
end
end
endmodule
Registro de simulación 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.
bucle while
Esto ejecutará declaraciones siempre que una expresión sea verdadera y se cerrará una vez que la condición se vuelva falsa. Si la condición es falsa desde el principio, las declaraciones no se ejecutarán en absoluto.
while (expression) begin
[statements]
end
Ejemplo
module my_design;
integer i = 5;
initial begin
while (i > 0) begin
$display ("Iteration#%0d", i);
i = i - 1;
end
end
endmodule
Registro de simulación ncsim> run Iteration#5 Iteration#4 Iteration#3 Iteration#2 Iteration#1 ncsim: *W,RNQUIE: Simulation is complete.
bucle for
for ( initial_assignment; condition; increment_variable) begin
[statements]
end
Esto controlará las declaraciones usando un proceso de tres pasos:
- Inicializar una variable de contador de bucle
- Evaluar la expresión, generalmente involucrando la variable de contador de bucle
- Incremente la variable del contador del bucle para que, en un momento posterior, la expresión se vuelva falsa y el bucle se cierre.
Ejemplo
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 simulación ncsim> run Loop #0 Loop #1 Loop #2 Loop #3 Loop #4 ncsim: *W,RNQUIE: Simulation is complete.
Haga clic aquí para obtener más información sobre bucles for.
Verilog
- Expresiones, declaraciones y bloques de C# (con ejemplos)
- Expresiones, declaraciones y bloques de Java
- Tutorial de Verilog
- Concatenación Verilog
- Asignaciones de Verilog
- Bloqueo y no bloqueo de Verilog
- Bloques de control Verilog
- Funciones de Verilog
- Tarea Verilog
- Control de retardo de Verilog
- Generador de reloj Verilog