0

语境

我正在使用 modelsim/questasim 与 verilog/VHDL RTL 模块共同模拟 systemC 的模拟环境

我的 Verilog 模块使用参数来设置每个模块 我的 VHDL 模块使用泛型来设置每个模块 我的 systemC 模块可以在需要时使用模板复制它。

以下讨论非常相似,只是因为 Modelsim 我不能使用 sc_main: Setting the vector length in SystemC with a received parameter

问题

我希望能够使用 verilog 参数实例化一个 systemC 模块

例子

这是一个最小(不工作)的例子:

Verilog 文件

module submodule
#(
    parameter parameter1 = 32
}
(
    input logic clk,
    /* signals (...) */
); 

systemc_module
#(
    .parameter_sc (parameter1 * 2) /* parameter can be modified */
)
systemc_module_0
(
    .clk(clk),
    /* signals (...) */
);

endmodule 

SystemC 文件

SC_MODULE(systemc_module)
{
    sc_in<sc_logic> clk;
    sc_signal<sc_lv<parameter_sc> > compilation_dynamic_signal;
    // other signals (...)

    SC_CTOR(systemc_module)
    {
        // I can get the parameter at execution time with modelsim :
        int buf;
        sc_get_param("parameter_sc", buf)
    }
}

/*Modelsim module export*/
SC_MODULE_EXPORT(systemc_module);
4

1 回答 1

0

您不能这样做,因为您的 SystemC 代码是与 Verilog/VHDL 代码分开编译的。泛型/参数的概念是 VHDL/Verilog 独有的,并且不直接映射到 C++ 模板。在编译 SystemC 代码时,您不知道将有多少个 SC_MODULE 实例以及它们的参数值可能是什么。

使用 sc_main 的示例之所以有效,是因为它是使用发生 SC_MODULE 模板化的 C++ 编译器编译的。

在运行时选择适当的专用模板

于 2021-08-06T16:46:31.147 回答