Menu
Coddy logo textTech

Input And Output Ports

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

Los puertos de entrada y salida son las conexiones que permiten que un módulo se comunique con el mundo exterior. Son como los pines de un chip. Los puertos son la interfaz entre un módulo y el resto del diseño.

Cada módulo tiene:

  • Puertos de Input: señales que entran en el módulo
  • Puertos de Output: señales que salen del módulo

Puertos de entrada

Los puertos de entrada reciben datos desde el exterior. No se pueden cambiar dentro del módulo: solo se pueden 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 inputs:

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

Puertos de salida

Los puertos de salida envían datos al exterior. Pueden ser controlados 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:

  • Puede ser wire (con assign) o reg (con always)
  • Debe ser controlada 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 escribes los puertos de entrada y salida en un module. Le indica a Verilog tres cosas sobre cada puerto:

  1. Dirección: ¿es input, output o inout?
  2. Tamaño: ¿cuántos bits de ancho tiene?
  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 de los puertos

La dirección le indica a Verilog:

  • Qué señales can read el module (inputs)
  • Qué señales can write el module (salidas)
  • Qué tipos de conexiones están permitidos

Usar la dirección incorrecta provoca 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

Completar las declaraciones de puertos

Qué hacer:

  1. Add un input de 8 bits llamado data_in
  2. Add un input de un solo bit llamado clk
  3. Add un output de 4 bits llamado result (usar reg: se asignará en el bloque always)
  4. Add un output de un solo bit llamado valid (usar 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

Practica por tu cuenta: Compilador de Verilog online