sv의 class 변수들은 rand로 선언 가능.
ex)rand bit a;
random variable의 범위 설정방법 : constraint
class 내부: constraint name {조건}
class 외부: constraint class_name::name {조건}
조건 설정
constraint name {
a == 12; //a = 12
a < b;
a inside {[1:3], 5, 7}; //a = 1,2,3,5,7
!(a inside{[1:3]}); //a = 1,2,3 제외
a dist {[1:3]:=30, 5:=20}; //1,2,3은 가중치 30, 5는 가중치 20(확률)
}
typedef enum {low,mid,high,any} atype;
constraint addr_range{ //case문 처럼 사용가능.
(atype == low) -> addr inside {[0:15]};
(atype == mid) -> addr inside {[16:127]};
(atype == high) -> addr inside {[128:255]};
}
array 형태의 변수들도 정의 가능. (ex. rand bit A[];)