Menu
Coddy logo textTech

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 single bit, los vectors te permiten trabajar con buses de data. Es una colección de bits agrupados.

Nota: Un vector no es un tipo de data separado. Es simplemente una versión multi-bit de wire o reg.

wire single;        // Bit único
wire [7:0] bus;     // vector de 8 bits (bits 7 hasta 0)

Para declarar un vector, 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 bits

Acceso a Bits

Cuando accedes a bits individuales o segmentos (slices) de un vector, usas números decimales para las posiciones de bit (í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 naturalmente se expresa 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 single bit no almacena 75 — Verilog conserva silenciosamente solo su bit más bajo — por lo que siempre escribe 0 o 1 explícitamente.

reg [7:0] data;

data = 170;  
data[0] = 1;             // Establece LSB a 1
data[7] = 0;             // Establece 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 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;        

Vector Slices

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 
challenge icon

Desafío

El module a continuación necesita declaraciones de vector. 

Qué hacer: 

  1. Cambie 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;
  
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos