Экспортная задача инстанцированного модуля

Я пытаюсь экспортировать несколько задач в C-программу через DPI-C. Задачи определены в модуле "my_subm" как:

module my_subm;
    task mytask1(...);
    ...
    endtask
    task mytask2(...);
    ...
    endtask
endmodule

И в моем основном модуле "main_mod", где создается экземпляр "my_subm":

module main_mod;
    my_subm my_subm_i ();
    `include "dpic_exports.svh"

    initial begin
        ...
    end
endmodule

Где dpic_exports.svh:

`ifndef DPIC_EXPORTS
`define DPIC_EXPORTS

export "DPI-C" task my_subm_i.mytask1;
export "DPI-C" task my_subm_i.mytask2;

`endif

При попытке его скомпилировать я получаю сообщение об ошибке, в котором говорится, что в "dpic_exports.svh" my_subm_i является недопустимым местом для иерархического имени.

Что я делаю неправильно?

Мне нужно, чтобы эти задачи были доступны из области действия main_mod, так как задачи C, которые будут к ним обращаться, вызываются из этого модуля.

2 ответа

Решение

export оператор должен находиться в том же месте, что и экспортируемая задача / функция. Два предложения: вы можете создавать задачи-оболочки в вашем main_mod и экспортировать их

task mytask1;
  my_subm_i.mytask1;
endtask
task mytask2;
  my_subm_i.mytask2;
endtask
export "DPI-C" task mytask1;
export "DPI-C" task mytask2;

Другой вариант - поставить export заявления внутри my_subn_i и использовать svSetScope(svGetScopeFromName("main_mod.my_subm_i"); в вашем коде C

Кажется, что иерархическая ссылка не допускается в export заявление.

Вот обходной путь. Извиняюсь, если я учу вас сосать яйца:

module my_subm;

    task mytask1(...);
    ...
    endtask
    task mytask2(...);
    ...
    endtask
endmodule

module main_mod;
    my_subm my_subm_i ();

    export "DPI-C" task mytask1;
    export "DPI-C" task mytask2;

    task mytask1(...);
        my_subm_i.mytask1(...);
    endtask

    task mytask2(...);
        my_subm_i.mytask2(...);
    endtask

    initial begin
        ...
    end

endmodule
Другие вопросы по тегам