Constraints - mbits-mirafra/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:

image

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:

WhatsApp Image 2024-01-11 at 4 47 40 PM

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:

WhatsApp Image 2024-01-11 at 4 49 42 PM

This is because it is not supported in Verilator 5.021 devel. We get a warning called CONSTRAINTIGN

image