Coverage-Driven Functional Verification
Using Coverage to Speed Verification and Ensure Completeness


Verisity Design, Inc.
September 2001


Introduction


In an ASIC design house in the United States, a verification engineer wanted to measure the completeness of his verification test suite using functional coverage. The VHDL testbench and design were mature, and the test suite was comprised of assembly code tests which were manually written in three man year's of work. The engineer believed that most of the coverage was achieved, and expected to find only a few overlooked areas. The results from the functional coverage were astonishing. The engineer found that less than 20 percent of functional coverage was achieved, which means that a lot of expensive resources were wasted on repeated simulations that did not add value to the coverage.

After a couple of weeks of using a testbench automation tool to create additional tests and using functional coverage for feedback, the engineer had achieved one hundred percent of the defined functional coverage.

Functional coverage is defined as explicit functional requirements derived from the device and test plan specifications. Most verification engineers see the value of code coverage and functional coverage, however, most do not make substantial use of coverage for various reasons, mainly because of time pressure.

This document suggests a complementary approach of both functional and code coverage, starting from early stages in the verification process. Coverage is used as a goal and as a metric, by which the testbench and test suite will be measured throughout this verification process. The approach saves significant human and machine resources, shortens time-to-market and eventually contributes to a mature and timely tape-out decision and a high-quality product.

This paper discusses the need for objective metrics, studies the approaches used before functional coverage evolved and defines functional coverage and the complementary technology of code coverage. It then demonstrates the proposed approaches using Specman Elite's functional coverage engine and SureCov's code coverage capabilities. At last, it suggests a flow for maximizing testbench effectiveness.


Motivation


Advanced technologies such as design reuse and physical synthesis allow designers to create ever larger designs. As gate counts exceed one million, verification methodologies have failed to adjust, turning functional verification into the main bottleneck in the design process. Janick Bergeron wrote in his book "Writing testbenches' - "… the real problem is not how to create a 12 million gate IC that runs at 600MHz, but how to verify it".

The magnitude and complexity of recent designs introduce new challenges. Two such major challenges are how to reduce the time it takes to do verification to a reasonable size, and how to ensure complete verification.

Effective Simulation
As exhaustive tests are practically impossible, the verification engineer should spend his time carefully. In order to avoid unnecessary repetitions, the engineer needs to be able to answer questions like: Were all possible stimuli variations injected? Were all possible results achieved? Were all Device Under Test (DUT) states visited? Did all the internal transitions take place? Did all the interesting events occur? By answering such questions we can re-set our simulation goals and dramatically expedite the verification process.

Ensuring Completeness
The second challenge is to ensure completeness - how can we tell that verification is done? This decision is usually accompanied with tension and the emotional stress of trying to organize the abundant information gathered throughout the recent simulation sessions. Taping out an immature design can have an impact at both the personal and corporate levels. At the personal level, your job and professional reputation are at stake. It can be extremely embarrassing when a chip has to be re-spun due to a common use of the IC that was never verified. At the corporate level, small start-ups may literally collapse due to product quality, and even well established companies may find it hard to recover from the financial repercussions.

What about unnecessary delays in tape out? Tight schedules and narrow market windows characterize most of the industry today. Some companies quantify a one-day delay in the millions.

In order to exercise different aspects of the design, different inputs or tests need to be fed into the system. For most systems, creating these tests has become very challenging; it involves creating extremely sophisticated data, with parallel stimulus from various input streams, etc. To simplify test creation, automatic test generation was developed to substantially reduce the time it takes to create an effective test. This automated approach allows users to express high-level intentions, which allows the testbench automation tool to create various stimuli that manifest those intentions. By reviewing the input that was created, the user can then direct the generation towards areas that are yet to be exercised to ensure completeness.

Historically, a few coverage metrics have been used to evaluate the verification process, but all fail to address the aforementioned needs. A more suitable solution for these hard problems is functional coverage measurement. But let's first examine the historical coverage measurements and their limitations.


Current Coverage Approaches


Various metrics were developed and used to quantify the verification progress. Let's try to review some of them and see how effective they are in reducing the time it takes to do verification, and ensuring that verification is complete

Toggle Coverage
One of the oldest coverage measurements, toggle coverage, was historically used for manufacturing tests. Toggle coverage monitors the bits of logic that have toggled during simulation. If a bit doesn't toggle from 0 to 1, or from 1 to 0, it hasn't been adequately verified. Toggle coverage does not ensure completeness. It cannot assure that a specific bit toggle sequence that represents high-level functionality has occurred. Toggle coverage does not shorten the verification process. It may even prolong it as engineers trying to toggle a bit, which cannot toggle according to the specifications. Toggle coverage is also very low level and it may be cumbersome to relate a specific bit to a test plan item.

Code Coverage
The most popular coverage metric is code coverage. The basic assumption of code coverage is that unexercised code potentially bears bugs - the code is guilty until proven innocent. One needs to be adventurous to synthesize and tape-out un-exercised logic. That makes code coverage analysis a necessity, but does it solve the challenges mentioned above? No. It is often said that code coverage checks how well your RTL code was exercised, rather than how well your design functionality was exercised. Therefore, code coverage is a necessity, but not a complete metric. Code coverage should be employed as part of a more comprehensive coverage strategy (see section 'Functional Coverage and Code Coverage').

Other Approaches
In addition to the more technical approaches, some management-oriented techniques are being used to indicate the verification progress. Examples of such techniques include measuring the elapsed time between bugs found or between RTL changes. Not finding a bug in a week may indicate the design is clean, but it can also indicate test deficiencies. It is critical to distinguish between the two and this is where coverage tools start justifying their investment.

Some engineers would advocate stressing the simulator for a few extra cycles to ensure completeness instead of using coverage metrics. Employing more simulators, or using an emulator or an accelerator, for peace of mind could achieve this. Is that enough? While 5000x improvement over simulation speed looks very impressive, the clock is still slow compared to real clock speed. A more intelligent bug search is a better solution than this "brute force" method. The intelligent search has proven to have a faster coverage results on a per week basis and is significantly more effective in discovering the real hard-to-find bugs.

What about formal verification tools? They mathematically prove correctness, isn't that our ultimate goal? Who needs coverage or simulation when we have an exhaustive proof? Unfortunately, formal techniques suffer from capacity issues; even the most recent tools are struggling to verify single modules. Currently the design complexity is increasing at a rate faster than the improvement in formal techniques. Using such tools may be appropriate on a single module, but this does not solve the overall problem.

The approaches mentioned above prove to be in sufficient in fulfilling our needs. Most of them have very limited capabilities to indicate completeness, and almost no capabilities to shorten the verification process.

The following chapters describe a set of requirements and verification methodologies that meet our needs. Later on, a functional coverage tool fulfilling these requirements will be discussed.


Coverage Requirements


To exploit the benefits of functional coverage, a specific verification methodology combining functional and code coverage should be applied. A combined methodology will provide a complete overview of the verification progress and a clearer correlation between the functional coverage definitions and the actual design implementation.

First, let's examine the requirements for coverage. We can categorize the requirements into two groups: demands for the data gathering and analysis engine, and requirements for the surrounding testbench that will allow efficient usage of the accumulated information.

Coverage engine requirements

Expressiveness of Queries
Clearly, expressiveness to define any query is a major requirement. It should be easy to specify a query, and get the needed information. It should also be easy to filter out the relevant details. Specifically, a functional coverage tool should handle high-level queries such as: have I exercised all types of packets while handling an interrupt?

Informative Reports
Getting coverage results should be readable and intuitive. Both a Text User Interface (TUI) and a Graphic User Interface (GUI) should be provided. Usually, engineers use the GUI since it provides an easy means to review, query and print the coverage database. The TUI is useful when trying to forward the results to other automatic tools or manipulate the data into custom reports.

Beneficial Coverage Feedback
When coverage results are less than satisfying, it should be easy to deduce the appropriate adjustments and generate tests to improve the coverage results.

Testbase Ranking
The ability to accumulate and analyze coverage reports from multiple simulation runs is crucial. Test suites today comprise of large number of tests. This ability to analyze cumulative coverage allows you to:

  1. Get an overall picture of the entire verification environment, and measure your recent progress. Using these two measurements, you can objectively predict the tape-out date,
  2. Avoid test redundancy. By measuring the amount of coverage added by each test, redundant tests can be identified and removed.

Timing of Analysis
The coverage tool should allow the engineer to analyze the coverage information both between simulations and during a test run. The first approach requires the ability to save the collected information to be reviewed later on. The second approach requires a run-time interface to the coverage database that allows it to be used during simulation1.

Grading
Various coverage holes may be prioritized and the overall progress can be better represented by setting individual goals for each concern (how many times must I cover each scenario?), and by setting weights to distinguish the relative importance of different coverage scenarios.

Optimizing the testsuite
Ranking capabilities should allow you to create a subset of tests that verify the DUT to a significant degree, with a minimum amount of resources. Running this subset of tests instead of your entire test suite, drastically reduces the total number of cycles needed for verification.

Open Environment
Intellectual property reuse, and design complexity, have turned our verification environment into a mix of design representations and verification languages. Having the flexibility to use the same methodology on all types of designs is critical.

Methodology Requirements
In addition to coverage tool requirements, some verification environments allow extensive use of the collected data while others enable merely partial utilization of the coverage results. For a more comprehensive coverage environment, the methodology should allow:

Self Checking
A self-checking verification environment notifies you once a malfunction has occurred.

Test Generation Control
Being able to easily target coverage holes using test generation adds great efficiency to the use of coverage metrics.

Repeatability
It is important that as the design and the testbench evolve, that the current test suite with the current design still covers all of the functional coverage specified. Test generation engines that have "random stability" minimize the disruption of small changes to the functional coverage.

The following chapter defines functional coverage and differentiates it from code coverage.


Functional Coverage and Code Coverage


The discussions above have paved the road for this chapter, which defines functional coverage and code coverage, and the differences between the two.

Code Coverage
As mentioned above, code coverage reflects how thorough the HDL code was exercised. A code coverage tool traces the code execution, usually by instrumenting or modifying the HDL code.

The set of features provided by code coverage tools usually includes line/block coverage, arc coverage for state machines, expression coverage, event coverage and toggle coverage. More recent code coverage tools also include capabilities that automatically extract finite state machines from the design and simplify the task of ensuring complete states and arc coverage (see 'SureCov's Code Coverage' section).

Code coverage is a necessity. Most people would agree it is unacceptable to synthesize code that is either dead or unverified. Nevertheless, code coverage is not enough. Most functional coverage requirements cannot be mapped into lines of code. For example, code coverage cannot indicate whether we've been through all the legal combination of states in two orthogonal state machines. Another example might be whether we have tried all the possible inputs while the DUT was in all the different internal states. Also, code coverage does not look at sequences of events, such as what else happened before, during, or after I executed this line of code. Thus, code coverage does not ensure completeness and does not fulfill most of the requirements that allow expediting the verification task.

In general, three inherent limitations of code coverage tools are: overlooking non-implemented features, the inability to measure the interaction between multiple modules and the ability to measure simultaneous events or sequences of events (see 'Functional Coverage' section).

Functional Coverage
Functional coverage perceives the design from a user's or a system point of view. Have you covered all of your typical scenarios? Error cases? Corner cases? Protocols? Functional coverage also allows relationships, "OK, I've covered every state in my state machine, but did I ever have an interrupt at the same time? When the input buffer was full, did I have all types of packets injected? Did I ever inject two erroneous packets in a row?"

The bulk of low-level details may be hidden from the report reviewer. Functional coverage elevates the discussion to specific transactions or bursts without overwhelming the verification engineer with bit vectors and signal names.

This level of abstraction enables natural translation from coverage results to test plan items. Specman Elite's functional coverage engine is an example of a powerful functional coverage tool (see 'Specman Elite Functional Coverage' section).

As functional and code coverage are complementary in nature, a tool or methodology which combines both approaches is extremely beneficial. As mentioned earlier, this combined methodology will provide a complete overview of the verification progress and a clearer correlation between the functional coverage definitions and the actual design implementation. In the following sections, we introduce two specific implementations of code coverage and functional coverage tools: SureCov's code coverage and Specman Elite's functional coverage.


SureCov's Code Coverage


Verisity's SureCov gives you fast, and complete code coverage. To allow an efficient analysis of all the information collected by the tool, SureCov has an extensive graphical user interface (GUI). Here are some of its main features:


Figure A -- SureCov's Gui


Figure B -- Bubble Diagram for FSM

No changes to Source
SureCov automatically extracts FSMs from Verilog code without requiring any code modifications.

Automatic FSM Analysis
By automatically recognizing common Finite State Machine types from the Verilog RTL design description, SureCov eliminates the manual pre-processing required in some tools. The Verilog HDL can be visualized as a bubble diagram without any user intervention. SureCov paints the states and transition arcs in colors indicating verified, unverified, and partially verified. The user can define paths through FSMs and query the SureCov database to check coverage for the FSM paths. In addition, the FSM analysis capability allows you to find unreachable state machines and is complemented by an easy to use filtering mechanism (see figure B).

Intuitive Block, Arc & Toggle Coverage
An intuitive display of a text-oriented design is often in the original code. SureCov displays block, arc, and toggle coverage highlighted right in your code. SureCov colors the lines entirely verified green, and those unverified in red. Code that has been executed, but not from all possible combinations, is yellow.

Unique Expression Coverage
In multi-term expressions, SureCov allows you to determine which terms contribute to a true value for the expression's 'On Terms', and which terms contribute to a false value for the expression's 'Off Terms'. A minimized sum of products, and product of sum analysis, is provided for each expression. SureCov displays expression and event coverage right in the code, or by clicking on the source it takes you to the expression detail of the terms.

Regression Analysis Utilities
SureCov has many utilities for test analysis and optimization. This includes a coverage API that enables reactive test generation.

Low Simulation Overhead
SureCov has a very low simulation overhead. By analyzing the source code without burdening the simulator, typical overhead is 4x less than most other code coverage tools.


Specman Elite's Functional Coverage


The coverage engine in Specman Elite collects functional coverage information based on user input that is easily driven from the test plan, and then produces various reports. In addition, the tool's methodology and advanced capabilities provide an optimal framework to define and use coverage results, including a built-in test generator and data and temporal checking.

Example
Using Verisity's verification language, e, one can easily capture both the topology and input specification.

type PacketType :[ EVII, E802_3, ESNAP ];
type PacketCorrectness: [good, crc_error, size_error];

// packet definition
struct packet {
  // service fields
kind :PacketType;
size :uint;
keep soft size in [64..1518];
delay :uint[1..10];
start_time :uint;
correctness :PacketCorrectness;

// physical fields
%header :packet_header;
%payload[size] :list of byte;
%crc :uint;
event ready; // emitted when generated
event done; // emitted when depart the switch
};
struct packet_header {
... // header fields
};

Figure A - Illustrates an Ethernet Packet Definition

Notice that in addition to the fields that hold the actual contents of the packet (header, payload and crc), several virtual fields (e.g., kind, size, delay, etc.) were added to facilitate the generation, coverage and checking of the packet. The packet description above is all you need to specify to have Specman Elite generate any number of Ethernet packets.

extend packet { // extend packet's basic definition(2)
  cover ready is { // coverage group
    item kind; // coverage item
item delay;
item correctness;
item dut_state: uint(bits:2) = 'top.dut.state';
item size using ranges = {
      range([64..500], "small");
range([501..1000], "medium");
range([1001..1518], "large");
    };  
  };
cover done is {
    item latency :uint = sys.time - start_time
using ranges = {
      range([0..4], "short");
range([5..9], "medium");
range([10..14], "long");
    };  
  };    
};

Figure C - shows the definition of functional coverage for the packet.


Figure D -- Coverage Report Example

The coverage is collected in groups. Each coverage group has a trigger event which specifies when to sample, and includes a list of items that specifies what to sample. During the simulation, the coverage information is accumulated. Figure D demonstrates a coverage report collected from the code example above.

In this snapshot, we see the values sampled for the kind field, indicating the kind of packets generated by Specman Elite.

Another major kind of query is transition coverage. Have we ever had a CRC error right after size error and vice versa?


Figure E -- Transaction Coverage

extend packet {

  cover ready is also {
    transition correctness;
  };  
};    

A simple addition as illustrated in figure E can be layered on top of the existing environment. The results are illustrated as well.

The report indicates (note the grade of 0) that we have never tried an erroneous size packet after a good one, nor consecutive CRC errors and size errors.


Figure F -- Cross Coverage

extend packet {

  cover ready is also {
    cross kind,
correctness;
  };  
};    

Yet another important query kind is a combinational query. Although we have full coverage of packet kinds as well as a full coverage of error kinds, have we covered all the combinations of the two?

The report suggests that we have never sent as an input E802.3 packet that is a good packet, or the same packet kind with erroneous size.

How about covering time related information, e.g., scenarios over time? This is facilitated by Specman Elite's temporal language. For example, have I exercised all possible packet types while handling an interrupt? What was the DUT status at the time of the interrupt?

extend packet {
  event intr_during_exec is
    {@send; [..] * not @done; @interrupt} @clk;
  cover intr_during_exec is {
    item kind;
item correctness;
item dut_fifo_size: uint = 'top.my_switch.fifo.size';
item intr_kind;
      cross kind, intr_kind;
  };  
};

The event intr_during_exec is capturing a simple scenario, consisting of three stages: the testbench started sending a packet (@send event), a few clock cycles have passed but the packet was still ongoing([..] * not @done), and then an interrupt occurred (@interrupt).

Once this scenario occurs, we will capture all the interesting information as coverage items. Figure G demonstrates the cross-coverage report of packet kind and interrupt kind.

Figure G -- The figure illustrates several coverage holes, for example we never had an external interrupt during an EVII packet processing.

Coverage Requirements Review
So how does Specman Elite's functional coverage fulfill the requirements we have listed earlier?

Expressiveness of Queries
The coverage directives syntax has evolved through the years to express the most complicated queries, and at the same time be user friendly and intuitive. Effective coverage of the inputs may take just a few minutes to create. In addition, Specman Elite's access to 100% of the HDL signals allows functional coverage of events and signals in the design itself. The tight collaboration of Specman Elite's engines provides unique expressiveness. Temporal expressions allow capturing complicated simulation scenarios, which spans more than one cycle, and using them as a trigger for coverage sampling. For example, how can I define a query that ensures that an interrupt was received while processing each and every packet kind? Defining an event that captures an interrupt-during-packet scenario, and using it as a trigger for a coverage group sampling will achieve that, as well as multi-cycle scenarios.

Specman Elite's GUI allows easy querying, sorting and filtering. The coverage reports show a total test grade, a coverage group's grade, an items grade and a range grade. The grade functions are automatic, but highly configurable by modifying the coverage goals or items' weights. Graphic reports using bar charts make the report readable both to the novice engineer and management, which is interested in the overall picture rather than low-level details.

Beneficial Coverage Feedback
The translation from coverage reports to generation directives (constraints) to the test generator in Specman Elite, is usually straightforward3. Such simple translation is obtained by the fact that the coverage reports refer to the same fields that specify the data structures to be generated. For example, the delay, size and kind items are struct-members of packet. Identifying a hole in the coverage results can be naturally translated into additional constraints on those fields.

Grading
Specman Elite's grading mechanism is easy to use and at the same time highly configurable. Coverage goals and weight default can be reset to adjust to any need. A few suggested formulas to grade a test are suggested. The formula definition is also configurable. User perception of coverage, and the specific needs of the verification environment, may incline you toward a specific formula.

Testbase Ranking
Advanced test ranking capabilities allow effective highly configurable test base analysis. You can easily combine additional tests, classify tests families, and review various aspects of your test suite.

Timing of Analysis
Specman Elite's GUI allows post-simulation coverage review. In addition, the Coverage Application Programming Interface (API) allows run-time access to the accumulated coverage from this test as well as from previous executions.

Optimizing the testsuite
Specman Elite allows you to create an optimal list of tests on the basis of efficiency (amount of coverage per cost) or just grade (amount of coverage).

Open Environment
Specman Elite is an open environment. Coverage groups can be comprised of information from various tools and languages that make up the verification environment. A verification environment could be comprised of Verilog and VHDL modules, C++ reference module and a verification language such as e. Specman Elite is able to treat such heterogeneous environments as one, allowing sampling and analyzing information from all these sources all together.

Methodology Requirements
Tight integration between Specman Elite's engines allows further utilization of each engine's capabilities.

Self Checking
In addition to data checking4, Specman Elite allows temporal checking or protocol checking. In specific it allows:

  • Natural translation from the design specification to assertions, which will be validated throughout simulation.
  • Immediate simulation stop. When a temporal rule is violated, the simulation stops immediately and the message associated with that rule is printed. This preserves the design's state for further inspection.
  • Informative error messages that make it easy to understand the cause of the buggy scenario.

Generation Control
Test generation is one of the most important parts of simulation as it is the only way to improve coverage results. Specman Elite's unique language expressiveness and constraint solver allow powerful test generation to automate the process of generating tests for your entire test plan.

Repeatability
Specman Elite addresses the repeatability issue by introducing the concept of "random stability". This feature ensures tests will maintain the same pseudo-random values over multiple runs for a given seed, even if some modifications are done to the test, the testbench or thread ordering. This is a built-in capability, that requires no special action or attention from the user. This ensures that functional coverage will not be "lost" from a test suite due to changes in the design or in the testbench.


Recommended Approach to Coverage


The following is a suggested flow that incorporates both code coverage and functional coverage.

Phase One: Test Plan
A good test plan should list all the interesting test cases to verify the design. In specific it should include all configuration attributes, all variations of every data item, interesting sequences for every DUT input port, all corner cases to be tested, all error conditions to be created and all erroneous inputs to be injected.

An encompassing test plan is a good start to ensure complete verification. Experience and creativity can be used to identify areas that are prone to bugs. It is advisable to consult people with extensive verification background and the designer to get internal insights into the design.

Phase Two: Functional Coverage Specification
Define what should be covered. Decide on the interesting data fields/registers. Define separate buckets for legal values, illegal values, and boundary values, i.e. corner cases. Examine both interfaces and internal states. Choose the state registers and state transitions of important state machines. Identify interesting interactions between some of the above states or data, e.g., the state of one state machine relative to another, or to a value of a signal.

Phase Three: Build the Testbench
Build your environment parameterized in a way that each test can direct it to a specific area of concern. This enables you to use the coverage results and translate coverage holes into new tests. At this point your e functional coverage code should be written. Make sure that the verification strategy you have chosen is suitable for the entire verification needs.

Phase Four: Writing Tests and Simulation
Write tests and run them. Try to enhance your test suite by using the iterative process of analyzing coverage reports and adding additional tests to fill the uncovered areas. From time to time, update and optimize your regression suite using the ranking capabilities. There is no need to frequently run tests that have only marginal contribution to the verification process.

Phase Five: Code Coverage Integration
Once your RTL code is mature enough, use code coverage. Start with block coverage. Unreachable code should be carefully analyzed; it may save time to ask the implementer to identify the code's functionality. Dead code should be removed. In cases of reachable non-exercised logic, identify the untested scenario and write tests or constrain the test generator to fill coverage holes. At the same time identify the untested functionality. Once identified, review your test plan and make sure it is not an overlooked area in the test plan. Update the test plan and functional coverage code as necessary.

Phase Six: Thorough Coverage
At this point you have hopefully achieved one hundred percent block coverage. Use other coverage metrics (expression, event, state machine, arc and toggle coverage) to achieve as high coverage as possible within your allotted time.

Following these guidelines provides a more complete metric and methodology that can be examined through the various phases, while steering the verification process towards a rapid completion.


Conclusion


Coverage review was extremely beneficial for the engineer in the introduction chapter to ensure a complete verification. The downside of this case study is the waste of man years and many machine cycles that preceded the coverage review. Incorporating functional coverage and code coverage earlier in the verification process will ensure completeness, as well as dramatically save resources.

Consistent coverage review makes the verification process well proportionate and more predictable. Engineers can reset their simulation goals and management can monitor the verification progress to avoid last minute surprises and identification of more bugs. Future technologies may further automate the verification process by intelligently enhancing the testsuite based on coverage results.

Functional coverage and code coverage are the only objective measurements available today. Verisity's SureCov code coverage tool and Specman Elite's functional coverage engine are pioneers in this recent evolving technology.


1 Extra care should be taken when making use of the run-time feedback capabilities. An appropriate mixed measure of repetition and uniqueness prove to be more efficient in discovering bugs. Mostly, analyzing accumulated results of few simulations and intelligently determining the next step preserves realistic simulation, as well as ensures completenses.

2 The extend feature in e allows the engineer to expand a single type definition in several files. It is commonly used in verification environments due to the partitioning into basic testbench architecture and tests layered on top of it. This layered approach provides flexibility and enhances the verification reuse. Any tests can enhance the type definition to address different aspects of the design.

3 Some of the corner cases, especially Dut state coverage, are harder to archieve. The DUT complexity may involve complicated inspection of the design behavior. It may be easier to raise the probability that a state will be visited rather than providing a deterministic input scenario using a testbench automation tool.

4 data checking is based on comparing the output with the input. Data checking is usually done using scoreboarding technique or reference models (see Verification Advisor).


Bibliography

1. Bergeron, Janick. "Writing Testbenches, Fuctional Verification of HDL Models." Kluwer Academic Publishers, 2000.

2. Geist, D.; Brian, G.; Arons, T.; Slavkin, M.; Nustov, Y.; Farkas, M.; Holtz, K.; Long, A.; King, D.; Barret., S. "A Methodology for the Verification of a eSystem on Chip," Design Automation Conference, New Orleans, LA, June 1999.

3. Hanoch, C. "High-Level Verification Automation: A New Mehodology for Functional Verification of Systems/ASICs". DesignCon, Santa Clara, CA February 1998.

4. "Spec-Based Verification," http://www.verisity.com/resources/whitepaper/specbase.html

5. "Functional Verification Automation for IP, Bridging the Gap Between IP Developers and IP Integrators," http://oahu.verisity.com/resources/whitepaper/ipwhitepaper.html

 

Verisity Design, Inc.  •  2041 Landings Drive  •  Mountain View, CA  94043  •  phone: (650) 934-6800  •  Fax: (650) 934-6801  •  www.verisity.com/

Specman Elite,  SureCov, Verisity, and the Verisity logo are trademarks of Verisity Design, Inc. All other trademarks are the exclusive property of their respective holders. ©2001 Verisity Design, Inc.

© Copyright 2005 Verisity Design, Inc. All rights reserved. Privacy Policy.