Vectors
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 9 de 90.
Un vector es un wire o reg de varios bits. En lugar de un solo bit, los vectores te permiten trabajar con buses de data. Es una colección de bits agrupados.
Nota: Un vector no es un tipo de datos separado. Es simplemente una versión multibit de wire o reg.
wire single; // Bit único
wire [7:0] bus; // vector de 8 bits (bits 7 hasta 0)Para declarar un vector, usas la sintaxis [MSB:LSB], donde MSB es el bit más significativo y LSB es el menos significativo.
wire [3:0] a; // vector wire de 4 bits
reg [7:0] data; // vector reg de 8 bits
wire [15:0] addr; // vector wire de 16 bitsAcceso a bits
Cuando accedes a bits individuales o segmentos de un vector, usas números decimales para las posiciones de los bits (índices) y valores binarios (0 o 1) para las asignaciones.
Esto se debe a que una posición de bit es una ubicación (como una dirección), que se expresa naturalmente como un número decimal, mientras que el valor almacenado en ese bit solo puede ser 0 o 1: una elección binaria.
Por ejemplo, data[0] significa «bit número cero», y = 1 significa «establecerlo en alto». Asignar un decimal como 75 a un solo bit no almacena 75; Verilog conserva silenciosamente solo su bit menos significativo, así que escribe siempre 0 o 1 explícitamente.
reg [7:0] data;
data = 170;
data[0] = 1; // Establecer LSB a 1
data[7] = 0; // Establecer MSB a 0
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)Orden de bits
El orden de los bits importa:
wire [3:0] a; // a[3] es el MSB, a[0] es el LSB
wire [0:3] b; // b[0] es el MSB, b[3] es el LSB (menos común)La mayoría de los diseñadores usan el formato [MSB:LSB] con MSB a la izquierda.
Asignación de valores
reg [3:0] a;
a = 10;
a = 5;
a = 3; Segmentos de vector
Puedes acceder a un rango de bits:
reg [15:0] word;
word[15:8] = 255; // Asigna el byte superior (8'hFF = 255)
word[7:0] = 0; // Asigna el byte inferior (8'h00 = 0)
word[3:1] = 3'b101; // Assign a slice Desafío
El módulo siguiente necesita declaraciones de vector.
Qué hacer:
- Change cada input y output para que sean vectores de 8 bits.
Pruébalo tú mismo
module vector_example(
input a, // Cambiar a vector de 8 bits [7:0]
input b, // Cambiar a vector de 8 bits [7:0]
output c // Cambiar a vector de 8 bits [7:0]
);
assign c = a & b;
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