Block-SubSystem-OVM_ver2

Embed Size (px)

Citation preview

  • 8/7/2019 Block-SubSystem-OVM_ver2

    1/11

    Integrating OVM Components

    into Testbenchs

    Best Practices for Vertical

    Integrations

  • 8/7/2019 Block-SubSystem-OVM_ver2

    2/11

    Integration Pitfalls

    Duplication of interface related logic could result indoubling (or worse) our samples per clock edge.

    Multiple OVM Toplevels within a given architecturecan lead to multiple ovm_top instances potentially

    confusing the set_config process Having OVM instantiated in the same hierarchy as the

    DUT means that any change in OVM code results inunnecessarily recompiling the DUT code as well

  • 8/7/2019 Block-SubSystem-OVM_ver2

    3/11

    class w_block_test1 extends ovm_test;

    w_block_tb1 w_tb;

    ...

    virtual function connect();

    w_tb.a_ovc.assign_vi();w_tb.b_ovc.assign_vi();

    w_tb.c_ovc.assign_vi();

    endfunction : connect

    endclass : w_block_tb1

    DUT ToplevelOVM Test (OVM Toplevel)

    class w_block_tb1 extends ovm_env;

    interface_a_ovc a_ovc;

    interface_b_ovc b_ovc;

    interface_c_ovc c_ovc;

    module_w_ovc w_ovc;

    ...

    virtual function connect();

    a_ovc.analysis_port.connect(w_ovc.a_imp);

    b_ovc.analysis_port.connect(w_ovc.b_imp);

    c_ovc.analysis_port.connect(w_ovc.c_imp);

    endfunction : connect

    endclass : w_block_tb1

    Block W OVM Testbench

    Interface A OVC

    Module W OVC

    Interface B OVC

    Interface C OVC

    DUT WA

    B

    C

    Interface

    Registry

    NEED DEMO CODE HERE FOR DUT Top Level!!!

    BlockW

    Ar

    chitecture

  • 8/7/2019 Block-SubSystem-OVM_ver2

    4/11

    class x_block_test1 extends ovm_test;

    x_block_tb1 x_tb;

    ...

    virtual function connect();

    x_tb.a_ovc.assign_vi();x_tb.b_ovc.assign_vi();

    x_tb.c_ovc.assign_vi();

    endfunction : connect

    endclass : x_block_tb1

    DUT ToplevelOVM Test (OVM Toplevel)

    class x_block_tb1 extends ovm_env;

    interface_a_ovc a_ovc;

    interface_b_ovc b_ovc;

    interface_c_ovc c_ovc;

    module_w_ovc w_ovc;

    ...

    virtual function connect();

    a_ovc.analysis_port.connect(w_ovc.a_imp);

    b_ovc.analysis_port.connect(w_ovc.b_imp);

    c_ovc.analysis_port.connect(w_ovc.c_imp);

    endfunction : connect

    endclass : x_block_tb1

    Block X OVM Testbench

    Interface B OVC

    Module X OVC

    Interface D OVC

    Interface C OVC

    DUT XD

    B

    C

    Interface

    Registry

    NEED DEMO CODE HERE FOR DUT Top Level!!!

    BlockX

    Architecture

  • 8/7/2019 Block-SubSystem-OVM_ver2

    5/11

    OVM Test (OVM Toplevel)

    Block X OVM Testbench

    Interface B OVC

    Module X OVC

    Interface D OVC

    Interface C OVC

    Block W OVM Testbench

    Interface A OVC

    Module W OVC

    Interface B OVC

    Interface C OVC

    DUT Toplevel

    DUT WA

    B

    C

    Interface

    Registry

    Sub-Sy

    stem

    Architect u

    re

    DUT XD

    B

    CTHE

    WRON

    G

    WAY

  • 8/7/2019 Block-SubSystem-OVM_ver2

    6/11

    Unnecessary Duplication

    By copying the block level testbench

    OVCs into the Sub-System environment,

    weve duplicated the shared interface

    OVCs

    Every sample is now doubled

    BOTH interface OVCs need to be connected

    to the interface registry

  • 8/7/2019 Block-SubSystem-OVM_ver2

    7/11

    DUT ToplevelOVM Test (OVM Toplevel)

    DUT WA

    B

    C

    Interface

    Registry

    Sub-Sy

    stem

    Architect u

    re

    DUT XD

    B

    C

    THE RIGHT WAY

    Sub-System OVM Testbench

    Sub-System OVC

    Module X OVC

    Interface D OVC

    Interface A OVC

    Module W OVC

    Interface B OVC

    Interface C OVC

  • 8/7/2019 Block-SubSystem-OVM_ver2

    8/11

    class subsystem_ovc extends ovm_env;

    interface_b_ovc b_ovc;

    interface_c_ovc c_ovc;

    module_w_ovc w_ovc;

    module_x_ovc x_ovc;

    ovm_analysis_export #(A_SEQ_ITEM) a_export;

    ovm_analysis_export #(D_SEQ_ITEM) d_export;

    ...

    virtual function connect();

    b_ovc.analysis_port.connect(w_ovc.b_imp);

    b_ovc.analysis_port.connect(x_ovc.b_imp);

    c_ovc.analysis_port.connect(w_ovc.c_imp);

    c_ovc.analysis_port.connect(x_ovc.c_imp);

    a_export.connect(w_ovc.a_imp);

    d_export.connect(x_ovc.d_imp);

    endfunction : connect

    endclass : subsystem_ovc

    class subsystem_tb extends ovm_env;

    interface_a_ovc a_ovc;

    interface_f_ovc f_ovc;

    subsystem_ovc sub_ovc;

    ...

    virtual function connect();

    a_ovc.analysis_port(sub_ovc.a_export);

    f_ovc.analysis_port(sub_ovc.f_export);

    endfunction : connect

    endclass : subsystem_tb

    You can avoid burrowing into an ovc

    by using TLM exports

    Sub-System OVC

  • 8/7/2019 Block-SubSystem-OVM_ver2

    9/11

    OLD SLIDES

    AFTER THIS ONE

  • 8/7/2019 Block-SubSystem-OVM_ver2

    10/11

    class w_block_tb1 extends ???;

    interface_a_ovc a_ovc;

    interface_b_ovc b_ovc;

    interface_c_ovc c_ovc;

    module_w_ovc w_ovc;

    ...

    virtual function connect();

    a_ovc.analysis_port.connect(w_ovc.a_imp);

    b_ovc.analysis_port.connect(w_ovc.b_imp);

    c_ovc.analysis_port.connect(w_ovc.c_imp);

    endfunction : connect

    endclass : w_block_tb1

    class x_block_tb1 extends ???;

    interface_b_ovc b_ovc;

    interface_d_ovc b_ovc;

    module_x_ovc x_ovc;

    ...

    virtual function connect();

    b_ovc.analysis_port.connect(w_ovc.b_imp);

    d_ovc.analysis_port.connect(w_ovc.d_imp);

    endfunction : connect

    endclass : x_block_tb1

    Block W OVM Testbench

    Interface A OVC

    Module W OVC

    Interface B OVC

    Interface C OVC

    Block X OVM Testbench

    Interface B OVC

    Module X OVC

    Interface D OVC

    DUT WA

    B

    C

    DUT XB D

    C

    Interface C OVC

  • 8/7/2019 Block-SubSystem-OVM_ver2

    11/11

    Sub-System DUTSub-System OVM Testbench

    Sub-System Level OVC Instantiation

    DUT WA

    B

    C

    DUT XB D

    Sub-System OVC

    Module W OVC

    Interface B OVC

    Interface C OVC

    Module X OVC

    Interface A OVC

    Interface D OVC