An Introduction to In-Circuit Testing
Why In-Circuit Testing?
The idea of in-circuit testing?the rather strange technique
of individually testing each component on a circuit board as if it were not actually on
the board?is sufficiently anti-intuitive as to require a little explanation. The most
obvious way to test a circuit board is to install it in its intended location and then
exercise all of its functions by running the complete machine through an exhaustive series
of tests. This is known as functional testing. When circuit
boards were first developed this is exactly how they were tested, but there are many
drawbacks to functional testing, drawbacks that led to the development of in-circuit
testing.
One obvious problem is that functional testing requires a
dedicated, flawless sample of the machine that the circuit board is designed for. If the
circuit board is from something like a supercomputer, the capital tied up in reserving and
maintaining one or several machines in-house exclusively for testing can be prohibitive.
More drawbacks:
- Testing boards in situ gives only a pass-fail test; either
the complete machine works as expected, or it fails in some way that presumably is the
fault of the board being tested. Once the board fails, it has to either be entirely
discarded or subjected to a series of component-oriented diagnostic tests that closely
resemble in-circuit tests.
- It is extremely difficult to devise a truly exhaustive
functional test?one that exercises all possible functions of the board. It is even harder
to determine just how exhaustive a given test is. This means that test confidence is
incomplete, and boards can (and often do) go into production with not-yet-discovered flaws
in them.
- For each new circuit board, a completely new functional test
must be devised by hand. For a medium-sized board, test development time is typically six
months to a year after the first prototype is delivered. In practice, this usually means
that new machines are shipped long before their test suites have matured.
- Mature functional tests are large, with individual test
vectors typically running to hundreds of millions of bytes. A tester with that sort of
capacity can cost several million dollars, and since execution time for such large tests
is very long, multiple testers may be required for each production line.
Given the above problems, a wish-list could be generated:
Tests should generate completely automatically, in minutes rather than months; they should
require no hardware other than the tester itself; they should be able to pinpoint the
failure directly; they should execute quickly; it should be possible to directly determine
how exhaustive the tests are. In-circuit testing can do all of these things, at a price.
In-Circuit Testing?How it Works
The idea behind in-circuit testing is that if all the
components on a board are good, and all the interconnections between them are also good,
then the board is good. There are many advantages to this approach:
- Compared to the infinite variety of possible circuit boards,
there is a finite number of circuit board components, and since these components are
tested individually when they are manufactured, libraries of exhaustive test vectors for
them already exist. A complete in-circuit test consists of nothing more than a general
interconnection test and a series of component tests. Test vectors for individual
components are usually less than a megabyte long, so they execute quickly.
- If the test for a single component fails, then the board can
be repaired by replacing just that component.
- Fault coverage can be precisely and automatically
determined.
However, the price for all this is high. In order to test
the individual components, direct electrical access to them must be arranged. Currently,
the most common solution for this is to use a slightly Rube Goldberg-Esque,
vacuum-actuated "bed of nails" that pulls the circuit board down onto an array
of spring-loaded, gold-plated pins that precisely contact the solder points on the board.
A medium-sized board can require thousands of these contact points, each with its own test
channel that is capable of delivering a synchronized test vector at 200MHz, and even with
mature technology it is difficult to get the system to work reliably. When everything
works well, there is still the problem of ...
The False Premise of In-Circuit Testing
To wit: How is it possible to "individually test each
component on a circuit board as if it were not actually on the board" when it
obviously is actually on the board? The existence of adjacent digital and analog
components can play havoc with test vectors that were designed to be used on an
electrically isolated, solitary component. Two techniques, preconditioning and
overdriving, are used to overcome this problem. Preconditioning is a safe, but not
always-applicable approach that involves persuading other devices on the board to shut
down so that they do not affect the test. A good example would be when several devices
share a bus ? there is usually a way to turn all but one of them off so that the remaining
device has uninterrupted access to the bus. Overdriving is a more general, brute-force
technique that simply pours enough current into the circuit to overcome the effect of
adjacent devices?the danger here is that the large amounts of current might damage the
other components.
With preconditioning applied whenever possible, and with
carefully-minimized doses of overdriving, in-circuit testing works very well on boards
that conform to an assumption that is necessarily made in determining what
preconditioning, and just how much overdriving, are required. That assumption,
unfortunately, is that there are no faults on the board.
Cascading Failures
If a component is bad, then that assumption fails, and as a
result, so will many of the tests of components adjacent to the bad one. The result is a
cascade of failures, one real, the others spurious. Until recently, determining which
failure is the real one was the task of a highly skilled technician, but the techniques
used: in-depth understanding of the board geography; knowledge of typical failure
patterns; educated guessing?have proven amenable to encoding as an Artificial Intelligence
program. The program uses simple, well-proven rules-of-thumb such as: "If there are N
devices on a bus, one passes its test and N - 1 identically fail their tests, then the bad
device is the one that passed its test," and also uses very complex rules such as:
"If an IC chip is failing massively on most or all of its inputs and outputs, in
conformance with a certain pattern, then the chip has most likely been inserted onto the
board backwards."
Glossary
Functional testing: Testing the functionality of a
circuit board, rather than testing all the possible states the board can be put in. This
can either be done by inserting the board in its intended location, or by mounting the
board in a functional tester.
Test vectors: To test a digital device, each of its
inputs is fed a separate sequence of binary ones and zeros. These sequences (e.g.
01110000111010...) are known as test vectors. While the inputs are receiving their
vectors, the device's outputs are compared with a reference set to check that the device
is responding properly.
Functional tester: A test bed that can simulate
almost any digital environment. The circuit board to be tested is mounted on the test bed
in the same way that it would be mounted in its intended location. The functional tester
then simulates the board's normal environment by feeding it, in real time, the same type
of digital and analog signals that it would normally receive.
Interconnection test: A check to see that all the
components that are supposed to be connected to each other, are, and all the components
not supposed to be connected to each other, aren't.
Fault coverage: The proportion of all possible board
faults that are being tested. This can be determined because a digital circuit board can
be put into only a finite number of distinct electrical states, which is the combinatorial
product of all the possible states of all the devices on the board. If the individual
device tests put each device into all of its possible states, then fault coverage is 100%.
Combinatorial product: A very large number indeed!
If there are 100 devices on a board, and each of them can take on 100 distinct states,
then the total number of possible states for the complete board is 10**100 (ten followed
by 100 zeros, also known as a googol). A functional test that completely exercised
such a board would have test vectors that were each a googol long, and would take at least
a googol nanoseconds to execute, which is considerably longer than the current age of the
universe.
Mature technology: The design of the precise cut of the
heads of these contact points, for which patents and PhDs have been awarded, is perhaps
the 1980s equivalent to the old theological argument about how many angels can fit on the
head of a pin.
Bus: A group of circuit elements that carry
logically-related signals, such as the 16 lines that make up the IBM PC bus, carrying the
16 bits that make up a memory address. |