Menu
Coddy logo textTech

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. 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 um único bit
wire [3:0] bus [0:3];       // 4 barramentos, cada um com 4 bits de largura
integer counters [0:9];      // 10 inteiros

O número entre colchetes [ ] é o tamanho do array, não a largura em bits.

Acessando elementos de um 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: 255

Arrays são muito úteis em ambientes 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 decimal
matrix[2][1] = 85;             // 8'h55 = 85 decimal

Vetor vs Array

 VetorArray
O que éFio ou reg de múltiplos bitsColeção de vários valores
Sintaxe[MSB:LSB][size]
Exemploreg [7:0] data;reg [7:0] mem [0:255];
Acessodata[3] (bit 3)mem[3] (elemento 3)

Um vetor é um 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 especiais de memória
challenge icon

Desafio

Complete o código abaixo para criar um array que armazene 4 valores de teste.

O que fazer: 

  1. Declare um array chamado test_data
    1. Use o tipo de dado reg (porque ele armazena valores em um testbench)
    2. Cada elemento deve ter 8 bits de largura ([7:0])
    3. O array deve ter 4 elementos ([0:3])

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
  
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online