Menu
Coddy logo textTech

Arrays

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 10 de 90.

Un array permite almacenar múltiples valores en una sola variable. Se puede acceder a cada elemento del array mediante su índice.

Nota: Un array no es un tipo de datos independiente. Es una colección de tipos wire, reg, integer o real.

Declaración de Arrays

Sintaxis: <data_type> <name> [<size>];

reg [7:0] memory [0:255];   // 256 bytes de memoria (cada uno de 8 bits)
reg data [0:7];              // 8 registros de un solo bit
wire [3:0] bus [0:3];       // 4 buses, cada uno de 4 bits de ancho
integer counters [0:9];      // 10 enteros

El número entre corchetes [ ] es el tamaño del arreglo, no el ancho de bits.

Acceso a los elementos de un 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

Los arrays son muy útiles en los bancos de pruebas para almacenar datos de prueba.

Arrays Multidimensionales

Puedes crear arrays con múltiples dimensiones:

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

Array vs Vector

 VectorArray
Qué esWire o reg de múltiples bitsColección de múltiples valores
Sintaxis[MSB:LSB][size]
Ejemploreg [7:0] data;reg [7:0] mem [0:255];
Accesodata[3] (bit 3)mem[3] (elemento 3)

Un vector es un solo valor con múltiples bits.
Un array es múltiples valores, cada uno con sus propios bits.

Notas importantes

  • Los arrays no son sintetizables en muchas herramientas cuando se utilizan con tamaños grandes
  • Los arrays se utilizan principalmente en testbenches
  • Para la memoria de hardware, utilice primitivas de memoria especiales
challenge icon

Desafío

Completa el código a continuación para crear un array que almacene 4 valores de prueba.

Qué hacer: 

  1. Declara un array llamado test_data
    1. Usa el tipo de datos reg (porque almacena valores en un testbench)
    2. Cada elemento debe tener un ancho de 8 bits ([7:0])
    3. El array debe tener 4 elementos ([0:3])

Hoja de referencia

Los arreglos almacenan múltiples valores en una sola variable, a los que se accede por índice. Un arreglo es una colección de tipos wire, reg, integer o real.

Sintaxis de declaración: <data_type> <name> [<size>];

reg [7:0] memory [0:255];  // 256 elementos, cada uno de 8 bits de ancho
wire [3:0] bus [0:3];      // 4 elementos, cada uno de 4 bits de ancho
integer counters [0:9];    // 10 enteros

Acceso a los elementos:

memory[0] = 165;
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);

Arreglos multidimensionales:

reg [7:0] matrix [0:3][0:3];  // Arreglo 4x4 de valores de 8 bits
matrix[0][0] = 255;

Arreglo vs Vector:

  • Vector — un valor con múltiples bits: reg [7:0] data;data[3] accede al bit 3
  • Arreglo — múltiples valores, cada uno con sus propios bits: reg [7:0] mem [0:255];mem[3] accede al elemento 3

Los arreglos se utilizan principalmente en testbenches; para la memoria de hardware, utilice primitivas de memoria especiales.

Pruébalo tú mismo

module arrays;
  
  // Declara un arreglo llamado test_data
  // Debe tener 4 elementos, cada uno de 8 bits de ancho
  // Usa el tipo de dato reg (porque almacena valores en un banco de pruebas)

  
  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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos