일부 레지스터 블록이 해당 레지스터 어댑터 설치와 함께 일부 버스 프로토콜로 변환됩니다.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(...)
에서
시퀀스와 그 안에'write' 메소드에 대해 더 자세히 설명해 주시겠습니까? – AndresM
UVM_HIGH/UVM_DEBUG의 uvm 상세 표시가 유용 할 수 있습니다. 그것은 쓰기 작업에서와 같이 reg 모델의 추가 정보를 출력합니다. 그것은 무슨 일이 일어나고 있는지에 대한 단서를 줄 수 있습니다. –