Verilog Esencial: Resumen conciso
Todo código conductual va dentro de module y endmodule. Cualquier diseño digital que crees, irá dentro de un bloque module. Puede tener o no puertos definidos - permiten señales entrar como input o salir como output.
Módulo
El módulo vacío en el ejemplo se llama testbench. Puedes nombrarlo como quieras (alfanumérico con _).

module testbench;
endmodule
Veamos otro módulo con señales d, clk, rstb como entradas y q como salida.

module dff (input d, clk, rstb, output q);
endmodule
Tipos de Datos
Hay principalmente dos tipos en Verilog:
- reg
- wire
Un reg retiene valores como variable, mientras wire es análogo a cable eléctrico que debe impulsarse continuamente. Típicamente wire conecta entre módulos y otras señales.
module testbench;
reg d;
reg rst_b;
reg clk;
wire q;
endmodule
Asignaciones
Verilog tiene tres bloques básicos:
always @ (condición) | siempre ejecutado cuando condición se cumple |
initial | ejecutado una vez al iniciar simulación |
assign [LHS] = [RHS] | LHS actualizado cuando RHS cambia |
Reglas a recordar:
regsolo asignable en bloquesinitialyalwayswiresolo asignable vía sentenciaassign- Si múltiples sentencias en initial/always, envolver en
begin .. end
module testbench;
reg d;
reg rst_b;
reg clk;
wire q;
initial begin
d = 0;
rst_b = 0;
clk = 0;
#100 $finish;
end
always begin
#10 clk = ~clk;
end
endmodule
Observa del ejemplo:
- Múltiples líneas en
initialusan begin y end - Señales
d,rst_b,clkasignadas en initial porque sonreg - Código en initial se ejecuta en 0ns (inicio simulación)
alwayssin condición corre como bucle infinito en C- # representa delay. #10 avanza simulación 10 unidades
clk = ~clk;invierte clock, con #10 antes, togglea cada 10 unidades$finishtermina simulación. Aquí corre 100 unidades y sale
Verilog
- Dominar Verilog: Tutorial completo para diseño de circuitos digitales
- Dominar la concatenación en Verilog: Guía práctica
- Comprender las asignaciones en Verilog: tipos, sintaxis y mejores prácticas
- Bloqueante vs. No bloqueante en Verilog: Diferencias clave explicadas
- Dominar las funciones en Verilog para diseño RTL eficiente
- Comprender las Tasks en Verilog: Funciones vs Tasks, sintaxis y uso
- Dominar el alcance de referencia jerárquica en Verilog: Evitar colisiones de nombres en módulos y bloques
- Generador de reloj en Verilog: Guía de diseño e implementación
- Dominar las funciones matemáticas en Verilog para diseño de hardware eficiente
- Dominar $timeformat en Verilog: Control de precisión y visualización
- Comprender e imprimir timescales de Verilog en cualquier alcance