course introduction to uvm session8 transactions rsalemi

Upload: manjinder-singh-baath

Post on 02-Jun-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    1/41

    [email protected] | www.verificationacademy.com

    Introduction to the UVMTransact ions

    Ray Salemi

    Senior Verification Consultant

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    2/41

    Ray SalemiSenior Verification Consu

    Introduction to

    Advanced VerificationIntroduction

    the UVM 2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    3/41

    Agenda

    1. SystemVerilog for VHDL Engineers

    2. Object Oriented Programming

    3. SystemVerilog Interfaces4. Packages, Includes, and Macros

    5. UVM Test Objects

    6. UVM Environments

    7. Connecting Objects

    8. Transaction Level Testing9. The Analysis Layer

    10. UVM Reporting

    11. Functional Coverage with Covergroups

    12. Introduction to Sequences

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    4/41

    Abstracting Complexity Away

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    5/41

    Abstracting Complexity Away

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    6/41

    Abstracting Complexity Away

    +

    X FF

    X FF

    FF

    A

    B

    CD

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    7/41

    Thinking in Transactions

    0nop

    7

    2

    14

    5

    ValueField

    d

    c

    b

    a

    0nop

    7

    2

    14

    5

    ValueField

    d

    c

    b

    a

    INPUT_TRAN

    Field

    result

    Field

    result(a*b) + (c*d)

    RESULT_T

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    8/41

    Transaction Level Test Bench

    Driver

    RTL

    or

    Gate

    clock

    input_ready

    Responder

    result[15:0]b[7:0]

    c[7:0]

    d[7:0]

    a[7:0]

    result_ready

    input

    transaction

    result

    transaction

    rst

    Driver

    RTL

    or

    Gate

    clock

    input_ready

    Responder

    result[15:0]result[15:0]b[7:0]b[7:0]

    c[7:0]c[7:0]

    d[7:0]d[7:0]

    a[7:0]a[7:0]

    result_ready

    input

    transaction

    result

    transaction

    rst

    Driver

    RTL

    or

    Gate

    clock

    input_ready

    Responder

    result[15:0]b[7:0]

    c[7:0]

    d[7:0]

    a[7:0]

    result_ready

    input

    transaction

    result

    transaction

    rst

    Driver

    RTL

    or

    Gate

    clock

    input_ready

    Responder

    result[15:0]result[15:0]b[7:0]b[7:0]

    c[7:0]c[7:0]

    d[7:0]d[7:0]

    a[7:0]a[7:0]

    result_ready

    input

    transaction

    result

    transaction

    rst

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    9/41

    Running Tests

    gen

    (generator) stim_f result_f readerDriverRTLor

    Gate

    clock

    input_ready

    Responder

    result[15:0]b[7:0]

    c[7:0]

    d[7:0]

    a[7:0]

    result_ready

    rst

    DriverRTLor

    Gate

    clock

    input_ready

    Responder

    result[15:0]result[15:0]b[7:0]b[7:0]

    c[7:0]c[7:0]

    d[7:0]d[7:0]

    a[7:0]a[7:0]

    result_ready

    rst

    DriverRTLor

    Gate

    clock

    input_ready

    Responder

    result[15:0]b[7:0]

    c[7:0]

    d[7:0]

    a[7:0]

    result_ready

    rst

    DriverRTLor

    Gate

    clock

    input_ready

    Responder

    result[15:0]result[15:0]b[7:0]b[7:0]

    c[7:0]c[7:0]

    d[7:0]d[7:0]

    a[7:0]a[7:0]

    result_ready

    rst

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    10/41

    Memory Testbench Transactions

    mem_data

    logic[15:0]data

    logic[15:0]addr

    ValueField

    mem_data

    logic[15:0]data

    logic[15:0]addr

    ValueField

    mem_req

    {read, writop

    logic[15data

    logic[15addr

    ValueField

    mem_req

    {read, writop

    logic[15data

    logic[15addr

    ValueField

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    11/41

    Transactions are Objects

    mem_da

    logidata

    logiaddr

    VField

    mem_da

    logidata

    logiaddr

    VField

    2014 M

    Wh t k it T ti ?

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    12/41

    What makes it a Transaction?Extension

    mem_da

    logidata

    logiaddr

    VField

    mem_da

    logidata

    logiaddr

    VField

    2014 M

    Wh t k it T ti ?

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    13/41

    What makes it a Transaction?`uvm_object_utils

    mem_da

    logidata

    logiaddr

    VField

    mem_da

    logidata

    logiaddr

    VField

    2014 M

    What makes it a Transaction?

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    14/41

    What makes it a Transaction?constructor

    mem_da

    logidata

    logiaddr

    VField

    mem_da

    logidata

    logiaddr

    VField

    2014 M

    Wh t k it T ti ?

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    15/41

    What makes it a Transaction?virtual function string convert2string()

    mem_da

    logidata

    logiaddr

    VField

    mem_da

    logidata

    logiaddr

    VField

    2014 M

    Wh t k it T ti ?

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    16/41

    What makes it a Transaction?virtual function void do_copy(uvm_object rhs)

    mem_da

    logidata

    logiaddr

    VField

    mem_da

    logidata

    logiaddr

    VField

    2014 M

    i t b t h

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    17/41

    load_data()is not necessary but he

    mem_da

    logidata

    logiaddr

    VField

    mem_da

    logidata

    logiaddr

    VField

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    18/41

    Extending Objects

    Whenever you will copy code, consider exten

    mem_data

    logic[15:0]data

    logic[15:0]addr

    ValueField

    mem_data

    logic[15:0]data

    logic[15:0]addr

    ValueField

    mem_req

    {read, writop

    logic[15data

    logic[15addr

    ValueField

    mem_req

    {read, writop

    logic[15data

    logic[15addr

    ValueField

    mem_req is just mem_dat

    with an operation

    So we extend!

    2014 M

    T ti

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    19/41

    mem_reqTransaction

    2014 M

    C d

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    20/41

    mem_req Code

    2014 M

    L < th d >

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    21/41

    Leverage super.

    2014 M

    Creating d () for this transaction

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    22/41

    Creating do_copy()for this transaction

    This is why we use

    uvm_object in the

    parameter list

    2014 M

    Can even leverage l d d t ()

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    23/41

    Can even leverage load_data()

    2014 M

    Creating the TLM Testbench

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    24/41

    Creating the TLM Testbench

    tester_e

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)responder(rsp)memory_if

    driver(drv)

    memory_

    2014 M

    verbose test

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    25/41

    verbose_test

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    tester env

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    26/41

    tester_env

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    tester env(cont)

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    27/41

    tester_env(cont)

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    tester

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    28/41

    tester

    Abstraction in

    action

    Easy to

    understand

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    tester (cont)

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    29/41

    tester (cont)

    Where did clone

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    interface base (cannot be used direct

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    30/41

    interface_base(cannot be used direct

    Means that interface_base must be

    extended. It cannot be used directl

    2014 M

    driver

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    31/41

    driver

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    responder

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    32/41

    responder

    G

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    printer

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    33/41

    printer

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    Running the Test

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    34/41

    Running the Test

    Transa

    Transa

    2014 M

    The quiet test

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    35/41

    The quiet_test

    Replace theprinterwith abit_buck

    the factory

    2014 M

    bit bucket

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    36/41

    _

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    Inherits port interface from it

    superclass the printer.

    Get the data and throw it away

    2014 M

    quiet test

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    37/41

    q _

    The environment thinks it is getting a printerfrom th

    factory, but it is really getting a bit_bucket.

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    verbose_test

    tester_env(t_env)

    tester(tst)

    printer(prt)

    tlm_fifo(tester2drv)

    tlm_fifo(rsp2printer)

    responder(rsp)

    memory_if

    responder(rsp)

    memory_if

    driver(drv)

    memory_if

    driver(drv)

    memory_if

    2014 M

    Run Quietly

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    38/41

    u Qu et y

    2014 M

    Summary: TLM Test Bench

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    39/41

    y

    tester_

    tester(tst)

    printer

    (prt)

    tlm_fifo(tester2drv)

    tlm_fifo

    (rsp2printer)

    responder

    (rsp)

    memory_if

    driver(drv)

    memory_

    2014 M

    Next Session

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    40/41

    1. SystemVerilog for VHDL Engineers

    2. Object Oriented Programming

    3. SystemVerilog Interfaces

    4. Packages, Includes, and Macros

    5. UVM Test Objects

    6. UVM Environments

    7. Connecting Objects

    8. Transaction Level Testing

    9. The Analysis Layer

    10. UVM Reporting

    11. Functional Coverage with Covergroups

    12. Introduction to Sequences

    2014 M

  • 8/10/2019 Course Introduction to Uvm Session8 Transactions Rsalemi

    41/41

    [email protected] | www.verificationacademy.com

    Introduction to the UVMTransact ions

    Ray Salemi

    Senior Verification Consultant