Menu
Coddy logo textTech

Puertos de entrada y salida

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

Los puertos de entrada y salida (input y output) son las conexiones que permiten a un module comunicarse con el mundo exterior. Son como los pines de un chip. Los puertos son la interfaz entre un module y el resto del diseño.

Cada módulo tiene:

  • Puertos de entrada — señales que entran al módulo
  • Puertos de salida — señales que salen del módulo

Puertos Input

Los puertos Input reciben data desde el exterior. No se pueden cambiar dentro del module—only read.

input clk;        // Entrada de un solo bit
input [7:0] data; // Vector de entrada de 8 bits
input a, b;       // Múltiples entradas en una línea

Reglas para las entradas:

  • No se les puede asignar un valor dentro del módulo
  • No se pueden declarar como reg
  • Siempre son wire (de manera predeterminada)

Output Ports

Puerto de salida envía datos al exterior. Pueden ser manejados por bloques assign o always.

output out;           // Salida de un solo bit
output [3:0] result;  // Salida de 4 bits
output reg busy;      // La salida puede ser reg
output wire ready;    // La salida puede ser wire

Reglas para las salidas:

  • Pueden ser wire (con assign) o reg (con always)
  • Deben ser conducidas por algo dentro del módulo

Sintaxis de declaración de puertos

La sintaxis de declaración de puertos es la forma específica en que se escriben los puertos de entrada y salida en un módulo. Le indica a Verilog tres cosas sobre cada puerto:

  1. Dirección: ¿es input, output o inout?
  2. Tamaño: ¿cuántos bits tiene de ancho?
  3. Nombre: ¿cómo se llama?
module example (
  input [7:0] data_in,    // Vector de entrada
  input clk,              // Entrada simple
  input enable,           // Entrada simple
  output reg [7:0] out,   // Salida reg
  output busy             // Salida wire
);

Por qué importa la dirección del puerto

La dirección le indica a Verilog:

  • Qué señales el módulo puede leer (entradas)
  • Qué señales el módulo puede escribir (salidas)
  • Qué tipos de conexiones están permitidas

Usar la dirección incorrecta causa errores de compilación.

Ejemplo de Código

module port_demo (
  input [3:0] a,        // Solo se puede leer
  input [3:0] b,        // Solo se puede leer
  output reg [3:0] sum, // Se puede escribir (reg)
  output [3:0] diff     // Se puede escribir (wire)
);
  always @(*) begin
    sum = a + b;        // Escribiendo a output reg
  end
  
  assign diff = a - b;   // Escribiendo a output wire
endmodule
challenge icon

Desafío

Completa las declaraciones de puertos

Qué hacer:

  1. Añade una entrada de 8 bits llamada data_in
  2. Añade una entrada de un solo bit llamada clk
  3. Añade una salida de 4 bits llamada result (usa reg — se asignará en un bloque siempre)
  4. Añade una salida de un solo bit llamada valid (usa wire — se asignará con assign)

Pruébalo tú mismo

module port_challenge (
  // Tarea 1: Añade una entrada de 8 bits llamada data_in
  
  
  // Tarea 2: Añade una entrada de un solo bit llamada clk
  
  
  // Tarea 3: Añade una salida de 4 bits llamada result (usa reg)
  
  
  // Tarea 4: Añade una salida de un solo bit llamada valid (usa wire)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
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