Mentor - Boundary Scan Process Guide
Mentor - Boundary Scan Process Guide
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: supportnet.mentor.com/
Send Feedback on Documentation: supportnet.mentor.com/user/feedback_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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Understanding Boundary Scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Benefits of Boundary Scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Boundary Scan Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Boundary Scan Insertion With BSDArchitect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Top-Down Design Flows Using BSDArchitect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
BSDArchitect Design Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
BSDArchitect User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Control Panel Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Command Line Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Running Batch Mode Using Dofiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Generating a Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Running UNIX Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Interrupting the Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Exiting the Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Resetting the State of BSDArchitect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Chapter 2
External Boundary Scan Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
BSDArchitect External Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
BSDArchitect Output Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
BSDArchitect Output Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Design Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Logic Type of Entity Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Escaped Identifiers for Verilog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Handling Tri-State and Bidirectional Ports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Recommended Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Preparing for Boundary Scan Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Boundary Scan Example Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Creating the HDL Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Creating the Package Mapping File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Invoking BSDArchitect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Setting Up the Boundary Scan Specification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Boundary Scan Insertion Using BSDArchitect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
The Example Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Running BSDArchitect in an External Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Chapter 3
Internal Boundary Scan Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Understanding BSDArchitect Internal Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Inputs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Building I/O Pad Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Invoking the BSDArchitect Internal Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Example Boundary Scan Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Reporting Circuit Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Adding I/O Pads to Ports Without Pads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Reporting Pad Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Adding Boundary Scan Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Boundary Scan Cell Placement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Adding Boundary Scan Cells to Control Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Boundary Scan Cell Placement for Control Ports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Loading Pin Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Making Top-Level Port Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Placing and Connecting External Registers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Sharing Functional Pins With TDO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Uniquification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Unsupported Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Chapter 4
Boundary Scan Customizations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Creating Customizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Technology Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Technology Mapping Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Design Rules Checking for Technology Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Defining Boundary Scan Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Defining Boundary Scan Cells With Built-In Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Defining I/O Pads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Using a Pin Mapping File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Pin Map File Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Pin Map File Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Pin Mapping Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Using User-Defined Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Connecting Internal Scan Circuitry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Adding Dummy Scan Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Specifying the Scan Architecture and Testing Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Specifying the Internal Scan Chain. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Defining the Scan Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Combining Multiple Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Chapter 5
Output Testing and Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Understanding BSDArchitect Output Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
HDL Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Top-Level Interface Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
HDL Test Bench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
BSDL Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Appendix A
Getting Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Online Command Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Mentor Graphics Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Examples and Solutions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Appendix B
Cell Type Assignments for Bidirectional Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Understanding Cell Type Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Cell Type Correspondence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Index
Third-Party Information
End-User License Agreement
The IEEE standard for JTAG is 1149.1 and was originally published in April of 1990. The
standard was revised in 1993, and that document is commonly referred to as IEEE
1149.1a-1993. This 1993 supplement included the definitions of the TAP architecture and the
shift registers implemented within boundary scan elements, along with the new CLAMP and
HIGHZ instructions.
The next extension of the standard came in 1994, and is commonly referred to as the IEEE
1149.1b-1994, which contained the documentation on the Boundary-Scan Description
Language (BSDL).
The most recent revision to the standard occurred in 2001 and is known as IEEE 1149.1-2001.
This version of the standard included modifications to the EXTEST instruction and split the
mandatory SAMPLE/PRELOAD instructions into two separate instructions.
Although your engineering costs may increase slightly because of the additional silicon and
ports used for the boundary scan circuitry, implementing the IEEE 1149.1 standard can
dramatically reduce a design’s manufacturing costs.
edge-connector input TDI (test data in) and ending at the edge-connector output TDO (test data
out). In between, the scan path connects all the devices on the board that contain boundary scan
circuitry. The TDO of one chip feeds the TDI of the next, all the way around the board. The
inputs, TCK (test clock) and TMS (test mode select), connect in parallel to each boundary scan
device in the scan path. With this configuration you can test board interconnections, perform a
snapshot of normal system data, or test individual chips. The TAP (test access port) controller is
a state machine that controls the operation of the boundary scan circuitry.
Boundary scan circuitry’s primary use is in board-level testing, but it can also control circuit-
level test structures, such as BIST or internal scan. By adding boundary scan circuitry to your
design, you create a standard interface for accessing and testing chips at the board level.
Figure 1-1 shows a board containing two chips with boundary scan circuitry.
BOARD
CHIP 1 CHIP 2
TDI
TCK TAP
TAP CIRCUIT PRIOR TO CIRCUIT PRIOR TO
CTRL BOUNDARY SCAN CTRL BOUNDARY SCAN
TMS INSERTION INSERTION
TDO
Boundary Scan
Register (boundary Boundary Boundary
scan path connecting I/O Pad
Scan Cell Scan Path
boundary scan cells)
TDI INSTRUCTION
REGISTER
OPTIONAL
TMS TEST DATA
REGISTERS
Test Access Port (TAP)
TRST
TAP CONTROLLER CIRCUIT PRIOR TO
BOUNDARY SCAN
TCK
BYPASS
REGISTER
TDO
MUX
Figure 1-2 shows the general configuration of a chip after the addition of boundary scan logic.
This simple boundary scan architecture contains the following components:
• Circuit Prior to Boundary Scan — This is the application logic of the original design
before adding boundary scan logic. This logic might already contain internal scan
circuitry (or at least internal scan ports so boundary scan circuitry can connect to the
internal scan circuitry).
• Boundary Scan Cells — These contain memory elements for capturing data from the
circuit, test receivers for capturing transitions on AC pins (per IEEE 1149.6), loading
data into the circuit, or serially shifting data to the next scan cell in the path. The tool
places boundary scan cells between the internal logic and each input, bidirectional, and
2- or 3-state output pin. Boundary scan cells collectively comprise a parallel-in, parallel-
out shift register that runs along the periphery, or boundary, of the original design.
• Test Access Port (TAP) — The TAP consists of a minimum of four pins for the four
signals that make up the test bus. These signals include the test clock (TCK), the test
data input (TDI), the test data output (TDO), and the test mode selector (TMS). Also
shown is an optional asynchronous test reset (TRST).
• TAP Controller — The TAP controller is a finite state machine that controls the
operation of the instruction and test data registers. The TAP controller’s state depends
on the value of the TMS line at each clock pulse.
• Boundary Scan Register — Considered the main test data register, the boundary scan
register is a virtual shift register (consisting of the connection of the individual boundary
scan cells) that can, either serially or in parallel, load and unload input and output data
for the circuit.
• Bypass Register — The bypass register shortens the serial path between TDI and TDO
to one cell when there is no requirement to test a particular device. This shortened path
in effect bypasses the chip, allowing more efficient data shifting to other ICs in the
chain.
• Optional Test Data Registers:
o Device Identification Register — This register contains a device identification
code or programming code used to check that the board has proper chips.
o Data-Specific Registers — These registers allow access to the chip’s test support
features, such as BIST and internal scan paths.
• Instruction Register — The instruction register controls the boundary scan circuitry by
connecting a specific test data register between the TDI and TDO pins. It controls the
operation affecting the data in that register, using a predefined set of instructions. Three
instructions are mandatory, and several others are optional.
The mandatory instructions include:
o EXTEST — This instruction tests circuitry external to the ICs themselves, such as
board interconnect. EXTEST is the main test instruction for boundary scan testing.
o SAMPLE/PRELOAD — This instruction takes data from the chips’s I/O pads and
latches it in the boundary scan register (during normal board operation). The IEEE
Std. 1149.1-2001 has redefined this instruction as two separate instructions
(SAMPLE and PRELOAD).
o SAMPLE — This instruction takes data from the chip’s I/O pads and latches it in
the boundary scan register (during normal board operation).
o PRELOAD — This instruction allows the loading of data into the boundary scan
register before selecting another instruction.
o BYPASS — This instruction enables bypassing of chips not being tested. For
example, if you only want to test one chip in a board with 20 chips in the boundary
scan chain, all chips except the chip under test would be bypassed. Consequently,
shifted data needs to go through only one extra shift to pass through each of the
chips not being tested (as opposed to the entire boundary scan register).
The optional instructions include:
o INTEST — This instruction tests a chip’s internal circuitry by applying a test vector
to, and capturing the output response from, the application logic.
o IDCODE — This instruction connects the device identification register between
TDI and TDO. The device identification register contains the device ID code, which
is normally used to determine if the chip belongs on the board.
o USERCODE — This instruction also selects the identification register, but the
information placed in that register is now user-defined and is meant to expand on the
IDCODE information.
o CLAMP — This instruction forces static 1s or 0s on selected nodes in order to
create a testable situation or block interfering signals.
o HIGHZ — This instruction forces an IC’s output and bidirectional pins into a high-
impedance state. In this condition, an in-circuit tester can test it safely without the
potential for overdrive damage.
o RUNBIST — This instruction executed the circuit’s internal BIST procedure.
1 TEST-LOGIC
RESET INSTRUCTION
DATA REGISTER
0 REGISTER
(SCAN & BOUNDARY SCAN)
RUN-TEST/ SELECT- SELECT-
0 IDLE 1 DR-SCAN 1 1
IR-SCAN
0 0
CAPTURE-DR CAPTURE-IR
1 1
0 0
SHIFT-DR 0 SHIFT-IR 0
1 1
EXIT1-DR EXIT1-IR
1 1
0 0
PAUSE-DR 0 PAUSE-IR 0
1 1
0 0
EXIT2-DR EXIT2-IR
1 1
UPDATE-DR UPDATE-IR
0 0
1 1
The TMS signal (the value shown adjacent to each state transition) controls the state transitions.
The rising edge of the TCK clock captures the TAP controller inputs. Therefore, to avoid race
conditions, the signals whose states require the positive edge of TCK are retimed to propagate
out of the TAP controller at the negative edge of TCK.
The following example pseudocode of the TAP controller state machine illustrates when the
controller needs to retime the signals to avoid the possibility of race conditions:
begin
resetl <= reset_d;
enable <= enable_d;
capturedr <= capturedr_d;
shiftdr <= shiftdr_d;
shiftir <= shiftir_d;
end
Signals in which the event happens at the positive edge of TCK (where the TAP controller
needs to retime the signals to avoid race conditions) are as follows:
• resetl — The Test-Logic-Reset state and the resetl signal is retimed to occur at the
negative edge of TCK.
• enable — This signal is the control signal of the TDO tristate buffer. The enable signal
is retimed to occur at the negative edge of TCK since the TDO signal needs to occur at
the falling edge of TCK.
• capturedr (Capture-DR state)
• shiftdr (Shift-DR state)
• shiftir (Shift-IR state)
The states in which the event happens at the negative edge of TCK (where the TAP controller
does not need to retime the signals) are as follows:
• Instruction support — Full support of required IEEE standards 1149.1 and 1149.1a
instructions.
• Extension support — Support of base extensions to IEEE 1149.1, such as the Device
ID register.
• Compliant VHDL — Generation of VHDL ('93 standard) output that is compliant with
ModelSim® (VHDL), Synopsys' Design Compiler, and other industry synthesis tools.
• Compliant Verilog — Generation of Verilog (OVI version 2.0) that is compliant with
the ModelSim (Verilog), Synopsys' Design Compiler, and other industry synthesis tools.
• RTL-level boundary scan generation — Insertion and interconnection of boundary
scan circuitry at the RTL level, moving generation of test circuitry to earlier in the
design process.
• Customized boundary scan — Generation of default or user-customized boundary
scan architectures.
• I/O pad synthesis — Generation of generic I/O pads or technology-specific I/O pads.
• Automatic connection — Automatic connection of boundary scan to internal scan
logic.
• Test bench generation — Generation of a test bench, which allows testing of the
boundary scan logic after interconnection with the core application logic.
• Test vector generation — Generation of boundary scan test vectors in WGL or
FlexTest Table format, a test pattern format accepted by FlexTest.
• Setup file generation — Generation of ATPG setup files, for designs with generated
boundary scan circuitry controlling internal scan circuitry.
• Compliant BSDL — Production of BSDL output that is compliant with IEEE standard
1149.1b supplement of the IEEE 1149.1 specification.
• Generic element mapping — Mapping of boundary scan elements to generic boundary
scan library cells (which enhances re-targetability of the boundary scan circuitry).
• Technology-specific element mapping — Mapping of boundary scan, I/O pad, and
TAP controller elements to technology-specific library cells. Technology mapping
provides support for replacing generic boundary scan cells, I/O pads, and the TAP
controller by equivalent technology-specific cells.
For information on using BSDArchitect in your design flow, refer to BSDArchitect Design
Flows. For detailed information on the BSDArchitect command set, refer to the BSDArchitect
Reference Manual.
For information on using BSDArchitect in a BIST process flow, refer to the MBISTArchitect
Process Guide and the LBISTArchitect Process Guide.
In the overall design process, the generation of boundary scan logic typically occurs after the
insertion of internal scan chains and before test pattern generation. However, because
BSDArchitect works at the RTL level, it allows you (but does not require you) to perform
boundary scan insertion earlier in the design process.
Note
It is important for you to check with your vendor early on in your design process for
specific requirements and restrictions that may affect your DFT strategies. For example,
the vendor's test equipment may only be able to handle single scan chains, have memory
limitations, or have special timing requirements that affect the way you generate scan
circuitry and test patterns.
• External Flow
For the External flow, the boundary scan logic is added to the design externally.
BSDArchitect creates a new top-level module adding another level of hierarchy to the
design. An instance of the original design core is placed in the new module along with
the TAP controller instance. The I/O pad cells and boundary scan cells are placed
between the original design core and the new top-level ports. This flow cannot be used
for designs that contain I/O pads. For more information, refer to “External Boundary
Scan Synthesis” on page 25.
Note
The External flow was named the “default” flow in previous versions of the Boundary
Scan Process Guide and the BSDArchitect Reference Manual.
• Internal Flow
For the Internal flow, the boundary scan logic is added to the design internally. The TAP
controller instance is placed within the original top-level of the design and the boundary
scan cells are inserted between the I/O pads and the core logic. Currently, the original
design must contain I/O pads to use this flow. For more information, refer to “Internal
Boundary Scan Synthesis” on page 47.
• BSDL Flow
For the BSDL flow, the boundary scan logic is already present in the design. The
BSDArchitect tool checks the logic for compliance to the IEEE 1149.1-2001 standard
and generates patterns and the test bench. For more information, refer to “Using
BSDArchitect in a BSDL Flow” on page 119.
Report
Environment
Boundary Scan Setup
Setup
IO IO Instructions...
Connect and
Define ID Scan Scan
Run
Cell Cell
Registers
(ID code, user code) Output
File Names...
I Scan Source Scan I
Internal Cell
O Cell Core module A O Report
Logic end BSCAN Status
module B
I Scan end
Scan I Save Results...
O Cell Cell O
Internal View Saved
Scan Design Files
T Interface T
D D
I O
Bypass Reset State...
Identification Register
The graphic pane, on the left half of the BSDArchitect Control Panel window, shows the
functional blocks that represent the typical relationship between a core design and its boundary
scan logic. You can click the left mouse button on an active functional block (highlighted in
yellow) in the graphic pane and BSDArchitect opens a dialog box that lets you set up the
boundary scan configuration prior to performing a synthesis run. The button pane lists the
actions most commonly used while in BSDArchitect. Click the left mouse button on a button in
the button pane and BSDArchitect performs the appropriate run control.
there are pulldown and popup menu items. In either case, the session and command transcript
panes provide a running log of your session.
<Tool_Name>
File Setup Kernel Report Windows Help
BSDA> dof bsda.do
//command: add tech cell \
inpad input \
-inputs my_pin \
-outputs my_din
-connect my_pin/pin \
my_din/din
//Analyzing Input Pad Cell
// ‘inpad’.....
// Note: Technology Cell
// ‘inpad’ successfully
// added
dofile bsda.do
BSDA> |
The session transcript is the largest pane in the Command Line window, and it lists all
commands performed and tool messages. In command-line mode, by default, the session
transcripts to the shell window.
Commands follow the 3-2-1 minimum typing convention in both the command-line and GUI
modes. As a short cut (in most cases) you need only type the first three characters of the first
command word, the first two characters of the second command word, and the first character of
the third command word. In cases where the 3-2-1 rule leads to ambiguity between commands,
such as with Set Bscan Capture and Set Bscan Controller (both reducing to “set bs c”), you need
to specify the additional characters to alleviate the ambiguity. Here, the minimum typing for the
Set Bscan Capture command becomes “set bs ca,” and for the Set Bscan Controller command it
becomes “set bs co.”
You should also be aware that when you issue commands with very long argument lists, you
can use the “\” line continuation character. For example, you can specify the Add Technology
Cell command within a dofile (or at the system mode prompt) as follows:
For more information on dofile scripts, see the “Running Batch Mode Using Dofiles”.
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 the tool as a batch process using the commands contained in my_dofile.do,
enter:
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 by using the Set Dofile Abort
command
You can generate log files by using the -Logfile switch when you invoke the tool.
BSDA> system ls
BSDA> exit
If you have generated circuitry that you have not saved, the tool will prompt you as to whether
or not to save the information.
This chapter and outlines how to use BSDArchitect tool to synthesize and verify boundary scan
circuitry for your design using the External flow.
The External design flow begins with an HDL model, which can be either a VHDL entity or
Verilog module. If you plan to insert internal scan circuitry into your design, you need to modify
the entity or module description to include the scan ports that will eventually be part of the
design. If your design is already synthesized and contains scan circuitry, you only need to create
an HDL entity of the top-level of your design to use as input to BSDArchitect.
If you are using custom library packages for a VHDL design, you need to supply a package
mapping file (dft.map) in your working directory that contains the packages/libraries used in the
core entity description.
You can now run BSDArchitect to create and insert boundary scan circuitry into your design.
Once you verify that the boundary scan circuitry is compliant, you can synthesize the VHDL or
Verilog model of the boundary scan circuitry to a gate-level model. If the circuit contains
internal scan circuitry controlled by the boundary scan circuitry, you can use BSDArchitect to
generate two ATPG setup files: a dofile, for setting up scan circuitry information, and a test
procedure file, for specifying the operation of the scan circuitry. The “Test Procedure Files”
section in the Scan and ATPG Process Guide discusses test procedure files in more detail. You
can re-use the HDL test bench to verify correct operation and IEEE compliance of the
synthesized design.
The second half of this section discusses how to use these outputs for boundary scan
verification further along in the design flow.
the core design. Following boundary scan insertion, by default, the top-level module typically
contains the following components:
Top-Level Module
TDI
TDO
I/O BSR Core Logic TAP TCK
Buffer
TMS
TRST
In case of technology mapping, even if ASIC vendor boundary scan cells contain I/O pads, the
boundary scan cells are placed in the BSR instance only.
If a USERCODE instruction is added using the Set Bscan Usercode -Port command,
BSDArchitect generates another top level block for the Device Identification Register.
The tool can also generate an unbuffered top-level design (no I/O Buffer-block instances).
However, the following must be taken into account when generating an unbuffered top-level
design.
• If you add tri-state ports, the top-level unbuffered output will have interface signals for
the tri-state’s control ports.
• If you add bidirectional ports, the tool will make available their control and input signals
at the top-level.
• If you add differential ports, they will not be used in the top-level module and only one
corresponding signal will be made available at the top-level.
To save unbuffered outputs, use the Save Bscan command with the -Unbuffered switch. The
tool will not generate an RTL test bench or a BSDL description.
output Q;
--
-- Example pin map file. File name “pin_map”.
--
-- Syntax:
--
-- logical_name PINID -p pad_name -c cell_names
--
-- The command to load the pinmap file is:
--
-- load pin map pin_map
--
--
CLK clk -c BC_4 -inv;
D d_id -c BC_3;
--
// note that you only specify the out pin for BC_7
//
PAD_OUT[0] PAD_O[0] -c BC_7;
PAD_OUT[1] PAD_O[1] -c BC_1;
PAD_IN[1] PAD_I[1] -c BC_1;
EN1 VOID -c BC_2_A;
--
-- The ports for the I/O Bus IN_IO and OUT_IO are
-- added. The control for this port is an external
-- signal IO_CTRL (not in original design IO).
--
-- logical_name PINID -p pad_number -c cell_names
--
IO[0] out[0] -c BC_7;
IO[1] out[1] -c BC_1;
IN_IO[1] IN[1] -c BC_1;
IO[2] out[2] -c BC_7;
IO[3] out[3] -c BC_7;
--
--
Q DFFQ -c BC_1;
--
-- The format for specifying a differential port’s pin
--
-- ID’s. If the core port is “SUM”, the pin map will be:
--
-- SUM S1 S2 -c BC_1;
--
-- where S1 and S2 are the pin ID’s for the differential
-- port.
--
-- If a pad with no connections is desired. Use the value
-- “VOID” for both the port_name and PINID fields.
--
-- VOID VOID -p 1;
-- VOID VOID -p a2;
--
The Output
Figure 2-3 shows the four basic BSDArchitect output files generated by a default run
Run Boundary
Scan Insertion
my_mod.bsd my_mod_tb.v
my_mod_top.v
my_mod_bscan.v
tap_i
core_i
clockdr
CLK EN1 clock_bsr
D IO_OUT
my_mod_top.v enable TDO_enable
my_mod_top.v
The following sections discuss design and library issues you should understand before
proceeding with boundary scan insertion.
Design Issues
The following subsections discuss design issues and the methods for handling these issues to
achieve proper boundary scan insertion.
• Width of enables
BSDArchitect handles scalar, vector, or vector slice enables for each tri-state bus and
each bidirectional bus.
• Widths of bidirectional signal
The widths of bidirectional input and output signals must be the same. BSDArchitect
checks width constraints and reports errors when violations occur.
• Specifying tri-state and bidirectional ports
You must specify all tri-state and bidirectional enable signals. This means that for tri-
state ports, you must specify the output and control signals, and for bidirectional ports,
you must specify the input, output, and control signals. You can do so either by using the
mgc_bs_port_info attribute in VHDL or ‘specparam’ statement in Verilog, or from the
BSDArchitect session using the Add Tristate Port command. For best performance, use
the mgc_bs_port_info attribute or the specparam statement. However, to work from the
interactive BSDArchitect session, use the Add Tristate Port command.
Either method allows you to specify the input and output signals as a scalar (single port
or indexed signal), vector (buses or indexed signals), or vector slices (a range of ports or
indexed signals). You can also specify the control (enable) signal using the same
criteria, as well as its (their) active level, either “active_high” or “active_low” (the
default).
The following paragraphs provide examples of using mgc_bs_port_info in VHDL and
Verilog, and of using the Add Tristate Port command from a BSDArchitect session.
A VHDL example of the mgc_bs_port_info attribute for a bidirectional port is:
attribute mgc_bs_port_info : string;
attribute mgc_bs_port_info of example_core : entity is
"(d_i/in, d_o/out, d_ctrl/ctrl/active_high)";
library ieee;
use ieee.std_logic_1164.all;
entity tri is
port(data_in : in std_logic_vector(31 downto 0);
data_out : out std_logic_vector(31 downto 0);
ctrl_bus : out std_logic_vector(1 downto 0);
ctrl : out std_logic);
end tri;
Do not use quotes, ampersands, or newlines between the parentheses defining the
signals in the entity description. Line continuation characters and multiple attributes
(with same name) are not allowed in VHDL. Specify multiple ports by placing them in a
single continuous line as shown above.
Because Verilog simulators do not support user-defined attributes, you must use the
specparam method to specify tri-state and bidirectional information.
A Verilog example of the mgc_bs_port_info specparam for specifying multiple tri-state
ports is:
module aha(co,sum,c,b,a,d_i,d_o,d_c);
input a,b,c;
output sum,co;
input d_i;
output d_o, d_c;
specify
specparam mgc_bs_port_info = "(d_i/in, d_o/out, d_c/ctrl)";
endspecify
endmodule
An Add Tristate Port command example for a bidirectional port using VHDL range
indicators is:
add tristate port -in “d_in(3 downto 2)” -out “d_out(0 to 1)” -ctrl d_ctrl(1) -active high
• Naming conventions
You can specify your own naming convention by entering the name in the
mgc_bs_port_info attribute. BSDArchitect adds one level of hierarchy to the design and
names the top-level tri-state or bidirectional signals to match the output port name. Use
the following syntax if you want to define a unique name for the top-level port:
<top_level_port_name>/top
For example:
attribute mgc_bs_port_info of example_core:entity is
"(d_i/in, d_o/out, d_ctrl_o/ctrl/active_high, d_out/top)";
e: out std_ulogic;
f: out std_ulogic);
attribute mgc_bs_port_info : string;
attribute mgc_bs_port_info of example_core:entity is
"(d_i/in, d_o/out, d_ctrl/ctrl/active_high)";
end example_core;
In this case, the tool places a single boundary scan cell on the enable signal. You
can use your own naming convention for the top-level bidirectional signal name
by following the “Naming conventions” on page 35.
• Case B (core uses enable)
Because the enable signal controls the output ports as well as some of the
internal core circuitry, you should include the enable signal in the port map for
the core logic. For example, if your design has three input ports (a, b, c), a
bidirectional port (d), and two output ports (e, f), all of type std_ulogic, your
entity description should look like this:
You should connect d_ctrl_o to d_ctrl_i inside the core. When BSDArchitect
processes the entity and finds the enable signal in the port map, it places one
boundary scan cell on the input side (d_ctrl_i) and one boundary scan cell on the
output side (d_ctrl_o), as shown in Figure 2-8.
Limitations
You should be aware of the following limitations when you use BSDArchitect:
Additionally, it is a good idea to put port declarations before any other module
items. Thus, if the port declarations are first in the file, you need not worry if the
remainder of the file contains unsupported constructs or syntax.
• Adding pull-up resistors to the boundary scan ports.
The IEEE Std 1149.1-1990 and IEEE Std 1149.1a-1993 specification states that
boundary scan ports TDI, TMS, and TRST (if used) require pull-up resistors to power
up and keep these signals at known states when they are idle. BSDArchitect produces an
output VHDL file that supports this requirement. After completing synthesis and
optimization, you must manually add I/O ports that contain these pull-up resistors to the
design.
• Power-up reset circuitry.
BSDArchitect does not create power-up reset circuitry. You can initialize a simulator to
simulate the circuitry BSDArchitect creates. However, you must eventually add
circuitry to the test logic that controls the power-up reset of the TAP controller to avoid
bus contention and possible damage to the on-chip logic.
• Clocking for internal scan chains.
If you have a single internal scan chain that spans a design, and this design contains
various components controlled by clocks of different frequencies, you must make sure
that the clocking for your internal scan chain functions properly. BSDArchitect does not
perform this type of checking.
• Unsupported 1149.1-1990 BSDL attributes
The following 1149.1-1990 attributes, which were dropped from the 1149.1-1994 and
on standards, are not supported by BSDArchitect:
o INSTRUCTION_GUARD
o INSTRUCTION_DISABLE
o INSTRUCTION_SEQUENCE
o INSTRUCTION_USAGE
o BOUNDARY_CELLS
Recommended Practices
The following are recommended practices:
library ieee;
use ieee.std_logic_1164.all;
entity aha is
port( s:out std_ulogic;
co:out std_ulogic;
a:in std_ulogic;
b:in std_ulogic;
c:in std_ulogic);
end aha;
For VHDL:
<mgcdft tree>/pkgs/dft.any/vhdl_src/stdlogic.vhd
<mgcdft tree>/pkgs/dft.any/vhdl_src/standard.vhd
If you do not specify the location of the std_logic_1164 and standard packages in your custom
dft.map file, BSDArchitect searches these locations by default.
For more information on the syntax of this file, refer to “Package Mapping File Syntax” in the
BSDArchitect Reference Manual.
Invoking BSDArchitect
To invoke BSDArchitect, enter the following at the shell prompt:
After BSDArchitect invokes, it displays the following prompt and the command line:
BSDA>
If you want BSDArchitect to invoke in the GUI mode, omit the -nogui switch.
You can now proceed to set up for and insert boundary scan logic. The invocation for VHDL
input and Verilog input is identical. BSDArchitect reads in either format, and later produces
output in the same format used as input.
The boundary scan specification consists of a set of commands that customize your particular
boundary scan implementation. Refer to “Boundary Scan Customizations” for more
information. You can either enter commands interactively at the BSDA> command line prompt,
store the setup commands in a file and run it using the Dofile command, or enter the commands
in the command line window of the graphical user interface. For more information on dofiles,
refer to “Running Batch Mode Using Dofiles” on page 23.
output Q;
endmodule
This example loads a pin mapping file, runs the boundary scan insertion with all system defaults
(using the Run command with no prior setup) and reports on the logic that BSDArchitect adds.
BSDArchitect then saves the buffered output (my_mod_bscan.v), the interface description file
(my_mod_top.v), the test bench file (my_mod_tb.v), and the BSDL description file
(my_mod_bscan.bsd).
Note
You must save the output netlist in the same format (VHDL or Verilog) as was the input
netlist that you read into the tool. For more information see the Set Output Format
command.
The following report shows the default architecture created in this session.
-------------------------------------------------------------
BSDArchitect Report
-------------------------------------------------------------
Design : my_mod
Date & Time : Fri Dec 17 13:27:49 1999
INSTRUCTION REPORT:
-------------------------------------------------------------
Instruction Target Register Opcode
-------------------------------------------------------------
EXTEST BOUNDARY 0000
BYPASS BYPASS 1111
SAMPLE_PRELOAD BOUNDARY 0001
-------------------------------------------------------------
PORT REPORT:
-------------------------------------------------------------
No. Port BSC Mode Type Cell Name
-------------------------------------------------------------
1 CLK YES Observe bc_4 BC_4
2 D YES Both bc_3 BC_3
3 PAD[0] YES Both bc_7 BC_7
4 PAD[1] YES Both bc_1 BC_1
5 PAD_IN[1] YES Both bc_1 BC_1
6 EN1 YES Both bc_2_a bc_2_a
7 IO[0] YES Both bc_7 BC_7
8 IO[1] YES Both bc_1 BC_1
9 IN_IO[1] YES Both bc_1 BC_1
10 IO[2] YES Both bc_7 BC_7
11 IO[3] YES Both bc_7 BC_7
12 Q YES Both bc_1 BC_1
13 IN_IO[0] NO
14 IN_IO[2] NO
15 IN_IO[3] NO
16 PAD_IN[0] NO
TCK NO
TMS NO
TDI NO
TRST NO
TDO NO
-------------------------------------------------------------
Total no. of external control BS cells : 1
Total no. of core BS cells : 12
Total no. of BS cells : 13
Note: Port ordering is from TDO to TDI.
This chapter outlines how to use BSDArchitect to synthesize boundary scan circuitry for your
design using the Internal flow. For specific information on BSDArchitect functionality or
commands, refer to the BSDArchitect Reference Manual.
Inputs
There are two required inputs: the design netlist and the I/O pad descriptions. The design netlist
must be formatted in Verilog and the I/O pad descriptions must use Verilog specparams. The
I/O pad descriptions may be contained within the netlist. For more information, see “Building
I/O Pad Definitions” on page 48. Refer to “Recommended Practices” on page 40 for more
information on formatting your design.
Optional input files include the pin mapping file and user dofile. For more information on pin
mapping files, see “Loading Pin Maps” on page 59. You can execute a dofile using the Dofile
command or the -Dofile switch at invocation. Refer to “Running Batch Mode Using Dofiles” on
page 23 for more information on dofiles.
Note
VHDL netlists are not supported in the Internal flow.
Outputs
BSDArchitect formats the output HDL models and test bench files in the Internal flow in
Verilog. For example, the <prefix>_bscan.<suffix> output file will be <prefix>_bscan.v. The
remaining file formats are as described in “BSDArchitect External Flow” on page 25 .
• In a separate Verilog file — Direct the tool to read this file by including the -Library
switch at invocation. Design updates may be simplified with this method because
updates for the I/O pad definitions do not require changes to the original netlist. This is
the recommended method.
• In the design netlist — When you place Verilog specparams within the design netlist,
the netlist must contain the Verilog descriptions of the I/O pad cells and you must put
the specparams within these descriptions. The -Library switch is not needed at
invocation for this method.
The important parameters in both of these methods are the name of the design and the mapping
information. This information, along with the Verilog descriptions of the I/O pads, is enough for
the tool to search for existing I/O pads in the design. For more information on using Verilog
specparams, refer to “Defining I/O Pads” on page 92.
Use the -Internal_flow switch to invoke the BSDArchitect Internal flow. Include the -Library
switch along with the name of the appropriate I/O pad descriptions file. You do not need to use
the -Library switch if your design netlist already contains Verilog specparams to define the I/O
pads. Refer to “Shell Command Dictionary” in the BSDArchitect Reference Manual for more
information on the invocation and available switches.
Figure 3-2 illustrates the Internal tool flow for BSDArchitect. The flow begins with the tool
invocation including the -Internal_flow switch. Once invoked, BSDArchitect searches the
specified netlist for I/O pads. If existing pads are found, the tool continues and inserts the
necessary boundary scan logic. If there are no I/O pads in the design or the existing I/O pads are
not recognized, the tool reports that no pad instance was found and exits the invocation. Designs
that do not have existing I/O pads must use the External flow. If BSDArchitect is not detecting
your existing pads, see “Defining I/O Pads” on page 92 to verify that your pads are defined
correctly.
Note
BSDArchitect supports all pad types for I/O pads included in the netlist but only supports
adding input and output pads on ports without I/O pads in the netlist. Bidirectional ports
without pads are ignored.
Top-Level Module
Core Logic
The tool searches for the pad cells and locates the ports on each pad. When the Run command is
issued, the tool traces the pad connections checking for errors. When no errors are found, the
tool inserts the boundary scan circuitry.
Example 3-2 shows the resulting boundary scan register (BSR) inserted by the tool highlighted
in red. The red squares represent the newly inserted boundary scan cells.
Core Logic
Use the following command to report all the instances in the design:
Or include the optional design_name argument to display the hierarchical tree structure of all
the instances within a specific instance. For example:
• Add Technology Cell — Defines cell information for technology mapping of boundary
scan cells, I/O pad cells, and custom TAP controllers.
• Set Technology Mapping — Sets a target technology when creating technology-specific
boundary scan logic.
• Add Pad Cell — Associates a specified I/O pad cell with specified core ports.
• Set Pad Cell — Associates specified I/O pad cells with specified port types.
The tool adds JTAG ports and pads after creating the boundary scan logic. For new JTAG ports,
the tool creates five new pins and adds default pads to those pins. A tri-state pad is added for
TDO. For more information on optional TDO connections, see “Sharing Functional Pins With
TDO” on page 62. Custom input and output pads can be added for JTAG ports.
• The ports have standard names (tdi, tms, tck, trst, tdo). The tool automatically
recognizes the ports and adds the default or user-specified I/O pads.
• The ports have user-specified names given by the Set Controller Naming command.
This command is either entered in the command line or executed within a dofile.
BSDArchitect places all new pads in the same module at the top level of the design. This
includes pads added on both ports without pads and on JTAG ports. You cannot use the Set Pad
Instances command in the Internal flow to change this behavior.
The following example defines and associates an output pad pad_out_1 with output port out1:
add technology cell pad_out_1 output -inputs in -outputs out -connect in/dout out/pin
add pad cell pad_out_1 out1
• To specify a boundary scan cell for one or more specific ports, use the Add Bscan Cell
command. The following example places a BC_1 type cell on the output ports out1 and
out2:
add bscan cell bc_1 out1 out2
• If you do not want a boundary scan cell placed on a particular port, use the Add Bscan
Cell command and specify ‘none’ for the boundary scan cell type. The following
example specifies that no boundary scan cell is placed on output port out3:
add bscan cell none out3
• To specify boundary scan cells for all ports or ports of a given type, use the Set Bscan
Cell command. For example you can specify a cell for placement on all input ports. Any
cells specified with the Add Bscan Cell command will override the Set Bscan Cell
command regardless of the command order. The following example places a BC_1 type
cell on all output ports:
set bscan cell -out bc_1
• To specify boundary scan cells for each port and specify the port order, use a pin
mapping file. For more information on using a pin mapping file, see “Loading Pin
Maps” on page 59.
After specifying boundary scan cells, verify your changes with the Report Bscan Cell
command. BSDArchitect inserts the specified or default boundary scan cells in your design
when you issue the Run command.
Note
Your design may be modified, if necessary, to uniquify modules. For more information,
see “Uniquification” on page 63.
• Tri-state ports — Two boundary scan cells are added: one cell for the output port and
one for the control port. BSDArchitect uses a BC_1 cell for both ports by default.
• Bidirectional 3-cell model — Three boundary scan cells are added: one cell is added for
each of the input, output, and control ports.
• Bidirectional 2-cell model — Two boundary scan cells are added: one combined cell for
the input and output data ports and one cell for the control port. BSDArchitect uses the
bidirectional 2-cell model by default with a BC_7 combined cell for the data ports and a
BC_2_A cell for the control port.
In the Internal flow, BSDArchitect inserts all boundary scan circuitry into the existing netlist.
The control ports for tri-state and bidirectional pads may not be visible at the top level of the
design. To access these ports, use the notation in Table 3-1 for the Add Bscan Cell and Delete
Bscan Cell commands.
Use parentheses when specifying a control port of a bus signal. For example:
The following example adds a BC_1 type cell to the port named “tri” and its control port:
The following example adds the user-defined cell my_BC_7 to the bidirectional port named
“bidi_X”:
The following example adds the boundary scan cell my_BC_2_A to the control ports of the
bidirectional ports named “bidi_X” and “bidi_Y”:
The following example of a bidirectional 3-cell model adds a BC_1 boundary scan cell to the
output, control, and input of the bidirectional port named “bidi_K”:
Example 3-5 illustrates where there is no top level signal associated with the control port of the
tri-state pad. The following commands add boundary scan cells to the tri-state port x using the
notation in Table 3-1:
• The control signal supports a single pad and does not pass through an inverter or buffer.
BSDArchitect places the control boundary scan cell in the parent module of the
bidirectional or tri-state pad. Example 3-6 shows the BC_2 cell placed within the parent
module at the same hierarchy as the bidirectional pad instance.
• The control signal supports a single pad and passes through one or more buffers or
inverters.
BSDArchitect places the control boundary scan cell behind all buffers in the control
signal path at the same hierarchy as the parent module of the first buffer or inverter. If
multiple instances of the parent module exist, the control boundary scan cell is placed at
the highest hierarchy between the signal source and the buffer or inverter. Example 3-7
shows the BC_2 cell placed at the same hierarchy as the inverter parent instance
parent_inv_inst1. If multiple instances of parent_sig_inst exist, the BC_2 cell would be
in the same position because this location is also the highest hierarchy between the
signal and the inverter parent instance.
• The control signal supports multiple pads and does not pass through an inverter or
buffer.
BSDArchitect places the control boundary scan cell immediately before the common
point within the same module as the common point. Example 3-8 shows the BC_2 cell
placed in the top module just before the control signal splits to the separate pads. If this
example only contained the first two bidirectional pads and the common point was
• The control signal supports multiple pads and passes through one or more inverters or
buffers.
BSDArchitect places the control boundary scan cell before the common point behind all
inverters or buffers in the control signal path within the parent module of the buffer or
inverter closest to the signal source. If multiple instances of that parent module exist in
the design, the control boundary scan cell is placed at the highest hierarchy between the
signal source and the inverter or buffer. Example 3-9 shows the BC_2 cell placed within
the parent module of the inverter. If there were multiple instances of
parent_parent_sig_inst, the BC_2 cell would be at the same position because this
location is also the highest hierarchy between the inverter and the signal source.
When mapping tri-state or bidirectional ports in the Internal flow, use the syntax outlined in
Table 3-1 on page 55. Use the keyword “void” for the pinID of the control (oe) and input (din)
ports because they are not mapped directly to a packaging pin.
When power or ground ports are declared in the pin mapping file by the -pwr or -gnd switch, the
tool checks the netlist for the pad cells and makes appropriate connections. Consider the
following four cases:
1. The port exists at the top level, and there is no pad cell specified in the pin map file.
If a pad is found in the netlist, the tool issues an error. If no pad is found in the netlist,
the tool removes the specified port from the top level, adds linkage in the BSDL file, and
adds a generic pad cell to the port.
2. The port exists at the top level, and a pad cell exists in the netlist and is specified in the
pin map file.
The pad cell specified in the file must be predefined by the Add Technology Cell
command or the tool issues an error. The tool removes the port from the top level and
adds linkage in the BSDL file.
3. The port does not exist at the top level, and there is no pad cell specified in the pin map
file.
In this case, it is not clear that a power pad is desired. The tool adds linkage in the BSDL
file but does not add a pad cell.
4. The port does not exist at the top level, and a pad cell exists in the netlist and is specified
in the pin map file.
The pad cell specified in the file must be predefined by the Add Technology Cell
command or the tool will issue an error. Linkage will be added in the BSDL file.
The following is an example pin map file for use with the Internal flow:
//-----------------------------------------------------------------------
//Port Pin Power/ Cell Pad Cell Safe
//Name ID Ground Type Name Value Inv
//-----------------------------------------------------------------------
bit_bidi/oe void -cell bc_2_a ;
bit_bidi 0 -cell bc_7_low -safe X ;
bit_diff_o 3 4 -cell bc_1 -safe X ;
bit_int_o 7 -cell bc_1 -safe X ;
bit_o 9 -cell bc_1 -safe X ;
bit_oc_o 10 -cell bc_1 -safe X ;
bit_tri/oe void -cell bc_1 ;
bit_tri 12 -cell bc_1 -safe X ;
bit_bidi2/oe void -cell bc_1 ;
bit_bidi2 13 -cell bc_1 -safe X ;
bit_bidi2/din void -cell bc_1 ;
bit_diff_i 1 2 -cell bc_1 -safe X ;
bit_gnd 5 -gnd -p ground_cell ;
bit_i 6 -cell bc_1 -safe X ;
bit_inv_i 8 -cell bc_1 -safe X ;
bit_pwr 11 -pwr -p power_cell ;
tdi 14 ;
tms 15 ;
tck 16 ;
tdo 17 ;
trst 18 ;
a primary input port, the connection is made from the parallel_output of the boundary scan cell
for the input port.
The following commands add an external register to the design and remove the ports connected
to the capture and update ports of external register from the top level:
To make the ports visible at the top level, use the Delete Nontop Port command. For example:
The resulting core is illustrated in Example 3-11. Port Q has a multiplexer controlled by the
instruction signal, my_inst. This mux is placed within the TAP module. The input port P and the
output port X are no longer available at the top level.
To set up your design for TDO pin sharing, the netlist must include a top-level output port
named TDO with a tristate pad. The ports on the tristate pad must be connected to core signals.
BSDArchitect recognizes this as intension for pin sharing and adds the necessary circuitry.
For TDO pin sharing, the tool adds two multiplexers as illustrated in Example 3-12. Multiplexer
M1 controls the signal that operates the output enable (oe) of the tri-state or bidirectional pad.
Multiplexer M2 controls the signal for the dout port of the pad. The select signal for both M1
and M2 comes from the instruction decoder in the TAP controller. When the instruction register
contains an unused opcode (not defined as a JTAG or user instruction), the tool assumes that the
chip is in functional mode and the TDO pin is controlled by the core. When the instruction
register contains a defined opcode, the tool assumes the chip is in testing mode, and the TDO
pin is used accordingly.
There is one problem with TDO pin sharing. According to the IEEE 1149.1 - 2001 standard, the
presence of an unused opcode in the instruction register should trigger a bypass of the chip.
Because TDO pin sharing uses the unused opcodes to define when the chip is in functional
mode, the unused opcodes are not used for bypass. You must define opcodes for bypass use.
Uniquification
When a design has I/O pads defined in the netlist, BSDArchitect inserts boundary scan cells at
the same hierarchy as the pads. When boundary scan cells are added to an existing module, the
module definition is modified. Any change to the module definition will change all instances of
that module unless the modified instance is uniquified.
The tool uniquifies the module instance by creating a new unique module to replace the
modified module. The instance name remains the same. The process is repeated for parent
modules if there are multiple instances of the parent module.
When I/O pads are at the top level, and boundary scan cells are also at the top level, there is no
need for Uniquification. This is the case for the External flow and for I/O pads and boundary
scan cells added on ports without pads in the Internal flow.
Unsupported Commands
The following commands are not available in the Internal flow:
Refer to the Command Dictionary in the BSDArchitect Reference Manual for more information
on specific commands.
You can run boundary scan insertion after customizing the setup. Examples of customizations
include changing the width of the instruction register, adding optional instructions, setting up
for technology-mapped output, and connecting boundary scan circuitry to internal scan
circuitry.
Creating Customizations
Customizations can be entered as individual commands in the command line window or
command prompt, or they can be entered into a dofile. To issue commands in a dofile, enter the
following command at the “BSDA>” prompt:
dofile cust_bscan.do
In this example, the dofile, cust_bscan.do, contains the customized setup commands. The
following example shows contents of this dofile:
//
// Specify the pin ordering using a pinmap file
//
// There are two methods that can be used to specify the port ordering.
// The following displays an example of each.
//
// Here we display the use of the set bscell command in a dofile.
//
//* add bscan cell BC_4 CLK
//* add bscan cell BC_3 CLR
//
// define the order of the boundary scan cells
//* set port order CLK CLR D EN1 IN_IO ...
//
// Here we display the use of a pin map file.
//
load pin map pin_map
// if the load pin map command is used after the d1_pins.do dofile then
// the definitions in the pinmap replace those made in the dofile
//
// Do not connect a boundary scan cell to pin D
add bscan cell none D
Technology Mapping
Technology mapping provides support for replacing generic cells by equivalent technology-
specific cells. Technology-mapped cells can be boundary scan cells, I/O pad cells, boundary
scan cells with built-in I/O pads, and TAP controllers.
Technology mapping support is cell specific rather than instance specific. Consequently, the
attributes specified for a particular technology cell affect all instances of that cell.
The technology-mapped cells may be defined using library files or using the Add Technology
Cell command.
Note
For the internal flow, you can define the I/O pads in the design netlist or in a separate
library file at invocation. After invocation, however, you can only add input and output
I/O pads.
In some ASIC libraries, the boundary scan logic is included in PAD cells. In others cases, ASIC
libraries are separate from pad cells. In both cases, BSDArchitect instantiates boundary scan
cells within the BSR instance entity.
When using technology mapping in your design, refer to “Understanding BSDArchitect Output
Files” on page 115 to write out proper files.
Libraries
Generic library components corresponding to clock_gating options are presented in the
following directory within the Mentor Graphics DFT software tree:
You use these components to create a generic RTL level description of the boundary scan
circuitry. Once you define a cell in a library file, you can add it to the design using the Set
Technology Mapping command.
Technology-specific library files contain information about the cells and their interconnections.
BSDArchitect accepts libraries in two formats. If you are using the Internal flow, your library
must be a Verilog file. The following formats define the cells:
• VHDL — You map the vendor components to generic components using the ‘attribute’
statement.
• Verilog — You map the vendor components to generic components using the
‘specparam’ statement.
Table 4-1 shows how the library attributes translate for use with the Add Technology Cell
command.
Table 4-1. Library Attributes vs. Command Line Arguments
Library User-Defined Attributes Add Technology Cell Arguments
mgc_dft_cell_type cell_type
mgc_dft_pin_type -Connect
mgc_dft_connect -Connect
mgc_dft_built_in_pad_type -BUilt_in_pad
mgc_dft_bscell_mode -BScell_mode
mgc_dft_disable_result -Disable_result
If you are defining the cell using the Add Technology Cell command, specify the cell type as
the second command argument following the new cell name. For more information, refer to the
Add Technology Cell command in the BSDArchitect Reference Manual.
If you are defining the cell using the Add Technology Cell command, specify the port mapping
information following the -Connect switch. Refer to the Generic Port Names table for the Add
Technology Cell command for specific port names for all cell types.
You must provide appropriate pin mapping information for all pins in the generic cell and the
vendor cell, otherwise BSDArchitect generates an error message. The Generic Port Names table
shows which ports you must define and which ports are optional.
The following three sections show the pin mapping information for possible cases using
different methods:
1. vpin/lpin — Maps vpin on the vendor cell to lpin on the generic cell.
2. vpin/ground — Maps vpin on the vendor cell to the ground line.
3. vpin/power — Maps vpin on the vendor cell to the power line.
4. delete/lpin — Indicates that lpin on the generic cell does not exist on the vendor cell.
5. vpin/open — Indicates that vpin on the vendor cell is left unconnected.
6. vpin/vpin_n — Maps vpin on the vendor cell to the signal vpin_n in the synthesized
circuitry. If the signal vpin_n is not already available in the instance containing the
mapped cell, BSDArchitect creates a local signal with name vpin_n.
The following snippet specifies the port mapping information for a BC_1 cell vendor_bc1 using
the ‘mgc_bs_pin_map’ attribute:
1. -connect vpin/lpin — Maps vpin on the vendor cell to lpin on the generic cell.
2. -connect vpin/gnd — Maps vpin on the vendor cell to the ground line.
3. -connect vpin/pwr — Maps vpin on the vendor cell to the power line.
4. -nonexistent lpin — Indicates that lpin on the generic cell does not exist on the vendor
cell.
5. -connect vpin/open — Indicates that vpin on the vendor cell is left unconnected.
6. -connect vpin/vpin_n — Maps vpin on the vendor cell to the signal vpin_n in the
synthesized circuitry.
7. -connect vpin/“path/my_net” — (for Internal flow only) Maps vpin on the vendor cell
to the net my_net. Net names must be enclosed in double quotes.
The following snippet specifies the port mapping information for a BC_1 cell vendor_bc1 using
the Add Technology Cell command:
After defining a boundary scan cell, the cell may be added using the Add Bscan Cell or Set
Bscan Cell command.
When you map a technology boundary scan cell to a standard cell type, the mode information is
inherited from the standard cell type. For bc_x cells, however, you can specify a cell mode by
using the ‘mgc_dft_bscell_mode’ attribute, whose values can be ‘observe’ or ‘both.’ The
default is ‘both.’
BC_1 Cell
Figure 4-1. Generic BC_1 Cell
mode
shiftdr
serial_output G1
parallel_input 1
parallel_output
G1 1
1
1D 1D
1
C1 C1
serial_input
clockdr updatedr
The following example is a Verilog BC_1 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_1";
specparam mgc_dft_connect$v_extra_pin = "extra_pin_forbc1";
specparam mgc_dft_pin_type$v_clockdr = "clockdr";
specparam mgc_dft_pin_type$v_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$v_updatedr = "updatedr";
specparam mgc_dft_pin_type$v_mode = "mode";
specparam mgc_dft_pin_type$v_parallel_input = "parallel_input";
specparam mgc_dft_pin_type$v_parallel_output = "parallel_output";
specparam mgc_dft_pin_type$v_serial_input = "serial_input";
specparam mgc_dft_pin_type$v_serial_output = "serial_output";
endspecify
endmodule
The following example is a Verilog definition using the ‘mgc_bs_bsr_type’ attribute:
specify
specparam mgc_bs_bsr_type = "bc_1";
specparam mgc_bs_pin_map = " \
v_extra_pin/extra_pin_forbc1, v_clockdr/clockdr, \
v_shiftdr/shiftdr, v_updatedr/updatedr, v_mode/mode, \
v_parallel_input/parallel_input, \
v_parallel_output/parallel_output, v_serial_input/serial_input ,\
v_serial_output/serial_output";
endspecify
endmodule
The following VHDL example maps the generic cell bc_1 to the vendor cell vendor_bc1:
entity vendor_bc1 is
port(pi, si : in std_ulogic;
po, so : out std_ulogic;
mode_1, mode_2 : in std_ulogic;
shdr, updr, ckdr : in std_ulogic;
vcc, gnd : in std_ulogic;
opn_s : in std_ulogic);
attribute mgc_bs_bsr_type : string;
attribute mgc_bs_pin_map : string;
attribute mgc_bs_bsr_type of vendor_bc1 : entity is “bc_1”;
attribute mgc_bs_pin_map of vendor_bc1 : entity is \
“pi/parallel_input, si/serial_input, po/parallel_output, \
so/serial_output, mode_1/mode_1_v, mode_2/mode_2_v, delete/mode, \
shdr/shiftdr, ckdr/clockdr, updr/updatedr, vcc/power, gnd/ground, \
opn_s/open”;
end vendor_bc1;
BC_2 Cell
Figure 4-2. Generic BC_2 Cell
mode23 serial_output
G1
parallel_input 1
parallel_output
1 G1
1
1D 1D 1
C1 C1
serial_input
updatedr clockdr shiftdr
The following example is a Verilog BC_2 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_2";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode = "mode23";
specparam mgc_dft_pin_type$my_parallel_input = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_output = "parallel_output";
specparam mgc_dft_pin_type$my_serial_input = "serial_input";
specparam mgc_dft_pin_type$my_serial_output = "serial_output";
endspecify
endmodule
The following example is a BC_2 cell definition using the Add Technology Cell command:
BC_2_A Cell
Figure 4-3. Generic BC_2_A Cell
mode_1 serial_output mode_3
& control_to_bc7
G1
serial_input 1
parallel_output
1 G1
1
1D 1D 1
C1 C1
serial_input
updatedr clockdr shiftdr
The following example is a Verilog BC_2_A definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_2_a";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode1 = "mode_1";
specparam mgc_dft_pin_type$my_mode2 = "mode_3";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
specparam mgc_dft_pin_type$my_control_signal = "control_to_bc7";
endspecify
endmodule
The following example is a BC_2_A cell definition using the Add Technology Cell command:
BC_2_A_EXT Cell
Figure 4-4. Generic BC_2_A_EXT Cell
mode_1 serial_output mode_3
G1
& control_to_bc7
parallel_input 1
parallel_output
1 G1
1
1D 1D 1
C1 C1
serial_input
updatedr clockdr shiftdr
G1
1
1
intestl
specify
specparam mgc_dft_cell_type = "bc_2_a_ext";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_intestl = "intestl";
specparam mgc_dft_pin_type$my_mode1 = "mode_1";
specparam mgc_dft_pin_type$my_mode2 = "mode_3";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
specparam mgc_dft_pin_type$my_control_signal = "control_to_bc7";
endspecify
endmodule
The following example is a BC_2_A_EXT cell definition using the Add Technology Cell
command:
BC_2_B Cell
Figure 4-5. Generic BC_2_B Cell
mode_1 serial_output mode_3
G1
OR control_to_bc7
parallel_input 1
parallel_output
1 G1
1
1D 1D 1
C1 C1
serial_input
updatedr clockdr shiftdr
The following example is a Verilog BC_2_B definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_2_b";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode1 = "mode_1";
specparam mgc_dft_pin_type$my_mode2 = "mode_3";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
specparam mgc_dft_pin_type$my_control_signal = "control_to_bc7";
endspecify
endmodule
The following example is a BC_2_B cell definition using the Add Technology Cell command:
BC_3 Cell
Figure 4-6. Generic BC_3 Cell
serial_output
G1
parallel_input
1 parallel_output
G1
1
1
1D
1
C1
The following example is a Verilog BC_3 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_3";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_mode1 = "mode23";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
endspecify
endmodule
The following example is a BC_3 cell definition using the Add Technology Cell command:
BC_4 Cell
Figure 4-7. Generic BC_4 Cell
serial_output
parallel_input parallel_output
G1
1
1D
1
C1
serial_input
clockdr
shiftdr
The following example is a Verilog BC_4 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_4";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
endspecify
endmodule
The following example is a BC_4 cell definition using the Add Technology Cell command:
BC_5 Cell
Figure 4-8. Generic BC_5 Cell
intestl shiftdr serial_output mode
G1
parallel_input 1
parallel_output
1
G1
G1
1
1
1 1D 1D
1
C1 C1
The following example is a Verilog BC_5 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_5";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_intestl = "intestl";
specparam mgc_dft_pin_type$my_mode = "mode";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
endspecify
endmodule
The following example is a BC_5 cell definition using the Add Technology Cell command:
BC_7 Cell
Figure 4-9. Generic BC_7 Cell
control_from_bc2a
mode_1 shiftdr serial_output
G1
parallel_input 1
parallel_output
1
&
G1
G1
1
1 1D 1D
1 C1
1 C1
G1
1 parallel_input_in
parallel_output_in 1
The following example is a Verilog BC_7 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_7";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode1 = "mode_1";
specparam mgc_dft_pin_type$my_mode2 = "mode_2";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_parallel_in_in = "parallel_input_in";
specparam mgc_dft_pin_type$my_parallel_out_in = "parallel_output_in";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
specparam mgc_dft_pin_type$my_control_signal = "control_from_bc2a";
endspecify
endmodule
The following example is a BC_7 cell definition using the Add Technology Cell command:
BC_7_LOW Cell
Figure 4-10. Generic BC_7_LOW Cell
control_from_bc2a
mode_1 shiftdr serial_output
G1
parallel_input 1
parallel_output
1
&
G1
G1
1
1 1D 1D
1 C1
1 C1
G1
1 parallel_input_in
parallel_output_in 1
specify
specparam mgc_dft_cell_type = "bc_7_low";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode1 = "mode_1";
specparam mgc_dft_pin_type$my_mode2 = "mode_2";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_parallel_in_in = "parallel_input_in";
specparam mgc_dft_pin_type$my_parallel_out_in = "parallel_output_in";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
specparam mgc_dft_pin_type$my_control_signal = "control_from_bc2a";
endspecify
endmodule
The following example is a BC_7_LOW cell definition using the Add Technology Cell
command:
BC_8 Cell
Figure 4-11. Generic BC_8 Cell
mode shiftdr serial_output
G1
parallel_input 1
parallel_output
1
G1
1
1D 1D
1 C1 C1
parallel_output_in parallel_input_in
serial_input clockdr updatedr
The following example is a Verilog BC_8 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_8";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode = "mode";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_parallel_in_in = "parallel_input_in";
specparam mgc_dft_pin_type$my_parallel_out_in = "parallel_output_in";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
endspecify
endmodule
The following example is a BC_8 cell definition using the Add Technology Cell command:
BC_9 Cell
Figure 4-12. Generic BC_9 Cell
G1
parallel_input 1
parallel_output
G1 1
1
1
G1
1
1D 1D
1 C1 C1
pin_monitor parallel_input_in
serial_input clockdr updatedr
The following example is a Verilog BC_9 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_9";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode1 = "mode_1";
specparam mgc_dft_pin_type$my_mode2 = "mode2";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_parallel_in_in = "parallel_input_in";
specparam mgc_dft_pin_type$my_pin_monitor = "pin_monitor";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
endspecify
endmodule
The following example is a BC_9 cell definition using the Add Technology Cell command:
BC_10 Cell
Figure 4-13. Generic BC_10 Cell
mode shiftdr serial_output
G1
parallel_input 1
parallel_output
1
G1
1
1D 1D
1 C1 C1
pin_monitor parallel_input_in
serial_input clockdr updatedr
The following example is a Verilog BC_10 definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_10";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode = "mode";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_parallel_in_in = "parallel_input_in";
specparam mgc_dft_pin_type$my_pin_monitor = "pin_monitor";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
endspecify
endmodule
The following example is a BC_10 cell definition using the Add Technology Cell command:
BC_X Cell
It may be difficult to classify certain technology boundary scan cells into any of the standard
boundary scan cell types used in BSDArchitect. In this case, you use the special cell type
‘BC_X’. If you specify this cell type, the design rules checks specified in Boundary Scan Rules
Checking do not prevent the insertion of boundary scan.
parallel_input parallel_output
serial_input serial_output
The following example is a Verilog BC_X definition using the ‘mgc_dft_cell_type’ attribute:
specify
specparam mgc_dft_cell_type = "bc_x";
specparam mgc_dft_pin_type$my_clockdr = "clockdr";
specparam mgc_dft_pin_type$my_shiftdr = "shiftdr";
specparam mgc_dft_pin_type$my_updatedr = "updatedr";
specparam mgc_dft_pin_type$my_mode = "mode";
specparam mgc_dft_pin_type$my_mode1 = "mode_1";
specparam mgc_dft_pin_type$my_mode2 = "mode_2";
specparam mgc_dft_pin_type$my_mode3 = "mode_3";
specparam mgc_dft_pin_type$my_mode4 = "mode23";
specparam mgc_dft_pin_type$my_parallel_in = "parallel_input";
specparam mgc_dft_pin_type$my_parallel_out = "parallel_output";
specparam mgc_dft_pin_type$my_serial_in = "serial_input";
specparam mgc_dft_pin_type$my_serial_out = "serial_output";
endspecify
endmodule
The following example is a BC_X cell definition using the Add Technology Cell command:
Valid pad cell types include input, output, differential_in, differential_out, tristate, bidirectional,
and opencollector.
The following two examples illustrate required technology mapping information to map a
boundary scan cell with built-in I/O pads.
specify
specparam mgc_dft_cell_type = “bc_7”;
specparam mgc_dft_pin_type$control_from_bc2a = “control_from_bc2a”;
specparam mgc_dft_pin_type$clkdr = “clockdr”;
specparam mgc_dft_pin_type$shdr = “shiftdr”;
specparam mgc_dft_pin_type$updr = “updatedr”;
specparam mgc_dft_pin_type$mode_1 = “mode_1”;
specparam mgc_dft_pin_type$mode_2 = “mode_2”;
specparam mgc_dft_pin_type$parallel_input =“parallel_input”;
• Input Pad
• Output Pad
• Tri-state Pad
• Bidirectional Pad
• Open Collector Output Pad
• Differential Input and Output Pads
You add either generic I/O pads or technology-specific I/O pads. The following sections discuss
adding generic I/O pads of these types using the tool commands. You can also define certain
attributes in VHDL or create specparam settings in Verilog to add the same port information.
Input Pad
Figure 4-15. Basic Input Pad
pin
din
Input Pad
The following examples create the input pad my_iopad_in using the Add Technology Cell
command and using Verilog specparams:
endspecify
endmodule
Output Pad
Figure 4-16. Basic Output Pad
pin
dout
Output Pad
The following examples create the output pad my_iopad_out using the Add Technology Cell
command and using Verilog specparams:
endspecify
endmodule
Tri-state Pad
To add tri-state pads, use the Add Tristate Port command. For more information, refer to the
Add Tristate Port command in the BSDArchitect Reference Manual.
Tri-state Pad
The following examples create the tri-state pad my_tri_l using the Add Technology Cell
command and using Verilog specparams:
endmodule
This Verilog model specifies mapping of the output enable, my_oe, to output_enable_h.
Alternatively, it could map to output_enable_l. These different mappings provide a way to
specify the enable signal of the pad as active high or active low.
Bidirectional Pad
You can add bidirectional pads using the Add Tristate Port command. Figure 4-18 illustrates a
generic bidirectional pad.
din
Bidirectional Pad
The following examples create the bidirectional pad my_bidi_l using the Add Technology Cell
command and using Verilog specparams:
add technology cell bidirectional my_bidi_l -input my_dout my_oe -output my_din \
-inout my_pin -connect my_din/din my_dout/dout my_oe/oe
endmodule
This Verilog model specifies mapping of the output enable, my_oe, to output_enable_l.
Alternatively, it could map to output_enable_h. These different mappings provide a way to
specify the enable signal of the pad as active high or active low.
For more information, refer to the Add Opencollector Port command in the BSDArchitect
Reference Manual.
There are two types of open collector driver pins: the H-type shown in Figure 4-19, and the
L-type shown in Figure 4-20. The H-type provides strong H (high) data and weak L (low) data
and the L-type provides strong L data and weak H data.
Note
The “open-collector” term is a commonly used name in the industry, although the driver
circuit can also be constructed based on an open-emitter (ECL), open-drain (MOSFET),
or open-source (MOSFET) configuration.
Figure 4-19 shows the H-type of open collector pad, and Table 4-2 shows the associated truth
table. You use this type of pad with the following configurations: PNP open collector,
P-channel open drain, NPN open emitter, and N-channel open source.
dout pin
To specify an H-type open collector output pad, issue the following command where oc_port is
the name of the port in your design that you are configuring:
Figure 4-20 shows the L-type of open collector pad, and Table 4-3 shows the associated truth
table. You use this type of pad with the following configurations: NPN open collector,
N-channel open drain, PNP open emitter, and P-channel open source.
dout pin
To specify an L-type open collector output pad, issue the following command where oc_port is
the name of the port in your design that you are configuring:
Mapping information is required for pins dout and pin. The mapping information is the same for
both types of open collector pads.
The following examples create the open collector pad my_iopad_oc using the Add Technology
Cell command and using Verilog specparams:
endmodule
Figure 4-21 illustrates the differential input and output pads, while Table 4-3 shows the truth
tables associated with both.
pin_p pin_p
din dout
pin_n pin_n
Input Differential Pad Output Differential Pad
The following examples create the differential input pad my_iopad_diff_in using the Add
Technology Cell command and using Verilog specparams:
endmodule
The following examples create the differential output pad my_iopad_diff_out using the Add
Technology Cell command and using Verilog specparams:
add technology cell diff_out my_iopad_diff_out -input my_dout -output my_pin_p my_pin_n \
-connect my_pin_n/pin_n my_pin_n/pin_n my_dout/dout
endmodule
Loading a pin mapping file can modify information you may have already supplied with
BSDArchitect commands. Specifically, information from the pin map file overrides any port
order defined with the Set Port Order command or any boundary scan cell types defined with
the Add Bscan Cell command. If loading a pin file overrides previously-specified information,
BSDArchitect generates a warning message informing you that your previous definitions have
been modified.
If you do not specify all the pins in the pin mapping file, unspecified pins follow the
specified pins in the boundary scan cell order. If you choose not to use a pin mapping
file, you can instead specify this information with the Set Port Order command.
• Device package pin mapping
This entry specifies the mapping of logical signals to physical pins of a particular
package. This information creates a PIN_MAP_STRING in the BSDL file.
• Pad cell types
This entry specifies the pad cell types you want to use with the pins in your design. If
you choose not to use a pin mapping file, you can instead specify this information with
the Add Pad Cell, Add Tristate Port, Add Differential Port, and Add Opencollector Port
commands.
• Boundary scan cell types
This entry specifies the boundary scan cell types you want to use with the pins in your
design. If you choose not to use a pin mapping file, you can instead specify this
information with the Add Bscan Cell command.
• Pad Inversion
The pin map file also specifies if the pad used for a particular signal is an inverting pad
or not. This is specified by using the -inv argument when specifying the
logical_port_name.
If the logical_port_name is TDI, TDO, TMS, TCK, or TRST then only the PINID and
-p options are valid.
Signal names VDD and VSS are valid syntax for power and ground in the pin mapping
file, and you can specify them multiple times. The tool also supports user-defined names
for power and ground pins using the -pwr and -gnd switches.
• PINIDs
A required repeatable integer or alphanumeric identifier specifying the actual pin name
or set of pin names that you want to assign to the logical_port_name. Separate multiple
PINIDs with a space.
You can use multiple PINIDs fields per line each separated by a space. This allows you
to specify a vector using individual bits. For example, the following PINID’s are valid,
and both represent the same information:
a(0) A0 -p my_pad;
a(1) A1 -p my_pad;
a(2) A2 -p my_pad;
or
a A0 A1 A2 -p my_pad my_pad my_pad
For tri-state and bidirectional ports, only one entry should have a PINID field (unless
specified bit by bit in the map file). If an entry contains more than one PINID field, the
BSDL file will contain multiple entries for the same port in the PIN_MAP attribute.
• -p padcell
An optional switch and string pair that specifies the exact pad cell you want to place on
the specified port.
• -c cell_names
An optional switch and repeatable string pair that lists the boundary scan cell (two cells,
if a bidirectional pin) you want to connect to the specified pin.
This switch is not valid when using JTAG ports (TDI, TDO, TMS, TCK, or TRST).
The boundary scan cell_names is an optional field. It may be an ASIC library cell name
or BC_1, BC_2, BC_2_A, BC_2_A_EXT, BC_2_B, BC_3, BC_4, BC_5, BC_7 or
BC_7_LOW, BC_8, BC_9, or BC_10. You must use a logical_port_name whenever
you specify a boundary scan cell name.
• -INV
An optional switch to specify the input data that the pad used with the specific port is
inverted at the output. Note that you must issue the “Set Pad Inversion ON” command in
order for the BSDArchitect to consider the inversion when generating a test bench.
• -s X | 0 | 1
An optional switch that specifies the safe value associated with the logical_port_name.
By default, for tri-state and bidirectional boundary scan cells, the safe value is the
inactive value of the corresponding control cell. For boundary scan control cells, the
safe value is the inactive value of that control cell. For all other types of boundary scan
cells, the safe value is X.
This switch is not valid when using JTAG ports (TDI, TDO, TMS, TCK, or TRST).
• -INTernal
An optional switch that specifies that a particular port is an internal port.
Internal ports are those core ports that contain a boundary scan cell on them, but those
ports do not come to the top.
• -pwr | -gnd
An optional switch that declares the value of the logical_port_name argument as either
power or ground. In the resulting BSDL file, these ports will be listed as linkage type.
This switch is not valid when using JTAG ports (TDI, TDO, TMS, TCK, or TRST).
BSDArchitect does not place a boundary scan cell on power and ground pins.
Existing Power or Ground Pins:
If the power or ground pin exists on the core, then the tool places a generic I/O pad cell,
or a specific technology I/O pad cell that you specified with the Add Technology Cell
command using the POWER option.
The following example shows usage of the user-defined names for power and ground
(Note that the technology cell named power_cell had to have been previously defined
with the Add Technology Cell command using the POWER option):
my_pwr 71 -pwr
my_gnd 72 -gnd
custom_pwr 73 -pwr -p power_cell
VDD 74
VDD 75
VSS 76
VSS 77
BSDArchitect generates the following BSDL file when using the preceding
declarations:
port (
.
.
.
vss : linkage bit_vector(1 downto 0);
my_gnd : linkage bit ;
vdd : linkage bit_vector(1 downto 0);
my_pwr : linkage bit;
custom_pwr : linkage bit;
.
.
.
);
Note
If you specify -pwr or -gnd without “-p padcell_type”, the tool will not add a pad unless
the power or ground pin already exists on the core.
The following is an excerpt from a pin mapping file specifying “-p pwr_pad -pwr” for a
nonexistent pin:
my_vdd 3 -p pwr_pad -pwr ;
BSDArchitect generates the following output files when using the preceding
declaration:
RTL generated:
module pad_instance
...
pwr_pad pwrsig ( .my_vdd ( my_vdd ));
...
The following shows the resultant BSDL file:
port (
...
my_vdd : linkage bit;
...
);
-------------------------------------------------------------------------
-- BSDArchitect Pin Map Report
-------------------------------------------------------------------------
-- Design : test
-------------------------------------------------------------------------
-- Port Name PinID Cell Type Pad Cell Name Safe Value Inv
-------------------------------------------------------------------------
bit_bidi_ctr void -cell bc_2_a ;
bit_bidi_o 0 -cell bc_7_low -safe X ;
bit_diff_o 3 4 -cell bc_1 -safe X ;
bit_int_o 7 -cell bc_1 -safe X ;
bit_o 9 -cell bc_1 -safe ;
bit_oc_o 10 -cell bc_1 -safe X ;
bit_tri_ctrl void -cell bc_1 ;
bit_tri_o 12 -cell bc_1 -safe X ;
bit_diff_i 1 2 -cell bc_1 -safe X ;
bit_gnd 5 -cell bc_1 -safe X ;
bit_i 6 -cell bc_1 -safe X ;
bit_inv_i 8 -cell bc_1 -safe X ;
bit_pwr 11 -cell bc_1 -safe X ;
tdi 13 ;
tms 14 ;
tck 15 ;
tdo 16 ;
trst 17 ;
-------------------------------------------------------------------------
The following pinmap file is a manually edited version of the default file generated by
BSDArchitect (my_pinmap_modified) that the dofile for this example generated:
------------------------------------------------------------------------
--BSDArchitect Pin Map Report
------------------------------------------------------------------------
--Design : test
-------------------------------------------------------------------------
--Port Name PinID Cell Type Pad Cell Name Safe Value Inv
-------------------------------------------------------------------------
bit_bidi_ctrl void -cell bc_2_a ;
bit_bidi_o 0 -cell bc_7_low -safe X ;
bit_diff_o 3 4 -cell bc_1 -safe X ;
bit_int_o 7 -cell bc_1 -safe X -internal;
bit_o 10 -cell bc_1 -pad outpad -safe 0 ;
bit_oc_o 9 -cell bc_1 -safe X ;
bit_tri_ctrl void -cell bc_1 ;
bit_tri_o 12 -cell bc_1 -safe X ;
bit_diff_i 1 2 -cell bc_4 -safe X ;
bit_gnd 5 -gnd ;
bit_i 6 -cell bc_2 -pad inpad -safe X ;
bit_inv_i 8 -cell bc_1 -pad inpad_inv -safe X -inv ;
bit_pwr 11 -pwr ;
tdi 13 ;
tms 14 ;
tck 15 ;
tdo 16 ;
trst 17 ;
-------------------------------------------------------------------------
After defining a register, you can add an instruction for that register by using the following
command:
Once you have defined a register and its associated user-defined instruction, BSDArchitect
generates a signal with the same name as the user-defined instruction. This signal becomes
active when you load the instruction in the instruction register.
BSDArchitect generally does not have information about the clock and enable signals
associated with a user-defined register (the internal scan and multiple scan instructions are the
exception). BSDArchitect normally connects the register between TDI and TDO when you load
the instruction in the instruction register. So, you need to manually connect the clock and enable
signals for the register.
The user-defined internal scan and multiple scan instructions are used to denote a particular
category of instructions (internal scan and internal scan + bsr, respectively). The names of these
instructions are not required to be INT_SCAN and MULT_SCAN. For these instructions,
BSDArchitect automatically connects the clock and enable signals.
Additionally, you can use the Add Port Connection command to connect a core-design port
either to a top-level boundary scan port, to internal boundary scan signals, or both.
The following is a simple example of how to use a user-defined instruction. In this example
we’ll show how to define a register named, pcnt_reg, add an associated instruction called,
lbpcnt, and then connect the BSDArchitect-generated lbpcnt signal to a core logic port named,
lbpcnt_b:
The lbpcnt signal connects to a core logic port named lbpcnt_b when the lbpcnt instruction is
loaded in the instruction register.
You can issue additional Add Port Connection commands to connect the clock and any other
signals. Valid signal_names include all TAP controller signals, instruction enables, core input
ports, core output ports, and available intermediate signals at the TAP level. The runbist signal
name is valid if the RUNBIST instruction has been added via the Add Bscan Instruction
command. For a list of valid signal names, issue the Report Port Connection command with the
-Usable_signals switch.
For a full description, refer to the Add Port Connection command in the BSDArchitect
Reference Manual.
BSDArchitect can connect the internal scan circuitry to the boundary scan circuitry, and gives
you several options to choose from as you decide how to connect the circuitry together. The
following subsections describe these options and show an example of connecting the boundary
scan circuitry to internal scan.
The following example contains the entity of the example design “aha” before the addition of
scan insertion. If this design is to contain scan, you would need to add scan ports before using
this entity with BSDArchitect.
library ieee;
use ieee.std_logic_1164.all;
entity aha is
port( s:out std_ulogic;
co:out std_ulogic;
a:in std_ulogic;
b:in std_ulogic;
c:in std_ulogic);
end aha;
For a strategy requiring two scan chains, the entity would look like the following example. This
example assumes that aha_scan2.vhd is the name of the design entity you are using and that the
design contains two internal scan chains.
library ieee;
use ieee.std_logic_1164.all;
entity aha_scan2 is
port( s:out std_ulogic;
co:out std_ulogic;
a:in std_ulogic;
b:in std_ulogic;
c:in std_ulogic;
sclk:in std_ulogic; -- Scan Clock
sc_en:in std_ulogic; -- Scan Enable
sc1_i:in std_ulogic; -- Scan Input Pins
sc2_i:in std_ulogic;
sc1_o:out std_ulogic;-- Scan Output Pins
sc2_o:out std_ulogic);
end aha_scan2;
You must specify which type of internal scan architecture your design uses. During the
connection to boundary scan circuitry, BSDArchitect creates clocking circuitry depending on
the specified internal scan architecture. Figure 4-22 shows the boundary scan architecture
created for clocking the internal scan circuitry of a mux-DFF design.
System Clock
(top_test_clk) A Clock to
A Core Logic
Scan Instruction 0 0 O
(test_clk)
(internal scan or multiple scan) B
SEL1 SEL2
SHIFT_DR
CAPTURE D
In Figure 4-22, the multiplexer connects the system clock to the core logic clock before loading
the scan instruction in the instruction register. For more information on scan instructions, see
“Defining the Scan Instruction” on page 112. After the scan instruction loads in the instruction
register, the TAP causes the connection of TCK to the core logic clock during the CAPTURE
and SHIFT_DR states.
Figure 4-23 shows the boundary scan architecture created for clocking the internal scan
circuitry of a clocked-scan design.
SHIFT_DR
In Figure 4-23, before loading the scan instruction (internal scan or multiple scan) in the
instruction register, both the system clock and the scan clock connect to the core logic clock.
After the scan instruction loads in the instruction register, TCK connects to the core logic clock
during the TAP controller CAPTURE_DR state and the scan clock connects to the core logic
during the SHIFT_DR state.
When you choose the internal scan architecture, you must also decide the mode in which you
are going to test the chip. If you want the ability to exercise the chip's internal scan circuitry by
using the internal scan ports directly, you should choose standalone mode. If you choose the
standalone testing mode, BSDArchitect creates extra circuitry to give you the option of direct
access to the internal scan ports at the top-level of the design. Standalone mode provides the
most efficient method for internal chip testing.
If you only want access to the internal scan circuitry via the TAP, and you do not want
BSDArchitect to add the extra circuitry for the option of testing in standalone mode, you should
choose nostandalone mode. Nostandalone mode provides a means to restrict internal chip
access, except through the use of boundary scan circuitry, as some testers may require.
Note
If using nonstandalone scan architecture, a fault at the reset pin for the scan cells will not
be detected. This is because for that architecture only one clock can be defined during
capture in FastScan: the test clock by using “Add Capture Clock test_clk -atpg”. In order
to detect a fault at the reset pin, the reset pin needs to be defined as a clock, but this is not
allowed when using nonstandalone scan architecture.
The default circuitry allows testing in standalone mode, as shown in Figure 4-24.
Figure 4-24 shows the default connections for a core design containing a single scan chain. The
circuitry shown allows you to access the internal scan chain either directly (through sc_in,
sc_out, and sc_en) or by using TAP signals. The thin lines show circuitry that is valid if your
design uses the mux-DFF architecture. The clock signal shown with the heavier line is only
valid if your design uses the clocked-scan architecture.
To specify the internal scan architecture and testing mode, you use the Set Iscan Interface
command. For example:
set iscan interface -type mux_scan -sen sc_en -mode stand_alone -tclk sclk
This example specifies that the type of scan architecture is mux-DFF, that the testing mode
should allow for standalone testing (direct access to the scan chain, without going through the
TAP), that the scan enable is the sc_en port, and that the test clock is the sclk port.
This command gives the name “int_scan_reg” to the combined chain bounded by the input port
sc1_i and the output port sc2_o.
The internal scan instruction connects the internal scan register between the TDI and TDO
ports. The multiple scan instruction connects both the boundary scan register (BSR) and the
internal scan register in series between TDI and TDO.
Figure 4-25 shows simplified circuit diagrams of the internal scan and multiple scan
instructions.
BSR
M BSR
TDI U TDO M
Int Scan Chain X M U TDO
U Int Scan Chain X
TDI X
MULT_SCAN
The circuitry created for the multiple scan instruction includes a multiplexer, controlled by the
multiple scan signal, at the input of the internal scan chain. One input of the mux is the output of
the BSR and the other input is TDI. If you want to use the standalone mode for testing,
BSDArchitect adds an additional mux to connect the internal scan chain with a primary input.
For example, to connect both the internal scan chain and boundary scan register in series
between TDI and TDO, you define the following multiple scan instruction:
Note that adding instructions with the internal scan or multiple scan instruction types require the
use of the -reg_name argument to define the internal scan register, because neither the Connect
Iscan Chains nor the Add Core Register command provides this information.
You can connect multiple scan chains into a single chain by using the Connect Iscan Chains
command. All internal scan chain related ports have associated boundary scan cells during
standalone testing. In no-standalone mode, these ports do not appear at the top level and do not
have associated boundary scan cells. The following example shows how to connect two scan
chains into a single chain:
The input and output ports of the first scan chain are sc1_i and sc1_o, respectively. The input
and output ports of the second scan chain are sc2_i and sc2_o, respectively. This command
connects the first scan chain to the second scan chain so that the input of the combined chain is
sc1_i and the output of the combined chain is sc2_o.
Top-Level Logic
M
U sc2_o
sc2_i Internal Scan Chain 2
X
This chapter outlines how to use BSDArchitect to synthesize and verify boundary scan circuitry
for your design. For specific information on BSDArchitect functionality or commands, refer to
the BSDArchitect Reference Manual.
• HDL Description
• Top-Level Interface Description
• HDL Test Bench
• BSDL Description
Additional commands are available to create the following:
• Synthesis Script
• Parametric Tests
• Test Vectors
• ATPG Setup Files
HDL Description
The HDL description file contains the design with inserted boundary scan circuitry. This file is
created by the Save Bscan command. You can specify a buffered or unbuffered, mapped or
unmapped HDL description. You may want to specify a mapped file if your design uses
technology-mapped cells or you are using the Internal flow.
In general, the mapped output uses IEEE 1149.1 cells from the specified ASIC library. This
output contains direct instantiation of ASIC library cells. For more information, refer to
“Technology Mapping” on page 66.
Note
The HDL description file is not created in the BSDL flow.
The default file name of the top-level interface description is <prefix>_top.<suffix>, where
<prefix> is the design name specified at invocation and <suffix> is the design format extension.
You can specify a different file name using the Setup File Naming command.
The default file name of the HDL test bench is <prefix>_tb.<suffix>, where <prefix> is the
design name specified at invocation and <suffix> is the design format extension. You can
specify a different file name using the Setup File Naming command.
The test bench does not test the BSDL, check for full compliance with the IEEE 1149.1
standard, or fault grade the boundary scan circuitry. For more detailed information on the test
bench functions, see “Troubleshooting the Test Bench Simulation” on page 125.
The test bench verifies the following predefined instructions: SAMPLE, PRELOAD,
BYPASS, EXTEST, IDCODE, USERCODE, CLAMP, and HIGHZ. It does not test the
INTEST or RUNBIST instructions.
• Verification of Boundary Scan Register Operation
The test bench verifies the shift, capture, update, and mode capabilities of the boundary
scan registers.
• Verification of Instruction Logic
The test bench verifies the load and unload capability of the instruction register. It also
tests the instruction decode circuitry.
• Verification of TAP Controller Transitions
The test bench implicitly verifies the TAP controller transitions during the testing of the
public instructions. The test bench also explicitly does some testing of other transitions.
• Verification of the Reset Operation
The test bench verifies the reset operation by resetting the design, unloading the data
register, and checking the unloaded data.
Additional test bench files (that contain a subset of the original test bench) can be created using
the Save Testbench command.
BSDL Description
The BSDL description file contains the design with boundary scan circuitry written in BSDL. It
can be used with board testing tools. This file is created by the Save Bscan command.
The default file name of the BSDL description file is <prefix>_bscan.bsd, where <prefix> is the
design name specified at invocation. You can specify a different file name using the Setup File
Naming command.
Synthesis Script
BSDArchitect can generate a synthesis script for synthesizing the HDL output file from
BSDArchitect. This file is not written out in the BSDL flow. Use the optional -Synthesis_script
switch for the Save Bscan command. The script can use either Design Compiler or Leonardo.
You can specify a file name or use the default name:
Parametric Tests
Parametric tests use parametric measurement units to ensure that the I/O hardware works within
specified limits. I/O parametric tests are important because they test the ability of a chip to work
correctly when placed in an environment with other chips.
1. Typical pattern set — The tests use all low voltages (0), all high voltages (1), and highz
(z).
2. Checkerboard pattern set — The tests use checkerboard patterns. For example,
“0101010…” and “1010101…”. In this set, the tool also generates highz patterns.
To generate these tests, issue the following command before inserting the boundary scan
circuitry (issuing the Run command):
The parametric tests are included in the HDL test bench file and the test vectors file. You can
also write the parametric test into a separate test bench file using the Save Testbench command.
For more information, refer to the Set Testbench Parameters command in the BSDArchitect
Reference Manual.
Test Vectors
BSDArchitect can write out the test bench file as test vectors. You can then use FlexTest to fault
grade these functional vectors to determine the boundary scan logic test coverage using these
vectors. You use the Save Patterns command to write out the test vectors.
For more information on using test vectors, see “Fault Simulation” in the Scan and ATPG
Process Guide.
This capability assumes the TAP controller conforms to IEEE Std. 1149.1-1990 and IEEE Std.
1149.1a-1993 and that the design contains a single internal scan chain. This would be the case if
you use BSDArchitect to create the boundary scan circuitry and connect it to the internal scan
circuitry.
In this case, the root name of the files will be “mux_scan_stand.” BSDArchitect produces the
following four files:
• mux_scan_stand_standalone.dofile
• mux_scan_stand_standalone.testproc
• mux_scan_stand_nostandalone.dofile
• mux_scan_stand_nostandalone.testproc
Refer to “Generating Patterns for a Boundary Scan Circuit” in the Scan and ATPG Process
Guide for a complete test procedure file example for an IEEE 1149.1 circuit using the multiple
scan instruction.
Prerequisites
• Your design file must be written in BSDL format.
Procedure
1. Invoke BSDArchitect including the -Bsdl switch.
shell> <mgcdft tree>/bin/bsdarchitect test.bsd -bsdl -nogui
2. (Optional) Make any customizations to the test bench. For more information, refer to the
Set Testbench Parameters command.
3. Check the boundary scan circuitry for compliance to the standard by issuing the run
command.
run
4. Save your design and write out the test bench. For more options on output files, see
“Creating Output Files” on page 121. BSDArchitect will not write an HDL description
file in the BSDL flow.
5. Exit BSDArchitect.
exit
Related Topics
• Verifying the HDL Boundary Scan Circuitry
• Troubleshooting the Test Bench Simulation
Prerequisites
• You must have specified any customizations for your design and output files. For more
information on available customizations, refer to “Boundary Scan Customizations” on
page 65 and “Understanding BSDArchitect Output Files” on page 115.
Procedure
1. Issue the Run command. BSDArchitect will check your design for errors and insert
boundary scan circuitry if no errors are found.
run
2. Verify the boundary scan circuitry by issuing the following two commands after the Run
command completes successfully:
report bscan status
report bscan cell
-------------------------------------------------------------
BSDArchitect Report
-------------------------------------------------------------
Design : aha_scan2.vhd
-------------------------------------------------------------
Asynchronous TAP Reset : Yes
Asynchronous TAP Reset : Yes
Device Identification Register : No
User Identification Register : No
Instruction Register Width : 4
INSTRUCTION REPORT:
-------------------------------------------------------------
Instruction Target Register Opcode
-------------------------------------------------------------
MULT_SCAN INT_SCAN_REG 0010
Related Topics
• Creating Output Files
Prerequisites
• You must have previously issued the Run command without errors.
Procedure
1. (Optional) Generate the test vectors.
save patterns filename -format wgl -replace
2. Save the design and generate the default output files (HDL description, top-level
interface description, HDL test bench, and BSDL description).
save bscan -replace
3. (Optional) Generate additional test bench files for a subset of test bench functionality.
5. Exit BSDArchitect.
exit
Related Topics
Verifying the HDL Boundary Scan Circuitry
Prerequisites
• You must have completed boundary scan insertion, created all output files, and exited
BSDArchitect.
• You will need the following files for verification: technology-mapped or component
libraries (if applicable), core logic HDL model, boundary scan HDL model, and HDL
test bench.
Procedure
1. Compile the mapped libraries. Any libraries used need to be compiled prior to the
BSDArchitect files. The following example shows how to compile the library using
ModelSim from the directory containing the HDL source of the target technology
(assuming the modelsim.ini file contains a mapping between the h4c_lib label and the
location h4c, which is the compiled library destination):
shell> <mgcdft tree>/bin/vlib h4c
shell> <mgcdft tree>/bin/vmap h4c_lib h4c
shell> <mgcdft tree>/bin/vcom -work h4c_lib -check_synthesis h4c.vhd
2. Define your work directory (for placing compiled boundary scan models).
shell> cd /user/jdoe/bs
shell> <mgcdft tree>/bin/vlib work
3. Compile the HDL source files including the boundary scan component libraries, the core
logic HDL entity, the HDL model with boundary scan, and the test bench. If you do not
already have a compiled model for your core logic, you need to compile this model
before you compile any outputs of BSDArchitect. For instance, you may already have a
synthesized design which has internal scan circuitry added, and you may have created an
HDL model of this design just for input to BSDArchitect. In this case, you would now
compile that model. Before you can run the test bench, you must first compile the HDL
source code generated by BSDArchitect. After you compile the necessary components
and models, compile the test bench for use by the simulator.
Verilog:
shell> cd /user/jdoe/bs/verilog_models
shell> <mgcdft tree>/bin/vlog -work work aha.v aha_bscan.v
shell> <mgcdft tree>/bin/vlog aha_bscan_tb.v
VHDL:
shell> cd /user/jdoe/bs/vhdl_models
shell> <mgcdft tree>/bin/vcom -check_synthesis aha.vhd
shell> <mgcdft tree>/bin/vcom -check_synthesis aha_bscan.vhd
shell> <mgcdft tree>/bin/vcom aha_bscan_tb.vhd
VHDL:
shell> <mgcdft tree>/bin/vsim -lib work aha_bscan_tb
vsim1> run -all
vsim1> quit -f
5. Synthesize the design. This step creates a gate-level netlist for your design with
boundary scan.
a. Invoke Design Compiler.
shell> design_analyzer
exit
VHDL:
include “dc_h4c.setup”
read -f vhdl {aha.vhd aha_bscan.vhd}
current_design find (design, aha_top_buf)
uniquify
compile -map_effort medium
write -f vhdl -h -o aha_bscan_netlist.vhd
exit
Related Topics
• Verifying the Gate-Level Boundary Scan Logic
• Troubleshooting the Test Bench Simulation
This procedure is nearly identical to the procedure for testing the HDL boundary scan model
using the test bench. As before, you could use a gate-level simulator to verify the operation of
the boundary scan model.
Prerequisites
• You must have a complete design netlist (from verifying the HDL circuitry).
Procedure
1. Define the work directory (for placing the compiled boundary scan models).
shell> cd /user/jdoe/bs
shell> <mgcdft tree>/bin/vlib work
VHDL:
shell> cd /user/jdoe/bs/gate_level_models
shell> <mgcdft tree>/bin/vcom -check_synthesis
aha_bscan_netlist.vhd
shell> <mgcdft tree>/bin/vcom aha_bscan_tb.vhd
VHDL:
shell> <mgcdft tree>/bin/vsim -lib work aha_bscan_tb
vsim1> run -all
vsim1> quit -f
Related Topics
• Troubleshooting the Test Bench Simulation
By default, the test bench will include Mode-Mux, SAMPLE, EXTEST, PRELOAD, and
BYPASS. Additional instructions are tested when created by the Add Bscan Instruction
command.
Note
RUNBIST and INTEST are not tested. All unassigned opcodes are tested for BYPASS
instruction, except if your design shares a functional pin with TDO. For more
information, refer to “Sharing Functional Pins With TDO” on page 62.
Initialization
1. Perform an asynchronous reset on TAP controller.
a. Set TMS = 1 and TRST = 0.
b. Wait one clock cycle.
c. Set TMS = 0 and TRST=1.
2. Initialize the input boundary scan cells.
a. Apply a 1 to all primary input ports to 1.
b. Apply a 1 to all differential positive inputs and apply a 0 to all differential negative
inputs.
c. Apply a Z to all bidirectional ports.
The following example shows the output for initialization when you simulate the test bench:
# 1. Initialization
# --------------------------------------------------
# 250 OK Initializing BS logic by resetting TAP controller
# 1050 OK Initializing PI of input bscells
# 1250 OK *** Boundary Scan logic has been reset ***
#
7. Shift in a predefined pattern into the Bypass Register at TDI and observe the same
pattern at TDO after one cycle.
8. Verify that all output ports are set to 0.
3. Shift in a predefined 4-bit pattern at TDI for N+4 cycles, where N is the length of the
selected register.
4. Verify the predefined pattern at TDO.
9. Create a pattern of all zeros “0000…” and set all ports to an active state.
10. Change state to Shift-DR.
11. Shift in the zeros pattern into the Boundary Scan Register at TDI.
12. Change state to Update-DR (pattern applied on PO).
13. Change state to Run-Test/Idle and verify that the pattern is inverted on PO.
14. Remain in Run-Test/Idle for 3 cycles and verify that the pattern on PO is getting
inverted on each neg-edge of TCK.
15. Change state to Update-DR and verify that all POs are restored to their original value.
Test Mode-Mux
1. Load the SAMPLE opcode into the Instruction Register.
2. Change state to Capture-DR to capture the core outputs.
3. Change state to Shift-DR.
4. Shift out the sampled core data at TDO and store it in an array (bsreg_value).
5. Invert the sampled core data and store it in an array (inv_bsreg_value).
6. Change state to Shift-DR.
7. Shift in the inverted data into the Boundary Scan Register at TDI.
8. Change state to Update-DR and load the data into update register of the boundary scan
cells. At this point, one input of mode mux (PI-PO) contains the sampled data (core
data) and other input (Update Reg to PO) contains the inverted data.
9. Load the EXTEST opcode into the Instruction Register.
10. Verify that the inverted data appears on all POs.
# 8. Test MODE-MUX for all instructions
# --------------------------------------------------
# 623650 OK **** Shifting out the sampled core logic output signal
values
# 668450 OK Shifting inverted core logic signals into the update
register of bsr cells
#
# 713850 OK Testing Mode-mux during EXTEST instruction
# 713850 OK *** loading instruction EXTEST ***
# 715850 OK Data check OK *** All outputs are set to the update
register value
#
Parametric Testing
The following sections describe the parametric tests that may be included in the test bench.
Typical
1. Load the EXTEST opcode into the Instruction Register.
2. Test the input ports:
a. Create an inactive pattern (para_pattern_z).
b. Change state to Shift-DR.
c. Shift in the para_pattern_z pattern into the Boundary Scan Register at TDI.
d. Apply a 0 to all input ports.
e. Change state to Shift-DR (through Update-DR).
f. Shift out and verify a 0 for all input port positions at TDO.
g. Shift in the para_pattern_z pattern into the Boundary Scan Register at TDI.
h. Apply a 1 to all input ports.
Checkerboard
1. Load the EXTEST opcode into the Instruction Register.
2. Test the input ports:
a. Create an inactive pattern (para_pattern_z).
b. Change state to Shift-DR.
c. Shift in the para_pattern_z pattern into the Boundary Scan Register at TDI.
d. Apply a checkerboard pattern “0101…” to all input ports.
e. Change state to Shift-DR (through Update-DR).
f. Shift out and verify the checkerboard pattern for all input port positions at TDO.
g. Shift in the para_pattern_z pattern into the Boundary Scan Register at TDI.
h. Apply a checkerboard pattern “1010…” to all input ports.
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
Background
By default, the BSDArchitect tool follows the IEEE 1149.1 standard for bidirectional (bidi)
ports. If you have a configured bidi port, then the tool adds the following:
To meet this combination, the tool needs a more circuit than that of the standard BC_2 cell and
depending on if the bidi-control is active high or low, the tool also needs a different BC_7 cell
(BC_7 is for active high, and BC_7_LOW for active low pad).
• BC_2_A Cell — A non-IEEE standard cell type for use with a combined I/O bidi
control pin. The tool assigns this cell type when the bidi control pad is active low.
• BC_2_A_EXT Cell — A non-IEEE standard cell type similar to BC_2_A for use with a
combined I/O bidi control pin. The tool assigns this cell type when the bidi-control is an
external control signal.
• BC_2_B Cell — A non-IEEE standard cell type similar to BC_2_A for use with a
combined I/O bidi control pin. The tool assigns this cell type when the bidi control pad
is active high.
• BC_7 Cell — An IEEE-specified cell type. The tool assigns this cell on the output of a
bidi when the bidi pad is active high.
• BC_7_LOW Cell — A non-IEEE standard cell type similar to BC_7. The tool assigns
this cell added on the output of a bidi when the bidi pad is active low.
You can modify these cell types assignments to a bidi port using the Add Bscan Cell command.
Index
—D— —I—
Design I/O Pads. See Pads
BSDL flow, 20 Idcode instruction, 15
external flow, 19, 25 Input
external flow example, 42 I/O pad descriptions, 47, 48
internal flow, 19, 47 pin mapping file, 100
internal flow example, 49 Verilog netlist, 47
issues, 32 Instruction
Dofile, 23, 42, 65 bypass, 15
batch mode, 23 clamp, 15
set dofile abort, 23 extest, 14
Dummy scan pins, 108 highz, 15
idcode, 15
—E— intest, 15, 38
Enable signal, 35 preload, 14
Entity port logic type, 32 runbist, 15, 38
Escaped identifiers, 32 sample, 14
Exit the session, 24 sample_preload, 14
External boundary scan synthesis, 25 usercode, 15
External design flow, 25 Instruction register, 14
External flow, 19 Instructions
External register, 61 user-defined, 106
Extest instruction, 14 Internal boundary scan synthesis, 47
—F— Internal flow, 19
Flows control port notation, 55
BSDL, 20 inputs, 47
external, 19, 25 output, 48
internal, 19 power and ground ports, 59
Functional blocks, 21 tdo pin sharing, 62
top-level port connections, 60
—G— uniquification, 63
Graphical User Interface unsupported commands, 64
command line window, 21 Internal scan circuitry, 38, 107
control panel window, 20 Internal_flow switch, 48
dofiles, 23 Interrupting the session, 24
exit, 24 Intest instruction, 15, 38
functional blocks, 21 Invocation, 42, 48
interrupt, 24
log files, 23 —J—
process flow blocks, 21 JTAG, 11
resetting, 24 JTAG ports, 51
UNIX commands, 24 —L—
Ground ports, 59 Library switch, 48
—H— Limitations, 38
Highz instruction, 15 Line continuation character, 22
• •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.
[email protected] [email protected]
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 [email protected]. This offer may be
accepted for three years from the date Mentor Graphics Corporation first distributed the GTK+ source code.
• This software application may include freestdf third-party software that may be subject to the following copyright(s):
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the distribution.
Neither the name of the FREESTDF nor the names of its contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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.