C++ 如何动态更新标题

C++ 如何动态更新标题,c++,verilog,system-verilog,C++,Verilog,System Verilog,有没有一种方法可以动态更改头文件 头文件包含许多可用于模块的常量。然而,在我的应用程序中,一些常量必须经常手动更改。有没有办法自动更改这些值 我尝试了以下方法。 1.使用C++来确定常量并将它们写入头文件。 2.使用SV模块更新头文件。 在运行top模块之前,所有这些方法都需要额外的步骤。 在执行模拟器时有没有办法更新头文件 在下面的标题中,v包含NUM,它在主模块中使用。 NUM经常更改 这个问题也适用于其他语言,如C++或java。 header.v: `define NUM 256 //2

有没有一种方法可以动态更改头文件

头文件包含许多可用于模块的常量。然而,在我的应用程序中,一些常量必须经常手动更改。有没有办法自动更改这些值

我尝试了以下方法。 1.使用C++来确定常量并将它们写入头文件。 2.使用SV模块更新头文件。 在运行top模块之前,所有这些方法都需要额外的步骤。 在执行模拟器时有没有办法更新头文件

在下面的标题中,v包含NUM,它在主模块中使用。 NUM经常更改

这个问题也适用于其他语言,如C++或java。
header.v:
`define NUM 256 //256 must be changed often

module top ();
    initial ...
    //instantiation
    main MAIN();

endmodule

//this module contains NUM
module main ();
    byte[0:`NUM - 1];

endmodule
C++是一种编程语言,在编译时,像stuff这样的常量被翻译成机器语言(我知道它的原始描述,为了详细了解,您可以参考进程地址空间以及常量在其中的位置)。 如果您想更改这些常量(或类似的内容),应该重新编译代码。有一些技术可以使用一些工具从输入文本文件生成自定义代码。但这不适用于您的场景


我认为,在您可以根据自定义定义参数的情况下,配置文件是最匹配的。

如果同一模拟中每个模块的配置文件不同,则应使用
参数
,而不是
`define

main #(parameter NUM) (/*portlist*/);
    // ...
    byte array [0:`NUM - 1]; // FYI 'byte' is a SystemVerilog keyword
    // ...
endmodule
大多数仿真都支持从命令行传递定义,如果仿真中的值相同,但每个仿真中的值不同,则可以使用该命令行

  • +define+NUM=256
  • -定义NUM=256
  • -D NUM=256
要减少重新定义警告,请将
`ifndef
包装到
header.v
中的定义中:

`ifndef NUM
  `define NUM 256 //256 must be changed often
`endif

如果经常更改,NUM应该是一个可配置的参数,而不是一个已定义的常量。为什么要经常更改它?您需要描述常量(头文件)的用法,并希望将它们像变量一样使用。我想如果你描述一下你想要达到的目标,也许会有一个更好的答案。另一个选择是创建多个模拟,使用不同的常数。如果我有一个在512x512阵列上工作的模拟,我以前就做过。我可能会在8x8阵列上运行模拟,使其运行更快,并进行初始错误检查。一旦成功,我将运行完整的长512x512模拟。这两者之间的唯一区别是文件常量.v