2014-04-09 7 views
2

분석 포트가 3 개의 스코어 보드에 연결되어 있습니다. 분석 포트에서 쓰기가 수행되면 구독자 (스코어 보드)가 특정 순서로 호출됩니다. 그러나 나는 그들이 다른 순서로 부름 받기를 원한다.UVM 분석 포트 가입자의 순서를 제어하는 ​​방법은 무엇입니까?

명시 적 순서의 실제 사용 사례는 다음과 같습니다. 하나의 스코어 보드는 로깅 만하기 때문에 먼저 스코어 보드를 호출해야합니다. 다른 스코어 보드는 매우 기본적인 하위 레벨 검사를하므로 초라고 부릅니다. 세 번째 점수 판은 매우 복잡한 상위 수준 검사를하므로 마지막으로 호출해야합니다.

SV 조각 :

sb1 = scoreboard_1::type_id::create("sb1", null); 
sb2 = scoreboard_2::type_id::create("sb2", null); 
sb3 = scoreboard_3::type_id::create("sb3", null); 

// Connect analysis port to scoreboard 
m_ap = new("ap", null); 
m_ap.connect(sb2.m_imp); 
m_ap.connect(sb3.m_imp); 
m_ap.connect(sb1.m_imp); 
m_ap.resolve_bindings(); 

// Write 
m_ap.write(10); 

전류 출력 :

# UVM_INFO design.sv(15) @ 0: sb1 [write] scoreboard_1 
# UVM_INFO design.sv(32) @ 0: sb2 [write] scoreboard_2 
# UVM_INFO design.sv(49) @ 0: sb3 [write] scoreboard_3 

가 어떻게 가입자가 호출되는 순서를 제어하는? EDA 놀이터에

  • scoreboard_3
  • scoreboard_2
  • scoreboard_1

예제 코드 : http://www.edaplayground.com/x/2zQ

답변

3

분석 포트의 업체 내부 결국 나는 그들이 순서로 원하는 connect()에 전화하면 문자열의 연관 배열입니다. foreach을 수행하면 (참조) 항목이 사전 식 순서로 표시됩니다. 이는 UVM의 현재 구현으로 인해 작동합니다. 장래의 실장에서는, 오브젝트의 제휴 배열을 사용하는 것을 결정할 수 있습니다.이 경우, 순서 부는 정의되어 있지 않습니다.

분석 포트의 기본 아이디어는 연결될 필요가 없다는 것입니다. 즉, 각 가입자는 해당 포트에 연결된 다른 가입자와 완전히 독립적이므로 모든 주문에 의존 할 수 없습니다.

쓰기가 특정 순서로 실행되도록하려면 테스트 벤치 구조를 통해 실행해야합니다. 특정 순서 또는 체인으로 호출을 위임 한 AP에 연결된 최상위 점수 판이 있어야합니다 함께 scoreboards 그래서 scoreboard1 그것의 일을하고 scoreboard2에 씁니다, 그렇다면 scoreboard3에 씁니다.

+0

최상위 스코어 보드 위임자를 갖는 것이 혼란스러워 보입니다. 이 경우, 등록 된 순서로 등록자를 유지하는 uvm_analysis_port를 작성하는 것이 더 깔끔할 수 있습니다. –

1

주요 시뮬레이터 (ModelSim/Questa, INCISIV 및 VCS)에서 uvm_port_base.svh의 문자열 연관 배열 순서는 알파벳순입니다. 즉, 분석 포트 쓰기의 순서는 알파벳순으로 된 구독자 이름에 해당합니다.

는 가입자가 요청 된 순서대로 기록 얻을 같은 것으로 이름을 수정하려면 다음

sb1 = scoreboard_1::type_id::create("-sb1", null); 
sb2 = scoreboard_2::type_id::create("--sb2", null); 
sb3 = scoreboard_3::type_id::create("---sb3", null); 

그리고 당신의 출력 변화를 볼 수 있습니다 : EDA 놀이터에

# UVM_INFO design.sv(49) @ 0: ---sb3 [write] scoreboard_3 
# UVM_INFO design.sv(32) @ 0: --sb2 [write] scoreboard_2 
# UVM_INFO design.sv(15) @ 0: -sb1 [write] scoreboard_1 

수정을 : http://www.edaplayground.com/x/3bf

+0

연결이 문자열 인덱스의 연관 배열에 저장된다는 사실에 의존하고 있습니다. 이를 위해 항목은 색인 된 순서가 사전 편집임을 나타냅니다. UVM의 구현이 향후 릴리스에서 변경되고 클래스의 연관 배열을 사용하기로 결정하면 더 이상이 순서에 의존 할 수 없습니다. –

0

구독자가 호출되는 순서는 "정의되지 않음"입니다. 즉, 시뮬레이터간에 이동하면 순서가 변경 될 수 있습니다. 따라서 주문에 의존하지 않고 작업하도록 코드를 설계해야합니다.

주문이 중요한 경우 코드에서 명시 적으로 지정합니다. 즉, 행동을 하나의 큰 점수 판으로 조합 한 다음 순서대로 위임합니다. 문서화되지 않은 행동에 의존하지 마십시오.

+1

주문은 현재 '정의되지 않음'이 아니며 구독자의 전체 이름 ('get_full_name()'에 의해 반환 됨)의 사전 식 순서입니다. –

+0

문서를 찾을 수 없기 때문에 문서의 어딘가에 있습니까? –

+0

문서에는 없지만 코드를 살펴본 결과 분석 인터페이스의 구현은 연관 배열에 저장되고'get_full_name()'에 의해 인덱싱됩니다. LRM은 문자열로 인덱싱 된 연관 배열이 사전 식 순서로 반복된다는 것을 나타냅니다. 이 모든 것은 어쨌든 변경 될 수있는 UVM 구현 세부 사항이므로 모든 의도와 목적을 위해 주문이 '정의되지 않음'이라고 가정합니다. –