Truss: Standard Verification Framework Library

New! You can now access the chapters detailing teal and truss from our published books. Our C++ documentation can be found here, and our SystemVerilog documentation here .

Truss is an open-source verification framework implementation available from the downloads section. It was first implemented in C++ but with a systemVerilog version just released. Truss and Teal are different from other current proprietary verification methodologies in that they takes an ends-in approach instead of a bottoms-up approach. The result is a lighter weight, more flexible and efficient verification structure. An ends-in approach starts with defining what you know, both at the very detailed and more abstract level. Truss' companion library teal provides functionality at the low level while truss focuses on the top level.

Overview

Truss deals with the high level so how to start-up, run and check the result of a simulation. The truss source code is an implementation of a methodology described in our verification book and as such defines the major types of verification building blocks that exists in a verification environment as well as the steps (or phases) each block has.

A lot of effort was spent on defining these building blocks and phases to make them easy to understand, flexible to use and create efficient verification. Remember that all the source code is freely available should it be necessary to add or remove building blocks or steps for your project. In our mind and experience most projects do not have to do any modifications even if some projects don't have a need for all the steps in the dance.

Truss can be seen divided into to major parts that are important to understand. The first are the major verification building blocks it defines and the second is the dance, steps or phases each component has. Both parts are important to understand.

The major building blocks of truss

In truss the following major types of verification building blocks exists:

  • Verification Top - This is the main program blocks, it is responsible for the dance(described below) and calls the dance steps (or phases) of all other building blocks. It is provided as part of truss and should for most users need no change.
  • The Test component - To better support simultaneous testing of different chip interfaces, tests has been divided into two parallel parts:
    • Test Component - This is your traditional test, it is provided all necessary resources from the testbench (see below) and sets-up stimuli, expectations and might checks results. A test will reach a known simulation end-point once the test is done
    • Irritator - Irritator's are similar to a test, but are run in parallel with the main test to create more traffic and irritate the chip. The concept of irritators are described in detail in our book.
  • Watchdog timer - The watchdog is responsible for detecting tests that have run for to long and tell the verification top to shut-down hung simulations cleanly. A sample watchdog is provided with truss
  • Testbench - The testbench is where all other necessary components like bus functional models, generators and checkers reside.

More details about each building block are described in chapter 6 of our book. Springer, our publisher, has been kind enough to provide the complete chapter in PDF format on their site as marketing. Please consider buying our book to support this site.

The dance

The components described above all interact in what we call the dance. The verification top component is responsible for the dance steps. The dance control how each the simulation is created, randomized (or constrained), brought out of reset, configured, tested and result checked at the end. Each of these steps above need to be completed for each major component before the next step can be started. If component are developed in this way it will be possible to re-use components from one testbench to another and from chip to chip. A lot of effort went into defining enough dance steps in the flow. The dance is also repeated, almost identically for lower level components, like tests or checkers.

A lot more details of the dance and the background thinking are provided in chapter 6 of our book. Springer, our publisher has kindly made the complete chapter 6 available in PDF format on their site. Please consider buying our book to support this site.

Summary

Truss is a verification framework that coordinates how the top level dance of s simulation is executed. It does this by defining a set of building blocks and dance steps as concrete classes your test environment should inherit (build) from. In this way a common structure for tests, generators, checkers and all other verification components can be defined. This leads to more productive work, easier debug and increases the possibility of reuse. A lot of effort went in to making truss as easy to understand and use as possible. A lot more details on the thinking behind truss can be found in our book. The source code and examples can be downloaded from here. Questions, feedback, bug reporting and support inquiry's are best reported here.

Back to top