SlideShare a Scribd company logo
The AVM and OVM in IP Core
Verification – Experiences and
Observations
Gareth Edwards
IP Solutions




April 22, 2009
Topics


 What is a methodology? What is it not?
 The timeline
 Some example OVM test environments




Page 2                        © Copyright 2009 Xilinx
What is methodology?


         methodology
          1. A collection of methods, practices,
             procedures and rules used by those who
             work in some field.
          2. The study of such methods etc.
          3. The implementation of such methods etc.




Page 3                       © Copyright 2009 Xilinx
Methodology is only part of the overall strategy


                                                           Compliance
               Hardware                                     Testing
               Validation



                            Functional
                            Verification
          CDC                                                     Linting
         Analysis


                             Formal
                             Proving



Page 4                           © Copyright 2009 Xilinx
The Timeline

                                                                        Various Ethernet testbenches
                                                                         Wrote our own extensions
 AVM 2.0 (July 2006)                                                  (primarily component removal)
 AVM 3.0 (May 2007)
     – ovm_object.clone()                                                Started CPRI testbench
     – Multiple environments                                             development, November
     – Component Removal
                                                                         2007
 OVM 1.0 (January 2008)
     –    Factories
     –    Configuration                                                  Ported CPRI testbench in-
     –    Sequences/scenarios
     –    Backward compatible with AVM 3.0
                                                                         flight
 OVM 1.1 (May 2008)
     – Singletop top
     – Refined test phasing                                              Ported CPRI testbench
     – Backward compatible with OVM 1.0                                  again…
 OVM 2.0 (Sep 2008)
     – Unified sequences
     – User Guide!
     – Backward compatible with OVM 1.1                                  CPRI I/Q Module
                                                                         testbenches


 Page 5                                      © Copyright 2009 Xilinx
The CPRI core – the DUT




Page 6               © Copyright 2009 Xilinx
The main CPRI Test suite (transmit)



                                 comparators



                                                                Cpri_model
                                                                                     HDLC
     tx_monitors
                                                                                      Eth
tx_drivers         DUT      monitor                                          DeMux

                                                                                      IQ


                                                      Startup       Sync             Vendor
                                                        SM           SM

  = tlm_fifo
                              byte_codeword_transaction
                   serial or
                                                      model_codeword_transaction
               2 byte parallel i/f

Page 7                                © Copyright 2009 Xilinx
The main CPRI Test suite (receive)


     = tlm_fifo
                                          comparators



                                                                         model
                                                                                    HDLC          rx_stim

                                                                                     Eth          rx_stim
         rx_monitors   DUT        driver
                                                                                     IQ           rx_stim


                                                              sync                  Vendor        rx_stim


                                        byte_codeword_transaction
                      serial or                                                  model_codeword_transaction
                  2 byte parallel i/f

Page 8                                         © Copyright 2009 Xilinx
The I/Q Module


                                           entity iq_module is
                                             generic (
                                               C_TX_WIDTH_1 : natural :=         10;
                                               C_TX_START_1 : natural :=          0;
                                               C_RX_WIDTH_1 : natural :=         10;
                                               C_RX_START_1 : natural :=          0;

                                               C_TX_WIDTH_2   :   natural   :=   10;
                                               C_TX_START_2   :   natural   :=   20;
                                               C_RX_WIDTH_2   :   natural   :=   10;
                                               C_RX_START_2   :   natural   :=   20;

                                               C_TX_WIDTH_3   :   natural   :=   10;
                                               C_TX_START_3   :   natural   :=   40;
                                               C_RX_WIDTH_3   :   natural   :=   10;
                                               C_RX_START_3   :   natural   :=   40;
                                           …




Page 9           © Copyright 2009 Xilinx
Testing the I/Q Module – parameterisation (1)

 class dut_param extends ovm_object;                               entity iq_module is
                                                                     generic (
    rand CpriSpeedType min_speed;                                      C_TX_WIDTH_1 : natural :=         10;
                                                                       C_TX_START_1 : natural :=          0;
    rand int n_tx_channels;                                            C_RX_WIDTH_1 : natural :=         10;
         int tx_width[1:24];                                           C_RX_START_1 : natural :=          0;
         int tx_start[1:24];
                                                                       C_TX_WIDTH_2   :   natural   :=   10;
    rand int n_rx_channels;                                            C_TX_START_2   :   natural   :=   20;
         int rx_width[1:24];                                           C_RX_WIDTH_2   :   natural   :=   10;
         int rx_start[1:24];                                           C_RX_START_2   :   natural   :=   20;
  function void pre_randomize();                                       C_TX_WIDTH_3   :   natural   :=   10;
     int status;                                                       C_TX_START_3   :   natural   :=   40;
 status = std::randomize(tx_width, rx_width)                           C_RX_WIDTH_3   :   natural   :=   10;
 with {                                                                C_RX_START_3   :   natural   :=   40;
       foreach (tx_width[i]) {
                                                                   …
         tx_width[i] inside {[4:20]};
       }
       foreach (rx_width[i]) {
         rx_width[i] inside {[4:20]};
       }
     };
 endfunction : pre_randomize




Page 10                                  © Copyright 2009 Xilinx
Testing the I/Q Module – parameterisation (2)

 class dut_param extends ovm_object;

    rand CpriSpeedType min_speed;                                     Stub program creates
    rand int n_tx_channels;                                            dut_param object,
         int tx_width[1:24];                                         randomizes and saves
         int tx_start[1:24];
                                                                       generics to storage
    rand int n_rx_channels;
         int rx_width[1:24];
         int rx_start[1:24];

  function void pre_randomize();
     int status;
 status = std::randomize(tx_width, rx_width)
 with {
       foreach (tx_width[i]) {
         tx_width[i] inside {[4:20]};
                                                                    Simulator reads generics,
       }                                                              elaborates testbench
       foreach (rx_width[i]) {
         rx_width[i] inside {[4:20]};
                                                                   and reconstructs dut_param
       }                                                                     object
     };
 endfunction : pre_randomize




Page 11                                  © Copyright 2009 Xilinx
Functional Coverage Tracking




Page 12              © Copyright 2009 Xilinx
Conclusions


 Using a Functional Verification Methodology can improve the
  quality of your verification effort
 We’ve used OVM; other verification methodologies are
  available
 It’s not that important which one you use
 Don’t forget the rest of your verification strategy




Page 13                          © Copyright 2009 Xilinx
Questions?




             ?
Page 14      © Copyright 2009 Xilinx

More Related Content

PDF
Mixed signal verification challenges - slides
PDF
Re usable continuous-time analog sva assertions - slides
PDF
Advanced Methodologies Used for Top-Level Verification of Mixed Signal Products
PDF
Directive-based approach to Heterogeneous Computing
PDF
Presentation of the open source CFD code Code_Saturne
PDF
Analogue Behavioral Modelling: An Inconvenient Truth
PDF
Cray XT Porting, Scaling, and Optimization Best Practices
PDF
Lambda
Mixed signal verification challenges - slides
Re usable continuous-time analog sva assertions - slides
Advanced Methodologies Used for Top-Level Verification of Mixed Signal Products
Directive-based approach to Heterogeneous Computing
Presentation of the open source CFD code Code_Saturne
Analogue Behavioral Modelling: An Inconvenient Truth
Cray XT Porting, Scaling, and Optimization Best Practices
Lambda

What's hot (10)

PDF
Doulos coverage-tips-tricks
PPTX
Camera camcorder framework overview(ginger bread)
PPT
Trusted Launch of Generic Virtual Machine Images in Public IaaS Environments
PDF
Re usable continuous-time analog sva assertions
PPT
20081114 Friday Food iLabt Bart Joris
PPT
TLM Based Software Control of UVCs for Vertical Verification Reuse
PDF
ARM and SoC Traning Part I -- Overview
PPTX
Fpga based implementation of a double precision ieee floating point adder
PPTX
FIBRE-BR – People, Resources , Roadmap
PPT
CFD - OpenFOAM
Doulos coverage-tips-tricks
Camera camcorder framework overview(ginger bread)
Trusted Launch of Generic Virtual Machine Images in Public IaaS Environments
Re usable continuous-time analog sva assertions
20081114 Friday Food iLabt Bart Joris
TLM Based Software Control of UVCs for Vertical Verification Reuse
ARM and SoC Traning Part I -- Overview
Fpga based implementation of a double precision ieee floating point adder
FIBRE-BR – People, Resources , Roadmap
CFD - OpenFOAM
Ad

Viewers also liked (20)

PDF
Ludden power7 verification
PDF
3 d to _hpc
PDF
Salamian dv club_foils_intel_austin
PDF
2010 bristol q1_hybrid-formal-coverage
PPT
Dv club foils_intel_austin
PDF
Jonathan bromley doulos
PDF
Bristol 2009 q1_boulton_richard
PDF
Benjamin q4 2008_bristol
PDF
Colwell validation attitude
PPT
Dill may-2008
PDF
Chris brown ti
PDF
Programmiertechniken
PDF
Www batteriemonde com_hp-nbp6b17b1
PPT
The Genius Triangle and Humanet
DOC
Seguridadinform
PPT
職場宣教Easy go套餐 20120529
PDF
D2 audio dv_club_verification_flow
PPSX
Healty life free of gluten
PPT
Vishakantaiah validating
Ludden power7 verification
3 d to _hpc
Salamian dv club_foils_intel_austin
2010 bristol q1_hybrid-formal-coverage
Dv club foils_intel_austin
Jonathan bromley doulos
Bristol 2009 q1_boulton_richard
Benjamin q4 2008_bristol
Colwell validation attitude
Dill may-2008
Chris brown ti
Programmiertechniken
Www batteriemonde com_hp-nbp6b17b1
The Genius Triangle and Humanet
Seguridadinform
職場宣教Easy go套餐 20120529
D2 audio dv_club_verification_flow
Healty life free of gluten
Vishakantaiah validating
Ad

Similar to Gareth edwards xilinx (20)

PPTX
Iris an architecture for cognitive radio networking testbeds
PDF
DFX Architecture for High-performance Multi-core Microprocessors
PDF
15.00 hr van Hilten
PDF
FPGA Camp - Intellitech Presentation
PPT
design_flow
PDF
V Labs Product Presentation
PDF
FPGA Camp - National Instruments Presentation
PDF
AXONIM 2018 embedded systems development
PDF
Consistent Modeling Technique for Accurate Transaction Level Models
PDF
超級全能危樓改造王 - 增建、改建、打掉重建你的軟體架構?
PDF
Creating an Embedded System Lab
PPTX
VVDN Presentation
DOC
Ankit sarin
PDF
Training Lecture
PDF
FPGA Camp - Softjin Presentation
PPT
Fpga technology
PDF
SVG in Data Acquisition and Control Systems
PDF
Adv. FPGA Motor Control--EBV & Univ. of Koln: Embedded World 2010
PDF
Benefits of Using FPGAs for Embedded Processing: Embedded World 2010
PDF
Thesis Donato Slides EN
Iris an architecture for cognitive radio networking testbeds
DFX Architecture for High-performance Multi-core Microprocessors
15.00 hr van Hilten
FPGA Camp - Intellitech Presentation
design_flow
V Labs Product Presentation
FPGA Camp - National Instruments Presentation
AXONIM 2018 embedded systems development
Consistent Modeling Technique for Accurate Transaction Level Models
超級全能危樓改造王 - 增建、改建、打掉重建你的軟體架構?
Creating an Embedded System Lab
VVDN Presentation
Ankit sarin
Training Lecture
FPGA Camp - Softjin Presentation
Fpga technology
SVG in Data Acquisition and Control Systems
Adv. FPGA Motor Control--EBV & Univ. of Koln: Embedded World 2010
Benefits of Using FPGAs for Embedded Processing: Embedded World 2010
Thesis Donato Slides EN

More from Obsidian Software (20)

PDF
Zhang rtp q307
PDF
Zehr dv club_12052006
PDF
Yang greenstein part_2
PDF
Yang greenstein part_1
PDF
Williamson arm validation metrics
PDF
Whipp q3 2008_sv
PDF
Validation and-design-in-a-small-team-environment
PDF
Tobin verification isglobal
PDF
Tierney bq207
PDF
The validation attitude
PPT
Thaker q3 2008
PDF
Thaker q3 2008
PDF
Strickland dvclub
PDF
Stinson post si and verification
PDF
Shultz dallas q108
PDF
Shreeve dv club_ams
PDF
Sharam salamian
PDF
Schulz sv q2_2009
PDF
Schulz dallas q1_2008
PDF
Sakar jain
Zhang rtp q307
Zehr dv club_12052006
Yang greenstein part_2
Yang greenstein part_1
Williamson arm validation metrics
Whipp q3 2008_sv
Validation and-design-in-a-small-team-environment
Tobin verification isglobal
Tierney bq207
The validation attitude
Thaker q3 2008
Thaker q3 2008
Strickland dvclub
Stinson post si and verification
Shultz dallas q108
Shreeve dv club_ams
Sharam salamian
Schulz sv q2_2009
Schulz dallas q1_2008
Sakar jain

Gareth edwards xilinx

  • 1. The AVM and OVM in IP Core Verification – Experiences and Observations Gareth Edwards IP Solutions April 22, 2009
  • 2. Topics  What is a methodology? What is it not?  The timeline  Some example OVM test environments Page 2 © Copyright 2009 Xilinx
  • 3. What is methodology? methodology 1. A collection of methods, practices, procedures and rules used by those who work in some field. 2. The study of such methods etc. 3. The implementation of such methods etc. Page 3 © Copyright 2009 Xilinx
  • 4. Methodology is only part of the overall strategy Compliance Hardware Testing Validation Functional Verification CDC Linting Analysis Formal Proving Page 4 © Copyright 2009 Xilinx
  • 5. The Timeline Various Ethernet testbenches Wrote our own extensions  AVM 2.0 (July 2006) (primarily component removal)  AVM 3.0 (May 2007) – ovm_object.clone() Started CPRI testbench – Multiple environments development, November – Component Removal 2007  OVM 1.0 (January 2008) – Factories – Configuration Ported CPRI testbench in- – Sequences/scenarios – Backward compatible with AVM 3.0 flight  OVM 1.1 (May 2008) – Singletop top – Refined test phasing Ported CPRI testbench – Backward compatible with OVM 1.0 again…  OVM 2.0 (Sep 2008) – Unified sequences – User Guide! – Backward compatible with OVM 1.1 CPRI I/Q Module testbenches Page 5 © Copyright 2009 Xilinx
  • 6. The CPRI core – the DUT Page 6 © Copyright 2009 Xilinx
  • 7. The main CPRI Test suite (transmit) comparators Cpri_model HDLC tx_monitors Eth tx_drivers DUT monitor DeMux IQ Startup Sync Vendor SM SM = tlm_fifo byte_codeword_transaction serial or model_codeword_transaction 2 byte parallel i/f Page 7 © Copyright 2009 Xilinx
  • 8. The main CPRI Test suite (receive) = tlm_fifo comparators model HDLC rx_stim Eth rx_stim rx_monitors DUT driver IQ rx_stim sync Vendor rx_stim byte_codeword_transaction serial or model_codeword_transaction 2 byte parallel i/f Page 8 © Copyright 2009 Xilinx
  • 9. The I/Q Module entity iq_module is generic ( C_TX_WIDTH_1 : natural := 10; C_TX_START_1 : natural := 0; C_RX_WIDTH_1 : natural := 10; C_RX_START_1 : natural := 0; C_TX_WIDTH_2 : natural := 10; C_TX_START_2 : natural := 20; C_RX_WIDTH_2 : natural := 10; C_RX_START_2 : natural := 20; C_TX_WIDTH_3 : natural := 10; C_TX_START_3 : natural := 40; C_RX_WIDTH_3 : natural := 10; C_RX_START_3 : natural := 40; … Page 9 © Copyright 2009 Xilinx
  • 10. Testing the I/Q Module – parameterisation (1) class dut_param extends ovm_object; entity iq_module is generic ( rand CpriSpeedType min_speed; C_TX_WIDTH_1 : natural := 10; C_TX_START_1 : natural := 0; rand int n_tx_channels; C_RX_WIDTH_1 : natural := 10; int tx_width[1:24]; C_RX_START_1 : natural := 0; int tx_start[1:24]; C_TX_WIDTH_2 : natural := 10; rand int n_rx_channels; C_TX_START_2 : natural := 20; int rx_width[1:24]; C_RX_WIDTH_2 : natural := 10; int rx_start[1:24]; C_RX_START_2 : natural := 20; function void pre_randomize(); C_TX_WIDTH_3 : natural := 10; int status; C_TX_START_3 : natural := 40; status = std::randomize(tx_width, rx_width) C_RX_WIDTH_3 : natural := 10; with { C_RX_START_3 : natural := 40; foreach (tx_width[i]) { … tx_width[i] inside {[4:20]}; } foreach (rx_width[i]) { rx_width[i] inside {[4:20]}; } }; endfunction : pre_randomize Page 10 © Copyright 2009 Xilinx
  • 11. Testing the I/Q Module – parameterisation (2) class dut_param extends ovm_object; rand CpriSpeedType min_speed; Stub program creates rand int n_tx_channels; dut_param object, int tx_width[1:24]; randomizes and saves int tx_start[1:24]; generics to storage rand int n_rx_channels; int rx_width[1:24]; int rx_start[1:24]; function void pre_randomize(); int status; status = std::randomize(tx_width, rx_width) with { foreach (tx_width[i]) { tx_width[i] inside {[4:20]}; Simulator reads generics, } elaborates testbench foreach (rx_width[i]) { rx_width[i] inside {[4:20]}; and reconstructs dut_param } object }; endfunction : pre_randomize Page 11 © Copyright 2009 Xilinx
  • 12. Functional Coverage Tracking Page 12 © Copyright 2009 Xilinx
  • 13. Conclusions  Using a Functional Verification Methodology can improve the quality of your verification effort  We’ve used OVM; other verification methodologies are available  It’s not that important which one you use  Don’t forget the rest of your verification strategy Page 13 © Copyright 2009 Xilinx
  • 14. Questions? ? Page 14 © Copyright 2009 Xilinx