Instanciación

Módulos

Instanciación de módulos

Las declaraciones de módulo son plantillas a partir de las cuales se crean objetos reales (instanciaciones). Los módulos se instancian dentro de otros módulos, y cada instancia crea un objeto único a partir de la plantilla. La excepción es el módulo de nivel más alto (top) que es su propia instancia.

Sintaxis básica para instanciación

nombre_módulo
  nombre_instancia_1(lista_conexión_puertos), 
  nombre_instancia_2(lista_conexión_puertos),
  ......
  nombre_instancia_n(lista_conexión_puertos);

Argumentos del módulo

Los puertos del módulo instanciado deben coincidir con los definidos en la plantilla. Esto se especifica de dos formas posibles:

* por su nombre (conexión explícita), utilizando un punto (.), p.ej. 

.template_port_name (name_of_wire_connected_to_port)

* por posición (conexión implícita), colocando los puertos en exactamente las mismas posiciones en las listas de puertos tanto de la plantilla como de la instancia.

Ejemplo

// MODULE DEFINITION
module and4(
  input [3:0] a, b,
  output [3:0] c
);
  assign c = a & b;
endmodule //and4
// MODULE INSTANTIATIONS
wire [3:0] in1, in2;
wire [3:0] o1, o2;
/* C1 is an instance of module and4
   C1 ports referenced by position */
and4 C1 (in1, in2, o1);
/* C2 is another instance of and4.
   C2 ports are referenced to the
   declaration by name. */
and4 C2 ( . c(o2), . a(in1), . b(in2));

Los módulos no pueden instanciarse dentro de bloques procedurales.

Módulos Módulos parametrizados