Arrays
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 10 de 90.
Um array permite que você armazene múltiplos valores em uma única variável. Cada elemento no array pode ser acessado por seu índice.
Nota: Um array não é um tipo de dado separado. Ele é uma coleção de tipos 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 bit único
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 de 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 dados de teste.
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 Vetor
| Vetor | Array | |
|---|---|---|
| O que é | Wire ou reg multi-bit | 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 único valor com múltiplos bits.
Um array é múltiplos 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 memória de hardware, use primitivas de memória especiais
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
Folha de consulta
Arrays armazenam múltiplos valores em uma única variável, acessados por índice. Um array é uma coleção de tipos wire, reg, integer ou real.
Sintaxe de declaração: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 elementos, cada um com 8 bits de largura
wire [3:0] bus [0:3]; // 4 elementos, cada um com 4 bits de largura
integer counters [0:9]; // 10 inteirosAcessando elementos:
memory[0] = 165;
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);Arrays multidimensionais:
reg [7:0] matrix [0:3][0:3]; // Array 4x4 de valores de 8 bits
matrix[0][0] = 255;Array vs Vetor:
- Vetor — um valor com múltiplos bits:
reg [7:0] data;—data[3]acessa o bit 3 - Array — múltiplos valores, cada um com seus próprios bits:
reg [7:0] mem [0:255];—mem[3]acessa o elemento 3
Arrays são usados principalmente em testbenches; para memória de hardware, use primitivas de memória especiais.
Experimente você mesmo
module arrays;
// Declara um array chamado test_data
// Ele deve ter 4 elementos, cada um com 8 bits de largura
// Use o tipo de dado 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 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