Specman e 有结构构造函数吗?

Does Specman e have struct constructor?

我有一个带有列表的结构:

struct my_struct {
    my_list : list of uint;
    // other fields
};

我想构建类似于 cpp class constructor 的东西: 当我使用 new 运算符分配 my_struct 时,my_list 将被初始化为具有一个零元素 - my_list == { 0 }

有没有办法在 e 中构建结构构造函数?

感谢您的帮助

是的,any_struct 有 init() 方法。当使用 new() 创建结构时以及生成结构时(在生成之前,约束求解开始)时调用它。

如果您希望此列表始终具有相同的初始值,无论是使用 new 还是使用 gen 创建,请将此列表字段标记为不生成。

struct my_struct {
   !l : list of_ int;
   init() is also {
      l = {0};
   };
}; 

e 中没有像 C++ 中那样的 "general" 参数化构造函数的概念,但正如另一个答案中提到的,有一个预定义的 init()方法(不带参数)在创建给定类型的新对象时自动调用。 重要的是要注意 init() 被调用 每当 创建该类型的对象时,无论其创建以何种方式发生:它可能是通过 [= 的显式创建13=],作为前 运行 代的一部分的隐式创建,依此类推。

还有一点很重要:如果你只是需要给一个字段指定一个特定的常量值,你也可以直接在字段声明中指定这个值,而不需要通过init()来做,例如:

struct my_struct {
    my_list : list of uint = {0};  // field declared with an initializer
};