System verilog 导出实例化模块的任务
我正试图通过DPI-C将多个任务导出到C程序。这些任务在模块my_subm中定义为:System verilog 导出实例化模块的任务,system-verilog,system-verilog-dpi,System Verilog,System Verilog Dpi,我正试图通过DPI-C将多个任务导出到C程序。这些任务在模块my_subm中定义为: module my_subm; task mytask1(...); ... endtask task mytask2(...); ... endtask endmodule 在我的主模块main_mod中,我的子模块被实例化: module main_mod; my_subm my_subm_i (); `include "dpic_expor
module my_subm;
task mytask1(...);
...
endtask
task mytask2(...);
...
endtask
endmodule
在我的主模块main_mod中,我的子模块被实例化:
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任务是从该模块调用的。导出语句必须与要导出的任务/函数位于同一位置。两个建议:您可以在主模块中创建包装器任务并导出这些任务
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中,并使用svsetscopesvgetscopefromname main_mod.my_subm_i;在您的C代码中。在导出语句中似乎不允许层次结构引用 这是解决办法。如果我教你吃蛋,我道歉:
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
这和我一小时前说的有什么不同吗:没有。但我发布我的答案时,你的答案不在那里。它只出现在发布我的完整的1小时前标签后。嘿-你得了10分,我不会抱怨的看到答案太晚了,但我最终是如何在子模块中解决它的,并在C代码中使用svSetScope导出语句的。现在就接受你的答案,这样可以帮助别人。非常感谢。