Covered Report Viewer User Manual - Combinational Logic Window

< Prev Table of Contents Next >

# Navigating the Combinational Logic Window

The Verbose Combinational Logic viewer allows the user to look at the subexpressions of a selected statement to determine exactly why a statement did not achieve 100% coverage. The window is split up into two text frames. The top frame displays the selected statement, underlining and numbering subexpressions that were found to not achieve full coverage. The bottom frame displays which combinations of a selected subexpression were hit/missed, allowing the user to discern which combinations of logic are still in need of verification.

## Navigating a Statement

To understand what subexpressions of a statement caused it to not achieve 100% coverage, the viewer window allows the user to traverse uncovered subexpressions, displaying the coverage information for each subexpression in the lower frame. To see an uncovered subexpression in the lower frame, simply left click on the underlined subexpression. If the subexpression has one or more children subexpressions, these will be individually underlined and numbered. If the subexpression is a leaf subexpression of the statement, only its coverage information will be displayed in the lower pane. To traverse upward in a subexpression, simply click on the right button. This will cause the parent subexpression to be underlined and its parent (if one exists) will have its coverage information displayed in the lower frame.

## Understanding the Coverage Information

The coverage information for a selected subexpression can be one of four different types:

1. Event Subexpression

   These subexpressions do not have any children expressions. Their coverage is in terms of:

   - Did this event occur?

   The following operators are considered events:

   - At-event operators:
     @(posedge expression )
     @(negedge expression )
     @( expression )
     @*
   - Event trigger operator:
     -> event_variable

   Figure 1. Example Coverage Output for an Uncovered Event Subexpression

   In this diagram, we see that a certain @(posedge clock) expression never occured.

2. Unary Subexpression

   These subexpressions do not have any children expressions. Their coverage is in terms of:

   - Did this expression evaluate to a value of 0?
   - Did this expression evaluate to a non-zero value?

   The following operators are considered unary subexpressions:

   - Signal/Bit Selectors:
     signal_value
     signal_value [ expression ]
     signal_value [ value : value ]
     signal_value [ expression +: value ]
     signal_value [ expression -: value ]
   - Function call:
     function_name ( ... )
   - Mathematical operators:
     expression * expression
     expression / expression
     expression % expression
     expression ** expression
     - expression
   - Relational operators:
     ! expression
     expression < expression
     expression > expression
     expression <= expression
     expression >= expression
     expression == expression
     expression != expression
     expression === expression
     expression !== expression
   - Shift operators:
     expression << value
     expression >> value
     expression <<< value
     expression >>> value
   - Conditional operator:
     expression ? expression : expression
   - Unary operators:
     ~ expression
     & expression
     | expression
     ^ expression
     ~& expression
     ~| expression
     ~^ expression
   - Concatenation operators:
     { value { expression } }
     { expression , expression , ... }
   - Case equality

   Figure 2. Example Coverage Output for an Uncovered Unary Subexpression

3. Simple Combinational Subexpression

   These subexpressions have two child expressions (L=left and R=right). There are three flavors of simple combinational subexpressions: AND-type, OR-type and other. The differences are explained below.

   - Simple AND-type Combinational Subexpressions

     These subexpressions have three possible combinational outcomes:

     - Did the left expression evaluate to 0?
     - Did the right expression evaluate to 0?
     - Did the left expression evaluate to 1 when the right expression evaluated to 1?

     The following operators are considered simple AND-like combinational subexpressions:

     - Logical operators:
       expression & expression
       expression ~& expression
       expression && expression

     Figure 3. Example Coverage Output for an Uncovered Simple AND-type Combinational Subexpression

   - Simple OR-type Combinational Subexpressions

     These subexpressions have three possible combinational outcomes:

     - Did the left expression evaluate to 1?
     - Did the right expression evaluate to 1?
     - Did the left expression evaluate to 0 when the right expression evaluated to 0?

     The following operators are considered simple OR-like combinational subexpressions:

     - Logical operators:
       expression | expression
       expression ~| expression
       expression || expression

     Figure 4. Example Coverage Output for an Uncovered Simple OR-type Combinational Subexpression

   - Simple Other-type Combinational Subexpressions

     These subexpressions have three possible combinational outcomes:

     - Did the left expression evaluate to 0 when the right expression evaluated to 0?
     - Did the left expression evaluate to 0 when the right expression evaluated to 1?
     - Did the left expression evaluate to 1 when the right expression evaluated to 0?
     - Did the left expression evaluate to 1 when the right expression evaluated to 1?

     The following operators are considered simple combinational subexpressions:

     - Mathematical operators:
       expression + expression
       expression - expression
     - Logical operators:
       expression ^ expression
       expression ~^ expression

     Figure 5. Example Coverage Output for an Uncovered Simple Combinational Subexpression

4. Complex Combinational Subexpression

   These subexpression have three or more child expressions that all are connected by the same operator. For example, the statement a = (b & c & d) would contain the complex combinational subexpression of (b & c & d) where b, c and d are the three child expressions all combined using the bitwise AND operator.

   The effect of each subexpression on the value of the entire subexpression as well as the combination of each child toward the parent is displayed. For example, if the combinational operator is a bitwise OR, each child is checked to see if it evaluated to TRUE (in an OR operation, only one subexpression needs to evaluate to TRUE for the entire subexpression to be TRUE). Additionally, all child subexpressions are checked to see if all evaluated to 0 simultaneously (this is the only way to get the whole subexpression to evaluate to 0).

   The unique identifier below each subexpression is used in the displayed coverage information for these types of subexpressions for identifying which subexpression did not behave correctly.

   All simple combinational subexpressions can be output as complex combinational subexpressions if there are three or more child subexpressions to the operation.

   Figure 6. Example Coverage Output for an Uncovered Complex Combinational Subexpression

   In this example, subexpression 1 never evaluated to a value of TRUE (which would have made the entire expression TRUE) and all three subexpressions 1, 2, and 3 were never a value of 0 simultaneously (which would have made the entire expression FALSE). However, subexpressions 2 and 3 both evaluated to TRUE at some point.

## Displaying a New Statement

If the Verbose Combinational Logic Coverage window is currently displayed with a statement, the user may select a new statement in the Coverage File Viewer of the Main window. When a new statement is selected, its value immediately replaces the currently selected statement. This feature allows many different statements to be viewed one after the other without having to create/destroy a new window for each.

The user may also see the previous or next uncovered statement in the main viewer by clicking either the "<--" button (for previous signal viewing) or the "-->" button (for next signal viewing). Note that the "<--" button will be disabled if there is not a signal previous to the current signal in the given module and the "--> button will be disabled if there is not a signal after the current signal in the given module.

## Close Button

Clicking the Close button will cause the Combinational Logic Viewer window to close and the current selection identifier to be removed from the Coverage Viewer in the main window.

## Help Button

Clicking the Help button will cause this help page to be displayed in a web brower.