在 SystemC 中使用接收到的参数设置信号长度

Setting signals length using received parameters in SystemC

上下文

我正在使用 modelsim/questasim

使用 systemC 与 verilog/VHDL RTL 模块共同模拟仿真环境

我的 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);

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

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

choosing appropriate specialized template at runtime