SystemVerilog adds another form of a local constant, const. A const form of constant differs from a localparam constant in that the localparam must be set during elaboration, whereas a const can be set during simulation, such as in an automatic task.
Constant Class
An instance of a class (an object handle) can also be declared with the const keyword.
EXAMPLE const class_name object = new(3,3,4);
In other words, the object acts like a variable that cannot be written. The arguments to the new method must be constant expressions. The members of the object can be written (except for those members that are declared const).
Global Constant
Global constant class properties include an initial value as part of their declaration. They are similar to other const variables in that they cannot be assigned a value anywhere other than in the declaration.
EXAMPLE class Jumbo_Packet;
constint max_size = 9 * 1024; // global constant
byte payload [];
function new( int size );
payload = new[ size > max_size ? max_size : size ];
endfunction endclass
EXAMPLE: error : chaning const varible class A ;
constint i = 10;
endclass
program main ;
A my_a;
initial begin my_a = new();
my_a.i = 55;
end endprogram
RESULT
Error : Variable 'i' declared as 'const' .
Instance Constants
Instance constants do not include an initial value in their declaration, only the const qualifier. This type of constant can be assigned a value at run time, but the assignment can only be done once in the corresponding class constructor not from outside or any other method.
EXAMPLE class A ;
constint i;
function new();
i = 20;
endfunction endclass
program main ;
A my_a;
initial begin my_a = new();
$display(my_a.i);
end endprogram
RESULT
20
EXAMPLE: error : assignment done twice class A ;
constint i;
function new();
i = 20;
i++;
endfunction endclass
RESULT
Instance constants assignment can only be done once
EXAMPLE: error : assignment in other method class A ;
constint i;
task set();
i = 20;
endtask endclass
RESULT
Instance constants assignment allowed only in class constructor.
Typically, global constants are also declared static because they are the same for all instances of the class. However, an instance constant cannot be declared static because that would disallow all assignments in the constructor