在函数/任务范围中定义常量的最佳方法

时间:2014-01-21 21:22:52

标签: constants verilog system-verilog

在我的函数(或任务)中,我有一个仅在该方法中使用的常量字符串。

定义它的最佳方式是什么(性能):

  1. const static string stuff = "stuff";
  2. const string stuff = "stuff";
  3. static string stuff = "stuff";
  4. string stuff = "stuff";
  5. EDA游乐场示例:http://www.edaplayground.com/s/4/1090

1 个答案:

答案 0 :(得分:1)

  • const将阻止将来的写入,IEEE std 1800-2012§6.16.6“常量常量”状态“...可以在模拟过程中设置常量......”这表明它取决于供应商决定是否应对性能进行任何优化。
  • static会将变量放入共享内存中。根据模拟场景,它可能有助于或损害性能。实际的性能影响是模拟器特定的,因此您需要运行自己的基准测试。 IEEE std 1800-2012§6.21“范围和生命周期”了解更多信息。

对于小型项目,性能影响可以忽略不计。对于大型项目,性能需要分为几类:内存使用和内存访问时间。 static变量可以折衷较小的内存占用(共享内存)和较长的查找时间(静态变量的内存地址对于其余的对象数据来说可能比较遥远)。 const不太可能增加任何负面效果。

获取一些基本性能数据的最简单方法是使用$finish(2)结束模拟。请参阅IEEE std 1800-2012表20-1-Diagnostics for $ finish。如果模拟器符合标准,这将报告模拟时间,位置以及有关模拟中使用的内存和CPU时间的统计信息。

使用提供的example使用ModelSim 10.1d,所有组合都报告了相同的内存使用情况。运行时间仅受打印方法调用次数的影响,而不是const / static属性。

如果我不得不猜测,那么表现会更好(更好):

  1. const string位于static method
  2. {li> string static方法
  3. const static string
  4. static string
  5. const string
  6. string