Professional Documents
Culture Documents
This document contains information that is proprietary to Mentor Graphics Corporation. The original recipient of this
document may duplicate this document in whole or in part for internal business purposes only, provided that this entire
notice appears in all copies. In duplicating any part of this document, the recipient agrees to make every reasonable
effort to prevent the unauthorized use and distribution of the proprietary information.
This document is for information and instruction purposes. Mentor Graphics reserves the right to make
changes in specifications and other information contained in this publication without prior notice, and the
reader should, in all cases, consult Mentor Graphics to determine whether any changes have been
made.
The terms and conditions governing the sale and licensing of Mentor Graphics products are set forth in
written agreements between Mentor Graphics and its customers. No representation or other affirmation
of fact contained in this publication shall be deemed to be a warranty or give rise to any liability of Mentor
Graphics whatsoever.
MENTOR GRAPHICS MAKES NO WARRANTY OF ANY KIND WITH REGARD TO THIS MATERIAL
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE.
MENTOR GRAPHICS SHALL NOT BE LIABLE FOR ANY INCIDENTAL, INDIRECT, SPECIAL, OR
CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING BUT NOT LIMITED TO LOST PROFITS)
ARISING OUT OF OR RELATED TO THIS PUBLICATION OR THE INFORMATION CONTAINED IN IT,
EVEN IF MENTOR GRAPHICS CORPORATION HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
U.S. Government Restricted Rights. The SOFTWARE and documentation have been developed entirely
at private expense and are commercial computer software provided with restricted rights. Use,
duplication or disclosure by the U.S. Government or a U.S. Government subcontractor is subject to the
restrictions set forth in the license agreement provided with the software pursuant to DFARS 227.7202-
3(a) or as set forth in subparagraph (c)(1) and (2) of the Commercial Computer Software - Restricted
Rights clause at FAR 52.227-19, as applicable.
Contractor/manufacturer is:
Mentor Graphics Corporation
8005 S.W. Boeckman Road, Wilsonville, Oregon 97070-7777.
Telephone: 503.685.7000
Toll-Free Telephone: 800.592.2210
Website: www.mentor.com
SupportNet: www.mentor.com/supportnet
Send Feedback on Documentation: www.mentor.com/supportnet/documentation/reply_form.cfm
TRADEMARKS: The trademarks, logos and service marks ("Marks") used herein are the property of
Mentor Graphics Corporation or other third parties. No one is permitted to use these Marks without the
prior written consent of Mentor Graphics or the respective third-party owner. The use herein of a third-
party Mark is not an attempt to indicate Mentor Graphics as a source of a product, but is intended to
indicate a product from, or associated with, a particular third party. A current list of Mentor Graphics’
trademarks may be viewed at: www.mentor.com/terms_conditions/trademarks.cfm.
Table of Contents
Chapter 1
Overview and Key Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Manual Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
What is EDT?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Understanding EDT Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Solving the Cost of Test Problem with EDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
What is the TestKompress Tool?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Overview of the TestKompress Tool Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Comparing EDT and Traditional ATPG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Clocking Scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Memories and Non-scan Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
ASCII and Binary Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Comparing EDT and ATPG Test Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Test Quality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Design Impact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Understanding EDT Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Checking the Logic with EDT-specific DRC Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
How Large is the EDT Logic? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Internal Control of EDT Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Controlling EDT Compression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Setting Up a TestKompress Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
User Interface Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Running Batch Mode Using Dofiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Generating a Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Running UNIX Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Conserving Disk Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Interrupting the Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Exiting the Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Chapter 2
Understanding the TestKompress Tool Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Top-Down Design Flow with EDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Design Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Pin Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
I/O Pads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
The EDT Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
External IP Location Flow (External Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Internal IP Location Flow (Internal Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Chapter 3
Scan Chain Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Preparing the Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
External EDT Logic Location Flow (External Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Internal EDT Logic Location Flow (Internal Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Inserting Scan Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Including Uncompressed Scan Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Determining How Many Scan Chains to Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Using One Scan Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Avoiding Sharing Scan Chain Pins with Functional Pins. . . . . . . . . . . . . . . . . . . . . . . . . . 51
Reordering Scan Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Examining a DFTAdvisor Dofile Used for EDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Establishing a Compression Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Running FastScan ATPG (Optional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Simulating the FastScan Test Patterns (Optional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Chapter 4
Creating the EDT Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Understanding TestKompress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Invoking TestKompress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Preparing for EDT Logic Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Setting Up TestKompress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Setting Parameters for the EDT Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Running DRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
DRC when EDT Pins are Shared with Functional Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Creating the RTL Description of the EDT Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Understanding Generated EDT Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Top-level Wrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
EDT Circuitry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Core. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Design Compiler Synthesis Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
EDT Pattern Generation Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Bypass Mode Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Estimating Test Coverage and Scan Data Volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Chapter 5
Synthesizing the EDT Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Preparing for Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
External IP Location Flow (External Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Internal IP Location Flow (Internal Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Synthesizing a Netlist with the EDT Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Chapter 6
Pattern Generation and Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Preparing for Pattern Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Using the Automatically Generated EDT Dofile and Procedure File. . . . . . . . . . . . . . . . . 103
Verifying the IP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Chapter 7
Special Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Bypassing EDT Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Structure of the Bypass Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Applying Identical Patterns in EDT and Bypass Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Using EDT Bypass Patterns in FastScan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
EDT Bypass Pattern Flow Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Creating Bypass Patterns with FastScan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
EDT and Boundary Scan (External Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Flow overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Boundary Scan Coexisting with EDT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Driving EDT Signals with the TAP Controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Using Pipeline Stages in the EDT Compactor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Using Pipeline Stages Between Pads and Channel Inputs or Outputs. . . . . . . . . . . . . . . . . . 129
Channel Output Pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Channel Input Pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Clocking of Pipeline Stages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Initializing the Input Channel Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
DRC for Channel Input Pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
DRC for Channel Output Pipelining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Understanding How Lockup Cells are Inserted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Lockups Between Decompressor and Scan Chain Inputs. . . . . . . . . . . . . . . . . . . . . . . . . . 135
Lockups Between Scan Chain Outputs and Compactor . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Lockups in the Bypass Circuitry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Evaluating Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Establishing a Point of Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Measuring Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Improving Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Masking Scan Chain Output Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Why Masking is Needed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Resolving X Blocking with Scan Chain Masking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Fault Aliasing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Reordering Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Chapter 8
Modular TestKompress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Modular TestKompress Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Chapter 9
Pre-Synthesis EDT Logic Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Performing a Pre-Synthesis Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Skeleton Design Input and Interface Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Skeleton Design Input File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Skeleton Design Interface File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
create_skeleton_design Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Creating EDT Logic Using a Skeleton Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
How the Tool Uses the -Longest_Chain_Range Numbers . . . . . . . . . . . . . . . . . . . . . . . . . 199
Integrating the EDT Logic into the Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Knowing When to Regenerate the EDT Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Input File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Appendix A
Getting Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Online Command Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Mentor Graphics Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Examples and Solutions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Appendix B
IP Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Appendix C
Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Debugging Simulation Mismatches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Resolving DRC Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
The EDT ™ Process Guide is part of the EDT-specific documentation in the design-for-test
(DFT) document set. EDT-specific documentation also includes the TestKompress® chapter of
the Design-for-Test Release Notes, the TestKompress command reference pages from the
ATPG and Failure Diagnosis Tools Reference Manual, and the EDT-specific design rules
checking (DRC) described in the “EDT Rules” section of the Design-for-Test Common
Resources Manual.
Manual Organization
This manual is divided into the following chapters:
• Chapter 1, beginning with “What is EDT?” on page 12, discusses the basic concepts
behind the Mentor Graphics EDT technology and the TestKompress product, establishes
the framework in which TestKompress is used, and briefly describes some strategies of
its use. The chapter concludes with a “User Interface Overview”.
• Chapter 2 gives conceptual information necessary for you to utilize TestKompress in an
existing FastScan™ flow, and to make optimal strategy decisions regarding EDT.
• Chapter 3 describes how to prepare a design for EDT and how to perform scan chain
insertion as part of the EDT flow.
• Chapter 4 discusses how to use TestKompress to create EDT logic.
• Chapter 5 discusses the EDT-specific aspects of synthesizing a design that includes
EDT.
• Chapter 6 discusses how to use TestKompress to generate patterns for a design with
EDT.
• Chapter 7 covers additional topics to increase your understanding of TestKompress and
the EDT technology.
• Chapter 8 describes how to use TestKompress for ATPG on designs comprised of
separate interconnected blocks or modules of logic.
• Chapter 9 describes how to create EDT logic before the core is synthesized.
• Appendix A describes available help resources.
• Appendix B provides a detailed specification of the EDT logic, showing its major
components and how they are interconnected.
• Appendix C provides troubleshooting information for simulation mismatch debugging,
DRC issues, and miscellaneous problems.
What is EDT?
Consistent with Moore’s law, design sizes are increasing very rapidly. For design-for-test
(DFT), particularly scan and ATPG, this means the volume of scan test data and test time are
likely to continue growing exponentially. Test costs, which depend on the volume of test data
and test time, will therefore continue to represent a major and rapidly increasing percentage of
an integrated circuit’s manufacturing costs.
EDT™ (Embedded Deterministic Test) is the Mentor Graphics technology that offers a new
non-intrusive DFT methodology for reducing test data volume and test time dramatically. EDT
accomplishes this reduction by applying a new type of compression during deterministic test
vector generation (ATPG), and providing hardware that is embedded on-chip to receive and
decompress the patterns before delivering them to the core. The embedded EDT hardware also
compacts the test results before returning them to the tester. The benefit of using such a reduced
volume of data is that tester memory and channel requirements are reduced proportionally. The
reduced data volume, along with the embedded technology, results in much shorter test
application times and higher tester throughput than with traditional ATPG.
EDT technology is based on traditional, deterministic ATPG1, so you obtain the same fault
models, test coverage, and a very similar flow. EDT simply expands the well-proven
capabilities of ATPG by providing you with vastly improved compression of scan test data and
a much greater reduction in test time. Together, the compression of time and data enable you to
use less expensive structural testers and prolongs the life of existing automatic test equipment
(ATE).
As designs grow in size, additional test patterns are required to achieve the same level of
coverage and maintain the escape rate—the number of defective parts shipped to customers—at
an acceptable level. Even with the same number of scan patterns, test data volume and scan test
time will increase due to the increasing number of scan cells. Before EDT, additional patterns
meant that additional memory was required on the ATE to store test data and that the test time
would increase. As long as test patterns can fit in tester memory, test time is linear to the
1. For an introduction to deterministic ATPG, refer to Chapter 2, “Understanding Scan and ATPG Basics,”
in the Scan and ATPG Process Guide.
number of test patterns. If the test patterns cannot fit in the tester’s memory, there are usually
three possible solutions, none of them ideal:
• Load as much data as possible into the tester’s memory, and then reload the tester when
the first part of the test is complete. Reloading is expensive in terms of time.
• Divide the test into multiple programs and run them in multiple passes. This, too, is
expensive in terms of time.
• Truncate the test pattern set, which reduces the overall test quality and increases the
escape rate.
For a scan-based test, a good approximation of the test data volume is given by the product of
the number of scan patterns and the number of scan cells:
The number of scan cells is proportional to the design size; typically, there is one scan cell for
every 20 to 30 gates.
The test time depends on the length of the longest scan chain (the number of scan cells it
contains) and on the number of test patterns. The following three equations summarize how the
number of scan cells and scan patterns determine test time:
# of Scan Cells
Scan Chain Length = ----------------------------------------
# of Scan Chains
# of Scan Cells
# of Test Cycles = ---------------------------------------- × # of Scan Patterns
# of Scan Chains
1
Test Time = # of Test Cycles × -------------------------
Frequency
To reduce test data volume, ATPG tools apply various software-based compression techniques
to ensure the order of patterns in the pattern set is optimal and that each pattern detects as many
faults as possible. Even with increasingly sophisticated compression techniques, an increasing
number of integrated circuit (IC) designs are reaching the point where test data volume exceeds
tester limits. Either test patterns have to be truncated and the quality levels reduced, or other
(more efficient) DFT approaches must be used.
Another way to reduce test cost is to use logic built-in self-test (LBIST™). Logic BIST also uses
internal scan, but provides for generation of test patterns on-chip using a pseudo-random pattern
generator. The results are captured in a signature generator. Because the patterns are non-
deterministic, some patterns may not detect any additional faults and the test coverage is
typically lower than for ATPG. To compensate for this, test points are typically inserted in the
design. It is also necessary to ensure no unknown values (X states) propagate to the signature
register. Additionally, the random nature of the patterns makes it difficult to use logic BIST for
fault models other than stuck-at. One major advantage of logic BIST is its applicability in field
and system tests. In these applications, it is often acceptable to have lower test coverage than for
manufacturing test. For manufacturing test, logic BIST is often combined with top-up ATPG
patterns to achieve the test quality you want. The number of top-up patterns can consist of up to
40% of the ATPG patterns needed if the design was tested only with ATPG rather than logic
BIST combined with top-up ATPG.
Therefore, where test data volume and test time must be reduced, neither logic BIST nor
conventional ATPG are ideal solutions for designs requiring high quality test and minimal
impact of DFT circuitry on the design.
Conventional ATPG
EDT
Scan channels
(virtual scan chains)
Under EDT methodology, the “virtual” scan chains are called scan channels to distinguish them
from the scan chains inside the core.1 Their number is significantly less than the number of
internal scan chains. You control the amount of compression by varying two parameters:
The effective compression, which is the actual amount of compression you achieve with EDT,
is less than the chain-to-channel ratio. The example in the section, “Comparing EDT and
Traditional ATPG” demonstrates how you determine the effective compression. The key point
1. The term “scan channel” is used from now on to refer to a “virtual” scan chain as seen by the tester when
a chip includes EDT technology.
to remember is EDT compression is achieved by reducing the amount of data per pattern and
not by reducing the number of patterns as in traditional ATPG. The pattern count is usually
slightly higher, everything else being equal, than with traditional ATPG.
EDT logic
Figure 1-2 shows conceptually how the EDT logic is structured with respect to the design core
and consists of two main components: a decompressor and a spatial compactor.
IC
D
e C
ATE c o Scan
Scan o
Channel m m Channel
Inputs
p Core Design p Outputs
r with Scan Chains a
Compressed c
Patterns e t
s o
s r
o
r
Compressed
Expected Response
A decompressor is located between the external scan channel inputs and the internal scan chain
inputs. A spatial1 compactor is inserted between the internal scan chain outputs and the external
scan channel outputs. You have the option of including bypass circuitry for which a third block
(not shown) is added. No additional logic (test points or X-bounding logic) is inserted into the
core of the design. Therefore, the EDT logic affects only scan channel inputs and outputs, and
1. The spatial compactor block compacts the outputs of many internal scan chains into a few external scan
channel outputs, reducing the need for space that otherwise would be required for routing multiple scan chain
outputs. In this manual, the shorter term “compactor” refers to the spatial compactor.
thus has no effect on functional paths. The size of the EDT logic is comparable to the size of a
boundary scan Test Access Port (TAP) or a memory BIST controller.
Figure 1-2 shows an example design with two scan channels and 20 short internal scan chains.
From the point of view of the ATE, the design appears to have two scan chains, each as long as
the internal scan chains. Each EDT pattern has a small number of initialization cycles, so the
total number of shifts per pattern would be slightly more than the number of scan cells in each
chain.
For example, if each chain has 1,250 scan cells and each EDT pattern requires four initialization
cycles, the tester sees a design with two chains requiring 1,254 shifts per pattern. After
initialization, these patterns apply one bit of data to each decompressor input in each clock cycle
(two bits total, in parallel, on the two channel inputs). In the same clock cycle, the decompressor
outputs load the 20 internal scan chains. Compared to a traditional ATPG design, an EDT
design has the same number of scan channels interfacing with the tester, but many more scan
chains. Because the scan chains are balanced, they are much shorter and thus require
proportionally fewer shift cycles to load.
A set of such patterns is stored on the tester and each pattern provides the data applied to the
decompressor and holds the responses observed on the outputs of the compactor. The tester
applies the compressed patterns to the circuit through the EDT logic, which lies between the
scan channel pins and the internal scan chains. The decompression operation is transparent to
the tester, so you do not have to modify the tester. From the perspective of the tester, there are
relatively few “virtual” scan chains, and not the many scan chains physically present in the
design.
The compressed patterns, after passing through the decompressor, create the necessary values in
the scan chains to guarantee fault detection. The functional input and output pins are directly
controlled (forced) and observed (measured) by the tester, same as in conventional test. On the
output side of the internal scan chains, hardware compactors reduce the number of internal scan
chains to feed the smaller number of external channels. The response captured in the scan cells
is compressed by the spatial compactor and the compressed response is compared on the tester.
The compactor ensures faults are not masked and X-states do not corrupt the response.
Note
EDT compactors can tolerate unknown states (Xs), unlike time-based compactors, such
as multiple input signature registers (MISRs).
• Creates Verilog or VHDL register-transfer level (RTL) descriptions of the hardware for
decompressing EDT patterns and compacting test responses.
• Generates patterns compressed specifically for on-chip processing by the EDT
hardware.
In performing these functions, the tool allows you to define parameters, such as the number of
scan channels and the insertion of lockup cells, which are also part of the RTL code. The tool
automatically determines the internal structure of the EDT logic based on the parameters you
specify and the number of internal scan chains, the length of the longest scan chain, and the
clocking of the first and last scan cell in each chain. The tool generates test patterns based
primarily on the number of channels you specify. Test patterns include parallel and serial test
benches for Verilog and VHDL, as well as parallel and serial WGL, and most other formats
supported by FastScan™.
TestKompress can also emulate FastScan running in command-line mode. In this mode, the tool
provides traditional FastScan capability (minus the GUI). Enter a “set edt off” command
immediately after invoking on a netlist in one of the formats supported by FastScan and you can
then use the tool with that netlist just like you would a standalone version of FastScan.
The next section provides a brief overview of the steps and commands in the TestKompress
tool’s EDT flow. Following that, the remainder of the chapter covers these additional
introductory topics:
summary does not provide full details for running the tool, but rather is intended to familiarize
you with the three main activities in the tool’s flow:
Tip: The following commands can be located in the dofile used for invocation in step 1.
// Setup TestKompress.
add scan groups grp1 …/generated/atpg.testproc
add scan chains chain1 grp1 edt_si1 edt_so1
add scan chains chain2 grp1 edt_si2 edt_so2
...
add scan chains chain5 grp1 edt_si5 edt_so5
analyze control signals -auto_fix
// At this point, you can optionally create patterns (without saving them)
// to get an estimate of the potential test coverage.
create patterns
// Create reports
report statistics
// Generate patterns.
create patterns
// Create reports.
report statistics
report scan volume
Clocking Scheme
The default EDT logic contains combinational logic and flip-flops. All the flip-flops, except
lockup cells, are positive edge-triggered, and clocked by a dedicated clock signal that is
different from the scan clock. There is no clock gating within the EDT logic; the EDT logic
does not interfere with the system clock(s) in any way.
You can set up the EDT clock to be a dedicated pin (named edt_clock by default) or you can
share the EDT clock with a functional non-clock pin. Such sharing may cause a decrease in test
coverage because TestKompress must constrain the EDT clock pin during test pattern
generation. You must not share the EDT clock with another clock or RAM control pin for
several reasons:
• If shared with a scan clock, the scan cells could be disturbed when the EDT clock is
pulsed in the load_unload procedure during pattern generation.
• If shared with RAM control signals, RAM sequential patterns and multiple load patterns
may not be applicable.
• If shared with a non-scan clock, test coverage may decline because the EDT clock is
constrained to its off-state during the capture cycle.
Because the clock used in the EDT logic is different than the scan clock, the tool can insert
lockup cells automatically between the EDT logic and the scan chains as needed. TestKompress
inserts lockup cells as part of the EDT logic; the tool never modifies the design core.
Latch-based EDT logic uses two EDT clocks (a master and a slave clock) to drive the logic. For
reasons similar to those listed above for DFF-based logic, you must not share the master EDT
clock with the system master clock. You can, however, share the slave EDT clock with the
system slave clock.
Note
During the capture cycle, the system slave clock, which is shared with the slave EDT
clock, is pulsed. This does not affect the EDT logic because the values in the master
latches do not change. Similarly, in the load_unload cycle, although the slave EDT clock
is pulsed, the value at the outputs of the system slave latches is unchanged because the
slave latches capture old values.
In a skew load procedure, when a master clock is only pulsed at the end of the shift cycle
(so different values can be loaded in the master and slave latches), the EDT logic is
unaffected because the master EDT clock is not shared.
When you create patterns with TestKompress, it stores the captured data with respect to the
internal scan chains, but stores the load data with respect to the external scan channels. The load
data you see in the pattern file is thus in its compressed format—the form in which it is fed to
the EDT decompressor.
Another difference from FastScan is that with the TestKompress simulator, Xs may not be due
to capture; they may result from the tool’s emulation of the EDT compactor. For a detailed
discussion of this effect and how TestKompress limits it with masking, refer to Chapter 7,
“Masking Scan Chain Output Pins.”
Diagnostics
TestKompress supports the same diagnostics that YieldAssist supports. Basically, you perform
a diagnosis by collecting the failing pattern data from the tester, placing it in a failure file that
you can provide as input to the tool’s Diagnose Failures command, then running the command
to obtain a diagnostics report. For complete information on these tool’s diagnostics capabilities
and how to use them, refer to the YieldAssist User’s Guide.
Tester memory requirements are determined by the number of tester channels and the volume of
test data. The data volume depends on the number of patterns and the number of shifts per
pattern:
The number of test cycles, which is directly proportional to test time, depends on the number of
patterns and the number of clock cycles (shifts) required per pattern.
Traditional Scan/ATPG
In traditional scan/ATPG, when the design is configured into 16 scan chains, each chain has
approximately 64,000/16 = 4,000 scan cells. If ATPG requires 4,200 patterns, 4,000 cycles
deep, the required tester memory is:
6
Tester Memory (ATPG) = 16 × 4200 × 4000 = 268.8 ×10
EDT Technology
When you use EDT technology, you can configure the same design into 160 internal scan
chains of 400 flip-flops each. This gives a chain-to-channel ratio of 10 (160/16) and requires
4,400 patterns, 404 cycles deep.
Note
Four additional cycles per pattern are required for initialization of the EDT circuitry in
this example. The number of initialization cycles varies depending on the specific design
and the EDT configuration you use. The number of shift cycles is more than the length of
the longest chain (reported during DRC) because the tool must apply additional cycles
with every EDT pattern to set up the decompressor.1
Effective Compression
The ratio of the tester memory figures in the two cases gives you the effective compression due
to EDT:
Tester Memory(ATPG) 268.8
Effective Compression = -------------------------------------------------------- = ------------- ≈ 9.45
Tester Memory(EDT) 28.4
Because it accounts for the initialization cycles and the slightly higher pattern count, the
effective compression is about 9.5X, slightly less than the chain-to-channel ratio of 10.
You can also calculate effective compression using the ratio of test cycles:
# of Test Cycles(ATPG) 16.8
Effective Compression = ---------------------------------------------------------- = ---------- ≈ 9.45
# of Test Cycles(EDT) 1.78
Figure 1-3 summarizes the ATPG and EDT configuration and results for this design. As
illustrated in the figure, both the number of test cycles and the tester memory required are
reduced by about 9.45 times (9.45X).
1. (# of Scan Cells / # of Scan Chains) is used to estimate the number of shifts (clock cycles) per pattern in
traditional scan and ATPG. For a design with EDT, the estimate additionally includes the number of
initialization cycles required by each EDT pattern, as follows:
# of Shifts per Pattern (EDT) = (# of Scan Cells / # of Scan Chains) + # of Init Cycles per Pattern
1
2
4,200 3 4,400
patterns patterns
16
160
16
Figure 1-4 illustrates how the tester memory requirements are reduced with EDT. Each column
represents a scan channel: 16 channels both for EDT and ATPG.
Figure 1-4. Tester Memory Map for ATPG and EDT Patterns
Vector
X
8th EDT Vector 404
9.9
9th EDT Vector 404
10th EDT Vector 404
11th EDT Vector 404
12th EDT Vector 404
2nd 4394th EDT Vector 404
4000
ATPG 4395th EDT Vector
4396th EDT Vector
4397th EDT Vector
404
404
404
16
4200th
ATPG 9.45X compression overall
Vector (due to greater number
of EDT patterns)
16
Test Quality
EDT uses compression algorithms that are fault-model independent and pattern-type
independent. The technology supports all fault models (stuck-at, transition, Iddq, and path
delay) and deterministic pattern types (combinational, RAM sequential, clock-sequential, and
multiple loads) supported and/or generated by FastScan.
Note
TestKompress does not currently support random pattern generation.
Support for FastScan MacroTest is limited to bypass mode: you can apply MacroTest
patterns to a design with EDT technology only by accessing the scan chains directly,
bypassing EDT.
To summarize:
Design Impact
Compared to scan, EDT has no additional impact on functional logic. The EDT decompressor is
placed between the chip pins and internal scan inputs, and the compactor is placed between the
internal scan outputs and chip pins. The impact of pin sharing in EDT (functional pins shared
with the decompressor inputs and compactor outputs) is the same as with pin sharing in
conventional scan. Because EDT patterns are deterministic, random pattern resistance does not
present any problem, and there is no need for test points. There is also no need for bounding
logic to mask unknown states. The compactor can handle unknown states.
EDT requires a signal for update of the compactor register and decompressor reset. This pin can
be shared with a functional pin. The EDT circuitry also requires a separate clock pin, which also
can be shared with a functional pin. This pin has to be constrained in capture. If you choose to
include bypass circuitry (for direct access to the internal scan chains), a bypass mode pin is
needed. It, too, can be shared.
• Decompressor—Feeds a large number of scan chains in your core design from a small
number of scan channels, and decompresses EDT scan patterns as they are shifted in.
• Compactor—Compacts the test responses from the scan chains in your core design into
a small number of scan output channels. Compacts test responses as they are shifted out.
• Bypass Module (Optional) —Bypasses the EDT logic by using multiplexers (and lockup
cells if necessary) to concatenate the internal scan chains into fewer, longer chains.
Enables you to access the internal scan chains directly through the channel pins.
The decompressor resides between the channel inputs (connected to the tester) and the scan
chain inputs of the core. Its main parts are an LFSM and a phase shifter. The compactor resides
between the core scan chain outputs and the channel outputs connected to the tester. It primarily
consists of spatial compactor(s) and gating logic. If you choose to implement bypass circuitry,
the tool includes bypass multiplexers in the EDT logic. Chapter 7, “Bypassing EDT Logic,”
discusses bypass mode.
The previously mentioned components of the EDT logic are all contained within an EDT block
that, by default, is instantiated in a top level “wrapper” module. The design core is also
instantiated in the top level wrapper. This is illustrated conceptually in Figure 1-5. You insert
pads and I/O cells on this new top level. Because the EDT logic is outside the core design (the
netlist on which you invoked the tool), the tool flow you use to implement this configuration is
referred to as the external EDT logic location flow, or simply “external flow.”
Figure 1-5. EDT Logic Located Outside the Core (External Flow)
edt_top
edt_clock edt
edt_scan_in
edt_update edt_ edt_
decompressor compactor
core
Alternatively, you can invoke TestKompress on a design that already contains I/O pads. For
these designs, the tool enables you to insert the EDT block in the existing top level within the
original design. This is shown conceptually in Figure 1-6. Because the EDT logic is instantiated
within the netlist TestKompress was invoked on, this configuration is referred to as the internal
EDT logic location flow, or “internal flow.”
Figure 1-6. EDT Logic Located Within the Core (Internal Flow)
edt
edt_clock edt_scan_in
edt_ edt_ Module A
edt_update decompressor compactor edt_scan_out
edt_ edt_scan_in
edt_bypass bypass (opt.)
edt_scan_out Module B
By default, the tool automatically inserts lockup cells as needed in the EDT logic. They are
placed within the EDT logic, between the EDT logic and the design core, and in the bypass
circuitry that concatenates the scan chains. The Chapter 7 section, “Understanding How Lockup
Cells are Inserted,” describes in detail how the tool determines where to put the lockups.
The tool also checks a separate class of DRC rules, the K class, which is specifically for EDT.
For information on how to interpret these rules, refer to Chapter 4, “Running DRC.” The “EDT
Rules (K Rules)” section in the Design-for-Test Common Resources Manual provides reference
information on each EDT-specific rule.
The Conclusions
• A rough estimate of the size of the EDT logic is 25 gates per internal scan chain.
• For a one million gate design with 200 scan chains, the logic BIST controller including
PRPG, MISR and the BIST controller, is 1.25 times the size of the EDT logic for 16
channels.
• For a one million gate design configured into 200 internal scan chains, a complete EDT
logic block with the decompressor, compactor, and bypass circuitry with lockup cells
required 3,500 two-input equivalent gates, or less than 20 gates per chain. The logic
occupied an estimated 0.35% of the area. The size of the EDT logic does not vary much
with the size of the design.
• The EDT logic for eight scan channels and 100 internal scan chains was found to be
twice as large as a TAP controller, and 19% larger than the MBIST™ controller for a 1k
x 8-bit memory.
• Chain-to-channel ratio: The ratio of scan chains (internal to the core) to scan channels
(external)
• Change in the total number of patterns
• Change in the number of shift cycles for each pattern
You only have direct control of the chain-to-channel ratio. The three factors are, however,
related. The higher the ratio of internal scan chains to external scan channels, the higher the
compression per pattern; but that increases the possibility of TestKompress generating patterns
it cannot compress and can lead to lower test coverage. Higher chain-to-channel ratios also
decrease the number of faults dynamic compaction can fit into a pattern. This can increase the
total number of patterns and, therefore, decrease overall compression.
The tool does not limit the number of internal scan chains. You may find, however, that routing
constraints limit the chain-to-channel ratio. Most practical configurations do not exceed the
tool’s capability to compress patterns. That is, the tool is unlikely to abort on a fault for which it
generated a test pattern that could not be compressed.
SETUP>
To use a dofile, you must specify it at invocation by using the -Dofile switch.
If you place all commands, including the Exit command, in a dofile, you can run the entire
session as a batch process. Once you generate a dofile, you can run it at invocation. For
example, to run TestKompress as a batch process using the commands contained in the dofile
my_dofile.do, enter:
// my_dofile.do
//
// Dofile for EDT Logic Creation Phase.
// Set up EDT.
set edt -channels 2
// Run DRC.
set system mode atpg
// Exit.
exit
By default, if the tool encounters an error when running one of the commands in the dofile, it
stops dofile execution. However, you can turn this setting off or specify to exit to the shell
prompt by using the Set Dofile Abort command
You can generate log files by using the -Logfile switch when you invoke the tool, or by issuing
the Set Logfile Handling command. When setting up a log file, you can instruct TestKompress
to generate a new log file, replace an existing log file, or append information to a log file that
already exists.
Note
If you create a log file during a tool session, the log file will only contain notes, warnings,
or error messages that occur after you issue the Set Logfile Handling command.
Therefore, you should enter it as one of the first commands in the session.
prompt> system ls
• Set File Compression - Turns file compression on or off. This command applies to all
files that the tool reads from and writes to.
• Set Gzip Options - Specifies which GNU gzip options to use when the tool is processing
files that have the .gz extension.
Note
The file compression used by the tools to manage disk storage space is unrelated to the
pattern compression you apply to test pattern sets in order to reduce the pattern count.
You will see many references to the latter type of compression throughout the DFT
documentation.
prompt> exit
The first task in any design flow is creating the initial register transfer level (RTL) design,
through whatever means you choose. If your design is in VHDL or Verilog format and it
contains memory models, at this point you can add built-in self-test (BIST) circuitry.
MBISTArchitect™ creates and inserts RTL-customized internal testing structures for design
memories.
Commonly, in an ATPG flow that does not use EDT, you would next insert and verify I/O pads
and boundary scan circuitry using BSDArchitect™ (BSDA). Then, you would synthesize and
optimize the design using the Synopsys Design Compiler tool or another synthesis tool,
followed by a timing verification with a static timing analyzer such as PrimeTime.
After synthesis, you are ready to insert internal scan circuitry into your design using
DFTAdvisor. In the normal ATPG flow, after you insert scan, you could optionally reverify the
timing because you added scan circuitry. Once you were sure the design is functioning as
desired, you would generate test patterns using FastScan™ or FlexTest™ (depending on your
scan methodology) and ASIC Vector Interfaces to generate a test pattern set in the appropriate
format.
ATPG EDT
(External Flow)
Create Initial Design
& Verify Functionality
Insert/Verify Insert/Verify
MBISTArchitect BIST Circuitry BIST Circuitry MBISTArchitect
Insert/Verify Synthesize/Optimize
Design & Design Compiler
BSDArchitect Boundary Scan
Circuitry Verify Timing PrimeTime
Insert
Insert I/O Pads Internal Scan DFTAdvisor
Circuitry
Insert/Verify Insert/Verify
PrimeTime Boundary Scan
Verify Timing Boundary Scan BSDArchitect
Circuitry Circuitry
Insert
DFTAdvisor Internal Scan Insert I/O Pads
Circuitry
Hand off
to Vendor
ATPG EDT
(Internal Flow)
Create Initial Design
& Verify Functionality
Insert/Verify Insert/Verify
MBISTArchitect BIST Circuitry BIST Circuitry MBISTArchitect
Insert/Verify Insert/Verify
BSDArchitect Boundary Scan Boundary Scan BSDArchitect
Circuitry Circuitry
Synthesize/Optimize
Synthesize/Optimize Design & Design Compiler
Design Compiler
the Design Verify Timing PrimeTime
Insert
PrimeTime Verify Timing Internal Scan DFTAdvisor
Circuitry
Insert IP/Synthesize
Re-verify Timing Design Compiler
the Design
(optional)
Incrementally
FastScan Generate (Pattern
Generate/Verify TestKompress
FlexTest Generation Phase) &
Test Patterns ModelSim
ModelSim Verify EDT Patterns
Hand off
to Vendor
• External IP Location Flow (external flow)—Differs from the typical ATPG flow in that
you do not insert I/O pads and boundary scan until after you run TestKompress on the
scan-inserted core to insert the EDT IP. The EDT IP is located external to the design
netlist.
• Internal IP Location Flow (internal flow)—Similar to a typical ATPG flow, you may
insert and verify I/O pads and boundary scan circuitry before you synthesize and
optimize the design. The EDT IP is instantiated in the top level of the design netlist,
permitting the IP to be connected to internal nodes (I/O pad cells or an internal test
controller block, for example) or to the top level of the design. Typically, the EDT IP
would be connected to the internal nodes of the pad cells used for channel and control
signals and you would run TestKompress on the scan-inserted core that includes I/O
pads and boundary scan.
You should choose an EDT flow based on whether the EDT IP signals need to be connected to
nodes internal to the design netlist read into the tool (internal nodes of I/O pads, for example),
or whether the EDT IP can be connected to the design using a wrapper.
In the external flow, after you insert scan circuitry the next step is to insert the EDT IP.
Following that, you insert and verify boundary scan circuitry if needed. Only then do you add
I/O pads.1 Then, you incrementally synthesize and optimize the design using either Design
Compiler or another synthesis tool.
In the internal flow, you can integrate I/O pads and boundary scan into the design before the
scan insertion step. Then, after you create the EDT IP, run Design Compiler to integrate the IP
into the design and synthesize it. TestKompress produces a Design Compiler script you can use
to insert the EDT IP into the design and connect it, as well as perform synthesis of the IP.
In either EDT flow, once you are sure the design is functioning as desired, you generate test
patterns using TestKompress. In this step, TestKompress performs extensive DRC that, among
other things, verifies the synthesized EDT IP.
Note
Notice that you run TestKompress twice: first to create the EDT IP (IP Creation Phase)
and again to generate EDT patterns (Pattern Generation Phase).
You should also verify that the design and patterns still function correctly with the proper
timing information applied. You can use ModelSim or another Verilog or VHDL simulator to
achieve this goal. You may then have to perform a few additional steps required by your ASIC
vendor before handing off the design for manufacture and testing.
1. You can use the Mentor Graphics BSDArchitect™ (BSDA) tool to insert boundary scan and I/O pads.
Note
It is important to check with your vendor early on in your design process for specific
requirements and restrictions that may affect your EDT strategy. In particular, you should
determine the limitations of the vendor's test equipment. To plan effectively for using
EDT, you must know the number of channels available on the tester and its memory
limits.
Design Requirements
Before you begin an EDT flow, you must ensure your design satisfies the following
prerequisites:
Format
Your design input to TestKompress must be in gate level Verilog or VHDL. The IP created by
TestKompress is in Verilog or VHDL RTL.
Pin Access
As in FastScan, the design needs to allow access to all clock pins through primary input pins.
There is no restriction on the number of clocks.
I/O Pads
The next two sections describe the I/O pad requirements for each of the two EDT flows. These
prerequisites are quite different depending on which EDT flow, external or internal, you use.
External Flow
TestKompress creates the EDT IP as a collar around the circuit (see Figure 1-5). Therefore, the
core design ready for IP insertion must consist of only the core without I/O pads. In this flow,
TestKompress cannot insert the IP between scan chains and I/O pads already in the design.
Note
Add the I/O pads around the collar after it is created, but before logic synthesis. The same
applies to boundary scan cells: add them after the EDT IP has been included in the
design.
The design may or may not have I/O pads when you generate EDT patterns. For example, to
determine the expected test coverage, you can use TestKompress to perform a pattern
generation trial run on the core in the IP Creation Phase before inserting I/O pads.
Note
You should not save patterns TestKompress generates in the IP Creation Phase, as these
patterns do not account for how the I/O pads are integrated into the final synthesized
design.
When producing the final patterns for a whole chip, run TestKompress on the design that you
synthesized after inserting the I/O pads.
Internal Flow
The core design, ready for IP insertion, may include I/O pad cells for all the I/Os you inserted
before or during initial synthesis. The I/O pads, when included, can be present at any level of
the design hierarchy, and do not necessarily have to be at the top level. If the netlist includes I/O
pads, there should also be some pad cells reserved for EDT control and channel pins that are not
going to be shared with functional pins. Refer to “Sharing Functional Pins with EDT Control
and Channel Pins” in Chapter 4 for more information about pin sharing.
Note
The design may have I/O pads; it is not a requirement. When the IP is inserted into the
netlist, you can connect it to any internal design nodes you choose, or to the netlist’s top
level.
From
Synthesis
Synthesized
Netlist
(no scan)
Insert Scan
ATPG Netlist
Scripts with scan
Create EDT IP
EDT EDT
Scripts RTL
Synthesize
EDT IP & JTAG
Layout
Synthesized
Netlist with
EDT IP
Generate
EDT Patterns
Patterns
Sign-off
Simulation
1. Prepare and synthesize the RTL design, including boundary scan and I/O pads cells for
all I/Os. Provide I/O pad cells for any EDT control and channel pins that will not be
shared with functional pins.
Note
In this step, you must know how many EDT control and channel pins are needed, so you
can provide the necessary I/O pads.
Note
As the new scan I/Os at the top level are only temporary, take care not to insert pads on
them.
3. Perform a FastScan ATPG run on the scan-inserted design without EDT (optional). Use
this run to ensure there are no basic issues such as simulation mismatches caused by an
incorrect library. If you want, you can run TestKompress in FastScan command-line
mode to perform this step. See “Invoking TestKompress” on page 58 for information on
how to access the FastScan command-line mode.
4. Simulate the FastScan vectors (optional).
5. EDT IP Creation Phase: Invoke TestKompress on the scan-inserted gate level
description of the core. Create the RTL description of the EDT IP. TestKompress creates
the EDT IP but does not incorporate it into the design; the Design Compiler script the
tool generates will perform IP insertion and connection, in addition to synthesis.
6. Run the Design Compiler script to instantiate the EDT IP in the top level of the design,
connect the EDT logic between the design core and I/O pad cells, and incrementally
synthesize the EDT logic.
Note
The EDT IP is always inserted at the top level within the original design.
7. EDT Pattern Generation Phase: After you insert the EDT IP, invoke TestKompress on
the synthesized top level netlist (Verilog or VHDL) and generate the EDT test patterns.
You can write test patterns in the same formats FastScan uses (for example, VHDL,
Verilog, and WGL).
8. Simulate the compressed test vectors that you created in the preceding step. As for
regular ATPG, the typical practice is to simulate all parallel patterns and a sample of
serial patterns.
Synthesized From
Netlist Synthesis
(no scan)
Insert Scan
ATPG Netlist
Scripts with scan
Create EDT IP
EDT EDT
Scripts RTL
Insert &
Synthesize EDT IP
Layout
Synthesized
Netlist with
EDT IP
Generate
EDT Patterns
Patterns
Sign-off
Simulation
For testers (ATEs) with scan options, the number of channels is usually fixed and the parameter
you will vary is the number of scan chains. In some cases, the chip package rather than the
tester, may limit the number of channels. Therefore, scan insertion and synthesis is an important
part of the EDT flow. DFTAdvisor is the Mentor Graphics tool you use to insert scan chain
circuitry in your design.1
Synthesize
the Design
This chapter discusses each of the previously mentioned tasks as it relates to the EDT process
flow.
1. You can use any scan insertion tool to insert scan chains; however, this chapter assumes you use
DFTAdvisor.
Note
If you must insert I/O pads prior to or during initial synthesis, consider using the internal
flow, which does not require you to perform the steps described in this section.
If the core and the I/O pads are in separate blocks, removing the I/O pads is simple to do:
1. Invoke DFTAdvisor using the -Top switch to extract the core and write it out.
2. Insert scan into the core and synthesize the EDT hardware around it.
3. Reinsert the EDT hardware-core combination into the original circuit in place of the
core you extracted, such that it is connected to the I/O pads.
Note
TestKompress also has a -Top invocation switch that enables you to run the tool on the
core. However, you must still use the -Top invocation switch in DFTAdvisor to extract
the core when you perform scan insertion on the core prior to invoking TestKompress.
If your design flow dictates that the I/O pads be inserted prior to scan insertion, you can create a
black box as a place holder that corresponds to the EDT block. You can then stitch the I/O pads
and, subsequently, the scan chains to this block. Once TestKompress creates the RTL model of
the EDT block, you use the RTL model as the new architecture or definition of the black box
placeholder. The port names of the EDT block must match those of the black box already in the
design, so only the architectures need to be swapped.
Note
If you must insert boundary scan prior to or during initial synthesis, consider using the
internal flow, which is intended for pre-existing boundary scan or I/O pads.
If the design already includes boundary scan, you need to extract the core or remove the
boundary scan, so you can perform the EDT Logic Creation Phase on a design without
boundary scan. This is the same requirement, described in the preceding section, that applies to
pre-existing I/O pads.
If the core and boundary scan are in separate blocks, you can invoke DFTAdvisor using the -
Top switch to extract the core and write it out. You then insert scan into the core and synthesize
the EDT hardware around it. Afterward, reinsert the EDT hardware-core combination into the
original circuit in place of the core you extracted, such that it is connected to the boundary scan
circuitry.
Note
Boundary scan adds a level of hierarchy outside the EDT wrapper and requires you to
make certain modifications to the generated dofile and test procedure file that you use for
the EDT Pattern Generation Phase.
For more complete information about including boundary scan, refer to Chapter 5, “Adding
Boundary Scan (External Flow).”
• Only full scan using the mux-DFF or LSSD scan cell type (or a mixture of the two) is
supported. The tool creates DFF-based EDT logic by default; however, you can direct it
to create latch-based logic for pure LSSD designs. Table 1-1 summarizes the EDT
logic/scan architecture combinations the tool supports. For information about specific
scan cell types, refer to “Scan Architectures” in the Scan and ATPG Process Guide.
• Both prefixed and bused scan input and output pins are allowed; however, the buses for
bused pins must be in either ascending or descending order (not in random order).
• The scan chains must be connected to dedicated scan pins inserted at the top level of
your core design. The reason for this requirement is explained in the section “Avoiding
Sharing Scan Chain Pins with Functional Pins.”
• TestKompress does not support “dummy” scan chains as defined in FastScan. This is
because EDT is strongly dependent on the scan configuration, particularly the number of
scan chains. FastScan ATPG performance is independent of the scan configuration and
can assume that all scan cells are configured into a single scan chain when dummy scan
chains are used.
You can use any scan insertion tool capable of configuring the required number of scan chains
(for example, DFTAdvisor).
Note
Because TestKompress generates the RTL description of the EDT logic in Verilog or
VHDL, you must save the scan-inserted design in one of these two formats.
Note
The presence of uncompressed chains may reduce the accuracy of the test coverage and
scan data volume estimates you can obtain as an optional step after you run the tool to
create the EDT logic (these estimates are explained in “Estimating Test Coverage and
Scan Data Volume” on page 92). Therefore, Mentor Graphics recommends you skip the
estimation step if you include uncompressed chains in your design.
There are other reasons to decrease the number of scan chains: two examples are to limit the
number of incompressible patterns and/or to reduce the pattern count. For more explanation,
refer to the Chapter 1 section, “Controlling EDT Compression.”
For testers with a scan option, the number of channels is usually fixed and the variable you
modify will be the number of chains. Because the effective compression will be slightly less
than the ratio between the two numbers (the chain-to-channel ratio), in most cases it is sufficient
to do an approximate configuration by using slightly more chains than indicated by the
chain-to-channel ratio. How many more depends on the specific design and on your experience
with EDT. For example, if the number of scan channels is 16 and you need five times (5X)
effective compression, you can configure the design with 100 chains (20 more than indicated by
the chain-to-channel ratio). This typically results in 4.5 to 6X compression.
Note
A scan group is a concept used by Mentor Graphics DFT and ATPG tools to group scan
chains based on operation. This concept is fully explained in the “Scan Groups” section
of the Scan and ATPG Process Guide.
Note
You can share functional pins with the external decompressor scan channel pins.
Remember, these channels become the new “virtual” scan chains seen by the tester. You
specify the number of channels, as well as any pin sharing, in a later step when you set up
TestKompress for inserting the EDT logic. Refer to “Specifying EDT Control and
Channel Pins” in Chapter 4 for more information.
Note
If a scan cell drives a functional output, avoid using that output as the scan pin. If that
scan cell is the last cell in the chain, you must add a dedicated scan output.
• Between the decompressor and the scan chains (between the EDT clock and the scan
clock(s))
• Between the scan chain output and the compactor when there are pipeline stages
(between the scan clock(s) and the EDT clock)
• In the bypass circuitry where the internal scan chains are concatenated (between
different scan clocks)
You can avoid regenerating the EDT circuitry by ensuring the following are true after you
reorder the scan chains:
• The first and last scan cell of each chain have the same clock and phase.
To satisfy this condition, you should reorder within each chain and within each clock
domain. If both leading edge (LE) triggered and trailing edge (TE) triggered cells exist
in the same chain, do not move these two domains relative to each other. After
reordering, the first and last cell in a chain do not have to be precisely the same cells that
occupied those positions before reordering, but you do need to have the same clock
domains (clock pin and clock phase) at the beginning and end of the scan chain.
• If you use a lockup latch at the end of each scan chain and if all scan cells are LE
triggered, you do not have to preserve the clock domains at the beginning and end of
each scan chain.
When all scan cells in the design are LE triggered, the lockup latch at the end of each
chain enables you to reorder however you want. You can move clock domains and you
can reorder across chains. But if there are both LE and TE triggered flip-flops, you must
maintain the clock and edge at the beginning and end of each chain. Therefore, the
effectiveness and need of the lockup latch at the end of each chain depends on the
reordering flow, and whether you are using both edges of the clock.
For flows where re-creating the EDT logic is unnecessary, you still must regenerate patterns
(just as for a regular ATPG flow). You should also perform serial simulation of the chain test
and a few patterns to ensure there are no problems. If you include bypass circuitry in the EDT
logic (the default), you should also create and serially simulate the bypass mode chain test and a
few patterns.
// dfta.do
//
// DFTAdvisor dofile to insert scan chains for EDT.
// Report information.
exit
• Estimate the final test coverage early in the flow, before you insert the EDT logic.
• Obtain the scan data volume for plain ATPG using the Report Scan Volume command,
before you generate and synthesize the EDT logic. Later, in TestKompress, you can
obtain the same statistic for EDT. You then can assess the benefits of EDT by
comparing the volume figures in the two cases.
Note
Directly comparing pattern counts is not meaningful because EDT patterns are much
smaller than ATPG patterns. This is because the relatively short scan chains used in EDT
require many fewer shift cycles per scan pattern.
• Provide additional help for debugging. You can simulate the patterns you generate in
this step to verify that the non-EDT patterns simulate without problems.
• Find other problems, such as library errors or timing issues in the core, before you create
the EDT logic.
Note
If you include bypass circuitry, you also can run regular ATPG after you insert the EDT
logic.
This run is like any ATPG run and does not have any special settings; the key point to
remember is to use settings (pattern types, constraints, and so on) that are identical to those you
use when you run TestKompress to generate EDT compressed patterns.
The test procedure file you use for this FastScan run can, in theory, be identical to the one
generated by DFTAdvisor. But, you should modify it to include the same timing, as specified by
the tester, that you use when you generate EDT patterns. By using the same timing information,
you ensure simulation comparisons will be realistic. To avoid DRC violations when you save
patterns, you should also update the test procedure file with information for RAM clocks and
for non-scan-related procedures.
You can use the Report Scan Volume command in TestKompress and FastScan to perform a
more accurate comparison of the scan data volume in each case and more clearly assess the
benefits of EDT.
Save the patterns you generate only if you want to simulate them.
Note
This ATPG run is only intended to provide test coverage and pattern volume information
for plain ATPG. Save the patterns if you want to simulate them, but be aware that they
have no other purpose. You generate and save the sign-off EDT compressed patterns in
the EDT Pattern Generation Phase when you run TestKompress on the entire design—
after you have synthesized the I/O pads and EDT logic.
In the Mentor Graphics flow, you can use the ModelSim simulator. You can also use any other
Verilog simulator instead.
1. Both the FastScan command-line mode of TestKompress (EDT off) and the standalone FastScan product
are referred to as FastScan in this manual.
This chapter describes how you use TestKompress to add EDT logic to your scan-inserted
design. This part of the TestKompress flow is referred to as the EDT IP Creation Phase.
Figure 4-1 shows the layout of this chapter as it applies to the process of creating and inserting
the EDT logic.
This chapter discusses each of the tasks outlined in Figure 4-1, providing details on using
TestKompress. For more information on all available functionality in the tool, refer to the
ATPG and Failure Diagnosis Tools Reference Manual.
Understanding TestKompress
In the EDT flow, you use TestKompress to accomplish two very different tasks:
• You do not need to provide technology mapping. For gate level code, you would need to
specify the library model to use for every gate type needed. RTL eliminates this
requirement because the technology mapping is performed during synthesis.
• RTL code may be better optimized by synthesis tools.
You invoke TestKompress in command-line mode. Before you use TestKompress, you should
become familiar with the basic process flow described in Chapter 2, and the tool’s invocation as
described in the following subsection.
You should also have a good understanding of the following chapters in the Scan and ATPG
Process Guide:
Invoking TestKompress
Note
To use TestKompress for creating EDT logic or generating EDT patterns, your design
must be a gate level netlist in either Verilog or VHDL format, and the tool’s EDT
capability must be on (the default). The tool will invoke on a flattened model that was
generated by FastScan, but TestKompress will then emulate FastScan command-line
mode only.
Invoke TestKompress by entering the application name on the shell command line, along with
all required arguments (design_name, design type, and library).
Once the design and library are loaded, the tool opens a command-line interface in Setup mode,
ready for you to begin working on your design.
For an explanation of each of the available invocation arguments and switches, refer to “Shell
Commands” in the ATPG and Failure Diagnosis Tools Reference Manual. You can obtain an
abbreviated description of the invocation options by entering the following command at the
shell prompt:
The following example invokes TestKompress on the Verilog design, “my_gate_scan.v” using
the library called “my_lib.atpg”:
You can use a dofile to simplify many of the tasks described in the following sections, as in this
example dofile, edt_ip_creation.do:
// edt_ip_creation.do
//
// Dofile for EDT Logic Creation Phase.
// Set up EDT.
set edt -channels 2
set edt pins bypass my_bypass
// Run DRC.
set system mode atpg
// Exit.
exit
Note
You can invoke on a netlist in any format supported by FastScan if you operate the tool in
FastScan command-line mode. To enable this mode, enter “set edt off” at the Setup
prompt immediately after invocation. For details about the formats FastScan supports,
refer to the description of the design_name argument in the fastscan shell command
section of the ATPG and Failure Diagnosis Tools Reference Manual.
Creating the EDT logic is the first step in the EDT flow that involves TestKompress EDT
capabilities. When you invoke TestKompress on a gate level Verilog or VHDL netlist, EDT
capability is on by default and you are in Setup mode. EDT must be on whenever you are doing
EDT logic creation or EDT pattern generation. You can use the Report Environment command
to check the tool’s EDT status. The following example shows this command’s output when
EDT is on:
All of the setup steps shown in the following subsections require the tool to be in Setup system
mode with EDT on.
Setting Up TestKompress
Note
When the tool creates the EDT logic, only scan chains defined with the Add Scan Chains
command get connected so as to be driven by and observed through the EDT logic.
Therefore, do not issue this command for any scan chains you want to leave
uncompressed. See “Including Uncompressed Scan Chains” on page 50 for more
information.
You need to set up TestKompress before you can create the EDT logic. You do this by
executing commands, while in Setup mode, that define the scan chains, much as you would do
for FastScan in preparation for a normal ATPG run. These commands are explained in
“Defining the Scan Data” in the Scan and ATPG Process Guide.
You can include these commands in a dofile or invoke the dofile that DFTAdvisor generated to
define clocks and scan chains. For example:
//
// Generated by DFTAdvisor
//
add scan groups grp1 my_atpg_setup.testproc
add scan chains chain1 grp1 edt_si1 edt_so1
add scan chains chain2 grp1 edt_si2 edt_so2
add scan chains chain3 grp1 edt_si3 edt_so3
...
add scan chains chain98 grp1 edt_si98 edt_so14
add scan chains chain99 grp1 edt_si99 edt_so15
add scan chains chain100 grp1 edt_si100 edt_so16
add write controls 0 ramclk
add read controls 0 ramclk
add clocks 0 clk
Other parameters specify whether to create DFF-based or latch-based EDT logic and whether to
include bypass circuitry in the EDT logic, lockup cells in the decompressor, and/or pipeline
stages in the compactor. The tool defaults for these parameters are as follows:
Mentor Graphics highly recommends that you not disable lockup cell synthesis. Doing so can
lead to DRC violations in the pattern generation phase and inability to generate valid patterns.
The tool inserts lockup cells not only to prevent clock skew, but also to control cycle boundaries
between the EDT logic and the scan chains. This ensures no coverage loss occurs in bypass
mode because of dependencies created by concatenating scan chains. It also enables the tool to
map EDT patterns into bypass mode (Save Patterns -Binary -EDT_bypass).
For a discussion of lockup cells, refer to the section, “Merging Chains with Different Shift
Clocks” in the Scan and ATPG Process Guide. For more detailed information on the tool’s use
of lockup cells and pipeline stages in EDT, see the Chapter 7 sections, “Using Pipeline Stages in
the EDT Compactor,” and “Understanding How Lockup Cells are Inserted.”
During setup, before you generate the EDT logic, you can optionally specify a length range for
the longest scan chain using the -Longest_chain_range switch. As long as any subsequent scan
chain modifications do not result in the longest scan chain exceeding the boundaries of this
range, you will not have to regenerate the EDT logic because of a shortening or lengthening of
the longest chain.
Note
This applies to scan chain length only. For example, you could reorder the scan chains in
a way that necessitates EDT logic regeneration even though the length of the longest
chain remained within the range specified with the -Longest_chain_range switch. Refer
to “Reordering Scan Chains” in Chapter 3 for more information.
Note
The IP version applies to just the hardware architecture and is only incremented when
that changes. A newer version of TestKompress, in which only the kernel has been
updated but the logic generated is functionally the same, will have the same IP version
number as before. Only the software version will change.
Using the latest edition of the tool, you can thus still generate patterns for the older EDT logic
architectures. By default, the tool assumes the EDT logic version is identical to the currently
supported version.
Note
Because the Report EDT Configuration command needs a flat model and DRC results to
produce the most useful information, you usually use this command in other than Setup
mode. For an example of the command’s output when issued after DRC, see “DRC when
EDT Pins are Shared with Functional Pins” later in this chapter.
Figure 4-2. Example of a Basic EDT Pin Configuration (External EDT Logic)
Design Design
Primary Wrapper Primary
Inputs Core Outputs
portain[7] portain[7] q1 q1
portain[6] portain[6] q2 q2
portain[5] portain[5]
a1 a1
scan_enable scan_enable
EDT Logic
edt_bypass bypass
edt_clock clock
edt_update update
The default configuration consists of pins for the EDT clock, update, and bypass inputs. There
are also two additional pins (one input and one output) for each scan channel. If you do not
rename an EDT pin or share it with a functional pin, as described in the “Defining Shared Pins”
section, TestKompress assigns the default EDT pin name shown.
To see the names of the EDT pins, issue the Report EDT Pins command:
Figure 4-3 shows how the preceding pin configuration looks if the EDT logic is inserted into a
design netlist that includes I/O pads (internal EDT logic location). Notice that the EDT control
and channel I/O pins are now connected to internal nodes of I/O pads that are part of the core
design.1 You enable the tool to make these connections by specifying the internal node to which
you want each EDT control and channel I/O to connect. This is described later, in the section,
“Specifying Internal Node Connections for EDT Pins (Internal Flow only).”
Figure 4-3. Example of a Basic EDT Pin Configuration (Internal EDT Logic)
Design Design
Primary Design Core with I/O pads Primary
Inputs Module A Outputs
portain[7] portain[7] q1 q1
portain[6] portain[6] q2 q2
portain[5] portain[5]
a1 a1
scan_enable scan_enable
internal node
(I/O pad output)
EDT Logic
edt_bypass bypass internal node
(I/O pad input)
edt_clock clock
edt_update update
1. With the internal flow, you would typically direct the tool to connect the EDT control and channel I/O pins
to internal nodes as described in the text. However, if needed, you can have the tool connect the control and
channel I/Os to top level pins.
For channel input pins and control pins, you use the -Inv switch to specify (on a per pin basis) if
a signal inversion occurs between the chip input pin and the input to the EDT logic. For
example, if an I/O pad you intend to use for a channel pin inverts the signal, you must specify
the inversion in the EDT IP Creation Phase. This is true whether you add I/O pads to the design
after the EDT IP Creation Phase (external flow) or before (internal flow). TestKompress
requires the pin inversion information so it can generate an EDT test procedure that operates
correctly with the full netlist read into the tool in the Pattern Generation Phase.
If bypass circuitry is implemented, you need to force the bypass control signal to enable or
disable bypass mode. When you use TestKompress to generate EDT patterns, you disable
bypass mode by setting the control signal to the off state. When you generate regular ATPG
patterns, using FastScan for example, you must enable the bypass mode by setting the bypass
control signal to the on state. The logic level associated with the on or off state depends on
whether you specify to invert the signal. The bypass control pin is forced in the automatically
generated test procedure.
In all cases, EDT pins that are shared with bidirectional pins must have the output enable signal
configured so that the pin has the correct direction during scan. The following list describes the
circumstances under which the EDT pins can be shared.
Scan channel output pin—Cannot be shared with a pin that is bidirectional or tri-state at the
core level. This is because the tool includes a multiplexer between the EDT compactor and the
output pad when a channel output pin is shared, and tri-state values cannot pass through the
multiplexer. A scan channel output pin that later will be connected to a pad and is bidirectional
at the top level is allowed.
Note
Scan channel output pins that are bidirectional need to be forced to Z at the beginning of
the load_unload procedure. Otherwise, the tool is likely to issue a K20 or K22 rule
violation during DRC, without indicating the reason.
EDT clock—Must be defined as a clock and constrained to its defined off state. If shared with a
bit of a bus, problems can occur during synthesis. For example, Design Compiler does not
accept a bit of a bus being a clock. The EDT clock pin must only be shared with a non-clock pin
that does not disturb scan cells; otherwise, the scan cells will be disturbed during the
load_unload procedure when the EDT clock is pulsed. This restriction might cause some
reduced coverage. Mentor Graphics recommends you use a dedicated pin for the EDT clock, or
share the EDT clock pin only with a functional pin that controls a small amount of logic. If any
loss of coverage is not acceptable, then you must use a dedicated pin.
EDT reset—Should be defined as a clock and constrained to its defined off state. If shared with
a bit of a bus, problems can occur during synthesis. For example, Design Compiler does not
accept a bit of a bus being a clock. The EDT reset pin must only be shared with a non-clock pin
that does not disturb scan cells. This restriction might cause some reduced coverage. Mentor
Graphics recommends you use a dedicated pin for the EDT reset, or share the EDT reset pin
only with a functional pin that controls a small amount of logic. If any loss of coverage is not
acceptable, then you must use a dedicated pin.
EDT update—Can be shared with any non-clock pin. Because the EDT update pin is not
constrained, sharing it has no impact on test coverage.
Scan enable—As for regular ATPG, this pin must be dedicated in test mode; otherwise, there
are no additional limitations. EDT only uses it when you share channel output pins. Because it
is not constrained, sharing it has no impact on test coverage.
Bypass (optional)—Must be forced during scan (forced on in the bypass test procedures and
forced off in the EDT test procedures). It is not constrained, so sharing it has no impact on test
coverage. For more information on bypass mode, see Chapter 7, “Bypassing EDT Logic.”
Note
RTL generation allows sharing of control pins. The preceding restrictions ensure the EDT
circuitry operates correctly and with only negligible loss, if any, of test coverage.
Creating EDT Logic When Sharing Functional Pins with EDT Pins
The synthesis methodology does not change when you specify pin sharing. You do, however,
need to add a step to the EDT IP Creation Phase. In this extra step, you define how you want
pins to be shared. Suppose, for example, that you are utilizing the tool’s external flow; you have
two scan channels in your design and you want to share three of the channel pins, as well as the
EDT update and EDT clock pins, with functional pins. Assume the functional pins have the
names shown in Table 4-1.
Note
In the external flow, the pin sharing you specify is implemented in a wrapper the tool
creates when you generate the EDT logic. The “Top-level Wrapper” section contains
additional information about this wrapper. In the internal flow, the pin sharing is
implemented when you insert and synthesize the EDT logic.
When the pin you specify in the command already exists in the core, TestKompress will share
the EDT signal with that pin. The figure shows an example of this for the EDT clock signal. The
command, “set edt pins clock a1”, will cause TestKompress to share the EDT clock with the a1
pin instead of creating a dedicated pin for the EDT clock. If you specify a pin name that does
not exist in the core, the tool will create a dedicated EDT pin with the specified name. For
example, “set edt pins bypass my_bypass” will cause the tool to create the new pin, my_bypass,
and connect it to the EDT bypass pin.
For each EDT pin you do not share or rename using the Set EDT Pins command, if its default
name is unique, TestKompress creates a dedicated pin with the default name. If the default
name is the same as a core pin name, the tool automatically shares the EDT pin with that core
pin. Table 4-2 lists the default EDT pin names.
Table 4-2. Default EDT Pin Names
EDT Pin Description Default Name
Clock edt_clock
Reset edt_reset
Update edt_update
Scan Enable scan_en
Bypass mode edt_bypass
Scan Channel Input “edt_channels_in” followed by the
index number of the channel
Scan Channel Output “edt_channels_out” followed by
the index number of the channel
When you share a pin between an EDT channel output and a core output, TestKompress
includes a multiplexer in the circuit together with the EDT logic, but in a separate module at the
top level. An example is shown in red in Figure 4-4 for the shared EDT channel output 2 signal,
and the core output signal, q2. As previously mentioned, the multiplexer is controlled by the
defined scan enable pin. If a scan enable pin is not defined, the tool adds one with the EDT
default name, “scan_en”.
Here are the commands that would establish the example pin sharing shown in Table 4-1:
If you report the EDT pins using the “report edt pins” command after issuing the preceding
commands, you will see that the shared EDT pins have the same name as the functional core
pins. You will also see, for each pin, whether the pin’s signal was specified as inverted. Notice
that the listing now includes the scan enable pin because of the shared EDT output pin:
Figure 4-4. Example with Pin Sharing Shown in Table 4-1(External EDT Logic)
EDT Logic
my_bypass bypass
clock
update
ch. 1 ch. 1
input output edt_channels_out1
ch. 2 ch. 2
input output
After DRC, you can use “report drc rules k13” to see a report of the pins the tool will add to the
top level of the design to implement the EDT hardware.
Specifying Internal Node Connections for EDT Pins (Internal Flow only)
When you use the internal flow, you must provide TestKompress with the name of each internal
node (instance pin name) to which the tool should connect each EDT control or channel pin.
You use the Set EDT Pins command to specify the internal node names.
Note
Before specifying internal nodes, you must set up the tool for the internal flow by issuing
the “set edt -location internal” command.
For every EDT pin, you should provide the name of a design pin and the corresponding instance
pin name for the internal node that corresponds to it. The latter is the input (or output) of an I/O
pad cell where you want the tool to connect the output (or input) of the EDT logic. For example:
The first argument “clock” is the description of the EDT pin; in this case the EDT clock pin.
The second argument “pi_edt_clock” is the name of the top level design pin on the I/O pad
instance. The last argument is the instance pin name of the internal node of the pad. The pad
instance is “edt_clock_pad” and the internal pin on that instance is “po_edt_clock”.
If you specify only one of the pin names, the tool treats it as the I/O pad pin name. If you specify
an I/O pad pin name, but not a corresponding internal node name, the tool will connect the EDT
logic directly to the top level pin, ignoring the pad. This may result in undesirable behavior.
If you do not specify either pin name, and TestKompress does not find a pin at the top level by
the default name, it adds a new port for the EDT pin at the top level of the design. You will need
to add a pad later that corresponds to that port.
For the internal flow, the Report EDT Pins command displays an additional column that lists the
names of the nodes to which the EDT pins are connected. For example (note that the pin
inversion column is omitted for clarity):
Related Commands:
Running DRC
DRC is performed automatically when you leave setup mode:
TestKompress shares DRC rules with the other Mentor Graphics DFT tools (DFTAdvisor,
FastScan and FlexTest). In addition, a class of EDT-specific “K” rules are checked. The section,
“EDT Rules (K Rules)” in the Design-for-Test Common Resources Manual provides reference
information on each EDT-specific rule.
Notice the DRC message describing the EDT rules in the following example transcript. This
transcript is for the design with two scan channels shown in Figure 4-2, in which none of the
EDT pins are shared with functional pins:
// ------------------------------------------------------
// Begin EDT rules checking.
// ------------------------------------------------------
// Running EDT IP Creation Phase.
// 7 pin(s) will be added to the EDT wrapper. (K13)
// EDT rules checking completed, CPU time=0.01 sec.
// All scan input pins were forced to TIE-X.
// All scan output pins were masked.
// ----------------------------------------------------------
These messages indicate TestKompress will add seven pins, which include scan channel pins, to
the top level of the design. The last two messages refer to pins at either end of the core level
scan chains. Because these pins are not connected to the top level wrapper (external flow) or the
top level of the design (internal flow), the tool does not directly control or observe them in the
capture cycle when generating test patterns. To ensure values are not assigned to the internal
scan input pins during the capture cycle, the tool automatically constrains all internal scan chain
inputs to X (hence, the “TIE-X” message). Similarly, TestKompress masks faults that propagate
to the scan chain output nodes. This ensures a fault is not counted as observed until it propagates
through the compactor logic. The tool only adds constraints on scan chain inputs and outputs
added within the tool as PIs and POs.
Note
To properly configure the internal scan chain inputs and outputs so TestKompress can
constrain them as needed, you must use the -Internal switch with the Add Scan Chains
command when setting up for pattern generation in the Pattern Generation Phase. This
switch does, on internal scan nodes, the same thing that the Add Primary Inputs and Add
Primary Outputs commands do on non-EDT designs.
// ----------------------------------------------------------
// Begin EDT rules checking.
// ----------------------------------------------------------
// Running EDT IP Creation Phase.
// Warning: 1 EDT clock pin(s) drive functional logic. May
lower test coverage when pin(s) are constrained. (K12)
// 2 pin(s) will be added to the EDT wrapper. (K13)
// EDT rules checking completed, CPU time=0.00 sec.
// All scan input pins were forced to TIE-X.
// All scan output pins were masked.
// ----------------------------------------------------------
Notice only two EDT pins are added, as opposed to seven pins before pin sharing. Shared pins
can create a test situation in which a pin constraint might reduce test coverage. The K12
warning about the shared EDT clock pin points this out to you. For details, refer to “Sharing
Functional Pins with EDT Control and Channel Pins” on page 66.
If you report the current configuration with the Report EDT Configuration command after
DRC, you will get more useful information. For example:
Notice that the number of shift cycles (381 in this example) is more than the length of the
longest chain. This is because the EDT logic requires additional cycles to set up the
decompressor for each EDT pattern (eight in this example). The number of extra cycles is
dependent on the EDT logic and the scan configuration.
1. The “created” prefix is used for now on when referring to these files in examples.
• Location of the EDT logic (internal or external with respect to the design netlist)
• Number of external scan channels
• Number of internal scan chains and the length of the longest chain
• Clocking of the first and last scan cell in every chain (if lockup cells are inserted)
• Names of the pins
Except for the clocking of the scan chain boundaries, which affects the insertion of lockup cells,
nothing in the EDT hardware depends on the functionality of the core logic.
Note
Generally, you must regenerate the EDT logic if you reorder the scan chains. This is
because the reordering typically alters the clocking of the first and last scan cells in every
scan chain on which the lockup cells depend. You can reorder the scan chains or make
other changes to the core, without regenerating the EDT logic, if the changes satisfy two
conditions:
1) They do not affect the clocking of the first and last scan cell in every scan chain, and
2) They do not alter the length of the longest scan chain. You can handle this second
condition with the -Longest_chain_range switch. See “Specifying a Range for the Length
of the Longest Scan Chain” on page 63 for details.
The following sections list additional details about each of the generated files.
Top-level Wrapper
Figure 4-5 illustrates the contents of the new top level netlist file, created_edt_top.v.
TestKompress generates this file only if you are using the external flow.
edt_top
edt
edt_clock
edt_update
edt_bypass
Scan chain in
core Scan chain out
} Functional
Input
Pins
Functional
Output
Pins
}
edt_pinshare_logic
(optional)
This netlist contains a module, “edt_top”, that instantiates your original core netlist and an “edt”
module that instantiates the EDT logic circuitry. If any EDT pins are shared with functional
pins, “edt_top” instantiates an additional module called “edt_pinshare_logic” (shown as the
optional block in Figure 4-5). The EDT pins and all functional pins in the core are connected to
the wrapper. Scan chain pins are not connected because they are driven and observed by the
EDT block.
Because scan chain pins in the core are only connected to the “edt” block, these pins must not
be shared with functional pins. For more information, refer to “Avoiding Sharing Scan Chain
Pins with Functional Pins,” in Chapter 3. Scan channel pin sharing (or renaming) that you
specified using the Set EDT Pins command is implemented in the top-level wrapper. This is
discussed in detail in “Sharing Functional Pins with EDT Control and Channel Pins,” earlier in
the chapter.
EDT Circuitry
Figure 4-6 shows a conceptual view of the contents of the file, created_edt.v.
edt
edt_decompressor
From
Input
Pins
} }Scan channel
Inputs
edt_clock
edt_update Scan chain inputs
edt_bypass_logic
edt_bypass
Scan
Chain
Inputs
} } To core
From
Core
} } Scan chain
Outputs
Scan
Channel
Outputs
} }
To
Output
Pins
edt_compactor
Scan chain Scan
Outputs Channel
Outputs
edt_clock
edt_update
This file contains the top level “edt” module, which instantiates the two main blocks
(decompressor and compactor, shown conceptually in Figure 1-2). When you specify to include
bypass circuitry, the “edt” module will contain an additional module for the bypass circuitry.
The following two blocks are always present:
• The decompressor, which is connected between the scan channel input pins and the
internal scan chain inputs
• The compactor, which is connected between the internal scan chain outputs and the scan
channel output pins
Core
Generated only when you use the tool’s external flow, the file created_core_blackbox.v
contains a black-box description of the core netlist. This can be used when synthesizing the
EDT block so the entire core netlist does not need to be loaded into the synthesis tool.
Note
Loading the entire design is advantageous in some cases as it helps optimize the timing
during synthesis.
External Flow
The following is an example script, in the default TCL format, for a core design that contains a
top level Verilog module named “cpu”:
#************************************************************************
# Synopsys Design Compiler synthesis script for created_edt_top.v
#
#************************************************************************
current_design cpu_edt_top
# Timing specification
create_clock -period 10 -waveform {0 5} edt_clock
# Compile design
uniquify
set_dont_touch cpu
compile -map_effort medium
Internal Flow
TestKompress generates a sample Design Compiler synthesis script, created_dc_script.scr. For
the internal flow, this script is more complex than that generated for external flow because it
includes additional commands that help instantiate the EDT logic within the design core.
Typically, you will need to modify this script. Here is an example script in TCL format,
followed by a detailed description of the tasks it performs:
#************************************************************************
# Synopsys Design Compiler script for EDT logic insertion
#
#************************************************************************
# Initialize DC variables
set bus_naming_style {%s[%d]}
create_net retimetest_edt_mux_2_to_1_i1_out_net
connect_net retimetest_edt_mux_2_to_1_i1_out_net [find pin
retimetest_edt_mux_2_to_1_i1/z_out]
# Synthesize EDT IP
current_design retimetest_edt
# Timing specification
create_clock -period 10 -waveform {0 5} edt_clock
# Compile design
uniquify
compile -map_effort medium
# Compile design
compile -map_effort medium
The preceding script performs the following EDT logic insertion and synthesis steps:
1. Fixing the bus naming style—Because bus signals can be expressed in either bus form
(for example, foo[0] or foo(0)), or bit expanded form (foo_0), this command fixes the
bus style to the bus form. This is particularly necessary during IP insertion because the
script looks for the EDT logic bus signals to be connected to the scan chains.
2. Read input files—Next, the input gate level netlist for the core and the RTL description
of the EDT logic are read.
3. Set current design—The current design is set to the top-most level of the input netlist.
4. Instantiate the EDT module and 2x1 multiplexer module—The EDT module is
instantiated within the top-level of the design. If there is sharing between EDT channel
outputs and functional pins, a 2x1 multiplexer module (the description is included in the
created_edt.v file) is also instantiated.
5. Connect scan chain inputs—As mentioned earlier, scan chain inputs should be
connected to the top level without any I/O pads associated with them. This part of the
script disconnects the nets that are connected to the scan chain input ports and connects
them to the EDT module.
6. Remove scan chain input ports—Remove the dangling scan chain input ports that are
not connected to any logic after preceding step 5.
7. Connect scan chain outputs—Same as step 5, except that now the scan chain outputs are
connected to the EDT logic.
8. Remove scan chain output ports—Scan chain output ports, which are left dangling after
step 7, are removed from the top level.
9. Connect EDT control pins—The EDT control pins are connected to the output of pre-
existing pads. This is done only if you specified an internal node pin to which to connect
the EDT control signal. If not, a new port will be created and the EDT control pin will be
connected to the new port. The script shows the connection for only the edt_clock
signal. Similar commands are necessary to connect each of the other EDT control pins.
10. Connect EDT channel input pins—The next set of commands create a new port for the
input channel pin and connect the EDT input channel pin to the newly created port. This
has to be repeated for each input channel pin. This is done only when no internal node
name was specified for the EDT pin. If an internal node name was specified, the script
would be the same as in step 9.
Note
Be aware you need to add an I/O pad later for each new port that is created.
11. Connect EDT channel output pin to a specified internal node (or a top-level pin) that is
driven by functional logic—The output channel pin in this case is shared with a
functional pin. Whenever the node is shared with functional logic or is connected to
TIE-X (a black box is assumed in such cases), a multiplexer is inserted. However, if the
specified internal node is connected to a constant signal value, the net is disconnected
and connected to the EDT channel output pin. This section of the script inserts a
multiplexer and connects the inputs from the EDT logic and the functional net to the
multiplexer inputs. The output of the multiplexer is connected to the input of the I/O pad
cell.
Note
The select input of the multiplexer is connected to the existing scan enable signal, as the
functional or scan chain output can be propagated through the multiplexer depending on
the shift and capture modes of scan operation.
You should specify the name of the scan enable signal. If a name is not specified and a
pin with a default name (scan_en) does not exist at the top level, a new scan_en pin is
created.
12. Connect EDT channel output pin to a non-shared specified internal node (or a top-level
pin)—In this case, the specified internal node is not shared with any functional logic.
The tool removes any net that is connected to the internal node. It creates a new net and
connects it to the channel output pin.
13. Connect system clocks to EDT logic—For the bypass mode, scan chains are
concatenated so that the EDT logic can be bypassed and normal ATPG scan patterns can
be applied to the circuit. During scan chain concatenation, lockup cells are often needed
(especially if the clocks are different or the clock edges are different) to guarantee
proper scan shifting. These “bypass” lockup cells are driven by the clocks that drive the
source or the destination scan cells. As a result, some system clocks have to be routed to
the bypass module of the EDT logic. Clock lines are tapped right before they fan out to
multiple modules or scan cells and are brought up to the topmost level and connected to
the EDT logic.
14. Synthesis of RTL code—At this point, the insertion of the EDT logic within the top-
level of the original core is complete. The subsequent parts of the script are mainly for
synthesizing the logic. This part of the script is almost the same as that of the external
flow, with the following exceptions: the EDT logic is synthesized first followed by the
EDT multiplexer(s). In both cases, the synthesis is local to the RTL blocks and does not
affect the core, which is already at the gate level.
15. Write out final netlist—Once the synthesis step is completed, Design Compiler writes
out a gate level netlist that contains the original core, the EDT logic, and any
multiplexers TestKompress added to facilitate sharing of output pins.
Input netlists can be huge, however, and it may take a lot of time or perhaps not even be
possible to run the synthesis tool. If your netlist is in this category, you can get TestKompress to
write out a reduced-size netlist especially for the synthesis run by including the
-Reduced_netlist switch with the Write EDT Files command. The reduced netlist includes only
the modules required for the synthesis tool to make the necessary connections between the pad
terminals and EDT logic pins. You provide this smaller file to the synthesis tool instead of the
entire input netlist. The tool writes the rest of the input netlist into a second netlist file that
excludes the modules written out in the “synthesis only” file but includes everything else. You
then use the output netlist from the synthesis run along with the second netlist as inputs for the
Pattern Generation Phase.
Figure 4-7 is a conceptual example of an input netlist. Each box represents an instance with the
instance_name/module_names shown. The small rectangles shaded with dots represent
instances of technology library cells. The black circles represent four internal EDT logic
connection nodes.
a1/ASUB
a_b/A_B
u1/ASUB1
u5/clkctrl
u7/D
u2/ASUB2
p3
When writing out the EDT files with the -Reduced_netlist switch, the tool would distribute the
modules between the two netlists as follows:
Note
The reduced netlist for synthesis does not include the technology library cells that have
EDT logic connection nodes because the port list is sufficient for making these
connections.
When writing out the architecture of a top-level entity in VHDL, all the lower-level cells
instantiated within are specified as components. A configuration specification that binds the
components to a particular entity/architecture pair is also written out. However, if you split the
netlist, not all sub-entities may have been defined in the reduced netlist file; so referencing them
may be an error. As an example, consider the following input netlist:
entity sub is
port (i : in std_logic; o : out std_logic);
end;
architecture gates of sub is
...
end;
entity top is
port (i1, i2 : in std_logic; o1, o2 : in std_logic);
end;
architecture gates of top is
component sub
port (i : in std_logic; o : out std_logic);
end component;
for ALL : sub
use entity WORK.sub(gates);
...
end;
If the entity top is included, but entity sub is excluded from the reduced synthesis netlist, then
the configuration specification (highlighted in bold) would be erroneous. For this reason, the
tool does not write out configuration specifications for any of the components when splitting a
VHDL netlist.
Dofile
The dofile includes setup commands and/or switches required for the Pattern Generation Phase.
An example dofile created_edt.dofile is shown below. The EDT-specific parts of this file are in
bold font.
//
// Written by TestKompress
//
// Define the instance names of the decompressor, compactor, and the
// container module which instantiates the decompressor and compactor.
// Locating those instances in the design allows DRC to provide more debug
// information in the event of a violation.
// If multiple instances exist with the same name, subtitute the instance
// name of the container module with the instance’s hierarchical path
// name.
Notice the -Internal switch used with the Add Scan Chains command. This switch must be used
for all compressed scan chains (scan chains driven by and observed through the EDT logic)
when setting up for EDT pattern generation. The reason for this requirement is explained in
“Running DRC,” earlier in the chapter.
Note
Be sure the scan chain input and output pin pathnames specified with the Add Scan
Chains -Internal command are kept during layout. If these pin pathnames are lost during
the layout tool’s design flattening process, the generated dofile will not work anymore. If
that happens, you must manually generate the Add Scan Chains -Internal commands,
substituting the original pin pathnames with new, logically equivalent, pin pathnames.
Note
If your design includes uncompressed scan chains (chains whose scan inputs and outputs
are primary inputs and outputs), you must define each such scan chain using the Add
Scan Chains command without the -Internal switch when setting up for EDT pattern
generation. You will need to add these commands to the dofile manually.
Other commands in this file add the EDT clock and constrain it to its off state, specify the
number of scan channels, and specify the version of the EDT logic architecture. For information
about how you can use this dofile in the EDT Pattern Generation Phase, refer to the Chapter 6
section, “Preparing for Pattern Generation.”
file that you used in the IP Creation Phase, and making additions that will drive the EDT logic.
The following is an example of a test procedure file, created_edt.testproc, written by
TestKompress. The EDT-specific parts of this file are shown in bold font. For complete details
about the EDT-specific functionality included in this file, refer to the Chapter 6 section,
“Preparing for Pattern Generation.”
//
// Written by TestKompress
//
set time scale 1.000000 ns ;
set strobe_window time 100 ;
timeplate gen_tp1 =
force_pi 0 ;
measure_po 100 ;
pulse clk 200 100;
pulse edt_clock 200 100;
pulse ramclk 200 100;
period 400 ;
end;
procedure capture =
timeplate gen_tp1 ;
cycle =
force_pi ;
measure_po ;
pulse_capture_clock ;
end;
end;
procedure shift =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force_sci ;
force edt_update 0 ;
measure_sco ;
pulse clk ;
pulse edt_clock ;
end;
end;
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force clk 0 ;
force edt_bypass 0 ;
force edt_clock 0 ;
force edt_update 1 ;
force ramclk 0 ;
force scan_en 1 ;
pulse edt_clock ;
end ;
apply shift 26;
end;
procedure test_setup =
timeplate gen_tp1 ;
cycle =
force edt_clock 0 ;
end;
end;
Dofile
This example dofile, created_bypass.dofile, enables you to run regular ATPG. The dofile
specifies the scan channels as chains because in bypass mode, the channels connect directly to
the input and output of the concatenated internal scan chains, bypassing the EDT circuitry.
//
// Written by TestKompress
//
//
// Written by TestKompress
//
set time scale 1.000000 ns ;
set strobe_window time 100 ;
timeplate gen_tp1 =
force_pi 0 ;
measure_po 100 ;
pulse clk 200 100;
procedure capture =
timeplate gen_tp1 ;
cycle =
force_pi ;
measure_po ;
pulse_capture_clock ;
end;
end;
procedure shift =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force_sci ;
measure_sco ;
pulse clk ;
end;
end;
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force clk 0 ;
force edt_bypass 1 ;
force ramclk 0 ;
force scan_en 1 ;
end ;
apply shift 125;
end;
After you run TestKompress to create the EDT logic, you can optionally generate test patterns
to estimate the test coverage and scan data volume. You do not need to generate patterns at this
point in the flow; however, the estimates you obtain for a given configuration can be useful (for
comparison with the test results you obtained without EDT in your design).
You should not save patterns you generate at this stage in the EDT flow. The tool emulates the
combined core and EDT logic when it generates them, but the patterns are not the same as those
the tool will generate after you synthesize the core and EDT logic into a unified gate level
netlist. Therefore, use these patterns for pattern count and coverage estimation purposes only.
You generate the patterns for simulation and manufacturing test later, during the Pattern
Generation Phase. For this optional pattern generation, use commands similar to those you
would use in FastScan. For example:
You can repeat this optional pattern generation for different configurations to experiment with
coverage and data volume. For situations where the number of channels is fixed, you can repeat
scan insertion multiple times to set up the design with different numbers of scan chains. When
you rerun TestKompress to regenerate the EDT logic with the same number of scan channels,
the compression will be different for each scan chain configuration.
Note
If you obtain compression lower than you expect, refer to “If EDT Compression is Less
Than Expected” on page 238 for troubleshooting suggestions. If test coverage is less than
you can obtain without EDT, refer to “If Test Coverage is Less Than Expected” on
page 239.
This chapter describes issues related to the synthesis of the EDT logic. Figure 5-1 shows the
layout of this chapter as it applies to the synthesis process.
Create
EDT Logic
(TestKompress)
1. Overview
Synthesize
EDT Hardware 2. Preparing for Synthesis
(Design Compiler)
3. Synthesizing a Netlist with the EDT
Generate/Verify
EDT Patterns
(TestKompress)
Overview
After you create the EDT logic, the next step is to synthesize it. If you are using the internal
flow, insertion of the IP between the I/O pads and the core occurs as a part of synthesis.
TestKompress creates a basic Design Compiler synthesis script, in either dcsh or TCL format,
that you can use as a starting point. Running the synthesis script is a separate step where you
exit TestKompress and use Design Compiler to synthesize the EDT logic. Of course, you can
use any synthesis tool; the generated Design Compiler script is simply meant to aid you in
developing a script tailored to your needs and the synthesis tool you use.
Note
If you use the external flow, be sure to insert boundary scan and I/O pads after you create
the EDT logic, but before you synthesize it. These topics are covered in the following
section, “Preparing for Synthesis.”
You may be able to run the script without modification to synthesize (and insert if you are using
the internal flow) the EDT logic, provided the following are true:
Note
The syntax of the .synopsys_dc.setup file and the Design Compiler synthesis script differ
depending on which format, dcsh or TCL, they support.
Note
If the .synopsys_dc.setup file does not exist, you must add the library file references to the
synthesis script.
Note
You can add boundary scan and I/O pads simultaneously using BSDArchitect.
Boundary scan cells must not be present in your design before you add the EDT logic. To
include boundary scan in your design, you perform an additional step after the EDT Logic
Creation Phase. In this step, you can use any tool you want to insert boundary scan. As shown in
Figure 5-2, the circuitry should include the boundary scan register, TAP controller, and
(optionally) I/O pads.
edt_top_bscan
edt_top
tap
edt
bsr_instance_1
core
pad_instance_1
(optional)
The Mentor Graphics boundary scan tool, BSDArchitect, creates a Verilog RTL description
containing a wrapper that instantiates the EDT wrapper, which includes the EDT logic and the
core design and the boundary scan circuitry. This causes one additional level of hierarchy to be
inserted outside the EDT wrapper. For a detailed description of the EDT boundary scan flow,
refer to the Chapter 7 section, “EDT and Boundary Scan (External Flow).”
Next, you synthesize a gate-level netlist of the EDT logic. If you use Design Compiler to
synthesize the netlist, examine the .synopsys_dc.setup file and verify that it points to the correct
libraries. Also, examine the Design Compiler synthesis script generated by TestKompress in the
IP Creation Phase and make any needed modifications. Refer to “Design Compiler Synthesis
Script” in Chapter 4 for example scripts for EDT logic written in Verilog RTL.
Note
When using the external flow, you will need to modify this script to read in the RTL
description of the boundary scan circuitry if you added boundary scan. Refer to
“Preparing to Synthesize Boundary Scan and EDT IP” for an example Design Compiler
synthesis script, with modifications for boundary scan.
Three Design Compiler commands TestKompress includes in the synthesis script for either flow
merit further comment to clarify what they do:
Note
This is not due to a problem in the generated RTL; rather, it is a Design Compiler issue. If
the “TSGEN” keyword exists in the synthesized netlist, you must correct it. For details on
how to proceed, refer to “Incorrect References to \**TSGEN** in Synthesized Netlist”
on page 235.
This chapter describes how you use TestKompress to generate EDT patterns. In this part of the
flow, referred to as the EDT Pattern Generation Phase, you generate the final set of test vectors
for the design. The chapter also describes how to verify the generated patterns. Figure 6-1
shows the layout of this chapter and the processes involved.
After you insert I/O pads and boundary scan, and synthesize all the added circuitry (including
the EDT logic), invoke TestKompress on the synthesized top level netlist (Verilog or VHDL)
and generate the EDT test patterns.
Note
You can write test patterns in the same formats FastScan uses (for example, VHDL,
Verilog, and WGL).
To prepare for EDT pattern generation, check that the tool’s EDT capability is on1, and
configure the tool the same as when you created the IP. For example, if you created the IP with
one scan channel, you must generate test patterns for circuitry with one channel.
Note
The tool issues DRC violations if you attempt to generate patterns for a different number
of scan channels than you used in the IP.
You must also add scan chains in the same order the tool used in the IP Creation Phase, as the
tool infers connections to the EDT logic from this order. To reliably add the correct number of
chains in the correct order in the Pattern Generation Phase, Mentor Graphics recommends you
use the setup dofile the tool generated in the IP Creation Phase. You can, of course, add your
own customizations to this dofile.
The Report Scan Chains command lists the scan chains in the same order they were added
originally. For additional information, refer to the next section, “Using the Automatically
Generated EDT Dofile and Procedure File.”
Compared to when you generated test patterns using FastScan with the scan-inserted core
design (see “Running FastScan ATPG (Optional)”), there are certain differences in the tool
setup. One of the differences arises because in the Pattern Generation Phase, you need to set up
the patterns to operate the EDT circuitry. This is done by exercising the EDT clock, update and
bypass (if present) control signals as illustrated in Figure 6-2.
scan enable
scan clock
EDT update
EDT clock
EDT bypass
EDT reset
1. Issue a “report environment” command and look for the line, “EDT = ON (compressed patterns)”. If
necessary, enter a “set edt on” command to turn on EDT.
Prior to each scan load, the EDT circuitry needs to be reset. This is done by pulsing the EDT
clock once while EDT update is high.
During shifting, the EDT clock should be pulsed together with the scan clock(s). In Figure 6-2,
both scan enable and EDT update are shown as 0 during the capture cycle. These two signals
can have any value during capture; they do not have to be constrained. On the other hand, the
EDT clock must be 0 during the capture cycle. The operation of these signals is described in the
load_unload and shift procedures in the test procedure file the tool generates in the IP Creation
Phase. An example of this file is shown in the Chapter 4 section, “EDT Pattern Generation
Files.”
• Identify the EDT clock signal as a clock and constrain it to the off-state (0) during the
capture cycle. This ensures the tool does not pulse it during the capture cycle.
• Use the -Internal option with the Add Scan Chains command to define the compressed
scan chains as internal, as opposed to external channels. This definition is different from
the definition you used during the IP Creation Phase because the scan chains are now
connected to internal nodes of the design and not to primary inputs and outputs. Also,
scan_in and scan_out are internal nodes, not primary inputs or outputs.
• If your design includes uncompressed scan chains (chains you did not define with the
Add Scan Chains command when setting up for the IP Creation Phase and whose scan
inputs and outputs are primary inputs and outputs), you must define each such scan
chain using the Add Scan Chains command without the -Internal switch when setting up
for EDT pattern generation.
• If you add levels of hierarchy (due, for example, to boundary scan or I/O pads), revise
the pathnames to the internal scan pins listed in the generated dofile. An example dofile
with this modification is shown in the Chapter 7 section, “Modifying the EDT Dofile
and Procedure File for Boundary Scan.”
The test procedure file also needs modifications to ensure the EDT update signal is active in the
load_unload procedure and the EDT clock is pulsed in the load_unload and shift procedures.
These modifications are implemented automatically in the test procedure file written by
TestKompress in the IP Creation Phase, as follows:
• The timeplate used by the shift procedure is updated to include the EDT clock.
• In this timeplate, there must be a delay between the trailing edge of the clock and the end
of the period. Otherwise, a P3 (Procedure Rule #3) DRC violation will occur.
• The load_unload procedure is set up to initialize the EDT circuitry and apply shift a
number of times corresponding to the longest “virtual” scan chain (longest scan chain
plus initialization cycles) seen by the tester. The number of initialization cycles is
reported by the Report EDT Configuration command.
• The shift procedure is updated to include pulsing of the EDT clock signal and
deactivation of the EDT update signal.
• The EDT bypass signal is forced to a logic low if the EDT circuitry includes bypass
logic.
For an example of this test procedure file, refer to “Test Procedure File” in the “EDT Pattern
Generation Files” section of Chapter 4.
Verifying the IP
TestKompress uses two mechanisms to verify that the EDT logic will work as it is supposed to:
• K19 — This check simulates the EDT decompressor netlist and performs diagnostic
checks if a simulation-emulation mismatch occurs.
1. You can also run regular ATPG using the FastScan command-line mode of TestKompress. Simply enter a
“set edt off” command after invoking the tool to change to FastScan command-line mode.
• K20 — This check identifies the number of pipeline stages within the compactors, based
on simulation.
• K22 — This check simulates the EDT compactor netlist and performs diagnostic checks
if a simulation-emulation mismatch occurs.
For detailed descriptions of all the EDT design rules (K rules) checked during DRC, refer to the
“Design Rules Checking” chapter of the Design-for-Test Common Resources Manual.
How it Works
To better understand the enhanced chain test, you need to understand how the masking logic in
the compactor works. Included in every EDT pattern are mask codes that are decompressed and
shifted into a mask shift register as the pattern data is shifted into the scan chains. Once a
pattern’s codes are in this register, they are then parallel loaded into a hold register that places
the bit values on the inputs to a decoder. Figure 6-3 shows a conceptual view of the decoder
circuitry for a six chains/one channel configuration.
The decoder basically has a classic binary decoder within it and some OR gates. The classic
decoder decodes its n inputs to one-hot out of 2n outputs. The 2n outputs fall into one of two
groups: the “used” group or the “unused” group. (Unless the number of scan chains exactly
equals 2n, there will always be one or more unused outputs.)
Figure 6-3. Example Decoder Circuitry for Six Scan Chains and One Channel
Masking
gates
1
2
3
Chain To compactor
Outputs 4 XOR tree
5
6
Decoder
2n bits out
Classic decoder
used
decodes to 1-hot
out of 2n
n code bits in
unused
Each output in the used group is AND’d with one scan chain output. For a masked pattern, the
decoder typically places a high on one of the used outputs, enabling one AND gate to pass its
chain’s output for observation.
The decoder also has a single bit control input provided by the edt_mask signal. Unused outputs
of the classic decoder are OR’d together and the result is OR’d with this control bit. If any of the
OR’d signals is high, the output of the OR function is high and indicates the pattern is a non-
masking pattern. This OR output is OR’d with each used output, so that for a non-masking
pattern, all the AND gates will pass their chain’s outputs for observation.
The code scanned into the mask shift register for each channel of a multiple channel design
determines the chain(s) observed for each channel. If the code scanned in for a channel is a non-
masking code, that channel’s chains are all observed. If a channel’s code is a masking code,
usually only one of the chains for that channel is observed. The chain test essentially tests for all
possible codes plus the edt_mask control bit.
The enhanced chain test for a 10X configuration has a minimum of 18 patterns. These 18
patterns can be composed of the following non-masking and masking patterns: two non-
masking patterns (control bit is set), ten masking patterns (control bit is not set, codes
correspond to “used” codes), six non-masking patterns (control bit is not set, but codes result in
the one-hot selector being in the “unused” group).
The actual set of chain test patterns depends on how many chains each channel has. For
example, if you have two channels and 19 chains, the first channel will have ten chains and the
second, nine chains. In this case, the composition of the chain test will be:
So, depending on which chain test is failing, it is possible to deduce which chain might be
causing problems. In the preceding example, if a failure occurred for any of the patterns 2
through 10, you could immediately map it back to the failing chain and, based on the cycle
information, to a failing cell. For pattern 11, if channel 1 had a failure, you similarly could map
it back to a chain and a cell. If only a non-masking pattern or a masking pattern with “unused”
codes failed, then mapping is a little bit tricky. But in this case, most likely masking patterns
would fail as well.
Note
99+% coverage can be achieved in any event by including a bypass mode chain test (the
standard chain test).
The size of the chain test pattern set depends on the configuration of the EDT logic and the
specific design. Typically, about 18 chain test patterns are required when you approach 10X
compression.
The chain+IP test targets faults in the EDT logic as well. The tool always performs the chain+IP
test, so adding faults on the entire design is not necessary in order to get IP test coverage. To
avoid incorrectly low reported test coverage, the best practice is to add faults on the core only.
In the IP Creation Phase, you invoked TestKompress on the core level of the design. For the
Pattern Generation Phase, you invoke the tool on the synthesized top level of the design that
includes synthesized pads, boundary scan if used, and the EDT logic. Here is an example
invocation on a Verilog file named created_edt_top.v, assumed here to be the top level file the
tool generated in the IP Creation Phase:
For a description of how this file is generated, refer to the Chapter 4 section, “Creating the RTL
Description of the EDT Logic.” Next, you need to set up TestKompress. To do this, invoke the
dofile written by the tool in the IP Creation Phase. For example:
For information about the EDT-specific contents of this dofile, refer to “EDT Pattern
Generation Files” in Chapter 4. Enter ATPG mode and verify that no DRC violations occur. Pay
special attention to the EDT DRC messages.
Now, you can enter the commands to generate the EDT patterns. If you ran FastScan on just the
core design prior to inserting the EDT logic, it is useful to add faults on just the core now, to
enable you to make valid comparisons of test performance using EDT versus without EDT.
Another reason to add faults on the core is to avoid incorrectly low reported test coverage, as
explained earlier in “Adding Faults on the Core Only is Recommended.”
The Report Scan Volume command provides reference numbers when analyzing the achieved
compression.
Note
If you reorder the scan chains after you generate EDT patterns, you must regenerate the
patterns. This is true even if the EDT logic has not changed. EDT patterns cannot be
modified manually to accommodate the reordered scan chains.
Figure 6-4 illustrates an important characteristic of the EDT circuitry in the Pattern Generation
Phase.
floating PI
D
Chain 4
e
c C
o o
m Chain 3 m
p p
SI a SO
r
e c
Chain 2 t
s o
s r
o
Chain 1
r
There is no physical connection between the decompressor and the internal scan chains, as seen
within the tool in the Pattern Generation Phase. This modification occurs only within the tool,
as a result of the “add scan chains -internal” command. TestKompress does not modify the
external netlist in any way.
Basically, TestKompress breaks the connection and turns the internal scan chain inputs into PIs
as a means of controlling the values the ATPG engine can place on them. TestKompress
exercises this control by constraining these PIs to Xs at certain points during pattern generation,
thereby preventing interference with values being output by the decompressor. It does this while
emulating the behavior of an unbroken connection between the decompressor and the scan
chains.
Note
If you report primary inputs, the scan chain inputs are reported in lines that begin with
“USER:”. This is important to remember when you are debugging simulation
mismatches.
Optimizing Compression
You can do a number of things to ensure maximum compression in TestKompress:
• Limit observable Xs
• Use Dynamic Compaction1
Note
For circuits where dynamic compaction is very time-consuming, you may prefer to
generate patterns without dynamic compaction. The test set that is generated is not the
most compact, but it is typically more compact than the test set generated by traditional
ATPG with dynamic compaction. And it is usually generated in much less time.
Serial Patterns
One important restriction on EDT serial patterns is that the patterns must not be reordered after
they are written. Because the padding data for the shorter scan chains is derived from the scan-
in data of the next pattern, reordering the patterns may invalidate the computed scan-out data.
For more detailed information on pattern reordering, refer to the section, “Reordering Patterns”
in Chapter 7.
Parallel Patterns
Because parallel simulation patterns force and observe the decompressed data directly on the
scan cells, they have to be written by TestKompress, which understands and emulates the EDT
logic.
Some ASIC vendors write out parallel WGL patterns, and then convert them to parallel
simulation patterns using their own tools. This is not possible with default EDT patterns, as they
provide only scan channel data, not scan chain data. To convert these patterns to parallel
simulation patterns, a tool must understand and emulate the EDT logic.
There is an optional switch, -Edt_internal, you can use with the Save Patterns command to write
parallel EDT patterns with respect to the core scan chains. You can write these patterns in tester
or ASCII format and use them to produce parallel simulation patterns as described in the next
section.
Note
The number of scan chain inputs and outputs in EDT internal patterns corresponds to the
number of scan chains in the design core, not the number of top-level scan channels.
Also, the apparent length of the chains, as measured by the number of shifts required to
load each pattern, will be shorter because the extra initialization cycles that occur in
normal EDT patterns for the EDT circuitry are unnecessary.
patterns in EDT-compressed format, at which point it is too late to make any changes.
Traditional post-processing, therefore, is not feasible with EDT patterns.
Note
An exception is parallel tester or ASCII patterns you write out as EDT internal patterns.
Using your own post-processing tools, you can convert these patterns into parallel
simulation patterns. See “Parallel Patterns” on page 111 for more information.
The TestKompress ATPG engine must set or constrain any scan cells prior to compressing the
pattern. So it is essential you identify the type of post-processing you typically need and then
translate it into functionality you can specify in the tool as part of your setup for pattern
generation. The ATPG engine can then include it when generating EDT patterns.
Note
Parallel VHDL patterns require the ModelSim simulator, same as the parallel VHDL
patterns produced by FastScan.
To verify that the test vectors and the EDT circuitry operate correctly, you need to serially
simulate the test vectors with full timing. Typically, you would simulate all patterns in parallel
and a sample of the patterns serially. Only the serial patterns exercise the EDT circuitry.
Because simulating patterns serially takes a long time for loading and unloading the scan
chains, be sure to use the -Sample switch when you save patterns for serial simulation. This is
true even though serial patterns simulate faster with EDT than with traditional ATPG due to the
fewer number of shift cycles needed for the shorter internal scan chains. The section,
“Simulating the Design with Timing” in the Scan and ATPG Process Guide provides useful
background information on the use of this switch. Refer to the Save Patterns command
description in the ATPG and Failure Diagnosis Tools Reference Manual for usage information.
Note
You must use TestKompress to generate parallel simulation patterns. You cannot use a
third party tool to convert parallel WGL patterns to the required format, as you can for
traditional ATPG. This is because parallel simulation patterns for EDT are decompressed
versions of the compressed EDT patterns applied by the tester to the scan channel inputs.
They also contain EDT-specific modifications to emulate the effect of the compactor.
../modeltech/<platform>/vlib work
Then, compile the simulation library, the scan-inserted netlist, and the simulation test vectors.
Notice that both the parallel and serial vectors are compiled:
This will compile the netlist, all necessary library parts, and both the serial and parallel patterns.
Later, if you need to recompile just the patterns, you can use the following command:
Introduction
This chapter provides information about how you can perform traditional ATPG runs on an
EDT design that includes bypass circuitry in the EDT logic. The chapter also details how you
can integrate boundary scan into an EDT design when you use the tool’s external flow. Some of
the advanced features of the TestKompress tool are discussed as well. You do not need to
understand every topic to use the tool; however, these topics are useful for those seeking
detailed understanding of the tool and the EDT logic.
internal scan chains and four external channels, every 25 scan chains can be concatenated in
bypass mode to form one scan chain. This scan chain can then be connected between the input
and output pins of a given channel.
Chain 4 .
Chain 3 .
SI . SO
Chain 2 .
Chain 1 .
Decompressor Compactor
Notice that the bypass logic is implemented with multiplexers. When you utilize the internal
flow, TestKompress includes the multiplexers in the EDT logic that is instantiated in the top
level of the design. With the external flow, TestKompress adds a third EDT block that contains
the multiplexers and instantiates it in the top level wrapper.
By default, the EDT logic includes the bypass circuitry. To operate the bypass circuitry, you run
FastScan in bypass mode on the gate level netlist containing the EDT circuitry. The following
sections describe the steps you use to “turn on” bypass mode.
After you generate EDT patterns in the Pattern Generation Phase, you can direct TestKompress
to translate the EDT patterns into bypass mode FastScan patterns and write the translated
patterns to a file. The file format is the same as the regular FastScan binary file format. You
accomplish the translation and create the binary file by issuing the Save Patterns command with
the -EDT_Bypass and -Binary switches. For example:
You can then read the binary file into FastScan, optionally simulate the patterns in the Good
machine system mode to verify that the expected values computed in TestKompress are still
valid in bypass mode, and save the patterns in any of the tool’s supported formats; WGL or
Verilog for example. An example of this tool flow is provided in the section, “Using EDT
Bypass Patterns in FastScan.”
There are several reasons you cannot use TestKompress alone to create the EDT bypass
patterns:
• Bypass operation requires a different set of test procedures. These are only loaded when
running FastScan and are unknown to TestKompress in the Pattern Generation Phase.
If the bypass test procedures produce different tied cell values than the EDT test
procedures, simulation mismatches can result if the EDT patterns are simply reformatted
for bypass mode. An example of this would be if a boundary scan TAP controller were
used to drive the EDT bypass signal. The two sets of test procedures would cause the
register driving the signal to be forced to different values and the expected values
computed for EDT would therefore not be correct for bypass mode.
• TestKompress would not have run any DRCs to ensure that the scan chains can be traced
in bypass mode.
• You may need to verify that captured values do not change in bypass mode.
When it translates EDT patterns into bypass patterns, TestKompress changes the captured
values on some scan cells to Xs to emulate effects of EDT compaction and scan chain masking.
For example, if two scan cells are XOR’d together in the compactor and one of them had
captured an X, the tool sets the captured value of the other to X so no fault can be detected on
those cells, incorrectly credited, then lost during compaction.
Similarly, if a scan chain is masked for a given pattern, the tool sets captured values on all scan
cells in that chain to X. When translating the EDT patterns, the tool preserves those Xs so the
two pattern sets are identical. While this can lower the “observability” possible with the bypass
patterns, it emulates EDT test conditions. For more information on how TestKompress uses
masking, refer to “Masking Scan Chain Output Pins.”
test is to verify the operation of the EDT logic as well as the scan chains. Because no shifting
occurs through the EDT logic when it is bypassed, verification of the logic with the chain + IP
test is unnecessary. Regular FastScan chain test patterns are sufficient to verify the scan chains
work in bypass configuration; FastScan appends these to the pattern set when you write out the
EDT bypass patterns from FastScan.
Note
Because the EDT pattern set contains the chain + IP test patterns while the EDT bypass
pattern set written by TestKompress does not, the total number of patterns in the EDT and
EDT bypass pattern sets will be different.
In FastScan, you can use the EDT bypass patterns for debugging problems in the core design
and the scan chains, but not in the EDT logic. If the chain + IP test fails in TestKompress but the
bypass chain test passes in FastScan, it indicates a possible problem in the EDT logic or the
interface between the EDT logic and the scan chains. Be aware that EDT bypass patterns will
not help you debug these problems.
In the TestKompress Pattern Generation Phase, issue a “save patterns -binary -edt_bypass”
command to write EDT bypass patterns. For example:
Notice that the -Binary and the -Edt_bypass switches are both required in order to write EDT
bypass patterns.
Setting Up FastScan
In Setup system mode in FastScan, start by invoking the bypass dofile generated in the
TestKompress IP Creation Phase. Place the design in the same state in FastScan that you used in
TestKompress, then run DRC.
Note
Placing the design in the same state in FastScan as in TestKompress ensures the expected
test values in the EDT bypass patterns remain valid when the design is configured for
bypass operation.
The following example uses the bypass dofile, created_bypass.dofile, described in the Chapter
4 section, “Creating the RTL Description of the EDT Logic”:
Note
The expected values in the binary pattern file mirror those with which TestKompress
observes EDT patterns. Therefore, if TestKompress cannot observe a scan cell (for
example, due to scan chain masking or compaction with a scan cell capturing an X), the
expected value of the cell is set to X even if it can be observed by FastScan in bypass
mode.
FastScan. To save patterns where the expected values reflect FastScan observability, first
simulate the patterns as follows:
Note
The preceding command sequence will cause the Xs that emulate the effect of
compaction in EDT to disappear from the expected values. The resultant bypass patterns
will no longer be equivalent to the EDT patterns; only the stimuli will be identical in the
two pattern sets. For a given EDT pattern, therefore, the corresponding bypass pattern
will no longer provide test conditions identical to what the EDT pattern provided in
TestKompress.
Using the -Store_patterns switch in Good system mode when specifying the external file as the
pattern source causes FastScan to place the simulated patterns in the tool’s internal pattern set.
The simulated patterns include the load values read from the external pattern source and the
expected values based on simulation.
Note
If you fault simulate the patterns loaded into FastScan, the test coverage reported may be
slightly higher than it actually is in TestKompress. This is because FastScan recomputes
the expected values during fault simulation rather than using the values in the external
pattern file. The recomputed values do not reflect the effect of the compactors and scan
chain masking that are unique to EDT. Therefore, there likely will be fewer Xs in the
recomputed values, resulting in the higher coverage number.
When you subsequently save these patterns, take care not to use the -External switch with the
Save Patterns command. The -External switch saves the current external pattern set rather than
the internal pattern set containing the simulated expected values. The following example saves
the simulated expected values in the internal pattern set to the file, my_bypass_patterns.ascii:
Setting Up FastScan
First, you need to set up FastScan before you start generating test patterns. You do this by
invoking the bypass dofile in Setup mode and then running DRC. The following example uses
the bypass dofile, created_bypass.dofile, described in the Chapter 4 section, “Creating the RTL
Description of the EDT Logic”:
The Report Scan Volume command provides reference numbers you can use when analyzing
the achieved compression, or to see if the patterns will fit on the tester.
The generated patterns are standard ATPG patterns that utilize the bypass circuitry.
Flow overview
Note
As mentioned previously, boundary scan cells must not be present in your design before
you add the EDT logic. This is the same requirement that applies to I/O pads and is for
the same reason; to enable TestKompress to create the EDT circuitry as a wrapper around
your core design.
To include boundary scan in your design, you perform an additional step after the EDT IP
Creation Phase. In this step, you can use any tool you want to insert boundary scan. However,
the following sections assume you use BSDArchitect, which creates an RTL description of the
boundary scan circuitry. Figure 5-2 shows a conceptual view of how BSDArchitect incorporates
this boundary scan description into a wrapper that in turn instantiates the EDT wrapper
containing the EDT IP and the core design.
When you insert boundary scan, you typically configure the TAP controller in one of two ways:
• Drive the minimal amount of the EDT control circuitry with the TAP controller, so the
boundary scan simply coexists with EDT. This is described in the next section,
“Boundary Scan Coexisting with EDT.”
• Drive the EDT clock, update, and bypass signals with the TAP controller as described in
the section, “Driving EDT Signals with the TAP Controller.”
These two approaches are described in the following sections.
Invoking BSDArchitect
Issue the bsdarchitect shell command to invoke BSDArchitect on the top level wrapper,
“edt_top”. For example:
Note
BSDArchitect only needs the top level wrapper, not the complete netlist.
BSDA> run
BSDA> report bscan cell
BSDA> report bscan status
BSDA> save bscan -replace
The boundary scan circuit in the resulting file, edt_top_bscan.v, will include the TRST port for
the TAP interface, which provides an asynchronous reset for the TAP controller. This is the
BSDArchitect default unless you use the Set Bscan Reset command to eliminate the TRST port.
Note
Set Bscan Pullup is a BSDArchitect command that turns off the generation of pull-up
resistors. For information on the use of this command, refer to the BSDArchitect
Reference Manual.
Note
The modifications are to the example script shown in the “Design Compiler Synthesis
Script” section of Chapter 4.
/************************************************************************
** Synopsys Design Compiler synthesis script for created_edt_bs_top.v
**
************************************************************************/
/* Timing specification */
create_clock -period 10 -waveform {0,5} edt_clock
create_clock -period 10 -waveform {0,5} tck /*ADDED*/
/* Compile design */
uniquify
set_dont_touch cpu
compile -map_effort medium
After you have made any required modifications to the synthesis script to support boundary
scan, you are ready to synthesize the design. This is described in the section, “Synthesizing a
Netlist with the EDT Logic.”
Modifying the EDT Dofile and Procedure File for Boundary Scan
Note
The information in this section applies only when the design includes boundary scan.
To correctly operate boundary scan circuitry, you need to edit the dofile and test procedure file
TestKompress wrote in the IP Creation Phase. The changes you must make, typically, are as
follows:
• The internal scan chains are one level deeper in the hierarchy because of the additional
level added by the boundary scan wrapper. This needs to be taken into consideration for
the Add Scan Chains command.
• The boundary scan circuitry needs to be initialized. This typically requires you to revise
both the dofile and test procedure file.
• You may need to make additional changes if you drive EDT signals with the TAP
controller.
In the simplest configuration, the EDT circuitry is controlled by primary input pins, not by the
boundary scan circuitry. In test mode, the boundary scan circuitry just needs to be reset.
Following is the same dofile shown in the Chapter 4 section, “EDT Pattern Generation Files,”
except now it includes the changes (shown in bold font) necessary to support boundary scan
when configured simply to coexist with EDT. The boundary scan circuitry is assumed to
include a TRST asynchronous reset for the TAP controller.
//
// Written by TestKompress
//
The test procedure file, created_edt.testproc, shown in the Chapter 4 section, “EDT Pattern
Generation Files,” must also be changed to accommodate boundary scan circuitry that you
configure to simply coexist with EDT. Here is that file again, but with example changes for
boundary scan added (in bold font). This modified file was saved with the new name
modified_edt.testproc, the name referenced in the fifth line of the preceding dofile.
//
// Written by TestKompress
//
set time scale 1.000000 ns ;
set strobe_window time 100 ;
timeplate gen_tp1 =
force_pi 0 ;
measure_po 100 ;
pulse clk 200 100;
pulse edt_clock 200 100;
pulse ramclk 200 100;
period 400 ;
end;
procedure capture =
timeplate gen_tp1 ;
cycle =
force_pi ;
measure_po ;
pulse_capture_clock ;
end;
end;
procedure shift =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force_sci ;
force edt_update 0 ;
measure_sco ;
pulse clk ;
pulse edt_clock ;
end;
end;
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force clk 0 ;
force edt_bypass 0 ;
force edt_clock 0 ;
force edt_update 1 ;
force ramclk 0 ;
force scan_en 1 ;
pulse edt_clock ;
end ;
apply shift 26;
end;
procedure test_setup =
timeplate gen_tp1 ;
cycle =
force edt_clock 0 ;
...
force tms 1;
force tck 0;
force trst 0;
end;
cycle =
force trst 1;
end;
end;
with EDT. Some of these apply when you set up the boundary scan circuitry, others when you
generate patterns:
• If you want to drive the entire EDT circuitry from the TAP controller, you first should
decide on an instruction to drive the EDT channels. BSDArchitect provides the
INT_SCAN instruction that, in a traditional scan design, enables all the internal scan
chains to be configured into one long chain and placed between TDI and TDO, while PIs
and POs have direct access. For a design with EDT, you can use INT_SCAN to drive
one of the channels by defining the channel as a core register, then making that register
the target for the INT_SCAN instruction, as shown in the following dofile excerpt:
// Define EDT channel as a core register.
add core register int_scan_reg edt_channels_in1 edt_channels_out1
-length 99
Loading the INT_SCAN instruction in the instruction register places the specified
internal core register between TDI and TDO. With this configuration, any remaining
channels can be driven directly by the PIs and observed on the POs.
Note
TestKompress does not currently support the BSDArchitect MULT_SCAN instruction.
• To ensure the TAP controller stays in the proper state for shift as well as capture during
EDT pattern generation, you should specify TCK as the capture clock. This requires a
“set capture clock TCK -atpg” command in the EDT dofile that causes the capture clock
TCK to be pulsed only once during the capture cycle.
• Also, the TAP controller must step through the Exit1-DR, Update-DR, and Select-DR-
Scan states to go from the Shift-DR state to the Capture-DR state. This requires three
intervening TCK pulses between the pulse corresponding to the last shift and the
capture. These three pulses need to be suppressed for the clock supplied to the core. As
described next, BSDArchitect can generate the gating logic necessary to suppress these
three pulses for any one core clock.
• Once you define the core register and specify it as the target register for the INT_SCAN
instruction, the next step is to specify the scan interface using the Set Iscan Interface
command. The scan interface consists of the type of scan, the scan enable signal, the
scan clock, and the mode (whether scan input/output pins are available at the top-level).
Here’s an example of that command:
set iscan interface -type mux_scan -sen scan_en
-mode stand_alone -tclk clk
The “-tclk clk” switch defines a scan clock named “clk”, that BSDArchitect creates by
routing the TCK signal through gating logic, as described in the preceding bullet. Please
refer to the BSDArchitect Reference Manual for complete information about the other
switches.
The key point to remember is, if there are other clocks, they also need to be driven by the
gated TCK signal. The Set Iscan Interface command currently only supports a single
scan clock. To obtain the logic necessary to drive additional clocks, you can use Add
Port Connection command. The following example multiplexes two additional clocks,
“nclk” and “edt_clock” with TCK, using INT_SCAN as the select signal:
// Define EDT channel as a core register
add port connection nclk "buf tck" -top_select "buf INT_SCAN"
add port connection edt_clock "buf tck" -top_select "buf INT_SCAN"
In the resulting RTL file, you must manually disconnect TCK from the multiplexer
inputs and connect the gated TCK signal (similar to that used for “clk”).
• The EDT update signal is usually asserted during the first cycle of the load/unload
procedure, so as not to restrict clocking in the capture window. Typically, the EDT clock
must be in its off state in the capture window. Because there is already a restriction in
the capture window due to the “set capture clock TCK -atpg” command, you can supply
the EDT clock from the same waveform as the core clock without adding any more
constraints. To update the EDT circuitry, the EDT update signal must now be asserted in
the capture window. You can use the Capture-DR signal from the TAP controller to
drive the EDT update signal.
• BSDArchitect provides means to tie the EDT bypass signal to 0 (bypass mode inactive)
when INT_SCAN instruction is loaded.
• When preparing for synthesis, remove instantiations of “pullup” from the Verilog output
if you are using Design Compiler for synthesis as described previously in “Modifying
the BSDArchitect Output.” You should also modify any scripts you use for synthesis to
include the boundary scan circuitry. For an example of a Design Compiler script with
the necessary changes, see the section, “Preparing to Synthesize Boundary Scan and
EDT IP.”
Should you need pipeline stages in the compactor, you specify to include them with the Set
EDT -Pipeline_logic_levels_in_compactor command when setting up the tool in the IP Creation
Phase. These pipeline stages are clocked by the EDT clock and require that the tool insert
lockup cells for them as described in the section, “Lockups Between Scan Chain Outputs and
Compactor” on page 136.
Note
The -Pipeline_logic_levels_in_compactor switch specifies the maximum number of
combinational logic levels (XOR gates) between compactor pipeline stages, and not the
number of pipeline stages. The number of logic levels between any two pipeline stages is
used because that controls the propagation delay between pipeline stages. Being a
limiting design factor, propagation delay is typically of most interest.
Typically, you would make decisions about and insert pipeline stages during top-level design
integration. Since this logic may be spread throughout the design and should not be contained
within the EDT logic modules, TestKompress does not create channel pipeline stages as part of
the EDT logic.
Important: If you add channel pipeline stages, you need to inform TestKompress of their
existence using the Set EDT Pins -Pipeline_stages command when setting up the tool in the
Pattern Generation Phase. You must also make certain changes in your test procedure file as
described in the following subsections.
Important: At the beginning of shift for every pattern, all channel input pipeline stages must
contain a value of zero. This can be achieved by a number of different methods with different
trade-offs; these are described in “Initializing the Input Channel Pipeline” on page 131.
The number of additional shift cycles is typically incremented by the number of channel input
pipeline stages. If the number of additional shift cycles is four without input pipelining, and the
channel input with the most pipeline stages has two stages, the tool will increment to six the
number of additional shift cycles in each pattern.
If you have a choice between using either input or output pipeline stages, you should choose
output stages for the following reasons:
• The number of shift cycles for the same number of pipeline stages is higher when the
pipeline stages are on the input side
• Accommodating the initialization requirement for pipeline stages on the input side
requires extra effort on your part.
On the input side, the pipeline stages are connected to the decompressor, which is clocked by
the leading edge of the EDT clock. If the channel input pipeline is not clocked by the EDT
clock, ensure there is a lockup cell between the pipeline and the decompressor.
Note
EDT patterns saved for application through bypass mode (Save Patterns -EDT_Bypass)
may not work correctly if the first cell of a chain, driven by channel input pipeline stages
in bypass mode, captures on the trailing edge of the clock. This is because that first cell of
the chain, which is normally a master, becomes a copy of the last input pipeline stage in
bypass mode. To resolve this, you must add at the end of the pipeline stages for a
particular channel input, a lockup cell that is clocked on the trailing edge of a shift clock.
This ensures that the first cell in the scan chain remains a master.
On the output side, the last state element driving the channel output is either a compactor
pipeline stage clocked by the EDT clock, or more likely the last elements of the scan chains
when the compactor has no pipelining. In addition to ensuring no clock skew between the
chains/compactor and the pipeline stages, you must ensure that the first pipeline stages capture
on the leading edge (LE) when no compactor pipelining is used. This is because if the last scan
cell in a chain captures on the LE and the path from the last scan cell to the channel pipeline is
combinational, and the channel pipeline stage captures on the trailing edge (TE), the pipeline
stage is essentially a copy during shift and the last scan cell no longer gets observed.
If the clock used for the pipeline stages is not a shift clock, remember to pulse it in the shift
procedure.
Additional clocking considerations, related to the initialization of the input pipeline stages, are
described in the next section.
• Initialize the input pipeline stages during load_unload in either of the following ways:
o Use an asynchronous reset dedicated to those pipeline stages (it should not disturb
the scan cells).
o Use the edt_update and edt_clock signals to perform a synchronous reset as done for
initializing the decompressor in load_unload.
This option is straightforward to implement, but requires additional signals (not timing-
critical) to be routed to the pipeline stages.
• Initialize the input pipeline stages prior to the first pattern only, then ensure the zeros
that get shifted into the input pipeline stages at the end of shift (for every pattern) are not
changed during capture. This may be attractive if you have no direct reset mechanism
for the input pipeline stages and want to avoid routing reset signals.
This option has two components: How to initialize the pipeline stages for the first
pattern, and how to ensure that zeros shifted into the pipeline stages at the end of shift
are not changed during capture.
o Initializing the pipeline stages before the first pattern can be done in the test_setup
procedure by forcing all channel pins with pipeline stages to zero (one if there is
inversion in the pad, between the pin and the pipeline stages), and pulsing the
pipeline stages clock(s) as many times as the number of pipeline stages.
Note
If the pipeline stages use the EDT clock, the channel pins must be forced to zero (or one if
there is channel inversion) in load_unload as well, since the EDT clock is pulsed there as
well (to reset the decompressor and update the mask logic).
o After each scan load, the input pipeline stages contain zeros as mentioned earlier.
There are two options to maintain those zeros through the capture cycle:
• Constrain the clock used for the pipeline stages off.
• Constrain the channel input pin to 0 (or 1 in case of channel inversion).
Since the EDT clock is already constrained during the capture cycle, and drives the
decompressor (no clock skew), using the EDT clock to control the input pipeline
stages is recommended.
If the pipeline is correctly initialized for the first pattern and K19 passed, but the pipeline
contents get changed (during capture or the following load_unload prior to shift) such that it no
longer contains zeros, K22 will fail. K19 and K22 will detect those cases if you defined input
channel pipelining; and issue warnings about the possible problems related to channel
pipelining.
If the first stage of the channel output pipeline is TE instead of LE, this will result in one less
cycle of delay than expected, which will also trigger a K20 violation. If the first stage is TE, and
the user specifies one less pipeline stage, those 2 errors may mask each other and no violation
may be reported. However, this may result in mismatches during serial pattern simulation.
Examples
The following command defines two pipeline stages for input channel 1:
This example sets the EDT context to core1 (EDT context is specific to modular TestKompress
and is explained in the Modular TestKompress chapter), then specifies that all output channels
of the core1 block have one pipeline stage:
Following are the modified test procedures for a design with two channels having input
pipelining. The input pipeline stages are clocked by the EDT clock, edt_clock. One channel
(edt_channel1) has five channel input pipeline stages and inversion in the pad (between the pin
and first pipeline stage), while the other channel (edt_channel2) has three pipeline stages and no
inversion. The user-added events that support the pipelining are shown in bold, comments in
bold italics.
procedure test_setup =
timeplate gen_tp1 ;
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
// For channel pins with pipelines: as was done in test_setup,
// the pins must be forced again since edt_clock is pulsed in
// load_unload and it is also used for the pipeline stages.
force edt_channel1 1 ;
force edt_channel2 0 ;
force system_clk 0 ;
force edt_bypass 0 ;
force edt_clock 0 ;
force edt_update 1 ;
force ramclk 0 ;
force scan_enable 1 ;
pulse edt_clock ;
end;
apply shift 21 ;
end;
• Overlapping—The two clocks have identical waveform timing within a tester cycle;
they are “on” at the same time and their edges are aligned.
• Non-overlapping—Both clocks are active in a tester cycle, but only one clock is “on” at
any time; the clock edges are not aligned.
Note
The tool does not support partially overlapping source and destination clocks.
When the source clock and the destination clock do not overlap, and the active edge of the
destination clock occurs earlier in the cycle than the active edge of the source clock, a lockup is
unnecessary. In this case, the tool does not insert a lockup cell. You can obtain a detailed report
of the lockup cells the tool has inserted by issuing the Report EDT Lockup_cells command.
For each scan chain, the tool analyzes the clock timing of the last sequential element in the
decompressor stage (source) and the first active sequential element in the scan chain
(destination).
Note
The first sequential element in the scan chain could be an existing lockup cell (a
transparent latch for example) and may not be part of the first scan cell in the chain.
TestKompress analyzes the need for lockup cells on the basis of the waveform edge timings
(change edge and capture edge, respectively) of the source and destination clocks. The change
edge is typically the first time at which the data on the source scan cell’s output may update.
The capture edge is the capturing transition at which data is latched on the destination scan
cell’s output. The tool inserts lockup cells between the decompressor and scan chains based on
the following rules:
• A lockup cell is inserted when a source cell’s change edge coincides with the destination
cell’s capture edge.
• A lockup cell is inserted when the change edge of the source cell precedes the capture
edge of the destination cell.
In addition, the tool attempts to place lockup cells in a way that introduces no additional delay
between the decompressor and the scan chains. It also tries to minimize the number of lockup
cells at the input side of the scan chains. The lockup cells are driven by the EDT clock so as to
reduce routing of the system clocks from the core to the EDT hardware.
Table 7-1 summarizes the relationships and the lockup cells the tool inserts on the basis of the
preceding rules, assuming there is no pre-existing lockup cell (transparent latch) between the
decompressor and the first scan cell in each chain.
Table 7-1. Lockup Cells Between Decompressor and Scan Chain Inputs
Clock Source Dest. clock Source1 Dest.1, 2 # Lockups Lockup3
Waveforms clock change capture inserted edge(s)
edge edge
Overlapping EDT clock Scan clock LE LE 1 TE
EDT clock Scan clock LE TE 2 TE, LE
EDT clock Scan clock LE active high 2 TE, LE
(TE)
EDT clock Scan clock LE active low 2 TE, LE
(LE)
Non- EDT clock Scan clock LE LE 2 TE, LE
4
Overlapping
EDT clock Scan clock LE TE 2 TE, LE
EDT clock Scan clock LE active high 2 TE, LE
(TE)
EDT clock Scan clock LE active low 2 TE, LE
(LE)
1. LE = Leading edge, TE = Trailing edge.
2. Active high/low = Active clock level when destination is a latch. Active high means the latch is active
when the primary input (PI) clock is on. Active low means the latch is active when the PI clock is off. (LE)
or (TE) indicates the clock edge corresponding to the latch’s capture edge.
3. Lockup cells are driven by the EDT clock.
4. These are cases for which the tool determines the source edge precedes the destination edge. (Lockups
are unnecessary if the destination edge precedes the source edge).
To minimize the number of lockup cells added, the tool always adds a trailing edge triggered
(TE) lockup cell at the output of the LFSM in the decompressor. The tool adds a second LE
lockup cell at the input of the scan chain only when necessary, as shown in Table 7-1.
Note
If there is a pre-existing transparent latch between the decompressor and the first scan
cell, the tool will detect it and add a single lockup cell (LE) between the decompressor
and the latch. This ensures the correct value is captured into the first scan cell from the
decompressor.
sequential elements in the decompressor. If the tool does not insert pipeline stages, it will not
insert lockup cells in the compactor.
For each scan chain, the tool analyzes the clock timing between the last active sequential
element in the scan chain (source) and the first sequential element (first pipeline stage) that it
feeds in the compactor (destination). Similar to the input side of the scan chains, TestKompress
analyzes the need for lockup cells on the basis of the waveform edge timings (change edge and
capture edge, respectively, of the source and destination clocks). The change edge is typically
the first time at which the data on the source scan cell’s output may update. The capture edge is
the capturing transition at which data is latched on the destination scan cell’s output.
It adds lockup cells, driven by the EDT clock, according to the following rules:
• A lockup cell is inserted when a source cell’s change edge coincides with the destination
cell’s capture edge.
• A lockup cell is inserted when the change edge of the source cell precedes the capture
edge of the destination cell.
In addition, the tool attempts to place lockup cells in a way that introduces no additional delay
between the scan chains and the compactor pipeline stages. It also tries to minimize the number
of lockup cells at the output side of the scan chains. The lockup cells are driven by the EDT
clock so as to reduce routing of the system clocks from the core to the EDT hardware.
Table 7-2 shows how the tool inserts lockup cells in the compactor.
Table 7-2. Lockup Cells Between Scan Chain Outputs and Compactor
Clock Source Dest. clock Source1, 2 Dest.1 # Lockups Lockup3
Waveforms clock change capture inserted edge(s)
edge edge
Overlapping Scan clock EDT clock LE LE 1 TE
Scan clock EDT clock TE LE none -
Scan clock EDT clock active high LE 1 TE
(LE)
Scan clock EDT clock active low LE none -
(TE)
Non- Scan clock EDT clock LE LE 1 TE
4
Overlapping
Scan clock EDT clock TE LE 1 TE
Scan clock EDT clock active high LE 1 TE
(LE)
Scan clock EDT clock active low LE 1 TE
(TE)
1. LE = Leading edge, TE = Trailing edge.
2. Active high/low = Active clock level when source is a latch. Active high means the latch is active when
the primary input (PI) clock is on. Active low means the latch is active when the PI clock is off. (LE) or
(TE) indicates the clock edge corresponding to the latch’s change edge.
3. Lockup cells are driven by the EDT clock.
4. These are cases for which the tool determines the source edge precedes the destination edge. (Lockups
are unnecessary if the destination edge precedes the source edge).
The number and location of lockup cells also depend on whether the first and last active
sequential elements in the scan chain are clocked by the same clock. The first and last active
sequential elements in a scan chain could be existing lockup latches and may not be part of a
scan cell. TestKompress inserts the lockup cells between source and destination scan cells
according to the following rules:
• A lockup cell is inserted when a source cell’s change edge coincides with the destination
cell’s capture edge and the cells are clocked by different clocks.
• A lockup cell is inserted when the change edge of the source cell precedes the capture
edge of the destination cell.
• If multiple lockup cells are inserted, the tool ensures that:
o A master/copy scan cell combination is always driven by the same clock. This
prevents the situation where captured data in the master cell is lost because a
different clock drives the copy cell and is not pulsed in a particular test pattern.
o The earliest data capture edge of the last lockup cell is not before the latest time
when the destination cell can capture new data. This makes the first scan cell of
every chain a master and prevents D2 DRC violations.
o If the earliest time when data is available at the output of the source is before the
earliest data capture edge of the first lockup, the first lockup cell is driven with the
same clock that drives the source.
• If there is an active lockup cell at the beginning of a scan chain, the tool identifies it and
treats it as the source cell.
• If a lockup latch already exists at the end of a scan chain, the tool learns its behavior and
treats it as the source cell.
Table 7-3 summarizes how the tool inserts lockup cells in the bypass circuitry.
3. Active high/low = Active clock level when source or destination is a latch. Active high means the latch
is active when the primary input (PI) clock is on. Active low means the latch is active when the PI clock
is off. (LE) or (TE) indicates the clock edge corresponding to the latch’s change/capture edge.
4. These are cases for which the tool determines the source edge precedes the destination edge. (Lockups
are unnecessary if the destination edge precedes the source edge).
Evaluating Performance
The purpose of this section is to focus on the parts of the EDT flow that are necessary to
perform experiments on compression rates and performance so you can make informed choices
about how to fine-tune performance.
From
Synthesis
Synthesized
Netlist
(no scan)
Insert Scan
ATPG Netlist
Scripts with scan
The complete EDT flow, as described in Chapter 2, includes two separate invocations of the
EDT software. These are described in detail in the following chapters:
Note
#patterns may provide a reasonable approximation for #scan loads, but be aware that
some patterns require multiple scan loads.
For a regular scan-based design without EDT, the volume per scan load will remain fairly
constant for any number of scan chains because the number of shifts decreases when the number
of chains increases. Therefore, it does not matter much which scan chain configuration you use
when you establish the reference point.
In the following sections, the required steps to establish a point of reference are described
briefly. A design configured with eight scan chains is assumed.
Invoke FastScan
Issue the following command to invoke FastScan on the netlist with eight scan chains and
execute the dofile that performs basic setup. For example:
Run DRC
Issue the following command to run DRC and prepare for running ATPG:
Generate Patterns
Assuming the design does not have RAMs and is full scan, you can just generate basic patterns.
To speed up the process, use fault sampling. It is important to use the same fault sample size in
both the FastScan run and the EDT run.
Note the test coverage and the total data volume as reported by the Report Scan Volume
command.
Measuring Performance
In these two runs (TestKompress and FastScan), the numbers you will want to examine are:
Also, you can do a run that compares the results with and without fault sampling.
Improving Performance
Table 7-4 suggests some analyses you can do if the measured performance is not as expected:
In certain cases, such a rough estimate is not enough. Usually, the number of scan channels is
fixed because it depends on characteristics of the tester. Therefore, to experiment with different
compression outcomes, different versions of the netlist (each with a different number of scan
chains) are necessary.
For example, assume you have a design with 350,000 gates and 27,000 scan cells. If a certain
tester requires the chip to have 16 scan channels, and your compression goal is to have no less
than 4X compression, you might proceed as follows:
1. Determine the approximate number of scan chains you need. This example assumes a
reasonable estimate is 60 scan chains.
2. Use DFTAdvisor to configure the design with many more scan chains than you
estimated, say, 100 scan chains.
3. Run TestKompress for 30, 26, 22, and 18 scan channels. Notice that these numbers are
all between 1-2X the 16 channels you need.
Note
Use the same commands with TestKompress that you used in FastScan when you
established a point of reference, with one exception: in TestKompress, you must use the
Set EDT command to reconfigure the number of scan channels.
Suppose the results show that you achieve 4X compression of the test data volume using 22
scan channels. This is a chain-to-channel ratio of 100:22 or 4.55. For the final design, where you
want to have 16 scan channels, you would expect approximately a 4X reduction with 16 x 4.55
= 73 scan chains.
Note
You should always use the entire fault list when you do the final test pattern generation.
Use fault sampling only in preliminary runs to obtain an estimate of test coverage with a
relatively short test runtime. Be aware that sampling has the potential to produce a
skewed result and is a means of estimation only. For more information on fault sampling,
refer to the description of the -Sample switch under the Save Patterns command in the
ATPG and Failure Diagnosis Tools Reference Manual.
One common problem with different compactor strategies is handling of Xs (unknown values).
Scan cells can capture X values from unmodeled blocks, memories, non-scan cells, and so forth.
Assume two scan chains are compacted into one channel. An X captured in Chain 1 will then
block the corresponding cell in Chain 2. If this X occurs in Chain 1 for all patterns, the value in
the corresponding cell in Chain 2 will never be measured. This is illustrated in Figure 7-3,
where the row in the middle shows the values measured on the channel output.
Chain 1
1 0 X 1 X 0 0 0 1 Chain Output
Channel
0 1 X 1 X 1 X X 0
Output
compactor
Chain 2
1 1 0 0 X 1 X X 1 Chain Output
TestKompress records an X in the pattern file in every position made unmeasurable as a result
of the actual occurrence of an X in the corresponding cell of a different scan chain in the same
compactor group. This is referred to as X blocking. The capture data for Chain 1 and Chain 2
that you would see in the ASCII pattern file for this example would look similar to Figure 7-4.
The Xs substituted by the tool for actual values, unmeasurable because of the compactor, are
shown in red.
Chain 1
1 0 X 1 X 0 X X 1
Chain 2
1 1 X 0 X 1 X X 1
Chain 1
1 0 X 1 X 0 0 0 1 Chain Output
0
1 1 0 0 X 1 X X 1
masking Channel
gates Output
1 compactor
Chain 2
1 1 0 0 X 1 X X 1 Chain Output
When using scan chain masking, TestKompress records the actual measured value for each cell
in the unmasked, selected scan chain in a compactor group. TestKompress masks the rest of the
scan chains in the group, which means the tool changes the values to all Xs. With masking, the
capture data for Chain 1 and Chain 2 that you would see in the ASCII pattern file would look
similar to Figure 7-6, assuming Chain 2 is to be observed and Chain 1 is masked. The values the
tool changed to X for the masked chain are shown in red.
Chain 1 (masked)
X X X X X X X X X
Chain 2
1 1 0 0 X 1 X X 1
Following is part of the TestKompress transcript from a pattern generation run for a simple
teaching design in which the tool employed masked patterns to improve coverage:1
1. The design had three scan chains, each containing just three scan cells. One of the scan chain pins was
shared with a functional pin, contrary to recommended practice, in order to illustrate the negative impact such
sharing has on test coverage.
// ---------------------------------------------------------
// Simulation performed for #gates = 134 #faults = 68
// system mode = ATPG pattern source = internal patterns
// ---------------------------------------------------------
// #patterns test #faults #faults #eff. #test
// simulated cvrg in list detected patterns patterns
// deterministic ATPG invoked with abort limit = 30
// EDT without scan masking. Dynamic compaction disabled.
// --- ------ --- --- --- ---
// 32 82.51% 16 47 6 6
// --- ------ --- --- --- ---
// Warning: Unsuccessful test for 10 faults.
// deterministic ATPG invoked with abort limit = 30
// EDT with scan masking. Dynamic compaction disabled.
// --- ------ --- --- --- ---
// 96 91.26% 0 16 6 12
// --- ------ --- --- --- ---
The transcript shows six non-masked and six masked patterns were required to detect all faults.
Here’s an excerpt from the ASCII pattern file for the run showing the last unmasked pattern and
the first masked pattern:
pattern = 5;
apply "edt_grp1_load" 0 =
chain "edt_channel1" = "00011000000";
end;
force "PI" "100XXX0" 1;
measure "PO" "1XXX" 2;
pulse "/CLOCK" 3;
apply "grp1_unload" 4 =
chain "chain1" = "1X1";
chain "chain2" = "1X1";
chain "chain3" = "0X1";
end;
pattern = 6;
apply "edt_grp1_load" 0 =
chain "edt_channel1" = "11000000000";
end;
force "PI" "110XXX0" 1;
measure "PO" "0XXX" 2;
pulse "/CLOCK" 3;
apply "grp1_unload" 4 =
chain "chain1" = "XXX";
chain "chain2" = "111";
chain "chain3" = "XXX";
end;
The capture data for Pattern 6, the first masked pattern, shows that this pattern masks chain1 and
chain3 and observes only chain2.
Fault Aliasing
Another potential issue with the compactor used in the EDT IP is called fault aliasing. Assume
one fault is observed by two scan cells, and that these scan cells are located in two scan chains
that are compacted to the same scan channel. Further, assume that these cells are in the same
locations (columns) in the two chains and neither chain is masked. Figure 7-7 illustrates this.
Assume that the good value for a certain pattern is a 1 in the two scan cells. This corresponds to
a 0 measured on the scan channel output, due to the XOR in the compactor. If a fault occurs on
this site, 0s are measured in the scan cells, which also result in a 0 on the scan channel output.
For this unique scenario, it is not possible to see the difference between a good and a faulty
circuit.
Chain 1
1/0 Chain Output
Good/Faulty
0/0
Channel
1/0 Output
Chain 2
1/0 Chain Output
The solution to this problem is to utilize scan chain masking. TestKompress does this
automatically. In TestKompress, a fault that is aliased will not be marked detected for the
unmasked pattern (Figure 7-7). Instead, the tool uses a masked pattern as shown in Figure 7-8.
This mechanism guarantees that all potentially aliased faults are securely detected. Cases in
which a fault is always aliased and requires a masking pattern to detect it are rare.
Chain 1
1/0 Chain Output
Good/Faulty
1/0 1
1/0
Channel
0 Output
Chain 2
1/0
Chain Output
Reordering Patterns
Within the TestKompress tool, you can reorder patterns using static compaction, using the
Compress Patterns command, and pattern optimization, using the Order Patterns command.
You can also use split pattern sets by, for example, reading a binary or ASCII pattern file back
into the tool, and then saving a portion of it using the -Begin and -End options to the Save
Patterns command.
TestKompress does not support reordering of serial EDT patterns by a third-party tool, after the
patterns have been saved from the TestKompress tool.
This has to do with what happens in the compactor when two scan chains have different length.
Suppose two scan chains are compacted into one channel, as illustrated in Figure 7-9. Chain 1 is
six cells long and Chain 2 is three cells long. The captured values of the last three bits of Chain
1 are going to be XOR’d with the first three values of the next pattern being loaded into Chain 2.
For regular ATPG, this problem does not occur because the expected values on Chain 2, after
you shift three positions, are all Xs. So you never observe the values being loaded as part of the
next pattern. But, if that is done with EDT, the last three positions of Chain 1 are XOR’d with X
and faults observed on these last cells are lost. Because the padding data for the shorter scan
chains is derived from the scan-in data of the next pattern, avoid reordering serial patterns to
ensure valid computed scan-out data.
Pattern 2 Pattern 1
000111 1 1 0 0 1 1
Channel
Output
111 010 0 0 0
Fill
Introduction
The default behavior of TestKompress requires the instantiation of a single EDT logic block at
the top level of a design, after all design blocks are assembled into a netlist. Although this is the
most direct method of implementing compression, inserting and verifying EDT logic in each of
the blocks before top-level integration is often preferable. Modular TestKompress enables you
to insert and verify EDT logic at the block level. In the modular flow, you perform a standard
TestKompress insertion for each block, and verify its operation with the patterns generated in
the tool’s Pattern Generation Phase. Once the EDT logic is created, synthesized and verified for
all the blocks, you then perform an extra top-level integration step that enables you to generate
final top-level patterns for the fully-integrated design.
You can also run the modular flow of Test Kompress on a a fully integrated design, where EDT
logic is created for each block within the design. Sometimes this is preferable to other flows for
efficiency in routing and layout. For more information, see the “Generating Modular EDT
Logic for a Fully Integrated Design” section in this chapter.
This chapter describes how to use TestKompress for ATPG on modular designs. Modular
designs are comprised of separate interconnected blocks or modules of logic that were
developed and verified in relative isolation from each other before being instantiated in a larger
design. In typical block-based flows, most if not all of the design and verification process is
finished at the block level by the time top-level integration is started.
Top-level Top-level
Top-level Proc
Dofile
Netlist File
Top-level
EDT Patterns
Figure 8-2 shows the insertion and verification of EDT logic at the block level. It is very much
like inserting and verifying EDT logic at the top level; you simply repeat the process for each
individual block. After you have created and verified the EDT logic for the smaller blocks, you
perform a new and relatively easy user integration step during design integration to define the
block-level EDT logic. Finally, you generate top-level patterns for the fully integrated design.
Block-Level EDT Logic Creation - repeat for each block (page 161)
Test
Netlist Dofile Proc
with scan File
TestKompress
Setup
DRC
Configuration
Create EDT logic
EDT Logic Creation Phase
Design Compiler DC
Synthesize design Synth EDT
Script RTL
EDT
EDT Test
Synth Netlist Dofile Proc
with EDT File
In this chapter, the term, “EDT block” refers to a design block that implements a full
complement of the EDT hardware (decompressor, compactor, and optionally bypass logic). An
EDT block is not necessarily a module (entity) in the HDL but rather is a
decompressor/compactor/core group. It may not even be within a given module (entity) as is the
case, for example, if the design is flattened for place-and-route. An EDT block’s EDT hardware
drives all the scan chains within the block. Figure 8-3 shows a conceptual example of a netlist
with four EDT blocks (each consisting of a design block with integrated EDT hardware) and a
separate EDT block for the top-level glue logic. The top-level glue logic is testable with EDT
hardware as shown, or using bypass mode as described in “Bypassing EDT Logic” on page 115.
Netlist
D D
e e
C C
c c
o o
o o
m m
m EDT Block 1 m EDT Block 2
with Scan Chains p with Scan Chains p
p p
a a
r (sub-block w/ integrated r (sub-block w/ integrated
c c
e EDT hardware) e EDT hardware)
t t
s s
o o
s s
r r
o o
r r
top-level logic
D (top-level glue logic)
C
c o
m EDT Block 5 with Scan Chains
p m
r p
D D
e e
C C
c c
o o
o o
m m
m m
EDT Block 3 p p
p p EDT Block 4
with Scan Chains a with Scan Chains a
r r
c c
e (sub-block w/ integrated e (sub-block w/ integrated
t t
s EDT hardware) s EDT hardware)
o o
s s
r r
o o
r r
Note
You are urged to become familiar with the standard TestKompress flows that use single-
IP implementations prior to using the tool with a modular design to create multiple block-
level IP implementations. The standard flows are outlined in earlier chapters and in the
TestKompress training offered by Mentor Graphics Education Services.
Note
Block-level verification is when you create block-level patterns that you then simulate to
prove that the EDT logic is correct. In modular TestKompress, you use block-level
patterns only to verify the block-level EDT logic. Block-level patterns are not usable at
the top level of the design. You create final top-level patterns from the top of the design.
Note
You must define each such scan chain in the Pattern Generation Phase of modular
TestKompress using the Add Scan Chains command without the -Internal switch. For
additional information, refer to “Including Uncompressed Scan Chains” on page 50.
• Balanced scan chains yield optimal compression. Plan the lengths of scan chains inside
all blocks in advance so that top-level (inter-block) scan chain lengths are relatively
equal. Refer to “Balancing Scan Chains Within and Between Blocks” on page 159 for
more information.
• Sharing EDT pins with functional pins within the same EDT block is supported as long
as the standard recommendations and restrictions are followed. These are described in
the Chapter 4 sections on pin sharing, starting with “Sharing Functional Pins with EDT
Control and Channel Pins” on page 66.
• Control signals from different EDT blocks, such as edt_update, edt_clock, edt_reset,
scan_enable and test_en may be shared between EDT blocks; for example, the
edt_update signals from different blocks could be connected to the same top-level pin.
All channel pins, however, must be connected to different top-level pins.
• Scan channels cannot be concatenated. Plan for a sufficient number of top-level pins to
access scan channels from all the EDT blocks.
• You must manually connect block-level signals when you prepare the top-level netlist.
This includes connecting EDT signals to I/O pads and inserting any multiplexers needed
for channel output signals you share with functional signals. More on this in the section,
“Integrating EDT Blocks into the Netlist” on page 165.
• You must manually create the top-level dofile and top-level test procedure file needed
for top-level pattern generation. This process is detailed in the sections, “Integrating
Block-level Dofiles into a Top-level Dofile” on page 166 and “Integrating Block-level
Test Procedure Files into One File” on page 177.
Tip: Since different designers may perform scan insertion for different design blocks, it is
a good practice to coordinate, at the project management level, the selection of a target
scan chain length that will work for all blocks.
Note
Remember when using modular TestKompress, it is very important for optimal test
coverage and efficient ATPG to have intra-block and inter-block scan chain balance.
User Integration
As with the standard TestKompress flow, modular TestKompress ATPG requires three types of
information:
• Netlist
• Dofile
• Test procedure file
To create this information for the top-level ATPG performed by modular TestKompress, you
perform an extra step after you have created the IP for each block. This extra step consists of
integrating the output from each of the block-level IP Creation steps into a top-level netlist,
dofile, and test procedure file. The netlists for this integration step are the gate-level netlists that
resulted from the synthesis of each block’s EDT logic. The dofiles and test procedure files are
those the tool wrote out when you used the Write EDT Files command during the IP Creation
Phase for each block. You then use these files for the top-level ATPG as illustrated in
Figure 8-4.
Top-level
Top-level
Netlist test proc
Dofile
with EDT file
Create Top-level
EDT Patterns
(page 184)
• Be sure scan chains are balanced and that their lengths are approximately the same as the
chain lengths in other blocks. Refer to “Balancing Scan Chains Within and Between
Blocks” on page 159 for more information.
• You can optionally generate test patterns in a block’s IP Creation Phase to estimate test
coverage and scan data volume as described in “Estimating a Block’s Coverage and
Pattern Count” on page 163.
• After you write out the RTL for a block’s EDT logic, you must synthesize it (see
“Synthesizing Block-level EDT Logic” on page 163), then verify it as explained in
“Verifying EDT Logic for a Block” on page 164.
The EDT files generated by this procedure support the same capabilities as the block by block
modular flow.
Requirements
• The integrated design must be complete and fully functional
• Each block must have dedicated input and output channels
Procedure
1. Add each design block, one at a time, using the Add EDT Block command.
2. Once a block is added, set up the EDT logic for it with a Set EDT command. The Set
EDT command only applies to the current block. EDT control signals can be shared
among blocks.
3. Once all the design blocks are added and set up, enter ATPG mode. For more
information, see the Set System Mode command.
4. Enter a Write EDT Files command. A composite set of EDT files is created including an
RTL file, a synthesis script, an EDT dofile/testproc file, and a bypass dofile/testproc file.
All block-level EDT pins are automatically connected to the top level.
5. Use this composite set of EDT files for EDT logic synthesis and pattern generation.
This mechanism is fine for most purposes, but in some circumstances you may find it desirable
to use a different prefix. You can specify your own prefix by including “-rtl_prefix
prefix_string” with the Write EDT Files command when writing out the EDT RTL for a block.
To change the default prefix to “core1_”, for example, you would use:
Tip: If you use “-rtl_prefix prefix_string”, it is a good practice to coordinate the choice of
a prefix string among the engineers who will be writing out the EDT RTL for other
blocks. This will provide the opportunity not only to standardize on a helpful naming
convention (for example, core<#>), but also help prevent the accidental selection of the
same prefix for different blocks.
To get a conservative coverage estimate, you can constrain all functional inputs to X with the
Add Pin Constraint command, and mask all functional outputs with the Set Output Masks
command. To constrain the functional input my_func_in to X, for example, you would use:
To mask the two primary outputs my_func_out1 and my_func_out2, the command would be:
Be aware that constraining the inputs to X and masking the outputs will likely produce very
pessimistic results: in addition to reducing the coverage, it will negatively affect compression
since all those inputs become X sources when the CX constraints are added to the pins.
Note
Remember that eventually final ATPG must be performed at the top level of the design.
Because the top-level ATPG will be affected by all cores in the design, coverage and
pattern count may be somewhat different.
synthesis script TestKompress creates for a block is specific to that block, and the result of
synthesis is a gate-level netlist of the specific EDT block.
Note
During synthesis you should preserve the pin names TestKompress created in the EDT
logic hierarchy when it wrote out the RTL in the IP Creation Phase. Preserving the pin
names will ensure the tool can resolve the pins in the Pattern Generation Phase and
optimize the tool’s ability to provide useful debug information during DRC.
• Creation of patterns in the Pattern Generation Phase of the tool using the block-level
dofile and test procedure file written by TestKompress
• Simulation of the resulting patterns in a timing-based simulator using the block-level
test bench created during block-level pattern creation.
Performing block-level ATPG on the synthesized EDT block in the Pattern Generation Phase
allows the Pattern Generation Phase DRC rules to verify the EDT logic is instantiated correctly
inside the block. You then simulate these patterns using the block-level test bench created
during block-level pattern generation, as explained in the Chapter 6 section, “Simulating the
Generated Test Patterns.”
Note
Recall that block-level patterns may not be used at the top level of the design. You must
generate separate top-level patterns for use at the top level of the design.
For more information on the verification performed by the tool’s DRC in the Pattern Generation
Phase, refer to “Verifying the IP” on page 104.
Note
At the same time you are providing the logic to connect EDT channels and control signals
to top-level ports, you can also provide any functional interconnects between EDT blocks
or from EDT blocks to other parts of the design (a PLL for example).
input core2_clk;
output ...
...
input coreN_clk;
output ...
endmodule
1. Place an Add Scan Groups command at the beginning of the dofile, specifying the top-
level test procedure file you prepared as described in the section, “Integrating Block-
level Test Procedure Files into One File” on page 177.
2. Next, define the setups for each block using one of these two approaches:
Automatic Block-level Dofile Integration . . . . . . . . . . . . . . . . . . . . . . .page 167
Manual Block-level Dofile Integration. . . . . . . . . . . . . . . . . . . . . . . . . .page 170
3. After the section where all EDT blocks are defined, add commands to perform DRC and
top-level pattern creation.
As the tool performs the commands in the block-level dofiles, a built-in mapping mechanism
will automatically map the names of scan groups, scan chains, and most pin pathnames to the
corresponding top-level names needed for top-level pattern creation. (The exceptions are
pathnames of clock pins and constrained pins, for which you must provide top level definitions
as described next).
Note
The block-level dofiles do not contain any top-level pin or path naming information
because this information was not available during the block-level IP creation step.
Complete the top-level dofile’s setups for each EDT block as follows:
• Insert commands to define each block’s clock signals (Add Clocks, Add Read Controls,
Add Write Controls) and pin constraints (Add Pin Constraint) using the top-level pin
names in the top-level netlist.
There is no need to modify the corresponding commands in the block-level dofiles.
DRC rule K24 (EDT Rule #24) will verify the top level pin names are consistent with
the clock, read control, write control, and pin constraint signals specified in the block-
level dofiles.
• Place an Add EDT Block or Set Current Block command before each block-specific
group of setup commands.
The Add EDT Block command defines an arbitrary name of your choice for the block
about to be defined and sets the EDT context for certain subsequent commands to this
block. The block name, which gives you a way to refer to this block later in the session,
should be unique. The command’s usage is as follows:
ADD EDt Block block_name
This command also sets the EDT context for certain subsequent commands to the block
you just defined. Subsequent commands that are sensitive to the EDT context will apply
only to this block until you change the context to a different block. The Add Scan
Chains command, EDT-specific commands that define attributes for a given block, and
some reporting commands are presently the only context-sensitive commands. Most
commands like Set System Mode, Report Statistics and Create Patterns, are unaffected
by the context and always operate on the whole design.
The Set Current Block command, which only applies to EDT blocks previously defined
with the Add EDT Block command, simply changes the EDT context to the specified
EDT block. Its usage is:
SET CUrrent Block block_name
You could define multiple EDT block names before providing any block-specific setup
information, then use the Set Current Block command to specify the required block-
specific setup information, as shown in the following top-level dofile excerpt:
...
set edt mapping on
add edt block alpha
add edt block bravo
add edt block charlie
...
set current block bravo
// Perform setups for bravo block.
dofile created2_edt.dofile
...
set current block alpha
// Perform setups for alpha block.
dofile created1_edt.dofile
...
You can view currently defined block names with the Report EDT Blocks command and
delete a block definition with the Delete EDT Blocks command.
Tip: To make it as easy as possible to keep track of your setups for each block, try to
group all setup commands for a block together.
Following is an example top-level dofile that reuses the block-level dofiles to specify top-level
pattern creation setups for a modular design with three unique EDT blocks.
// all_cores_edt.do
//
// Dofile to create top level patterns for design with 3 unique EDT blocks
add scan groups grp1 all_cores_edt.testproc
// DEFINE BLOCK 1
add edt block a1 //Name this block “a1” (block’s tag for later cmds)
dofile created1_edt.dofile
// DEFINE BLOCK 2
add edt block a2 //Name this block “a2”
dofile created2_edt.dofile
// DEFINE BLOCK 3
add edt block a3 //Name this block “a3”
dofile created3_edt.dofile
// Once all EDT blocks are defined, perform DRC and verify there are
// no DRC violations.
set system mode atpg
report drc rules
For example, if the a2 and a3 blocks in the last example of the preceding section were actually
two instances of the same EDT block, the block definitions in the top-level dofile would need to
be similar to this:
...
// DEFINE BLOCK 2
add edt block a2 //Name this block “a2” (block’s tag for later cmds)
set edt instances -block_location <top_level instance or path name>
dofile created2_edt.dofile
// DEFINE BLOCK 3
add edt block a3 //Name this block “a3” (block’s tag for later cmds)
set edt instances -block_location <top_level instance or path name>
dofile created2_edt.dofile
...
Note
If you construct the top-level dofile by this method, do not include
“set edt mapping on” in the dofile.
Copy of Copy of
Dofile …… Dofile
Block N
Block 1
Top Level
Dofile
• New hierarchical pathnames (prefix the block pathname to the existing pin pathnames so
they reflect the new hierarchy in the integrated netlist).
• Unique top-level names for scan chains (add a block-specific prefix)
• Top-level pin names, matching those in the netlist (specify which chip-level pins now
drive the block-level signals referred to in the block-level files)
• Full hierarchical pathname for the instance specified with “set edt instances
-edt_logic_top” if, when integrated into the netlist, the instance will have a non-unique
name.
You must provide hierarchical paths for both internal scan chain I/O and EDT logic blocks.
Also, update the names of any block-level pins to match name changes you make in the top-
level netlist.
Tip: If you edit copies rather than the original dofiles, the originals will be available for
immediate re-use at the block-level, if necessary.
Two example dofiles are shown next, each written for a different design block in a modular
flow:
//
// Written by TestKompress
//
// If multiple instances exist with the same name, substitute the instance
// name of the container module with the instance’s hierarchical path
// name.
//
// Written by TestKompress
//
After you have copied the edited block-level setup information (shaded areas) into the top-level
dofile, add the following additional commands to complete the dofile’s setups for each EDT
block:
• Precede each block-specific group of setup commands with an Add EDT Block
command. This command defines an arbitrary name of your choice for the block about
to be defined. The block name, which gives you a way to refer to this block later in the
session, should be unique. The command’s usage is as follows:
ADD EDt Block block_name
This command also sets the EDT context for certain subsequent commands to the block
you just defined. This means subsequent commands that are sensitive to the EDT
context will apply only to this block until you change the context to a different block.
The Add Scan Chains command, EDT-specific commands that define attributes for a
given block, and some reporting commands are presently the only context-sensitive
commands. Most commands like Set System Mode, Report Statistics and Create
Patterns, are unaffected by the context and always operate on the whole design.
You can change the context by issuing another Add EDT Block command or, if the
block to which you want to change is already defined, by issuing a Set Current Block
command. The latter’s usage is:
SET CUrrent Block block_name
You could define multiple EDT block names before providing any block-specific setup
information, then use the Set Current Block command to specify the required block-
specific setup information, as shown in the following dofile excerpt:
add edt block alpha
add edt block bravo
add edt block charlie
...
set current block bravo
// Define scan chains for bravo block.
add scan chains -internal bravo_chain1 grp1
/edt_top_bravo/bravo_i/edt_si /edt_top_bravo/bravo_i/edt_so
...
set current block alpha
// Define scan chains for alpha block.
add scan chains -internal alpha_chain1 grp1
/edt_top_alpha/alpha_i/edt_si /edt_top_alpha/alpha_i/edt_so
...
You can view currently defined block names with the Report EDT Blocks command and
delete a block definition with the Delete EDT Blocks command.
For each block, just as in the non-modular TestKompress flow, you must add the scan
chains in the same order specified in the IP Creation Phase. This is the same order as in
the created dofile from that phase.
Tip: To make it as easy as possible to keep track of your setups for each block, try to
group all setup commands for a block together.
• Insert appropriate Set EDT Pins commands that specify the chip-level pin to which you
connected each EDT control and channel signal. If you connected each EDT block’s
edt_update signal to the same chip-level pin, for example, then you specify that same pin
name for edt_update for each block.
The tool includes a “set edt pins” command in the block-level dofile for each EDT pin
that you issued the command for in the block’s IP Creation Phase. You can simply edit
these commands with the correct top-level names. If you did not issue “set edt pins” to
alter a particular EDT pin’s defaults in the IP Creation Phase, the tool will not include
the command in the dofile and in this case, you must add the command with the correct
top-level name.
Figure 8-7. Creating Top-level Dofile for a Design with Two EDT Blocks
Copy of
Dofile
// all_cores_edt.do Block 1
//
// Dofile to create top level patterns for design with 2 EDT bloc
// DEFINE BLOCK 1
add edt block cp1 //Name this block “cp1” (block’s tag for use in cmds)
// DEFINE BLOCK 2
add edt block cp2 //Name this block “cp2” (block’s tag for use in cmds)
// Once all EDT blocks are defined, perform DRC and verify there are
// no DRC violations.
set system mode atpg
report drc rules
Top-level
Test proc
file
The integration of block-level test procedure files is straightforward. You take information from
each of the block-level test procedure files and aggregate test-setup, load-unload, shift and
capture procedure information into one file that is a superset of the information required for
each block. This usually is only a matter of clock definitions as well as adding the correct force
or pulse statements for edt_update and edt_clock during the load_unload, shift and capture
procedures. Pin names may also need to be changed. This process is illustrated in the next
section.
Note
The following bullets illustrate the merging process with a few excerpts based on the
procedure file example shown in the “Test Procedure File” section of Chapter 4. You are
likely to be working with more highly customized test procedures that require more
extensive merging. For example, if there is top-level initialization that requires a complex
test_setup procedure to put the chip into test mode (such as for JTAG test control), you
need to add this procedure; it will not have been created within the block level test
procedure files.
timeplate gen_tp1 =
force_pi 0;
measure_po 100;
pulse core1_clk 200 100;
pulse core2_clk 200 100;
pulse shared_edt_clock 200 100;
pulse ramclk 200 100;
period 400;
end;
• Update the load_unload procedure to include all statements present in each block-
specific version of this procedure. As you add statements, update the pin names like you
did for the timeplate. An example of these edits is shown in Figure 8-10.
procedure load_unload =
scan_group grp1;
timeplate gen_tp1;
cycle =
force core1_clk 0;
force core2_clk 0;
force shared_edt_bypass 0;
force shared_edt_update 1;
force shared_edt_clock 0;
force ramclk 0;
force core1_scan_en 1;
force core2_scan_en 1;
pulse shared_edt_clock;
end;
apply shift 26; Must be greater than one.
end;
Note
The number you specify in the apply shift statement should be greater than one but is
otherwise irrelevant; the tool will always apply shifts based on the actual traced length of
the scan chains.
• Update the shift procedure to include all statements present in each block-specific shift
procedure. As you add statements, make updates to the pin names similar to those in the
top-level timeplate and load_unload procedure. An example of these edits is shown in
Figure 8-11.
procedure shift =
scan_group grp1;
timeplate gen_tp1;
cycle =
force_sci;
force shared_edt_update 0;
measure_sco;
pulse core1_clk;
pulse core2_clk;
pulse shared_edt_clock;
end;
end;
If the same procedure occurs in multiple block-level test procedure files, you need to include it
just once in the top-level file. But in the top-level version of the procedure, you must include all
the pin-specific statements (force, pulse, and so on) from each block level version.
// created_edt.testproc // created2_edt.testproc
// //
// Written by TestKompress // Written by TestKompress
// //
set time scale 1.000000 ns ; set time scale 1.000000 ns ;
set strobe_window time 100 ; set strobe_window time 100 ;
force_pi 0 ; force_pi 0 ;
measure_po 100 ; measure_po 100 ;
pulse clk 200 100; pulse clk 200 100;
pulse edt_clock 200 100; pulse edt_clock 200 100;
pulse ramclk 200 100; period 400;
period 400 ; end;
end;
end;
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force clk 0 ;
force edt_bypass 0;
force edt_clock 0;
force edt_update 1;
force ramclk 0 ;
force scan_en 1 ;
pulse edt_clock ;
end ;
apply shift 16;
end;
procedure test_setup =
timeplate gen_tp1 ;
cycle =
force edt_clock 0 ;
end;
end;
// all_cores_edt.testproc
//
// Manually created from created1_edt.testproc & created2_edt.testproc
//
set time scale 1.000000 ns ;
set strobe_window time 100 ;
timeplate gen_tp1 =
force_pi 0 ;
measure_po 100 ;
pulse core1_clk 200 100 ;
pulse core2_clk 200 100 ;
pulse shared_edt_clock 200 100 ;
pulse ramclk 200 100 ;
period 400 ;
end;
procedure capture =
timeplate gen_tp1 ;
cycle =
force_pi ;
measure_po ;
pulse_capture_clock ;
end;
end;
procedure ram_passthru =
timeplate gen_tp1 ;
cycle =
force_pi ;
pulse_write_clock ;
end ;
cycle =
measure_po ;
pulse_capture_clock ;
end;
end;
procedure ram_sequential =
timeplate gen_tp1 ;
cycle =
force_pi ;
pulse_read_clock ;
pulse_write_clock ;
end ;
end ;
procedure clock_sequential =
timeplate gen_tp1 ;
cycle =
force_pi ;
pulse_capture_clock ;
pulse_read_clock ;
pulse_write_clock ;
end ;
end ;
procedure shift =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force_sci ;
force shared_edt_update 0 ;
measure_sco ;
pulse core1_clk ;
pulse core2_clk ;
pulse shared_edt_clock ;
end;
end;
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force core1_clk 0 ;
force core2_clk 0 ;
force shared_edt_bypass 0 ;
force shared_edt_update 1 ;
force shared_edt_clock 0 ;
force ramclk 0 ;
force core1_scan_en 1 ;
force core2_scan_en 1 ;
pulse shared_edt_clock ;
end;
apply shift 26;
end;
procedure test_setup =
timeplate gen_tp1 ;
cycle =
force shared_edt_clock 0 ;
end;
end;
Generating patterns with the top-level netlist, dofile, and test procedure file is just like
generating patterns in the standard flow. There are a couple of important differences, however:
• During the top-level modular TestKompress Pattern Generation Phase, you can use the
Set Current Block command to direct the tool to apply EDT-specific commands, as well
as the Add Scan Chains command, to a particular EDT block. Restricting the
applicability of tool commands in this way enables you to re-specify the characteristics
of that block without affecting other parts of the design. See the Set Current Block
command reference description for examples of the use of this command.
• To see currently defined blocks, use the Report EDT Blocks command. Be aware that
the Add Scan Chains command and the EDT-specific commands that define attributes
for a given block operate only on the current EDT block. A few reporting commands
also operate on the current EDT block by default, but provide an -All_blocks switch that
enables you to report on the entire design. All other commands (Set System Mode,
Create Patterns and Report Statistics for example) operate only on the entire design.
Example
Following is a brief example of the modular TestKompress commands you use during EDT
logic creation and pattern generation. Figure 8-12 shows the example design. In this example,
TestKompress control signals are shared at the top level; each EDT block, created utilizing the
default external IP location flow, is composed of a wrapper that instantiates the EDT logic and
the scan-inserted core.
Figure 8-12. Netlist with Two Cores and Shared TestKompress Control Signals
edt_top_all_cores
edt_block1
core1_edt_i
edt_clock
edt_update
edt_bypass
Channel ins
}Channel ins
}
Channel outs Channel outs
core1_i
Scan chain in Scan chain out
Functional } Functional
Input
Pins }Functional
Input
Pins
Functional
Output
Pins
Output
Pins
shared_edt_clock
shared_edt_update
shared_edt_bypass edt_block2
core2_edt_i
edt_clock
edt_update
edt_bypass
Channel ins
}Channel ins
}
Channel outs Channel outs
core2_i
Scan chain in Scan chain out
Functional Functional
Input
Pins }Functional
Input Output
} Functional
Output
Pins Pins
Pins
Now, you simply repeat this process, invoking the tool on each core-level logic block in the
design and creating IP for it.
After block-level EDT logic creation, it is important to perform block-level verification on each
block. You do this by synthesizing a block’s EDT logic, then invoking TestKompress on the
resultant gate-level netlist and performing a block-level Pattern Generation Phase. Simulate the
resulting patterns in a timing-based simulator using the block-level test bench created during
block-level pattern creation. This is a good time to check the block-level scan chain balancing.
Note
Block-level patterns may not be used at the top-level.
// Define the block tag (this is an arbitrary name) for an EDT block
// and automatically set it as the current EDT block.
add edt block cpu1
// Once all EDT blocks are defined, create patterns that use all the
// blocks simultaneously and generate patterns that target faults in
// the entire design.
// Generate patterns.
create patterns
// Create reports.
report statistics
report scan volume
save patterns...
exit
// Define the block tag (this is an arbitrary name) for an EDT block
// and automatically set it as the current EDT block.
add edt block cpu1
// The following commands were copied from the dofile generated for this
// block, with the modifications highlighted.
// Define the location (instance name) of the top-level EDT logic for this
// block; also the decompressor and compactor.
set edt instances -edt_logic_top core1_edt_i
set edt instances -decompressor core1_edt_decompressor_i
set edt instances -compactor core1_edt_compactor_i
// Once all EDT blocks are defined, create patterns that use all the
// blocks simultaneously and generate patterns that target faults in
// the entire design.
// Generate patterns.
create patterns
// Create reports.
report statistics
report scan volume
save patterns...
exit
You can create EDT logic early in your design flow, during the RTL design phase, rather than
waiting for the complete synthesized gate-level netlist of the core design. Creating the EDT
logic early, referred to as the pre-synthesis or skeleton flow, may enable you to consider the
logic’s impact early enough to plan how best to meet area and performance goals during floor-
planning, placement and routing phases.
If you know the following parameters that determine the EDT logic, you can create it before a
complete gate-level netlist is available:
Note
Knowledge of the interface of the design is also recommended if you will be creating the
EDT logic external to the design core (External Flow).
1. Using the known number of internal scan chains and clocking of the first and last scan
cell of each chain, create a skeleton design input file following the syntax rules
explained in “Skeleton Design Input File” on page 194. You can use any ASCII text
editor you like to create this file.
Prepare Input
& Interface Files
Skeleton Create Skeleton
Design Design Input File
Input File (page 194)
Create Skeleton
Design Interface File Design
(page 197) Interface File
(if ext. flow)
Run
create_skeleton_design
(page 197)
Skel.
Skeleton Skeleton Skeleton Test
Gate-level ATPG Library Dofile Proc.
Netlist File
Run TestKompress
Logic Creation Phase
(page 198)
2. If you will be creating EDT logic outside the core design (External IP Location Flow
(External Flow)), Mentor Graphics recommends you create a design interface file that
provides only the interface description of the core design in Verilog format. The format
of this file is described in “Skeleton Design Interface File” on page 197. Use any ASCII
text editor you like to create this file.
The interface file ensures the skeleton design contains the information TestKompress
needs in order to create valid pin sharing, core and EDT wrapper descriptions. This file
is unnecessary when you create the EDT logic within the core design (Internal IP
Location Flow (Internal Flow)).
3. Add the pathname of the bin directory in your Mentor Graphics DFT tree to the PATH
environment variable.
4. Run the create_skeleton_design utility using a command string similar to one of the
following:
• Internal Flow:
create_skeleton_design -o output_file_prefix \
-i skeleton_design_input_file
• External Flow:
create_skeleton_design -o output_file_prefix \
-i skeleton_design_input_file -design_interface file_name
Tip: For a list of all available options, see “create_skeleton_design Usage” on page 197.
You can get a similar list by entering a “create_skeleton_design -help -verbose” shell
command.
For a complete example showing create_skeleton_design input files and the resultant
output files, see the “Example” on page 200.
5. Invoke TestKompress on the scan-inserted skeleton netlist, <output_file_prefix>.v,
using the ATPG library, <output_file_prefix>.atpglib.
6. Provide TestKompress setup commands.
• Use the setup commands in the dofile, <output_file_prefix>.dofile, and use the test
procedure file, <output_file_prefix>.testproc.
• Issue the Set EDT command to specify the number of scan channels. Mentor
Graphics recommends you use the -Longest_chain_range switch with this command
to specify an estimated length range (min_number_cells and max_number_cells) for
the longest scan chain in the design. For additional information, refer to “How the
Tool Uses the -Longest_Chain_Range Numbers” on page 199.
7. Provide TestKompress DRC, configuration, and logic creation commands.
• Use the Set System Mode Atpg command to flatten the design and run DRCs.
• Issue other configuration commands as needed.
• Write out the RTL description of the EDT logic with the Write EDT Files command.
create_skeleton_design
Test Verilog
Dofile Skel. Gate- ATPG
Procedure Simulation
level netlist Library
File Library
(Verilog)
// Description of scan pins and LSSD system clock with design interface
// (required)
scan_chain_input <prefix> <bused|indexed> [<starting_index_if_indexed>]
scan_chain_output <prefix> <bused|indexed> [<starting_index_if_indexed>]
lssd_system_clock <clock_name> // Any system clock for LSSD designs
scan_enable <scan_enable_name> // Any scan_enable pin name
//LSSD chain
In this section, specify the scan chain pin name prefix and the type, bused or indexed, using the
keywords, “scan_chain_input” and “scan_chain_output”. The bused option will result in scan
chain pins being declared as vectors, i.e., <prefix>[Max-1:0]. The indexed option will result in
scan chain pins being declared as scalars, numbered consecutively beginning with the specified
starting index, and named in “<prefix><index>” format.
If you intend to share channel outputs, you can specify the name of a scan enable pin using the
“scan_enable” keyword. If you do not specify a scan enable pin, the tool will automatically add
a default pin named “scan_en” to the output skeleton design.
If the design contains LSSD scan cells, you can optionally use the lssd_system_clock keyword
to specify the name of any one LSSD system clock. If you do not specify a name, the tool will
use the default name, “lssd_system_clock”.
• LE for a scan cell whose output changes on the leading edge of the specified clock
• TE for a scan cell whose output changes on the trailing edge of the specified clock
• LA for an LSSD scan cell
When you specify the clock edge of the last scan cell, it is critical to include the lockup latch
timing as well. For example, if a leading edge (LE) triggered scan memory element is followed
by a lockup latch, the edge specification of the scan cell must be TE (not LE) since the cell
contains a scan memory element followed by a lockup latch and the scan cell output changes on
the trailing edge (TE) of the clock. Specifying incorrect edges will result in improper lockup
cells being inserted by TestKompress and may result in your having to regenerate the EDT logic
later.
Note
When the scan chain specification indicates the first and last scan cell have master/slave
or master/copy clocking (for example, an LE first scan cell and a TE last scan cell), the
create_skeleton_design utility will increase that chain’s length by one cell in the
skeleton netlist it writes out. This is done to satisfy a requirement of TestKompress
lockup cell analysis and will not alter the EDT logic; the length of the scan chains seen by
TestKompress after it reads in the skeleton netlist will be as specified in the skeleton
design input file.
Comment Lines
You can place comments in the file by beginning them with a double slash (//). Everything after
a double slash on a line is treated as a comment and ignored.
clk1 0
clk2 1
mclk 0
sclk 0
end_clocks
begin_chains
// chains 1 to 4 have the following characteristics (Mux scan)
1 4 2 LE clk1 TE clk1
// chains 5 and 6 have the following characteristics (Mux scan)
5 6 3 LE clk2 TE clk2
// chains 7 and 8 have the following characteristics (LSSD)
7 8 3 LA mclk sclk LA mclk sclk
end_chains
Tip: The interface file ensures the files written out by the create_skeleton_design utility
contain the information TestKompress needs in order to write out valid core black box
(*_core_blackbox.v) and top level wrapper (*_edt_top.v) files.
create_skeleton_design Usage
create_skeleton_design [-Help [-Verbose]] [-O output_file_prefix] [-simulation_library]
[-design_interface file_name] -I skeleton_design_input_file
• -Help
An optional switch that lists all the invocation switches, with no descriptions.
• -Verbose
An optional switch that, together with -Help, lists all the invocation switches and a brief
description of each.
• -O output_file_prefix
An optional switch and string pair that specifies a prefix for the utility to use when
constructing the names of the output files:
<output_file_prefix>.v
<output_file_prefix>.dofile
<output_file_prefix>.testproc
<output_file_prefix>.atpglib
The utility uses the default prefix “test” if you do not specify a prefix with -O.
• -Simulation_library
An optional switch that specifies to write out a Verilog simulation library that matches
the <output_file_prefix>.atpglib ATPG library.
• -Design_interface file_name
An optional switch and string pair that specifies the pathname of a file containing a
Verilog description of the design interface. This file is recommended if you will be
using the External Flow. It enables TestKompress later to write out valid core black box
(*_core_blackbox.v) and top level wrapper (*_edt_top.v) files.
• -I skeleton_design_input_file
A required switch and string pair that specifies the pathname of the skeleton design
input file.
The command(s) can be placed in a dofile or entered at the tool’s command line during setup.
Tip: The arguments specified with the -Longest_chain_range switch should reflect the
estimated length for the longest scan chain. For example, if you estimate the longest
chain will be 100 cells long, an appropriate range can be 75 to 125. It is necessary to
supply the range for only the longest chain. The length of the rest of the chains is
immaterial and does not affect the EDT logic.
Note
While you may specify a min_number_cells as low as 2, it is advisable not to specify an
artificially low number. Specifying an extremely low min_number_cells will cause the
mask register to be partitioned into an unnecessarily large number of relatively short scan
chains. In rare cases this can result in incompressible patterns (due to a large number of
specified bits in a column corresponding to mask register bits for a masked pattern).
The tool uses the specified max_number_cells to ensure the bit streams supplied by the phase
shifter (in the decompressor) to internal scan chains are separated by at least as many cycles as
the max_number_cells. This reduces linear dependencies among the bit streams supplied to the
internal scan chains.
• For EDT logic created external to the design core (External Flow):
If you provided the create_skeleton_design utility with the recommended interface file
when it generated the skeleton design, you can continue with the standard TestKompress
external flow (optionally insert I/O pads and boundary scan, then synthesize the I/O
pads, boundary scan, and EDT logic).
If you did not use an interface file, you will need to manually provide the interface and
all related interconnects needed for the functional design before synthesizing the EDT
logic.
• For EDT logic created within the design core (Internal Flow):
Integrating the EDT logic into the design is a manual process you perform using your
own tools and infrastructure to stitch together different blocks of the design to create a
top level design.
Note
Be aware the Design Compiler synthesis script that TestKompress writes out will not
contain information for connecting the EDT logic to design I/O pads, as the tool did not
have access to the complete netlist when it created the EDT logic.
Example
This section shows example skeleton design input and interface files and the output files the
create_skeleton_design utility generated from them.
Input File
Note
If you will be creating the EDT logic within the core design (Internal Flow), this file is
the only input the utility needs.
The following example skeleton design input file, my_skel_des.in, utilizes indexed scan chain
input and output pins. The file defines two clocks, NX1 and NX2, with off-states 0, and
specifies a total of 16 scan chains, most of which are 31 scan cells long. Notice the clocking of
the first and last scan cell in each chain is specified, but no other scan cell definition is required.
This is because the utility has built-in ATPG models of simple mux-DFF and LSSD scan cells
that are sufficient for it to write out a skeleton design (and for TestKompress later to use to
create the EDT logic).
begin_clocks
NX1 0
NX2 0
end_clocks
begin_chains
1 1 31 TE NX1 TE NX1
2 2 30 TE NX1 TE NX1
3 3 30 TE NX1 TE NX1
4 4 31 TE NX1 TE NX1
5 5 31 TE NX1 TE NX1
6 6 32 LE NX2 LE NX2
7 7 31 LE NX2 LE NX2
8 8 31 LE NX2 LE NX2
9 9 31 LE NX2 LE NX2
10 10 31 LE NX2 LE NX2
11 11 31 LE NX2 LE NX2
12 12 31 LE NX2 LE NX2
13 13 31 LE NX2 LE NX2
14 14 31 LE NX2 LE NX2
15 15 31 LE NX2 LE NX2
16 16 31 LE NX2 LE NX2
end_chains
Interface File
The following shows an example interface file nemo6_blackbox.v for the design described in
the preceding input file. Use of an interface file is recommended if you intend to create the EDT
logic as a wrapper external to the core design (External Flow).
module nemo6 ( NMOE , NMWE , DLM , ALE , NPSEN , NALEN , NFWE , NFOE ,
NSFRWE , NSFROE , IDLE , XOFF , OA , OB , OC , OD , AE ,
BE , CE , DE , FA , FO , M , NX1 , NX2 , RST , NEA ,
NESFR , ALEI , PSEI , AI , BI , CI , DI , FI , MD ,
scan_in1 , scan_out1 , scan_in2 , scan_out2 , scan_in3 ,
scan_out3 , scan_in4 , scan_out4 , scan_in5 , scan_out5 ,
scan_in6 , scan_out6 , scan_in7 , scan_out7 , scan_in8 ,
scan_out8 , scan_in9 , scan_out9 , scan_in10 , scan_out10 ,
scan_in11 , scan_out11 , scan_in12 , scan_out12 ,
scan_in13 , scan_out13 , scan_in14 , scan_out14 ,
scan_in15 , scan_out15 , scan_in16 , scan_out16 , scan_en);
input NX1 , NX2 , RST , NEA , NESFR , ALEI , PSEI , scan_in1 , scan_in2 ,
scan_in3 , scan_in4 , scan_in5 , scan_in6 , scan_in7 , scan_in8 ,
Outputs
This section shows examples of the four ASCII files written out by the create_skeleton_design
utility when run on the preceding input and interface files using the following shell command:
bb1.v
bb1.dofile
bb1.testproc
bb1.atpglib
Skeleton Design
Following is the gate level skeleton netlist that resulted from the example input and interface
files of the preceding section. For brevity, lines are not shown whose content is readily apparent
from the structure of the netlist. Parts attributable to the interface file are highlighted in bold; the
utility would not have included them if there had not been an interface file.
Note
The utility obtains the module name from the interface file, if available. If you do not use
an interface file, the utility names the module “skeleton_design_top”.
module nemo6 (NMOE, NMWE, DLM, ALE, NPSEN, NALEN, NFWE, NFOE, NSFRWE,
NSFROE, IDLE, XOFF, OA, OB, OC, OD, AE, BE, CE, DE, FA, FO, M, NX1, NX2,
RST, NEA, NESFR, ALEI, PSEI, AI, BI, CI, DI, FI, MD, scan_in1,
scan_in2, ..., scan_in16, scan_out1, scan_out2, ..., scan_out16, scan_en);
output NMOE;
output NMWE;
output DLM;
output ALE;
output NPSEN;
output NALEN;
output NFWE;
output NFOE;
output NSFRWE;
output NSFROE;
output IDLE;
output XOFF;
output [7:0] OA;
output [7:0] OB;
output [7:0] OC;
output [7:0] OD;
output [7:0] AE;
output [7:0] BE;
output [7:0] CE;
output [7:0] DE;
output [7:0] FA;
output [7:0] FO;
output [15:0] M;
input NX1;
input NX2;
input RST;
input NEA;
input NESFR;
input ALEI;
input PSEI;
input [7:0] AI;
input [7:0] BI;
input [7:0] CI;
input [7:0] DI;
input [7:0] FI;
input [7:0] MD;
input scan_in1;
input scan_in2;
...
input scan_in16;
output scan_out1;
output scan_out2;
...
output scan_out16;
input scan_en;
wire NX1_inv;
wire chain1_cell1_out;
wire chain1_cell2_out;
...
wire chain1_cell31_out;
wire chain2_cell1_out;
wire chain2_cell2_out;
...
wire chain2_cell30_out;
.
.
.
wire chain16_cell1_out;
wire chain16_cell2_out;
...
wire chain16_cell31_out;
endmodule
procedure shift =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force_sci ;
measure_sco ;
pulse NX1 ;
pulse NX2 ;
end;
end;
procedure load_unload =
scan_group grp1 ;
timeplate gen_tp1 ;
cycle =
force NX1 0 ;
force NX2 0 ;
force scan_en 1 ;
end ;
apply shift 2 ;
end ;
model inv01(A, Y) (
input (A) ()
output(Y) (primitive = _inv(A, Y); )
)
There are several ways to get help when setting up and using DFT software tools. Depending on
your need, help is available from the following sources:
• Documentation
• Online Command Help
• Mentor Graphics Support
• Examples and Solutions
Documentation
A comprehensive set of reference manuals, user guides, and release notes is available in two
formats:
http://supportnet.mentor.com
For more information on setting up and using DFT documentation, see the “Using DFT
Documentation” chapter in the Managing Mentor Graphics DFT Software manual
http://supportnet.mentor.com/about/
If you have questions about a software release, you can log in to SupportNet and search
thousands of technical solutions, view documentation, or open a Service Request online at:
http://supportnet.mentor.com
If your site is under current support and you do not have a SupportNet login, you can register for
SupportNet by filling out the short form at:
http://supportnet.mentor.com/user/register.cfm
All customer support contact information can be found on our web site at:
http://supportnet.mentor.com/contacts/supportcenters/index.cfm
http://supportnet.mentor.com/reference/other-info/dft_circuits/index.cfm
Details for an example design with eight scan chains & two scan channels:
Clk Clk
D Q
P D Q
. h .
Clk Clk
D Q
a D Q
. s . B
L Clk
D Q e
Clk
D Q y
edt_channels_in1 F . Clk . Clk p
D Q S D Q
a
edt_channels_in2 S . Clk h . Clk
s
i
M .
D
Clk
Q
f .
D
Clk
Q
s
D Q
t D Q
. Clk
e . Clk
D Q D Q
r
edt_update . Clk . Clk
edt_mask
edt_clock . . (scan chain masking data)
# scan channels < # of lockups < # scan chains 0 < # lockups < # scan chains
(lockups are always inserted here) # depends on scan chain arrangement &
clocking of lockups ahead of Phase Shifter
Source
Destination
Bypass Core
1
Chain 1 .
0
1 .
0
Chain 2
D .
e D Q
1
.
Chain 3
c Clk
0
. C
o D Q D Q
m Clk . Clk
1
Chain 4 . o
0 m
p .
r 1 p
Chain 5 . a
e 0
s . c
s
1
Chain 6 . t
0 o
o .
r 1 r
Chain 7 .
0
.
1
Chain 8 .
0
.
system_clk2
system_clk1
edt_bypass
0=EDT mode
1=Bypass mode (concatenate)
Compactor
Core (complex case)
LC Bank A
Chain 1 D Q
LC Bank B
Clk
D Q
Clk
Chain 2 D Q
M
a
Clk
O edt_channels_out1
s P u
Chain 3 D Q
t
k i
i
Clk
D Q p
Chain 4 n D Q
Clk p u
g t
Clk
e
Chain 5 D Q l B
L y
o Clk
D Q i p
Chain 6
g D Q
Clk n a
i e s
c Clk
s edt_channels_out2
Chain 7 D Q
Clk
D Q
Clk
Chain 8 D Q
Clk
Core Compactor
Chain 1 (simple case)
Chain 2
M
a O edt_channels_out1
Chain 3 s u
k t
i p
Chain 4 n u
g t
Chain 5 B
L y
o p
Chain 6
g a
i s
c s edt_channels_out2
Chain 7
Chain 8
Output Bypass
Scan chain 4 output 1
1
Scan channel 1 0
edt_channels_out1
Func output from core 0
3 edt_bypass scan_en
4 Compactor (active high)
Chain
Outputs 5
edt_mask
. Mask Shift Register
edt_clock
This appendix is divided into three parts. The first part, “Debugging Simulation Mismatches,”
lists some TestKompress-specific aspects of debugging simulation mismatches that you may
already be familiar with from past ATPG experience. The second part, “Resolving DRC
Issues,” contains some explanation (and examples where applicable) of causes of EDT-specific
design rule violations and possible solutions. The “Miscellaneous” section covers a few topics
that are unrelated to simulation mismatches or DRC.
Start
Contact
customer support.
If the core design is the source of the mismatch, then you can use traditional ATPG
troubleshooting methods in FastScan to pinpoint the problem. This entails saving EDT bypass
patterns from TestKompress, which you then process and simulate in FastScan with the design
configured to operate in bypass mode. Alternatively, you can invoke FastScan on the circuit
(configured to run in bypass mode) and generate another set of patterns. For more information,
refer to “Bypassing EDT Logic” in Chapter 7.
TestKompress can provide the most debugging information if you have preserved the EDT
logic hierarchy, including pin pathnames and instance names, during synthesis. When this is not
the case and either rule check fails, the tool will transcript a message that begins with the
following reminder (K22 would be similar):
Warning: Rule K19 can provide the most debug information if the EDT logic
hierarchy, including pin and instance names, is preserved during
synthesis and can be found by TestKompress.
The message then lists specifics about instance(s) and/or pin pathname(s) the tool cannot
resolve, so you can make adjustments in tool setups or your design if you choose. For example,
if the message continues:
you can use the Set EDT Instances command to provide the tool with the necessary information.
Use the Report EDT Instances command to double-check the information.
If the tool can find the EDT logic top, decompressor and compactor instances, but cannot find
expected EDT pins on one or more of these instances, the specifics would tell you about the pins
as in this example for an EDT design with two channels:
When the tool is able to find the EDT logic top, decompressor and compactor instances, but
cannot resolve a pin name within the EDT logic hierarchy, it is typically because the name was
changed during synthesis of the EDT RTL. To help prevent interruptions of the pattern creation
flow to fix a pin naming issue, you are urged to preserve during synthesis, the pin names
TestKompress created in the EDT logic hierarchy. For additional information about the
synthesis step, refer to “Synthesizing a Netlist with the EDT Logic” on page 98.
In rare cases, you may need to see the distinct simulation values applied in every shift cycle. For
these special cases, you can force the tool to simulate every event specified in the test procedure
file by issuing the Set Gate Report command with the K19 or K22 argument while in Setup
mode.
Tip: Use Set Gate Report with the K19 or K22 argument only when necessary. Because
the tool has to log simulation data for all simulated setup and shift cycles, Set Gate Report
K19/K22 reporting can slow EDT DRC run time and increase memory usage compared
to Set Gate Report Drc_pattern reporting.
The following two subsections provide detailed discussion of the K19 and K22 DRCs, with
debugging examples utilizing the Drc_pattern, K19 and K22 options to the Set Gate Report
command.
number of shift cycles. If the first scan cell of each scan chain is loaded with the correct values,
then the EDT decompressor works properly and this rule check passes.
If the first scan cell of any scan chain is loaded with incorrect data, the K19 rule check fails. The
tool then automatically performs an initial diagnosis to determine where along the path from the
channel inputs to the core chain inputs the problem originated. Figure C-2 shows the data flow
through the decompressor and where in this flow the K19 rule check validates the signals.
Bypass (optional)
Decompressor
Primary Inputs
EDT Core
For example, if the K19 rule detected erroneous data at the output of the first scan cell (1) in
scan chain 2, the rule would check whether data applied to the core chain input (2) is correct. If
the data is correct at the core chain input, the tool would issue an error message similar to this:
The error message reports the value the tool expected at the output of the first cell in scan chain
2 for each shift cycle. For comparison, the tool also lists the values that occurred during the
DRC’s simulation of the circuitry. If the data is correct at the first scan cell (1) and at the core
chain inputs (2), the rule next checks the data at the outputs of the core chain input drivers (3).
Note
The term, “core chain input drivers” refers to any logic that drives the scan chain inputs.
Usually, the core chain input drivers are part of the EDT logic. However, if a circuit
designer inserts logic between the EDT logic and the core scan chain inputs, the drivers
might be outside the EDT module.
The signals at (3) should always be the same as the signals at the core chain inputs (2). The tool
checks that this is so, however, because the connection between these two points is emulated
and not actually a physical connection. Figure 6-4 and the explanation accompanying it detail
why TestKompress emulates this connection.
Note
Due to the tool’s emulation of the connection between points (2) and (3), you cannot
obtain the gate names at these points by tracing between them with a “report gates
-backward” or “report gates -forward” command. However, reporting a gate that has an
emulated connection to another gate at this point will display the name and gate ID# of
the other gate; you can then issue Report Gates for the other gate and continue the trace
from there.
If the data at the outputs of the core chain input drivers (3) is correct, the rule next checks the
chain input data at the outputs of the EDT module (4). For each scan chain, if the data is correct
at (4), but incorrect at the core chain input (2), the tool issues a message similar to the
following:
In this message, “EDT module chain 1 input (source)” refers to the output of the EDT module
that drives the “core chain 1 input.” The word “source” indicates this is the pattern source for
chain 1. Also, notice the gate name “/edt_i/edt_bypass_logic_i/ix31/Y” for the EDT module
chain 1 input. Because TestKompress simulates the flattened netlist and does not model the
hierarchical module pins, the tool reports the gate driving the EDT module’s output.
Note
The K19 and K22 rules always report gates driving EDT module inputs or outputs.
Again, this is because in the flattened netlist there is no special gate that represents
module pins.
The K19 rule verifies the data at the EDT module chain inputs (4) only if the EDT module
hierarchy is preserved. If the netlist is flattened, or the EDT module’s name or pin names are
changed during synthesis, TestKompress will no longer be able to identify the EDT module and
its pins.
Tip: Preserving the EDT module during synthesis allows for better diagnostic messages
if the simulation-based DRCs (K19 and K22) fail during the Pattern Generation Phase.
The K19 rule continues comparing the simulated data to what is expected for all eight locations
shown in Figure C-2 until it finds a location where the simulated data matches the expected
data. The tool then issues an error message that describes where the problem first occurred, and
where the data was verified successfully.
This rule check not only reports erroneous data, but also reports unexpected X or Z values, as
well as inverted signals. This information can be very useful when you are debugging the
circuit.
Examples of some specific K19 problems, with suggestions for how to debug them, are detailed
in the following sections:
If K19 detects incorrect values on an EDT control signal, the tool will issue a message similar to
this one for the EDT bypass signal (edt_bypass by default):
Because the edt_bypass signal is a primary input, and the message indicates it is at a constant
incorrect value, it is reasonable to suspect that the load_unload or shift procedure in the test
procedure file is applying an incorrect value to this pin. The edt_bypass signal should be 0
during load_unload and shift (see Figure 6-2), so you could use the following command
sequence to check the pin’s value after DRC.
procedure load_unload =
scan_group grp1;
timeplate gen_tp1;
cycle =
force clear 0 ;
force edt_update 1;
timeplate gen_tp1 = force edt_clock 0;
force_pi 0; force edt_bypass 0;
measure_po 10; force scan_en 1;
pulse tclk 20 10; pulse tclk 0;
pulse edt_clock 20 10; pulse edt_clock;
period 40; end;
end; apply shift 22;
end;
The values reported for the load_unload are okay, but in the first “apply shift” (shown in bold
font), edt_bypass is 1 when it should be 0. This points to the shift procedure as the source of the
problem. You can use the following commands to confirm:
procedure shift =
scan_group grp1;
timeplate gen_tp1;
cycle =
timeplate gen_tp1 = force_sci;
force_pi 0; force edt_bypass 1;
measure_po 10; force edt_update 0;
pulse tclk 20 10; measure_sco;
pulse edt_clock 20 10; pulse tclk;
period 40; pulse edt_clock;
end; end;
end;
The DRC simulation data for the shift procedure shows it is forcing the edt_bypass signal to the
wrong value (1 instead of 0). The remedy is to change the force statement to “force
edt_bypass 0”.
Following is another example of the tool’s K19 messaging—for an incorrect value on the EDT
update signal (highlighted in bold).
EDT update pin "edt_update" is not reset before pulse of EDT clock pin
"edt_clock" in shift procedure. (K18-1)
1 error in test procedures. (K18)
...
1 EDT module control signals failed. (K19-1)
Inverted data detected at EDT module update /edt_update (36).
Expected: 0000000000000000000000
Simulated: 1111111111111111111111
4 of 4 EDT decompressor chain outputs (bus
/cpu_edt_i/cpu_edt_decompressor_i/edt_scan_in) failed. (K19-2)
Erroneous bit(s) detected at EDT decompressor chain 1 output
/cpu_edt_i/cpu_edt_decompressor_i/ix97/Y (282).
Data at EDT module channel inputs (signal /cpu_edt_i/edt_channels_in)
is correct.
Expected: 110101101111010100001X
Simulated: 0000000000000000000000
...
Notice that earlier in the transcript there is a K18 message which mentions the same control
signal and describes an error in the shift procedure. A glance at Figure 6-2 shows the EDT
update signal should be 1 during load_unload and 0 for shift. You could now check the value of
this signal as follows (relevant procedure file excerpts are shown below the example
commands):
procedure shift =
scan_group grp1;
timeplate gen_tp1;
cycle =
timeplate gen_tp1 = force_sci;
force_pi 0; force edt_update 1;
measure_po 10; measure_sco;
pulse tclk 20 10; pulse tclk;
pulse edt_clock 20 10; pulse edt_clock;
period 40; end;
end; end;
The output of the gate report for the shift procedure shows the EDT update signal is 1 during
shift. The reason is an incorrect force statement in the shift procedure, shown in the procedure
excerpt below the example. Changing “force edt_update 1;” to “force edt_update 0;” in the shift
procedure would resolve these K18 and K19 violations.
Inverted Signals
TestKompress enables you to use inverting input pads to drive the EDT decompressor.
However, you must specify the inversion using the Set EDT Pins command. (This actually is
true of any source of inversion added on the input side of the decompressor.) Without this
information, the decompressor will generate incorrect data and the K19 rule check will
transcript a message similar to this:
The occurrence message lists the name and ID of the gate where the inversion was detected
(point 6 in Figure C-2). It also lists the upstream gate where the data was correct (point 8 in
Figure C-2). To debug, trace back from point 6 looking for the source of the inversion. For
example:
// edt_channels_in1 O /U$1/Y
The trace shows there are no gates between the primary input where the data is correct and the
gate (an inverter) where the inversion was detected, so the latter is the source of this K19
violation. You can use the -Inv switch with the Set EDT Pins command to solve the problem.
DRC reports this as two K19 occurrences, but the same signals are mentioned in both
occurrence messages. Notice also that the Expected and Simulated values are the same, but
reversed for each signal, a corroborating clue. The fix is to reconnect the signals in the correct
order in the netlist.
To check if scan chains were added in the wrong order, issue the Report Scan Chains command
and compare the displayed order with the order in the dofile the tool wrote out in the IP Creation
Phase. For example:
shows chains 5 and 6 reversed from the order in this excerpt of the original TestKompress-
generated dofile:
//
// Written by TestKompress v8.2004_1.10 on Tue Dec 14 15:18:41 2004
//
// Define the instance names of the decompressor, compactor, and the
// container module which instantiates the decompressor and compactor.
// Locating those instances in the design allows DRC to provide more debug
// information in the event of a violation.
// If multiple instances exist with the same name, subtitute the instance
// name of the container module with the instance’s hierarchical path
// name.
The easiest way to solve this problem is either to delete all scan chains and add them in the right
order:
or exit the tool, correct the order of Add Scan Chains commands in the dofile and start the tool
with the corrected dofile.
Provided the EDT module hierarchy is preserved, the message describes the origin of the X
signals. The preceding message, for example, indicates the EDT bypass logic generates X
signals, while the EDT decompressor works properly.
• Are the core chain inputs correctly connected to the EDT module chain input port?
Floating core chain inputs could lead to an X.
• Are the channel inputs correctly connected to the EDT module channel input ports?
Floating EDT module channel inputs could lead to an X.
• Are the EDT control signals (edt_clock, edt_update and edt_bypass by default) correctly
connected to the EDT module? If the EDT decompressor is not reset properly, X signals
might be generated.
• Is the EDT update signal (edt_update by default) asserted in the load_unload procedure
so that the decompressor is reset? If the decompressor is not reset properly, X signals
might be generated.
• Is the EDT bypass signal (edt_bypass by default) forced to 0 in the shift procedure? If
the edt_bypass signal is not 0, X signals from un-initialized scan chains might be
switched to the inputs of the core chains.
• If the EDT control signals are generated on chip (by means of a TAP controller, for
example), are they forced to their proper values so the decompressor is reset in the
load_unload procedure?
In TestKompress, you can report the K19 simulation results for gates of interest by issuing “set
gate report k19” in Setup system mode, then using “report gates” on the gates after the K19 rule
check fails. You can also use an HDL simulator like ModelSim. In order to do that, ignore
failing K19 DRCs by issuing a “set drc handling k19 ignore” command. Next, generate three
random patterns in Atpg system mode and save the patterns as serial Verilog patterns. Then
simulate the circuit with an HDL simulator and analyze the signals of interest.
Tip: Use Set Gate Report with the K19 argument only when necessary. Because the tool
has to log simulation data for all simulated setup and shift cycles, Set Gate Report K19
reporting can slow EDT DRC run time and increase memory usage compared to Set Gate
Report Drc_pattern reporting.
The following shows how you might report on the simulated values for the “core chain 2 first
cell” mentioned in the first error message example of this section (see “Understanding K19
Rule Violations” on page 216):
You can see from this report the effect that each event in each shift cycle had on the gate’s value
during simulation. The time numbers (read vertically) indicate the relative time that events
occurred within each cycle, as determined from the procedure file. If the gate is one used by the
DRC as a reference point in its automated analysis of K19 mismatches, the report lists the value
the tool expected at the end of each cycle and whether it matches the simulated value. Also, the
last line of the report reminds you the gate is a monitor gate (a reference point in its automated
analysis) and tells you its location in the data path. These monitor points correspond to the eight
points illustrated in Figure C-2.
If erroneous data is observed at any channel output, either in non-masking or masking mode, the
K22 rule check fails. The tool then automatically performs an initial diagnosis to determine
where along the path from the core scan chains to the channel outputs the problem originated.
Figure C-3 shows the data flow through the compactor and where in this flow the K22 rule
check validates the signals.
Primary Outputs
Bypass (optional)
Compactor
Core EDT
Decoder
1 3 4
For example, if the K22 rule detected erroneous data at the channel outputs (6), the tool would
begin a search for the origin of the problem. First, it checks if the core chain outputs (1) have the
correct values. If the data at (1) is correct, TestKompress next checks the data at the inputs of
the EDT module (2). If the simulated data does not match the expected data here, the tool stops
the diagnosis and issues a message similar to the following:
Expected: 110001001011000000000000000000110001
Simulated: 00011000111010000000001111001101100
In this message, “EDT module chain 3 output (sink)” refers to the input of the EDT module that
is driven by the “core chain 3 output.” The word “sink” indicates this is the sink for the
responses captured in chain 3. Also, notice the gate name “/cpu_i/stack2_reg_8/Q” for the EDT
module chain 3 output. Because TestKompress simulates the flattened netlist and does not
model hierarchical module pins, the tool reports the gate driving the EDT module’s input.
Note
The K19 and K22 rules always report gates driving EDT module inputs or outputs. This
is because in the flattened netlist there is no special gate that represents module pins.
The message has two parts; the first part reporting problems in non-masking mode, the second
reporting problems in masking mode. The preceding example tells you the masking mode fails
when the mask is set to 3; that is, when the third core chain is selected for observation.
Note
In masking mode, only one core chain per compactor group is observed at the channel
output for the group. In non-masking mode, the output from all core chains in a
compactor group are compacted and observed at the channel output for the group.
Given the error message, it is easy to debug the problem. Check the connection between the
core chain output (1 in Figure C-3) and the EDT module, making sure any logic in between is
controlled correctly. Usually, there is no logic between the core chain outputs and the EDT
module.
The K22 rule verifies data at the EDT module chain outputs (2) only if the EDT module
hierarchy is preserved. If the netlist is flattened or the EDT module’s name or pin names are
changed during synthesis, TestKompress will no longer be able to identify the EDT module and
its pins.
Note
Preserving the EDT module during synthesis allows for better diagnostic messages if the
simulation-based DRCs (K19 and K22) fail during the Pattern Generation Phase.
If the data at the EDT module chain outputs (2) is correct, the K22 rule continues comparing the
simulated data to the expected data for the EDT compactor outputs (3), the EDT module
channel outputs(4), and so on until the tool identifies the source of the problem. This approach
is analogous to that used for the K19 rule checks described in the section, “Understanding K19
Rule Violations” on page 216.
For guidance on methods of debugging incorrect or inverted signals, X signals, and signals or
scan chains in the wrong order, the discussion of these topics in the section, “Understanding
K19 Rule Violations,” is good background information for K22 rule violations. Examples of
some specific K19 problems, with example debugging steps, are detailed in these sections:
Some specific K22 problems, with example debugging steps, are detailed in the following
sections:
Inverted Signals
Incorrect Scan Chain Order
Masking Problems
Using Set Gate Report K22
Inverted Signals
TestKompress enables you to use inverting pads on EDT channel outputs. However, you must
specify the inversion using the Set EDT Pins command. (This actually is true of any source of
inversion added on the output side of the compactor.) Without this information, the compactor
will generate incorrect data and the K22 rule check will transcript a message similar to this (for
a design with one scan channel and four core scan chains):
Notice the separate occurrence messages are identifying the same problem.
The occurrence messages list the name and ID of the gate where the inversion was detected
(point 6 in Figure C-3). It also lists the upstream gate where the data was correct (point 4 in
Figure C-3). To debug, simply trace back from point 6 looking for the source of the inversion.
For example:
b
// /ix77 inv02
// A I /cpu_edt_i/edt_bypass_logic_i/ix23/Y
// Y O /edt_channels_out1
The trace shows there are no gates between the primary output where the inversion was detected
and the gate (an inverter) where the data is correct, so the latter is the source of this K22
violation. You can use the -Inv switch with the Set EDT Pins command to solve the problem.
To check if scan chains were added in the wrong order, issue the Report Scan Chains command
and compare the displayed order with the order in the dofile the tool wrote out in the IP Creation
Phase. For example:
shows chain1 added last instead of first, chain2 added first instead of second, and so on; not the
order in this excerpt of the original TestKompress-generated dofile:
//
// Written by TestKompress v8.2004_5.10 on Tue Dec 14 15:18:41 2004
//
// Define the instance names of the decompressor, compactor, and the
// container module which instantiates the decompressor and compactor.
// Locating those instances in the design allows DRC to provide more debug
// information in the event of a violation.
// If multiple instances exist with the same name, subtitute the instance
// name of the container module with the instance’s hierarchical path
// name.
The easiest way to solve this problem is either to delete all scan chains and add them in the right
order:
or exit the tool, correct the order of Add Scan Chains commands in the dofile and start the tool
with the corrected dofile.
Note
When the tool is set up to treat K19 violations as errors, the invocation default, incorrect
scan chain order will be detected by the K19 rule check, since the tool performs K19
checks before K22. (See “Incorrect Scan Chain Order” in the K19 section for example
tool messages). In this case, the tool will stop before issuing any K22 messages related to
the incorrect order.
If the issue was actually one of incorrect signal order only at the outputs of the internal
scan chains and the inputs were in the correct order, you would get K22 messages similar
to the preceding and no K19 messages about scan chains being “added in the wrong
order.”
Masking Problems
Most masking problems are caused by disturbances in the operation of the mask hold and shift
registers. One such problem results in the following message for the decoded masking signals:
You can usually find the source of masking problems by analyzing the mask hold and shift
registers. In this example, you could begin by tracing back to find the source of the Xs:
b
// /cpu_edt_i/cpu_edt_compactor_i/decoder1/ix63 (294) OR
// (ts)( ld)(shift)(cap)
// A0 I ( X)(XXX)(XXX~X)(XXX) 208- …/reg_masks_hold_reg_0_/Q
// A1 I ( X)(XXX)(XXX~X)(XXX) 214- …/reg_masks_hold_reg_1_/Q
// "OUT" O ( X)(XXX)(XXX~X)(XXX) 343-
b
// /cpu_edt_i/cpu_edt_compactor_i/reg_masks_hold_reg_0_ (208) BUF
// (ts)( ld)(shift)(cap)
// "I0" I ( X)(XXX)(XXX~X)(XXX) 538-
// Q O ( X)(XXX)(XXX~X)(XXX) 235- …/ix102/A0
// 292- …/decoder1/ix57/A0
// 293- …/decoder1/ix113/A
// 346- …/decoder1/ix61/A0
// 294- …/decoder1/ix63/A0
b
// /cpu_edt_i/cpu_edt_compactor_i/reg_masks_hold_reg_0_ (538) DFF
// (ts)( ld)(shift)(cap)
// "S" I ( 0)(000)(000~0)(000) 48-
// "R" I ( 0)(000)(000~0)(000) 150-
// CLK I ( 0)(000)(000~0)(000) 47-
// D I ( X)(XXX)(XXX~X)(XXX) 235- …/ix102/Y
// "OUT" O ( X)(XXX)(XXX~X)(XXX) 208- 209-
The trace shows the clock for the mask hold register is inactive. Trace back on the clock to find
out why:
report gates 47
// /cpu_edt_i (47) TIE0
// (ts)( ld)(shift)(cap)
// "OUT" O ( 0)(000)(000~0)(000) 541- …/reg_masks_hold_reg_1_/CLK
// 540- …/reg_masks_shift_reg_1_/CLK
// 539- …/reg_masks_shift_reg_0_/CLK
// 538- …/reg_masks_hold_reg_0_/CLK
// 537- …/reg_masks_shift_reg_2_/CLK
// 536- …/reg_masks_hold_reg_2_/CLK
The information for the clock source shows it is tied. As the EDT clock should be connected to
the hold register, you could next report on the EDT clock primary input at the compactor and
check for a connection to the hold register:
Based on the preceding traces, you would expect to find that the EDT clock was not connected
to the hold register. Because an inactive clock signal to the mask hold register would cause
masking to fail, check the transcript for corroborating messages that indicate multiple similar
masking failures. These DRC messages, which preceded the K22 message in this example,
provide such a clue:
Notice the same failure was reported in masking mode for all scan chains. To fix this particular
problem, you would need to connect the EDT clock to the mask hold register in the netlist.
Tip: Use Set Gate Report with the K22 argument only when necessary. Because the tool
has to log simulation data for all simulated setup and shift cycles, “set gate report k22”
reporting can slow EDT DRC run time and increase memory usage compared to “set gate
report drc_pattern” reporting.
Miscellaneous
Incorrect References to \**TSGEN** in Synthesized Netlist
After you run Design Compiler to synthesize the netlist and verify that no errors occurred,
check that tri-state buffers were correctly synthesized. For certain technologies, Design
Compiler is unable to correctly synthesize tri-state buffers and inserts an incorrect reference to
“\**TSGEN**” instead. You can run the UNIX grep command to check for TSGEN:
If TSGEN is found, as shown in bold font in the following example Verilog code,
you need to change the line of code that contains the reference to a correct instantiation of a tri-
state buffer. The next example corrects the previous instantiation to the LSI lcbg10p technology
(shown in bold font):
If no Xs are captured on the scan chains, usually no fault effects are lost due to the compactors
and TestKompress does not have to generate patterns that use scan chain output masking. For
circuits with no Xs observable on the scan chains, the effective compression is usually much
higher (everything else being equal) and the number of patterns is only slightly more than what
ATPG generates without EDT. DRC’s rule E5 (Extra Rule #5) identifies sources of observable
Xs.
One clue you probably have many observable Xs is usually apparent in the transcript for an
EDT pattern generation run. With few or no observable Xs, the number of effective patterns in
each simulation pass without scan chain masking will (ideally) be 32 for 32-bit invocations and
64 for 64-bit invocations. Numbers significantly lower indicate Xs are reducing test
effectiveness. This is confirmed if the number of effective patterns rises significantly when
TestKompress uses masking to block the observable Xs. This is shown in the following excerpt
from the transcript for a 32-bit invocation run:
Note
You can use bypass mode to apply patterns generated with tools other than TestKompress
(FastScan, for example). You can also use bypass mode for system debugging purposes.
The reason for this restriction is that the test bench must be able to force the scan chain input
pins when applying independent shifts. Those pins are primary inputs in traditional ATPG, but
in EDT they are internal nodes, driven by the decompressor. The Verilog test bench can force
the internal scan pins when needed, but the VHDL test bench cannot.
Note
The tool identifies certain types of shadow cells that require one post shift for correct
loading during parallel pattern simulation, and automatically includes that post shift in
the generated patterns. To disable the tool’s identification of these types of shadow cells,
use the “set shadow check restricted” command. This will enable you to save the patterns.
Be aware, however, that this can lower test coverage.
• Many observable Xs—EDT can handle observable Xs but their occurrence requires the
tool to use masking patterns. Masking patterns observe fewer faults than non-masking
patterns, so more of them are required. More patterns lowers effective compression.
If the session transcript shows all patterns are non-masking, then observable Xs are not
the cause of the lower than expected compression. If the tool generated both masking
and non-masking patterns and the percentage of masking patterns exceeds 25% of the
total, then there are probably many observable Xs. To find them, look for E5 DRC
messages. You activate E5 messages by issuing a “set drc handling e5 note” command.
Note
If there are many observable Xs, you will probably see a much higher runtime compared
to FastScan. You will probably also see a much lower number of effective patterns
reported in the transcript when TestKompress is not using scan chain masking, compared
to when the tool is using masking.
The Chapter 7 section, “Resolving X Blocking with Scan Chain Masking,” describes
masking patterns. It also shows how the tool reports their use in the session transcript,
and illustrates how masked patterns appear in an ASCII pattern file. See also “Limiting
Observable Xs for a Compact Pattern Set” earlier in this chapter.
• EDT Aborted Faults—For information about these types of faults, refer to “If there are
EDT aborted faults” in the next section.
• If there are no EDT aborted faults, try a more aggressive compression configuration by
increasing the number of scan chains.
Be sure none of the internal scan chain input or output pins are shared with functional pins.
Only scan channel pins may be shared with functional pins. Refer to “Avoiding Sharing Scan
Chain Pins with Functional Pins” in Chapter 3 for additional information.
Bypass Circuitry
Additional logic circuitry that TestKompress includes in the EDT logic when you use the
-Bypass_logic On option with the Set EDT command. If you include bypass logic, you
optionally can run the circuit in bypass mode to perform regular ATPG if you want. See also
Bypass Mode.
Bypass Mode
When the EDT logic includes bypass circuitry, bypass mode is when the bypass circuitry
concatenates the internal scan chains into fewer, longer scan chains, bypassing the EDT
circuitry. Bypass mode thus enables you to run regular ATPG. See Bypass Circuitry.
Chain-to-channel Ratio
The ratio of the number of scan chains in the design core to the number of channels (“virtual”
scan chains) the EDT logic presents to the tester. The latter must be the same as the number of
tester channels, so is usually fixed.
Channel
Refer to Scan Channel.
Compactor
Refer to Spacial Compactor.
Compactor Group
In the compactor circuitry, one or more stages of XOR gates compact the response from several
chains into each channel output. Scan chains compacted into the same scan channel are said to be
in the same compactor group.
Compactor Stage
A single level of logic (XOR gates) in the Spacial Compactor. Each spatial compactor is
comprised of one or more compactor stages. See also First Compactor Stage.
Compression
Refer to Effective Compression.
Core
The original design without boundary scan or I/O pads, to which you add EDT technology.
Decompressor
The component of the EDT logic that converts EDT-compressed patterns into normal scan
patterns and applies them to the scan-inserted design core.
EDT
The trademark representing the Embedded Deterministic Test technology developed by Mentor
Graphics. See also Embedded Deterministic Test Technology.
EDT Block
A design block in a modular TestKompress design that implements a full complement of the
EDT hardware (decompressor, compactor, and optionally bypass logic). It is not necessarily a
module (entity) in the HDL, but rather is a decompressor/compactor/core group. An EDT block’s
EDT hardware drives all the scan chains within the block. See Chapter 8,
“Modular TestKompress,” for more information.
EDT Logic
The hardware synthesized into a design to implement the Mentor Graphics EDT technology.
This hardware consists of two main components: A “decompressor” and a “compactor.”
EDT Patterns
The compressed patterns generated by TestKompress.
Effective Compression
The ratio of the tester memory required with ATPG to the tester memory required with EDT. See
“Comparing EDT and Traditional ATPG” on page 21 for an example calculation of effective
compression.
IP Version
The version of the EDT hardware architecture. This is different than the software version of the
tool. A newer version of TestKompress, in which only the kernel is updated but the architecture
of the EDT logic it generates is the same as before, will have the same IP version number. Only
the software version would increment.
JTAG
Refer to Joint Test Action Group (JTAG).
Pin Sharing
Refers to functional pins shared with the decompressor inputs and compactor outputs.
Scan Chain
A scan chain that is inside the core design; an internal scan chain.
Scan Channel
A “virtual” scan chain that a chip incorporating EDT technology provides as the input/output
interface to a channel of a tester. A chip design may include more than one scan channel, based
upon the number of channels available on the ATE, that will be used to test the chip.
Spacial Compactor
The part of the EDT logic that converts the outputs of a collection of internal scan chains into
one external scan channel output. In addition to the compaction in the number of scan chain
outputs, the conversion reduces the need for space that would otherwise be required to route
multiple scan chain outputs.
X Blocking
The X recorded by the tool in the pattern file in every position made unmeasurable as a result of
the occurrence of an X in the corresponding cell of a different scan chain in the same compactor
group.
Index
— Symbols — pre-existing, 48
.gz, 32 prerequisites, 96
.Z, 32 synthesis, preparing for, 123
top level wrapper for, 97
—A— Built-in self-test, 13
Add edt block command, 155, 167, 173, 186, Bypass circuitry, 16, 27, 78
189 customizing, 72
Add scan chains -internal, 74, 88, 89, 103 diagram, 116
Advanced topics, 115 including, 62
Architecture, EDT, 16, 63 Bypass mode
ATE circuitry, 116
memory map for ATPG and EDT patterns, generated files for, 91
26 introduction, 26, 27
memory requirements Bypass patterns, EDT
estimating, 23 to 26 flow example, 118
number of channels and, 23 using, 118
number of patterns and, 23 Bypassing EDT logic, 115 to 121
number of shifts and, 23
memory, handling limits of, 12, 13 —C—
ATPG Chain and IP test, enhanced, 105
compared with EDT, 21 to 27 Chain-to-channel ratio
Automatic test equipment, see ATE definition of, 15
effective compression and, 15
—B— Channel input pipeline stages
Batch mode, 31 defining, 129
Boundary scan Channel output pipeline stages
BSDArchitect defining, 129
description, 97 Channel, see Scan Channel
documentation, 96 Clocking in EDT, 21
invoking, 122 Commands
modifying BSDArchitect output, 122 interrupting, 33
circuitry, 97 running UNIX system, 32
EDT and, 121 to 128 Compactor, see Spacial compactor
EDT coexisting with, 122 to 126 Compress files
EDT signals driven by, 126 to 128 .gz filename extension to, 32
flow overview, 121 .Z filename extension to, 32
inserting, 96, 122 set file compression command, 32
modifying EDT dofile for, 49, 124 set gzip options command, 33
modifying EDT test procedure file for, 49, Compression, see Effective Compression
124 Conserve disk space
• •This software application may include GTK 2.6.1 third-party software and may be subject to the following copyright(s)
and/or use terms:
Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
**********************************************************************
Corporation, none of whom are responsible for the results. The author
I'd appreciate being given credit for this package in the documentation
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
**********************************************************************
and re_syntax.n were developed by Tcl developers other than Henry Spencer;
**********************************************************************
Corporation and other parties. The following terms apply to all files
individual files.
that existing copyright notices are retained in all copies and that this
and need not follow the licensing terms described here, provided that
the new terms are clearly indicated on the first page of each file where
they apply.
IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
MODIFICATIONS.
authors grant the U.S. Government and others acting in its behalf
permission to use and distribute the software in accordance with the
**********************************************************************
and regc_locale.c.
****************************************************************************
-----------------------------------------------------
Permission to use, copy, modify, and distribute this software and its
provided that the above copyright notice appear in all copies and that
supporting documentation.
Permission to use, copy, modify, distribute, and sell this software and
its documentation for any purpose is hereby granted without fee, provided
that (i) the above copyright notices and this permission notice appear in
all copies of the software and related documentation, and (ii) the names of
Sam Leffler and Silicon Graphics may not be used in any advertising or
OF THIS SOFTWARE.
-----------------------------------------------------
warranty. In no event will the authors be held liable for any damages
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
2. Altered source versions must be plainly marked as such, and must not be
3. This notice may not be removed or altered from any source distribution.
jloup@gzip.org madler@alumni.caltech.edu
for free but without warranty of any kind. The library has been
read the FAQ for more information on the distribution of modified source
versions.
This software application may include GTK 2.6.1 third-party software and may be subject to the following copyrights.
====================================
Copyright (C) 1998 Julian Smart, Robert Roebling [, ...]
under the terms of the GNU Library General Public Licence as published by
You should have received a copy of the GNU Library General Public Licence
write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
EXCEPTION NOTICE
either version 3 of the Licence, or (at your option) any later version of
Licence document.
2. The exception is that you may use, copy, link, modify and distribute
under the user's own terms, binary object code versions of works based
on the Library.
3. If you copy code from files distributed under the terms of the GNU
General Public Licence or the GNU Library General Public Licence into a
copy of this library, as this licence permits, the exception does not
apply to the code that you add in this way. To avoid misleading anyone as
to the status of such modified files, you must delete this exception
notice from such code and/or adjust the licensing conditions notice
accordingly.
If you do not wish that, you must delete the exception notice from such
• This software application may include GTK+ third-party software, portions of which may be subject to the GNU Library
General Public License. You can view the complete license at: http://www.gnu.org/copyleft/library.html, or find the file
at mgcdft_tree/docs/legal/.
• To obtain a copy of the GTK+ source code, send a request to request_sourcecode@mentor.com. This offer may be
accepted for three years from the date Mentor Graphics Corporation first distributed the GTK+ source code.
End-User License Agreement
The latest version of the End-User License Agreement is available on-line at:
www.mentor.com/terms_conditions/enduser.cfm
IMPORTANT INFORMATION
This is a legal agreement concerning the use of Software between you, the end user, as an authorized
representative of the company acquiring the license, and Mentor Graphics Corporation and Mentor Graphics
(Ireland) Limited acting directly or through their subsidiaries (collectively “Mentor Graphics”). Except for license
agreements related to the subject matter of this license agreement which are physically signed by you and an
authorized representative of Mentor Graphics, this Agreement and the applicable quotation contain the parties'
entire understanding relating to the subject matter and supersede all prior or contemporaneous agreements. If you
do not agree to these terms and conditions, promptly return or, if received electronically, certify destruction of
Software and all accompanying items within five days after receipt of Software and receive a full refund of any
license fee paid.
1. GRANT OF LICENSE. The software programs, including any updates, modifications, revisions, copies, documentation
and design data (“Software”), are copyrighted, trade secret and confidential information of Mentor Graphics or its
licensors who maintain exclusive title to all Software and retain all rights not expressly granted by this Agreement.
Mentor Graphics grants to you, subject to payment of appropriate license fees, a nontransferable, nonexclusive license to
use Software solely: (a) in machine-readable, object-code form; (b) for your internal business purposes; (c) for the license
term; and (d) on the computer hardware and at the site authorized by Mentor Graphics. A site is restricted to a one-half
mile (800 meter) radius. Mentor Graphics’ standard policies and programs, which vary depending on Software, license
fees paid or services purchased, apply to the following: (a) relocation of Software; (b) use of Software, which may be
limited, for example, to execution of a single session by a single user on the authorized hardware or for a restricted period
of time (such limitations may be technically implemented through the use of authorization codes or similar devices); and
(c) support services provided, including eligibility to receive telephone support, updates, modifications, and revisions.
2. EMBEDDED SOFTWARE. If you purchased a license to use embedded software development (“ESD”) Software, if
applicable, Mentor Graphics grants to you a nontransferable, nonexclusive license to reproduce and distribute executable
files created using ESD compilers, including the ESD run-time libraries distributed with ESD C and C++ compiler
Software that are linked into a composite program as an integral part of your compiled computer program, provided that
you distribute these files only in conjunction with your compiled computer program. Mentor Graphics does NOT grant
you any right to duplicate, incorporate or embed copies of Mentor Graphics' real-time operating systems or other
embedded software products into your products or applications without first signing or otherwise agreeing to a separate
agreement with Mentor Graphics for such purpose.
3. BETA CODE. Software may contain code for experimental testing and evaluation (“Beta Code”), which may not be used
without Mentor Graphics’ explicit authorization. Upon Mentor Graphics’ authorization, Mentor Graphics grants to you a
temporary, nontransferable, nonexclusive license for experimental use to test and evaluate the Beta Code without charge
for a limited period of time specified by Mentor Graphics. This grant and your use of the Beta Code shall not be construed
as marketing or offering to sell a license to the Beta Code, which Mentor Graphics may choose not to release
commercially in any form. If Mentor Graphics authorizes you to use the Beta Code, you agree to evaluate and test the
Beta Code under normal conditions as directed by Mentor Graphics. You will contact Mentor Graphics periodically
during your use of the Beta Code to discuss any malfunctions or suggested improvements. Upon completion of your
evaluation and testing, you will send to Mentor Graphics a written evaluation of the Beta Code, including its strengths,
weaknesses and recommended improvements. You agree that any written evaluations and all inventions, product
improvements, modifications or developments that Mentor Graphics conceived or made during or subsequent to this
Agreement, including those based partly or wholly on your feedback, will be the exclusive property of Mentor Graphics.
Mentor Graphics will have exclusive rights, title and interest in all such property. The provisions of this section 3 shall
survive the termination or expiration of this Agreement.
4. RESTRICTIONS ON USE. You may copy Software only as reasonably necessary to support the authorized use. Each
copy must include all notices and legends embedded in Software and affixed to its medium and container as received from
Mentor Graphics. All copies shall remain the property of Mentor Graphics or its licensors. You shall maintain a record of
the number and primary location of all copies of Software, including copies merged with other software, and shall make
those records available to Mentor Graphics upon request. You shall not make Software available in any form to any
person other than employees and on-site contractors, excluding Mentor Graphics' competitors, whose job performance
requires access and who are under obligations of confidentiality. You shall take appropriate action to protect the
confidentiality of Software and ensure that any person permitted access to Software does not disclose it or use it except as
permitted by this Agreement. Except as otherwise permitted for purposes of interoperability as specified by applicable
and mandatory local law, you shall not reverse-assemble, reverse-compile, reverse-engineer or in any way derive from
Software any source code. You may not sublicense, assign or otherwise transfer Software, this Agreement or the rights
under it, whether by operation of law or otherwise (“attempted transfer”), without Mentor Graphics’ prior written consent
and payment of Mentor Graphics’ then-current applicable transfer charges. Any attempted transfer without Mentor
Graphics' prior written consent shall be a material breach of this Agreement and may, at Mentor Graphics' option, result in
the immediate termination of the Agreement and licenses granted under this Agreement. The terms of this Agreement,
including without limitation, the licensing and assignment provisions shall be binding upon your successors in interest
and assigns. The provisions of this section 4 shall survive the termination or expiration of this Agreement.
5. LIMITED WARRANTY.
5.1. Mentor Graphics warrants that during the warranty period Software, when properly installed, will substantially
conform to the functional specifications set forth in the applicable user manual. Mentor Graphics does not warrant
that Software will meet your requirements or that operation of Software will be uninterrupted or error free. The
warranty period is 90 days starting on the 15th day after delivery or upon installation, whichever first occurs. You
must notify Mentor Graphics in writing of any nonconformity within the warranty period. This warranty shall not be
valid if Software has been subject to misuse, unauthorized modification or improper installation. MENTOR
GRAPHICS' ENTIRE LIABILITY AND YOUR EXCLUSIVE REMEDY SHALL BE, AT MENTOR GRAPHICS'
OPTION, EITHER (A) REFUND OF THE PRICE PAID UPON RETURN OF SOFTWARE TO MENTOR
GRAPHICS OR (B) MODIFICATION OR REPLACEMENT OF SOFTWARE THAT DOES NOT MEET THIS
LIMITED WARRANTY, PROVIDED YOU HAVE OTHERWISE COMPLIED WITH THIS AGREEMENT.
MENTOR GRAPHICS MAKES NO WARRANTIES WITH RESPECT TO: (A) SERVICES; (B) SOFTWARE
WHICH IS LICENSED TO YOU FOR A LIMITED TERM OR LICENSED AT NO COST; OR
(C) EXPERIMENTAL BETA CODE; ALL OF WHICH ARE PROVIDED “AS IS.”
5.2. THE WARRANTIES SET FORTH IN THIS SECTION 5 ARE EXCLUSIVE. NEITHER MENTOR GRAPHICS
NOR ITS LICENSORS MAKE ANY OTHER WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, WITH
RESPECT TO SOFTWARE OR OTHER MATERIAL PROVIDED UNDER THIS AGREEMENT. MENTOR
GRAPHICS AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT OF
INTELLECTUAL PROPERTY.
7. LIFE ENDANGERING ACTIVITIES. NEITHER MENTOR GRAPHICS NOR ITS LICENSORS SHALL BE
LIABLE FOR ANY DAMAGES RESULTING FROM OR IN CONNECTION WITH THE USE OF SOFTWARE IN
ANY APPLICATION WHERE THE FAILURE OR INACCURACY OF THE SOFTWARE MIGHT RESULT IN
DEATH OR PERSONAL INJURY. THE PROVISIONS OF THIS SECTION 7 SHALL SURVIVE THE
EXPIRATION OR TERMINATION OF THIS AGREEMENT.
8. INDEMNIFICATION. YOU AGREE TO INDEMNIFY AND HOLD HARMLESS MENTOR GRAPHICS AND ITS
LICENSORS FROM ANY CLAIMS, LOSS, COST, DAMAGE, EXPENSE, OR LIABILITY, INCLUDING
ATTORNEYS' FEES, ARISING OUT OF OR IN CONNECTION WITH YOUR USE OF SOFTWARE AS
DESCRIBED IN SECTION 7. THE PROVISIONS OF THIS SECTION 8 SHALL SURVIVE THE EXPIRATION OR
TERMINATION OF THIS AGREEMENT.
9. INFRINGEMENT.
9.1. Mentor Graphics will defend or settle, at its option and expense, any action brought against you alleging that
Software infringes a patent or copyright or misappropriates a trade secret in the United States, Canada, Japan, or
member state of the European Patent Office. Mentor Graphics will pay any costs and damages finally awarded
against you that are attributable to the infringement action. You understand and agree that as conditions to Mentor
Graphics' obligations under this section you must: (a) notify Mentor Graphics promptly in writing of the action;
(b) provide Mentor Graphics all reasonable information and assistance to defend or settle the action; and (c) grant
Mentor Graphics sole authority and control of the defense or settlement of the action.
9.2. If an infringement claim is made, Mentor Graphics may, at its option and expense: (a) replace or modify Software so
that it becomes noninfringing; (b) procure for you the right to continue using Software; or (c) require the return of
Software and refund to you any license fee paid, less a reasonable allowance for use.
9.3. Mentor Graphics has no liability to you if infringement is based upon: (a) the combination of Software with any
product not furnished by Mentor Graphics; (b) the modification of Software other than by Mentor Graphics; (c) the
use of other than a current unaltered release of Software; (d) the use of Software as part of an infringing process; (e) a
product that you make, use or sell; (f) any Beta Code contained in Software; (g) any Software provided by Mentor
Graphics’ licensors who do not provide such indemnification to Mentor Graphics’ customers; or (h) infringement by
you that is deemed willful. In the case of (h) you shall reimburse Mentor Graphics for its attorney fees and other costs
related to the action upon a final judgment.
9.4. THIS SECTION IS SUBJECT TO SECTION 6 ABOVE AND STATES THE ENTIRE LIABILITY OF MENTOR
GRAPHICS AND ITS LICENSORS AND YOUR SOLE AND EXCLUSIVE REMEDY WITH RESPECT TO
ANY ALLEGED PATENT OR COPYRIGHT INFRINGEMENT OR TRADE SECRET MISAPPROPRIATION
BY ANY SOFTWARE LICENSED UNDER THIS AGREEMENT.
10. TERM. This Agreement remains effective until expiration or termination. This Agreement will immediately terminate
upon notice if you exceed the scope of license granted or otherwise fail to comply with the provisions of Sections 1, 2, or
4. For any other material breach under this Agreement, Mentor Graphics may terminate this Agreement upon 30 days
written notice if you are in material breach and fail to cure such breach within the 30 day notice period. If Software was
provided for limited term use, this Agreement will automatically expire at the end of the authorized term. Upon any
termination or expiration, you agree to cease all use of Software and return it to Mentor Graphics or certify deletion and
destruction of Software, including all copies, to Mentor Graphics’ reasonable satisfaction.
11. EXPORT. Software is subject to regulation by local laws and United States government agencies, which prohibit export
or diversion of certain products, information about the products, and direct products of the products to certain countries
and certain persons. You agree that you will not export any Software or direct product of Software in any manner without
first obtaining all necessary approval from appropriate local and United States government agencies.
12. RESTRICTED RIGHTS NOTICE. Software was developed entirely at private expense and is commercial computer
software provided with RESTRICTED RIGHTS. Use, duplication or disclosure by the U.S. Government or a U.S.
Government subcontractor is subject to the restrictions set forth in the license agreement under which Software was
obtained pursuant to DFARS 227.7202-3(a) or as set forth in subparagraphs (c)(1) and (2) of the Commercial Computer
Software - Restricted Rights clause at FAR 52.227-19, as applicable. Contractor/manufacturer is Mentor Graphics
Corporation, 8005 SW Boeckman Road, Wilsonville, Oregon 97070-7777 USA.
13. THIRD PARTY BENEFICIARY. For any Software under this Agreement licensed by Mentor Graphics from Microsoft
or other licensors, Microsoft or the applicable licensor is a third party beneficiary of this Agreement with the right to
enforce the obligations set forth herein.
14. AUDIT RIGHTS. You will monitor access to, location and use of Software. With reasonable prior notice and during
your normal business hours, Mentor Graphics shall have the right to review your software monitoring system and
reasonably relevant records to confirm your compliance with the terms of this Agreement, an addendum to this
Agreement or U.S. or other local export laws. Such review may include FLEXlm or FLEXnet report log files that you
shall capture and provide at Mentor Graphics’ request. Mentor Graphics shall treat as confidential information all of your
information gained as a result of any request or review and shall only use or disclose such information as required by law
or to enforce its rights under this Agreement or addendum to this Agreement. The provisions of this section 14 shall
survive the expiration or termination of this Agreement.
15. CONTROLLING LAW, JURISDICTION AND DISPUTE RESOLUTION. THIS AGREEMENT SHALL BE
GOVERNED BY AND CONSTRUED UNDER THE LAWS OF THE STATE OF OREGON, USA, IF YOU ARE
LOCATED IN NORTH OR SOUTH AMERICA, AND THE LAWS OF IRELAND IF YOU ARE LOCATED
OUTSIDE OF NORTH OR SOUTH AMERICA. All disputes arising out of or in relation to this Agreement shall be
submitted to the exclusive jurisdiction of Portland, Oregon when the laws of Oregon apply, or Dublin, Ireland when the
laws of Ireland apply. Notwithstanding the foregoing, all disputes in Asia (except for Japan) arising out of or in relation to
this Agreement shall be resolved by arbitration in Singapore before a single arbitrator to be appointed by the Chairman of
the Singapore International Arbitration Centre (“SIAC”) to be conducted in the English language, in accordance with the
Arbitration Rules of the SIAC in effect at the time of the dispute, which rules are deemed to be incorporated by reference
in this section 15. This section shall not restrict Mentor Graphics’ right to bring an action against you in the jurisdiction
where your place of business is located. The United Nations Convention on Contracts for the International Sale of Goods
does not apply to this Agreement.
16. SEVERABILITY. If any provision of this Agreement is held by a court of competent jurisdiction to be void, invalid,
unenforceable or illegal, such provision shall be severed from this Agreement and the remaining provisions will remain in
full force and effect.
17. PAYMENT TERMS AND MISCELLANEOUS. You will pay amounts invoiced, in the currency specified on the
applicable invoice, within 30 days from the date of such invoice. Any past due invoices will be subject to the imposition
of interest charges in the amount of one and one-half percent per month or the applicable legal rate currently in effect,
whichever is lower. Some Software may contain code distributed under a third party license agreement that may provide
additional rights to you. Please see the applicable Software documentation for details. This Agreement may only be
modified in writing by authorized representatives of the parties. Waiver of terms or excuse of breach must be in writing
and shall not constitute subsequent consent, waiver or excuse.