2013-12-10 13 views
3

`uvm_error을 일으키는 여러 검사가있는 UVM 스코어 보드가 있습니다. uvm_error를 자동으로 가로 채고 점수 판의 내용을 덤프하고 싶습니다. 다른 엔지니어는 스코어 보드 (및 해당 하위)에 수표를 추가하므로 콜백은 가능한 투명해야합니다.uvm_error를 가로 채고 콜백을 일으키는 방법은 무엇입니까?

내가 할 노력하고있어 간단한 예 :

task run_phase(uvm_phase phase); 
    phase.raise_objection(this); 
    // How to do an automatic sb.dump_contents() callback? 
    `uvm_error("ERROR", "scoreboard caught an error"); 
    phase.drop_objection(this); 
    endtask 

    function void dump_contents(); 
    $display("The queue contents of my scoreboard."); 
    endfunction 

당신은 시뮬레이션 및 EDA 놀이터에 위의 예를 수정할 수 있습니다 다음 UVM은이 작업을 수행하는 방법을 권장 무엇 http://www.edaplayground.com/s/4/549

를? 누군가 작업 코드를 공유 할 수 있습니까?

답변

4

report_catcher를 설정하려고합니다. 이것은 보고서를 가로 채고 메시지 문자열에 덤프를 추가하거나 별도의 메시지에 넣을 수 있습니다. 그리고 보고서를 더 쉽게 잡으려면 "SBERRDMP"와 같은 고유 한 메시지 ID를 사용하여 완전한 DuMP를 추가하는 ScoreBoard ERROR를 잡아야합니다.

class sb_dump_catcher extends uvm_report_catcher; 
    function new(string name="sb_dump_catcher"); 
    super.new(name); 
    endfunction 
    function action_e catch(); 
    if(get_severity() == UVM_ERROR && get_id() == "SBERRDMP") 
     begin 
     sb sb_h; 
     if (!$cast(sb_h, get_client())) `uvm_error("NOTASB", "The Message ID \"SBERRDMP\" is reserved for my scoreboard") 
     set_message({get_message, "/n", sb_h.dump_contents()}); 
     end 
    return THROW; 
    endfunction 
endclass 

그런 다음 당신의 점수 판의 일부 단계에서, 당신은 콜백리스트 작동

function void start_of_simulation_phase(uvm_phase phase); 
    sb_dump_catcher h = new; 
    uvm_report_cb::add(this, h); 
endfunction 
+0

이 포수를 추가합니다. dump_contents를 사용할지를 결정하기 위해 단순히'$ cast (sb_h, get_client())'를 사용하지 않고 id에 대해 걱정하지 않아도 될까요? 여기처럼 : http://www.edaplayground.com/s/4/567 –

+0

예, 캐스팅에 실패 할 경우 null 핸들 참조가 충분히 좋은 오류가 될 수 있습니다. –