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 la asignación de puertos por nombre, donde etiquetas explícitamente cada conexión usando .port(signal). Ahora cubriremos el método alternativo: la asignación de puertos por orden.

Conecta signals a los ports de un module según el order en el que aparecen en la definición del module. Simplemente listas los signals entre paréntesis, y Verilog los empareja uno a uno.

Sintaxis:

module_name instance_name (signal1, signal2, signal3);

El primer signal se conecta al primer port, el segundo al segundo port, 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 order, las conexiones van a los ports wrong. Esto puede ser difícil de depurar porque el código parece correct a primera vista.

Mapeo de puertos por nombre vs por orden

CaracterísticaPor nombrePor orden
Sintaxis.port(signal)signal1, signal2
¿El orden importa?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ás escribiendo bancos de pruebas (testbenches) rápidos

Para la mayoría de los diseños, el mapeo de puertos por nombre es preferible 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 la asignación 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

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 register con el nombre reg1 usando mapeo ORDER
  // Lista las señales en el orden correcto: enable_signal, data_input, data_output
  // No uses 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