Экспортная задача инстанцированного модуля
Я пытаюсь экспортировать несколько задач в 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