Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarApr2017

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search

Messages from 4775

Article: 4775
Subject: Computer Engineering Faculty Position
From: Hugh Jack <jackh@gvsu.edu>
Date: Fri, 13 Dec 1996 15:35:38 -0500
Links: << >>  << T >>  << A >>
I thought it might be of interest to some -- there is a tenure track 
computer engineering position currently being advertised for the Padnos 
School of Engineering at Grand Valley State University. You can find the 
advertisement in the December IEEE Spectrum, and also in a recent ASEE 
Prism. This will be of particular interest to those interested in 
practical teaching and research. If you want send me the information 
requested in the advert. by email I will forward it to the appropriate 
committee.


hugh


p.s. You can find out more about GVSU engineering at, 
http://www.engineer.gvsu.edu
Article: 4776
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: gherbert@crl.com (George Herbert)
Date: 13 Dec 1996 12:41:17 -0800
Links: << >>  << T >>  << A >>
John L. Smith <jsmith@univision.com> wrote:
>Alasdair MacLean wrote:
>> We tend to use antifuse parts (Actel) which are OTP rather
>> than SRAM based parts. I'm fairly sure we would not be allowed
>> to use SRAM parts in "flight-critical" applications.
>
>I'm not sure I understand the reasoning here. I've worked on
>"flight critical" applications, and it was common to see plain
>old SRAM used. Why would SRAM based FPGA's be disqualified?

It's not SRAM pre se; the field programmable gate arrays
which have their configuration actually loaded in the field
and store the configuration in SRAM in the chips once loaded
can get bad loads and thence do things wrong.  If the part is
not actually going to switch modes during operation, you can
buy one-time programmable versions of the same chip which
fuse the program in instead of having to reload the SRAM
every powerup, and therefore don't get the configuration
wrong sometimes.

I've been told that several missiles use the field-programmable
gate arrays and reprogram them in flight, but don't know of
any manned flying vehicles which use those capabilities.
I'm not an expert in the field, though.


-george william herbert
gherbert@crl.com

Article: 4777
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: "John L. Smith" <jsmith@univision.com>
Date: Fri, 13 Dec 1996 13:41:22 -0800
Links: << >>  << T >>  << A >>
Alasdair MacLean wrote:
> 
> We tend to use antifuse parts (Actel) which are OTP rather
> than SRAM based parts. I'm fairly sure we would not be allowed
> to use SRAM parts in "flight-critical" applications.


I'm not sure I understand the reasoning here. I've worked on
"flight critical" applications, and it was common to see plain
old SRAM used. Why would SRAM based FPGA's be disqualified?

-- 
John L. Smith, Pr. Engr.     | Sometimes we are inclined to class
Univision Technologies, Inc. | those who are once-and-a-half witted
6 Fortune Dr.                | with the half-witted, because we
Billerica, MA 01821-3917     | appreciate only a third part of their wit.
jsmith@univision.com         | - Henry David Thoreau
Article: 4778
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: Ray Andraka <randraka@ids.net>
Date: Fri, 13 Dec 1996 13:44:30 -0800
Links: << >>  << T >>  << A >>
John Walton wrote:
> 
> In article <58r4uo$94f@gcsin3.geccs.gecm.com>, Alasdair MacLean <alasdair.maclean@gecm.com> writes:
> |>
> |> We tend to use antifuse parts (Actel) which are OTP rather
> |> than SRAM based parts. I'm fairly sure we would not be allowed
> |> to use SRAM parts in "flight-critical" applications.
> |>
> |> --
> |> The opinions expressed are mine and do not necessarily reflect
> |> those of my employer.
> |>
> |> Alasdair Maclean, Development Engineer
> |> GEC Marconi Radar and Defence Systems,
> |> GNET: 709-5711; Tel: +44 (0)131-343-5711
> |> Fax: +44 (0)131-343-5050
> |> Email: <mailto:alasdair.maclean@gecm.com>
> |>
> |>
> 
> Keep in mind that I have no experience in the arena of
> 'flight critical' systems, FPGAs, and the ugly secrets
> of ASIC vendors.
> 
> 'flight-critical' components are required to have detailed
> fault models used to evaluate the systems ability to 'operate'
> in the presents of faults. The system can be built of any kind
> of components, however, the system fault model is more accurate
> if it's component parts have accurate fault models.
> 
> If the components are bult from Gate Array, Standard Cell, or
> Full Custom, parts the 'composition' of those parts can be
> readily determined and fault models created. That is the ASIC
> layout and macro cell function is know. These parts are also
> manufactured from the same masks for the life of the product
> so they don't change .... much.
> 
> If the components are built from FPGAs, there is a significant
> portion of there composition that will be considered proprietary,
> and you will be required to sign lots-o-stuff, if you can even
> get that far. Also FPGAs are 'standard products', meaning they go
> through life cycles that are out of your control. The parts may
> be changed in significant ways in terms of the fault model. They
> may discontinue the part long before you are ready, which came happen
> with ASICs, but the last time buy should be much cheaper than if you
> had to buy several hundred thousand FPGAs.
> 
> John

I'm not sure I understand the reluctance to use an SRAM based FPGA in a
safety critical application.  The SRAM based parts are at least as
reliable as the ASIC and OTP FPGA counterparts and offer advantages that
are not available to the others.

First, there are no fuses or antifuses to deteriorate with age or be
incompletely programmed.  This eliminates a failure mode that is
relatively common with fused/antifused devices.

Second, and perhaps even more important, the ability to reload the FPGA
program permits the use of  additional configuration(s) to test the
device and its interconnect completely.  This can be done each time the
system initializes.

The ability to infinitely reload the device also permits more complete
testing at the time of manufacture than the OTP and ASIC parts.  Thus
the device can be guaranteed to be 100% without applying an application
specific set of test vectors (which may or may not catch all faults).

Xilinx devices permit the program to include a CRC to verify the it
loads correctly.  This feature can be used to provide an additional
check on the programming.  The readback capability can also be utilized
to monitor the program in the device.

The RAM used to hold the configuration in the SRAM devices is
intentionally a slow RAM cell to provide significantly higher noise
immunity than SRAMs intended for data applications.  This reduces the
likelyhood of program upset to near zero-much lower than the likelyhood
of program upset in a conventional microprocessor based approach.

Microprocessors are fairly well accepted even in safety critical
applications.  The processors also contain proprietary circuits and
require a large degree of analysis to fully understand all the fault
modes.  The regularity of the FPGA array presents a significantly
smaller fault analysis challenge.  

In my experience, if the device loads correctly, it will remain
correct.  Given these observations, and the unmatched flexibility of the
SRAM based arrays I'd pick an SRAM FPGA for safety critical apps before
either the OTP or the ASIC.  Of course, a fault tolerant logic design
helps in any of these cases.

-Ray Andraka, P.E.
Chairman, the Andraka Consulting Group
401/884-7930     Fax 401/884-7950
email randraka@ids.net
http://www.ids.net/~randraka
Article: 4779
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: "Alvin E. Toda" <aet@lava.net>
Date: Fri, 13 Dec 1996 13:09:49 -1000
Links: << >>  << T >>  << A >>
On Fri, 13 Dec 1996, Ray Andraka wrote:

> 
> I'm not sure I understand the reluctance to use an SRAM based FPGA in a
> safety critical application.  The SRAM based parts are at least as
> reliable as the ASIC and OTP FPGA counterparts and offer advantages that
> are not available to the others.
> 
> First, there are no fuses or antifuses to deteriorate with age or be
> incompletely programmed.  This eliminates a failure mode that is
> relatively common with fused/antifused devices.
> 
> Second, and perhaps even more important, the ability to reload the FPGA
> program permits the use of  additional configuration(s) to test the
> device and its interconnect completely.  This can be done each time the
> system initializes.
> 
> The ability to infinitely reload the device also permits more complete
> testing at the time of manufacture than the OTP and ASIC parts.  Thus
> the device can be guaranteed to be 100% without applying an application
> specific set of test vectors (which may or may not catch all faults).
> 
> Xilinx devices permit the program to include a CRC to verify the it
> loads correctly.  This feature can be used to provide an additional
> check on the programming.  The readback capability can also be utilized
> to monitor the program in the device.
> 
> The RAM used to hold the configuration in the SRAM devices is
> intentionally a slow RAM cell to provide significantly higher noise
> immunity than SRAMs intended for data applications.  This reduces the
> likelyhood of program upset to near zero-much lower than the likelyhood
> of program upset in a conventional microprocessor based approach.
> 
> Microprocessors are fairly well accepted even in safety critical
> applications.  The processors also contain proprietary circuits and
> require a large degree of analysis to fully understand all the fault
> modes.  The regularity of the FPGA array presents a significantly
> smaller fault analysis challenge.  
> 
> In my experience, if the device loads correctly, it will remain
> correct. .........

> -Ray Andraka, P.E.
> Chairman, the Andraka Consulting Group
> 401/884-7930     Fax 401/884-7950
> email randraka@ids.net
> http://www.ids.net/~randraka
> 

The "loading" part may explain the reticence to allow the part type in
safty critical systems. Not only is the fault analysis necessary for the
part itself, but the method the designer choses to load the part needs 
to be analyzed for all different situations-- the failure rate is also
dependent on the number of times it is programmed. The reliance on the
part and the method of loading many times, should be much much higher than
that of the functional operation of the system. The onus of determining
the reliability for "loading" the part is now on the system designer. It's
not convincing to assert a high reliability for the design without some
data-- and probably not worth his time. I'm familiar with some systems
with about 20000 vendors where the need is for 95% reliability on the 
the first operation of the system. The probability for single faults
of individual piece parts to fail is then of the order of 0.001%. I hope 
this sheds some light on the problem.


########################################################################
Alvin E. Toda				aet@lava.net
sr. engineer				Phone: 1-808-455-1331

2-Sigma			  	WEB: http://www.lava.net/~aet/2-sigma.html
1363-A Hoowali St.
Pearl City, Hawaii, USA

Article: 4780
Subject: Re: Xilinx configuration PROM
From: dan.bartram@gtri.gatech.edu (Dan Bartram)
Date: Sat, 14 Dec 96 00:18:47 GMT
Links: << >>  << T >>  << A >>
In article <32af6017.6204207@news.smart.net>, bkwilli@smart.net (Bryan Williams) wrote:
>Atmel makes a line of serial EEPROMs that are pin-for-pin compatible
>with the Xilinx OTP parts.  They can also be reprogrammed in-system,
>Atmel tech support can give you info on doing this.

>They also mentioned that (I think) early AT17Cxxx parts may have had
>some kind of bug early on, but I think it had been fixed-- does
>anybody know more about this??
>

I received a batch of AT17C128 parts that took a *really* long time to 
configure the Xilinx part (~30s)  After a call to Atmel and checking the lot 
numbers, I was told I had some from a bad lot.  The local Atmel rep 
brought me some replacements the next day (I guess there is an advantage to 
living in a big city...)


****************************************************************************
Dan Bartram, Jr.
Internet:  dan.bartram@gtri.gatech.edu
****************************************************************************
Article: 4781
Subject: Re: Xilinx configuration PROM
From: dan.bartram@gtri.gatech.edu (Dan Bartram)
Date: Sat, 14 Dec 96 00:34:10 GMT
Links: << >>  << T >>  << A >>
(Peter Alfke) wrote:

>Xilinx serial PROMs offer the most reliable start-up on power-on, and they
>have a well-documented and supported way to adjust the RESET polarity, but
>the present Xilinx SPROMs are NOT electrically re-programmable. The
>present Xilinx devices use EPROM technolgy in a plastic package. Therefore
>there is no way to erase them. Xilinx suggests to use the download cable
>while debugging the configuration.

Sometimes using the download cable is just not feasable.

>We are well aware of the fact that some users prefer an electrically
>erasable SPROM, and I have often referrred users to the two manufacturers,
>AT&T and Atmel, offering EEPROM-based SPROMs that, at least superficially,
>are compatible with the Xilinx devices.

>Atmel devices suffered from confusing documentation of the RESET polarity
>programming. Allegedly, this has been straightened out, but I have heared
>the "All Clear" signal once too often from the Atmel camp. If you have a
>problem with the Atmel devices, it will only be with the reset polarity.

I haven't had any problems with the Atmel parts (AT17C128 and AT17C65) except 
for a few from a bad batch that took a long time to configure.  The Atmel 
support department quickly tracked the down the problem to the lot number and 
I had replacement parts the next day.  Didn't have any problem set the RESET 
polarity in any of the Atmel SPROMS I've used.

I'm actually surprised that Xilinx doesn't offer the electrically erasable 
version, because the Xilinx rep told me a year ago that they would.  The rep 
also made a few snide remarks about Atmel when we discussed their [Atmel's] 
SPROMS.  I got the impression that Xilinx was a little miffed at Atmel.  In 
fact, when the rep found out Atmel had given me some samples, he even asked 
me for one of them.


>You may also want to stay away from 10 MHz CCLK rates that are supported
>by the XC4000 devices, but not by Atmel SPROMs.

Don't know about this....



****************************************************************************
Dan Bartram, Jr.
Internet:  dan.bartram@gtri.gatech.edu
****************************************************************************
Article: 4782
Subject: Re: Anyone tried a FFT in a FPGA?
From: waynet@indirect.com (Wayne Turner)
Date: 14 Dec 1996 03:41:57 GMT
Links: << >>  << T >>  << A >>
In article <58pt9e$apj@cronkite.polaristel.net>,
   davidb@visionics.com (David Badzinski) wrote:
>Has anyone seen a FPGA implementation of an FFT?

Altera has just released a fully parameterizable FFT that can be purchased 
(and therefore designed yourself, if you prefer) that goes into their 10K 
family.

Wayne
Article: 4783
Subject: Re: How to use Xilinx ?
From: David Emrich <emrich@exemplar.com>
Date: Fri, 13 Dec 1996 19:58:51 -0800
Links: << >>  << T >>  << A >>
Cong shiping wrote:
> 
> Hi all,
> 
> I'm using Xilinx's XACT to design FPGA . I haven't any experience with Xilinx's
> FPGA and have some problems . Hope you help me .
> 
> 1. When use VHDL
>    When use VHDL to design a FPGA , how to assign the pin number ? I heard of
>    it is disable to assign the pin nubmer without using schematic .Is it right ?

If you are using Exemplar's Leonardo, or Galileo synthesis tool you can do it this
way (cut & pasted from one of our application notes):

   TYPE string_array IS ARRAY (natural RANGE<>, natural RANGE <>) OF character;  
   ATTRIBUTE pin_number : string;
   ATTRIBUTE array_pin_number : string_array;
   ATTRIBUTE array_pin_number OF y : signal IS ("P20", "P21", "P22", "P23");
   ATTRIBUTE pin_number OF i : signal IS "P10";

> 
> 2. When simulate
>    How to set the input signals's level ? By Altera's MAX-Plus II , it is very
>    easy .

You might want to approach simulation this way:
Write a test bench - a VHDL file that instantiates your circuit.  It can also
instantiate a driver circuit (VHDL logic that runs your design).  You could also
include the driver logic at the top level of the test bench.

You will find that you can produce complex simulations MUCH faster by writing in
VHDL (or Verilog), than in the languages used by most non-HDL proprietary simulators.

Of course if you have a great gate level simulator, your HDL simulation can dump
test vectors that you can run via a trivial test bench (compare actual vs
expected at sample time) in the gate level simulator. So you could check the RTL
in the VHDL simulator, and check the synthesized or routed design in your other
simulator.

It sounds like you need a good VHDL book.  Here's a chance to plug VHDL second
edition, by my coworker, Doug Perry.  There are a lot of VHDL books available -
some good, some not. I like Doug's book, and it's pretty popular.

Good interactive VHDL training is available on CD ROM.  I think there is more
than one.  The only one I have seen is the one we sell, from Esperan.

Regards,
David Emrich
Exemplar Logic

> 
> Thanks
> 
> Paley
Article: 4784
Subject: Re: Xilinx configuration PROM
From: bkwilli@smart.net (Bryan Williams)
Date: Sat, 14 Dec 1996 04:24:35 GMT
Links: << >>  << T >>  << A >>
re: taking a long time to configure-- Whammo! I think I've got that
bug...  I better give Atmel a call.  One of my designs was exhibiting
that behaviour on power-up.... the CCLK from the Xilinx would run, but
it wasn't configuring -- wait a while and it happened.  I was thinking
either my POR circuit was at fault or perhaps the reset polarity was
in question.

Know anything about using Data I/O Unisite to program the Atmel
17C128's?  I use it but there's a confusing issue - the Atmel, like
the Xilinx 17128, claims to have a programmable reset polarity.  How
you specify this is a mystery -- the algorithm mentions the
programmable polarity, but how you specify it is unclear.  I've been
just doing the way I did the Xilinx part -- for the 128kbit part, the
Xilinx algorithm reports a 4004 (hex) device size, the final 4 bytes =
0 for active-low reset, ff for active-high.  The Atmel reports a 4000
(hex) device size, no mention of the extra bytes, but once I tried it
with FF's in the same place the Xilinx expects them - no dice (the
board was designed for active low reset).   Set them to zeros like the
Xilinx and it worked.

Atmel wasn't terribly helpful in solving this, but I did get info on
in-system programming.  Data I/O is probably to blame - their
algorithm is probably just cryptic.  But I just do what I did with the
Xilinx - set 4000-4003 to 0's and it seems to work.


dan.bartram@gtri.gatech.edu (Dan Bartram) wrote:

>In article <32af6017.6204207@news.smart.net>, bkwilli@smart.net (Bryan Williams) wrote:
>>Atmel makes a line of serial EEPROMs that are pin-for-pin compatible
>>with the Xilinx OTP parts.  They can also be reprogrammed in-system,
>>Atmel tech support can give you info on doing this.
>
>>They also mentioned that (I think) early AT17Cxxx parts may have had
>>some kind of bug early on, but I think it had been fixed-- does
>>anybody know more about this??
>>
>
>I received a batch of AT17C128 parts that took a *really* long time to 
>configure the Xilinx part (~30s)  After a call to Atmel and checking the lot 
>numbers, I was told I had some from a bad lot.  The local Atmel rep 
>brought me some replacements the next day (I guess there is an advantage to 
>living in a big city...)
>
>
>****************************************************************************
>Dan Bartram, Jr.
>Internet:  dan.bartram@gtri.gatech.edu
>****************************************************************************

Article: 4785
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: Bob Doyle <doyle@primenet.com.DELETE-FOR-EMAIL>
Date: 13 Dec 1996 21:57:02 -0700
Links: << >>  << T >>  << A >>
George Herbert wrote:
> 
> John L. Smith <jsmith@univision.com> wrote:
> >Alasdair MacLean wrote:
> >> We tend to use antifuse parts (Actel) which are OTP rather
> >> than SRAM based parts. I'm fairly sure we would not be allowed
> >> to use SRAM parts in "flight-critical" applications.
> >
> >I'm not sure I understand the reasoning here. I've worked on
> >"flight critical" applications, and it was common to see plain
> >old SRAM used. Why would SRAM based FPGA's be disqualified?
> 
> It's not SRAM pre se; the field programmable gate arrays
> which have their configuration actually loaded in the field
> and store the configuration in SRAM in the chips once loaded
> can get bad loads and thence do things wrong.  If the part is
> not actually going to switch modes during operation, you can
> buy one-time programmable versions of the same chip which
> fuse the program in instead of having to reload the SRAM
> every powerup, and therefore don't get the configuration
> wrong sometimes.
> 
> I've been told that several missiles use the field-programmable
> gate arrays and reprogram them in flight, but don't know of
> any manned flying vehicles which use those capabilities.
> I'm not an expert in the field, though.
> 
> -george william herbert
> gherbert@crl.com

I think he's referring to the fact that the microprocessor located
right next to the FPGA has an SRAM used to store data and instructions
for the CPU.  What makes the SRAM in the FPGA more likely to be
corrupted than the SRAM attached to the CPU?  The consequences of
either be corrupted can be equally bad.  And CPUs are common in
safety critical applications.

I was wondering if SRAM based FPGA's are more thoroughly tested by
the manufacturer than their fused-link counterparts because each
part can be loaded with robust test patterns and verified to be
correct.

Analyzing the effects of component failures is part of the design
of a "Safety Critical Application".  It may be that a complete
failure of the FPGA of whatever type has very little effect on the
safe operation of the system.

BTW, I've used SRAM-based FPGA's in "flight-essential" systems.

Bob Doyle
Article: 4786
Subject: Re: Xilinx configuration PROM
From: murray@pa.dec.com (Hal Murray)
Date: 14 Dec 1996 11:59:22 GMT
Links: << >>  << T >>  << A >>
In article <32b223f4.187444683@news.smart.net>, bkwilli@smart.net (Bryan Williams) writes:

> Know anything about using Data I/O Unisite to program the Atmel
> 17C128's?  I use it but there's a confusing issue - the Atmel, like
> the Xilinx 17128, claims to have a programmable reset polarity.  How
> you specify this is a mystery ...

I haven't used the Atmel parts or a Data I/O blaster.

We use the Xilinx ROMs with a ??? programmer.

I claim part of the problem is a botch in Xilinx software.
You can't set the bit that flips the ROM reset polarity
from the Xilinx tools - it doesn't even get saved in the
ROM data file.  You have to set it manually by talking to
your ROM programmer.



Article: 4787
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: brian@colloquium.co.uk (Brian Drummond)
Date: Sat, 14 Dec 1996 15:42:16 GMT
Links: << >>  << T >>  << A >>
Ray Andraka <randraka@ids.net> wrote:

>John Walton wrote:
>> 
>> In article <58r4uo$94f@gcsin3.geccs.gecm.com>, Alasdair MacLean <alasdair.maclean@gecm.com> writes:
>> |>
>> |> We tend to use antifuse parts (Actel) which are OTP rather
>> |> than SRAM based parts. I'm fairly sure we would not be allowed
>> |> to use SRAM parts in "flight-critical" applications.

>I'm not sure I understand the reluctance to use an SRAM based FPGA in a
>safety critical application.  The SRAM based parts are at least as
>reliable as the ASIC and OTP FPGA counterparts and offer advantages that
>are not available to the others.

I don't see major drawbacks either. In the event of a power glitch,
however, there is potentially more down-time while the
reset/reprogramming cycle takes place. I don't see this as a major
drawback, though it may be for certain applications.

In the case of the flight recorder mentioned earlier, by the time it
loses power, it has presumably done its job. Now if the _data_ was
stored in SRAM I would be more concerned...

>First, there are no fuses or antifuses to deteriorate with age or be
>incompletely programmed.  This eliminates a failure mode that is
>relatively common with fused/antifused devices.

Not true of ASICs, however it is a real worry with fused parts.

- Brian
Article: 4788
Subject: Re: Fpga, Epld, cpld....
From: janoss@vcd.hp.com (Janos Szamosfalvi)
Date: 15 Dec 1996 03:01:56 GMT
Links: << >>  << T >>  << A >>
Peter Alfke (peter@xilinx.com) wrote:

: EPLDs and CPLDs are derived from the PAL architecture and thus have an
: AND-OR logic structure ( with most of the programmability in the AND array
: ) feeding a flip-flop macrocell.
: That means less logic flexibility, but predictable delays, fewer
: flip-flops, but faster compile times than for FPGAs.
: Also, the technology used tends to have substantial static power consumption.

: FPGAs have a more flexible, finer-grained gate-array-like structure with a
: hierarchical interconnect structure. They have more flip-flops, but less
: predictable routing delays. Most use SRAM technology, and thus are
: dynamically reconfigurable, but some use antifuses, which make them
: One-Time-Programmable.
: The technology is static digital CMOS with almost zero static power consumption.

: Altera confuses the issue by calling their SRAM-based FPGA-like families
: "CPLDs" for peculiar, non-technical reasons.

Not sure which family are you refering to, but their 10k series in 
some ways is indeed similar to PLD's.   Delays are very predictable, 
for one.  

--
#include <Standard.Disclaimer> about this post being a personal opinion
Article: 4789
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: Ray Andraka <randraka@ids.net>
Date: Sun, 15 Dec 1996 13:19:49 -0800
Links: << >>  << T >>  << A >>
George Herbert wrote:
> It's not SRAM pre se; the field programmable gate arrays
> which have their configuration actually loaded in the field
> and store the configuration in SRAM in the chips once loaded
> can get bad loads and thence do things wrong.  If the part is
> not actually going to switch modes during operation, you can
> buy one-time programmable versions of the same chip which
> fuse the program in instead of having to reload the SRAM
> every powerup, and therefore don't get the configuration
> wrong sometimes.
> 
But you can easily determine whether the part loaded properly or not. 
Turning on the CRC feature in the data stream will cause the device
(we're talking Xilinx here) to abort the load if the internally
generated CRC does not match the one provided by the bitstream.  The CRC
is a robust method of ensuring data integrity.  In this case it is
incumbent upon the programming controller to sense the aborted download
and retry. For those who don't trust the CRC, the configuration can be
checked by using the readback feature and comparing it to the intended
load.  If that is not enough, BIST can be added to the built in
circuit.  This normally takes additional resources in the FPGA.  Some of
the devices include a JTAG scan port (Xilinx 4k for instance) which does
not require the use of much additional resource.

Bob Doyle wrote:
> I think he's referring to the fact that the microprocessor located
> right next to the FPGA has an SRAM used to store data and instructions
> for the CPU.  What makes the SRAM in the FPGA more likely to be
> corrupted than the SRAM attached to the CPU?  The consequences of
> either be corrupted can be equally bad.  And CPUs are common in
> safety critical applications.
> 
> I was wondering if SRAM based FPGA's are more thoroughly tested by
> the manufacturer than their fused-link counterparts because each
> part can be loaded with robust test patterns and verified to be
> correct.

In fact the FPGA's SRAM is considerably less prone to upset than the
SRAM used for data/instruction store for the processor.  This is due to
the slower write speeds, which require more energy to switch a ram
cell's state.  Yes, the SRAM based FPGAs are tested much more thoroughly
than their OTP counterparts because they can be (and very cheaply).

Alvin E. Toda wrote: 
> The "loading" part may explain the reticence to allow the part type in
> safty critical systems. Not only is the fault analysis necessary for the
> part itself, but the method the designer choses to load the part needs
> to be analyzed for all different situations-- the failure rate is also
> dependent on the number of times it is programmed. The reliance on the
> part and the method of loading many times, should be much much higher than
> that of the functional operation of the system. The onus of determining
> the reliability for "loading" the part is now on the system designer. It's
It is not apparent that reloading an SRAM based part should deteriorate
the reliability of the part.  Naturally, a system that reloads several
times in the course of operation has a higher probability of a bad
load.  However, by utilizing the CRC and readback features, a designer
can ensure that the load was performed properly.  It is incumbent on the
designer of the load logic to use these features properly if the
application demands it. 

Brian Drummond wrote:
> I don't see major drawbacks either. In the event of a power glitch,
> however, there is potentially more down-time while the
> reset/reprogramming cycle takes place. I don't see this as a major
> drawback, though it may be for certain applications.....
> >First, there are no fuses or antifuses to deteriorate with age or be
> >incompletely programmed.  This eliminates a failure mode that is
> >relatively common with fused/antifused devices. 
> Not true of ASICs, however it is a real worry with fused parts.
Obviously ASICs don't suffer from the fuse/antifuse deterioration.  The
deterioration of OTP devices is a real problem however. I've seen it a
couple of times. The usual vendor explanation is incomplete programming.
The SRAM based FPGA will usually come through a power anomally better
than other RAM or even a microprocessor (which can do some screwy things
under adverse power conditions).  Either way, a power upset that is big
enough to potentially upset system operation should be dealt with using
a complete reinitialization. If this is a problem, some steps should be
taken to fortify the power system to prevent such upsets.

-Ray Andraka, P.E.
Chairman, the Andraka Consulting Group
401/884-7930     Fax 401/884-7950
email randraka@ids.net
http://www.ids.net/~randraka
Article: 4790
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: waynet@indirect.com (Wayne Turner)
Date: 16 Dec 1996 01:32:57 GMT
Links: << >>  << T >>  << A >>
In article <32B23436.33ACF752@primenet.com.DELETE-FOR-EMAIL>,
   Bob Doyle <doyle@primenet.com.DELETE-FOR-EMAIL> wrote:
>George Herbert wrote:

[...]

>I think he's referring to the fact that the microprocessor located
>right next to the FPGA has an SRAM used to store data and instructions
>for the CPU.  What makes the SRAM in the FPGA more likely to be
>corrupted than the SRAM attached to the CPU?  The consequences of
>either be corrupted can be equally bad.  And CPUs are common in
>safety critical applications.

In general, due to SRAM cell size, the FPGA will be LESS susceptible than 
the memory device, but that isn't the problem.  The problem is that there are 
error detection and correction techniques that can be used on RAM data to fix 
errors.  Once an FPGA has has its SRAM bits loaded, then if one of these bit 
values changes due to a single-event-upset, for example, there is no way to 
detect and correct it before it causes a possible change in functionality of 
your device.  Once it HAS been detected (because the ciruit does not work 
properly) it can be fixed by reloading of the device, but by then it is too 
late.  The error has already occurred.

>I was wondering if SRAM based FPGA's are more thoroughly tested by
>the manufacturer than their fused-link counterparts because each
>part can be loaded with robust test patterns and verified to be
>correct.
>
>Analyzing the effects of component failures is part of the design
>of a "Safety Critical Application".  It may be that a complete
>failure of the FPGA of whatever type has very little effect on the
>safe operation of the system.
>
>BTW, I've used SRAM-based FPGA's in "flight-essential" systems.

I'd like to know more about that, since when I was working on the Boeing 777 
the specs for SEUs made it nearly impossible to use SRAM devices.
Article: 4791
Subject: Re: Fpga, Epld, cpld....
From: waynet@indirect.com (Wayne Turner)
Date: 16 Dec 1996 01:45:59 GMT
Links: << >>  << T >>  << A >>
In article <peter-1212961547390001@appsmac-1.xilinx.com>,
   peter@xilinx.com (Peter Alfke) wrote:
>In article <32AC67BB.18C2@esiee.fr>, Raphael BELLEC <bellecr@esiee.fr> wrote:
>
>> Dear everyone.
>
>> But I would like to know "in use" what is the real difference you can
>> make between an FPGA and a high density epld?
>
>
>EPLDs and CPLDs are derived from the PAL architecture and thus have an
>AND-OR logic structure ( with most of the programmability in the AND array
>) feeding a flip-flop macrocell.
>That means less logic flexibility, but predictable delays, fewer
>flip-flops, but faster compile times than for FPGAs.
>Also, the technology used tends to have substantial static power consumption.

CPLDs are not necessarily sum-of-products.  Altera Flex 8000 and Flex 10K are 
deemed to be CPLDs; the use of the terms deals more with the continous 
interconnect structure (like an EPLD has) then the actual logic element, which 
is a 4-input LUT followed by a register and is therefore an FPGA-style 
building block.

As for power, now you are really talking about the difference between SRAM 
devices and EEPROM devices, but hey, another time for that one...

>FPGAs have a more flexible, finer-grained gate-array-like structure with a
>hierarchical interconnect structure. They have more flip-flops, but less
>predictable routing delays. Most use SRAM technology, and thus are
>dynamically reconfigurable, but some use antifuses, which make them
>One-Time-Programmable.
>The technology is static digital CMOS with almost zero static power 
consumption.

>Altera confuses the issue by calling their SRAM-based FPGA-like families
>"CPLDs" for peculiar, non-technical reasons.

The real reason is as I stated above; that the interconnect structure is much 
more like an EPLD than an FPGA.  This gives the Altera SRAM devices the same 
fine-grain architecture of an FPGA but with predictable routing delays (and 
fast compile times) of an EPLD.  Hence the CPLD term.
Article: 4792
Subject: Motorola 68HC16 background debugger
From: wctech@why.net (Larry Chen)
Date: 16 Dec 1996 04:06:47 GMT
Links: << >>  << T >>  << A >>
HC16BGND is an advanced programmer’s interface that helps you to
develop, test, and refine your assembly language programs for 
MOTOROLA’s 68HC16 microcontrollers.  The key features include:
- Run under MS Windows
- Interface through PC’s parallel port
- Motorola suggested 10 pin target connector
- Download and debug HC16 assembly language program in S19 or HEX format
- trace through your code by step through or step over
- set up to 100 breakpoints
- On-screen editing of register and data memory
- On-fly assembly of instruction using mnemonics in program memory
- Open infinite Register, Program, and Data windows
- Watch window so that you can watch important variables
- Exchange data through Windows clipboard
- File I/O which can be used to automatically read a hex input file
  into the file and write the result to an output file.
- Easy to use.  Just click on the menu with left mouse or click on 
  the windows’ area.  Everything is self-explained
- Convenient and easy to install due to its parallel port interface.
  You can use laptop to do an on-site demonstration of you products
- Low cost
- 30 day money back guarantee and one year product warranty
For more information or need a demo program,
see http://users.why.net/wctech/hc16bgnd.htm, 
or FTP to FTP.WHY.NET/FTP/PUB/USERS/WCTECH, 
or send email to WCTECH@WHY.NET
Article: 4793
Subject: Motorola 68HC16 background debugger
From: wctech@why.net (Larry Chen)
Date: 16 Dec 1996 04:15:11 GMT
Links: << >>  << T >>  << A >>
HC16BGND is an advanced programmer’s interface that helps you to
develop, test, and refine your assembly language programs for 
MOTOROLA’s 68HC16 microcontrollers.  The key features include:
- Run under MS Windows
- Interface through PC’s parallel port
- Motorola suggested 10 pin target connector
- Download and debug HC16 assembly language program in S19 or HEX 
format
- trace through your code by step through or step over
- set up to 100 breakpoints
- On-screen editing of register and data memory
- On-fly assembly of instruction using mnemonics in program memory
- Open infinite Register, Program, and Data windows
- Watch window so that you can watch important variables
- Exchange data through Windows clipboard
- File I/O which can be used to automatically read a hex input file
  into the file and write the result to an output file.
- Easy to use.  Just click on the menu with left mouse or click on 
  the windows’ area.  Everything is self-explained
- Convenient and easy to install due to its parallel port interface.
  You can use laptop to do an on-site demonstration of you products
- Low cost
- 30 day money back guarantee and one year product warranty
For more information or need a demo program,
see http://users.why.net/wctech/hc16bgnd.htm, 
or FTP to FTP.WHY.NET/FTP/PUB/USERS/WCTECH, 
or send email to WCTECH@WHY.NET

Larry Chen
WC Technology

Article: 4794
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: Alasdair MacLean <alasdair.maclean@gecm.com>
Date: 16 Dec 1996 08:43:58 GMT
Links: << >>  << T >>  << A >>

As several people have pointed out, the problem is that SRAM 
parts are configured on power-up and hence have the potential 
to be configured wrongly. With an antifuse FPGA, once I've 
convinced myself through test that the device has been 
properly configured I can more-or-less forget about it. There 
may be contingencies built in to catch errors in SRAM parts 
but I'd rather not have to deal with that. It may also take 
some time to explain to your customer.

As always, these opinions are my own and may not reflect those 
of my employer.

-- 
Alasdair Maclean, Development Engineer
GEC Marconi Radar and Defence Systems,
GNET: 709-5711; Tel: +44 (0)131-343-5711
Fax: +44 (0)131-343-5050
Email: <mailto:alasdair.maclean@gecm.com>


Article: 4795
Subject: Re: what is "token chain"?
From: Symon Brewer <symon.brewer@wago.de>
Date: Mon, 16 Dec 1996 10:56:31 +0000
Links: << >>  << T >>  << A >>
Philip,
	I once read somewhere, when I was little, that metastability was as
unavoidable as death and taxes. This is something I've always found to
be true except in the 'trivial' case of fully synchronous systems. (I
say trivial because almost all systems I've had experience with accept
data that are not synchronised to the system master clock). I'm kind of
interested how the fifo system you describe can avoid metastability
issues if the input and output systems' clocks are not phase locked
somehow. Otherwise, doesn't any fifo need at least one status flag so
that the circuitry knows when the register bank is either empty or full?
		regards, Symon.

Philip Freidin wrote:
***snipped fifo stuff***
> Some fifo's are built out of an array of registers, with each register
> having a validity flag (i.e. the register has valid data in it). These
> registers are cascaded together (sort of like a shift register), and they
> autonomously move data from one register to the next, if the current
> register has valid data and the next does not. the data therefore ripples
> through the array. All this logic is self clocking. The output basically
> looks at the last registers validity flag, and the input uses the first
> registers validity flag. If designed right, this type of fifo does not
> have metastability issues, unless it includes additional status flags.
> 
> The set of validity flags, and their control logic is what you were
> asking about: "the token chain".
> 
> Philip Freidin.
> 
> In article <587rq2$l96@serv.hinet.net> flxchen@smtp.dlink.com.tw (Felix K.C. CHEN) writes:
> >Dear Friends,
> >
> >I read the terminology "token chain" in an article, but
> >I do not know waht it is?  That article is about the
> >FIFO control mechanism.
> >
> >Could anyone give me a reference or explanation?
> >
> >Best wishes,
> >
> >Felix K.C. CHEN
Article: 4796
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: Miron Abramovici <miron@bell-labs.com>
Date: Mon, 16 Dec 1996 15:56:26 GMT
Links: << >>  << T >>  << A >>
This is a multi-part message in MIME format.

--------------59E2B6001CFBAE393F54BC7E
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Ray Andraka wrote:


> 
> I'm not sure I understand the reluctance to use an SRAM based FPGA in a
> safety critical application.  The SRAM based parts are at least as
> reliable as the ASIC and OTP FPGA counterparts and offer advantages that
> are not available to the others.
> 
> First, there are no fuses or antifuses to deteriorate with age or be
> incompletely programmed.  This eliminates a failure mode that is
> relatively common with fused/antifused devices.
> 
> Second, and perhaps even more important, the ability to reload the FPGA
> program permits the use of  additional configuration(s) to test the
> device and its interconnect completely.  This can be done each time the
> system initializes.
> 
> The ability to infinitely reload the device also permits more complete
> testing at the time of manufacture than the OTP and ASIC parts.  Thus
> the device can be guaranteed to be 100% without applying an application
> specific set of test vectors (which may or may not catch all faults).
> 
> Xilinx devices permit the program to include a CRC to verify the it
> loads correctly.  This feature can be used to provide an additional
> check on the programming.  The readback capability can also be utilized
> to monitor the program in the device.
> 
> The RAM used to hold the configuration in the SRAM devices is
> intentionally a slow RAM cell to provide significantly higher noise
> immunity than SRAMs intended for data applications.  This reduces the
> likelyhood of program upset to near zero-much lower than the likelyhood
> of program upset in a conventional microprocessor based approach.
> 
> Microprocessors are fairly well accepted even in safety critical
> applications.  The processors also contain proprietary circuits and
> require a large degree of analysis to fully understand all the fault
> modes.  The regularity of the FPGA array presents a significantly
> smaller fault analysis challenge.
> 
> In my experience, if the device loads correctly, it will remain
> correct.  Given these observations, and the unmatched flexibility of the
> SRAM based arrays I'd pick an SRAM FPGA for safety critical apps before
> either the OTP or the ASIC.  Of course, a fault tolerant logic design
> helps in any of these cases.
> 
> -Ray Andraka, P.E.
> Chairman, the Andraka Consulting Group
> 401/884-7930     Fax 401/884-7950
> email randraka@ids.net
> http://www.ids.net/~randraka

-- 

Attached is a postscript paper describing the first built-in-self-test 
(BIST) technique used for FPGAs. It supports the viewpoints stated in 
the above mail. This technique works both for manufacturing and 
in-system test.


			Dr. Miron Abramovici
			Bell Labs - Lucent Technologies  
			600 Mountain Ave Rm. 2A-236
			Murray Hill, NJ 07974-0636
			(908) 582-3933 fax: (908) 582-5192
			miron@bell-labs.com
			http://www.bell-labs.com/user/miron/

--------------59E2B6001CFBAE393F54BC7E
Content-Type: application/postscript
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="tcad.mkr.ps"

%!PS-Adobe-3.0
%%BoundingBox: (atend)
%%Pages: (atend)
%%PageOrder: (atend)
%%DocumentFonts: (atend)
%%Creator: Frame 5.0
%%DocumentData: Clean7Bit
%%EndComments
%%BeginProlog
%
% Frame ps_prolog 5.0, for use with Frame 5.0 products
% This ps_prolog file is Copyright (c) 1986-1995 Frame Technology
% Corporation.  All rights reserved.  This ps_prolog file may be
% freely copied and distributed in conjunction with documents created
% using FrameMaker, FrameMaker/SGML and FrameViewer as long as this 
% copyright notice is preserved.
%
% FrameMaker users specify the proper paper size for each print job in the
% "Print" dialog's "Printer Paper Size" "Width" and "Height~ fields.  If the
% printer that the PS file is sent to does not support the requested paper
% size, or if there is no paper tray of the proper size currently installed, 
% then the job will not be printed.  The following flag, if set to true, will
% cause the job to print on the default paper in such cases.
/FMAllowPaperSizeMismatch            false def
%
% Frame products normally print colors as their true color on a color printer
% or as shades of gray, based on luminance, on a black-and white printer. The
% following flag, if set to true, forces all non-white colors to print as pure
% black. This has no effect on bitmap images.
/FMPrintAllColorsAsBlack             false def
%
% Frame products can either set their own line screens or use a printer's 
% default settings. Three flags below control this separately for no 
% separations, spot separations and process separations. If a flag
% is true, then the default printer settings will not be changed. If it is
% false, Frame products will use their own settings from a table based on
% the printer's resolution.
/FMUseDefaultNoSeparationScreen      true  def
/FMUseDefaultSpotSeparationScreen    true  def
/FMUseDefaultProcessSeparationScreen false def
%
% For any given PostScript printer resolution, Frame products have two sets of 
% screen angles and frequencies for printing process separations, which are 
% recomended by Adobe. The following variable chooses the higher frequencies
% when set to true or the lower frequencies when set to false. This is only
% effective if the appropriate FMUseDefault...SeparationScreen flag is false.
/FMUseHighFrequencyScreens true def
%
% The following is a set of predefined optimal frequencies and angles for various
% common dpi settings. This is taken from "Advances in Color Separation Using
% PostScript Software Technology," from Adobe Systems (3/13/89 P.N. LPS 0043)
% and corrolated with information which is in various PPD (4.0) files.
%
% The "dpiranges" figure is the minimum dots per inch device resolution which
% can support this setting. The "low" and "high" values are controlled by the
% setting of the FMUseHighFrequencyScreens flag above. The "TDot" flags control
% the use of the "Yellow Triple Dot" feature whereby the frequency id divided by
% three, but the dot function is "trippled" giving a block of 3x3 dots per cell.
%
% PatFreq is a compromise pattern frequency for ps Level 2 printers which is close
% to the ideal WYSIWYG pattern frequency of 9 repetitions/inch but does not beat
% (too badly) against the screen frequencies of any separations for that DPI.
/dpiranges   [  2540    2400    1693     1270    1200     635      600      0      ] def
/CMLowFreqs  [ 100.402  94.8683 89.2289 100.402  94.8683  66.9349  63.2456 47.4342 ] def
/YLowFreqs   [  95.25   90.0    84.65    95.25   90.0     70.5556  66.6667 50.0    ] def
/KLowFreqs   [  89.8026 84.8528 79.8088  89.8026 84.8528  74.8355  70.7107 53.033  ] def
/CLowAngles  [  71.5651 71.5651 71.5651 71.5651  71.5651  71.5651  71.5651 71.5651 ] def
/MLowAngles  [  18.4349 18.4349 18.4349 18.4349  18.4349  18.4349  18.4349 18.4349 ] def
/YLowTDot    [  true    true    false    true    true     false    false   false   ] def
/CMHighFreqs [ 133.87  126.491 133.843  108.503 102.523  100.402   94.8683 63.2456 ] def
/YHighFreqs  [ 127.0   120.0   126.975  115.455 109.091   95.25    90.0    60.0    ] def
/KHighFreqs  [ 119.737 113.137 119.713  128.289 121.218   89.8026  84.8528 63.6395 ] def
/CHighAngles [  71.5651 71.5651 71.5651  70.0169 70.0169  71.5651  71.5651 71.5651 ] def
/MHighAngles [  18.4349 18.4349 18.4349  19.9831 19.9831  18.4349  18.4349 18.4349 ] def
/YHighTDot   [  false   false   true     false   false    true     true    false   ] def
/PatFreq     [	10.5833 10.0     9.4055  10.5833 10.0	  10.5833  10.0	   9.375   ] def
%
% PostScript Level 2 printers contain an "Accurate Screens" feature which can
% improve process separation rendering at the expense of compute time. This 
% flag is ignored by PostScript Level 1 printers.
/FMUseAcccurateScreens true def
%
% The following PostScript procedure defines the spot function that Frame
% products will use for process separations. You may un-comment-out one of
% the alternative functions below, or use your own.
%
% Dot function
/FMSpotFunction {abs exch abs 2 copy add 1 gt 
		{1 sub dup mul exch 1 sub dup mul add 1 sub }
		{dup mul exch dup mul add 1 exch sub }ifelse } def
%
% Line function
% /FMSpotFunction { pop } def
%
% Elipse function
% /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add 
%		sqrt 1 exch sub } def
%
%
/FMversion (5.0) def 
/fMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def
/FMPColor
	fMLevel1 {
		false
		/colorimage where {pop pop true} if
	} {
		true
	} ifelse
def
/FrameDict 400 dict def 
systemdict /errordict known not {/errordict 10 dict def
		errordict /rangecheck {stop} put} if
% The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk
FrameDict /tmprangecheck errordict /rangecheck get put 
errordict /rangecheck {FrameDict /bug true put} put 
FrameDict /bug false put 
mark 
% Some PS machines read past the CR, so keep the following 3 lines together!
currentfile 5 string readline
00
0000000000
cleartomark 
errordict /rangecheck FrameDict /tmprangecheck get put 
FrameDict /bug get { 
	/readline {
		/gstring exch def
		/gfile exch def
		/gindex 0 def
		{
			gfile read pop 
			dup 10 eq {exit} if 
			dup 13 eq {exit} if 
			gstring exch gindex exch put 
			/gindex gindex 1 add def 
		} loop
		pop 
		gstring 0 gindex getinterval true 
		} bind def
	} if
/FMshowpage /showpage load def
/FMquit /quit load def
/FMFAILURE { 
	dup = flush 
	FMshowpage 
	/Helvetica findfont 12 scalefont setfont
	72 200 moveto show
	72 220 moveto show
	FMshowpage 
	FMquit 
	} def 
/FMVERSION {
	FMversion ne {
		(Frame product version does not match ps_prolog!  Check installation;)
		(also check ~/fminit and ./fminit for old versions) FMFAILURE
		} if
	} def 
/FMBADEPSF { 
	(Adobe's PostScript Language Reference Manual, 2nd Edition, section H.2.4)
	(says your EPS file is not valid, as it calls X              )
	dup dup (X) search pop exch pop exch pop length 
	5 -1 roll 
	putinterval 
	FMFAILURE
	} def
/fmConcatProcs
	{
	/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
	newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx
}def
FrameDict begin [
	/ALDsave
	/FMdicttop
	/FMoptop
	/FMpointsize
	/FMsaveobject
	/b
	/bitmapsave
	/blut
	/bpside
	/bs
	/bstring
	/bwidth
	/c
	/cf
	/cs
	/cynu
	/depth
	/edown
	/fh
	/fillvals
	/fw
	/fx
	/fy
	/g
	/gfile
	/gindex
	/grnt
	/gryt
	/gstring
	/height
	/hh
	/i
	/im
	/indx
	/is
	/k
	/kk
	/landscape
	/lb
	/len
	/llx
	/lly
	/m
	/magu
	/manualfeed
	/n
	/offbits
	/onbits
	/organgle
	/orgbangle
	/orgbfreq
	/orgbproc
	/orgbxfer
	/orgfreq
	/orggangle
	/orggfreq
	/orggproc
	/orggxfer
	/orgmatrix
	/orgproc
	/orgrangle
	/orgrfreq
	/orgrproc
	/orgrxfer
	/orgxfer
	/pagesave
	/paperheight
	/papersizedict
	/paperwidth
	/pos
	/pwid
	/r
	/rad
	/redt
	/sl
	/str
	/tran
	/u
	/urx
	/ury
	/val
	/width
	/width
	/ws
	/ww
	/x
	/x1
	/x2
	/xindex
	/xpoint
	/xscale
	/xx
	/y
	/y1
	/y2
	/yelu
	/yindex
	/ypoint
	/yscale
	/yy
] { 0 def } forall
/FmBD {bind def} bind def
systemdict /pdfmark known {
	/fMAcrobat true def
	
	/FmPD /pdfmark load def
	
	
	/FmPT /show load def
	
	
	currentdistillerparams /CoreDistVersion get 2000 ge {
	
		
		/FmPD2 /pdfmark load def
		
		
		
		
		
		/FmPA { mark exch /Dest exch 5 3 roll 
				/View [ /XYZ null 6 -2 roll FmDC exch pop null] /DEST FmPD 
		}FmBD
	} {
		
		/FmPD2 /cleartomark load def
		/FmPA {pop pop pop}FmBD
	} ifelse
} {
	
	/fMAcrobat false def
	/FmPD /cleartomark load def
	/FmPD2 /cleartomark load def
	/FmPT /pop load def
	/FmPA {pop pop pop}FmBD
} ifelse
/FmDC {
	transform fMDefaultMatrix itransform cvi exch cvi exch
}FmBD
/FmBx {
	dup 3 index lt {3 1 roll exch} if 
	1 index 4 index lt {4 -1 roll 3 1 roll exch 4 1 roll} if
}FmBD
/FMnone 0 def
/FMcyan 1 def
/FMmagenta 2 def
/FMyellow 3 def
/FMblack 4 def
/FMcustom 5 def
/fMNegative false def 
/FrameSepIs FMnone def 
/FrameSepBlack 0 def
/FrameSepYellow 0 def
/FrameSepMagenta 0 def
/FrameSepCyan 0 def
/FrameSepRed 1 def
/FrameSepGreen 1 def
/FrameSepBlue 1 def
/FrameCurGray 1 def
/FrameCurPat null def
/FrameCurColors [ 0 0 0 1 0 0 0 ] def 
/FrameColorEpsilon .001 def	
/eqepsilon {		
	sub dup 0 lt {neg} if
	FrameColorEpsilon le
} bind def
/FrameCmpColorsCMYK { 
	2 copy 0 get exch 0 get eqepsilon {
		2 copy 1 get exch 1 get eqepsilon {
			2 copy 2 get exch 2 get eqepsilon {
				3 get exch 3 get eqepsilon
			} {pop pop false} ifelse
		}{pop pop false} ifelse
	} {pop pop false} ifelse
} bind def
/FrameCmpColorsRGB { 
	2 copy 4 get exch 0 get eqepsilon {
		2 copy 5 get exch 1 get eqepsilon {
			6 get exch 2 get eqepsilon
		}{pop pop false} ifelse
	} {pop pop false} ifelse
} bind def
/RGBtoCMYK { 
	1 exch sub 
	3 1 roll 
	1 exch sub 
	3 1 roll 
	1 exch sub 
	3 1 roll 
	3 copy 
	2 copy 
	le { pop } { exch pop } ifelse 
	2 copy 
	le { pop } { exch pop } ifelse 
	dup dup dup 
	6 1 roll 
	4 1 roll 
	7 1 roll 
	sub 
	6 1 roll 
	sub 
	5 1 roll 
	sub 
	4 1 roll 
} bind def
/CMYKtoRGB { 
	dup dup 4 -1 roll add 						  
	5 1 roll 3 -1 roll add 						  
	4 1 roll add 								  
	1 exch sub dup 0 lt {pop 0} if 3 1 roll 	  
	1 exch sub dup 0 lt {pop 0} if exch 	      
	1 exch sub dup 0 lt {pop 0} if exch	  		  
} bind def
/FrameSepInit {
	1.0 RealSetgray
} bind def
/FrameSetSepColor { 
	/FrameSepBlue exch def
	/FrameSepGreen exch def
	/FrameSepRed exch def
	/FrameSepBlack exch def
	/FrameSepYellow exch def
	/FrameSepMagenta exch def
	/FrameSepCyan exch def
	/FrameSepIs FMcustom def
	setCurrentScreen	
} bind def
/FrameSetCyan {
	/FrameSepBlue 1.0 def
	/FrameSepGreen 1.0 def
	/FrameSepRed 0.0 def
	/FrameSepBlack 0.0 def
	/FrameSepYellow 0.0 def
	/FrameSepMagenta 0.0 def
	/FrameSepCyan 1.0 def
	/FrameSepIs FMcyan def
	setCurrentScreen	
} bind def
 
/FrameSetMagenta {
	/FrameSepBlue 1.0 def
	/FrameSepGreen 0.0 def
	/FrameSepRed 1.0 def
	/FrameSepBlack 0.0 def
	/FrameSepYellow 0.0 def
	/FrameSepMagenta 1.0 def
	/FrameSepCyan 0.0 def
	/FrameSepIs FMmagenta def
	setCurrentScreen
} bind def
 
/FrameSetYellow {
	/FrameSepBlue 0.0 def
	/FrameSepGreen 1.0 def
	/FrameSepRed 1.0 def
	/FrameSepBlack 0.0 def
	/FrameSepYellow 1.0 def
	/FrameSepMagenta 0.0 def
	/FrameSepCyan 0.0 def
	/FrameSepIs FMyellow def
	setCurrentScreen
} bind def
 
/FrameSetBlack {
	/FrameSepBlue 0.0 def
	/FrameSepGreen 0.0 def
	/FrameSepRed 0.0 def
	/FrameSepBlack 1.0 def
	/FrameSepYellow 0.0 def
	/FrameSepMagenta 0.0 def
	/FrameSepCyan 0.0 def
	/FrameSepIs FMblack def
	setCurrentScreen
} bind def
 
/FrameNoSep { 
	/FrameSepIs FMnone def
	setCurrentScreen
} bind def
/FrameSetSepColors { 
	FrameDict begin
	[ exch 1 add 1 roll ]
	/FrameSepColors  
	exch def end
	} bind def
/FrameColorInSepListCMYK { 
	FrameSepColors {  
       		exch dup 3 -1 roll 
       		FrameCmpColorsCMYK 
       		{ pop true exit } if
    	} forall 
	dup true ne {pop false} if
	} bind def
/FrameColorInSepListRGB { 
	FrameSepColors {  
       		exch dup 3 -1 roll 
       		FrameCmpColorsRGB 
       		{ pop true exit } if
    	} forall 
	dup true ne {pop false} if
	} bind def
/RealSetgray /setgray load def
/RealSetrgbcolor /setrgbcolor load def
/RealSethsbcolor /sethsbcolor load def
end 
/setgray { 
	FrameDict begin
	FrameSepIs FMnone eq
		{ RealSetgray } 
		{ 
		FrameSepIs FMblack eq 
			{ RealSetgray } 
			{ FrameSepIs FMcustom eq 
			  FrameSepRed 0 eq and
			  FrameSepGreen 0 eq and
			  FrameSepBlue 0 eq and {
			  	RealSetgray
			  } {
				1 RealSetgray pop 
			  } ifelse
			} ifelse
		} ifelse
	end
} bind def
/setrgbcolor { 
	FrameDict begin
	FrameSepIs FMnone eq
	{  RealSetrgbcolor }
	{
		3 copy [ 4 1 roll ] 
		FrameColorInSepListRGB
		{
				FrameSepBlue eq exch 
			 	FrameSepGreen eq and exch 
			 	FrameSepRed eq and
			 	{ 0 } { 1 } ifelse
		}
		{
			FMPColor {
				RealSetrgbcolor
				currentcmykcolor
			} {
				RGBtoCMYK
			} ifelse
			FrameSepIs FMblack eq
			{1.0 exch sub 4 1 roll pop pop pop} {
			FrameSepIs FMyellow eq
			{pop 1.0 exch sub 3 1 roll pop pop} {
			FrameSepIs FMmagenta eq
			{pop pop 1.0 exch sub exch pop } {
			FrameSepIs FMcyan eq
			{pop pop pop 1.0 exch sub } 
			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
		} ifelse
		RealSetgray
	} 
	ifelse
	end
} bind def
/sethsbcolor {
	FrameDict begin
	FrameSepIs FMnone eq 
	{ RealSethsbcolor } 
	{
		RealSethsbcolor 
		currentrgbcolor  
		setrgbcolor 
	} 
	ifelse
	end
} bind def
FrameDict begin
/setcmykcolor where {
	pop /RealSetcmykcolor /setcmykcolor load def
} {
	/RealSetcmykcolor {
		4 1 roll
		3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat 
		RealSetrgbcolor pop
	} bind def
} ifelse
userdict /setcmykcolor { 
		FrameDict begin
		FrameSepIs FMnone eq
		{ RealSetcmykcolor } 
		{
			4 copy [ 5 1 roll ]
			FrameColorInSepListCMYK
			{
				FrameSepBlack eq exch 
				FrameSepYellow eq and exch 
				FrameSepMagenta eq and exch 
				FrameSepCyan eq and 
				{ 0 } { 1 } ifelse
			}
			{
				FrameSepIs FMblack eq
				{1.0 exch sub 4 1 roll pop pop pop} {
				FrameSepIs FMyellow eq
				{pop 1.0 exch sub 3 1 roll pop pop} {
				FrameSepIs FMmagenta eq
				{pop pop 1.0 exch sub exch pop } {
				FrameSepIs FMcyan eq
				{pop pop pop 1.0 exch sub } 
				{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
			} ifelse
			RealSetgray
		}
		ifelse
		end
	} bind put
fMLevel1 { 
	
	
	
	/patScreenDict 7 dict dup begin
		<0f1e3c78f0e1c387> [ 45  { pop } {exch pop} 		.5   2 sqrt] FmBD
		<0f87c3e1f0783c1e> [ 135 { pop } {exch pop}			.5   2 sqrt] FmBD
		<cccccccccccccccc> [ 0   { pop } dup				.5   2	   ] FmBD
		<ffff0000ffff0000> [ 90  { pop } dup				.5   2	   ] FmBD
		<8142241818244281> [ 45  { 2 copy lt {exch} if pop}	dup .75  2 sqrt] FmBD
		<03060c183060c081> [ 45  { pop } {exch pop}			.875 2 sqrt] FmBD
		<8040201008040201> [ 135 { pop } {exch pop}			.875 2 sqrt] FmBD
	end def
} { 
	
	/patProcDict 5 dict dup begin
		<0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 
											4 -4 moveto 12 4 lineto stroke
											-4 4 moveto 4 12 lineto stroke} bind def
		<0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke 
											-4 4 moveto 4 -4 lineto stroke
											4 12 moveto 12 4 lineto stroke} bind def
		<8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke
											-1 -1 moveto 9 9 lineto stroke } bind def
		<03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 
											4 -4 moveto 12 4 lineto stroke
											-4 4 moveto 4 12 lineto stroke} bind def
		<8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke 
											-4 4 moveto 4 -4 lineto stroke
											4 12 moveto 12 4 lineto stroke} bind def
	end def
	/patDict 15 dict dup begin
		/PatternType 1 def		
		/PaintType 2 def		
		/TilingType 3 def		
		/BBox [ 0 0 8 8 ] def 	
		/XStep 8 def			
		/YStep 8 def			
		/PaintProc {
			begin
			patProcDict bstring known {
				patProcDict bstring get exec
			} {
				8 8 true [1 0 0 -1 0 8] bstring imagemask
			} ifelse
			end
		} bind def
	end def
} ifelse
/combineColor {
    FrameSepIs FMnone eq
	{
		graymode fMLevel1 or not {
			
			[/Pattern [/DeviceCMYK]] setcolorspace
			FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor
		} {
			FrameCurColors 3 get 1.0 ge {
				FrameCurGray RealSetgray
			} {
				fMAcrobat not FMPColor graymode and and {
					0 1 3 { 
						FrameCurColors exch get
						1 FrameCurGray sub mul
					} for
					RealSetcmykcolor
				} {
					4 1 6 {
						FrameCurColors exch get
						graymode {
							1 exch sub 1 FrameCurGray sub mul 1 exch sub
						} {
							1.0 lt {FrameCurGray} {1} ifelse
						} ifelse
					} for
					RealSetrgbcolor
				} ifelse
			} ifelse
		} ifelse
	} { 
		FrameCurColors 0 4 getinterval aload
		FrameColorInSepListCMYK {
			FrameSepBlack eq exch 
			FrameSepYellow eq and exch 
			FrameSepMagenta eq and exch 
			FrameSepCyan eq and
			FrameSepIs FMcustom eq and
			{ FrameCurGray } { 1 } ifelse
		} {
			FrameSepIs FMblack eq
			{FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} {
			FrameSepIs FMyellow eq
			{pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} {
			FrameSepIs FMmagenta eq
			{pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } {
			FrameSepIs FMcyan eq
			{pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } 
			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
		} ifelse
		graymode fMLevel1 or not {
			
			[/Pattern [/DeviceGray]] setcolorspace
			FrameCurPat setcolor
		} { 
			graymode not fMLevel1 and {
				
				dup 1 lt {pop FrameCurGray} if
			} if
			RealSetgray
		} ifelse
	} ifelse
} bind def
/savematrix {
	orgmatrix currentmatrix pop
	} bind def
/restorematrix {
	orgmatrix setmatrix
	} bind def
/fMDefaultMatrix matrix defaultmatrix def
/fMatrix2 matrix def
/dpi    72 0 fMDefaultMatrix dtransform
    dup mul exch   dup mul add   sqrt def
	
/freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def
/sangle 1 0 fMDefaultMatrix dtransform exch atan def
	sangle fMatrix2 rotate 
	fMDefaultMatrix fMatrix2 concatmatrix 
	dup 0 get /sflipx exch def
	    3 get /sflipy exch def
/screenIndex {
	0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for
} bind def
/getCyanScreen {
	FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse
		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
} bind def
/getMagentaScreen {
	FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse
		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
} bind def
/getYellowScreen {
	FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse
		screenIndex dup 3 1 roll get 3 1 roll get { 3 div
			{2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat
			FMSpotFunction } } {/FMSpotFunction load } ifelse
			0.0 exch
} bind def
/getBlackScreen  {
	FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse
		screenIndex get 45.0 /FMSpotFunction load 
} bind def
/getSpotScreen {
	getBlackScreen
} bind def
/getCompositeScreen {
	getBlackScreen
} bind def
/FMSetScreen 
	fMLevel1 { /setscreen load 
	}{ {
		8 dict begin
		/HalftoneType 1 def
		/SpotFunction exch def
		/Angle exch def
		/Frequency exch def
		/AccurateScreens FMUseAcccurateScreens def
		currentdict end sethalftone
	} bind } ifelse
def
/setDefaultScreen {
	FMPColor {
		orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer
	}
	{
		orgxfer cvx settransfer
	} ifelse
	orgfreq organgle orgproc cvx setscreen
} bind def
/setCurrentScreen {
	FrameSepIs FMnone eq {
		FMUseDefaultNoSeparationScreen {
			setDefaultScreen
		} {
			getCompositeScreen FMSetScreen
		} ifelse
	} {
		FrameSepIs FMcustom eq {
			FMUseDefaultSpotSeparationScreen {
				setDefaultScreen
			} {
				getSpotScreen FMSetScreen
			} ifelse
		} {
			FMUseDefaultProcessSeparationScreen {
				setDefaultScreen
			} {
				FrameSepIs FMcyan eq {
					getCyanScreen FMSetScreen
				} {
					FrameSepIs FMmagenta eq {
						getMagentaScreen FMSetScreen
					} {
						FrameSepIs FMyellow eq {
							getYellowScreen FMSetScreen
						} {
							getBlackScreen FMSetScreen
						} ifelse
					} ifelse
				} ifelse
			} ifelse
		} ifelse
	} ifelse 
} bind def
end
	
/FMDOCUMENT { 
	array /FMfonts exch def 
	/#copies exch def
	FrameDict begin
	0 ne /manualfeed exch def
	/paperheight exch def
	/paperwidth exch def
	0 ne /fMNegative exch def 
	0 ne /edown exch def 
	/yscale exch def
	/xscale exch def
	fMLevel1 {
		manualfeed {setmanualfeed} if
		/FMdicttop countdictstack 1 add def 
		/FMoptop count def 
		setpapername 
		manualfeed {true} {papersize} ifelse 
		{manualpapersize} {false} ifelse 
		{desperatepapersize} {false} ifelse 
		{papersizefailure} if
		count -1 FMoptop {pop pop} for
		countdictstack -1 FMdicttop {pop end} for 
		}
		{2 dict
		 dup /PageSize [paperwidth paperheight] put
		 manualfeed {dup /ManualFeed manualfeed put} if
		 {setpagedevice} stopped {papersizefailure} if
		}
	ifelse 
	
	FMPColor {
		currentcolorscreen
			cvlit /orgproc exch def
				  /organgle exch def 
				  /orgfreq exch def
			cvlit /orgbproc exch def
				  /orgbangle exch def 
				  /orgbfreq exch def
			cvlit /orggproc exch def
				  /orggangle exch def 
				  /orggfreq exch def
			cvlit /orgrproc exch def
				  /orgrangle exch def 
				  /orgrfreq exch def
			currentcolortransfer 
			fMNegative {
				1 1 4 { 
					pop { 1 exch sub } fmConcatProcs 4 1 roll
				} for
				4 copy
				setcolortransfer
			} if
			cvlit /orgxfer exch def
			cvlit /orgbxfer exch def
			cvlit /orggxfer exch def
			cvlit /orgrxfer exch def
	} {
		currentscreen 
			cvlit /orgproc exch def
				  /organgle exch def 
				  /orgfreq exch def
				  
		currenttransfer 
		fMNegative {
			{ 1 exch sub } fmConcatProcs
			dup settransfer
		} if 
		cvlit /orgxfer exch def
	} ifelse
	end 
} def 
/FMBEGINPAGE { 
	FrameDict begin 
	/pagesave save def
	3.86 setmiterlimit
	/landscape exch 0 ne def
	landscape { 
		90 rotate 0 exch dup /pwid exch def neg translate pop 
	}{
		pop /pwid exch def
	} ifelse
	edown { [-1 0 0 1 pwid 0] concat } if
	0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 
	0 paperheight lineto 0 0 lineto 1 setgray fill
	xscale yscale scale
	/orgmatrix matrix def
	gsave 
} def 
/FMENDPAGE {
	grestore 
	pagesave restore
	end 
	showpage
	} def 
/FMFONTDEFINE { 
	FrameDict begin
	findfont 
	ReEncode 
	1 index exch 
	definefont 
	FMfonts 3 1 roll 
	put
	end 
	} def 
/FMFILLS {
	FrameDict begin dup
	array /fillvals exch def
	dict /patCache exch def
	end 
	} def 
/FMFILL {
	FrameDict begin
	 fillvals 3 1 roll put
	end 
	} def 
/FMNORMALIZEGRAPHICS { 
	newpath
	1 setlinewidth
	0 setlinecap
	0 0 0 sethsbcolor
	0 setgray 
	} bind def
/FMBEGINEPSF { 
	end 
	/FMEPSF save def 
	/showpage {} def 
% See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714.
% "...the following operators MUST NOT be used in an EPS file:" (emphasis ours)
	/banddevice {(banddevice) FMBADEPSF} def
	/clear {(clear) FMBADEPSF} def
	/cleardictstack {(cleardictstack) FMBADEPSF} def 
	/copypage {(copypage) FMBADEPSF} def
	/erasepage {(erasepage) FMBADEPSF} def
	/exitserver {(exitserver) FMBADEPSF} def
	/framedevice {(framedevice) FMBADEPSF} def
	/grestoreall {(grestoreall) FMBADEPSF} def
	/initclip {(initclip) FMBADEPSF} def
	/initgraphics {(initgraphics) FMBADEPSF} def
	/quit {(quit) FMBADEPSF} def
	/renderbands {(renderbands) FMBADEPSF} def
	/setglobal {(setglobal) FMBADEPSF} def
	/setpagedevice {(setpagedevice) FMBADEPSF} def
	/setshared {(setshared) FMBADEPSF} def
	/startjob {(startjob) FMBADEPSF} def
	/lettertray {(lettertray) FMBADEPSF} def
	/letter {(letter) FMBADEPSF} def
	/lettersmall {(lettersmall) FMBADEPSF} def
	/11x17tray {(11x17tray) FMBADEPSF} def
	/11x17 {(11x17) FMBADEPSF} def
	/ledgertray {(ledgertray) FMBADEPSF} def
	/ledger {(ledger) FMBADEPSF} def
	/legaltray {(legaltray) FMBADEPSF} def
	/legal {(legal) FMBADEPSF} def
	/statementtray {(statementtray) FMBADEPSF} def
	/statement {(statement) FMBADEPSF} def
	/executivetray {(executivetray) FMBADEPSF} def
	/executive {(executive) FMBADEPSF} def
	/a3tray {(a3tray) FMBADEPSF} def
	/a3 {(a3) FMBADEPSF} def
	/a4tray {(a4tray) FMBADEPSF} def
	/a4 {(a4) FMBADEPSF} def
	/a4small {(a4small) FMBADEPSF} def
	/b4tray {(b4tray) FMBADEPSF} def
	/b4 {(b4) FMBADEPSF} def
	/b5tray {(b5tray) FMBADEPSF} def
	/b5 {(b5) FMBADEPSF} def
	FMNORMALIZEGRAPHICS 
	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
	fx fw 2 div add fy fh 2 div add  translate
	rotate
	fw 2 div neg fh 2 div neg translate
	fw urx llx sub div fh ury lly sub div scale 
	llx neg lly neg translate 
	/FMdicttop countdictstack 1 add def 
	/FMoptop count def 
	} bind def
/FMENDEPSF {
	count -1 FMoptop {pop pop} for 
	countdictstack -1 FMdicttop {pop end} for 
	FMEPSF restore
	FrameDict begin 
	} bind def
FrameDict begin 
/setmanualfeed {
%%BeginFeature *ManualFeed True
	 statusdict /manualfeed true put
%%EndFeature
	} bind def
/max {2 copy lt {exch} if pop} bind def
/min {2 copy gt {exch} if pop} bind def
/inch {72 mul} def
/pagedimen { 
	paperheight sub abs 16 lt exch 
	paperwidth sub abs 16 lt and
	{/papername exch def} {pop} ifelse
	} bind def
/setpapername { 
	/papersizedict 14 dict def 
	papersizedict begin
	/papername /unknown def 
		/Letter 8.5 inch 11.0 inch pagedimen
		/LetterSmall 7.68 inch 10.16 inch pagedimen
		/Tabloid 11.0 inch 17.0 inch pagedimen
		/Ledger 17.0 inch 11.0 inch pagedimen
		/Legal 8.5 inch 14.0 inch pagedimen
		/Statement 5.5 inch 8.5 inch pagedimen
		/Executive 7.5 inch 10.0 inch pagedimen
		/A3 11.69 inch 16.5 inch pagedimen
		/A4 8.26 inch 11.69 inch pagedimen
		/A4Small 7.47 inch 10.85 inch pagedimen
		/B4 10.125 inch 14.33 inch pagedimen
		/B5 7.16 inch 10.125 inch pagedimen
	end
	} bind def
/papersize {
	papersizedict begin
		/Letter {lettertray letter} def
		/LetterSmall {lettertray lettersmall} def
		/Tabloid {11x17tray 11x17} def
		/Ledger {ledgertray ledger} def
		/Legal {legaltray legal} def
		/Statement {statementtray statement} def
		/Executive {executivetray executive} def
		/A3 {a3tray a3} def
		/A4 {a4tray a4} def
		/A4Small {a4tray a4small} def
		/B4 {b4tray b4} def
		/B5 {b5tray b5} def
		/unknown {unknown} def
	papersizedict dup papername known {papername} {/unknown} ifelse get
	end
	statusdict begin stopped end 
	} bind def
/manualpapersize {
	papersizedict begin
		/Letter {letter} def
		/LetterSmall {lettersmall} def
		/Tabloid {11x17} def
		/Ledger {ledger} def
		/Legal {legal} def
		/Statement {statement} def
		/Executive {executive} def
		/A3 {a3} def
		/A4 {a4} def
		/A4Small {a4small} def
		/B4 {b4} def
		/B5 {b5} def
		/unknown {unknown} def
	papersizedict dup papername known {papername} {/unknown} ifelse get
	end
	stopped 
	} bind def
/desperatepapersize {
	statusdict /setpageparams known
		{
		paperwidth paperheight 0 1 
		statusdict begin
		{setpageparams} stopped 
		end
		} {true} ifelse 
	} bind def
/papersizefailure {
	FMAllowPaperSizeMismatch not
		{
(The requested paper size is not available in any currently-installed tray)
(Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray)
		 FMFAILURE } if
	} def
/DiacriticEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
/numbersign /dollar /percent /ampersand /quotesingle /parenleft
/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
/two /three /four /five /six /seven /eight /nine /colon /semicolon
/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
/udieresis /dagger /.notdef /cent /sterling /section /bullet
/paragraph /germandbls /registered /copyright /trademark /acute
/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
/periodcentered /quotesinglbase /quotedblbase /perthousand
/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
] def
/ReEncode { 
	dup 
	length 
	dict begin 
	{
	1 index /FID ne 
		{def} 
		{pop pop} ifelse 
	} forall 
	0 eq {/Encoding DiacriticEncoding def} if 
	currentdict 
	end 
	} bind def
FMPColor 
	
	{
	/BEGINBITMAPCOLOR { 
		BITMAPCOLOR} def
	/BEGINBITMAPCOLORc { 
		BITMAPCOLORc} def
	/BEGINBITMAPTRUECOLOR { 
		BITMAPTRUECOLOR } def
	/BEGINBITMAPTRUECOLORc { 
		BITMAPTRUECOLORc } def
	/BEGINBITMAPCMYK { 
		BITMAPCMYK } def
	/BEGINBITMAPCMYKc { 
		BITMAPCMYKc } def
	}
	
	{
	/BEGINBITMAPCOLOR { 
		BITMAPGRAY} def
	/BEGINBITMAPCOLORc { 
		BITMAPGRAYc} def
	/BEGINBITMAPTRUECOLOR { 
		BITMAPTRUEGRAY } def
	/BEGINBITMAPTRUECOLORc { 
		BITMAPTRUEGRAYc } def
	/BEGINBITMAPCMYK { 
		BITMAPCMYKGRAY } def
	/BEGINBITMAPCMYKc { 
		BITMAPCMYKGRAYc } def
	}
ifelse
/K { 
	FMPrintAllColorsAsBlack {
		dup 1 eq 2 index 1 eq and 3 index 1 eq and not
			{7 {pop} repeat 0 0 0 1 0 0 0} if
	} if 
	FrameCurColors astore 
	pop combineColor
} bind def
/graymode true def
fMLevel1 {
	/fmGetFlip {
		fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse
	} FmBD
} if
/setPatternMode {
	fMLevel1 {
		2 index patScreenDict exch known {
			pop pop
			patScreenDict exch get aload pop 
			freq 								
			mul									
			5 2 roll							
			fMatrix2 currentmatrix 1 get 0 ne {
				3 -1 roll 90 add 3 1 roll 		
				sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul
			} {  								
				sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul 
			} ifelse
			0 lt {exch pop} {pop} ifelse 		
			fMNegative { 
				{neg} fmConcatProcs 			
			} if
			bind
			
			
			
			systemdict /setscreen get exec		
			/FrameCurGray exch def
		} {
			/bwidth  exch def
			/bpside  exch def
			/bstring exch def
			/onbits 0 def  /offbits 0 def
			freq sangle landscape {90 add} if 
				{/ypoint exch def
				 /xpoint exch def
				 /xindex xpoint 1 add 2 div bpside mul cvi def
				 /yindex ypoint 1 add 2 div bpside mul cvi def
				 bstring yindex bwidth mul xindex 8 idiv add get
				 1 7 xindex 8 mod sub bitshift and 0 ne fMNegative {not} if
				 {/onbits  onbits  1 add def 1}
				 {/offbits offbits 1 add def 0}
				 ifelse
				}
				setscreen
			offbits offbits onbits add div fMNegative {1.0 exch sub} if
			/FrameCurGray exch def
		} ifelse
	} { 
		pop pop
		dup patCache exch known {
			patCache exch get
		} { 
			dup
			patDict /bstring 3 -1 roll put
			patDict 
			9 PatFreq screenIndex get div dup matrix scale
			makepattern
			dup 
			patCache 4 -1 roll 3 -1 roll put
		} ifelse
		/FrameCurGray 0 def
		/FrameCurPat exch def
	} ifelse
	/graymode false def
	combineColor
} bind def
/setGrayScaleMode {
	graymode not {
		/graymode true def
		fMLevel1 {
			setCurrentScreen
		} if
	} if
	/FrameCurGray exch def
	combineColor
} bind def
/normalize {
	transform round exch round exch itransform
	} bind def
/dnormalize {
	dtransform round exch round exch idtransform
	} bind def
/lnormalize { 
	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
	} bind def
/H { 
	lnormalize setlinewidth
	} bind def
/Z {
	setlinecap
	} bind def
	
/PFill {
	graymode fMLevel1 or not {
		gsave 1 setgray eofill grestore
	} if
} bind def
/PStroke {
	graymode fMLevel1 or not {
		gsave 1 setgray stroke grestore
	} if
	stroke
} bind def
/X { 
	fillvals exch get
	dup type /stringtype eq
	{8 1 setPatternMode} 
	{setGrayScaleMode}
	ifelse
	} bind def
/V { 
	PFill gsave eofill grestore
	} bind def
/Vclip {
	clip
	} bind def
/Vstrk {
	currentlinewidth exch setlinewidth PStroke setlinewidth
	} bind def
/N { 
	PStroke
	} bind def
/Nclip {
	strokepath clip newpath
	} bind def
/Nstrk {
	currentlinewidth exch setlinewidth PStroke setlinewidth
	} bind def
/M {newpath moveto} bind def
/E {lineto} bind def
/D {curveto} bind def
/O {closepath} bind def
/L { 
 	/n exch def
	newpath
	normalize
	moveto 
	2 1 n {pop normalize lineto} for
	} bind def
/Y { 
	L 
	closepath
	} bind def
/R { 
	/y2 exch def
	/x2 exch def
	/y1 exch def
	/x1 exch def
	x1 y1
	x2 y1
	x2 y2
	x1 y2
	4 Y 
	} bind def
/rarc 
	{rad 
	 arcto
	} bind def
/RR { 
	/rad exch def
	normalize
	/y2 exch def
	/x2 exch def
	normalize
	/y1 exch def
	/x1 exch def
	mark
	newpath
	{
	x1 y1 rad add moveto
	x1 y2 x2 y2 rarc
	x2 y2 x2 y1 rarc
	x2 y1 x1 y1 rarc
	x1 y1 x1 y2 rarc
	closepath
	} stopped {x1 y1 x2 y2 R} if 
	cleartomark
	} bind def
/RRR { 
	/rad exch def
	normalize /y4 exch def /x4 exch def
	normalize /y3 exch def /x3 exch def
	normalize /y2 exch def /x2 exch def
	normalize /y1 exch def /x1 exch def
	newpath
	normalize moveto 
	mark
	{
	x2 y2 x3 y3 rarc
	x3 y3 x4 y4 rarc
	x4 y4 x1 y1 rarc
	x1 y1 x2 y2 rarc
	closepath
	} stopped
	 {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if
	cleartomark
	} bind def
/C { 
	grestore
	gsave
	R 
	clip
	setCurrentScreen
} bind def
/CP { 
	grestore
	gsave
	Y 
	clip
	setCurrentScreen
} bind def
/F { 
	FMfonts exch get
	FMpointsize scalefont
	setfont
	} bind def
/Q { 
	/FMpointsize exch def
	F 
	} bind def
/T { 
	moveto show
	} bind def
/RF { 
	rotate
	0 ne {-1 1 scale} if
	} bind def
/TF { 
	gsave
	moveto 
	RF
	show
	grestore
	} bind def
/P { 
	moveto
	0 32 3 2 roll widthshow
	} bind def
/PF { 
	gsave
	moveto 
	RF
	0 32 3 2 roll widthshow
	grestore
	} bind def
/S { 
	moveto
	0 exch ashow
	} bind def
/SF { 
	gsave
	moveto
	RF
	0 exch ashow
	grestore
	} bind def
/B { 
	moveto
	0 32 4 2 roll 0 exch awidthshow
	} bind def
/BF { 
	gsave
	moveto
	RF
	0 32 4 2 roll 0 exch awidthshow
	grestore
	} bind def
/G { 
	gsave
	newpath
	normalize translate 0.0 0.0 moveto 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath 
	PFill fill
	grestore
	} bind def
/Gstrk {
	savematrix
    newpath
    2 index 2 div add exch 3 index 2 div sub exch 
    normalize 2 index 2 div sub exch 3 index 2 div add exch 
    translate
    scale 
    0.0 0.0 1.0 5 3 roll arc 
    restorematrix
    currentlinewidth exch setlinewidth PStroke setlinewidth
    } bind def
/Gclip { 
	newpath
	savematrix
	normalize translate 0.0 0.0 moveto 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath 
	clip newpath
	restorematrix
	} bind def
/GG { 
	gsave
	newpath
	normalize translate 0.0 0.0 moveto 
	rotate 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath
	PFill
	fill
	grestore
	} bind def
/GGclip { 
	savematrix
	newpath
    normalize translate 0.0 0.0 moveto 
    rotate 
    dnormalize scale 
    0.0 0.0 1.0 5 3 roll arc 
    closepath
	clip newpath
	restorematrix
	} bind def
/GGstrk { 
	savematrix
    newpath
    normalize translate 0.0 0.0 moveto 
    rotate 
    dnormalize scale 
    0.0 0.0 1.0 5 3 roll arc 
    closepath 
	restorematrix
    currentlinewidth exch setlinewidth PStroke setlinewidth
	} bind def
/A { 
	gsave
	savematrix
	newpath
	2 index 2 div add exch 3 index 2 div sub exch 
	normalize 2 index 2 div sub exch 3 index 2 div add exch 
	translate 
	scale 
	0.0 0.0 1.0 5 3 roll arc 
	restorematrix
	PStroke
	grestore
	} bind def
/Aclip {
	newpath
	savematrix
	normalize translate 0.0 0.0 moveto 
	dnormalize scale 
	0.0 0.0 1.0 5 3 roll arc 
	closepath 
	strokepath clip newpath
	restorematrix
} bind def
/Astrk {
	Gstrk
} bind def
/AA { 
	gsave
	savematrix
	newpath
	
	3 index 2 div add exch 4 index 2 div sub exch 
	
	normalize 3 index 2 div sub exch 4 index 2 div add exch
	translate 
	rotate 
	scale 
	0.0 0.0 1.0 5 3 roll arc 
	restorematrix
	PStroke
	grestore
	} bind def
/AAclip {
	savematrix
	newpath
    normalize translate 0.0 0.0 moveto 
    rotate 
    dnormalize scale 
    0.0 0.0 1.0 5 3 roll arc 
    closepath
	strokepath clip newpath
	restorematrix
} bind def
/AAstrk {
	GGstrk
} bind def
/BEGINPRINTCODE { 
	/FMdicttop countdictstack 1 add def 
	/FMoptop count 7 sub def 
	/FMsaveobject save def
	userdict begin 
	/showpage {} def 
	FMNORMALIZEGRAPHICS 
	3 index neg 3 index neg translate
	} bind def
/ENDPRINTCODE {
	count -1 FMoptop {pop pop} for 
	countdictstack -1 FMdicttop {pop end} for 
	FMsaveobject restore 
	} bind def
/gn { 
	0 
	{	46 mul 
		cf read pop 
		32 sub 
		dup 46 lt {exit} if 
		46 sub add 
		} loop
	add 
	} bind def
/cfs { 
	/str sl string def 
	0 1 sl 1 sub {str exch val put} for 
	str def 
	} bind def
/ic [ 
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
	0
	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
	] def
/ms { 
	/sl exch def 
	/val 255 def 
	/ws cfs 
	/im cfs 
	/val 0 def 
	/bs cfs 
	/cs cfs 
	} bind def
400 ms 
/ip { 
	is 
	0 
	cf cs readline pop 
	{	ic exch get exec 
		add 
		} forall 
	pop 
	
	} bind def
/rip { 
	   
	  
	  bis ris copy pop 
      is
      0
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
	  pop pop 
	  ris gis copy pop 
	  dup is exch 
	  
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
	  pop pop
	  gis bis copy pop 
	  dup add is exch 
	  
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
      pop 
      
      } bind def
/rip4 { 
	   
	  
	  kis cis copy pop 
      is
      0
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
	  pop pop 
	  cis mis copy pop 
	  dup is exch 
	  
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
	  pop pop
	  mis yis copy pop 
	  dup dup add is exch 
	  
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
	  pop pop
	  yis kis copy pop 
	  3 mul is exch 
	  
      cf cs readline pop 
      {       ic exch get exec 
              add 
              } forall 
      pop 
      
      } bind def
/wh { 
	/len exch def 
	/pos exch def 
	ws 0 len getinterval im pos len getinterval copy pop
	pos len 
	} bind def
/bl { 
	/len exch def 
	/pos exch def 
	bs 0 len getinterval im pos len getinterval copy pop
	pos len 
	} bind def
/s1 1 string def
/fl { 
	/len exch def 
	/pos exch def 
	/val cf s1 readhexstring pop 0 get def
	pos 1 pos len add 1 sub {im exch val put} for
	pos len 
	} bind def
/hx { 
	3 copy getinterval 
	cf exch readhexstring pop pop 
	} bind def
/wbytes { 
      dup dup
      8 gt { pop 8 idiv mul }
      { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse
	} bind def
/BEGINBITMAPBWc { 
	1 {} COMMONBITMAPc
	} bind def
/BEGINBITMAPGRAYc { 
	8 {} COMMONBITMAPc
	} bind def
/BEGINBITMAP2BITc { 
	2 {} COMMONBITMAPc
	} bind def
/COMMONBITMAPc { 
		 
	/cvtProc exch def
	/depth exch def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/lb width depth wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
	cvtProc                
	/is im 0 lb getinterval def 
	ws 0 lb getinterval is copy pop 
	/cf currentfile def 
	width height depth [width 0 0 height neg 0 height] 
	{ip} image 
	bitmapsave restore 
	grestore
	} bind def
/BEGINBITMAPBW { 
	1 {} COMMONBITMAP
	} bind def
/BEGINBITMAPGRAY { 
	8 {} COMMONBITMAP
	} bind def
/BEGINBITMAP2BIT { 
	2 {} COMMONBITMAP
	} bind def
/COMMONBITMAP { 
	/cvtProc exch def
	/depth exch def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/bitmapsave save def 
	cvtProc              
	/is width depth wbytes string def
	/cf currentfile def 
	width height depth [width 0 0 height neg 0 height] 
	{cf is readhexstring pop} image
	bitmapsave restore 
	grestore
	} bind def
/ngrayt 256 array def
/nredt 256 array def
/nbluet 256 array def
/ngreent 256 array def
fMLevel1 {
/colorsetup {
	currentcolortransfer
	/gryt exch def
	/blut exch def
	/grnt exch def
	/redt exch def
	0 1 255 {
		/indx exch def
		/cynu 1 red indx get 255 div sub def
		/magu 1 green indx get 255 div sub def
		/yelu 1 blue indx get 255 div sub def
		/kk cynu magu min yelu min def
		/u kk currentundercolorremoval exec def
%		/u 0 def
		nredt indx 1 0 cynu u sub max sub redt exec put
		ngreent indx 1 0 magu u sub max sub grnt exec put
		nbluet indx 1 0 yelu u sub max sub blut exec put
		ngrayt indx 1 kk currentblackgeneration exec sub gryt exec put
	} for
	{255 mul cvi nredt exch get}
	{255 mul cvi ngreent exch get}
	{255 mul cvi nbluet exch get}
	{255 mul cvi ngrayt exch get}
	setcolortransfer
	{pop 0} setundercolorremoval
	{} setblackgeneration
	} bind def
}
{
/colorSetup2 {
	[ /Indexed /DeviceRGB 255 
		{dup red exch get 255 div 
		 exch dup green exch get 255 div 
		 exch blue exch get 255 div}
	] setcolorspace
} bind def
} ifelse
/fakecolorsetup {
	/tran 256 string def
	0 1 255 {/indx exch def 
		tran indx
		red indx get 77 mul
		green indx get 151 mul
		blue indx get 28 mul
		add add 256 idiv put} for
	currenttransfer
	{255 mul cvi tran exch get 255.0 div}
	exch fmConcatProcs settransfer
} bind def
/BITMAPCOLOR { 
	/depth 8 def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/bitmapsave save def
	fMLevel1 {	
		colorsetup
		/is width depth wbytes string def
		/cf currentfile def 
		width height depth [width 0 0 height neg 0 height] 
		{cf is readhexstring pop} {is} {is} true 3 colorimage 
	} {
		colorSetup2
		/is width depth wbytes string def
		/cf currentfile def 
		7 dict dup begin
			/ImageType 1 def
			/Width width def
			/Height height def
			/ImageMatrix [width 0 0 height neg 0 height] def
			/DataSource {cf is readhexstring pop} bind def
			/BitsPerComponent depth def
			/Decode [0 255] def
		end image	
	} ifelse
	bitmapsave restore 
	grestore
	} bind def
/BITMAPCOLORc { 
	/depth 8 def
	gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/lb width depth wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
	fMLevel1 {	
		colorsetup
		/is im 0 lb getinterval def 
		ws 0 lb getinterval is copy pop 
		/cf currentfile def 
		width height depth [width 0 0 height neg 0 height] 
		{ip} {is} {is} true 3 colorimage
	} {
		colorSetup2
		/is im 0 lb getinterval def 
		ws 0 lb getinterval is copy pop 
		/cf currentfile def 
		7 dict dup begin
			/ImageType 1 def
			/Width width def
			/Height height def
			/ImageMatrix [width 0 0 height neg 0 height] def
			/DataSource {ip} bind def
			/BitsPerComponent depth def
			/Decode [0 255] def
		end image	
	} ifelse
	bitmapsave restore 
	grestore
	} bind def
/BITMAPTRUECOLORc { 
	/depth 24 def
        gsave
 	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/lb width depth wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
        
	/is im 0 lb getinterval def	
	/ris im 0 width getinterval def	
	/gis im width width getinterval def	
	/bis im width 2 mul width getinterval def 
        
	ws 0 lb getinterval is copy pop 
	/cf currentfile def 
	width height 8 [width 0 0 height neg 0 height] 
	{width rip pop ris} {gis} {bis} true 3 colorimage
	bitmapsave restore 
	grestore
	} bind def
/BITMAPCMYKc { 
	/depth 32 def
        gsave
 	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/lb width depth wbytes def 
	sl lb lt {lb ms} if 
	/bitmapsave save def 
        
	/is im 0 lb getinterval def	
	/cis im 0 width getinterval def	
	/mis im width width getinterval def	
	/yis im width 2 mul width getinterval def 
	/kis im width 3 mul width getinterval def 
        
	ws 0 lb getinterval is copy pop 
	/cf currentfile def 
	width height 8 [width 0 0 height neg 0 height] 
	{width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage
	bitmapsave restore 
	grestore
	} bind def
/BITMAPTRUECOLOR { 
        gsave
		
		3 index 2 div add exch	
		4 index 2 div add exch	
		translate		
		rotate			
		1 index 2 div neg	
		1 index 2 div neg	
		translate		
		scale			
		/height exch def /width exch def
        /bitmapsave save def 
        /is width string def
        /gis width string def
        /bis width string def
        /cf currentfile def 
        width height 8 [width 0 0 height neg 0 height] 
        { cf is readhexstring pop } 
        { cf gis readhexstring pop } 
        { cf bis readhexstring pop } 
        true 3 colorimage 
        bitmapsave restore 
        grestore
        } bind def
/BITMAPCMYK { 
        gsave
		
		3 index 2 div add exch	
		4 index 2 div add exch	
		translate		
		rotate			
		1 index 2 div neg	
		1 index 2 div neg	
		translate		
		scale			
		/height exch def /width exch def
        /bitmapsave save def 
        /is width string def
        /mis width string def
        /yis width string def
        /kis width string def
        /cf currentfile def 
        width height 8 [width 0 0 height neg 0 height] 
        { cf is readhexstring pop } 
        { cf mis readhexstring pop } 
        { cf yis readhexstring pop } 
        { cf kis readhexstring pop } 
        true 4 colorimage 
        bitmapsave restore 
        grestore
        } bind def
/BITMAPTRUEGRAYc { 
	/depth 24 def
        gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/lb width depth wbytes def 
	sl lb lt {lb ms} if 
        /bitmapsave save def 
        
	/is im 0 lb getinterval def	
	/ris im 0 width getinterval def	
	/gis im width width getinterval def	
	/bis im width 2 mul width getinterval def 
        ws 0 lb getinterval is copy pop 
        /cf currentfile def 
        width height 8 [width 0 0 height neg 0 height] 
        {width rip pop ris gis bis width gray} image
        bitmapsave restore 
        grestore
        } bind def
/BITMAPCMYKGRAYc { 
	/depth 32 def
        gsave
	
	3 index 2 div add exch	
	4 index 2 div add exch	
	translate		
	rotate			
	1 index 2 div neg	
	1 index 2 div neg	
	translate		
	scale			
	/height exch def /width exch def
	/lb width depth wbytes def 
	sl lb lt {lb ms} if 
        /bitmapsave save def 
        
	/is im 0 lb getinterval def	
	/cis im 0 width getinterval def	
	/mis im width width getinterval def	
	/yis im width 2 mul width getinterval def 
	/kis im width 3 mul width getinterval def 
        ws 0 lb getinterval is copy pop 
        /cf currentfile def 
        width height 8 [width 0 0 height neg 0 height] 
        {width rip pop cis mis yis kis width cgray} image
        bitmapsave restore 
        grestore
        } bind def
/cgray { 
        /ww exch def
        /k exch def
        /y exch def
        /m exch def
        /c exch def
        0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB
				.144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add
				c i 3 -1 roll floor cvi put } for
        c
 		} bind def
/gray { 
        /ww exch def
        /b exch def
        /g exch def
        /r exch def
        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
			b i get .114 mul add add r i 3 -1 roll floor cvi put } for
        r
        } bind def
/BITMAPTRUEGRAY { 
        gsave
		
		3 index 2 div add exch	
		4 index 2 div add exch	
		translate		
		rotate			
		1 index 2 div neg	
		1 index 2 div neg	
		translate		
		scale			
		/height exch def /width exch def
        /bitmapsave save def 
        /is width string def
        /gis width string def
        /bis width string def
        /cf currentfile def 
        width height 8 [width 0 0 height neg 0 height] 
        { cf is readhexstring pop 
          cf gis readhexstring pop 
          cf bis readhexstring pop width gray}  image
        bitmapsave restore 
        grestore
        } bind def
/BITMAPCMYKGRAY { 
        gsave
		
		3 index 2 div add exch	
		4 index 2 div add exch	
		translate		
		rotate			
		1 index 2 div neg	
		1 index 2 div neg	
		translate		
		scale			
		/height exch def /width exch def
        /bitmapsave save def 
        /is width string def
        /yis width string def
        /mis width string def
        /kis width string def
        /cf currentfile def 
        width height 8 [width 0 0 height neg 0 height] 
        { cf is readhexstring pop 
          cf mis readhexstring pop 
          cf yis readhexstring pop 
          cf kis readhexstring pop width cgray}  image
        bitmapsave restore 
        grestore
        } bind def
/BITMAPGRAY { 
	8 {fakecolorsetup} COMMONBITMAP
	} bind def
/BITMAPGRAYc { 
	8 {fakecolorsetup} COMMONBITMAPc
	} bind def
/ENDBITMAP {
	} bind def
end 
	/ALDmatrix matrix def ALDmatrix currentmatrix pop
/StartALD {
	/ALDsave save def
	 savematrix
	 ALDmatrix setmatrix
	} bind def
/InALD {
	 restorematrix
	} bind def
/DoneALD {
	 ALDsave restore
	} bind def
/I { setdash } bind def
/J { [] 0 setdash } bind def
%%EndProlog
%%BeginSetup
(5.0) FMVERSION
1 1 0 0 612 792 0 1 22 FMDOCUMENT
0 0 /Times-Roman FMFONTDEFINE
1 0 /Times-Bold FMFONTDEFINE
2 0 /Times-BoldItalic FMFONTDEFINE
3 0 /Times-Italic FMFONTDEFINE
4 1 /Symbol FMFONTDEFINE
32 FMFILLS
0 0 FMFILL
1 0.1 FMFILL
2 0.3 FMFILL
3 0.5 FMFILL
4 0.7 FMFILL
5 0.9 FMFILL
6 0.97 FMFILL
7 1 FMFILL
8 <0f1e3c78f0e1c387> FMFILL
9 <0f87c3e1f0783c1e> FMFILL
10 <cccccccccccccccc> FMFILL
11 <ffff0000ffff0000> FMFILL
12 <8142241818244281> FMFILL
13 <03060c183060c081> FMFILL
14 <8040201008040201> FMFILL
16 1 FMFILL
17 0.9 FMFILL
18 0.7 FMFILL
19 0.5 FMFILL
20 0.3 FMFILL
21 0.1 FMFILL
22 0.03 FMFILL
23 0 FMFILL
24 <f0e1c3870f1e3c78> FMFILL
25 <f0783c1e0f87c3e1> FMFILL
26 <3333333333333333> FMFILL
27 <0000ffff0000ffff> FMFILL
28 <7ebddbe7e7dbbd7e> FMFILL
29 <fcf9f3e7cf9f3f7e> FMFILL
30 <7fbfdfeff7fbfdfe> FMFILL
%%EndSetup
%%Page: "1" 1
%%BeginPaperSize: Letter
%%EndPaperSize
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
J
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(1) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
1 18 Q
0 X
(No-Ov) 139.56 708 T
(erhead BIST f) 190.38 708 T
(or FPGA Logic Blocks) 298.93 708 T
2 12 Q
(Charles Stroud, Eric Lee, Srinivasa K) 194.73 651 T
(onala,) 381.46 651 T
2 9.6 Q
(1) 412.47 655.8 T
0 12 Q
(Dept. of Electrical Engineering) 231.02 635 T
(Uni) 249.82 619 T
(v) 267.52 619 T
(ersity of K) 273.34 619 T
(entuck) 324.37 619 T
(y) 356.18 619 T
(453 Anderson Hall) 260.34 603 T
(Le) 254.74 587 T
(xington, K) 267.22 587 T
(y 40506) 318.26 587 T
(phone: \050606\051257-1972) 252.17 571 T
(F) 255.28 555 T
(AX: \050606\051257-3092) 261.07 555 T
(email: cstroud@engr) 235.79 539 T
(.uk) 335.84 539 T
(y) 350.66 539 T
(.edu) 355.88 539 T
(and) 297.34 507 T
2 F
(Miron Abramo) 260.25 475 T
(vici) 334.42 475 T
0 F
(Bell Labs - Lucent T) 227.77 459 T
(echnologies) 326.91 459 T
(600 Mountain A) 259.7 443 T
(v) 338.15 443 T
(e.) 343.97 443 T
(Murray Hill, NJ 07974) 251 427 T
(phone: \050908\051582-3933) 252.17 411 T
(email: miron@research.bell-labs.com) 215.66 395 T
1 F
(Abstract) 283.67 353.67 T
0 F
3.26 (A Built-In Self-Test \050BIST\051 approach for Field Programmable Gate Array \050FPGA\051 testing is) 75.6 326 P
-0.53 (presented which exploits the reprogrammability of FPGAs to create the BIST logic only during testing. As) 54 305 P
1.25 (a result, BIST is achieved without any area overhead or performance penalties to the system function) 54 284 P
0.83 (implemented by the FPGA. The BIST approach is applicable to all levels of testing, achieves maximal) 54 263 P
1.54 (fault coverage, and all tests are applied at-speed. An analysis of Look-Up Table \050LUT\051 based FGPA) 54 242 P
1.29 (architectures yields a general expression for the minimum number of test sessions and establishes the) 54 221 P
1.05 (bounds on FPGA logic resources required to minimize the number of BIST configurations required to) 54 200 P
1.18 (completely test all of the programmable logic blocks of an FPGA. Implementation problems resulting) 54 179 P
-0.23 (from limitations in CAD tools and architectural resources are discussed along with techniques which help) 54 158 P
(to overcome these problems.) 54 137 T
54 84 558 99 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
63 97 207 97 2 L
0.5 H
2 Z
0 X
0 0 0 1 0 0 0 K
N
0 0 612 792 C
0 10 Q
0 X
0 0 0 1 0 0 0 K
(1. This material is based upon w) 72 77.33 T
(ork supported by the National Science F) 201.61 77.33 T
(oundation under Grant No. MIP-9409682.) 362.55 77.33 T
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "1" 1
%%Page: "2" 2
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(2) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
1 14 Q
0 X
(1. Intr) 261.01 710.67 T
(oduction) 298.87 710.67 T
0 12 Q
4.32 (An FPGA consists of an array of programmable logic blocks \050PLBs\051 interconnected by a) 75.6 690 P
0.08 (programmable routing network, and programmable I/O cells. The set of all programming bits establishes) 54 670 P
2.92 (a) 54 650 P
3 F
2.92 (con\336gur) 65.25 650 P
2.92 (ation) 105.07 650 P
0 F
2.92 ( which determines the function of the device. In this paper, we consider in-circuit) 129.74 650 P
1.29 (reprogrammable FPGAs, such as SRAM-based FPGAs, which may be reconfigured an arbitrary large) 54 630 P
0.44 (number of times. FPGA manufacturing tests are complicated by the need to cover all possible modes of) 54 610 P
0.25 (operation and many non-classical fault models \050faults affecting the programmable interconnect network,) 54 590 P
0.09 (delay faults, etc.\051. Currently, tests are generated manually by configuring several application circuits and) 54 570 P
0.26 (exercising them with test patterns developed specifically for each application circuit. Fault simulation to) 54 550 P
1.72 (determine fault coverage of these test patterns is expensive since all the application circuits must be) 54 530 P
-0.54 (simulated. In addition, these tests require long application times and expensive Automatic Test Equipment) 54 510 P
-0.04 (\050ATE\051. The FPGA manufacturing tests are not reusable for board and system-level testing, which require) 54 490 P
-0.35 (separate development efforts. Here the traditional approach has been to rely on system diagnostic routines) 54 470 P
-0.23 (to test the FPGAs in their system mode of operation. The development of these diagnostic routines can be) 54 450 P
(time-consuming and costly, and the resulting test quality is difficult to estimate.) 54 430 T
0.13 (Previous work in FPGA testing) 75.6 405 P
0 9.6 Q
0.11 ([1]) 226.8 409.8 P
0.11 ([2]) 237.99 409.8 P
0 12 Q
0.13 ( tried to take advantage of reprogrammability by treating testing) 249.19 405 P
0.19 (just as another application to be implemented in the FPGA. These methods also exploit the regular array) 54 385 P
1.59 (structure of an FPGA by configuring it as one or more iterative logic arrays \050ILAs\051) 54 365 P
0 9.6 Q
1.27 ([3]) 474.12 369.8 P
1.27 ([4]) 485.32 369.8 P
0 12 Q
1.59 (.) 496.51 365 P
1.59 (Jordan and) 504.09 365 P
0.5 (Marnane) 54 345 P
0 9.6 Q
0.4 ([1]) 96.65 349.8 P
0 12 Q
0.5 ( configure the FPGA as a 2-D ILA multiplier; however, since this method employs only one) 107.84 345 P
-0.66 (configuration, the FPGA cells are not completely tested. Our fault simulation experiments showed that this) 54 325 P
-0.43 (method achieves less than 60% fault coverage for single stuck faults. Huang and Lombardi) 54 305 P
0 9.6 Q
-0.34 ([2]) 485.01 309.8 P
0 12 Q
-0.43 ( structure the) 496.2 305 P
2.23 (FPGA as parallel 1-D ILAs, repeatedly reconfigured to provide comprehensive fault coverage. One) 54 285 P
0.82 (problem in this approach is that it ignores the RAM mode of operation of PLBs and the specific faults) 54 265 P
-0.51 (associated with it. Lombardi et al.) 54 245 P
0 9.6 Q
-0.41 ([5]) 214.43 249.8 P
0 12 Q
-0.51 ( use multiple configurations to test the programmable routing network) 225.62 245 P
-0.22 (of an FPGA. All these methods rely on externally applied vectors and are applicable only for device-level) 54 225 P
-0.73 (manufacturing tests. Reconfiguring FPGAs for system-level testing has been used to test the other circuitry) 54 205 P
(in the system) 54 185 T
0 9.6 Q
([6]) 117.34 189.8 T
([7]) 128.53 189.8 T
([8]) 139.72 189.8 T
0 12 Q
(; however, these methods do not address the testing of the FPGAs themselves.) 150.92 185 T
2.26 (BIST is a testing methodology particularly advantageous for field testing of digital systems by) 75.6 160 P
0.95 (providing high fault-coverage tests at the system operating frequency \050which, otherwise, is not usually) 54 140 P
0.31 (achievable by system diagnostic software\051, and by reducing diagnostic run-time and diagnostic software) 54 120 P
-0.07 (development. Reductions in diagnostic run-time result in reducing the mean time to repair and increasing) 54 100 P
3.98 (the system availability, while reductions in diagnostic code development help to reduce system) 54 80 P
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "2" 2
%%Page: "3" 3
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(3) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
2.59 (development time and cost. However, conventional BIST approaches introduce both area overhead) 54 712 P
0.55 (\050typically between 10 and 30 percent\051 and delay penalties \050typically two to three gate delays\051; the latter) 54 692 P
(may result in speed degradation unacceptable in high-performance systems.) 54 672 T
-0.53 (In this paper, we present a BIST approach for FPGAs that exploits the reprogrammability of an FPGA) 75.6 647 P
1.49 (by configuring it exclusively with BIST logic only during testing. In this way,) 54 627 P
3 F
1.49 (testability is achieved) 451.03 627 P
1.16 (without any logic overhead) 54 607 P
0 F
1.16 (, since the BIST logic \322disappears\323 when the circuit is reconfigured for its) 188.47 607 P
2.23 (normal mode of operation. The only cost is the additional memory for storing the data required to) 54 587 P
-0.49 (reconfigure the FPGA; however, this memory is usually part of the test machine environment \050ATE, CPU,) 54 567 P
-0.57 (or maintenance processor\051 which controls the BIST sequence, and does not involve resources of the FPGA) 54 547 P
0.23 (or of the system under test. We will show that this cost is insignificant. Our approach is applicable to all) 54 527 P
0.72 (levels of testing \050wafer, packaged device, board, and system\051, and all tests are performed at the normal) 54 507 P
0.44 (operating frequency, thus providing at-speed testing. Eliminating the need for adding BIST circuitry \050or) 54 487 P
-0.55 (any design-for-testability logic\051 to the system logic in FPGAs reduces the design interval and increases the) 54 467 P
0.31 (system functionality that can be implemented in each FPGA. An additional advantage is the potential of) 54 447 P
0.38 (using a lower-cost ATE for wafer and package-level tests. Since every FPGA is individually tested, this) 54 427 P
1.52 (approach provides in-system location of defective devices; such a diagnostic resolution is not always) 54 407 P
0.98 (achievable with system diagnostics. Since the BIST is independent of the function implemented in the) 54 387 P
-0.08 (FPGA, all the FPGAs \050of the same type\051 in the system can be tested concurrently; this reduces diagnostic) 54 367 P
(code development and the diagnostic run-time.) 54 347 T
0.46 (Our goal is to completely test all PLBs in SRAM-based FPGAs. Complete testing of the PLBs will) 75.6 322 P
0.38 (also detect any fault in the configuration memory \050and in the FPGA programming interface\051 that affects) 54 302 P
0.05 (bits controlling PLB resources, because any such fault results in a malfunctioning PLB. Although testing) 54 282 P
1.65 (the PLBs will also detect many faults in the programmable interconnect network, it will not provide) 54 262 P
-0.57 (complete coverage for these faults. Testing of the programmable interconnect will be addressed in the next) 54 242 P
0.41 (phase of this project. We use the AT&T Optimized Reconfigurable Cell Array \050ORCA\051) 54 222 P
0 9.6 Q
0.33 ([9]) 479.9 226.8 P
0 12 Q
0.41 ( for the initial) 491.09 222 P
0.07 (design and implementation of the BIST approach, but we emphasize that our technique can be applied to) 54 202 P
0.16 (any SRAM-based FPGA, such as Xilinx) 54 182 P
0 9.6 Q
0.13 ([10]) 248.79 186.8 P
0 12 Q
0.16 ( or Altera Flex 8000) 264.78 182 P
0 9.6 Q
0.13 ([11]) 362.74 186.8 P
0 12 Q
0.16 ( series FPGAs. The remainder of this) 378.73 182 P
0.26 (paper is organized as follows. Section 2 presents an overview of the proposed BIST approach. Section 3) 54 162 P
-0.04 (analyzes the BIST architecture and the FPGA architectural resources required to minimize the number of) 54 142 P
-0.02 (times the FPGA must be reconfigured for complete BIST. Scalability and routability issues are discussed) 54 122 P
0.19 (in) 54 102 P
0.19 (Section 4) 66.53 102 P
0.19 (. Section 5 describes the configurations developed to test the ORCA FPGA and gives results) 111.71 102 P
-0.66 (regarding fault coverage, test-time, and memory requirements. Section 6 discusses several implementation) 54 82 P
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "3" 3
%%Page: "4" 4
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(4) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
(problems and their solutions, and) 54 712 T
(Section 7) 216.66 712 T
( presents our conclusions.) 261.66 712 T
1 14 Q
(2. Ov) 181.81 548.67 T
(er) 213.56 548.67 T
(view of the FPGA BIST A) 225.85 548.67 T
(ppr) 380.66 548.67 T
(oach) 402.19 548.67 T
0 12 Q
0.53 (The strategy of our FPGA BIST approach is to configure groups of PLBs as test pattern generators) 75.6 528 P
2.43 (\050TPGs\051 and output response analyzers \050ORAs\051, and another group as) 54 507 P
3 F
2.43 (blocks under test) 411.28 507 P
0 F
2.43 ( \050BUTs\051, as) 497.47 507 P
1.67 (illustrated in Figure) 54 486 P
1.67 (1. The BUTs are then repeatedly reconfigured to test them in all their modes of) 155.01 486 P
-0.09 (operation. We refer to the test process that occurs for one configuration as a) 54 465 P
3 F
-0.09 (test phase) 419.57 465 P
0 F
-0.09 (. A) 467.14 465 P
3 F
-0.09 (test) 484.62 465 P
-0.09 (session) 504.19 465 P
0 F
-0.09 ( is a) 538.86 465 P
-0.35 (sequence of test phases that completely test the BUTs in their various modes of operation. Once the BUTs) 54 444 P
0.88 (have been tested, the roles of the PLBs are reversed so that in the next test session the previous BUTs) 54 423 P
0.43 (become TPGs or ORAs, and vice versa. Therefore, we need at least two test sessions to test all PLBs in) 54 402 P
-0.26 (the FPGA. Note that all BUTs are tested in parallel, so that the BIST run-time does not depend on the size) 54 381 P
(of the FPGA.) 54 360 T
1.78 (Each test phase consists of the following steps: 1\051 reconfigure the FPGA, 2\051 initiate the test, 3\051) 75.6 86.02 P
1 F
(T) 247.81 695 T
(able 1: Ab) 254.71 695 T
(br) 307.25 695 T
(e) 319.04 695 T
(viations) 324.19 695 T
0 F
(PLB) 86.2 674 T
(Programmable Logic Block) 124.8 674 T
(ORCA) 289.33 674 T
(Optimized Recon\336gurable Cell Array) 340.8 674 T
(TPG) 85.87 656 T
(T) 124.8 656 T
(est P) 131.29 656 T
(attern Generator) 154.12 656 T
3 F
(N) 297.77 656 T
3 8 Q
(TS) 305.78 653.5 T
0 12 Q
(Number of T) 340.8 656 T
(est Sessions) 402.61 656 T
(ORA) 84.53 638 T
(Output Response Analyzer) 124.8 638 T
3 F
(N) 294.89 638 T
3 8 Q
(PLB) 302.89 635.5 T
0 12 Q
(Number of PLBs in FPGA) 340.8 638 T
(B) 85.26 620 T
(UT) 93.14 620 T
(Block \050PLB\051 Under T) 124.8 620 T
(est) 228.95 620 T
3 F
(N) 294.44 620 T
3 8 Q
(TPG) 302.45 617.5 T
0 12 Q
(Number of PLBs used as TPGs) 340.8 620 T
(LUT) 85.54 602 T
(Look-Up T) 124.8 602 T
(able) 178.16 602 T
3 F
(N) 294.22 602 T
3 8 Q
(ORA) 302.23 599.5 T
0 12 Q
(Number of PLBs used as ORAs) 340.8 602 T
(FF) 90.53 584 T
(Flip-Flop) 124.8 584 T
3 F
(N) 294.48 584 T
3 8 Q
(B) 302.49 581.5 T
(UT) 307.29 581.5 T
0 12 Q
(Number of PLBs under test) 340.8 584 T
75.6 685.75 75.6 578.25 2 L
V
0.5 H
0 Z
N
118.8 686.25 118.8 577.75 2 L
V
N
275.95 685.75 275.95 578.25 2 L
V
N
278.45 685.75 278.45 578.25 2 L
V
N
334.8 686.25 334.8 577.75 2 L
V
N
536.4 685.75 536.4 578.25 2 L
V
N
75.35 686 536.65 686 2 L
V
N
75.35 668 536.65 668 2 L
V
N
75.35 650 536.65 650 2 L
V
N
75.35 632 536.65 632 2 L
V
N
75.35 614 536.65 614 2 L
V
N
75.35 596 536.65 596 2 L
V
N
75.35 578 536.65 578 2 L
V
N
54 72 558 720 C
71.59 107.02 540.41 356 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
161.59 158 215.59 338 R
7 X
0 0 0 1 0 0 0 K
V
1 H
0 Z
0 X
N
0 15 Q
(TPG\050s\051) 166.51 244.61 T
90 450 1.97 2.3 315.79 227.7 G
0.5 H
90 450 1.97 2.3 315.79 227.7 A
90 450 1.97 2.3 315.79 220.7 G
90 450 1.97 2.3 315.79 220.7 A
90 450 1.97 2.3 315.79 213.7 G
90 450 1.97 2.3 315.79 213.7 A
143.59 115.86 467.59 124.86 R
7 X
V
1 12 Q
0 X
(Figure 1.) 201.65 116.86 T
(FPGA structure for a test session) 253.65 116.86 T
0 0 0 1 0 0 0 K
287.59 302 341.59 338 R
1 H
N
0 0 0 1 0 0 0 K
0 15 Q
(BUT) 299.59 315.42 T
0 0 0 1 0 0 0 K
287.59 158 341.59 194 R
N
0 0 0 1 0 0 0 K
(BUT) 299.59 171.42 T
0 0 0 1 0 0 0 K
287.59 248 341.59 284 R
N
0 0 0 1 0 0 0 K
(BUT) 299.59 261.42 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
395.59 158 449.59 338 R
7 X
V
0 X
N
(ORAs) 403.84 244.61 T
215.59 248 251.59 248 2 L
7 X
V
2 Z
0 X
N
276.06 320 277.52 320 2 L
0 Z
N
277.52 320 276.56 322.64 285.78 320 276.56 317.36 4 Y
N
277.52 320 276.56 322.64 285.78 320 276.56 317.36 4 Y
V
251.59 320 276.06 320 2 L
7 X
V
2 Z
0 X
N
276.06 266 277.52 266 2 L
0 Z
N
277.52 266 276.56 268.64 285.78 266 276.56 263.36 4 Y
N
277.52 266 276.56 268.64 285.78 266 276.56 263.36 4 Y
V
251.59 266 276.06 266 2 L
7 X
V
2 Z
0 X
N
276.06 176 277.52 176 2 L
0 Z
N
277.52 176 276.56 178.64 285.78 176 276.56 173.36 4 Y
N
277.52 176 276.56 178.64 285.78 176 276.56 173.36 4 Y
V
251.59 176 276.06 176 2 L
7 X
V
2 Z
0 X
N
251.59 320 251.59 176 2 L
7 X
V
0 X
N
384.06 320 385.52 320 2 L
0 Z
N
385.52 320 384.56 322.64 393.78 320 384.56 317.36 4 Y
N
385.52 320 384.56 322.64 393.78 320 384.56 317.36 4 Y
V
341.59 320 384.06 320 2 L
7 X
V
2 Z
0 X
N
384.06 266 385.52 266 2 L
0 Z
N
385.52 266 384.56 268.64 393.78 266 384.56 263.36 4 Y
N
385.52 266 384.56 268.64 393.78 266 384.56 263.36 4 Y
V
341.59 266 384.06 266 2 L
7 X
V
2 Z
0 X
N
384.06 176 385.52 176 2 L
0 Z
N
385.52 176 384.56 178.64 393.78 176 384.56 173.36 4 Y
N
385.52 176 384.56 178.64 393.78 176 384.56 173.36 4 Y
V
341.59 176 384.06 176 2 L
7 X
V
2 Z
0 X
N
150.06 284 151.39 284 2 L
0.5 H
0 Z
N
151.39 284 150.31 286.98 160.69 284 150.31 281.02 4 Y
N
151.39 284 150.31 286.98 160.69 284 150.31 281.02 4 Y
V
107.59 284 150.06 284 2 L
7 X
V
2 Z
0 X
N
119.13 211.33 117.79 211.33 2 L
0 Z
N
117.79 211.33 118.88 208.36 108.5 211.33 118.88 214.31 4 Y
N
117.79 211.33 118.88 208.36 108.5 211.33 118.88 214.31 4 Y
V
161.59 211.33 119.13 211.33 2 L
7 X
V
2 Z
0 X
N
492.06 248 493.39 248 2 L
0 Z
N
493.39 248 492.31 250.98 502.69 248 492.31 245.02 4 Y
N
493.39 248 492.31 250.98 502.69 248 492.31 245.02 4 Y
V
449.59 248 492.06 248 2 L
7 X
V
2 Z
0 X
N
2 10 Q
(BIST_start) 89.59 288.51 T
(Result\050s\051) 473.69 253.18 T
(BIST_done) 89.59 218.05 T
54 72 558 720 C
0 0 612 792 C
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "4" 4
%%Page: "5" 5
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(5) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
0.4 (generate test patterns, 4\051 analyze responses to produce a pass/fail indication, and 5\051 read the test results.) 54 712 P
0.76 (In step 1, the test controller \050ATE for wafer/package testing;) 54 691 P
0.76 (CPU or maintenance processor for board/) 354.56 691 P
2.16 (system testing\051) 54 670 P
2.16 ( interacts with the FPGA\050s\051 under test to reconfigure the logic by retrieving a BIST) 128.49 670 P
0.6 (configuration from the configuration storage \050) 54 649 P
0.6 (A) 277.95 649 P
0.6 (TE memory) 285.28 649 P
0.6 (; disk\051 and loading it into the FPGA\050s\051. The) 343.54 649 P
-0.09 (test controller also initiates the BIST sequence \050step 2\051 and reads the subsequent results \050step 5\051 using the) 54 628 P
-0.11 (FPGA's boundary-scan \050BS\051 Test Access Port) 54 607 P
0 9.6 Q
-0.09 ([12]) 273.92 611.8 P
0 12 Q
-0.11 ( or other system specific means. \050Practically all recently) 289.92 607 P
-0.2 (developed FPGAs, such as ORCA) 54 586 P
0 9.6 Q
-0.16 ([9]) 218.19 590.8 P
0 12 Q
-0.2 (, XC4000) 229.38 586 P
0 9.6 Q
-0.16 ([10]) 275.85 590.8 P
0 12 Q
-0.2 (, and Flex 8000) 291.85 586 P
0 9.6 Q
-0.16 ([11]) 365.91 590.8 P
0 12 Q
-0.2 (, feature boundary scan.\051 Steps 3 and) 381.91 586 P
0.23 (4 are concurrently performed by the BIST logic within the device, and do not involve I/O pins. Thus the) 54 565 P
0.15 (I/O pins of the FPGA are not tested during BIST, and this requires additional tests during manufacturing) 54 544 P
-0.35 (testing. In system testing, the I/O pins are tested together with the board connectivity using BS tests. After) 54 523 P
0.07 (the board or system-level BIST is complete, the test controller must reconfigure the FPGA for its normal) 54 502 P
1.67 (system function; hence the normal device configuration must be stored on disk along with the BIST) 54 481 P
0.57 (configurations. Clearly, the test application time is dominated by the FPGA reconfiguration time. Since) 54 460 P
1.8 (testing time is a major component of the testing cost, an important goal of the testing strategy is to) 54 439 P
0.3 (minimize the number of test sessions as well as the number of test phases required to completely test all) 54 418 P
(of the PLBs in the FPGA.) 54 397 T
-0.3 (All BUTs are configured to have the same function and receive the same input patterns form the TPG) 75.6 372 P
2.05 (block. Since all fault-free BUTs must produce the same output patterns, the ORAs simply compare) 54 351 P
1.34 (corresponding outputs from different BUTs. Unlike the signature-based compression circuits found in) 54 330 P
-0.73 (most BIST applications, comparator-based ORAs do not suffer from the aliasing problem that occurs when) 54 309 P
0.36 (a faulty circuit produces the good circuit signature. As long as the BUTs being compared do not fail the) 54 288 P
0.21 (same way at the same time, no aliasing will be encountered with the comparison-based approach. Faulty) 54 267 P
0.56 (TPGs and/or ORAs may preclude the detection of a fault in a BUT; but the PLBs composing the faulty) 54 246 P
1.98 (TPGs and/or ORAs will become BUTs in a different session, hence a faulty FPGA will not escape) 54 225 P
0.25 (detection. Although a single TPG is sufficient for fault detection, diagnosing the faulty PLB\050s\051 is helped) 54 204 P
-0.04 (by having different synchronized TPGs feed the BUTs being compared by the same ORA. Regarding the) 54 183 P
0.98 (transmission of the ORA results to the BS register, there is a spectrum of trade-off between supplying) 54 162 P
-0.42 (every ORA output, which provides maximum diagnostic resolution, and ORing all the results into a single) 54 141 P
(signal, which provides the best routability.) 54 120 T
1.01 (Our strategy also relies on) 75.6 94 P
3 F
1.01 (pseudoexhaustive testing) 209.63 94 P
0 9.6 Q
0.81 ([13]) 330.29 98.8 P
0 12 Q
1.01 (, in which every subcircuit of the device is) 346.29 94 P
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "5" 5
%%Page: "6" 6
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(6) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
2.26 (tested with exhaustive patterns. This results in maximal fault coverage without explicit fault model) 54 712 P
0.95 (assumptions and without fault simulation. For a combinational block, pseudoexhaustive tests detect all) 54 691 P
1.4 (detectable faults, except some faults that transform the circuit into a sequential one. This includes all) 54 670 P
-0.57 (detectable single and multiple stuck-at faults and most bridging faults. Figure) 54 649 P
-0.57 (2 shows the typical structure) 422.96 649 P
0.4 (of a PLB, composed of a memory block, a flip-flop \050FF\051 block, and a combinational output logic block;) 54 628 P
2.35 (for example, this structure is featured in the ORCA programmable function unit) 54 607 P
0 9.6 Q
1.88 ([9]) 463.1 611.8 P
0 12 Q
2.35 (, in the XC4000) 474.29 607 P
0.09 (configurable logic block) 54 586 P
0 9.6 Q
0.08 ([10]) 171.5 590.8 P
0 12 Q
0.09 (, and in the Altera Flex 8000 logic element) 187.49 586 P
0 9.6 Q
0.08 ([11]) 393.88 590.8 P
0 12 Q
0.09 (. In many FPGAs, the memory) 409.87 586 P
-0.49 (block can be configured as a combinational look-up table \050LUT\051 or a RAM. For the RAM modules, whose) 54 565 P
-0.28 (exhaustive testing is impractical, we use standard RAM test sequences, which are known to be exhaustive) 54 544 P
0.02 (for the fault models specific to RAMs) 54 523 P
0 9.6 Q
0.02 ([14]) 236.11 527.8 P
0.02 ([15]) 252.1 527.8 P
0 12 Q
0.02 (. The FFs in the FF block may also be configured as latches;) 268.1 523 P
0.44 (other programming options deal with synchronous or asynchronous Set and Reset, Clock Enable, active) 54 502 P
0.36 (levels, and so on. Usually, the output block contains multiplexers to connect different internal signals to) 54 481 P
0.65 (the PLB outputs. In most cases, the cell has no feedback loops and the FFs can be directly accessed by) 54 460 P
-0.13 (bypassing the LUT \050as shown by the dashed line\051. This simple structure, where the inputs and the outputs) 54 439 P
(of every subcircuit are easy to control and to observe, simplifies the pseudoexhaustive testing of the cell.) 54 418 T
3.55 (Note that in every phase, a BUT is configured in a different mode of operation; hence its) 75.6 279.02 P
3.43 (pseudoexhaustive test will also change from phase to phase. For example, the test sequence for) 54 258.02 P
0.12 (combinational logic followed by FFs is different from the test sequence for a RAM. Thus the TPG block) 54 237.02 P
-0.16 (may have different structures depending on the sequence that it has to generate in a given phase. Only the) 54 216.02 P
0.67 (BUT inputs and outputs actually used in a particular phase are connected, respectively, to the TPG and) 54 195.02 P
(ORA blocks.) 54 174.02 T
0.29 (Let) 75.6 148.02 P
3 F
0.29 (N) 94.88 148.02 P
3 8 Q
0.19 (BUT) 102.89 145.52 P
0 12 Q
0.29 ( be the number of BUTs used in a test session, and let) 118 148.02 P
3 F
0.29 (O) 382.36 148.02 P
0 F
0.29 ( denote the number of outputs of a) 391.02 148.02 P
-0.25 (PLB. The ORA block, which receives) 54 127.02 P
3 F
-0.25 (N) 237.83 127.02 P
3 8 Q
-0.16 (BUT) 245.83 124.52 P
4 12 Q
-0.25 (\264) 260.94 127.02 P
3 F
-0.25 (O) 267.53 127.02 P
0 F
-0.25 ( signals to analyze, can be organized in two different ways:) 276.19 127.02 P
0.09 (1\051) 54 106.02 P
3 F
0.09 (O) 67.09 106.02 P
0 F
0.09 ( ORAs, where the) 75.75 106.02 P
3 F
0.09 (i) 165.1 106.02 P
0 F
0.09 (th ORA receives the) 168.43 106.02 P
3 F
0.09 (i) 269.44 106.02 P
0 F
0.09 (th output from every BUT) 272.78 106.02 P
0 9.6 Q
0.07 ([18]) 399.13 110.82 P
0 12 Q
0.09 (, and, 2\051) 415.12 106.02 P
3 F
0.09 (N) 457.72 106.02 P
3 8 Q
0.06 (BUT) 465.73 103.52 P
0 12 Q
0.09 (/) 480.84 106.02 P
3 F
0.09 (k) 484.17 106.02 P
0 F
0.09 ( ORAs, where) 489.5 106.02 P
-0.37 (one ORA analyzes all outputs from) 54 85.02 P
3 F
-0.37 (k) 224.42 85.02 P
0 F
-0.37 ( BUTs. We use the second structure with) 229.74 85.02 P
3 F
-0.37 (k) 426.4 85.02 P
0 F
-0.37 (=2, since it provides better) 431.73 85.02 P
54 72 558 720 C
113.81 300.02 498.19 414 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
193.69 343 249.36 386.23 R
0.5 H
0 Z
0 X
0 0 0 1 0 0 0 K
N
281.17 343 336.84 386.23 R
N
368.65 343 424.33 386.23 R
N
182.4 363.96 182.4 366.93 192.78 363.96 182.4 360.98 4 Y
N
182.4 363.96 182.4 366.93 192.78 363.96 182.4 360.98 4 Y
V
140.66 363.96 182.15 363.96 2 L
N
270.22 375.32 270.22 378.3 280.6 375.32 270.22 372.34 4 Y
N
270.22 375.32 270.22 378.3 280.6 375.32 270.22 372.34 4 Y
V
249.69 375.32 269.97 375.32 2 L
N
356.88 375.47 356.92 378.45 367.25 375.33 356.84 372.5 4 Y
N
356.88 375.47 356.92 378.45 367.25 375.33 356.84 372.5 4 Y
V
256.82 375.32 263.03 375.32 263.03 392.7 347.48 393 347.48 375.6 356.63 375.47 6 L
N
269.89 352.09 269.89 355.07 280.26 352.09 269.89 349.12 4 Y
N
269.89 352.09 269.89 355.07 280.26 352.09 269.89 349.12 4 Y
V
163.84 330 264.41 330 264.41 352.09 269.64 352.09 4 L
N
358.53 352.45 358.53 355.43 368.91 352.45 358.53 349.47 4 Y
N
358.53 352.45 358.53 355.43 368.91 352.45 358.53 349.47 4 Y
V
338.01 352.45 358.28 352.45 2 L
N
445.2 364.81 445.2 367.78 455.58 364.81 445.2 361.83 4 Y
N
445.2 364.81 445.2 367.78 455.58 364.81 445.2 361.83 4 Y
V
424.66 364.81 444.95 364.81 2 L
N
0 10 Q
(LUT/RAM) 199.02 359.48 T
(FFs) 301.5 359.48 T
(Output) 382.6 369.56 T
(Logic) 384.83 352.35 T
J
269.89 364.12 269.89 367.09 280.26 364.12 269.89 361.14 4 Y
N
269.89 364.12 269.89 367.09 280.26 364.12 269.89 361.14 4 Y
V
J
176.81 364.12 176.81 336.57 257.09 336.57 257.09 364.12 269.64 364.12 5 L
J
176.81 364.12 176.81 360.37 2 L
2 Z
N
[7.334 6.356] 7.334 I
176.81 360.37 176.81 340.32 2 L
N
J
176.81 340.32 176.81 336.57 180.56 336.57 3 L
N
[7.135 6.183] 7.135 I
180.56 336.57 253.34 336.57 2 L
N
J
253.34 336.57 257.09 336.57 257.09 340.32 3 L
N
[7.334 6.356] 7.334 I
257.09 340.32 257.09 360.37 2 L
N
J
257.09 360.37 257.09 364.12 260.84 364.12 3 L
N
[5.824 5.048] 5.824 I
260.84 364.12 265.89 364.12 2 L
N
J
265.89 364.12 269.64 364.12 2 L
N
J
210.47 312 426.47 321 R
7 X
V
1 12 Q
0 X
-0.19 (Figure 2.) 224.22 313 P
-0.19 (Typical FPGA PLB structure) 276.03 313 P
164.23 329.7 164.23 355.8 139.98 355.8 3 L
N
144.89 350.58 155.2 370.11 2 L
N
3 F
(m) 131.81 373.89 T
0 F
( inputs) 140.48 373.89 T
3 F
(O) 429.36 373.15 T
0 F
( outputs) 438.03 373.15 T
433.61 358.77 440.48 370.11 2 L
N
54 72 558 720 C
0 0 612 792 C
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "6" 6
%%Page: "7" 7
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(7) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 X
-0.28 (routability. To combine results of several ORAs, we use the iterative comparator proposed by) 54 712 P
-0.28 (Sridhar and) 502.63 712 P
0.39 (Hayes) 54 691 P
0 9.6 Q
0.31 ([16]) 83.99 695.8 P
0 12 Q
0.39 (, sho) 99.98 691 P
0.39 (wn within dotted lines in Figure) 122.74 691 P
0.39 (3. Here each ORA compares) 281.35 691 P
0.39 (corresponding) 423.9 691 P
0.39 ( outputs from) 492.56 691 P
0.14 (tw) 54 481 P
0.14 (o B) 65.88 481 P
0.14 (UTs to produce a local mismatch signal \050) 82.9 481 P
3 F
0.14 (LMM) 281.53 481 P
0 F
0.14 (\051, which is ORed with the pre) 308.19 481 P
0.14 (vious mismatch signal) 450.38 481 P
0.65 (\050) 54 460 P
3 F
0.65 (PMM) 58 460 P
0 F
0.65 (\051 from the pre) 85.32 460 P
0.65 (vious ORA to generate the ORA mismatch \050) 153.28 460 P
3 F
0.65 (MM) 370.82 460 P
0 F
0.65 (\051. The) 390.81 460 P
0.65 (FF is required to record the) 423.77 460 P
-0.02 (first mismatch encountered during the BIST sequence. The feedback from the FF output to the first ORA) 54 439 P
0.19 (disables further comparisons after the first error has been recorded. Depending on the number of outputs) 54 418 P
-0.14 (to be compared and on the number of LUTs available in a PLB, several PLBs may be needed to construct) 54 397 P
(an ORA.) 54 376 T
1 14 Q
(3. Ev) 206.06 341.67 T
(aluation of FPGA Resour) 236.26 341.67 T
(ces) 388.06 341.67 T
0 12 Q
0.28 (An important goal of our FPGA BIST strategy is to minimize the number of test sessions as well as) 75.6 321 P
-0.29 (the number of test phases required to completely test all of the PLBs in the FPGA. Therefore, we consider) 54 300 P
0.38 (the FPGA resources required to implement the BIST approach with respect to the resources available in) 54 279 P
-0.32 (the FPGA to determine the minimum number of test sessions \050) 54 258 P
3 F
-0.32 (N) 351.46 258 P
3 8 Q
-0.21 (TS) 359.47 255.5 P
0 12 Q
-0.32 (\051 required to completely test all PLBs in) 367.91 258 P
0.54 (a given FPGA. The number of test sessions is a function of the number of PLBs in the FPGA \050) 54 237 P
3 F
0.54 (N) 518.24 237 P
3 8 Q
0.36 (PLB) 526.24 234.5 P
0 12 Q
0.54 (\051 as) 540.47 237 P
(well as the number of BUTs \050) 54 216 T
3 F
(N) 196.64 216 T
3 8 Q
(BUT) 204.65 213.5 T
0 12 Q
(\051 such that the general expression for) 219.76 216 T
3 F
(N) 400.05 216 T
3 8 Q
(TS) 408.05 213.5 T
0 12 Q
(is given by:) 419.5 216 T
(\0501a\051) 538.68 183 T
0.32 (In addition, the following relation must hold for any FPGA architecture in terms of the number of PLBs) 54 153 P
(required to act as TPGs \050) 54 132 T
3 F
(N) 173.64 132 T
3 8 Q
(TPG) 181.64 129.5 T
0 12 Q
(\051 and ORAs \050) 196.76 132 T
3 F
(N) 261.08 132 T
3 8 Q
(ORA) 269.08 129.5 T
0 12 Q
(\051 during a testing session:) 284.63 132 T
(\0501b\051) 538.01 106 T
-0.19 (Given that we know) 75.6 80 P
3 F
-0.19 (N) 174.82 80 P
3 8 Q
-0.13 (PLB) 182.83 77.5 P
0 12 Q
-0.19 ( for a given FPGA, we must determine the number of PLBs required for the) 197.05 80 P
54 516 558 687 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
178.18 635.7 200.96 635.7 2 L
0.5 H
2 Z
0 X
0 0 0 1 0 0 0 K
N
178.18 605.32 200.96 605.32 2 L
N
152.98 630.63 182.23 630.63 2 L
N
0 90 7.59 15.19 178.18 620.51 A
270 360 7.59 15.19 178.18 620.51 A
152.98 610.38 182.23 610.38 2 L
N
7 X
270 360 18.98 15.19 200.96 620.51 G
0 X
270 360 18.98 15.19 200.96 620.51 A
7 X
0 90 18.98 15.19 200.96 620.51 G
0 X
0 90 18.98 15.19 200.96 620.51 A
3 14 Q
(LMM) 148.46 619.04 T
(PMM) 108.78 586.71 T
220.37 620.09 231.34 620.09 2 L
7 X
V
0 X
N
(MM) 220.37 608.95 T
450.38 577.18 507.79 634.86 R
0 Z
N
436.02 620.44 450.38 620.44 2 L
2 Z
N
507.79 620.44 522.14 620.44 2 L
N
3 16 Q
(D) 453.96 615.49 T
436.42 591.54 450.77 591.54 2 L
N
(C) 454.36 586.6 T
(Q) 496.89 615.49 T
(FF) 472.54 599.61 T
99 610.5 139.5 651 R
7 X
V
0 Z
0 X
N
4 24 Q
(\305) 110.03 623.76 T
119.25 666.86 119.25 664.82 2 L
1.5 H
N
90 450 0.75 0.75 270 119.25 666.86 GG
119.25 664.82 122.8 666.11 119.25 653.72 115.7 666.11 4 Y
N
119.25 664.82 122.8 666.11 119.25 653.72 115.7 666.11 4 Y
V
119.25 678 119.25 666.86 2 L
7 X
V
2 Z
0 X
N
83.14 630.75 85.18 630.75 2 L
0 Z
N
90 450 0.75 0.75 83.14 630.75 G
85.18 630.75 83.89 634.3 96.28 630.75 83.89 627.2 4 Y
N
85.18 630.75 83.89 634.3 96.28 630.75 83.89 627.2 4 Y
V
72 630.75 83.14 630.75 2 L
7 X
V
2 Z
0 X
N
139.5 630.75 153 630.75 2 L
7 X
V
0.5 H
0 X
N
153 610.5 153 597 72 597 3 L
N
230.99 620.07 248.99 620.07 2 L
N
376.33 635.7 399.11 635.7 2 L
N
376.33 605.32 399.11 605.32 2 L
N
351.14 630.63 380.38 630.63 2 L
N
0 90 7.59 15.19 376.33 620.51 A
270 360 7.59 15.19 376.33 620.51 A
351.14 610.38 380.38 610.38 2 L
N
7 X
270 360 18.98 15.19 399.11 620.51 G
0 X
270 360 18.98 15.19 399.11 620.51 A
7 X
0 90 18.98 15.19 399.11 620.51 G
0 X
0 90 18.98 15.19 399.11 620.51 A
3 14 Q
(LMM) 346.61 619.04 T
(PMM) 306.93 586.71 T
418.52 620.09 429.49 620.09 2 L
7 X
V
0 X
N
(MM) 418.52 608.95 T
297.15 610.5 337.65 651 R
7 X
V
0 Z
0 X
N
4 24 Q
(\305) 308.18 623.76 T
317.4 666.86 317.4 664.82 2 L
1.5 H
N
90 450 0.75 0.75 270 317.4 666.86 GG
317.4 664.82 320.95 666.11 317.4 653.72 313.85 666.11 4 Y
N
317.4 664.82 320.95 666.11 317.4 653.72 313.85 666.11 4 Y
V
317.4 678 317.4 666.86 2 L
7 X
V
2 Z
0 X
N
281.29 630.75 283.33 630.75 2 L
0 Z
N
90 450 0.75 0.75 281.29 630.75 G
283.33 630.75 282.04 634.3 294.43 630.75 282.04 627.2 4 Y
N
283.33 630.75 282.04 634.3 294.43 630.75 282.04 627.2 4 Y
V
270.15 630.75 281.29 630.75 2 L
7 X
V
2 Z
0 X
N
337.65 630.75 351.15 630.75 2 L
7 X
V
0.5 H
0 X
N
351.15 610.5 351.15 597 270.15 597 3 L
N
429.14 620.07 447.14 620.07 2 L
N
J
270 597 248.99 620.07 2 L
J
270 597 267.48 599.77 2 L
N
[8.671 7.515] 8.671 I
267.48 599.77 251.52 617.3 2 L
N
J
251.52 617.3 248.99 620.07 2 L
N
J
522.14 620.44 522 552 306 552 3 L
N
72 597 72 552 216 552 3 L
N
J
216 552 306 552 2 L
J
216 552 219.75 552 2 L
N
[8.088 7.01] 8.088 I
219.75 552 302.25 552 2 L
N
J
302.25 552 306 552 2 L
N
1 12 Q
(Figure 3.) 123.23 535 T
(ORA designed as an iterative comparator with error locking) 175.22 535 T
J
J
81 669 428.43 669 428.43 579 81 579 4 Y
J
81 667 81 669 83 669 3 L
0 Z
N
[4.04 4.04] 4.04 I
83 669 426.42 669 2 L
N
J
426.42 669 428.43 669 428.43 667 3 L
N
[4.095 4.095] 4.095 I
428.43 667 428.43 581 2 L
N
J
428.43 581 428.43 579 426.43 579 3 L
N
[4.04 4.04] 4.04 I
426.43 579 83 579 2 L
N
J
83 579 81 579 81 581 3 L
N
[4.095 4.095] 4.095 I
81 581 81 667 2 L
N
J
528.47 620.44 529.8 620.44 2 L
N
529.8 620.44 528.72 623.41 539.09 620.44 528.72 617.46 4 Y
N
529.8 620.44 528.72 623.41 539.09 620.44 528.72 617.46 4 Y
V
522.14 620.44 528.47 620.44 2 L
2 Z
N
0 14 Q
(B) 127.22 674.71 T
(UT) 136.42 674.71 T
3 9.6 Q
(j) 155.08 671.71 T
0 14 Q
(B) 59.04 636.69 T
(UT) 68.24 636.69 T
3 9.6 Q
(i) 86.37 633.69 T
0 0 612 792 C
251.32 168.42 344.36 211.07 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(N) 257.06 189.67 T
3 10 Q
(T) 266.24 185.32 T
(S) 272.39 185.32 T
3 12 Q
(N) 304.23 197.86 T
3 10 Q
(P) 313.41 193.52 T
(L) 320.11 193.52 T
(B) 326.26 193.52 T
3 12 Q
(N) 303.25 179.32 T
3 10 Q
(B) 312.51 174.97 T
(U) 319.21 174.97 T
(T) 327.02 174.97 T
0 12 Q
(-) 303.01 187.35 T
(-) 305.01 187.35 T
(-) 307.01 187.35 T
(-) 309 187.35 T
(-) 311 187.35 T
(-) 313 187.35 T
(-) 315 187.35 T
(-) 316.99 187.35 T
(-) 318.99 187.35 T
(-) 320.99 187.35 T
(-) 322.99 187.35 T
(-) 324.99 187.35 T
(-) 326.98 187.35 T
(-) 328.98 187.35 T
(-) 329.35 187.35 T
(=) 283.47 189.67 T
297.43 173.67 297.43 206.86 301.03 206.86 3 L
0.54 H
2 Z
N
339.05 173.67 339.05 206.86 335.45 206.86 3 L
N
0 0 612 792 C
207.67 97.92 384.33 116.67 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(N) 217.6 105.67 T
3 10 Q
(B) 226.86 101.32 T
(U) 233.56 101.32 T
(T) 241.37 101.32 T
3 12 Q
(N) 260.71 105.67 T
3 10 Q
(T) 269.89 101.32 T
(P) 276.04 101.32 T
(G) 282.74 101.32 T
3 12 Q
(N) 302.96 105.67 T
3 10 Q
(O) 312.14 101.32 T
(R) 319.95 101.32 T
(A) 326.65 101.32 T
0 12 Q
(+) 250.7 105.67 T
(+) 292.95 105.67 T
3 F
(N) 345.58 105.67 T
3 10 Q
(P) 354.76 101.32 T
(L) 361.46 101.32 T
(B) 367.61 101.32 T
4 12 Q
(\243) 335.76 105.67 T
0 0 612 792 C
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "7" 7
%%Page: "8" 8
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(8) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 X
-0.13 (TPGs, ORAs, and BUTs in order to determine the number of test sessions. During most of the test phases) 54 712 P
-0.74 (used to test various operational modes of the BUTs, the TPGs work as binary counters to supply exhaustive) 54 691 P
-0.63 (test patterns to the) 54 670 P
3 F
-0.63 (m) 142.15 670 P
0 F
-0.63 (-input BUTs \050not counting the clock input\051. Since a PLB has more inputs than outputs,) 150.81 670 P
-0.25 (several PLBs are needed to construct a single) 54 649 P
3 F
-0.25 (m) 272.59 649 P
0 F
-0.25 (-bit counter. Since one or more TPGs can drive the BUTs,) 281.25 649 P
(let the number of TPGs used be) 54 628 T
3 F
(T) 208.98 628 T
0 F
(. This results in a total number of PLBs used for TPGs,) 215.65 628 T
3 F
(N) 482.98 628 T
3 8 Q
(TPG) 490.98 625.5 T
0 12 Q
(, given by:) 506.09 628 T
(\0502\051) 544.01 607 T
0.3 (where) 54 578 P
3 F
0.3 (f) 86.62 578 P
0 F
0.3 ( is the number of FFs per PLB. In general, several ORA circuits may be implemented in a single) 89.95 578 P
-0.08 (PLB, depending on the number of LUTs in a PLB,) 54 557 P
3 F
-0.08 (L) 299.23 557 P
0 F
-0.08 (. Let the number of corresponding outputs compared) 305.9 557 P
0.05 (by a LUT in the PLB of an ORA be denoted by) 54 536 P
3 F
0.05 (C) 285.27 536 P
0 F
0.05 (. Then we can group the) 293.28 536 P
3 F
0.05 (N) 412.56 536 P
3 8 Q
0.04 (BUT) 420.57 533.5 P
0 12 Q
0.05 ( BUTs into) 435.68 536 P
3 F
0.05 (C) 492.18 536 P
0 F
0.05 ( groups of) 500.18 536 P
3 F
0.05 (n) 552 536 P
0 F
-0.59 (BUTs. Now, the) 54 515 P
3 F
-0.59 (O) 133.88 515 P
0 F
-0.59 ( outputs from) 142.54 515 P
3 F
-0.59 (C) 208.43 515 P
0 F
-0.59 ( groups of) 216.43 515 P
3 F
-0.59 (n) 266.31 515 P
0 F
-0.59 ( BUTs must be compared by the ORAs, for a total of) 272.31 515 P
3 F
-0.59 (C) 522.16 515 P
4 F
-0.59 (\264) 530.16 515 P
3 F
-0.59 (n) 536.75 515 P
4 F
-0.59 (\264) 542.75 515 P
3 F
-0.59 (O) 549.34 515 P
0 F
-0.55 (outputs, where each ORA LUT monitors) 54 494 P
3 F
-0.55 (C) 249.7 494 P
0 F
-0.55 ( identical outputs, one output from each group of) 257.7 494 P
3 F
-0.55 (n) 490.76 494 P
0 F
-0.55 ( BUTs. Then) 496.76 494 P
(the number of PLBs configured as ORAs,) 54 473 T
3 F
(N) 257.98 473 T
3 8 Q
(ORA) 265.98 470.5 T
0 12 Q
(, is given by:) 281.53 473 T
(\0503\051) 544.01 440 T
(The total number of BUTs,) 54 414 T
3 F
(N) 187.32 414 T
3 8 Q
(BUT) 195.32 411.5 T
0 12 Q
(, is given by:) 210.44 414 T
(\0504\051) 544.01 388 T
0.36 (The values of) 75.6 364 P
3 F
0.36 (C) 144.99 364 P
0 F
0.36 (,) 152.99 364 P
3 F
0.36 ( O) 155.99 364 P
0 F
0.36 (,) 168.02 364 P
3 F
0.36 (L) 174.37 364 P
0 F
0.36 (, and) 181.05 364 P
3 F
0.36 (f) 208.09 364 P
0 F
0.36 ( are functions of the PLB architecture for the given FPGA being tested.) 211.43 364 P
-0.67 (Substituting Equations 2 through 4 into Equations 1a and 1b, we obtain the following lower bound for) 54 343 P
3 F
-0.67 (N) 535.88 343 P
3 8 Q
-0.45 (TS) 543.89 340.5 P
0 12 Q
-0.67 (:) 552.34 343 P
(\0505\051) 544.01 292 T
0.23 (The number of BUTs in each of the) 75.6 248 P
3 F
0.23 (C) 251.39 248 P
0 F
0.23 ( groups, given by) 259.4 248 P
3 F
0.23 (n) 346.64 248 P
0 F
0.23 (, is one of the primary values of interest to) 352.64 248 P
0.78 (be determined for a given FPGA. For example, the value of) 54 227 P
3 F
0.78 (n) 351.56 227 P
0 F
0.78 ( used to derive Equation 5 represents the) 357.56 227 P
0.65 (maximum value for the number of BUTs in each of the) 54 206 P
3 F
0.65 (C) 328.75 206 P
0 F
0.65 (groups for that particular value of) 340.4 206 P
3 F
0.65 (N) 508.92 206 P
3 8 Q
0.43 (TS) 516.92 203.5 P
0 12 Q
0.65 ( and is) 525.37 206 P
(given by:) 54 183.83 T
(\0506\051) 544.01 150.83 T
1.69 (This maximum value may be difficult to implement in practice due to limitations of the routing) 75.6 110.83 P
0.62 (resources in the FPGA. Therefore, substituting the value of) 54 89.83 P
3 F
0.62 (N) 346.55 89.83 P
3 8 Q
0.41 (BUT) 354.55 87.33 P
0 12 Q
0.62 ( from Equation 4 into Equation 1a, we) 369.67 89.83 P
252.99 587.43 348.02 622.03 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(N) 256.71 603.7 T
3 10 Q
(T) 265.89 599.35 T
(P) 272.04 599.35 T
(G) 278.74 599.35 T
3 12 Q
(T) 304.72 603.7 T
(m) 328.09 608.05 T
(f) 330.76 593.35 T
0 F
(-) 328.09 601.39 T
(-) 330.09 601.39 T
(-) 332.09 601.39 T
(-) 332.76 601.39 T
4 F
(\327) 315.32 603.7 T
0 F
(=) 291.96 603.7 T
322.52 591.55 322.52 617.05 326.11 617.05 3 L
0.54 H
2 Z
N
342.45 591.55 342.45 617.05 338.86 617.05 3 L
N
0 0 612 792 C
54 72 558 720 C
257.22 428.7 340.78 459.2 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(N) 262.27 440 T
3 10 Q
(O) 271.45 435.65 T
(R) 279.26 435.65 T
(A) 285.96 435.65 T
3 12 Q
(O) 311.07 446.66 T
(n) 328.73 446.66 T
4 F
(\327) 322.74 446.66 T
3 F
(L) 319.6 431.96 T
0 F
(-) 311.07 440 T
(-) 313.07 440 T
(-) 315.07 440 T
(-) 317.07 440 T
(-) 319.07 440 T
(-) 321.06 440 T
(-) 323.06 440 T
(-) 325.06 440 T
(-) 327.06 440 T
(-) 329.05 440 T
(-) 330.74 440 T
(=) 298.07 440 T
54 72 558 720 C
0 0 612 792 C
258.72 380.25 339.29 399 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(N) 262.56 388 T
3 10 Q
(B) 271.82 383.65 T
(U) 278.52 383.65 T
(T) 286.33 383.65 T
3 12 Q
(C) 311.42 388 T
(n) 328.69 388 T
4 F
(\327) 322.69 388 T
0 F
(=) 298.66 388 T
0 0 612 792 C
195.76 259.42 405.25 333.66 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(N) 219.02 295.35 T
3 10 Q
(T) 228.2 291 T
(S) 234.35 291 T
3 12 Q
(N) 278.94 309.81 T
3 10 Q
(P) 288.12 305.46 T
(L) 294.82 305.46 T
(B) 300.97 305.46 T
3 12 Q
(C) 313.25 309.81 T
(O) 334.52 316.47 T
(L) 335.55 301.77 T
0 F
(-) 334.52 309.81 T
(-) 336.52 309.81 T
(-) 338.52 309.81 T
(-) 339.19 309.81 T
(+) 324.52 309.81 T
4 F
(\350) 307.79 303.77 T
(\370) 343.08 303.77 T
(\346) 307.79 314.05 T
(\366) 343.08 314.05 T
3 F
(C) 258.79 278.57 T
(N) 273.47 278.57 T
3 10 Q
(P) 282.65 274.22 T
(L) 289.35 274.22 T
(B) 295.5 274.22 T
3 12 Q
(T) 319.06 278.57 T
(m) 342.43 282.92 T
(f) 345.1 268.22 T
0 F
(-) 342.43 276.26 T
(-) 344.43 276.26 T
(-) 346.43 276.26 T
(-) 347.1 276.26 T
4 F
(\327) 329.66 278.57 T
(\350) 313.61 272.53 T
(\370) 357.53 272.53 T
(\346) 313.61 282.81 T
(\366) 357.53 282.81 T
0 F
(\320) 304.61 278.57 T
(-) 258.79 293.03 T
(-) 260.79 293.03 T
(-) 262.79 293.03 T
(-) 264.79 293.03 T
(-) 266.79 293.03 T
(-) 268.78 293.03 T
(-) 270.78 293.03 T
(-) 272.78 293.03 T
(-) 274.78 293.03 T
(-) 276.78 293.03 T
(-) 278.77 293.03 T
(-) 280.77 293.03 T
(-) 282.77 293.03 T
(-) 284.77 293.03 T
(-) 286.77 293.03 T
(-) 288.76 293.03 T
(-) 290.76 293.03 T
(-) 292.76 293.03 T
(-) 294.76 293.03 T
(-) 296.76 293.03 T
(-) 298.75 293.03 T
(-) 300.75 293.03 T
(-) 302.75 293.03 T
(-) 304.75 293.03 T
(-) 306.75 293.03 T
(-) 308.74 293.03 T
(-) 310.74 293.03 T
(-) 312.74 293.03 T
(-) 314.74 293.03 T
(-) 316.74 293.03 T
(-) 318.73 293.03 T
(-) 320.73 293.03 T
(-) 322.73 293.03 T
(-) 324.73 293.03 T
(-) 326.73 293.03 T
(-) 328.72 293.03 T
(-) 330.72 293.03 T
(-) 332.72 293.03 T
(-) 334.72 293.03 T
(-) 336.71 293.03 T
(-) 338.71 293.03 T
(-) 340.71 293.03 T
(-) 342.71 293.03 T
(-) 344.71 293.03 T
(-) 346.7 293.03 T
(-) 348.7 293.03 T
(-) 350.7 293.03 T
(-) 352.7 293.03 T
(-) 354.7 293.03 T
(-) 356.7 293.03 T
(-) 358.69 293.03 T
(-) 360.69 293.03 T
(-) 362.69 293.03 T
(-) 364.69 293.03 T
(-) 364.8 293.03 T
4 F
(\263) 242.43 295.35 T
336.86 266.42 336.86 291.92 340.45 291.92 3 L
0.54 H
2 Z
N
356.79 266.42 356.79 291.92 353.2 291.92 3 L
N
272.57 269.74 268.97 269.74 268.97 292.2 3 L
N
268.97 292.2 272.57 292.2 2 L
N
364 269.74 367.59 269.74 367.59 292.2 3 L
N
367.59 292.2 364 292.2 2 L
N
253.22 264.34 253.22 327.55 256.82 327.55 3 L
N
374.49 264.34 374.49 327.55 370.89 327.55 3 L
N
0 0 612 792 C
225.03 121.72 381.98 189.03 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(n) 230.41 153.62 T
(m) 236.86 147.77 T
(a) 246.24 147.77 T
(x) 252.94 147.77 T
(N) 277.91 170.4 T
3 10 Q
(P) 287.09 166.05 T
(L) 293.79 166.05 T
(B) 299.94 166.05 T
3 12 Q
(T) 323.5 170.4 T
(m) 346.87 174.75 T
(f) 349.54 160.05 T
0 F
(-) 346.87 168.09 T
(-) 348.87 168.09 T
(-) 350.87 168.09 T
(-) 351.54 168.09 T
4 F
(\327) 334.1 170.4 T
(\350) 318.04 164.35 T
(\370) 361.97 164.35 T
(\346) 318.04 174.64 T
(\366) 361.97 174.64 T
0 F
(\320) 309.05 170.4 T
3 F
(C) 307.63 136.61 T
(O) 328.9 143.27 T
(L) 329.93 128.57 T
0 F
(-) 328.9 136.61 T
(-) 330.9 136.61 T
(-) 332.9 136.61 T
(-) 333.57 136.61 T
(+) 318.9 136.61 T
(-) 277.67 151.31 T
(-) 279.67 151.31 T
(-) 281.67 151.31 T
(-) 283.66 151.31 T
(-) 285.66 151.31 T
(-) 287.66 151.31 T
(-) 289.66 151.31 T
(-) 291.65 151.31 T
(-) 293.65 151.31 T
(-) 295.65 151.31 T
(-) 297.65 151.31 T
(-) 299.65 151.31 T
(-) 301.64 151.31 T
(-) 303.64 151.31 T
(-) 305.64 151.31 T
(-) 307.64 151.31 T
(-) 309.64 151.31 T
(-) 311.63 151.31 T
(-) 313.63 151.31 T
(-) 315.63 151.31 T
(-) 317.63 151.31 T
(-) 319.63 151.31 T
(-) 321.62 151.31 T
(-) 323.62 151.31 T
(-) 325.62 151.31 T
(-) 327.62 151.31 T
(-) 329.62 151.31 T
(-) 331.61 151.31 T
(-) 333.61 151.31 T
(-) 335.61 151.31 T
(-) 337.61 151.31 T
(-) 339.61 151.31 T
(-) 341.6 151.31 T
(-) 343.6 151.31 T
(-) 345.6 151.31 T
(-) 347.6 151.31 T
(-) 349.6 151.31 T
(-) 351.59 151.31 T
(-) 353.59 151.31 T
(-) 355.59 151.31 T
(-) 357.59 151.31 T
(-) 359.59 151.31 T
(-) 361.58 151.31 T
(-) 363.58 151.31 T
(-) 363.78 151.31 T
4 F
(\243) 261.31 153.62 T
341.3 158.25 341.3 183.75 344.89 183.75 3 L
0.54 H
2 Z
N
361.23 158.25 361.23 183.75 357.64 183.75 3 L
N
272.09 126.77 272.09 185.83 2 L
N
272.09 126.77 275.69 126.77 2 L
N
373.47 126.77 373.47 185.83 2 L
N
373.47 126.77 369.87 126.77 2 L
N
0 0 612 792 C
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "8" 8
%%Page: "9" 9
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(9) 303 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
0 X
(obtain the lower limit on) 54 712 T
3 F
(n) 175.67 712 T
0 F
( for a given value of) 181.67 712 T
3 F
(N) 281.64 712 T
3 8 Q
(TS) 289.64 709.5 T
0 12 Q
(:) 298.09 712 T
(\0507\051) 544.01 679 T
0.1 (However, this minimum value of) 54 649 P
3 F
0.1 (n) 216.5 649 P
0 F
0.1 ( \050given by Equation 7\051 does not consider the proper balance of BUTs,) 222.5 649 P
0.1 (TPGs, and ORAs that must be maintained as a function of the PLB architecture. As a result, we consider) 54 628 P
(the following relation, which is obtained by eliminating) 54 607 T
3 F
(N) 324.32 607 T
3 9.6 Q
(PLB) 332.33 604 T
0 12 Q
( from Equations 1a and 1b:) 349.4 607 T
(\0508\051) 544.01 580 T
0.08 (Substituting the expressions from Equations 2 through 4 into Equation 8 and solving for) 54 560 P
3 F
0.08 (n) 481.11 560 P
0 F
0.08 (, we obtain the) 487.11 560 P
-0.07 (minimum value of) 54 539 P
3 F
-0.07 (n) 145.46 539 P
0 F
-0.07 ( which will provide the proper balance of BUT, TPG, and ORA functions for a BIST) 151.46 539 P
(session based on the PLB architecture \050which we refer to as) 54 518 T
3 F
(n) 343.6 518 T
3 8 Q
(arch) 349.6 515.5 T
0 12 Q
(\051:) 364.26 518 T
(\0509\051) 544.01 482 T
-0.01 (The minimum value of) 75.6 438 P
3 F
-0.01 (n) 188.88 438 P
0 F
-0.01 ( is of particular importance since it requires less logic and routing resources) 194.88 438 P
-0.7 (in the FPGA, when compared to larger values of) 54 417 P
3 F
-0.7 (n) 283.62 417 P
0 F
-0.7 (, providing the best opportunity for successful placement) 289.62 417 P
1.15 (and routing during actual implementation. Therefore, the final minimum value of) 54 396 P
3 F
1.15 (n) 459.58 396 P
0 F
1.15 ( which ensures the) 465.58 396 P
-0.31 (proper balance of BUTs, ORAs, and TPGs, while also ensuring that the FPGA can be tested in the desired) 54 375 P
0.07 (number of test sessions is a function of both) 54 354 P
3 F
0.07 (n) 268.93 354 P
3 8 Q
0.05 (arch) 274.93 351.5 P
0 12 Q
0.07 ( and) 289.6 354 P
3 F
0.07 (n) 313.06 354 P
3 8 Q
0.05 (min) 319.06 351.5 P
0 12 Q
0.07 (. As a result,) 331.06 354 P
3 F
0.07 (n) 394.66 354 P
3 8 Q
0.05 (min\050final\051) 400.66 351.5 P
0 12 Q
0.07 ( is given by the maximum) 432.65 354 P
(of the two minimum values for) 54 333 T
3 F
(n) 205.99 333 T
0 F
( in Equations 7 and 9.) 211.99 333 T
(\05010\051) 538.01 292 T
0.7 (To illustrate the use of these equations, we consider the following examples using the ORCA PLB) 75.6 248 P
0.89 (architecture. In the ORCA PLB, there can be) 54 227 P
3 F
0.89 (L) 279.72 227 P
0 F
0.89 (=2 independent LUTs for ORA construction, with each) 286.39 227 P
1.06 (LUT having) 54 206 P
3 F
1.06 (C) 118.11 206 P
0 F
1.06 (+1=5 inputs so that) 126.11 206 P
3 F
1.06 (C) 225.89 206 P
0 F
1.06 (=4 \050the \322+1\323 term accounts for the additional input used for error) 233.89 206 P
0.06 (latching\051. Since each PLB has) 54 185 P
3 F
0.06 (m) 201.59 185 P
0 F
0.06 (=18 inputs, the maximum number of FFs required for a TPG to generate) 210.26 185 P
-0.54 (exhaustive test patterns is also 18, but there are only) 54 164 P
3 F
-0.54 (f) 302.28 164 P
0 F
-0.54 (=4 FFs per PLB; hence 5 PLBs are required per TPG.) 305.62 164 P
0.06 (Finally, there are) 54 143 P
3 F
0.06 (O) 138.82 143 P
0 F
0.06 (=5 outputs from each PLB which must be compared by the ORAs. From Equation 10) 147.48 143 P
-0.15 (we find that) 54 122 P
3 F
-0.15 (n) 113.87 122 P
4 F
-0.15 (\263) 119.87 122 P
0 F
-0.15 (14 \050given by) 126.45 122 P
3 F
-0.15 (n) 189.66 122 P
3 8 Q
-0.1 (arch) 195.66 119.5 P
0 12 Q
-0.15 (\051 in order to achieve the minimum number of test sessions \050) 210.32 122 P
3 F
-0.15 (N) 494.28 122 P
3 8 Q
-0.1 (TS) 502.28 119.5 P
0 12 Q
-0.15 (=2\051. Then) 510.73 122 P
3.06 (for) 54 101 P
3 F
3.06 (n) 74.05 101 P
0 F
3.06 (=14, we obtain the minimum values) 80.05 101 P
3 F
3.06 (N) 274.15 101 P
3 8 Q
2.04 (TPG) 282.15 98.5 P
0 12 Q
3.06 (=20 \050assuming) 297.26 101 P
3 F
3.06 (T) 377.47 101 P
0 F
3.06 (=) 384.14 101 P
3 F
3.06 (C) 390.91 101 P
0 F
3.06 (\051,) 398.92 101 P
3 F
3.06 (N) 411.97 101 P
3 8 Q
2.04 (ORA) 419.97 98.5 P
0 12 Q
3.06 (=35, and) 435.52 101 P
3 F
3.06 (N) 486.73 101 P
3 8 Q
2.04 (BUT) 494.74 98.5 P
0 12 Q
3.06 (=56 from) 509.85 101 P
0.3 (Equations 2 through 4, respectively. This requires a minimum of 111 PLBs to be able to completely test) 54 80 P
54 72 558 720 C
238.36 661.41 359.65 706.2 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(n) 241.89 683.68 T
(n) 260.48 683.68 T
(m) 266.93 677.84 T
(i) 276.3 677.84 T
(n) 280.35 677.84 T
4 F
(\263) 250.89 683.68 T
3 F
(N) 316.89 691.88 T
3 10 Q
(P) 326.07 687.53 T
(L) 332.77 687.53 T
(B) 338.92 687.53 T
3 12 Q
(N) 312.12 673.34 T
3 10 Q
(T) 321.3 668.99 T
(S) 327.45 668.99 T
3 12 Q
(C) 341.53 673.34 T
4 F
(\327) 335.53 673.34 T
0 F
(-) 311.88 681.37 T
(-) 313.88 681.37 T
(-) 315.88 681.37 T
(-) 317.88 681.37 T
(-) 319.88 681.37 T
(-) 321.87 681.37 T
(-) 323.87 681.37 T
(-) 325.87 681.37 T
(-) 327.87 681.37 T
(-) 329.87 681.37 T
(-) 331.86 681.37 T
(-) 333.86 681.37 T
(-) 335.86 681.37 T
(-) 337.86 681.37 T
(-) 339.86 681.37 T
(-) 341.85 681.37 T
(-) 343.85 681.37 T
(-) 345.8 681.37 T
(=) 292.34 683.68 T
306.31 667.68 306.31 700.88 309.9 700.88 3 L
0.54 H
2 Z
N
355.49 667.68 355.49 700.88 351.9 700.88 3 L
N
54 72 558 720 C
0 0 612 792 C
194.28 574.92 403.73 593.67 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(N) 205.1 582.67 T
3 10 Q
(B) 214.36 578.32 T
(U) 221.06 578.32 T
(T) 228.87 578.32 T
3 12 Q
(N) 248.21 582.67 T
3 10 Q
(T) 257.39 578.32 T
(P) 263.54 578.32 T
(G) 270.24 578.32 T
3 12 Q
(N) 290.46 582.67 T
3 10 Q
(O) 299.64 578.32 T
(R) 307.45 578.32 T
(A) 314.15 578.32 T
0 12 Q
(+) 238.2 582.67 T
(+) 280.45 582.67 T
3 F
(N) 333.08 582.67 T
3 10 Q
(B) 342.35 578.32 T
(U) 349.05 578.32 T
(T) 356.86 578.32 T
3 12 Q
(N) 372.42 582.67 T
3 10 Q
(T) 381.6 578.32 T
(S) 387.75 578.32 T
4 12 Q
(\327) 366.18 582.67 T
(\243) 323.26 582.67 T
0 0 612 792 C
54 72 558 720 C
211.32 449.86 386.69 511.67 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(n) 218.18 479.43 T
(n) 236.76 479.43 T
(a) 243.22 473.58 T
(r) 249.92 473.58 T
(c) 255.3 473.58 T
(h) 261.33 473.58 T
(T) 311.55 494.13 T
(m) 334.92 498.48 T
(f) 337.59 483.78 T
0 F
(-) 334.92 491.82 T
(-) 336.92 491.82 T
(-) 338.92 491.82 T
(-) 339.59 491.82 T
4 F
(\327) 322.15 494.13 T
3 F
(C) 287.58 462.42 T
(N) 309.94 462.42 T
3 10 Q
(T) 319.12 458.07 T
(S) 325.27 458.07 T
0 12 Q
(1) 342.34 462.42 T
(\320) 333.34 462.42 T
4 F
(\050) 304.85 462.42 T
(\051) 349.19 462.42 T
(\327) 298.85 462.42 T
3 F
(O) 365.43 469.08 T
(L) 366.45 454.38 T
0 F
(-) 365.43 462.42 T
(-) 367.42 462.42 T
(-) 369.42 462.42 T
(-) 370.09 462.42 T
(\320) 356.19 462.42 T
(-) 287.58 477.12 T
(-) 289.58 477.12 T
(-) 291.58 477.12 T
(-) 293.58 477.12 T
(-) 295.58 477.12 T
(-) 297.57 477.12 T
(-) 299.57 477.12 T
(-) 301.57 477.12 T
(-) 303.57 477.12 T
(-) 305.57 477.12 T
(-) 307.56 477.12 T
(-) 309.56 477.12 T
(-) 311.56 477.12 T
(-) 313.56 477.12 T
(-) 315.56 477.12 T
(-) 317.55 477.12 T
(-) 319.55 477.12 T
(-) 321.55 477.12 T
(-) 323.55 477.12 T
(-) 325.55 477.12 T
(-) 327.54 477.12 T
(-) 329.54 477.12 T
(-) 331.54 477.12 T
(-) 333.54 477.12 T
(-) 335.54 477.12 T
(-) 337.53 477.12 T
(-) 339.53 477.12 T
(-) 341.53 477.12 T
(-) 343.53 477.12 T
(-) 345.52 477.12 T
(-) 347.52 477.12 T
(-) 349.52 477.12 T
(-) 351.52 477.12 T
(-) 353.52 477.12 T
(-) 355.52 477.12 T
(-) 357.51 477.12 T
(-) 359.51 477.12 T
(-) 361.51 477.12 T
(-) 363.51 477.12 T
(-) 365.51 477.12 T
(-) 367.5 477.12 T
(-) 369.5 477.12 T
(-) 370.33 477.12 T
(=) 268.04 479.43 T
4 F
(\263) 227.17 479.43 T
329.34 481.98 329.34 507.48 332.94 507.48 3 L
0.54 H
2 Z
N
349.28 481.98 349.28 507.48 345.68 507.48 3 L
N
282.01 452.58 282.01 507.48 285.61 507.48 3 L
N
380.03 452.58 380.03 507.48 376.43 507.48 3 L
N
54 72 558 720 C
0 0 612 792 C
158.2 260.69 433.81 324.82 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
3 12 Q
0 X
0 0 0 1 0 0 0 K
(n) 168.44 292.78 T
3 10 Q
(m) 174.9 288.43 T
(i) 182.7 288.43 T
(n) 186.07 288.43 T
(f) 197.17 288.43 T
(i) 200.54 288.43 T
(n) 203.91 288.43 T
(a) 209.5 288.43 T
(l) 215.09 288.43 T
4 F
(\050) 191.66 288.43 T
(\051) 218.59 288.43 T
3 12 Q
(m) 240.68 292.78 T
(a) 250.05 292.78 T
(x) 256.76 292.78 T
(N) 280.38 300.98 T
3 10 Q
(P) 289.56 296.63 T
(L) 296.26 296.63 T
(B) 302.41 296.63 T
3 12 Q
(N) 275.61 282.43 T
3 10 Q
(T) 284.79 278.08 T
(S) 290.94 278.08 T
3 12 Q
(C) 305.02 282.43 T
4 F
(\327) 299.02 282.43 T
0 F
(-) 275.37 290.47 T
(-) 277.37 290.47 T
(-) 279.37 290.47 T
(-) 281.36 290.47 T
(-) 283.36 290.47 T
(-) 285.36 290.47 T
(-) 287.36 290.47 T
(-) 289.36 290.47 T
(-) 291.35 290.47 T
(-) 293.35 290.47 T
(-) 295.35 290.47 T
(-) 297.35 290.47 T
(-) 299.35 290.47 T
(-) 301.34 290.47 T
(-) 303.34 290.47 T
(-) 305.34 290.47 T
(-) 307.34 290.47 T
(-) 309.29 290.47 T
3 F
(T) 353.81 307.48 T
(m) 377.17 311.83 T
(f) 379.85 297.13 T
0 F
(-) 377.17 305.17 T
(-) 379.17 305.17 T
(-) 381.17 305.17 T
(-) 381.84 305.17 T
4 F
(\327) 364.4 307.48 T
3 F
(C) 329.84 275.77 T
(N) 352.19 275.77 T
3 10 Q
(T) 361.37 271.42 T
(S) 367.52 271.42 T
0 12 Q
(1) 384.6 275.77 T
(\320) 375.6 275.77 T
4 F
(\050) 347.1 275.77 T
(\051) 391.45 275.77 T
(\327) 341.1 275.77 T
3 F
(O) 407.68 282.43 T
(L) 408.71 267.73 T
0 F
(-) 407.68 275.77 T
(-) 409.68 275.77 T
(-) 411.68 275.77 T
(-) 412.35 275.77 T
(\320) 398.44 275.77 T
(-) 329.84 290.47 T
(-) 331.84 290.47 T
(-) 333.83 290.47 T
(-) 335.83 290.47 T
(-) 337.83 290.47 T
(-) 339.83 290.47 T
(-) 341.83 290.47 T
(-) 343.82 290.47 T
(-) 345.82 290.47 T
(-) 347.82 290.47 T
(-) 349.82 290.47 T
(-) 351.82 290.47 T
(-) 353.81 290.47 T
(-) 355.81 290.47 T
(-) 357.81 290.47 T
(-) 359.81 290.47 T
(-) 361.8 290.47 T
(-) 363.8 290.47 T
(-) 365.8 290.47 T
(-) 367.8 290.47 T
(-) 369.8 290.47 T
(-) 371.8 290.47 T
(-) 373.79 290.47 T
(-) 375.79 290.47 T
(-) 377.79 290.47 T
(-) 379.79 290.47 T
(-) 381.79 290.47 T
(-) 383.78 290.47 T
(-) 385.78 290.47 T
(-) 387.78 290.47 T
(-) 389.78 290.47 T
(-) 391.77 290.47 T
(-) 393.77 290.47 T
(-) 395.77 290.47 T
(-) 397.77 290.47 T
(-) 399.77 290.47 T
(-) 401.77 290.47 T
(-) 403.76 290.47 T
(-) 405.76 290.47 T
(-) 407.76 290.47 T
(-) 409.76 290.47 T
(-) 411.76 290.47 T
(-) 412.59 290.47 T
({) 262.83 292.78 T
(,) 318.3 292.78 T
(}) 421.6 292.78 T
(=) 227.92 292.78 T
269.79 276.78 269.79 309.98 273.39 309.98 3 L
0.54 H
2 Z
N
318.98 276.78 318.98 309.98 315.38 309.98 3 L
N
371.6 295.33 371.6 320.83 375.2 320.83 3 L
N
391.54 295.33 391.54 320.83 387.94 320.83 3 L
N
324.26 265.93 324.26 320.83 327.86 320.83 3 L
N
422.28 265.93 422.28 320.83 418.68 320.83 3 L
N
0 0 612 792 C
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "9" 9
%%Page: "10" 10
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(10) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
0.04 (all PLBs in two test sessions. Only the smallest of the ORCA series \050the 1C03 and 2C04 with 100 PLBs\051) 54 712 P
(fails to meet this criteria and will require three test sessions to completely test all of its PLBs.) 54 691 T
-0.18 ( An alternate implementation of an ORA using the ORCA PLB is constructed for) 75.6 665 P
3 F
-0.18 (C) 466.34 665 P
0 F
-0.18 (=2 such that) 474.34 665 P
3 F
-0.18 (L) 535.56 665 P
0 F
-0.18 (=4.) 542.23 665 P
0.23 (From Equation 10 we find that) 54 644 P
3 F
0.23 (n) 206.04 644 P
4 F
0.23 (\263) 212.04 644 P
0 F
0.23 (25 \050this time given by) 218.63 644 P
3 F
0.23 (n) 328.11 644 P
3 8 Q
0.15 (min) 334.11 641.5 P
0 12 Q
0.23 (\051. Then for) 346.11 644 P
3 F
0.23 (n) 401.45 644 P
0 F
0.23 (=25, we obtain) 407.45 644 P
3 F
0.23 (N) 482.9 644 P
3 8 Q
0.15 (TPG) 490.9 641.5 P
0 12 Q
0.23 (=10 \050again) 506.01 644 P
2.83 (assuming) 54 623 P
3 F
2.83 (T) 105.16 623 P
0 F
2.83 (=) 111.83 623 P
3 F
2.83 (C) 118.6 623 P
0 F
2.83 (\051,) 126.61 623 P
3 F
2.83 (N) 139.43 623 P
3 8 Q
1.88 (ORA) 147.43 620.5 P
0 12 Q
2.83 (=32, and) 162.98 623 P
3 F
2.83 (N) 213.73 623 P
3 8 Q
1.88 (BUT) 221.73 620.5 P
0 12 Q
2.83 (=50 from Equations 2 through 4, respectively. This requires a) 236.85 623 P
-0.05 (minimum of 92 PLBs in the ORCA such that the smallest ORCA series FPGAs can now be also tested in) 54 602 P
0 (two test sessions. This analysis is summarized in Table) 54 581 P
0 (2) 321.35 581 P
0 9.6 Q
0 ([17]) 327.35 585.8 P
0 12 Q
0 ( and compared to the Xilinx 4000 and Altera) 343.34 581 P
0.21 (Flex 8000 series FPGAs in terms of the resource parameters for each FPGA and the minimum resources) 54 560 P
0.69 (required for) 54 539 P
3 F
0.69 (N) 115.36 539 P
3 8 Q
0.46 (TS) 123.36 536.5 P
0 12 Q
0.69 (=2 using Equation 10 where we assume that) 131.81 539 P
3 F
0.69 (T) 352.07 539 P
0 F
0.69 (=) 358.74 539 P
3 F
0.69 (C) 365.51 539 P
0 F
0.69 (. In the case of the Xilinx series 4000) 373.51 539 P
-0.65 (FPGAs, the smallest four FPGAs \0504002: 64 PLBs, 4003: 100 PLBs, 4004: 144 PLBs, and 4005: 196 PLBs\051) 54 191 P
-0 (will require three test sessions. However, the Xilinx 4005 can be tested in two test sessions if we let) 54 170 P
3 F
-0 (T) 535.56 170 P
0 F
-0 (=1.) 542.23 170 P
-0.16 (In the case of the Altera Flex 8000 series FPGA, the smallest FPGA \0508282: 208 PLBs\051 also requires three) 54 149 P
0.06 (test sessions. For those cases where the total number of PLBs used for TPG, ORA, and BUT functions is) 54 128 P
-0.42 (less than the total number of PLBs in the FPGA, the unused PLBs could be used to buffer the TPG outputs) 54 107 P
-0.2 (which have high fan-out. On the other hand, when all PLBs in the FPGA are required for BIST resources,) 54 86 P
1 F
(T) 182.15 515 T
(able 2: BIST r) 189.05 515 T
(esour) 261.84 515 T
(ce r) 289.62 515 T
(equir) 308.39 515 T
(ements f) 335.51 515 T
(or FPGAs) 378.19 515 T
(P) 99.74 482 T
(arameter) 106.95 482 T
(Resour) 189.85 482 T
(ce) 226.29 482 T
(ORCA) 278.54 489 T
(\050) 281.78 475 T
2 F
(C) 285.78 475 T
1 F
(=4\051) 293.78 475 T
(ORCA) 328.94 489 T
(\050) 332.18 475 T
2 F
(C) 336.18 475 T
1 F
(=2\051) 344.18 475 T
(Xilinx 4000) 378.63 482 T
(Altera 8000) 449.97 482 T
3 F
(C) 123 455 T
0 F
(comparisons/LUT) 156.8 455 T
(4) 293.2 455 T
(2) 343.6 455 T
(3) 404.8 455 T
(4) 476.8 455 T
3 F
(O) 122.67 437 T
0 F
(outputs/PLB) 156.8 437 T
(5) 293.2 437 T
(5) 343.6 437 T
(5) 404.8 437 T
(3) 476.8 437 T
3 F
(L) 123.66 419 T
0 F
(LUTs/PLB) 156.8 419 T
(2) 293.2 419 T
(4) 343.6 419 T
(2) 404.8 419 T
(1) 476.8 419 T
3 F
(m) 122.67 401 T
0 F
(FFs/TPG=inputs/PLB) 156.8 401 T
(18) 290.2 401 T
(18) 340.6 401 T
(12) 401.8 401 T
(10) 473.8 401 T
3 F
(f) 125.33 383 T
0 F
(FFs/PLB) 156.8 383 T
(4) 293.2 383 T
(4) 343.6 383 T
(2) 404.8 383 T
(1) 476.8 383 T
1 F
(Minimum Requirements) 121.44 365 T
(ORCA) 278.54 365 T
(ORCA) 328.94 365 T
(Xilinx 4000) 378.63 365 T
(Altera 8000) 449.97 365 T
3 F
(n) 147 347 T
3 8 Q
(min) 153 344.5 T
0 12 Q
( \050for) 165 347 T
3 F
(N) 188.99 347 T
3 8 Q
(TS) 196.99 344.5 T
0 12 Q
(=2\051) 205.44 347 T
(14) 290.2 347 T
(25) 340.6 347 T
(36) 401.8 347 T
(40) 473.8 347 T
3 F
(N) 147.66 329 T
3 8 Q
(TPG) 155.67 326.5 T
0 12 Q
(\050for) 173.78 329 T
3 F
(T=C) 194.77 329 T
0 F
(\051) 217.54 329 T
(20) 290.2 329 T
(10) 340.6 329 T
(18) 401.8 329 T
(40) 473.8 329 T
3 F
(N) 148.66 311 T
3 8 Q
(TPG) 156.67 308.5 T
0 12 Q
(\050for) 174.78 311 T
3 F
(T=) 195.77 311 T
0 F
(1\051) 210.54 311 T
(5) 293.2 311 T
(5) 343.6 311 T
(6) 404.8 311 T
(10) 473.8 311 T
3 F
(N) 172.82 293 T
3 8 Q
(ORA) 180.83 290.5 T
0 12 Q
(35) 290.2 293 T
(32) 340.6 293 T
(72) 401.8 293 T
(120) 470.8 293 T
3 F
(N) 173.04 275 T
3 8 Q
(BUT) 181.05 272.5 T
0 12 Q
(56) 290.2 275 T
(50) 340.6 275 T
(108) 398.8 275 T
(160) 470.8 275 T
3 F
(N) 148.11 257 T
3 8 Q
(PLB) 156.11 254.5 T
0 12 Q
(\050for) 173.33 257 T
3 F
(T=C) 194.32 257 T
0 F
(\051) 217.1 257 T
(111) 287.2 257 T
(92) 340.6 257 T
(198) 398.8 257 T
(320) 470.8 257 T
3 F
(N) 149.11 239 T
3 8 Q
(PLB) 157.11 236.5 T
0 12 Q
(\050for) 174.34 239 T
3 F
(T=) 195.32 239 T
0 F
(1\051) 210.1 239 T
(96) 290.2 239 T
(87) 340.6 239 T
(186) 398.8 239 T
(290) 470.8 239 T
97.2 504.75 97.2 235.25 2 L
V
0.5 H
0 Z
N
154.8 505.25 154.8 380.5 2 L
V
N
270 505.25 270 234.75 2 L
V
2 H
N
320.4 505.25 320.4 234.75 2 L
V
0.5 H
N
370.8 505.25 370.8 234.75 2 L
V
N
442.8 505.25 442.8 234.75 2 L
V
N
514.8 504.75 514.8 235.25 2 L
V
N
96.95 505 515.05 505 2 L
V
N
97.45 470.25 514.55 470.25 2 L
V
N
97.45 467.75 514.55 467.75 2 L
V
N
96.95 451 515.05 451 2 L
V
N
96.95 433 515.05 433 2 L
V
N
96.95 415 515.05 415 2 L
V
N
96.95 397 515.05 397 2 L
V
N
97.45 380.25 514.55 380.25 2 L
V
N
97.45 377.75 514.55 377.75 2 L
V
N
97.45 362.25 514.55 362.25 2 L
V
N
97.45 359.75 514.55 359.75 2 L
V
N
96.95 343 515.05 343 2 L
V
N
96.95 325 515.05 325 2 L
V
N
96.95 307 515.05 307 2 L
V
N
96.95 289 515.05 289 2 L
V
N
96.95 271 515.05 271 2 L
V
N
96.95 253 515.05 253 2 L
V
N
96.95 235 515.05 235 2 L
V
N
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "10" 10
%%Page: "11" 11
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(11) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
3.93 (the number of test sessions may be increased if routing resource limitations prevent successful) 54 712 P
(implementation of BIST.) 54 691 T
1 14 Q
(4. Routability and Scalability) 218.87 656.67 T
0 12 Q
0.12 (During the initial implementations of the BIST approach using ORCA 1C and 2C series FPGAs, we) 75.6 636 P
2.38 (found potential limitations of the BIST architecture in terms of scalability and routability in larger) 54 615 P
-0.36 (FPGAs) 54 594 P
0 9.6 Q
-0.29 ([18]) 89.34 598.8 P
-0.29 ([19]) 105.33 598.8 P
0 12 Q
-0.36 (. These limitations result from the \322global\323 nature of the TPG-to-PLB communication paths) 121.33 594 P
0.28 (as well as the number of BUT-to-ORA and ORA-to-BS connections, coupled with our goal of testing as) 54 573 P
-0.33 (many PLBs per session as possible. For example, each test phase utilizes about 87% of the PLBs and 54%) 54 552 P
-0.54 (of the programmable interconnection network routing segments. Such a high utilization of the FPGA logic) 54 531 P
0.12 (and routing resources reduces the probability of successful routing during implementation. Up to) 54 510 P
3 F
0.12 (m) 523.54 510 P
0 F
0.12 ( TPG) 532.21 510 P
-0.24 (outputs must be routed to) 54 489 P
3 F
-0.24 (n) 177.8 489 P
0 F
-0.24 ( BUTs for) 183.8 489 P
3 F
-0.24 (T) 234.74 489 P
0 F
-0.24 (=) 241.42 489 P
3 F
-0.24 (C) 248.18 489 P
0 F
-0.24 (, while, for) 256.19 489 P
3 F
-0.24 (T) 311.12 489 P
0 F
-0.24 (=1, the TPG outputs must be routed to) 317.8 489 P
3 F
-0.24 (C) 502.98 489 P
4 F
-0.24 (\264) 510.98 489 P
3 F
-0.24 (n) 517.57 489 P
0 F
-0.24 ( BUTs.) 523.57 489 P
-0.01 (Even the smallest FPGAs require a significant number of high fanout nets \050which, in turn, require a large) 54 468 P
-0.55 (number of global routing segments\051 with the number of loads on each of these nets increasing with the size) 54 447 P
0.36 (of the FPGA and/or with decreases in the value of) 54 426 P
3 F
0.36 (T) 300.88 426 P
0 F
0.36 (. These high fanout TPG-to-BUT connections place) 307.55 426 P
1.52 (considerable demands on global routing resources within the FPGA and can make successful routing) 54 405 P
(extremely difficult.) 54 384 T
-0.1 (In our original implementation of the BIST architecture) 75.6 359 P
0 9.6 Q
-0.08 ([17]) 341.87 363.8 P
-0.08 ([18]) 357.86 363.8 P
0 12 Q
-0.1 (, most connections between BUTs and) 373.85 359 P
0.02 (ORAs \050at least 250 wires for ORCA, and at least 540 for Xilinx 4000 series FPGAs\051 also required global) 54 338 P
0.47 (routing resources even though these connections have single loads. In addition, when a large number of) 54 317 P
0.04 (ORA outputs had to be routed to boundary-scan cells in the I/O blocks, the routing resources available at) 54 296 P
0.69 (the periphery of the chip and/or the number of available pins were exhausted. As the size of the FPGA) 54 275 P
-0.71 (increases, the routing resources required for the BUT-to-ORA and ORA-to-BS connections also increased.) 54 254 P
-0.37 (The work-around in our original implementation was to logically OR the outputs of several ORAs prior to) 54 233 P
3.85 (routing to the boundary-scan cell, but this required additional PLBs and reduces the diagnostic) 54 212 P
0.21 (resolution) 54 191 P
0 9.6 Q
0.17 ([18]) 102 195.8 P
0 12 Q
0.21 (. However, we found that, by using iterative comparator based ORA illustrated in Figure) 117.99 191 P
0.21 (3,) 549 191 P
-0.29 (we can take advantage of the error propagation through the ORAs and latch errors only in the last ORA of) 54 170 P
0.88 (the chain. This reduces the number of outputs to route to the boundary-scan cells, which decreases the) 54 149 P
0.18 (routing congestion at the periphery of the chip and avoids the need to further compress ORA outputs via) 54 128 P
(logical OR functions.) 54 107 T
0.22 (Another problem we encountered initially when scaling this BIST architecture to larger FPGAs was) 75.6 82 P
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "11" 11
%%Page: "12" 12
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(12) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
-0.04 (the considerable manual intervention needed in the placement process to ensure that every PLB is a BUT) 54 503.08 P
-0.18 (in at least one test session. Schematic capture of the BIST architecture was used as the design entry point,) 54 482.08 P
1.16 (followed by use of the FPGA placement and routing software. The physical locations of all non-BUT) 54 461.08 P
0.28 (PLBs during the first test session were recorded after the initial placement, so that they could be used as) 54 440.08 P
1.93 (BUTs during the following test session\050s\051. During the subsequent test session\050s\051, the placement was) 54 419.08 P
1.22 (constrained by specifying the desired physical locations for BUTs, but in many cases these additional) 54 398.08 P
-0.6 (constraints prevented completion of routing. In addition, the task of recording BUT positions from the first) 54 377.08 P
0.1 (test session and constraining BUT locations during the following test session\050s\051 grew in complexity with) 54 356.08 P
0.5 (the size of the FPGA. As a result, the number of test sessions had to be increased in many of our initial) 54 335.08 P
0.8 (implementations to overcome routing resource limitations by reducing the number of BUTs and ORAs) 54 314.08 P
(during a test session.) 54 293.08 T
-0.19 (Our solution to these problems is the structure shown in Figure) 75.6 268.08 P
-0.19 (4a, in which we group one ORA with) 379.35 268.08 P
0.14 (the pair of BUTs it compares in terms of their physical location in the array. The complete floorplan \050for) 54 247.08 P
0.42 (the first test session\051 illustrated in Figure) 54 226.08 P
0.42 (4b for an 8) 255.5 226.08 P
4 F
0.42 (\264) 309.08 226.08 P
0 F
0.42 (8 FPGA) 315.67 226.08 P
0.42 (. The positions for the second test session) 355.76 226.08 P
0.02 (are obtained by flipping the assignments around the horizontal axis showed as a dotted line in the middle) 54 205.08 P
-0.31 (of the array. The row labeled \322used as needed\323 can be used for fanout drivers, additional TPGs, additional) 54 184.08 P
0.28 (ORAs for improved diagnostics, or it may be left unused \050note that this row will be configured as BUTs) 54 163.08 P
0.14 (in the second phase\051. By constraining TPG, ORA, and BUT placement for all test sessions as shown, the) 54 142.08 P
-0.06 (global routing resources are used for interconnecting the TPGs to the BUTs while local routing resources) 54 121.08 P
1.71 (are used for connections between BUTs and ORAs as well as between ORAs in a row. As a result,) 54 100.08 P
0.15 (successful routing of the complete BIST architecture can be ensured prior to implementation without the) 54 79.08 P
51.22 511.08 560.78 720 C
0 0 0 1 0 0 0 K
J
0 0 0 1 0 0 0 K
J
1 12 Q
0 X
0 0 0 1 0 0 0 K
(Figure 4.) 185.17 526.96 T
(Floorplan of PLBs during BIST session.) 237.17 526.96 T
0 10 Q
(Pass/Fail) 306.86 630.09 T
0 12 Q
(a\051 TPG, BUT, & ORA connections) 98.32 542.61 T
77.66 691.02 164.81 707.82 R
0.5 H
0 Z
N
(TPG) 109.9 694.47 T
216.48 691.02 303.63 707.82 R
N
(TPG) 248.72 694.47 T
78.16 648.98 105.99 665.79 R
N
(BUT) 80.07 652.43 T
127.58 648.98 155.41 665.79 R
N
(BUT) 129.49 652.43 T
177.01 648.98 204.83 665.79 R
N
(BUT) 178.92 652.43 T
226.43 648.98 254.25 665.79 R
N
(BUT) 228.34 652.43 T
275.85 648.98 303.67 665.79 R
N
(BUT) 277.76 652.43 T
78.16 617.78 105.99 634.58 R
N
(ORA) 79.41 621.23 T
127.58 617.78 155.41 634.58 R
N
(ORA) 128.83 621.23 T
177.01 617.78 204.83 634.58 R
N
(ORA) 178.25 621.23 T
226.43 617.78 254.25 634.58 R
N
(ORA) 227.67 621.23 T
275.85 617.78 303.67 634.58 R
N
(ORA) 277.09 621.23 T
78.16 586.58 105.99 603.38 R
N
(BUT) 80.07 590.04 T
127.58 586.58 155.41 603.38 R
N
(BUT) 129.49 590.04 T
177.01 586.58 204.83 603.38 R
N
(BUT) 178.92 590.04 T
226.43 586.58 254.25 603.38 R
N
(BUT) 228.34 590.04 T
275.85 586.58 303.67 603.38 R
N
(BUT) 277.76 590.04 T
91.53 639.45 94.1 639.45 91.53 635 88.97 639.45 4 Y
N
91.53 639.45 94.1 639.45 91.53 635 88.97 639.45 4 Y
V
91.53 649.2 91.53 639.7 2 L
2 Z
N
141.53 639.85 144.1 639.84 141.53 635.4 138.97 639.84 4 Y
0 Z
N
141.53 639.85 144.1 639.84 141.53 635.4 138.97 639.84 4 Y
V
141.53 649.6 141.53 640.09 2 L
2 Z
N
191.53 639.2 194.1 639.2 191.53 634.75 188.97 639.2 4 Y
0 Z
N
191.53 639.2 194.1 639.2 191.53 634.75 188.97 639.2 4 Y
V
191.53 648.95 191.53 639.45 2 L
2 Z
N
240.48 639.6 243.05 639.6 240.48 635.15 237.92 639.6 4 Y
0 Z
N
240.48 639.6 243.05 639.6 240.48 635.15 237.92 639.6 4 Y
V
240.48 649.35 240.48 639.85 2 L
2 Z
N
290.48 638.95 293.05 638.95 290.48 634.5 287.92 638.95 4 Y
0 Z
N
290.48 638.95 293.05 638.95 290.48 634.5 287.92 638.95 4 Y
V
290.48 648.7 290.48 639.2 2 L
2 Z
N
91.57 613.15 89 613.15 91.57 617.6 94.13 613.15 4 Y
0 Z
N
91.57 613.15 89 613.15 91.57 617.6 94.13 613.15 4 Y
V
91.57 603.4 91.57 612.9 2 L
2 Z
N
141.57 613.55 139 613.55 141.57 618 144.13 613.55 4 Y
0 Z
N
141.57 613.55 139 613.55 141.57 618 144.13 613.55 4 Y
V
141.57 603.8 141.57 613.3 2 L
2 Z
N
191.57 612.9 189 612.9 191.57 617.35 194.13 612.9 4 Y
0 Z
N
191.57 612.9 189 612.9 191.57 617.35 194.13 612.9 4 Y
V
191.57 603.15 191.57 612.65 2 L
2 Z
N
240.52 613.3 237.95 613.3 240.52 617.75 243.08 613.3 4 Y
0 Z
N
240.52 613.3 237.95 613.3 240.52 617.75 243.08 613.3 4 Y
V
240.52 603.55 240.52 613.05 2 L
2 Z
N
290.52 612.65 287.95 612.65 290.52 617.1 293.08 612.65 4 Y
0 Z
N
290.52 612.65 287.95 612.65 290.52 617.1 293.08 612.65 4 Y
V
290.52 602.9 290.52 612.4 2 L
2 Z
N
91.35 671.75 93.92 671.75 91.35 667.3 88.78 671.75 4 Y
0 Z
N
91.35 671.75 93.92 671.75 91.35 667.3 88.78 671.75 4 Y
V
91.35 681.5 91.35 672 2 L
2 Z
N
141.35 672.15 143.92 672.15 141.35 667.7 138.78 672.15 4 Y
0 Z
N
141.35 672.15 143.92 672.15 141.35 667.7 138.78 672.15 4 Y
V
141.35 681.9 141.35 672.4 2 L
2 Z
N
191.35 671.49 193.92 671.49 191.35 667.05 188.78 671.49 4 Y
0 Z
N
191.35 671.49 193.92 671.49 191.35 667.05 188.78 671.49 4 Y
V
191.35 681.25 191.35 671.74 2 L
2 Z
N
240.3 671.9 242.87 671.9 240.3 667.45 237.73 671.9 4 Y
0 Z
N
240.3 671.9 242.87 671.9 240.3 667.45 237.73 671.9 4 Y
V
240.3 681.65 240.3 672.15 2 L
2 Z
N
290.3 671.24 292.87 671.24 290.3 666.8 287.73 671.24 4 Y
0 Z
N
290.3 671.24 292.87 671.24 290.3 666.8 287.73 671.24 4 Y
V
290.3 681 290.3 671.49 2 L
2 Z
N
91.78 580.35 89.22 580.35 91.78 584.8 94.35 580.35 4 Y
0 Z
N
91.78 580.35 89.22 580.35 91.78 584.8 94.35 580.35 4 Y
V
91.78 570.6 91.78 580.1 2 L
2 Z
N
141.78 580.75 139.22 580.75 141.78 585.2 144.35 580.75 4 Y
0 Z
N
141.78 580.75 139.22 580.75 141.78 585.2 144.35 580.75 4 Y
V
141.78 571 141.78 580.5 2 L
2 Z
N
191.78 580.1 189.22 580.1 191.78 584.55 194.35 580.1 4 Y
0 Z
N
191.78 580.1 189.22 580.1 191.78 584.55 194.35 580.1 4 Y
V
191.78 570.35 191.78 579.85 2 L
2 Z
N
240.73 580.5 238.17 580.5 240.73 584.95 243.3 580.5 4 Y
0 Z
N
240.73 580.5 238.17 580.5 240.73 584.95 243.3 580.5 4 Y
V
240.73 570.75 240.73 580.25 2 L
2 Z
N
290.73 579.85 288.17 579.85 290.73 584.3 293.3 579.85 4 Y
0 Z
N
290.73 579.85 288.17 579.85 290.73 584.3 293.3 579.85 4 Y
V
290.73 570.1 290.73 579.6 2 L
2 Z
N
76.83 699.6 66.33 699.6 66.33 570.45 291.04 570.45 4 L
N
304.68 699.6 313.08 699.6 313.08 681.75 91.53 681.75 4 L
N
122.29 626 122.29 628.57 126.73 626 122.29 623.43 4 Y
0 Z
N
122.29 626 122.29 628.57 126.73 626 122.29 623.43 4 Y
V
106.89 626 122.04 626 2 L
2 Z
N
171.24 626 171.24 628.57 175.68 626 171.24 623.43 4 Y
0 Z
N
171.24 626 171.24 628.57 175.68 626 171.24 623.43 4 Y
V
155.84 626 170.99 626 2 L
2 Z
N
220.19 626 220.19 628.57 224.63 626 220.19 623.43 4 Y
0 Z
N
220.19 626 220.19 628.57 224.63 626 220.19 623.43 4 Y
V
204.79 626 219.94 626 2 L
2 Z
N
271.24 626 271.24 628.57 275.68 626 271.24 623.43 4 Y
0 Z
N
271.24 626 271.24 628.57 275.68 626 271.24 623.43 4 Y
V
255.84 626 270.99 626 2 L
2 Z
N
320.19 626 320.19 628.57 324.64 626 320.19 623.43 4 Y
0 Z
N
320.19 626 320.19 628.57 324.64 626 320.19 623.43 4 Y
V
304.79 626 319.94 626 2 L
2 Z
N
72.94 626.1 72.94 628.67 77.38 626.1 72.94 623.53 4 Y
0 Z
N
72.94 626.1 72.94 628.67 77.38 626.1 72.94 623.53 4 Y
V
310.98 626.1 310.98 563.1 60.03 563.1 60.03 626.1 72.69 626.1 5 L
2 Z
N
374.98 692.65 531.43 711.28 R
0 Z
N
(TPG\050s\051) 435.55 696.23 T
374.98 673.7 531.43 692.34 R
N
(BUTs) 438.88 677.28 T
374.98 654.75 531.43 673.39 R
N
(ORAs) 438.21 658.33 T
374.98 636.1 531.43 654.74 R
N
(BUTs) 438.88 639.68 T
374.98 617.99 531.43 636.62 R
N
(used as needed) 417.22 621.57 T
374.98 599.04 531.43 617.67 R
N
(BUTs) 438.88 602.62 T
374.98 580.39 531.43 599.03 R
N
(ORAs) 438.21 583.97 T
374.98 561.44 531.43 580.08 R
N
(BUTs) 438.88 565.02 T
(b\051 Floorplan for a test session) 385.97 542.61 T
J
369.27 636.62 351.22 636.62 2 L
J
369.27 636.62 367.52 636.62 2 L
2 Z
N
[4.075 5.24] 4.075 I
367.52 636.62 352.97 636.62 2 L
N
J
352.97 636.62 351.22 636.62 2 L
N
J
549.5 636.62 531.45 636.62 2 L
J
549.5 636.62 547.75 636.62 2 L
N
[4.075 5.239] 4.075 I
547.75 636.62 533.2 636.62 2 L
N
J
533.2 636.62 531.45 636.62 2 L
N
0 0 612 792 C
J
0 0 0 1 0 0 0 K
J
FMENDPAGE
%%EndPage: "12" 12
%%Page: "13" 13
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(13) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
1.14 (need for keeping records of BUT positions in conjunction with manual assignments of BUT positions) 54 712 P
-0.02 (during subsequent test sessions. More importantly, the structured floorplan ensures that large FPGAs can) 54 691 P
1.58 (be completely tested in only two test sessions. Finally, the BIST architecture can be constructed and) 54 670 P
1.98 (interconnected algorithmically as a function of the size of a given FPGA while ensuring the proper) 54 649 P
(combination of BUTs, TPGs, and ORAs.) 54 628 T
1 14 Q
(5. Results f) 194.77 593.67 T
(or ORCA Implementation) 260.14 593.67 T
0 12 Q
0.53 (In this section we present the results of the implementation of our BIST approach using the ORCA) 75.6 573 P
1.51 (FPGA. We describe the configurations \050test phases\051 needed for a complete BIST session and present) 54 552 P
-0.02 (results regarding memory requirements, test-time, and fault coverage. Based on a gate-level model of the) 54 531 P
-0.56 (ORCA PLB, we determined that nine BIST configurations are sufficient to completely test a BUT in every) 54 510 P
2.38 (functional mode of operation. Then for FPGAs which require only two test sessions, a total of 18) 54 489 P
0.79 (configurations are required to completely test all PLBs in the FPGA. These 18 configurations compare) 54 468 P
-0.19 (favorably with the 32 configurations currently used to test production ORCA devices. However, it should) 54 447 P
3.34 (be noted that the 32 configurations used for manufacturing tests include complete testing of the) 54 426 P
0.28 (programmable interconnection network, testing of the configuration memory and its read-back circuitry,) 54 405 P
0.8 (and testing of the FPGA I/O buffers. Parametric testing and speed sorting is performed with additional) 54 384 P
(configurations of the FPGA.) 54 363 T
0.25 (The memory requirements for storing the BIST configurations depend on the size of the FPGA. For) 75.6 338 P
1.05 (the largest 1C series ORCA \050the 1C09, a 16) 54 317 P
4 F
1.05 (\264) 272.71 317 P
0 F
1.05 (16 PLB FPGA\051, approximately 16 Kbytes of storage are) 279.3 317 P
0.61 (needed per configuration) 54 296 P
0 9.6 Q
0.49 ([9]) 175.19 300.8 P
0 12 Q
0.61 (, which means about 288 Kbytes for the two test sessions for manufacturing) 186.38 296 P
2.38 (testing. For system testing, we need to also store the original system function configuration \050to be) 54 275 P
0.49 (reinstalled after testing\051, which leads to a total of about 300 Kbytes. Unlike the BIST run-time which is) 54 254 P
-0.5 (constant, the configuration download time depends on the size of the FPGA as well as the type of interface) 54 233 P
0.76 (between the configuration storage media and the FPGA itself. Download time for the ORCA 1C series) 54 212 P
0.05 (FPGAs varies from about 2 to 35 msec. \050depending on the download interface\051, while the execution time) 54 191 P
0.34 (for the BIST sequence is approximately 3 msec. at a 10 MHz clock rate. This corresponds to less than 1) 54 170 P
(sec. of testing time required to completely test all of the PLBs in the FPGA.) 54 149 T
1.01 (Although pseudoexhaustive testing does not require fault simulation, we used single stuck-at fault) 75.6 124 P
0.34 (simulation to evaluate the fault coverage obtained in each of the nine different phases of a BIST session) 54 103 P
-0.22 (in order to determine which test phases are most effective. We developed a complete gate-level model for) 54 82 P
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "13" 13
%%Page: "14" 14
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(14) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
1.26 (the ORCA PLB, including the PLB configuration bits which are represented as primary inputs whose) 54 712 P
1.83 (values are \322frozen\323 during each phase. This allowed us to also simulate stuck-at faults affecting the) 54 691 P
-0.09 (configuration bits. \050Note that the model of any user circuit provided by FPGA CAD tools is only a subset) 54 670 P
0 (of our fault simulation model and does not include configuration bits.\051 The ORCA PLB gate-level model) 54 649 P
1.19 (was broken into the three modules shown in Figure) 54 628 P
1.19 (2: 1\051 LUT/RAM, 2\051 FF/latches, and 3\051 the output) 312.49 628 P
0.14 (multiplexer network. A total of 1942 collapsed stuck-at gate-level faults in the PLB included 1403 faults) 54 607 P
0.51 (in the LUTs, 293 faults in the FF/latches, and 246 faults in the output multiplexers. The faults affecting) 54 586 P
0.87 (the configuration bits are included in the set of faults of the module controlled by those bits. The fault) 54 565 P
-0.27 (simulation results are summarized in Table) 54 544 P
-0.27 (3 in terms of the number of faults detected in each of the three) 262.61 544 P
0.34 (modules and the total faults detected by each test phase as well as the fault coverage obtained with each) 54 523 P
0.05 (test phase. The cumulative number of faults detected and the resultant cumulative fault coverage are also) 54 502 P
-0.14 (included to indicate that 100% single stuck-at fault coverage was obtained over the nine test phases. Note) 54 481 P
-0.08 (that the fault simulation information including the number of faults and fault coverage are with respect to) 54 460 P
(a single BUT.) 54 439 T
-0.52 ( Testing time and configuration memory storage can be reduced for system-level testing by testing the) 75.6 164 P
0.37 (FPGA only for the specific modes of operation in which its PLBs are used by the system function or by) 54 143 P
-0.05 (removing some configurations which detect very few new faults. For example, test phases 1 and 9 can be) 54 122 P
1.92 (combined to create a single test phase which has been determined to provide a single stuck-at fault) 54 101 P
0.72 (coverage of approximately 83%. This single configuration would be applied twice to the FPGA for the) 54 80 P
1 F
(T) 99.88 412 T
(able 3: Cumulati) 106.78 412 T
(v) 192.67 412 T
(e gate-le) 198.55 412 T
(v) 240.68 412 T
(el single stuck-at fault co) 246.56 412 T
(v) 373.1 412 T
(erage f) 378.98 412 T
(or indi) 413.66 412 T
(vidual B) 447.88 412 T
(UTs) 490.78 412 T
(Phase) 57 386 T
(Number of F) 166.8 386 T
(aults Detected) 232.49 386 T
(P) 401.23 386 T
(er Phase) 408.32 386 T
(Cumulati) 483.12 386 T
(v) 531.67 386 T
(e) 537.55 386 T
(No.) 63.17 364 T
(LUTs) 98.73 364 T
(FFs) 154.13 364 T
(MUX) 199.87 364 T
(T) 251.48 364 T
(otal) 258.38 364 T
(Cumulati) 292.1 364 T
(v) 340.66 364 T
(e T) 346.54 364 T
(otal) 361.76 364 T
(F) 387.38 364 T
(ault Co) 394.41 364 T
(v) 431.96 364 T
(erage) 437.84 364 T
(F) 473.78 364 T
(ault Co) 480.81 364 T
(v) 518.36 364 T
(erage) 524.24 364 T
0 F
(1) 69 346 T
(1305) 101.4 346 T
(0) 160.8 346 T
(53) 208.2 346 T
(1358) 252.6 346 T
(1358) 324.6 346 T
(69.9%) 411.1 346 T
(69.9%) 497.5 346 T
(2) 69 328 T
(860) 104.4 328 T
(0) 160.8 328 T
(45) 208.2 328 T
(905) 255.6 328 T
(1420) 324.6 328 T
(46.6%) 411.1 328 T
(73.1%) 497.5 328 T
(3) 69 310 T
(699) 104.4 310 T
(0) 160.8 310 T
(53) 208.2 310 T
(752) 255.6 310 T
(1491) 324.6 310 T
(38.7%) 411.1 310 T
(76.8%) 497.5 310 T
(4) 69 292 T
(707) 104.4 292 T
(0) 160.8 292 T
(53) 208.2 292 T
(760) 255.6 292 T
(1533) 324.6 292 T
(39.1%) 411.1 292 T
(78.9%) 497.5 292 T
(5) 69 274 T
(651) 104.4 274 T
(172) 154.8 274 T
(53) 208.2 274 T
(876) 255.6 274 T
(1737) 324.6 274 T
(45.1%) 411.1 274 T
(89.4%) 497.5 274 T
(6) 69 256 T
(0) 110.4 256 T
(184) 154.8 256 T
(53) 208.2 256 T
(237) 255.6 256 T
(1808) 324.6 256 T
(12.2%) 411.1 256 T
(93.1%) 497.5 256 T
(7) 69 238 T
(712) 104.4 238 T
(147) 154.8 238 T
(53) 208.2 238 T
(912) 255.6 238 T
(1856) 324.6 238 T
(47.0%) 411.1 238 T
(95.6%) 497.5 238 T
(8) 69 220 T
(0) 110.4 220 T
(151) 154.8 220 T
(53) 208.2 220 T
(204) 255.6 220 T
(1906) 324.6 220 T
(10.5%) 411.1 220 T
(98.1%) 497.5 220 T
(9) 69 202 T
(712) 104.4 202 T
(211) 154.8 202 T
(53) 208.2 202 T
(976) 255.6 202 T
(1942) 324.6 202 T
(50.3%) 411.1 202 T
(100%) 499 202 T
55.8 401.75 55.8 196.25 2 L
V
0.5 H
0 Z
N
86.95 401.75 86.95 196.25 2 L
V
N
89.45 401.75 89.45 196.25 2 L
V
N
138.6 380.25 138.6 195.75 2 L
V
N
189 380.25 189 195.75 2 L
V
N
239.4 380.25 239.4 195.75 2 L
V
N
289.8 380.25 289.8 195.75 2 L
V
N
382.15 401.75 382.15 196.25 2 L
V
N
384.65 401.75 384.65 196.25 2 L
V
N
468.55 401.75 468.55 196.25 2 L
V
N
471.05 401.75 471.05 196.25 2 L
V
N
556.2 401.75 556.2 196.25 2 L
V
N
55.55 402 556.45 402 2 L
V
N
89.7 380 381.9 380 2 L
V
N
56.05 359.25 555.95 359.25 2 L
V
N
56.05 356.75 555.95 356.75 2 L
V
N
55.55 340 556.45 340 2 L
V
N
55.55 322 556.45 322 2 L
V
N
55.55 304 556.45 304 2 L
V
N
55.55 286 556.45 286 2 L
V
2 H
N
55.55 268 556.45 268 2 L
V
0.5 H
N
55.55 250 556.45 250 2 L
V
N
55.55 232 556.45 232 2 L
V
N
55.55 214 556.45 214 2 L
V
N
55.55 196 556.45 196 2 L
V
N
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "14" 14
%%Page: "15" 15
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(15) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
0.15 (minimum two test sessions) 54 712 P
0 9.6 Q
0.12 ([19]) 184.13 716.8 P
0 12 Q
0.15 (. Such a single configuration with high fault coverage can also be used for) 200.13 712 P
(incoming inspection of FPGAs at system manufacturing facilities) 54 691 T
0 9.6 Q
([1]) 368.32 695.8 T
0 12 Q
(.) 379.51 691 T
0.09 (The nine test phases are summarized in Table) 75.6 666 P
0.09 (4 in terms of the operational modes tested in the PLB.) 298.15 666 P
-0.18 (There are four distinct modes of operation for the ORCA LUTs: 1\051 RAM, 2\051 fast adder, 3\051 LUT functions) 54 645 P
0.4 (of 5 variables, and 4\051 LUT functions of 4 variables. During the RAM mode configuration \050phase 1\051, the) 54 624 P
0.36 (TPGs are configured to generate a standard RAM test sequence, while the TPGs for all the other phases) 54 603 P
-0.51 (are configured as binary counters. In phases 2-4, the BUTs implement combinational logic circuits and the) 54 582 P
0.1 (FF/latch circuitry is tested in its various modes of operation in phases 5-9. \050During phases 3-9, the LUTs) 54 561 P
-0.55 (are programmed with \322chessboard patterns\323 or identity functions to ensure all possible patterns at the LUT) 54 540 P
-0.39 (outputs.\051 The FF module has a number of optional modes of operation, including: 1\051 choice of FF or latch,) 54 519 P
0.3 (2\051 choice of active clock edge \050or level for latches\051, 3\051 optional clock enable with choice of active level,) 54 498 P
0.14 (4\051 choice of preset or clear, 5\051 synchronous or asynchronous preset/clear activation with choice of active) 54 477 P
1.52 (level, and 6\051 selection of data from the LUT output or directly from the PLB inputs. The number of) 54 456 P
0.69 (possible combinations of these options is too large to be considered. However, we determined that five) 54 435 P
0.56 (configurations are sufficient to completely test the FF module. An ORCA output uses a 9-to-1 MUX to) 54 414 P
0.23 (select any one of the four LUT outputs or four FF outputs, as well as the carry-out from the LUTs in the) 54 393 P
0.15 (fast adder mode of operation \050a mode of operation with dedicated look-ahead-carry circuitry available in) 54 372 P
2.72 (the more recent FGPA LUT architectures\051. This 9-to-1 MUX establishes the minimum number of) 54 351 P
(configurations needed to completely test PLBs.) 54 330 T
1 F
(T) 196.15 303 T
(able 4: Summary of T) 203.05 303 T
(est Phases f) 313.94 303 T
(or B) 372.3 303 T
(UTs) 394.51 303 T
(Phase) 93 277 T
(FF/Latch Modes & Options) 218.96 277 T
(LUT) 475.46 277 T
(No.) 99.17 255 T
(FF/Latch) 129 255 T
(Set/Reset) 190.54 255 T
(Clock) 264 255 T
-0.08 (Clk Enable) 311.4 255 P
(FF Data In) 383.87 255 T
(Mode) 473.14 255 T
0 F
(1) 105 237 T
(-) 151 237 T
(-) 212.2 237 T
(-) 277 237 T
(-) 338.2 237 T
(-) 410.2 237 T
(RAM) 474.13 237 T
(2) 105 219 T
(-) 151 219 T
(-) 212.2 219 T
(-) 277 219 T
(-) 338.2 219 T
(-) 410.2 219 T
(Fast Adder) 461.3 219 T
(3) 105 201 T
(-) 151 201 T
(-) 212.2 201 T
(-) 277 201 T
(-) 338.2 201 T
(-) 410.2 201 T
(4-variable) 463.48 201 T
(4) 105 183 T
(-) 151 183 T
(-) 212.2 183 T
(-) 277 183 T
(-) 338.2 183 T
(-) 410.2 183 T
(5-variable) 463.48 183 T
(5) 105 165 T
(FF) 146.33 165 T
(async. reset) 186.21 165 T
(falling edge) 250.51 165 T
(active low) 315.37 165 T
(LUT output) 383.7 165 T
(4-variable) 463.48 165 T
(6) 105 147 T
(FF) 146.33 147 T
(async. set) 190.87 147 T
(rising edge) 252.5 147 T
(active high) 313.7 147 T
(PLB input) 387.36 147 T
(4-variable) 463.48 147 T
(7) 105 129 T
(Latch) 139.34 129 T
(sync. set) 193.54 129 T
(active high) 252.5 129 T
(active high) 313.7 129 T
(LUT output) 383.7 129 T
(4-variable) 463.48 129 T
(8) 105 111 T
(Latch) 139.34 111 T
(sync. reset) 188.87 111 T
(active low) 254.17 111 T
(active low) 315.37 111 T
(PLB input) 387.36 111 T
(4-variable) 463.48 111 T
(9) 105 93 T
(FF) 146.33 93 T
(-) 212.2 93 T
(rising edge) 252.5 93 T
(active low) 315.37 93 T
(dynamic select) 376.37 93 T
(4-variable) 463.48 93 T
91.8 292.75 91.8 87.25 2 L
V
0.5 H
0 Z
N
122.95 292.75 122.95 87.25 2 L
V
N
125.45 292.75 125.45 87.25 2 L
V
N
181.8 271.25 181.8 86.75 2 L
V
N
246.6 271.25 246.6 86.75 2 L
V
N
311.4 271.25 311.4 86.75 2 L
V
N
369 271.25 369 86.75 2 L
V
N
454.15 292.75 454.15 87.25 2 L
V
N
456.65 292.75 456.65 87.25 2 L
V
N
520.2 292.75 520.2 87.25 2 L
V
N
91.55 293 520.45 293 2 L
V
N
125.7 271 453.9 271 2 L
V
N
92.05 250.25 519.95 250.25 2 L
V
N
92.05 247.75 519.95 247.75 2 L
V
N
91.55 231 520.45 231 2 L
V
N
91.55 213 520.45 213 2 L
V
N
91.55 195 520.45 195 2 L
V
N
91.55 177 520.45 177 2 L
V
2 H
N
91.55 159 520.45 159 2 L
V
0.5 H
N
91.55 141 520.45 141 2 L
V
N
91.55 123 520.45 123 2 L
V
N
91.55 105 520.45 105 2 L
V
N
91.55 87 520.45 87 2 L
V
N
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "15" 15
%%Page: "16" 16
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(16) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
1 14 Q
0 X
(6. Implementation Issues) 231.53 566.67 T
0 12 Q
1.18 (Our BIST architecture is unusual compared with \322normal\323 user applications, and its requirements) 75.6 546 P
1 (resulted in several implementation problems caused by limited FPGA routing resources and CAD tool) 54 525 P
1.7 (limitations) 54 504 P
0 9.6 Q
1.36 ([18]) 105.35 508.8 P
0 12 Q
1.7 (. The scalability and routability problems described in) 121.34 504 P
1.7 (Section 4 were the most serious) 397.21 504 P
0.41 (problems we encountered, b) 54 483 P
0.41 (ut these were solv) 190.29 483 P
0.41 (ed by the structured \337oorplan for the BIST session sho) 277.65 483 P
0.41 (wn) 543.34 483 P
0.18 (in) 54 462 P
0.18 (Figure) 66.52 462 P
0.18 (4) 100.85 462 P
0.18 (.) 106.85 462 P
0.18 ( In this section we discuss some of the other problems we encountered which are common to) 109.85 462 P
-0.62 (all FPGA implementations. In addition, we discuss the solutions we have found to overcome the problems.) 54 441 P
2.68 (The \336rst implementation issue is the problem of \322in) 75.6 415 P
2.68 (visible logic\323. While the g) 344.52 415 P
2.68 (ate-le) 481.49 415 P
2.68 (v) 507.84 415 P
2.68 (el model) 513.66 415 P
0.65 (described in Section 5 pro) 54 394 P
0.65 (vides a complete model of the PLB, an) 181.72 394 P
0.65 (y user) 372.71 394 P
0.65 (-generated model via the design) 402.11 394 P
0.46 (capture CAD tools or synthesis tools consists only of a subset of the complete model. This subset is the) 54 373 P
1.2 (part of the complete model that is acti) 54 352 P
1.2 (v) 243.71 352 P
1.2 (e for the particular v) 249.53 352 P
1.2 (alues of the con\336guration bits used in the) 351.98 352 P
1.26 (corresponding circuit con\336guration. A con\336guration multiple) 54 331 P
1.26 (x) 354.11 331 P
1.26 (er is a typical hardw) 359.93 331 P
1.26 (are mechanism that) 462.16 331 P
4.25 (selects subcircuits for v) 54 310 P
4.25 (arious modes of operation. Con\336guration multiple) 179.42 310 P
4.25 (x) 441.14 310 P
4.25 (ers are controlled by) 446.95 310 P
1.67 (con\336guration memory bits to select one of se) 54 289 P
1.67 (v) 281.72 289 P
1.67 (eral possible paths connecting to a tar) 287.54 289 P
1.67 (get point) 477.99 289 P
3 F
1.67 (X) 526.67 289 P
0 F
1.67 ( \050see) 534.01 289 P
1.27 (Figure) 54 268 P
1.27 (5\051. Assume that we set) 88.33 268 P
3 F
1.27 (S) 206.67 268 P
0 F
1.27 (=0 to select P) 212.67 268 P
1.27 (ath) 281.41 268 P
0 8 Q
0.85 (1) 296.07 265.5 P
0 12 Q
1.27 (. Then P) 300.07 268 P
1.27 (ath) 342.77 268 P
0 8 Q
0.85 (2) 357.43 265.5 P
0 12 Q
1.27 ( and the multiple) 361.43 268 P
1.27 (x) 446.07 268 P
1.27 (er disappear from the) 451.89 268 P
-0.39 (circuit model seen by the user) 54 247 P
-0.39 (. This is correct from a design vie) 195.03 247 P
-0.39 (wpoint, because the v) 353.31 247 P
-0.39 (alue) 455.82 247 P
3 F
-0.39 (V2) 478.43 247 P
0 F
-0.39 ( arri) 491.76 247 P
-0.39 (ving from) 510.73 247 P
0.41 (P) 54 226 P
0.41 (ath) 60.49 226 P
3 8 Q
0.28 (2) 75.16 223.5 P
0 12 Q
0.41 ( can no longer af) 79.16 226 P
0.41 (fect the output) 161.15 226 P
3 F
0.41 (X) 234.71 226 P
0 F
0.41 (. But from a testing vie) 242.05 226 P
0.41 (wpoint, in an) 354.48 226 P
0.41 (y test for the multiple) 418.12 226 P
0.41 (x) 522.93 226 P
0.41 (er) 528.75 226 P
0.41 (, we) 537.59 226 P
0.34 (need to set) 54 205 P
3 F
0.34 (V1) 109.33 205 P
0 F
0.34 ( and) 122.67 205 P
3 F
0.34 (V2) 146.67 205 P
0 F
0.34 ( to complementary v) 160 205 P
0.34 (alues. The problem arises because FPGA CAD tools generate) 259.7 205 P
0.69 (the con\336guration bitstream based on the user model, so that we cannot control the con\336guration bits or) 54 184 P
0.12 (data v) 54 163 P
0.12 (alues for subcircuits no longer in the model. Thus in Figure) 82.82 163 P
0.12 (5a, when) 372.02 163 P
3 F
0.12 (S) 418.59 163 P
0 F
0.12 (=0,) 424.59 163 P
3 F
0.12 (V1) 443.48 163 P
0 F
0.12 ( will ha) 456.81 163 P
0.12 (v) 492.82 163 P
0.12 (e both 0 and) 498.64 163 P
2.33 (1 v) 54 142 P
2.33 (alues \050because of the e) 71.03 142 P
2.33 (xhausti) 188.8 142 P
2.33 (v) 223.16 142 P
2.33 (e testing of the subcircuit producing) 228.98 142 P
3 F
2.33 (V1) 418.95 142 P
0 F
2.33 (\051, b) 432.28 142 P
2.33 (ut) 450.36 142 P
3 F
2.33 (V2) 465.03 142 P
0 F
2.33 ( cannot change.) 478.36 142 P
-0.26 (Similarly) 54 121 P
-0.26 (,) 97.9 121 P
3 F
-0.26 (V1) 103.63 121 P
0 F
-0.26 ( is \336x) 116.96 121 P
-0.26 (ed in con\336gurations where) 142.93 121 P
3 F
-0.26 (S) 272.52 121 P
0 F
-0.26 (=1. The result is that the testing of the multiple) 278.52 121 P
-0.26 (x) 501.39 121 P
-0.26 (er may not) 507.2 121 P
-0.69 (be e) 54 100 P
-0.69 (xhausti) 72.78 100 P
-0.69 (v) 107.15 100 P
-0.69 (e. F) 112.97 100 P
-0.69 (or e) 130.1 100 P
-0.69 (xample, the s-a-1 f) 147.55 100 P
-0.69 (ault sho) 235.32 100 P
-0.69 (wn in Figure) 271.99 100 P
-0.69 (5b is detected only when) 334.94 100 P
3 F
-0.69 (S) 453.79 100 P
0 F
-0.69 (=0,) 459.79 100 P
3 F
-0.69 (V1) 477.86 100 P
0 F
-0.69 (=0, and) 491.19 100 P
3 F
-0.69 (V2) 528.9 100 P
0 F
-0.69 (=1.) 542.23 100 P
(But this pattern may ne) 54 79 T
(v) 165.7 79 T
(er be applied if P) 171.52 79 T
(ath) 253.32 79 T
3 8 Q
(2) 267.98 76.5 T
0 12 Q
( cannot be controlled when) 271.98 79 T
3 F
(S) 404.96 79 T
0 F
(=0.) 410.96 79 T
54 72 558 720 C
160.26 576 451.74 720 C
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
227.57 715.96 227.57 643.96 2 L
0.5 H
2 Z
0 X
0 0 0 1 0 0 0 K
N
245.57 697.96 245.57 661.96 2 L
N
227.57 715.96 245.57 697.96 2 L
N
227.57 643.96 245.57 661.96 2 L
N
245.57 679.96 258.47 679.96 2 L
2 H
N
236.52 652.91 236.52 634.64 2 L
0.5 H
N
1 10 Q
(0) 229.52 700.56 T
3 F
(X) 260.59 676.59 T
191.27 697.96 227.43 697.96 2 L
2 H
N
0 12 Q
(P) 164.86 695.21 T
(ath) 171.35 695.21 T
0 9.6 Q
(1) 186.02 692.21 T
J
189.59 661.96 227.43 661.96 2 L
0.5 H
N
0 12 Q
(P) 286.64 633.54 T
(ath) 293.13 633.54 T
0 9.6 Q
(2) 307.8 630.54 T
J
0 12 Q
(S=0) 227.08 624.76 T
202.02 591.52 407.34 600.52 R
7 X
V
1 F
0 X
(Figure 5.) 218.06 592.52 T
(Configuration multiplexer) 270.06 592.52 T
1 10 Q
(1) 230 653.34 T
227.43 697.96 245.43 679.96 2 L
7 X
V
2 H
0 X
N
0 12 Q
(V1) 209.43 704.97 T
(V2) 209.43 667.27 T
7 X
0 90 13.5 13.34 367.16 698.43 G
0.5 H
0 X
0 90 13.5 13.34 367.16 698.43 A
7 X
270 360 13.5 13.34 367.16 698.12 G
0 X
270 360 13.5 13.34 367.16 698.12 A
367.16 711.78 353.66 711.78 353.66 685.09 367.16 685.09 4 L
N
7 X
0 90 13.5 13.34 367.16 644.43 G
0 X
0 90 13.5 13.34 367.16 644.43 A
7 X
270 360 13.5 13.34 367.16 644.12 G
0 X
270 360 13.5 13.34 367.16 644.12 A
367.16 657.78 353.66 657.78 353.66 631.09 367.16 631.09 4 L
N
0 90 30.12 13.5 396.87 671.28 A
270 360 30.12 13.5 396.87 671.28 A
0 90 4.28 13.5 396.87 671.28 A
270 360 4.28 13.5 396.87 671.28 A
380.67 698.28 393.34 698.28 393.34 677.58 401.19 677.58 4 L
2 H
N
380.57 643.47 393.24 643.47 393.24 664.17 401.09 664.17 4 L
0.5 H
N
325.77 658.56 345.57 658.56 335.67 678.36 3 Y
0 Z
N
90 450 2.7 3.15 90 336.3 681.02 AA
353.67 651.47 311.71 651.47 2 L
2 Z
N
334.77 651.47 334.77 658.67 2 L
N
353.67 637.08 312.47 637.08 2 L
N
352.82 704.68 311.62 704.68 2 L
2 H
N
336.57 683.88 336.57 691.97 353.67 691.97 3 L
0.5 H
N
(S=0) 291.42 647.57 T
(P) 162.86 659.47 T
(ath) 169.35 659.47 T
0 9.6 Q
(2) 184.02 656.47 T
0 12 Q
(P) 284.47 700.33 T
(ath) 290.96 700.33 T
0 9.6 Q
(1) 305.63 697.33 T
J
426.87 670.38 441.06 670.38 2 L
2 H
N
3 10 Q
(X) 444.02 667.26 T
1 F
(x) 347.37 648.95 T
(s-a-1) 347.37 660.47 T
(1) 341.07 693.78 T
(0) 341.17 707.45 T
(1) 341.07 639.23 T
0 12 Q
(a\051 Functional Model) 163.68 609.6 T
(b\051 Gate Model) 332.46 612.32 T
354.22 705 380.21 697.61 2 L
N
400.65 677.47 426.64 670.08 2 L
N
54 72 558 720 C
0 0 612 792 C
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "16" 16
%%Page: "17" 17
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(17) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
0.1 (Another implementation issue results from the lack of detailed user control of the configuration. For) 75.6 712 P
1.59 (example, in a normal application, the designer may want to connect, say, the FF outputs to the PLB) 54 691 P
-0.4 (outputs, but does not care which FF is routed to which output. These decisions are made by placement and) 54 670 P
0.11 (routing algorithms. But in our case, to achieve complete testing of the output multiplexer, we must make) 54 649 P
0.1 (sure that the output multiplexer selects each one of its 9 inputs in turn \0504 FF outputs, 4 LUT outputs, and) 54 628 P
2.77 (the fast adder carry-out\051, so that we have a different output selection in each one of the 9 BIST) 54 607 P
0.56 (configurations. However, the FPGA CAD tools do not allow the user to control the output multiplexers) 54 586 P
-0.27 (\050the output multiplexer does not even appear in the user model since it is always part of \322invisible logic\323\051.) 54 565 P
-0.52 (These problems stem from the schematic le) 75.6 539 P
-0.52 (v) 280.79 539 P
-0.52 (el design entry typically used for the design of the system) 286.61 539 P
0.98 (function to be programmed into the FPGA. Although the CAD tools for schematic entry of the design) 54 518 P
2.23 (typically support the assignment of a function to a gi) 54 497 P
2.23 (v) 326.73 497 P
2.23 (en PLB in the array) 332.55 497 P
2.23 (, technology mapping in) 434.65 497 P
-0.21 (conjunction with placement and routing algorithms that are used to map the speci\336ed design into the PLB) 54 476 P
1.04 (and routing resources of the FPGA do not f) 54 455 P
1.04 (acilitate the le) 270.17 455 P
1.04 (v) 339.27 455 P
1.04 (el of control required to address the testing) 345.09 455 P
0.95 (problems described abo) 54 434 P
0.95 (v) 169.7 434 P
0.95 (e. Ho) 175.52 434 P
0.95 (we) 202.16 434 P
0.95 (v) 215.85 434 P
0.95 (er) 221.67 434 P
0.95 (, design editing CAD tools which allo) 230.52 434 P
0.95 (w a designer) 417.6 434 P
0.95 (to modify their) 484.1 434 P
-0.09 (design after technology mapping, placement, and routing do provide some useful control to address these) 54 413 P
0.36 (testing issues. These design editors typically work in conjunction some type of intermediate design files) 54 392 P
-0.1 (for the FPGA \050such as the \322.) 54 371 P
3 F
-0.1 (xnf\323) 189.71 371 P
0 F
-0.1 ( file for Xilinx or the \322.) 211.04 371 P
3 F
-0.1 (ncd) 322.09 371 P
0 F
-0.1 (\323 file for ORCA\051, which facilitate much more) 339.42 371 P
-0.31 (control over the final implementation of the BIST configuration than obtained via schematic design entry.) 54 350 P
0.61 (Therefore, we have found that the best solution implementation of the BIST approach is to create these) 54 329 P
-0.52 (intermediate design files as the design entry point for the BIST configurations. Due to the regular structure) 54 308 P
2.29 (of the floorplan in Figure) 54 287 P
2.29 (4, the placement and interconnection of TPGs, ORAs, and BUTs can be) 187.49 287 P
0.21 (generated algorithmically via software based on the size of a given FPGA. In addition, the configuration) 54 266 P
-0.46 (control provided at this level of design specification also allows selection of the output multiplexer as well) 54 245 P
(as setting \050or generating\051 desired logic values at the unused inputs to configuration multiplexers.) 54 224 T
1 14 Q
(7. Conclusions) 262.82 189.67 T
0 12 Q
2.37 (We have developed a new BIST approach for the programmable logic blocks in SRAM-based) 75.6 169 P
-0.3 (FPGAs. The approach takes advantage of the reprogrammability of FPGAs by reconfiguring the FPGA to) 54 148 P
0.12 (test itself. As a result, it completely eliminates the area overhead and the performance penalty associated) 54 127 P
-0.2 (with traditional BIST techniques. Because testability hardware is no longer needed in the design, all logic) 54 106 P
-0.18 (resources in the FPGA are available for system functionality. In addition, hardware design and diagnostic) 54 85 P
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "17" 17
%%Page: "18" 18
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(18) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
0 X
-0.64 (software development intervals can be reduced since the FPGA BIST approach is generic and is applicable) 54 712 P
0.81 (to all of the SRAM-based FPGAs in the system. Since the test sequences are generic in that they are a) 54 691 P
-0.62 (function of the FPGA architecture and not a function of what is programmed into the FPGA, this technique) 54 670 P
-0.46 (can also be used at every level of testing, from wafer- and package-level manufacturing tests to board- and) 54 649 P
0.23 (system-level field tests. The BIST configurations developed for this approach also test the portion of the) 54 628 P
-0.62 (programming interface of the FPGA which is associated with the PLBs. The exception is the programming) 54 607 P
1.7 (read-back circuitry, which can be tested by simply reading back each configuration after it has been) 54 586 P
0.12 (programmed. The BIST configurations also test a considerable portion \050but not all\051 of the programmable) 54 565 P
-0.46 (interconnection network since each configuration uses over 50% of the routing resources in the FPGA and) 54 544 P
-0.35 (the set of resources used will change with each configuration. BIST configurations for complete testing of) 54 523 P
2.65 (the interconnection network are currently being developed. A structured and regular floorplan was) 54 502 P
0.29 (developed to overcome the problems of scalability and routing limitations encountered as the size of the) 54 481 P
1.67 (FPGA increases. In addition, we found that the use of intermediate design files provided the control) 54 460 P
0.3 (necessary to ensure connections and logic values internal to the PLB to facilitate complete testing of the) 54 439 P
-0.7 (all PLBs in the FPGA. As a result, we have developed a program to generate the test sessions automatically) 54 418 P
(for ORCA FPGAs, given the size of the array of PLBs.) 54 397 T
1 F
(Ackno) 259.06 364 T
(wledgments) 292.28 364 T
0 F
-0.4 (This work was also supported in part by a grants from the University of Kentucky Center for Robotics and) 54 338 P
0.25 (Manufacturing Systems and from Lucent Technologies, Inc. Finally, the authors gratefully acknowledge) 54 317 P
0.21 (the support, assistance, and encouragement of C.T. Chen, Al Dunlop, and Carolyn Spivak of Bell Labs -) 54 296 P
(Lucent Technologies.) 54 275 T
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "18" 18
%%Page: "19" 19
612 792 0 FMBEGINPAGE
[0 0 0 1 0 0 0]
[ 0 1 1 0 1 0 0]
[ 1 0 1 0 0 1 0]
[ 1 1 0 0 0 0 1]
[ 1 0 0 0 0 1 1]
[ 0 1 0 0 1 0 1]
[ 0 0 1 0 1 1 0]
 7 FrameSetSepColors
FrameNoSep
0 0 0 1 0 0 0 K
54 746 558 756 R
7 X
0 0 0 1 0 0 0 K
V
54 34 558 44 R
V
0 12 Q
0 X
(19) 300 36 T
0 0 0 1 0 0 0 K
0 0 0 1 0 0 0 K
54 72 558 720 R
7 X
V
1 F
0 X
(Refer) 278.12 712 T
(ences) 306.55 712 T
0 F
([1] C. Jordan and W) 54 690 T
(. P) 150.54 690 T
(. Marnane, \322Incoming Inspection of FPGAs,) 161.88 690 T
(\323) 374.34 690 T
3 F
(Pr) 382.67 690 T
(oc. Eur) 394.13 690 T
(opean T) 428.92 690 T
(est Conf) 466.81 690 T
(.,) 506.3 690 T
0 F
( 1993.) 512.3 690 T
0.02 ([2] W) 54 671 P
0.02 (. K. Huang and F) 81.24 671 P
0.02 (. Lombardi, \322) 163.01 671 P
0.02 (An Approach to T) 226.75 671 P
0.02 (esting Programmable/Con\336gurable Field Program-) 313.62 671 P
(mable Gate Arrays,) 68.4 658 T
(\323) 161.2 658 T
3 F
(Pr) 169.52 658 T
(oc. IEEE VLSI T) 180.98 658 T
(est Symp.) 259.87 658 T
0 F
(, pp. 450-455, April 1996.) 305.2 658 T
0.3 0.03 ([3] W) 54 639 B
0.3 0.03 (. J. Kautz, \322T) 81.67 639 B
0.3 0.03 (esting for F) 146.15 639 B
0.3 0.03 (aults in Cellular Logic Arrays,) 202.28 639 B
0.3 0.03 (\323) 349.92 639 B
3 F
0.3 0.03 (Pr) 358.61 639 B
0.3 0.03 (oc. 8th Symp. Switc) 370.13 639 B
0.3 0.03 (hing and A) 465.11 639 B
0.3 0.03 (utomata) 518.45 639 B
(Theory) 68.4 626 T
(,) 101.74 626 T
0 F
( pp. 161-174, 1967.) 104.74 626 T
-0.29 ([4] P) 54 607 P
-0.29 (. R. Menon and A.D. Friedman, \322F) 76.04 607 P
-0.29 (ault Detection in Iterati) 241.79 607 P
-0.29 (v) 352.28 607 P
-0.29 (e Logic Arrays,) 358.1 607 P
-0.29 (\323) 431.66 607 P
3 F
-0.29 (IEEE T) 439.7 607 P
-0.29 (r) 474.42 607 P
-0.29 (ans. on Comput-) 478.91 607 P
(er) 68.4 594 T
(s) 78.28 594 T
0 F
(, V) 82.94 594 T
(ol. C-20, No. 5, pp. 524-535, May) 96.06 594 T
(, 1971.) 259.27 594 T
0.3 0.1 ([5] F) 54 575 B
0.3 0.1 (. Lombardi, D. Ashen, X. Chen, and W) 77.51 575 B
0.3 0.1 (. K. Huang, \322Diagnosing Programmable Interconnect Sys-) 270.5 575 B
(tems for FPGAs,) 68.4 562 T
(\323) 148.56 562 T
3 F
(Pr) 156.89 562 T
(oc.) 168.35 562 T
(A) 185.68 562 T
(CM/SIGD) 192.65 562 T
(A International. Symp. on FPGAs) 240.89 562 T
0 F
(, pp. 100-106, 1996.) 402.88 562 T
-0.02 ([6] B. F) 54 543 P
-0.02 (a) 91.45 543 P
-0.02 (wcett, \322) 96.6 543 P
-0.02 (Applications of Recon\336gurable Logic,) 132.94 543 P
-0.02 (\323) 316.7 543 P
3 F
-0.02 (Thir) 325.01 543 P
-0.02 (d Annual W) 345.24 543 P
-0.02 (orkshop on F) 400.76 543 P
-0.02 (ield-Pr) 464.18 543 P
-0.02 (o) 497.64 543 P
-0.02 (gr) 503.52 543 P
-0.02 (ammable) 514.01 543 P
(Lo) 68.4 530 T
(gic and Applications) 80.95 530 T
0 F
(, Oxford, Sept. 1993.) 180.29 530 T
([7] B. Ne) 54 511 T
(w) 98.69 511 T
(, \322Boundary-Scan Emulator for XC3000,) 106.57 511 T
(\323) 303.04 511 T
3 F
(XAPP Applications Handbook) 311.36 511 T
0 F
(, Xilinx, Oct. 1992.) 457.36 511 T
0.3 0.15 ([8] A. Russ and C. Stroud, \322Non-Intrusi) 54 492 B
0.3 0.15 (v) 253.06 492 B
0.3 0.15 (e Built-In Self-T) 259.04 492 B
0.3 0.15 (est for Field Programmable Gate Array and) 341.36 492 B
(Multi-Chip Module Applications\323,) 68.4 479 T
3 F
(Pr) 238.4 479 T
(oc. IEEE A) 249.86 479 T
(utomatic T) 303.28 479 T
(est Conf) 353.84 479 T
(.) 393.34 479 T
0 F
(, pp. 480-485, 1995.) 396.34 479 T
([9]) 54 460 T
3 F
(A) 70.99 460 T
(T&T F) 77.88 460 T
(ield-Pr) 110.35 460 T
(o) 143.81 460 T
(gr) 149.69 460 T
(ammable Gate Arr) 160.18 460 T
(ays Data Book) 249.98 460 T
0 F
(, A) 320.64 460 T
(T&T Microelectronics, April 1995.) 333.97 460 T
([10]) 54 441 T
3 F
(The Pr) 79.99 441 T
(o) 112.45 441 T
(gr) 118.33 441 T
(ammable Lo) 128.82 441 T
(gic Data Book) 188.36 441 T
0 F
(, Xilinx, Inc., 1993.) 257.69 441 T
([11]) 54 422 T
3 F
(Fle) 79.99 422 T
(x 8000 Pr) 95.75 422 T
(o) 142.54 422 T
(gr) 148.42 422 T
(ammable Lo) 158.9 422 T
(gic De) 218.45 422 T
(vice F) 249.92 422 T
(amily) 278.68 422 T
0 F
(, Data Sheet, Altera Corp., May 1993.) 304.56 422 T
0.3 0.04 ([12] \322Standard T) 54 403 B
0.3 0.04 (est Access Port and Boundary-Scan Architecture,) 135.67 403 B
0.3 0.04 (\323) 375.36 403 B
3 F
0.3 0.04 (IEEE Standar) 384.06 403 B
0.3 0.04 (d P1149.1-1990) 451.36 403 B
0 F
0.3 0.04 (, May) 529.52 403 B
(1990.) 68.4 390 T
0.3 0.07 ([13] E. McClusk) 54 371 B
0.3 0.07 (e) 135.91 371 B
0.3 0.07 (y) 141.13 371 B
0.3 0.07 (, \322V) 146.42 371 B
0.3 0.07 (erif) 165.67 371 B
0.3 0.07 (ication T) 181.96 371 B
0.3 0.07 (esting - A Pseudoe) 225.08 371 B
0.3 0.07 (xhausti) 317.44 371 B
0.3 0.07 (v) 352.32 371 B
0.3 0.07 (e T) 358.21 371 B
0.3 0.07 (est T) 373.55 371 B
0.3 0.07 (echnique,) 397.04 371 B
0.3 0.07 (\323) 443.18 371 B
3 F
0.3 0.07 (IEEE T) 451.96 371 B
0.3 0.07 (r) 487.7 371 B
0.3 0.07 (ans. on Com-) 492.26 371 B
(puter) 68.4 358 T
(s) 93.61 358 T
0 F
(, V) 98.28 358 T
(ol. C-33, No. 6, pp. 541-546, June, 1984.) 111.4 358 T
([14] A. v) 54 339 T
(an de Goor) 97.36 339 T
(,) 150.19 339 T
3 F
(T) 156.19 339 T
(esting Semiconductor Memories Theory and Pr) 161.76 339 T
(actice) 389.22 339 T
0 F
(, John W) 417.88 339 T
(ile) 460.39 339 T
(y and Sons, 1991.) 472.21 339 T
0.3 0.18 ([15] M. Abadir and H. Re) 54 320 B
0.3 0.18 (ghbati, \322Functional T) 184.01 320 B
0.3 0.18 (esting of Semiconductor Random Access Memories,) 290.61 320 B
0.3 0.18 (\323) 552.49 320 B
3 F
(Computing Surve) 68.4 307 T
(ys) 151.7 307 T
0 F
(, V) 161.7 307 T
(ol. 15, No. 3, pp. 118-139, September 1983.) 174.82 307 T
0.16 ([16] T) 54 288 P
0.16 (.Sridhar and J. P) 83.6 288 P
0.16 (. Hayes, \322Design of Easily T) 161.75 288 P
0.16 (estable Bit-Sliced Systems,) 299.37 288 P
0.16 (\323) 429.86 288 P
3 F
0.16 (IEEE T) 438.35 288 P
0.16 (r) 473.52 288 P
0.16 (ans. on Comput-) 478.01 288 P
(er) 68.4 275 T
(s) 78.28 275 T
0 F
(, V) 82.94 275 T
(ol. C-30, No. 11, pp. 842-854, No) 96.06 275 T
(v) 258.54 275 T
(ember) 264.36 275 T
(, 1981.) 293.87 275 T
0.3 0.15 ([17] C. Stroud, P) 54 256 B
0.3 0.15 (. Chen, S. K) 137.83 256 B
0.3 0.15 (onala, and M. Abramo) 198.8 256 B
0.3 0.15 (vici, \322Ev) 310.88 256 B
0.3 0.15 (aluation of FPGA Resources for Built-In) 354.91 256 B
0.3 0.13 (Self-T) 68.4 243 B
0.3 0.13 (est of Programmable Logic Blocks,) 99 243 B
0.3 0.13 (\323) 273.96 243 B
3 F
0.3 0.13 (Pr) 282.85 243 B
0.3 0.13 (oc.) 294.57 243 B
0.3 0.13 (A) 312.71 243 B
0.3 0.13 (CM/SIGD) 319.82 243 B
0.3 0.13 (A International. Symp. on FPGAs) 368.97 243 B
0 F
0.3 0.13 (, pp.) 536.18 243 B
(107-113, 1996.) 68.4 230 T
0.3 0.19 ([18] C. Stroud, S. K) 54 211 B
0.3 0.19 (onala, P) 154.82 211 B
0.3 0.19 (. Chen, and M. Abramo) 193.93 211 B
0.3 0.19 (vici, \322Built-In Self-T) 312.49 211 B
0.3 0.19 (est for Programmable Logic) 417.31 211 B
0.3 0.08 (Blocks in FPGAs \050Finally) 68.4 198 B
0.3 0.08 (, A Free Lunch: BIST W) 195.33 198 B
0.3 0.08 (ithout Ov) 317.3 198 B
0.3 0.08 (erhead!\051\323,) 363.77 198 B
3 F
0.3 0.08 (Pr) 416.19 198 B
0.3 0.08 (oc. IEEE VLSI T) 427.8 198 B
0.3 0.08 (est Symp) 508.7 198 B
0 F
0.3 0.08 (.,) 551.92 198 B
(pp. 387-392, 1996.) 68.4 185 T
0.3 0.06 ([19] C. Stroud, E. Lee, S. K) 54 166 B
0.3 0.06 (onala, and M. Abramo) 190.67 166 B
0.3 0.06 (vici, \322Selecting Built-In Self-T) 300.87 166 B
0.3 0.06 (est Conf) 451.45 166 B
0.3 0.06 (igurations for) 491.89 166 B
0.3 0 (Field Programmable Gate Arrays\323, to be published in) 68.4 153 B
3 F
0.3 0 (Pr) 330.68 153 B
0.3 0 (oc. IEEE A) 342.14 153 B
0.3 0 (utomatic T) 396.2 153 B
0.3 0 (est Conf) 447.12 153 B
0.3 0 (. \050A) 486.95 153 B
0.3 0 (UT) 503.99 153 B
0.3 0 (O) 519.12 153 B
0.3 0 (TEST-) 527.31 153 B
(CON\32596\051) 68.4 140 T
0 F
(, 1996.) 113.06 140 T
0 0 0 1 0 0 0 K
FMENDPAGE
%%EndPage: "19" 19
%%Trailer
%%BoundingBox: 0 0 612 792
%%PageOrder: Ascend
%%Pages: 19
%%DocumentFonts: Times-Roman
%%+ Times-Bold
%%+ Times-BoldItalic
%%+ Times-Italic
%%+ Symbol
%%EOF

--------------59E2B6001CFBAE393F54BC7E--

Article: 4797
Subject: FPGA ATM VHDL Megafunctions/Libraries
From: "Paul T. Shultz" <paul@csciences.com>
Date: Mon, 16 Dec 1996 08:14:34 -0800
Links: << >>  << T >>  << A >>
I am currently performing an ATM-25 survey.  I would like to know if any
of the FPGA vendors have support (VHDL libraries) for ATM-25?  I've seen
the offering from Altera.  I am looking for functions that perform the
physical, ATM, and AAL layers.

Thanks,

Paul T. Shultz
<paul@csciences.com>
Article: 4798
Subject: Experience with Altera 10K Family
From: "Stan Hodge" <srhodge@foryou.net>
Date: 16 Dec 1996 17:38:15 GMT
Links: << >>  << T >>  << A >>
All,

I am currently in a mode looking at FPGA's with gate count > 10,000.  I
have seen information on ALTERA's new 10K line.  Does anyone have any
experence with these - good or bad?  The price is the primary driver of the
interest...

					Stan Hodge
					Grimes Aerospace
					srhodge@foryou.net
Article: 4799
Subject: Re: ASICs Vs. FPGA in Safety Critical Apps.
From: Randy Tietz <rrtietz@cca.rockwell.com>
Date: Mon, 16 Dec 1996 12:30:56 -0600
Links: << >>  << T >>  << A >>
DISCLAIMER:  The opinions expressed are my own and do not neccessarily
  reflect those of my employer.  My experience is in commercial avionics
  and may not be applicable to other safety critical apps.

Ray Andraka wrote:

> I'm not sure I understand the reluctance to use an SRAM based FPGA in a
> safety critical application.  The SRAM based parts are at least as
> reliable as the ASIC and OTP FPGA counterparts and offer advantages that
> are not available to the others.

If I had my druthers, I'd also steer away from SRAM-based FPGAs.  It is
not that they are technically inferior to antifuse parts, but rather
that
SRAM-based FPGAs bring with them some extra baggage from a safety
assessment and reliability perspective.  For safety assessment you have
to be able to prove to people who don't know all the technical details
of any particular FPGA technology that bad things won't happen.  The
fact that the hardware is dynamically configurable immediately raises
red flags to even the most naive.  Now it is not that you can't make
a valid argument, it is just that you don't need to make that argument
with antifuse parts.  From a reliability perspective you also now will
most likely have two parts to complete the intended function instead
of just one.  You may also need to add monitoring circuitry to verify
that everything has been loaded as one would expect.

Other concerns are the actual configuration time whether it be on power
up or after a error is detected, the reaction time from when a wrong
configuration is detected until it is corrected (exposure time), and
the susceptibility to short power interrupts.

Don't get me wrong - I KNOW there are SRAM-based FPGAs flying in
critical
systems.  It is just my opinion that antifuse FPGAs are easier to design
into critical systems.
> 
> First, there are no fuses or antifuses to deteriorate with age or be
> incompletely programmed.  This eliminates a failure mode that is
> relatively common with fused/antifused devices.
> 
I'm not sure what you base this claim on.  Both Actel and Quicklogic
have published reliability reports that claim failure rates in the 10-15
FITs range.

> Second, and perhaps even more important, the ability to reload the FPGA
> program permits the use of  additional configuration(s) to test the
> device and its interconnect completely.  This can be done each time the
> system initializes.

My personal opinion is that it would take a pretty shrewd argument to
make this a positive in a safety assessment.  Now you have to also prove
that you can't get into these "other configuration(s)" when you're not
supposed to be.
> 
> The ability to infinitely reload the device also permits more complete
> testing at the time of manufacture than the OTP and ASIC parts.  Thus
> the device can be guaranteed to be 100% without applying an application
> specific set of test vectors (which may or may not catch all faults).
> 
> Xilinx devices permit the program to include a CRC to verify the it
> loads correctly.  This feature can be used to provide an additional
> check on the programming.  The readback capability can also be utilized
> to monitor the program in the device.
> 
> The RAM used to hold the configuration in the SRAM devices is
> intentionally a slow RAM cell to provide significantly higher noise
> immunity than SRAMs intended for data applications.  This reduces the
> likelyhood of program upset to near zero-much lower than the likelyhood
> of program upset in a conventional microprocessor based approach.

This may be the case but again the FAA and DERs are more sensitive to
SRAM upsets.  They are not device physicist.

> Microprocessors are fairly well accepted even in safety critical
> applications.  The processors also contain proprietary circuits and
> require a large degree of analysis to fully understand all the fault
> modes.  The regularity of the FPGA array presents a significantly
> smaller fault analysis challenge.

We use a lot of our own proprietary uPs in critical apps.  This allows
us to know exactly what is inside the uP and make the appropriate
analyses.
> 
> In my experience, if the device loads correctly, it will remain
> correct.  Given these observations, and the unmatched flexibility of the
> SRAM based arrays I'd pick an SRAM FPGA for safety critical apps before
> either the OTP or the ASIC.  Of course, a fault tolerant logic design
> helps in any of these cases.
> 
Certainly agree that robust design has more to do with making a product
perform correctly than the particular technology that implements it.
Personally, however I'd would not pick SRAM-based FPGAs for safety
critical apps unless there was a darn good reason and it really has
little to do with technical rationale.

For those interested in flight critical hardware apps, here's a list of
documents that might be of interest:

RTCA SC-180 - Design Assurance Guidance for Airborne Electronic
Hardware.
  This is still in committee.  I believe they are up to draft 7.  This
  will have some pretty interesting implications on hardware design.

RTCA SC-178(B or C) - This is the software version of SC-180.  It's been
  around for awhile.  This is somewhat of a backdrop for SC-180.

RTCA SC-160 - This gets into the environmental issues relating to flight
  hardware.

SAE ARP 4754 - Certification Considerations for Highly Integrated or
  Complex Aircraft Systems.

SAE ARP 4761 - Guidelines and Methods for Conducting the Saftey
Assessment
  Process on Civil Airborne Systems and Equipment.

FAA AC 25.1309-1A - The infamous FAA safety rule.

FAA 777 IOR 1546-010 - This deals with the FAA concerns during the 777
  development for ALL programmable parts - ROMs, PALs, PLDs, CPLDs,
FPGAs,
  and ASICs.  This is in part is what precipitated the formation SC-180.

Randy Tietz
Rockwell Collins
rrtietz@cca.rockwell.com


Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarApr2017

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search