1. Field of the Invention
The present invention relates to field-programmable gate array (FPGA) integrated circuits. More particularly, the present invention relates to a versatile adder circuit for an FPGA.
2. The Prior Art
Adder circuits are known in the prior art. Numerous adder circuits have been developed for use in FPGA applications.
When the carry out (CO) signal is produced by a 2:1 multiplexer from inputs P, G, and CI as in the implementations shown in
A logic module for an FPGA includes a LUT formed from an N-level tree of 2:1 multiplexers. Each of the N inputs to the LUT is connected to the select inputs of the multiplexers in one level of the tree. As used in this disclosure, unless the context dictates otherwise, the “first” level of a tree is the “bottom” or “trunk” level, the output of which is the output of the entire tree. As the tree is parsed “upward” toward the input stage of the tree, the levels increase (i.e., second, third, fourth . . . Nth level). Each of the data inputs at the leaves (top) of the tree is driven by a configuration memory cell that produces either a logic 0 or a logic 1. The output of the single multiplexer at the trunk (bottom) level of the tree forms a Y output and is coupled to one input of an XOR gate and to the select input of a two-input carry multiplexer. The 0 input of the carry multiplexer is coupled to a G input. A CI input is coupled to the other input of the XOR gate and to the 1 input of the carry multiplexer.
One aspect of the present invention is that an internal signal of the LUT may be “tapped” to provide a source for the input “G.”
According to another aspect of the present invention, the XOR gate may be replaced by a multiplexer that drives the A input of the first level of the tree.
According to yet another aspect of the present invention, higher order inputs are presented to two LUTs and the A input drives the select input of a first multiplexer that selects between the outputs of the two LUTs. The output of the first multiplexer drives one input of an XOR gate. The other input of the XOR gate is driven by a CI input. A carry multiplexer has one data input driven by the CI input and another data input driven by the output of a second multiplexer that selects between the outputs of the two LUTs, a logic 0 and a logic 1. The select input of the carry multiplexer is driven by the output of a third multiplexer that selects between the output of the first multiplexer and a logic 0. The select inputs of the second and third multiplexers are driven from FPGA configuration circuitry.
Persons of ordinary skill in the art will realize that the following description of the present invention is illustrative only and not in any way limiting. Other embodiments of the invention will readily suggest themselves to such skilled persons.
The present invention provides a generic logic cell for use in an FPGA that can efficiently and flexibly implement arithmetic and related functions with a minimum of added circuitry, power and delay.
Referring now to
As shown in
As shown in the dashed box 100 of
The output of multiplexer 12 forms the output “Y” of logic module 10-A. The output of multiplexer 12 is also coupled to one input of XOR gate 44. As used in this disclosure “XOR gate” means a logic circuit performing a logical exclusive-OR function, or any circuit or combination of circuits performing a logically equivalent function. The other input of XOR gate 44 is coupled to the carry-in (CI) input of logic module 10-A. The output of XOR gate 44 forms the sum output “S” of logic module 10-A.
The CI input of logic module 10-A is also coupled to one data input of carry multiplexer 46. The other data input of carry multiplexer 46 is coupled to the “G” input of logic module 10-A. The select input of carry multiplexer 46 is coupled to the output of multiplexer 12. The output of carry multiplexer 46 forms the carry-out (CO) output of logic module 10-A.
The logic module shown in
One aspect of the present invention is that an internal signal of the LUT may be “tapped” to provide a better source for the input “G.” This provides additional flexibility with negligible extra hardware. The taps may be hardwired or selectable using switching elements such as multiplexers as exemplified by multiplexer 56 shown in
There are many possible choices for the internal signal to be tapped. In principal, the tap points can be anywhere in the LUT tree. A tap point can be described using a vector (V_A, V_B, . . . ). The number of fields in the vector is equal to the level of the multiplexer where the tap point drives. The value of the fields describe how to parse the tree, starting at the bottom (trunk) of the tree at multiplexer 12 to traverse the branches to reach a tap point to connect the relevant multiplexer output to input G.
The following examples are based on
L1 (48): the tap point is (V_A=0); number of fields is 1, from LUT tree to L1 go to the 0-input leg of the first level multiplexer. L1′ (50): the tap point is (V_A=1).
To describe a tap point at the inputs of the second level multiplexers:
L2 (52): the tap point is (V_A=0, V_B=0); number of fields is 2, from LUT tree to L2 go to the 0-input leg of the first level multiplexer, then 0-input leg of the second level multiplexer. If the tap point is the 0 input of multiplexer 16, then tap point is (V_A=1, V_B=0).
Given a tap point, e.g., (V_A, V_B, V_C), then the adder can perform: Add (f(D, . . . ), g(A, B, C, D, . . . ), CI), where:
f(D, . . . ) is any function of (D, . . . );
g(A, B, C, D, . . . ) is any function of the LUT inputs (A, B, C, D, . . . ) such that when A=V_A, B=V_B, C=V_C, g=0.
Four of the possible useful locations for the tap are labeled L1 (reference numeral 48), L1′ (reference numeral 50), L2 (reference numeral 52), and L3 (reference numeral 54) in
Turning now to
One possible use of logic module 10-B is shown in
L1=B
L1′=not(B)
Y=xor(A,B)
A more complex example using logic module 10-B according to the present invention is shown in
L1=and(C,D)
L1′=xor(B,and(C,D))
Y=xor(and(A,B), and(C,D))
A more general use is shown in
Another use where L2 is the tap point is shown in
A use where L3 is the tap point is shown in
There are other variations and extensions of the present invention that may be used singly or in combination. One such variation may be understood with reference to
When not used for arithmetic purposes (normal mode) the output of the 4-input LUT comprising 2:1 multiplexers 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38 and 40 is brought out as Y. In arithmetic mode, S is the sum generated from “Y” and “CI” in XOR gate 44. A multiplexer 64 whose select input is driven by FPGA configuration circuitry 66, provides either the “Y” output of the 4-input LUT or a logic “0” as the “P” select input to carry multiplexer 46, and CO is the carry output to the next logic module in the chain. Y and S may optionally be combined in subsequent logic, or selected between using subsequent configuration multiplexers.
By providing that FPGA configuration circuitry allows a choice of 0, 1 or the tap location as the source of G and also a choice of 0 or Y as the source of P, a way is provided to force CI of the subsequent stage in the carry chain to a known value, which is useful to initialize the carry input of the least-significant bit. In addition, provision may be made to allow G to be selected from the taps L1 or L2 or from L1 or L1′ as in
The present invention provides several advantages. Rapid carry propagation reduces need for additional carry look-ahead circuitry, although the present invention could be used with carry look-ahead circuitry for even faster speeds if desired. In addition, arithmetic is supported with very little additional circuitry beyond the basic 4-input LUT. Any subset of inputs A, B, C, and D may be inverted. Inputs B, C, and D can be inverted by appropriately altering the configuration of the L1 and L1′ 3-input LUTs of
Returning to
While embodiments and applications of this invention have been shown and described, it would be apparent to those skilled in the art that many more modifications than mentioned above are possible without departing from the inventive concepts herein. The invention, therefore, is not to be restricted except in the spirit of the appended claims.
This application claims an invention which was disclosed in Provisional Application No. 60/911,251, filed Apr. 11, 2007, entitled “LOGIC MODULE INCLUDING VERSATILE ADDER FOR FPGA.” The benefit under 35 USC §119(e) of the United States provisional application is hereby claimed, and the aforementioned provisional application is hereby incorporated herein by reference.
Number | Name | Date | Kind |
---|---|---|---|
3728532 | Pryor | Apr 1973 | A |
5349250 | New | Sep 1994 | A |
5481206 | New et al. | Jan 1996 | A |
5724276 | Rose et al. | Mar 1998 | A |
5818255 | New et al. | Oct 1998 | A |
6157209 | McGettigan | Dec 2000 | A |
6288570 | New | Sep 2001 | B1 |
6708191 | Chapman et al. | Mar 2004 | B2 |
6873181 | Pedersen | Mar 2005 | B1 |
7016932 | Kantabutra et al. | Mar 2006 | B2 |
7129748 | McCollum et al. | Oct 2006 | B1 |
7185035 | Lewis et al. | Feb 2007 | B1 |
7218139 | Young et al. | May 2007 | B1 |
20030001613 | Nakaya | Jan 2003 | A1 |
Number | Date | Country | |
---|---|---|---|
60911251 | Apr 2007 | US |