- 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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.
1 2 3 4 5 6 7 8 |
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.
1 2 3 4 5 6 7 |
// 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
1 2 3 4 5 6 |
// 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; |