Vectores
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 múltiples bits. En lugar de un solo bit, los vectores le permiten trabajar con buses de datos. Es una colección de bits agrupados.
Nota: Un vector no es un tipo de dato separado. Es simplemente una versión multibit de wire o reg.
wire single; // Bit único
wire [7:0] bus; // Vector de 8 bits (bits del 7 al 0)Para declarar un vector, se utiliza 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 fragmentos de un vector, utilizas 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". No se puede asignar un decimal como 75 a un solo bit porque un bit no tiene espacio para valores distintos de 0 o 1.
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; // Establecer bits 3,2,1 a 101 (el binario se mantiene)Orden de los bits
El orden de los bits es importante:
wire [3:0] a; // a[3] es MSB, a[0] es LSB
wire [0:3] b; // b[0] es MSB, b[3] es LSB (menos común)La mayoría de los diseñadores usan el formato [MSB:LSB] con el MSB a la izquierda.
Asignación de valores
reg [3:0] a;
a = 10;
a = 5;
a = 3; Slices de Vectores
Puedes acceder a un rango de bits:
reg [15:0] word;
word[15:8] = 255; // Asignar el byte superior (8'hFF = 255)
word[7:0] = 0; // Asignar el byte inferior (8'h00 = 0)
word[3:1] = 3'b101; // Asignar un slice Desafío
El módulo de abajo necesita declaraciones de vectores.
Qué hacer:
- Cambia cada entrada y salida para que sean vectores de 8 bits.
Hoja de referencia
Un vector es un wire o reg de varios bits, declarado utilizando la sintaxis [MSB:LSB]:
wire [7:0] bus; // 8-bit wire vector
reg [15:0] addr; // 16-bit reg vectorAcceso a bits individuales y fragmentos (slices):
reg [7:0] data;
data[0] = 1; // Set LSB to 1
data[7] = 0; // Set MSB to 0
data[3:1] = 3'b101; // Set bits 3,2,1 using binaryOrden de los bits: [MSB:LSB] es la convención estándar (por ejemplo, [7:0] significa que el bit 7 es el MSB y el bit 0 es el LSB).
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 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