2017-04-17 5 views
-1
class Base 
rand bit b; 
// constraint c1 { every 5th randomization should have b =0;} 
endclass 

정적 변수를 만들고 그 변수를 업데이트 한 다음 제약 조건에서 % 5 %가 0인지 확인한 다음 b = 0으로 만들 수 있음을 알고 있습니다. 그것을 할 수있는 더 좋은 방법이 있습니까? 감사.SystemVerilog Constraint, n 번째 반복마다 값 고정

+1

실제 사용할 코드를 게시하십시오. 그런 다음 사람들이 더 좋은 방법을 제공 할 수 있습니다. – toolic

+0

방금 ​​인터뷰에서 질문을 받았습니다. –

답변

0

카운트를 정적으로 만들 필요가 없습니다. 단지 랜덤하지 않아도됩니다.

class Base; 
    rand bit b; 
    int count; 
    constraint c1 { count%5 -> b==0;} 
    function post_randomize(); 
    count++; 
    endfunction 
endclass 
+0

감사합니다. @ dave_59. 비 정적 멤버가 클래스의 모든 인스턴스에서 공유되는 방식을 알려주십시오. 미리 감사드립니다. –

+0

하나의 객체를 반복적으로 랜덤 화하거나 한 번 무작위로 많은 객체를 생성하려는 경우 원래 질문에서 지정하지 않았습니다. 예, 그렇습니다. 카운트는 정적 일 필요가 있습니다. –

+0

감사합니다. @ dave_59. –

-1

최대 한도 인 b을 알고 있다면 다음과 같은 제약 조건을 쓸 수 있습니다.

constraint abc 
{ 
    b dist {0:=20, 1:=80} 
} 

80에, 1의 무게를 200의 무게를 만들 것입니다. 따라서이 방법으로 5 회 임의화할 때마다 0이 한 번 발생합니다.

+0

올바르지 않습니다. 5 분의 1의 확률을 갖는 것은 매 5 회 발생시 한 번과 같은 것이 아닙니다. –

+0

위의 제약 조건으로 매 5 번의 랜덤 화에서 도구가 0을 생성한다는 보장은 아닙니까? –

+1

수정. 확률은 보장 할 수 없습니다. –