Динамические массивы

Неупакованный массив, размер которого может быть установлен или изменен во время выполнения. Размер динамического массива по умолчанию равен нулю до тех пор, пока он не будет установлен конструктором new(), который используется для выделения памяти массиву и, при необходимости, инициализации его элементов.

Синтаксис

[data_type] [identifier_name]  [];
bit [7:0] stack []; // Динамический массив 8-битных векторов
string names [];    // Динамический массив данных типа string

К динамическим массивам можно применять функции size() и delete(). Первая возвращает количество элементов в массиве на момент вызова, вторая – очищает весь массив.

Для добавления нового элемента в существующий массив необходимо создать новый массив нужного размера и скопировать в него старый массив.

Пример

module dynamic_array_tb;
  int array[]; int id[];

  initial begin
    array = new [5]; array = '{1, 2, 3, 4, 5};
    id = array; $display("id[0] = %d", id[0]);

    id = new [id.size() + 1] (id);
    id [id.size() - 1] = 6;
    $display("New id[6] = %d", id[6]);

    $display("array.size() = %0d, id.size() = %0d", array.size(), id.size());

    array.delete(); $display("array.size() = %0d", array.size());
  end
endmodule

Результат исполнения

id[0] =           1
New id[6] =           x
array.size() = 5, id.size() = 6
array.size() = 0

Пояснение к примеру

В переменную array записывается указатель на первую ячейку области памяти из 5 значений типа int. После чего эта память инициализируется значениями {1, 2, 3, 4, 5}. Затем копия указателя записывается в переменную id и выводится первый элемент массива, на который указывает этот указатель – число 1, которым инициализировали array. Затем массив расширяется, значения из начального массива array копируются в новое место, новый указатель записывается в id. После чего в конец массива id добавляется значение 6. Т.к. данные были скопированы в другое место, то array и id ссылаются теперь на два совершенно разных массива. Последним шагом показано использование функции освобождения памяти, выделенной динамически.

Last updated