2014-04-14 2 views
1

기본 UVM 기반 TB에 몇 가지 문제점이 있습니다. 시퀀스와 해당 작업을 이해하려고 노력하고 있습니다.기본 UVM 시퀀스 시뮬레이션 쿼리

  1. 응답 항목
  2. 마지막 2 트랜잭션에 대한 오류 메시지 (# 18 @ UVM_ERROR의
  3. 커플에서 갱신 될 때 항상 bvalid 드라이버에서 0으로 촬상되고 : uvm_test_top.axi_agent1.axi_base_seqr1 @@ axi_base_seq1 [uvm_test_top .axi_agent1.axi_base_seqr1.axi_base_seq1] 응답 큐 오버 플로우, 반응은 다음

는 EDA 놀이터 http://www.edaplayground.com/x/3x9

A의 컴파일 된 코드에 대한 링크이다) 적하 내가 누락 된 것에 대한 뉴욕 제안 사항 ??

감사

venkstart

답변

2

이 같은 서명을 보여줍니다 urandom_range $의 스펙을 살펴 갖는 function int unsigned $urandom_range(int unsigned maxval, int unsigned minval = 0)합니다. 전화를 $urandom_range(1, 0)으로 변경하면 제대로 작동합니다.

두 번째 오류는 드라이버의 응답을 사용자의 순서대로 보내지 않고 있다는 사실에서 기인합니다. 이것이 그 일을하는 라인입니다 : seq_item_port.item_done(axi_item_driv_src);. seq_item_port.item_done(); (응답을 보내지 않음)을하거나 finish_item() 뒤에 get_response() 전화를 걸면됩니다. 일반적으로 수행하는 작업은 원래 요청의 필드를 업데이트하고 item_done()으로 전화하는 것입니다. 예를 들어, 읽기 트랜잭션을 시작하면 드라이버에서 제어 신호를 보내고 DUT가 응답 할 때까지 기다렸다가 DUT에서 가져온 데이터로 요청의 data 필드를 업데이트하고 드라이버에 item_done()을 호출하여 표시합니다 요청이 완료되었습니다. 이 방법으로 (예를 들어, 미래의 일부 항목을 제약하기 위해)이 시퀀스가 ​​필요한 경우이 데이터가 있습니다.

+1

@venkstart 여기 고정 코드를 찾을 수 있습니다. http://www.edaplayground.com/x/YJ –

+0

튜더에 대한 설명에 감사드립니다. 오류가 약 8 txns 후에 만 ​​시작되는 이유에 대한 또 하나의 질문 ?? 시퀀스가 응답을 얻지 못한다면 처음부터 이것을 보았어야 했습니까? – venkstart

+0

@venkstart'get_response()'호출 시점을 시퀀서가 알 수 없기 때문에 미해결 응답을 큐에 저장합니다. 대기열이 너무 커지면 오류가 트리거됩니다. 즉, 큐가 가득 차면 오류가 발생하기 시작합니다 (UVM에서는 8-ish가 기본값으로 설정 될 수 있지만이 번호도 변경할 수 있다고 생각합니다). –

관련 문제