Menu
Coddy logo textTech

Vetores

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

Um vetor é um wire ou reg de múltiplos bits. Em vez de um único bit, os vetores permitem que você trabalhe com barramentos de dados. É uma coleção de bits agrupados.

Nota: Um vetor não é um tipo de dado separado. É simplesmente uma versão multi-bit de wire ou reg.

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

Para declarar um vetor, 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 de um vetor, 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 a posição de um bit é um local (como um endereço), que é naturalmente expresso 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". Você não pode atribuir um decimal como 75 a um único bit porque um bit não tem espaço para valores diferentes de 0 ou 1.

reg [7:0] data;

data = 170;  
data[0] = 1;             // Define o LSB para 1
data[7] = 0;             // Define o MSB para 0
data[3:1] = 3'b101;      // Define os bits 3,2,1 como 101 (o binário permanece)

Ordem dos Bits

A ordem dos bits importa:

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

A maioria dos designers utiliza o formato [MSB:LSB] com o MSB à esquerda.

Atribuindo Valores

reg [3:0] a;

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

Fatias de Vetores

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;     // Atribui uma fatia 
challenge icon

Desafio

O módulo abaixo precisa de declarações de vetores. 

O que fazer: 

  1. Altere cada entrada e saída para serem vetores de 8 bits.

Folha de consulta

Um vector é um wire ou reg de múltiplos bits, declarado usando a sintaxe [MSB:LSB]:

wire [7:0] bus;     // 8-bit wire vector
reg [15:0] addr;    // 16-bit reg vector

Acessando bits individuais e fatias (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 binary

Ordem dos bits: [MSB:LSB] é a convenção padrão (ex: [7:0] significa que o bit 7 é o MSB e o bit 0 é o LSB).

Experimente você mesmo

module vector_example(
  input a,          // Alterar para vetor de 8 bits [7:0]
  input b,          // Alterar para vetor de 8 bits [7:0]
  output c          // Alterar 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