specman e-language supports the concept of constrained random generation.
. Constraints are applied on struct members e.g Fields and methods.
· Constraints are Boolean equations
· Constraints are declarative statements
Specman e-language categories the constrained mechansim as follows :
1) Random Generation without any constraints parameters
2) Directed Random constrained Generation [ e.g from .. to ]
3) Directed constrained Generation
For constraining a Field use the following syntax :
keep Boolean-expression
Ex: struct packet_s {
Length : uint(bits:6);
Address : uint(bits:2);
// application of Directed Constraints Parameter for Length field
keep Length = = 10;
// application of Directed Random Constraints Parameter for Address field
keep Address in [0..2];
};
For constraining elements in a list (array):
keep for each (item) in list_name {
Boolean-expression; };
Ex: Struct packet_driver_s {
Packets : list of packet_s;
// Constraints list for the individual fields
keep for each (pkt) in packets {
pkt.len < 10; }; };
The syntax for implication constraints are given below:
keep Boolean-expr1 => Boolean-expr2;
Ex:
keep size = = SHORT => length < 10;
keep size = = LONG => length > 20;
Or, suppose if we want to constraint using lists:
Ex:
keep for each (pkt) in packet {
index = = 0 => pkt.addr = = 1 and pkt.kind = = GOOD;
index = = 1 => pkt.addr = = 2 and pkt.kind = = BAD; };
Weighted Constraints:
Weighted constraints are used on a specific application. It allows selection weight for value or range of values. In order to achieve a weighted constraint we need to apply a soft control on the distribution of generated values.
syntax: keep soft gen-item = = select {weight: value ;};
Ex: <’
keep soft length = = select {
20:14;
25:10;
10:20; };
‘>
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment