User guide
24-94
SystemVerilog Testbench Constructs
2. x is solved using the constraints: x%y == 0; x!=y;
3. z is solved using the constraint: z ==x*y;
The sequence in which the constraints are solved is exactly as listed
in the previous section.
solve-hard before and $void(). $void() and solve-before hard
have the same behavior regarding partitioning the solver-space (that
is, every randomized variable inside the $void() or solve-before
hard is solved first and set to static values prior to randomizing any
other variables in the constraint).
The difference is that you can use the void construct as part of the
expression, whereas solve-before hard is on a separate line, by
itself.
Effect of rand_mode on Unidirectional Constraints. Using
rand_mode to turn a variable OFF has the same effect as declaring
the variable as non-random. Thus, ordering directives on it are
dropped. This results in the dropping some transitive ordering
relationships as well. For example in:.
constraint b1 {
y inside {2,3};
x % $void(y) == 0;
x != y; z == $void(x);
}
If x were to be turned OFF, then there would be no ordering
relationship left between y and z either.
Extensions to Semantics. The introduction of unidirectional
constructs has resulted in extensions to the semantics of numerous
pre-existing constraint constructs.