2009-10-07 4 views
1

구조체가있는 specman :specman의 이벤트 목록에서 한 이벤트를 기다리는 방법은 무엇입니까?

struct foo_s { 
    event foo_ev; 

    // some code that will emit foo_ev sometimes 
}; 

그리고 목록 :

var foo_l: list of foo_s; // later code will manage the list 

이제 목록에서 foo_ev 이벤트 중 하나를 동기화 할 :

first of { 
    sync @foo_l[0].foo_ev; 
    sync @foo_l[1].foo_ev; 
    sync @foo_l[2].foo_ev; 
    //etc 
}; 

문제는이 스 니펫이 실행될 때 xxx30에 몇 개의 요소가 있는지 모릅니다. 이벤트가 방출 될 때까지 기다리는 방법이 있습니까?

답변

2

수동으로 이벤트를 계단식 수 :

unit bar_u { 
    foo_l: list of foo_s; 
    event any_foo_toggled_e; 
} 

struct foo_s { 
    event foo_e; 
    on foo_e { 
     emit get_enclosing_unit(bar_u).any_foo_toggled_e; 
    }; 

    // some code that will emit foo_ev sometimes 
}; 
+0

우아한 :-) 의무 15 자 확장 다음에! –

2

또 다른 해결책은 계산 된 매크로를 사용하는 것입니다. 계산 된 매크로의 개념은 전자 코드를 생성하는 코드를 작성하는 것입니다. 이 방법을 사용하면 foo_l 길이를보고 first of { sync ... 목록을 매크로 대체로 생성 할 수 있습니다.

죄송합니다. 현재 예제를 작성할 시간이 없지만 관심이 있으시면 Specman 설명서가 친구 여야합니다. 아직 계산 된 매크로에 대해 들어 보지 못했다면 분명히 가치가 있습니다.

[업데이트] : Team Specman에서 방금 example of a computed macro을 게시했습니다. 또한이 주제에 대해 older posts이 있습니다.

관련 문제