实例化模块的导出任务
Exporting task of an instantiated module
我正在尝试通过 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 任务。
export
语句必须与要导出的 task/function 位于同一位置。两个建议:您可以在 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");
。
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
我正在尝试通过 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 任务。
export
语句必须与要导出的 task/function 位于同一位置。两个建议:您可以在 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");
。
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