Menu
Coddy logo textTech

Matrices

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

Un arreglo te permite almacenar varios valores en una variable. Se puede acceder a cada elemento del arreglo mediante su índice.

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

Declaración de arreglos

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 array, 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.

Arreglos multidimensionales

Puedes crear arreglos 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

Vector frente a matriz

 VectorMatriz
Qué esCable o reg de varios 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 valor con múltiples bits.
Un array son 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 bancos de pruebas
  • Para la memoria del hardware, utiliza primitivas de memoria especiales
challenge icon

Desafío

Completa el código siguiente para crear un arreglo que almacene 4 valores de prueba.

Qué hacer: 

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

Pruébalo tú mismo

module arrays;
  
  // Declara un array llamado test_data
  // Debe tener 4 elementos, cada uno de 8 bits de ancho
  // Usa el tipo de datos reg (porque almacena valores en un 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 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

Practica por tu cuenta: Compilador de Verilog online