Vectors
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 9 de 90.
Um vector é um fio ou reg de vários bits. Em vez de um único bit, os vectors permitem trabalhar com bus de data. É uma coleção de bits agrupados.
Nota: Um vector não é um tipo de data separado. É simplesmente uma versão de vários 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], em que 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 vector, usa números decimais para as posições dos bits (índices) e valores binários (0 ou 1) para as atribuições.
Isso acontece porque uma posição de 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". Atribuir um valor decimal como 75 a um único bit não armazena 75; o Verilog mantém silenciosamente apenas o bit menos significativo, portanto, escreva sempre 0 ou 1 explicitamente.
reg [7:0] data;
data = 170;
data[0] = 1; // Definir LSB como 1
data[7] = 0; // Definir MSB como 0
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)Ordem dos bits
A ordem dos bits é importante:
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 MSB à esquerda.
Atribuindo valores
reg [3:0] a;
a = 10;
a = 5;
a = 3; Fatias de vetor
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 Desafio
O module abaixo precisa de declarações de vector.
O que fazer:
- Change cada input e output para serem vectors de 8 bits.
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;
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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online