ovm mentograf

Upload: balaramkishore-gangireddy

Post on 03-Apr-2018

244 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 Ovm Mentograf

    1/24

    [email protected]

    www.verificationacademy.com

    Advanced OVM (& UVM)Understanding the Factory

    Tom FitzpatrickVerification Technologist

  • 7/28/2019 Ovm Mentograf

    2/24

    Create() vs. New()

    Objects must beconstructed

    new() hard-codes thetype

    create() returns a

    constructed instancefrom the factory

    The factory lets youchange the type of thecreated component Without modifying the

    instantiating code

    comp1

    comp2

    comp2

  • 7/28/2019 Ovm Mentograf

    3/24

    Registering with the Factory

    Objects are registeredwith the factory

    via macro

    `ovm_object_utils

    ovm_component_utils

    comp1

    No ;

  • 7/28/2019 Ovm Mentograf

    4/24

    Registering with the Factory

    Objects are registeredwith the factory

    via macro

    `ovm_object_utils

    ovm_component_utils

    Macro createstype_id wrapper

    Static methodsin wrapper

    create(): returns an instance of the type (no $cast needed) get_type(): returns the type handle

    comp1

    No ;

    Desired type

    Wrapper

  • 7/28/2019 Ovm Mentograf

    5/24

    Registering with the Factory

    Objects are registeredwith the factory

    via macro

    `ovm_object_utils

    ovm_component_utils

    Macro createstype_id wrapper

    Static methodsin wrapper

    create(): returns an instance of the type (no $cast needed) get_type(): returns the type handle

    set_type_override() set_inst_override()

    comp1

    No ;

    Desired type

    Wrapper

    Factory type overrides

  • 7/28/2019 Ovm Mentograf

    6/24

    Overriding a Type

  • 7/28/2019 Ovm Mentograf

    7/24

    Overriding a Type

    New Desired type

    All Instances

    Overridden

  • 7/28/2019 Ovm Mentograf

    8/24

    Overriding an Instance

    New Desired typeInstance Name

    Instance Changed

  • 7/28/2019 Ovm Mentograf

    9/24

    Using Parameterized Types

    Parameterized type

  • 7/28/2019 Ovm Mentograf

    10/24

    Using Parameterized Types

  • 7/28/2019 Ovm Mentograf

    11/24

    Environments are Components

  • 7/28/2019 Ovm Mentograf

    12/24

    Tests are Components, too!

    run_test() creates the test from the factory

    modul e t op;. . .

    i ni t i albegi n: bl k

    . . .run_test( ) ;

    end

    endmodul e: t op

    vsim +OVM_TESTNAME=testCommand line:

    Register the testwith the factory

  • 7/28/2019 Ovm Mentograf

    13/24

    Tests are Components, too!

    Always call run_test() with null argument

    modul e t op;. . .

    i ni t i albegi n: bl k

    . . .run_test( ) ;

    end

    endmodul e: t op

    vsim +OVM_TESTNAME=test2Command line:

  • 7/28/2019 Ovm Mentograf

    14/24

    Use Factory on Sequence Items

    Sequence Items may also be overriddencl ass my_seq extends

    ovm_sequence #( my_t r ) ;

    t ask body( ) ;my_t r t x;tx = my_tr: : t ype_i d: : create(tx

    endt askendcl ass

    Register with Factory

  • 7/28/2019 Ovm Mentograf

    15/24

    Use Factory on Sequence Items

    Sequence Items may also be overriddencl ass my_seq extends

    ovm_sequence #( my_t r ) ;

    t ask body( ) ;my_t r t x;tx = my_tr: : t ype_i d: : create( t x, , get _f ul l name( ) ) ;

    endt ask

    endcl ass

    Register with Factory

    Empty parent for objects

    Allow factory to find this sequence

  • 7/28/2019 Ovm Mentograf

    16/24

    Use Factory on Sequence Items

    Sequence Items may also be overriddencl ass my_seq extends

    ovm_sequence #( my_t r ) ;

    t ask body( ) ;my_t r t x;tx = my_tr: : t ype_i d: : create( t x, , get _f ul l name( ) ) ;st ar t _i t em( tx) ;asser t ( t x. r andomi ze( ) wi t h { cmd == 0; } ) ;f i ni sh_i t em( t x) ;

    endt askendcl ass

    Register with Factory

  • 7/28/2019 Ovm Mentograf

    17/24

    Use Factory on Sequence Items

    Override items by type

    cl ass er r _t est ext ends my_t est ;task run();my_tr: : t ype_i d: : set_type_override( err_tr: : get _t ype( ) ) ;

    endt ask

    endcl ass

  • 7/28/2019 Ovm Mentograf

    18/24

    Use Factory on Sequence Items

    Override items by type or instance

    cl ass er r _t est ext ends my_t est ;task run();my_tr: : t ype_i d: : set_inst_override( err_tr: : get _t ype( ) ,

    e. agent . sqr . s1. t x) ;

    endt ask

    endcl ass

  • 7/28/2019 Ovm Mentograf

    19/24

    Use Factory on Sequence Items

    Override items by type or instance

    cl ass er r _t est ext ends my_t est ;task run();my_tr: : t ype_i d: : set_inst_override( err_tr: : get _t ype( ) ,

    e. agent . sqr . s1. t x) ;

    endt ask

    endcl ass

    Path to sequencer

  • 7/28/2019 Ovm Mentograf

    20/24

    Use Factory on Sequence Items

    Override items by type or instance

    cl ass er r _t est ext ends my_t est ;task run();my_tr: : t ype_i d: : set_inst_override( err_tr: : get _t ype( ) ,

    e. agent . sqr . s1. t x) ;

    endt ask

    endcl ass

    Path to sequencer

    Sequence name

  • 7/28/2019 Ovm Mentograf

    21/24

    Use Factory on Sequence Items

    Override items by type or instance

    cl ass er r _t est ext ends my_t est ;task run();my_tr: : t ype_i d: : set_inst_override( err_tr: : get _t ype( ) ,

    e. agent . sqr . s1. t x) ;

    endt ask

    endcl ass

    Path to sequencer

    Sequence name

    Item name

  • 7/28/2019 Ovm Mentograf

    22/24

    Use Factory on Sequence Items

    Instance overrides let you change the typeof item generated by a particular sequence on a sequencer

    a specific item name created by a sequence

    cl ass er r _t est ext ends my_t est ;task run();my_tr: : t ype_i d: : set_inst_override( err_tr: : get _t ype( ) ,

    e. agent . sqr . s1. t x) ;

    endt ask

    endcl ass

    Path to sequencer

    Sequence name

    Item name

  • 7/28/2019 Ovm Mentograf

    23/24

    Summary

    Use `ovm_object/component_utilsmacro to register with the factory

    Always call ::type_id::create()

    Register tests with the factory

    Call run_test() with null argument Specify which test via the command line

  • 7/28/2019 Ovm Mentograf

    24/24

    [email protected]

    www.verificationacademy.com

    Advanced OVM (& UVM)Understanding the Factory

    Tom FitzpatrickVerification Technologist