如何在飞行中更新标题

How to update the header on the fly

本文关键字:更新 标题 飞行      更新时间:2023-10-16

是否有办法在飞行中更改头文件?

头文件包含许多可用于模块的常量。然而,在我的应用程序中,有些常量必须经常手动更改。有什么方法可以自动改变这些值吗?

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

在下面的标题中。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

如果在相同的模拟中每个模块不同,那么您应该使用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

c++是一种编译语言,在编译期间,像东西这样的常量被翻译成机器语言(我知道它的非常原始的描述,为了详细理解,您可以参考进程地址空间和常量驻留的地方http://www.geeksforgeeks.org/memory-layout-of-c-program/)。如果您想要更改这些常量(或类似的东西),则应该重新编译代码。有一些技术可以让您使用一些工具从输入文本文件生成自定义代码。但这并不适用于您的场景。

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