Friday, March 02, 2012

Dynamic arrays

Dynamic Arrays

A dynamic array is one dimension of an unpacked array whose size can be set or changed at runtime. The space for a dynamic array doesn’t exist until the array is explicitly created at runtime.

The syntax to declare a dynamic array is:

data_type array_name [];

where data_type is the data type of the array elements. Dynamic arrays support the same types as fixed-size arrays.

For example:

bit [3:0] nibble[]; // Dynamic array of 4-bit vectors
integer mem[]; // Dynamic array of integers
The new[] operator is used to set or change the size of the array.
The size() built-in method returns the current size of the array.
The delete() built-in method clears all the elements yielding an empty array (zero size).

New()

The built-in function new allocates the storage and initializes the newly allocated array elements either to their default initial value or to the values provided by the optional argument.

dynamic_array_new ::=new [ expression ] [ ( expression ) ]
integer addr[]; // Declare the dynamic array.
addr = new[100]; // Create a 100-element array....
// Double the array size, preserving previous values.
addr = new[200](addr);

The new operator follows the SystemVerilog precedence rules. Since both the square brackets [] and the parenthesis () have the same precedence, the arguments to this operator are evaluated left to right:

[ expression ] first, and ( expression ) second.

size()

The prototype for the size() method is:

function int size();

The size() method returns the current size of a dynamic array, or zero if the array has not been created.

delete()

The prototype for the delete() method is:

function void delete();

The delete() method empties the array, resulting in a zero-sized array.

int ab [] = new[ N ]; // create a temporary array of size N
blocking_assignment ::=|
hierarchical_dynamic_array_variable_identifier = dynamic_array_new.
new [ expression ] [ ( expression ) ]
// use ab
ab.delete; // delete the array contents
$display( "%d", ab.size ); // prints 0

No comments:

Post a Comment

Popular Posts