Menu
Coddy logo textTech

Vetores

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 9 de 90.

Um vector é um wire ou reg de múltiplos bits. Em vez de um single bit, vectors permitem que você trabalhe com barramentos de data. É uma coleção de bits agrupados.

Nota: Um vector não é um tipo de dados separado. É simplesmente uma versão de múltiplos bits de wire ou reg.

wire single;        // Bit único
wire [7:0] bus;     // Vetor de 8 bits (bits 7 até 0)

Para declarar um vector, você usa a sintaxe [MSB:LSB] onde MSB é o bit mais significativo e LSB é o menos significativo.

wire [3:0] a;       // vetor wire de 4 bits
reg [7:0] data;     // vetor reg de 8 bits
wire [15:0] addr;   // vetor wire de 16 bits

Acessando Bits

Quando você acessa bits individuais ou fatias (slices) de um `vector`, você usa números decimais para as posições dos bits (índices) e valores binários (0 ou 1) para as atribuições.

Isso ocorre porque uma posição de bit é uma localização (como um endereço), que é naturalmente expressa como um número decimal, enquanto o valor armazenado nesse bit só pode ser 0 ou 1 — uma escolha binária.

Por exemplo, data[0] significa "bit número zero," e = 1 significa "defini-lo como alto." Atribuir um decimal como 75 a um único bit não armazena 75 — o Verilog silenciosamente mantém apenas seu bit mais baixo — portanto, sempre escreva 0 ou 1 explicitamente.

reg [7:0] data;

data = 170;  
data[0] = 1;             // Define o LSB como 1
data[7] = 0;             // Define o MSB como 0
data[3:1] = 3'b101;      // Set bits 3,2,1 to 101 (binary remains)

Bit Order

A ordem dos bits importa:

wire [3:0] a;     // a[3] é o MSB, a[0] é o LSB
wire [0:3] b;     // b[0] é o MSB, b[3] é o LSB (menos comum)

A maioria dos projetistas usa o formato [MSB:LSB] com o MSB à esquerda.

Atribuindo Valores

reg [3:0] a;

a = 10;       
a = 5;         
a = 3;        

Fatiamento de Vetores (Vector Slices)

Você pode acessar um intervalo de bits:

reg [15:0] word;

word[15:8] = 255;        // Atribui o byte superior (8'hFF = 255)
word[7:0]  = 0;          // Atribui o byte inferior (8'h00 = 0)
word[3:1]  = 3'b101;     // Assign a slice 
challenge icon

Desafio

O module abaixo precisa de declarações de vector. 

O que fazer: 

  1. Change cada input e output para serem vectors de 8-bit.

Experimente você mesmo

module vector_example(
  input a,          // Altere para vetor de 8 bits [7:0]
  input b,          // Altere para vetor de 8 bits [7:0]
  output c          // Altere para vetor de 8 bits [7:0]
);
  
  assign c = a & b;
  
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos