Arrays
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 10 de 90.
Um array permite armazenar vários valores em uma variável. Cada elemento do array pode ser acessado pelo seu índice.
Observação: Um array não é um tipo de dado separado. É 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 um bit
wire [3:0] bus [0:3]; // 4 barramentos, cada um com 4 bits de largura
integer counters [0:9]; // 10 números inteirosO número entre colchetes [ ] é o tamanho do array, não a largura em bits.
Acessando elementos do 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]); // Exibe: 255Arrays são muito úteis em bancadas de teste para armazenar dados de teste.
Matrizes multidimensionais
Você pode criar matrizes com várias dimensões:
reg [7:0] matrix [0:3][0:3]; // array 4x4 de valores de 8 bits
matrix[0][0] = 255; // 8'hFF = 255 em decimal
matrix[2][1] = 85; // 8'h55 = 85 em decimalArray vs. vetor
| Vetor | Array | |
|---|---|---|
| O que é | Fio ou reg de vários bits | Coleção de vários 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 é vários valores, cada um com seus próprios bits.
Observações importantes
- Um array
regé sintetizável: as ferramentas de síntese criam memórias, como RAMs e arquivos de registradores, a partir de arrays comoreg [7:0] mem [0:255]; - Arrays também são usados em bancadas de teste para armazenar dados de teste
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 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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online