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 bitsAcessando 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 Desafio
O módulo abaixo precisa de declarações de vetores.
O que fazer:
- 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 vectorAcessando 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 binaryOrdem 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;
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo