2012-03-05 157 views
1

我想在我的SystemVerilog类中创建一个const对象。 SystemVerilog是否支持const对象(以及如何?),还是仅支持const基元类型。我可以在SystemVerilog中创建一个const对象吗?

我想这样做:

const my_object MY_CONST; 

const begin 
    MY_CONST = new(); 
    MY_CONST.param1 = "value1"; 
    MY_CONST.param2 = "value2"; 
end 
+0

我在[SystemVerilog.org](http://www.systemverilog.org/pdf/1a_DesignOverview.pdf#page=14)上看到它的引用,但VCS编译器在2009年似乎不接受它,或者2011版本的工具。 – 2012-03-06 13:24:28

+0

也许'const'在System Verilog规范中,但是它没有被编译器实现。我认为三种主要的SV仿真器(VCS,NCSim,ModelSim)都不支持SV规范的所有功能。目前,它们都支持不同的子集,afaik。 – 2012-03-06 17:29:27

回答

2

您可以创建不变类的实例。

一个类(对象句柄)的实例也可以与 const关键字声明。

const class_name object = new(5,3); 

换句话说, 对象的行为像不能被写入的变量。新方法的参数 应为常量表达式(见11.2.1)。对象的 成员可以写入(除了那些 被声明为const的成员)。

2

我本来想评论Adam12的答案,但是我不能,所以我会发布一个新的答案,而不是叹息!

在SV MY_CONST只会是一个常量句柄。所以可能你不能将另一个对象分配给句柄,但是句柄所指向的对象的内容仍然可以被修改。

我还没有听说过任何const begin ... end构造。我认为在调用new —时应该调用const句柄,或者如果const句柄是类的成员,则可以在构造函数中调用newconst句柄的成员函数可以在任何地方调用,我猜想。

相关问题