Bit-select
 Block Statements
 Built-in Primitives
 Case Statement
 Continuous Assignments
 Conversion Functions
 Compiler Directives
 Concatenations
 Conditional Operator
 Delays
 Disable Statement
 Edge Sensitive Path
 Expression Bit Length
 File I/O Functions
 Functions
 Identifiers
 If Statement
 Integer Constants
 Intra-assignment Timing Controls
 Keywords
 Loop Statements
 Memories
 min:typ:max Delays
 Module Declaration
 Module Instantiation
 Module Path Declaration
 Module Path Polarity
 Net Data Types
 Operators
 Parameters
 Part-select
 Probabilistic Distribution Functions
 Procedural Assignments
 Procedural Continuous Assignments
 Procedural Timing Control
 Range Specification
 Real Constants
 Register Data Types
 Simulation Time Functions
 Specify Block
 State Dependent Path
 Strengths
 Strings
 Structured Procedures
 UDP Declaration
 UDP Instantiation
 UDP State Table
 Value Change Dump (VCD) File
 Vectors

# Probabilistic Distribution Functions

## Formal Definition

Probabilistic Distribution Functions provide the functionality of random number generators.

## Simplified Syntax

\$dist_uniform (seed, start, end) ;

\$dist_normal (seed, mean, standard_deviation) ;

\$dist_exponential (seed, mean) ;

\$dist_poisson (seed, mean) ;

\$dist_chi_square (seed, degree_of_freedom) ;

\$dist_t (seed, degree_of_freedom) ;

\$dist_erlang (seed, k_stage, mean) ;

## Description

Probabilistic distribution functions present a way to test your design using a randomly generated data. Testbenches often do not reveal irregularities in working models because designers tend to write testbenches in a schematic fashion. Usually, test vectors applied to the inputs of a module do not cover all possible states. When used, these functions may find a specific input combination for which the model does not work correctly. To enable repetitive design debugging, the probabilistic distribution functions must return recurrent data. This means that each time they are called they should return the same values in the last call order.

Probabilistic distribution functions use several arguments for generating data. A first function argument is a seed. Each time a function is called, the seed argument determines an order of values that are returned from the function. This argument must be a register type value of an inout direction. Users can initialize this value and let the system override it. This will make these functions repetitive.

The \$dist_uniform function returns an integer value that is a random generated number in a range depending on the start and end arguments. Returned values are uniformly distributed. Both start and end arguments can be any integer, positive or negative, however the start value should be smaller than the end value.

The \$dist_normal function returns a number that is an average approach to the mean argument. The mean argument is also used in \$dist_expotential, \$dist_poisson and \$dist_erlang. The standard_deviation argument is used to determine the shape of density. In \$dist_chi_square and \$dist_t the shape of density depends on the degree_of_freedom.

## Examples

Example 1

reg [15:0] a ;
initial begin
a = \$dist_exponential(60, 24);
end

Example 2

reg [15:0] a ;
initial begin
a = \$dist_erlang(60, 24, 7) ;
end

## Important Notes

• To enable repetitive design debugging, the probabilistic distribution functions return recurrent data.