( ESNUG 578 Item 3 ) ---------------------------------------------- [12/01/17] 

Subject: Hands-on PSS user explains CDNS Perspec vs. Breker TrekSoC (pt 3)

In part 3, I will discuss PSS Coverage and Accelera PSS.

    - [ Ant-Man, the Movie ]
      PSS user explains CDNS Perspec vs. Breker TrekSoC (pt 2)


From: [ Ant-Man, the Movie ]

Hi John,

And here is my "part 3" on PSS Coverage and Accelera PSS..

    - [ Ant-Man, the Movie ]

        ----    ----    ----    ----    ----    ----   ----

G. PSS COVERAGE

A critical aspect of verification is always understanding your coverage.

There are two main types of coverage:

  - Pre-Runtime Coverage 

    This is calculating your coverage before you exercise your tests.  The
    idea is that you will know the full spectrum of your coverage before you
    run a single test case.

    By definition, PSS pre-runtime coverage only exists for automatically
    generated tests.  

    Example: Let's say you have a PCI transfer action.  The PCI transfer
    action has multiple parameters which are part of actions.  Let's take
    these 3 parameters:

        - Which processor is doing the transfer?
        - Which memory the transfer is going to?
        - What's your memory size?

    For every parameter you have multiple options: 5 different processor
    options, 10 different memory options, and 20 different options for
    memory size.
    Pre-runtime coverage shows your coverage with respect to all those 
    parameters for each action.  You can define your parameters and the
    PSS tool will automatically define your coverage in advance:  

        - Did every processor get exercised or not?
        - Did detection go to every memory? 
        - Did every processor go to every memory size?

  - Runtime Coverage

    This is collecting your coverage after you've run all your tests.
    There are two kinds of runtime coverage, basic and advanced: 

      1. Basic runtime coverage is collecting the same coverage that was
         defined for pre-runtime and making sure that it is hit.  You 
         monitor whether the actions got executed or not.  And if they
         did get executed, what the parameters were, etc.

         If your verification environment and everything else were perfect,
         your pre-runtime and runtime coverage would match or correlate
         very closely to each other.  But what if something happens during
         simulation and an action got skipped and was never executed?  This
         is why runtime coverage is an important check for us.

      2. Advanced runtime coverage is created using information from 
         your test, design, and testbench live and while it's happening
         during simulations.

      All the information needed for runtime coverage calculations is dumped
      in your simulation log files.  So runtime coverage could be calculated 
      manually by processing the log files -- you could write a parser, and
      do some scripting to figure out whether the processor executed
      everything or not.  But it would take a lot effort.

Cadence Perspec

    Perspec has broader coverage functionality than Breker.  It calculates
    your pre-runtime coverage for a scenario when the tests are first 
    generated (Cadence calls this "Gen-Time" coverage), and then it 
    calculates your coverage after your tests are run (runtime coverage). 

    The Cadence SLN language lets you define PSS coverage that is almost
    SystemVerilog-like, i.e. like item coverage, cross coverage, etc.

    Since Perspec is integrated into Cadence VManager, this PSS coverage
    gets reported along with your other coverage -- you see it as one single
    coverage report in VManager regardless of where it was created.

    - Pre-Runtime Coverage ("Gen-Time" coverage) 

      Perspec's Gen-Time coverage is more elaborate than Breker's, plus
      it is more integrated into the standard CDNS coverage flow.

    - Runtime Coverage

      Perspec has both basic runtime coverage (as described above) and 
      advanced runtime coverage.
      Perspec's *advanced* runtime coverage uses live monitoring of the
      activities within the tests, as well as the design and testbench.  

      Perspec will show you:

        - when certain transactions have started 
        - when certain transactions have completed
        - if other transaction you want to make happen in between
          have happened

      You can define not only the coverage of an action, but also the 
      coverage across various actions, e.g. you can use Perspec to 
      determine whether the action happened, and if it did, while it was
      executing, did these other actions happen together? 

          Example: You want to make sure your FIFO level got executed.
          And you also want to know when your FIFO was executed, did
          other transactions get tied up?

      With Perspec you can code for any of these arbitrary, more complex,
      white-box kinds of coverage.  The events could come directly from 
      your C code, or from monitoring your actual design -- and you can 
      extrapolate those events and create coverage from it.  You can 
      create cross-coverage or simple event coverage.  

      Let's say you want to monitor at very low-level detail:

        - whether something specific happens within the action
        - and when that specific activity happens, whether
          something else happened or not 

      Perspec's advanced runtime coverage post-processes your log file, 
      and calculates your coverage out of it.  (With Gen-Time, you don't
      need any logs because you haven't run your simulations, etc. yet.)

      Perspec basically monitors the events from your log data (either 
      from C or Verilog) and puts some messaging out in a certain format
      ('prints it') into your log files.

          Example: You want to check whether a data transfer of over 20 MB
          size happens when your FIFO buffer is between 70% and 100% full.  
          Here's how Perspec does this.

            1. You define a coverage group in Perspec, where one of the 
               items is your FIFO buffer size (e.g. 10%, 20%, 30%...).  

            2. Then, whenever your FIFO reaches any of those buffer 
               levels (10%, 20% ...), have Perspec 'prints' that
               information into your log file.

            3. In parallel, you create an event called "XYZ", which says
               if transactions sized over 20 MB have happened.  Have
               Perspec do a 'prints' to the log file each time it happens.

            4. The coverage you're looking for is when your FIFO activity 
               was between 70-100% and over 20 MB.  Based on your log data,
               you will be able to figure out if when your FIFO hit 70%,
               did this happen correctly or not.
      You may have 50 different things that you want to monitor like this.

      Doing this advanced kind of complex system coverage was not feasible
      before Portable Stimulus was invented.  

      Perspec's advanced runtime coverage is the main difference between
      us verifying an entire complex SoC vs. us verifying just cores.

      Technically, yes, you could theoretically write a post script to
      monitor events and assemble all the data.  You could then look at
      various pieces together and figure out where your coverage holes
      are.  And theoretically, you could write a functional coverage group.
      But it will only work for so long.  And it all becomes very complex
      and unsustainable.

Breker TrekSoC

    Breker also has pre-runtime coverage, but it was a little bit more 
    simplistic in nature.  

    When I last looked at Breker a few years ago, they also had basic
    runtime coverage, too, but nothing like Perspec's advanced runtime
    coverage.

    This might have changed.  I'm not the guy to tell you about it.
    You'll need a Breker user to update you on their coverage, John.

        ----    ----    ----    ----    ----    ----   ----

H. ACCELERA PSS LANGUAGE SUPPORT PLANS

Accellera is working on its PSS standard, which is expected to be finalized 
in 2018.  Both Cadence and Breker have committed to supporting *both* PSS 
syntaxes: DSL and C++.

Once PSS is approved, it will have some built-in constructs for vendors to 
add new functionality.  It will then be up to each vendor to decide what 
they want to support directly...  or to put in hooks for the users to do
it for themselves.  (An example of this would be for memory management,
which isn't PSS, but that both Cadence and Breker already support.)

The PSS being approved will also (theoretically) let us use our generated
tests from one tool vendor in another vendor's environment.

        ----    ----    ----    ----    ----    ----   ----

For us, Cadence Perspec is the best portable stimulus tool for our complex
SoCs.  Compared to Breker, in Perspec it's easier / more flexible to model,
easier to specify test intent, it has better (and *integrated*) debug and
coverage -- plus more advanced coverage.  Also the Perspec GUI works.

We've been happy with Perspec.  It's saved us man-months per project.  Plus,
with Perspec we've had a flood of extra test cases that we wouldn't have had
otherwise, due to our limited staffing and time constraints.  

    - [ Ant-Man, the Movie ]

        ----    ----    ----    ----    ----    ----   ----

Related Articles

    Hands-on PSS user explains CDNS Perspec vs. Breker TrekSoC (pt 1)
    Hands-on PSS user explains CDNS Perspec vs. Breker TrekSoC (pt 2)
    Hands-on PSS user explains CDNS Perspec vs. Breker TrekSoC (pt 3)

    Cadence Perspec wins #1 in #1 "Best of 2017" with Portable Stimulus
    Breker TrekSoC takes #2 in #1 "Best of 2017" with Portable Stimulus
    Mentor InFact was pretty much an early No Show in the PSS tool wars

Join    Index    Next->Item






   
 Sign up for the DeepChip newsletter.
Email
 Read what EDA tool users really think.












Feedback About Wiretaps ESNUGs SIGN UP! Downloads Trip Reports Advertise

"Relax. This is a discussion. Anything said here is just one engineer's opinion. Email in your dissenting letter and it'll be published, too."
This Web Site Is Modified Every 2-3 Days
Copyright 1991-2025 John Cooley.  All Rights Reserved.
| Contact John Cooley | Webmaster | Legal | Feedback Form |

   !!!     "It's not a BUG,
  /o o\  /  it's a FEATURE!"
 (  >  )
  \ - / 
  _] [_     (jcooley 1991)