Menu
Coddy logo textTech

Asignación 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 veremos el método alternativo: mapeo de puertos por orden.

Conecta las señales a los puertos de un módulo según 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 asignación 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 la asignación de puertos por orden, la secuencia es fundamental:

// 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 van a los puertos equivocados. Esto puede ser difícil de depurar porque el código parece correcto a primera vista.

Asignación de puertos por nombre frente a por orden

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

Cuándo usar la asignación de puertos por orden

La asignación 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 rápidos

Para la mayoría de los diseños, se prefiere la asignación de puertos por nombre porque es más clara y menos propensa a errores.

challenge icon

Desafío

Completa la instanciación enumerando las señales en el orden correcto mediante 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 que se conectarán:

  • 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: Instancia 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

Practica por tu cuenta: Compilador de Verilog online