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íneaReglas 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 wireReglas para las salidas:
- Puede ser
wire(conassign) oreg(conalways) - 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:
- Dirección: ¿es input, output o inout?
- 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 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
endmoduleDesafío
Completar las declaraciones de puertos
Qué hacer:
- Add un input de 8 bits llamado
data_in - Add un input de un solo bit llamado
clk - Add un output de 4 bits llamado
result(usar reg: se asignará en el bloque always) - 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);
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ño4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPractica por tu cuenta: Compilador de Verilog online