【问题标题】:Exporting task of an instantiated module实例化模块的导出任务
【发布时间】:2017-11-09 10:56:15
【问题描述】:

我正在尝试通过 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 任务是从该模块调用的。

【问题讨论】:

    标签: system-verilog system-verilog-dpi


    【解决方案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");

    【讨论】:

    • 看到答案太晚了,但我最终是如何解决它的(在子模块中导出语句并在 C 代码中使用 svSetScope)。现在接受您的答案,以便它可以帮助其他人。谢谢!
    【解决方案2】:

    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
    

    【讨论】:

    • 这和我一个小时前说的有什么不同吗:)
    • 没有。但是当我发布我的答案时,你的答案并不存在。它仅在发布我的(带有“1 小时前”标签)后才出现。嘿 - 你得到 10 分,我不会抱怨的! :)
    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2021-11-27
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多