Monday, February 28, 2011

Duplicate or multiple OVM banners

    When executing vsim on a design containing OVM, two or more OVM banners appear on the screen and/or in the transcript file.
    # ------------------------------------------------- 
    # OVM-2.1.1 
    # (C) 2007-2009 Mentor Graphics Corporation 
    # (C) 2007-2009 Cadence Design Systems, Inc. 
    # ------------------------------------------------- 
    # ------------------------------------------------- 
    # OVM-2.1.1 
    # (C) 2007-2009 Mentor Graphics Corporation 
    # (C) 2007-2009 Cadence Design Systems, Inc. 
    # -------------------------------------------------
    
    
    
    
    The message is printed in method ovm_report_handler::report_header() in src/base/ovm_report_handler.svh
    This is called only from OVM code in method ovm_report_object::report_header() in ovm_report_object.svh
    This too is called only from OVM code in ovm_root::new() in ovm_root.svh

Solution:
All possible causes of multiple printout of this message and suggestions for resolution: 

1. User code has instantiated ovm_root multiple times via multiple calls to ovm_root::new().  This should not be done and will need to be corrected. 

2. User code has extended ovm_root and changed its behavior. This also should be not be done and will need to be corrected.

3. User code calls ovm_report_handler::report_header() directly via an ovm_report_handler object handle.

4. User code calls ovm_report_object::report_header() directly via an ovm_report_object handle or subclass method override calling super.report_header(). 

5. One additional and very likely possibility is that there are multiple ovm_pkg universes compiled separately and integrated at runtime. This can happen in a simulation scripting case, which compiles separate units (e.g. VIPs or testbench bits) each of which correctly does an import ovmpkg::*. Those units are then integrated in to a toplevel testbench by `include instead of by import my_subunit1::*; import my_vip2::* etc 


Don't use `include for this case. Use only `import. Otherwise the outcome is that each package, while called ovm_pkg, is actually a different package namespace with a different ovm_root etc.

No comments:

Post a Comment