Menu
CoddyTech

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. Puedes 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 (de 8 bits cada uno)
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 en 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 arreglos son muy útiles en los bancos de pruebas para almacenar datos de prueba.

Arreglos multidimensionales

Puedes crear arreglos con varias dimensiones:

reg [7:0] matrix [0:3][0:3];   // Arreglo 4x4 de valores de 8 bits
matrix[0][0] = 255;            // 8'hFF = 255 en decimal
matrix[2][1] = 85;             // 8'h55 = 85 en decimal

Vector frente a matriz

 VectorMatriz
Qué esCable o registro de varios bitsConjunto de varios 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 varios bits.
Un array son varios valores, cada uno con sus propios bits.

Notas importantes

  • Un arreglo reg es sintetizable: las herramientas de síntesis construyen memorias como RAM y archivos de registros a partir de arreglos como reg [7:0] mem [0:255];
  • Los arreglos también se usan en bancos de pruebas para almacenar datos de prueba
challenge icon

Desafío

Completa el código de abajo para crear una matriz que almacene 4 valores de prueba.

Qué hacer: 

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

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 datos 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

Practica por tu cuenta: Compilador de Verilog online