Dynamic Array in SystemVerilog

As name dynamic suggests, an array whose size can be changed during run time simulation.

The size of an array can be specified during run-time by using new[ ]. 

Note: By default, the size of a dynamic array is 0 unless a new[ ] is used.

Dynamic array declaration

bit [2:0] array []; 
string str_arr [];

// To allocate the size of an array
array = new[2];

Dynamic array Methods

Methods

Description

function int size()

Returns the current size of a dynamic array

function void delete()

Delete array results in an empty dynamic array i.e. zero-sized array.

new[ ]

To create a memory. It can also be used to resize or copy a dynamic array.

Note: The new [ ] is different from the function new() which is used in the OOP concept. [Read more in SystemVerilog Classes].

Dynamic array Example

module dynamic_array_example;
  int array [];
  initial begin
    array = new[5];
    array = '{5, 10, 15, 20, 25};
    
    // Print elements of an array
    foreach (array[i]) $display("array[%0d] = %0d", i, array[i]);
    
    // size of an array
    $display("size of array = %0d", array.size());
    
    // Resizing of an array and copy old array content
    array = new[8] (array);
    $display("size of array after resizing = %0d", array.size());
    
    // Print elements of an array
    foreach (array[i]) $display("array[%0d] = %0d", i, array[i]);
    
    // Override existing array: Previous array elememt values will be lost
    array = new[6];
    $display("size of array after overriding = %0d", array.size());
    
    // Print elements of an array
    foreach (array[i]) $display("array[%0d] = %0d", i, array[i]);
    
    array.delete();
    $display("size of array after deleting = %0d", array.size());
    
  end
endmodule

Output:

array[0] = 5
array[1] = 10
array[2] = 15
array[3] = 20
array[4] = 25
size of array = 5
size of array after resizing = 8
array[0] = 5
array[1] = 10
array[2] = 15
array[3] = 20
array[4] = 25
array[5] = 0
array[6] = 0
array[7] = 0
size of array after overriding = 6
array[0] = 0
array[1] = 0
array[2] = 0
array[3] = 0
array[4] = 0
array[5] = 0
size of array after deleting = 0

System Verilog Tutorials