차이

2017-02-17 29 views
0

제가 동일한 샘플링 이벤트 @sim 두 이벤트가 @sim : 시뮬레이터 지금 차이

unit my_scbd_u like uvm_scoreboard { 
    scbd_port sample_a : add data_item_s; 
    scbd_port sample_b : match data_item_s; 

    sample_a_predict(item: data_item_s) is only { 
     add_to_scbd(item); 
     set_match_port(item, sample_b); 
    }; 
}; 

extend my_top_env { 
    my_scbd : my_scbd_u is instance; 
    mon_a : monitor_a_u is instance; 
    mon_b : monitor_b_u is instance; 

    connect_ports() is also { 
     mon_a.sample_a.connect(my_scbd.sample_a); 
     mon_b.sample_b.connect(my_scbd.sample_b); 
    }; 
}; 

(. 버전 15 IES)는 I 샘플하려는 데이터는 아래의 파형의 수직 커서이고, 값이 "값"열에서 나타낸다 :

     __ 
signal_a __________| |____________ 
      __________ _______________ 
data_a ____0x1___X____0x0________ 
        _____ 
signal_b _________|  |___________ 
      _______________ ___________ 
data_b _____0xA_______X___0xB_____ 

signal_b가 떨어질 때 데이터 불일치가 감지되고 표시되는 메시지는 "data_b (0xA) is not equal to data_a (0x0)"과 같습니다. 오류 보고서가 "data_b (**0xB**) is not equal to data_a (0x0)" 일 것으로 예상됩니다.

누군가가 점수 판이 왜곡 된 데이터와 다른 결과를 얻는 이유를 설명 할 수 있습니까? 이것은 Specman의 델타 지연 문제 일 수 있습니까?

+0

왜 이것이 uvm 태그를 가지고 있습니까? – toolic

+0

수표를 발동하는 이벤트는 무엇입니까? – Thorsten

답변

1

스코어 보드 자체는 선을 샘플링하지 않고 포트를 통해 전달 된 값만 추가합니다. 나는 port_b가 쓰여졌을 때 스코어 보드가 현재 값을 가졌다 고 추측한다. 값이 비교 될 때, port_a가 쓰여졌을 때 - 스코어 보드는 새로운 값이 아닌 저장된 값 (A)과 비교됩니다.

정확합니까? A ​​("추가") 값이 B ("일치") 전에 업데이트됩니까? 그렇다면 match_in_scbd() 대신 delay_match_in_scbd()를 사용한다고 가정합니다. 즉, 스코어 보드에 값이 저장되고 add()가 호출되면 비교가 수행됩니다.

"score scoreboard"명령을 실행하여 항목이 스코어 보드 포트에 기록되는시기와 비교가 수행되는시기를 확인할 수 있습니다.

+0

네 말이 맞아. 나는 점수 표의 개념을 '샘플링하지 않음'으로 수정했지만, 실제로'interface_port'를 통해 전달 된 값을 얻습니다. 파형을 수정했고 '추가'부분이 '일치'보다 먼저 발생했음을 알 수 있습니다. 또한,'delay_match_in_scbd()'또는'match_in_scbd()'를 사용/수정하지 않았으므로,'uvm_scoreboard'에 의한 기본 매칭 스킴이 제자리에 있어야합니다. 그러나 여기서 중요한 문제는 Specman이'@ sim '으로 데이터를 샘플링 한 것이기 때문에 중요하지 않습니다. 스코어 보드와 관련된 상황조차도, 나는 여전히 문제를 보게 될 것입니다. – renvill

+0

drop of signal_b에서 data_b의 데이터 포트가 읽힐 것으로 예상됩니다. 다른 것을 보게되면 - 예를 들어 테스트를 디버그해야합니다 - "trace port"명령을 사용하십시오. 또한 여기에 입력 한 줄은 실제 코드에서 복사 및 붙여 넣기가 수정 된 것으로 보이며 합법적 인 전자 구문 (예 : "unit is"또는 "on event")을 사용하지 않는 것 같습니다. 따라서 어쩌면 코드에서 일부를 벗어날 수있는 코드가있을 수 있습니다 가볍지 만 실제 코드가 보이지 않으므로 말하기가 어렵습니다. – user3467290