System Verilog DPI - неизвестный размер массива

У меня такой код:

file.sv

module svtest();

    import "DPI-C" function void my_func(output bit [31:0] id, input bit [31:0] size);

    bit [31:0] my_id;
    bit [31:0] my_size;

    initial
    begin
        my_size = 1 << 30;
        my_func(my_id, my_size);
        $finish();
    end

endmodule

filc.c

void my_func(svBitVecVal* id, svBitVecVal* size)
{
 . . . . .
}

У меня есть проблема: я хочу, чтобы битовый вектор «размера» не был константной длиной (32 бита), я хочу, чтобы неопределенный битовый вектор передавался в файл c. Я видел тип svOpenArrayHandle - выглядит неплохо, но я не могу понять, как объявить его при импорте DPI:

import "DPI-C" function void my_func(output bit [31:0] id, input bit size[]) -> поднять ошибку :-(

Любой совет ?

Спасибо.


person user2715293    schedule 25.08.2013    source источник
comment
Я использую INCISIV 12.1, и декларация DPI в порядке. Использование svOpenArrayHandle и svHigh(), svLow() для получения диапазона массива тоже нормально.   -  person jclin    schedule 26.08.2013


Ответы (1)


Массив без размера не может быть передан функции C, которая принимает нам указатель. Вы собираетесь синтезировать оборудование, и оно не может быть переменным. Он не может увеличиваться или уменьшаться в размерах в соответствии с вашими требованиями.

person LearningToCode    schedule 16.02.2015