2016-08-05 4 views
0

일부 레지스터 블록이 해당 레지스터 어댑터 설치와 함께 일부 버스 프로토콜로 변환됩니다.uvm 레지스터 쓰기가 멈췄다가 다시 돌아 오지 않음

내 레지스터 중 하나에 write 방법을 전화했을 때, 나는 트랜잭션이 진행보고, driver 그 작업을 완료 할 수 있지만 write 어딘가에 붙어있다.

driver 아래 sequence의 발췌를 참조하십시오

// ...uvm driver 
forever begin 
    seq_item_port.get_next_item(req); 
    $display("DEBUG A"); 
    // ... do transaction 
    seq_item_port.item_done(); 
    $display("DEBUG B"); 
end 

// ... sequence 
$display("START WRITE"); 
my_reg_block.my_reg1.write(
$display("DONE WRITE"); 

그 결과가 붙어

START WRITE 
DEBUG A 
DEBUG B 

후 시뮬레이션을 - 나는 DONE WRITE을 볼 수 없습니다.

나는 모든 connect, set_sequencer이 올바르게 만들어 졌음을 확신합니다. 그렇지 않으면 드라이버가 처음부터 트랜잭션을 보지 않아야합니다. 그리고 이것은 매우 단순한 테스트입니다 - 단지 write 일뿐입니다.

driver이 거래를 완료 한 것으로 보이는데도 불구하고 왜 write 메서드 이벤트에 걸릴 수 있습니다. 나는 아마 뭔가를 놓쳤다.

bus_req.set_sequencer(sequencer); 
    rw.parent.start_item(bus_req,rw.prior); 

    if (rw.parent != null && i == 0) 
    rw.parent.mid_do(rw); 

    rw.parent.finish_item(bus_req); 
    bus_req.end_event.wait_on(); 

을 주목 end_event.wait_on() : uvm_reg_map::do_bus_write(...)에서

+0

시퀀스와 그 안에'write' 메소드에 대해 더 자세히 설명해 주시겠습니까? – AndresM

+0

UVM_HIGH/UVM_DEBUG의 uvm 상세 표시가 유용 할 수 있습니다. 그것은 쓰기 작업에서와 같이 reg 모델의 추가 정보를 출력합니다. 그것은 무슨 일이 일어나고 있는지에 대한 단서를 줄 수 있습니다. –

답변

0

는 레지스터 액세스를위한 버스 요청을 처리하는 다음 코드가있다. 이 이벤트는 일반적으로 시퀀서에 의해 일련의 항목을 트리거 한 번 item_done()가 호출되고 finish_item() 반환 :

`ifndef UVM_DISABLE_AUTO_ITEM_RECORDING 
sequencer.end_tr(item); 
`endif 

그것은 내가 당신의 사건에서 어떤 일이 일어나고 어떻게 됐을까 인 정의하여이를 끌 수 있습니다.

+0

정확한 정의 때문입니다. – AldoT