2014-01-27 1 views
1

UVM 모니터에서 아래의 두 문이 run_phase에 추가 된 경우 tr.pkt에 샘플링 된 값은 data_in에 따라 정확합니다. 그러나 명령문의 순서가 바뀌면 tr.pkt이 샘플링 된 것이 올바르지 않습니다 ('h0 샘플링 됨). 전에 본 사람 있니?UVM 모니터는 두 문장의 순서에 따라 다르게 동작합니다.

tr.pkt.push_back(this.wr_if.mon_clk_blk.data_in); 
`uvm_info("",$sformatf("Write Monitor data = %0h", this.wr_if.mon_clk_blk.data_in), UVM_NONE) 

답변

0

은 대부분의 경우 data_in은 UVM의 montitor의 실행과 동일한 시간 간격으로 업데이트되고있다. 스케쥴러에서 push_back()이 활성 영역에서 실행되고 `uvm_info()이 관측 영역에서 발생합니다. 다른 프로세스는 반응 영역 또는 후자의 예정된 활성 영역에서 data_in을 업데이트했을 것입니다. .push_bach()/`uvm_info() 순서를 반대로하면 다른 스레드가 을 수행하기 위해 활성 영역을 다시 입력하기 전에 data_in을 할당 할 수 있습니다. 제로 시간 글리치 (예 : #0)는 예기치 않은 값과 관련 될 수도 있습니다.

.push_bach()`uvm_info()이 모두 동일한 값을 얻는 한 가지 방법은 data_in이라는 샘플을 갖는 임시 변수를 만드는 것입니다. 예 :

sampled_data = this.wr_if.mon_clk_blk.data_in; 
tr.pkt.push_back(sampled_data); 
`uvm_info("",$sformatf("Write Monitor data = %0h", sampled_data), UVM_NONE) 
+0

감사합니다. 디자인에서의 모든 임무는 시계의 posedge에 대한 지연이 없습니다. 또한 인터페이스에 setup/hold를 추가하여 도움이되는지 확인하려고합니다. – user3242374

+0

@ Tudor, 오타 수정에 감사드립니다. – Greg

관련 문제