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
};
문제는이 스 니펫이 실행될 때 얼마나 많은 요소가 있는지 모르겠습니다. foo_l
. 내가 기다릴 수있는 방법이 있습니까? 어느 의 foo_ev
방출 될 이벤트?
해결책
이벤트를 수동으로 캐스케이드 할 수 있습니다.
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
};
다른 팁
또 다른 솔루션은 계산 된 매크로를 사용하는 것입니다. 계산 된 매크로의 개념은 e 코드를 생성하기 위해 코드를 작성하는 것입니다. 이 접근법을 사용하여 길이를 볼 수 있습니다. foo_l
그리고 생성하십시오 first of { sync ...
매크로 교체로 나열하십시오.
미안하지만 현재 예를 들어 요리 할 시간이 없지만 관심이 있으시면 Specman 문서가 친구가되어야합니다. 계산 된 매크로에 대해 듣지 못했다면 확실히 볼 가치가 있습니다.
업데이트]: 팀 사양에서 그들은 방금 게시했습니다 계산 된 매크로의 예. 그들은 또한 일부가 있습니다 오래된 게시물 이 주제에 대해.
제휴하지 않습니다 StackOverflow