1. Field of the System
The present system relates to field programmable gate array (FPGA) devices. More specifically, the system relates to a parallel-programmable antifuse FPGA and a method for programming a parallel-programmable antifuse FPGA.
2. Background
FPGAs are known in the art. An FPGA comprises any number of logic modules, an interconnect routing architecture and programmable elements that may be programmed to selectively interconnect the logic modules to one another and to define the functions of the logic modules. To implement a particular circuit function, the circuit is mapped into an array and the wiring channels appropriate connections are programmed to implement the necessary wiring connections that form the user circuit.
A field programmable gate array circuit can be programmed to implement virtually any set of functions. Input signals are processed by the programmed circuit to produce the desired set of outputs. Such inputs flow from a user's system, through input buffers and through the circuit, and finally back out the user's system via output buffers. Such buffers may provide any or all of the following input/output (I/O) functions: voltage gain, current gain, level translation, delay, signal isolation or hysteresis.
An FPGA core tile may be employed as a stand-alone FPGA, repeated in a rectangular array of core tiles, or included with other devices in a system-on-a-chip (SOC). The core FPGA tile may include an array of logic modules, and input/output modules. Horizontal and vertical routing channels provide interconnections between the logic modules and the I/O modules. Programmable connections are provided by programmable elements between the routing resources.
The programmable elements in an FPGA can be either one-time programmable or re-programmable. Re-programmable elements used in FPGA technologies may comprise transistors or other re-programmable elements as is well known to those of ordinary skill in the art. One-time programmable elements used in FPGA technologies may comprise antifuse devices.
Antifuse devices are well known in the integrated circuit art. Antifuse devices comprise a pair of conductive electrodes separated by at least one layer of antifuse material and may include one or more diffusion barrier layers. Prior to programming, antifuses exhibit very high resistance between the two electrodes and may be considered to be open circuits. A programming process disrupts the antifuse material and creates a low-impedance connection between the two conductive electrodes.
The antifuses in an antifuse FPGA are programmed one antifuse at a time. There are two components considered when computing total programming time in an antifuse FPGA—overhead time (Toh) and fuse time (Tfuse). Overhead time is the time required for a computer system to set a programming environment that includes reading data from a computer disk, compiling the data, translating the data to a bit stream readable by the computer and loading the bit stream into a long shift register (LSR). The LSR is the main mechanism to setup a program/test environment in an antifuse FPGA.
Fuse time is the time it takes to program an individual antifuse. Fuse time is usually an average based on the total number of antifuses being programmed since each antifuse may have a slightly different programming time. The total time entailed in programming an antifuse FPGA is the overhead time plus the sum of the fuse times as set forth in the equation below.Ttotal=Toh+ΣTfuse 
FIG. 1 is a schematic diagram illustrating an antifuse prior to programming in a prior-art antifuse FPGA. Antifuse 12 to be programmed is coupled between horizontal routing track 18 and vertical routing track 24. Horizontal routing track 18 and vertical routing track 24 are used to route signals in the FPGA after programming. Each routing track has a direct-address transistor associated with it having its source/drain coupled to the routing track. For example, in circuit 10, direct address transistor 14 has its source/drain coupled to horizontal track 18 and its other source/drain coupled to programming voltage line 20 which generally runs perpendicular to horizontal routing track 18. Direct-address transistor 14 has its gate coupled to horizontal direct-address line 28 which runs perpendicular to programming voltage line 20. Direct-address transistor 16 has its source/drain coupled to vertical routing track 24 and its other source drain coupled to programming voltage line 22 which generally runs perpendicular to vertical routing track 24. Direct-address transistor 16 has its gate coupled to vertical direct-address line 26 which runs perpendicular to programming voltage line 22.
FIG. 2 is a schematic diagram of the programming path of antifuse 12 immediately prior to programming. Circuit 10 comprises antifuse 12 coupled between horizontal routing track 18 and vertical routing track 24, direct-address transistor 14 and direct-address transistor 16. To program antifuse 12, Vpp is applied to the source/drain of direct-address transistor 14 and ground is applied to the source/drain of direct-address transistor 16 and a super voltage (Vsv) is applied to the gates of transistors 14 and 16. Antifuse 12 is shown programmed in the schematic drawing illustrated in FIG. 3. As also shown in FIG. 3, as current flows through the ruptured dielectric of antifuse 12, the resistance level drops. This is referred to by those skilled in the art as soaking.
FIG. 4 is a schematic diagram illustrating the problems inherent in concurrent programming of antifuses in the prior art. Antifuses 52 and 54 are the fuses to be programmed. Antifuses 56 and 58 are not to be programmed. Based on the programming algorithm set forth above, vertical routing tracks 60 and 62 are charged to Vpp and horizontal routing tracks 64 and 66 are pulled down to ground. Antifuses 52 and 54 will see full Vpp across the dielectric and rupture. However, while antifuses 56 and 58 are not to be programmed, they will also have full Vpp stress across the dielectric and may be programmed despite the intention that they not be programmed.
In an antifuse FPGA, the antifuses in the FPGA are programmed one at time. As the size of the FPGA increases, the number of antifuses becomes much greater and the programming time increases. Hence, there is a need for an antifuse FPGA with a shorter programming time. Thus, there is also a need for an antifuse FPGA in which the antifuses to be programmed can be concurrently programmed.