- Son arrays “unpacked” que no tienen tamaño predefinido.
- Su tamaño se determina dinámicamente asignándose a new[tamaño]
- Opcionalmente se puede inicializar con los valores de otro array (o incluso de él mismo, para redimensionar)
- Las funciones incluídas size() y delete() sirven para obtener su tamaño y para reducir este a cero, respectivamente
int d[], b[]; // Two dynamic arrays
d = new[5]; // Make array with 5 elements
foreach (d[j]) // Initialize
d[j] = j;
b = d; // Copy a dynamic array
b[0] = 5;
$display(d[0],b[0]); // See both values (0 & 5)
d = new[20](d); // Expand and copy
d = new[100]; // Allocate 100 new integers
// Old values are lost
d.delete(); //Delete all elements
Ejemplo de aplicación: Supongamos que tenemos definida una función que calcula el CRC de un paquete de datos e 8 bits , siendo este paquete de datos de tamaño variable.
function [7:0] crc (bit [7:0] packet[])
int tam;
tam = packet.size();
crc = 0;
for (int i=0; i <= tam -1; i++) begin
...
end
endfunction
Supongamos ahora una generador de paquetes aleatorios, tanto en su tamaño como en los datos en si de ese tamaño aleatorio.
// Generador de paquetes aleatorios
bit [7:0] paquete[];
tamanno = $random();
paquete = new[tamanno];
for (int i = 0; i <= paquete.size() -1; i++) begin
paquete[i] = rnd();
end
Finalmente supongamos que recibimos ese paquete de datos y queremos calcular su CRC y añadirlo al paquete de datos como último dato incorporado al array
// calculamos CRC
bit [7:0] mi_crc = crc(paquete);
// incrementamos tamaño de paquete
paquete = new[tamanno + 1](paquete)
// añadimos CRC al final del paquete.
paquete[tamanno] = mi_crc;