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 enterosEl 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: 255Los 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 decimalArray vs Vector
| Vector | Array | |
|---|---|---|
| Qué es | Wire o reg de múltiples bits | Colección de múltiples valores |
| Sintaxis | [MSB:LSB] | [size] |
| Ejemplo | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Acceso | data[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
Desafío
Completa el código a continuación para crear un array que almacene 4 valores de prueba.
Qué hacer:
- Declara un array llamado
test_data- Usa el tipo de datos
reg(porque almacena valores en un testbench) - Cada elemento debe tener un ancho de 8 bits (
[7:0]) - El array debe tener 4 elementos (
[0:3])
- Usa el tipo de datos
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 enterosAcceso 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
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
¿Qué es Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo