Arrays
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 10 de 90.
Um array permite armazenar vários values em uma variável. No array, each elements podem ser acessados por seu índice.
Observação: Um array não é um tipo de dados separado. Ele é uma coleção de wire, reg, integer ou real.
Declarando arrays
Sintaxe: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 bytes de memória (cada um com 8 bits)
reg data [0:7]; // 8 registradores de um único bit
wire [3:0] bus [0:3]; // 4 barramentos, cada um com 4 bits de largura
integer counters [0:9]; // 10 inteirosO número entre colchetes [ ] é o tamanho do array, não a largura em bits.
Acessando elementos de array
reg [7:0] memory [0:3];
memory[0] = 165; // Decimal 165
memory[1] = 90; // Decimal 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // Imprime: 255Arrays são muito úteis em testbenches para armazenar test data.
Arrays Multidimensionais
Você pode criar arrays com múltiplas dimensões:
reg [7:0] matrix [0:3][0:3]; // array 4x4 de valores de 8 bits
matrix[0][0] = 255; // 8'hFF = 255 decimal
matrix[2][1] = 85; // 8'h55 = 85 decimalArray vs Vector
| Vector | Array | |
|---|---|---|
| O que é | wire ou reg de múltiplos bits | Coleção de múltiplos valores |
| Sintaxe | [MSB:LSB] | [size] |
| Exemplo | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Acesso | data[3] (bit 3) | mem[3] (elemento 3) |
Um vetor é um valor com vários bits.
Um array é composto por vários valores, cada um com seus próprios bits.
Notas importantes
- Arrays não são sintetizáveis em muitas ferramentas quando usados com tamanhos grandes
- Arrays são usados principalmente em testbenches
- Para memory de hardware, use primitivas especiais de memory
Desafio
Complete o código abaixo para criar um array que armazena 4 valores de teste.
O que fazer:
- Declare um array chamado
test_data- Use o tipo de dado
reg(porque ele armazena valores em um testbench) - Cada elemento deve ter 8 bits de largura (
[7:0]) - O array deve ter 4 elementos (
[0:3])
- Use o tipo de dado
Experimente você mesmo
module arrays;
// Declare um array chamado test_data
// Ele deve ter 4 elementos, cada um com 8 bits de largura
// Use o tipo de dados reg (porque ele armazena valores em um testbench)
integer i;
initial begin
test_data[0] = 170;
test_data[1] = 240;
test_data[2] = 204;
test_data[3] = 15;
for (i = 0; i < 4; i = i + 1) begin
$display("test_data[%0d] = %b", i, test_data[i]);
end
$finish;
end
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