2013年3月28日 星期四

UVM guide line


  • Naming rule
    • axi_package, axi_monitor.svh
  • how to debug
    • if (debug) `uvm_info("DEBUG", msg, UVM_MEDIUM)
    • uvm_factory  factory = uvm_factory.get(); factory.print();
    • uvm_top.print_topology()
  • how to trace connection 
    • use "get_connect_to()", "get_provide_to()", children[$]

    • // If there is something connected,
      // print the port name and the connections. 
      if ((connected_to_list.size() > 0) || (provided_to_list.size() > 0) ) begin 
      // Print the name of the port. $display("%s Port: %s", {depth+2{" "}},
      children[i].get_full_name()); end 
  • how to trace transactions
    • use backdoor to log the analysis point
    • fifo.put_export.debug_connected_to(); fifo.put_export.debug_provided_to();
    • $display("%s", tx_queue[tx_id].convert2string());
  • atomic transaction items(active sequence)
    • use "pre_body()" phase to add new sequence
    • use "post_body()" phase to remove sequence
    • active_sequenves::show();
  • internal BB(break) point(assertion pp)
    • `define BB if (BB::check_pp1( tx, get_full_name()) $stop;
  • use "grep" command to filter out the useful info
    • grep "type_id::create" xx.log
  • use report catcher without default UVM_report, collect the report pool meg to our report format
    • function action_e catch();
    • id = get_id(); 
    • filename = get_fname(); 
    • line = get_line(); 
    • severity = get_severity();
    • $dispay("%s...,", id);
  • use report server to overwrite the report
ref: Better Living Through Better Class-BasedSystemVerilog Debug

沒有留言:

張貼留言