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í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 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 wireReglas para las salidas:
- Pueden ser
wire(conassign) oreg(conalways) - 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:
- Dirección: ¿es
input,outputo inout? - Tamaño: ¿cuántos bits tiene de ancho?
- 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
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 siempre) - 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 Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - 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 condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo