RANDOMIZATION
Preeti Punia
12ECP035
VLSI Design (3rd Semester)
Introduction
Creating environment for CRT (constrained-random tests)
takes more work than creating one for directed tests
CRT requires an environment to predict the result, using a reference
model, transfer function, or other techniques, plus functional
coverage to measure the effectiveness of the stimulus
Once this environment is in place, you can run hundreds of tests
without having to hand-check the results, thereby improving your
productivity
This tradeoff of test-authoring time (your work) for CPU time
(machine work) is what makes CRT so valuable
Continued…
When the number of features increases on a project, it is
difficult to write directed test cases.
A directed test finds the bugs you think are there, but a CRT(
Constrained Random Tests) finds bugs you never thought
about by giving random stimulus.
Constraints are applied according to the interest and valid
restrictions.
A CRT is made of two parts: the test code that uses a stream of random
values to create input to the DUT, and a seed to the pseudo-random
number generator (PRNG)
What to Randomize
All design inputs:
Device configuration
Environment configuration
Primary input data
Encapsulated input data
Protocol exceptions
Errors and violations
Delays
Transaction status
What to Randomize
Device and Environment Configuration
Environment contains other components
Randomize the entire environment configuration,
including the length of the simulation, number of
devices, and how they are configured
Other environment parameters include test length,
error injection rates, and delay modes
Primary Input Data
All the inputs to the DUT must be randomized
What to Randomize
Encapsulated Input Data
Many devices process multiple layers of stimulus
Example, a device may create TCP traffic that is then
encoded in the IP protocol, and finally sent out inside
Ethernet packets
Each level has its own control fields that can be
randomized to try new combinations
So you are randomizing the data and the layers that
surround it
You need to write constraints that create valid control
fields but that also allow injecting errors
What to Randomize
Protocol Exceptions, Errors, and Violations
PC or cell phone locks up. Many times, the only cure is to shut it
down and restart because deep inside the product there is a piece of
logic that experienced some sort of error condition from which it
could not recover and thus prevented the device from working
correctly
If something can go wrong in the real hardware, you should try to
simulate it. Look at all the errors that can occur
You can disable the code that stops simulation on error so that you
can easily test error handling
Delays and Synchronization
How fast should your test bench send in stimulus?
Coordinate the various drivers so they can communicate at different
timing rates
Randomization in SystemVerilog
Simple Class with RandomVariables
Randomization in SystemVerilog
Four random variables:
First three use the rand modifier, so that every time you
randomize the class, the variables are assigned a value
kind variable is randc , which means random cyclic, so that the
random solver does not repeat a random value until every
possible value has been assigned
Constraint expression is grouped using curly braces: {} because
this code is declarative, not procedural, which uses begin…end
The randomize function returns 0 if a problem is found with the
constraints
The code checks the result and stops simulation with $finish if
there is a problem
Randomization in SystemVerilog
You should not randomize an object in the class constructor
Your test may need to turn constraints on or off, change weights,
or even add new constraints before randomization
The constructor is for initializing the object’s variables, and if
you called randomize at this early stage, you might end up
throwing away the results
Variables in your classes should be random and public. This
gives your test the most control over the DUT’s stimulus and
control
Randomization in SystemVerilog
Checking the Result from Randomization
Randomization check macro and example
Randomization in SystemVerilog
The Constraint Solver
Solver chooses values that satisfy the constraints
Values come from SystemVerilog’s PRNG, that is started with an
initial seed
Same seed and the same testbench always produce the same results
Changing the tool version or switches such as debug level can
change results
Solver is specific to the simulation vendor, and a constrained-random
test may not give the same results when run on different simulators,
or even on different versions of the same tool
SystemVerilog standard specifies the meaning of the expressions,
and the legal values that are created, but does not detail the precise
order in which the solver should operate
Constraint Details
Constraint Introduction
Constrained-random class
Constraint Details
Inside Operator
Create sets of values with the inside operator
Inverted random set constraint
Constraint Details
Using an Array in a Set
Random set constraint for an array
Choose any value except those in an array
Constraint Details
Bidirectional Constraints
Constraints are solved bi-directionally, which means that the
constraints on all random variables are solved concurrently
Adding or removing a constraint on any one variable affects the
value chosen for all variables that are related directly or
indirectly
Constraint Details
Solutions for bidirectional constraint
Implication Constraints
There are two implication operators, -> and if
Constraint Details
Constraint block with implication operator
Implication operator
Constraint Details
Constraint block with if implication operator
Constraint block with if-else operator
Constraint Details
Equivalence Operator
<-> is bidirectional
A<−>B is defined as ((A->B) && (B->A))
Equivalence constraint
When d is true, e must also be true, and when d is false, e must
also be false
So this operator is the same as a logical XNOR
Solution Probabilities
Class Unconstrained
Solutions for Unconstrained class
Solution Probabilities
Class with implication constraint
Solutions for Imp1 class
Solution Probabilities
Class with implication and solve…before
Solutions for solve x before y constraint
In-Line Constraints
Many tests only randomize objects at one place in the code
You can add extra constraint using randomize with . This is equivalent to
adding an extra constraint to any existing ones in effect
Building a Bathtub Distribution
Bathtub shaped distribution; high on both ends, and low in
the middle
Building a Bathtub Distribution
Random Number Functions
$random — Flat distribution, returning signed 32-bit random
$urandom — Flat distribution, returning unsigned 32-bit random
$urandom_range — Flat distribution over a range
$dist_exponential — Exponential decay
$dist_normal — Bell-shaped distribution
$dist_poisson — Bell-shaped distribution
$dist_uniform — Flat distribution
$urandom range usage
Constraints with Variables
This class creates random lengths between 1 and 100.
By changing the variable max_length , you can vary the
upper limit.
Using Nonrandom Values
rand_mode function
When you call this method with the argument 0 for a
random variable, the rand or randc qualifier is disabled and
the variable’s value is no longer changed by the random
solver.
Setting the random mode to 1 turns the qualifier back on so
the variable can changed by the solver
Checking Values Using Constraints
handle.randomize(null)
SystemVerilog treats all variables as nonrandom and just
ensures that all constraints are satisfied, i.e all expressions are
true.
If any constraints are not satisfied, the randomize function
returns 0.
Randomizing Individual Variables
If you want to randomize a few variables inside a class,You
can call randomize with the subset of variables
Turn Constraints Off and On
constraint_mode:- You can control a single constraint with
handle. constraint. constraint_mode (arg).
Specifying a Constraint in a Test with External
Constraints
The body of a constraint does not have to be defined within the
class, just as a routine body can be defined externally
Advantage over in-line constraints is that it can be reused between
tests.
Common Randomization Problems
Use Signed Variables with Care
you may be tempted to use the int, byte , or other signed
datatypes.
Don’t use them in random constraints unless you really want
signed values
you could get pairs of values such as (32, 32) and (2, 62).
(−63, 127) can also be a solution of the equation.
To avoid meaningless values such as negative lengths, use only
unsigned random variables
Thank you