有没有办法动态更改头文件?
头文件包含许多可用于模块的常量。但是,在我的应用程序中,必须经常手动更改某些常量。有没有办法自动更改值?
我尝试了以下方法。 1.使用C ++确定常量并将其写入头文件。 2.使用SV模块更新头文件。 在运行顶层模块之前,所有这些方法都需要额外的步骤 有没有办法在执行模拟器时更新头文件?
在以下header.v中包含NUM,它在模块main中使用。 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
答案 0 :(得分:1)
C ++是一个compiled language,其中像stuff这样的常量在编译期间被翻译成机器语言(我知道它的原始描述,为了详细的理解,你可以参考进程地址空间和常量驻留在其中{{ 3}})。 如果要更改这些常量(或类似的东西),应重新编译代码。有些技术可以使用某些工具从输入文本文件生成自定义代码。但这不适用于您的方案。
我认为在您的情况下,配置文件是最佳匹配,您可以根据自定义定义参数。
答案 1 :(得分:1)
如果同一模拟中每个模块的不同,则应使用parameter
代替`define
。
main #(parameter NUM) (/*portlist*/);
// ...
byte array [0:`NUM - 1]; // FYI 'byte' is a SystemVerilog keyword
// ...
endmodule
大多数模拟支持从命令行传递一个定义,如果模拟中的值相同,则可以起作用,但每个模拟都不同。
+define+NUM=256
-define NUM=256
-D NUM=256
要减少重新定义的警告,请将`ifndef
打包到header.v
中的定义:
`ifndef NUM
`define NUM 256 //256 must be changed often
`endif