实例化模块的导出任务

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