Dynamic Array
Table of Contents
A dynamic array is one dimension of an unpacked array whose size can be set or changed at run-time. Dynamic array is Declared using an empty word subscript [ ].
The space for a dynamic array doesn’t exist until the array is explicitly created at run-time, space is allocated when new[number] is called. the number indicates the number of space/elements to be allocated.
Dynamic array Syntax
data_type array_name [ ];
data_type is the data type of the array elements.
Dynamic array methods
new[ ] –> allocates the storage.
size( ) –> returns the current size of a dynamic array.
delete( ) –> empties the array, resulting in a zero-sized array.
Example:
//declaration bit [7:0] d_array1[ ]; int d_array2[ ]; //memory allocation d_array1 = new[4]; //dynamic array of 4 elements d_array2 = new[6]; //dynamic array of 6 elements //array initialization d_array1 = {0,1,2,3}; foreach(d_array2[j]) d_array2[j] = j;
resize the dynamic array
//Change the length of the array after declaration/initialization d_array1 = new[10]; //dynamic array of 10 elements
In the above syntax, d_array1 will get allotted with 10 new memory locations and old values of d_array1 will get deleted. old values of d_array1 elements can be retained by extending the current array by using the below syntax.
//Allocate 6 new elements and retain values of 4 elements. d_array1 = new[10](d_array1);
Delete the dynamic array
//delete array d_array1.delete;
array_name.delete() method will delete the array.
Dynamic array examples
Dynamic Array Declaration, Allocation and Initialization.
module dynamic_array; //dynamic array declaration bit [7:0] d_array1[]; int d_array2[]; initial begin $display("Before Memory Allocation"); $display("\tSize of d_array1 %0d",d_array1.size()); $display("\tSize of d_array2 %0d",d_array2.size()); //memory allocation d_array1 = new[4]; d_array2 = new[6]; $display("After Memory Allocation"); $display("\tSize of d_array1 %0d",d_array1.size()); $display("\tSize of d_array2 %0d",d_array2.size()); //array initialization d_array1 = {0,1,2,3}; foreach(d_array2[j]) d_array2[j] = j; $display("--- d_array1 Values are ---"); foreach(d_array1[i]) $display("\td_aaray1[%0d] = %0d",i, d_array1[i]); $display("---------------------------------"); $display("--- d_array2 Values are ---"); foreach(d_array2[i]) $display("\td_aaray2[%0d] = %0d",i, d_array2[i]); $display("---------------------------------"); end endmodule
Simulator Output:
Before Memory Allocation Size of d_array1 0 Size of d_array2 0 After Memory Allocation Size of d_array1 4 Size of d_array2 6 --- d_array1 Values are --- d_aaray1[0] = 0 d_aaray1[1] = 1 d_aaray1[2] = 2 d_aaray1[3] = 3 --------------------------------- --- d_array2 Values are --- d_aaray2[0] = 0 d_aaray2[1] = 1 d_aaray2[2] = 2 d_aaray2[3] = 3 d_aaray2[4] = 4 d_aaray2[5] = 5 ---------------------------------
Dynamic Array delete method
module dynamic_array; //dynamic array declaration bit [7:0] d_array1[]; int d_array2[]; initial begin //memory allocation d_array1 = new[2]; d_array2 = new[3]; //array initialization d_array1 = {2,3}; foreach(d_array2[j]) d_array2[j] = j; $display("--- d_array1 Values are ---"); foreach(d_array1[i]) $display("\td_aaray1[%0d] = %0d",i, d_array1[i]); $display("---------------------------------"); $display("--- d_array2 Values are ---"); foreach(d_array2[i]) $display("\td_aaray2[%0d] = %0d",i, d_array2[i]); $display("---------------------------------"); //delete array d_array1.delete; d_array2.delete; $display("After Array Delete"); $display("\tSize of d_array1 %0d",d_array1.size()); $display("\tSize of d_array2 %0d",d_array2.size()); end endmodule
Simulator Output:
--- d_array1 Values are --- d_aaray1[0] = 2 d_aaray1[1] = 3 --------------------------------- --- d_array2 Values are --- d_aaray2[0] = 0 d_aaray2[1] = 1 d_aaray2[2] = 2 --------------------------------- After Array Delete Size of d_array1 0 Size of d_array2 0
resizing dynamic array
The below example shows the increasing dynamic array size by overriding and retaining old values.
module dynamic_array; //dynamic array declaration bit [7:0] d_array1[]; int d_array2[]; initial begin //memory allocation d_array1 = new[2]; d_array2 = new[3]; //array initialization d_array1 = {2,3}; foreach(d_array2[j]) d_array2[j] = j; $display("----- d_array1 Values are -----"); foreach(d_array1[i]) $display("\td_aaray1[%0d] = %0d",i, d_array1[i]); $display("----- d_array2 Values are -----"); foreach(d_array2[i]) $display("\td_aaray2[%0d] = %0d",i, d_array2[i]); //Increasing the size by overriding the old values d_array1 = new[4]; //Create dynamic array of 4 elements $display("Size of Array d_array1 %0d",d_array1.size()); $display("----- d_array1 Values are -----"); foreach(d_array1[i]) $display("\td_aaray1[%0d] = %0d",i, d_array1[i]); //Increasing the size by retaining the old values d_array2 = new[5](d_array2); //Create dynamic array of 5 elements, retaining old values $display("Size of Array d_array2 %0d",d_array2.size()); $display("----- d_array2 Values are -----"); foreach(d_array2[i]) $display("\td_aaray2[%0d] = %0d",i, d_array2[i]); end endmodule
Simulator Output:
----- d_array1 Values are ----- d_aaray1[0] = 2 d_aaray1[1] = 3 ----- d_array2 Values are ----- d_aaray2[0] = 0 d_aaray2[1] = 1 d_aaray2[2] = 2 Size of Array d_array1 4 ----- d_array1 Values are ----- d_aaray1[0] = 0 d_aaray1[1] = 0 d_aaray1[2] = 0 d_aaray1[3] = 0 Size of Array d_array2 5 ----- d_array2 Values are ----- d_aaray2[0] = 0 d_aaray2[1] = 1 d_aaray2[2] = 2 d_aaray2[3] = 0 d_aaray2[4] = 0