Menu
Coddy logo textTech

Mapeo de puertos por orden

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 35 de 90.

En la lección anterior, aprendiste sobre el mapeo de puertos por nombre, donde etiquetas explícitamente cada conexión usando .port(signal). Ahora cubriremos el método alternativo: mapeo de puertos por orden.

Conecta señales a los puertos de un módulo basándose en el orden en que aparecen en la definición del módulo. Simplemente enumeras las señales entre paréntesis, y Verilog las hace coincidir una por una.

Sintaxis:

module_name instance_name (signal1, signal2, signal3);

La primera señal se conecta al primer puerto, la segunda al segundo puerto, y así sucesivamente.

Ejemplo

Definición del módulo:

module or_gate (
  input in1,      // Primer puerto
  input in2,      // Segundo puerto
  output result   // Tercer puerto
);
  assign result = in1 | in2;
endmodule

Instanciación con mapeo de puertos por orden:

or_gate or1 (input_a, input_b, output_y);

Esto conecta:

  • Primera señal input_a → primer puerto in1
  • Segunda señal input_b → segundo puerto in2
  • Tercera señal output_y → tercer puerto result

El orden importa

Con el mapeo de puertos por orden, la secuencia es crítica:

// Orden correcto
or_gate or1 (input_a, input_b, output_y);

// Orden incorrecto - ¡señales conectadas a los puertos equivocados!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

Si confundes el orden, las conexiones irán a los puertos incorrectos. Esto puede ser difícil de depurar porque el código parece correcto a primera vista.

Mapeo de puertos por nombre vs. por orden

CaracterísticaPor nombrePor orden
Sintaxis.port(signal)signal1, signal2
¿Importa el orden?No
¿Autodocumentado?No
Riesgo de erroresBajoAlto
Recomendado paraLa mayoría de los diseñosSolo casos simples

Cuándo usar el mapeo de puertos por orden

El mapeo de puertos por orden es aceptable cuando:

  • El módulo tiene muy pocos puertos (2-3)
  • El orden de los puertos es obvio y es poco probable que cambie
  • Está escribiendo bancos de pruebas (testbenches) rápidos

Para la mayoría de los diseños, se prefiere el mapeo de puertos por nombre porque es más claro y menos propenso a errores.

challenge icon

Desafío

Completa la instanciación enumerando las señales en el orden correcto utilizando el mapeo de puertos por orden.

Qué hacer:

Puertos del módulo (en este orden):

  1. input en (habilitación)
  2. input [7:0] d (entrada de datos)
  3. output [7:0] q (salida de datos)

Señales a conectar:

  • enable_signal → conectar a en
  • data_input → conectar a d
  • data_output → conectar a q

Hoja de referencia

El mapeo de puertos por orden conecta señales basándose en su posición, coincidiendo con el orden de definición de los puertos del módulo:

module_name instance_name (signal1, signal2, signal3);

Ejemplo con un módulo or_gate (puertos: in1, in2, result):

or_gate or1 (input_a, input_b, output_y);

El orden es crítico — intercambiar las señales provoca conexiones incorrectas que son difíciles de depurar.

CaracterísticaPor NombrePor Orden
Sintaxis.port(signal)signal1, signal2
¿El orden importa?No
Riesgo de erroresBajoAlto
Recomendado paraLa mayoría de los diseñosSolo puertos simples/escasos

Pruébalo tú mismo

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: Instanciar el registro con el nombre reg1 usando mapeo por ORDEN
  // Listar las señales en el orden correcto: enable_signal, data_input, data_output
  // No usar la sintaxis .port(signal)

endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos