Constraints - muneeb-mbytes/verilator GitHub Wiki
Randomization
class generator;
rand bit [2:0] value;
endclass
module randomization();
generator gen = new();
initial
begin
for(int i=1;i<=2;i++)
begin
void'(gen.randomize());
/* verilator lint_off STMTDLY */
#1 $display("\t[%0t] @ iteration: %0d -----> value: %0d",$time,i,gen.value);
/* verilator lint_on STMTDLY */
end
end
endmodule
Output:
Inline constraint
class generator;
rand bit [2:0] value;
endclass
module only_inline();
generator gen = new();
initial
begin
for(int i=1;i<=10;i++)
begin
void'(gen.randomize() with {gen.value == 3 ;});
/* verilator lint_off STMTDLY */
#1 $display("\t[%0t] @ iteration: %0d -----> value: %0d",$time,i,gen.value);
/* verilator lint_on STMTDLY */
end
end
endmodule
ERROR:
Constraint block
class generator;
rand bit [2:0] value;
constraint c1 { value == 3;}
endclass
module only_inline();
generator gen = new();
initial
begin
for(int i=1;i<=2;i++)
begin
void'(gen.randomize());
/* verilator lint_off STMTDLY */
#1 $display("\t[%0t] @ iteration: %0d -----> value: %0d",$time,i,gen.value);
/* verilator lint_on STMTDLY */
end
end
endmodule
ERROR:
This is because it is not supported in Verilator 5.021 devel. We get a warning called CONSTRAINTIGN