Programación en Verilog/Jerarquía
Como se ha detallado en el apartado de los módulos, el identificador module se utiliza para la definición de diseños, estos pueden utilizarse para construir diseños más complejos, es decir, la combinación de módulos con funcionalidad sencilla dan como resultado diseños más complejos. La sintaxis para incluir módulos al diseño es la siguiente.
<nombre módulo> <nombre instancia> (lista de puertos);
Un ejemplo para incluir módulos dentro de un diseño es el siguiente.
module select(in, sel, out)
input [7:0] in;
input [3:0] sel;
output [7:0] out;
wire [7:0] out;
mux mux0(in, sel, out);
endmodule
Conexionado
editarEl conexionado de un módulo puede realizarse de dos formas distintas.
- Por orden: La asignación se realiza de forma implícita, donde cada señal corresponde con el puerto del módulo.
- Por nombre: La conexión se realiza de forma explícita, utilizando .puerto(señal).
Si se dispone de un módulo cuya interfaz es mux(a, b, sel, y), donde a, b y sel son entradas e y una salida, el conexionado a este módulo puede realizarse de la siguiente manera.
module select(in1, in2, sel, out)
....
// Conexionado por orden
mux mux0(in1, in2, sel, out);
// Conexionado por nombre
mux mux1(.b(in2), .a(in1), .y(out), .sel(sel));
endmodule
En el conexionado por nombre la asignación sería la siguiente.
a --> in1 b --> in2 sel --> sel y --> out