我试图通过DPI-C将几个任务导出到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任务。
答案 0 :(得分:1)
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中,并在C代码中使用svSetScope(svGetScopeFromName("main_mod.my_subm_i");
。
答案 1 :(得分:0)
似乎在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