Programación en Verilog/Jerarquía

← Módulos Jerarquía Funciones y Tareas →


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 editar

El 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


← Módulos Jerarquía Funciones y Tareas →