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 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 entrada: señales que llegan al interior del módulo
- Puertos de salida: 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 leer.
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íneaReglas para las entradas:
- No se les puede asignar un valor dentro del módulo
- No se pueden declarar como
reg - Siempre son
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 wireReglas para las salidas:
- Puede ser
wire(conassign) oreg(conalways) - Debe estar 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 módulo. Le indica a Verilog tres cosas sobre cada puerto:
- Dirección: ¿es de entrada, de salida o de entrada y salida?
- Tamaño: ¿cuántos bits de ancho tiene?
- 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 puede leer el módulo (entradas)
- Qué señales puede escribir el módulo (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 al output reg
end
assign diff = a - b; // Escribiendo al output wire
endmoduleDesafío
Completa las declaraciones de puertos
Qué hacer:
- Añade una entrada de 8 bits llamada
data_in - Añade una entrada de un solo bit llamada
clk - Añade una salida de 4 bits llamada
result(usa reg: se asignará en un bloque always) - 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);
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: circuito de compuertas lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores, parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online