FPGA with improved structure for implementing large multiplexers

Information

  • Patent Grant
  • 6806732
  • Patent Number
    6,806,732
  • Date Filed
    Tuesday, February 25, 2003
    22 years ago
  • Date Issued
    Tuesday, October 19, 2004
    20 years ago
Abstract
Novel structures for implementing wide multiplexers from user designs in FPGA CLBs. Input multiplexers providing the function generator data input signals are modified to function not just based on values stored in configuration memory cells, but also under the control of user signals. Thus, the input multiplexers of the invention are much more flexible than traditional input multiplexers. In one embodiment, the improved data input multiplexer is provided on two of four data input terminals of the function generator, enabling the implementation of an 8-to-1 multiplexer using only a single function generator. Another embodiment applies the concept of mixed memory cell and user control of a multiplexer to the general interconnect structure of an FPGA.
Description




FIELD OF THE INVENTION




The invention relates to Field Programmable Gate Arrays (FPGAs). More particularly, the invention relates to structures for efficiently implementing large multiplexers in FPGAS.




BACKGROUND OF THE INVENTION




Programmable logic devices (PLDs) are a well-known type of digital integrated circuit that can be programmed to perform specified logic functions. One type of PLD, the field programmable gate array (FPGA), typically includes an array of configurable logic blocks (CLBs) surrounded by a ring of programmable input/output blocks (IOBs). The CLBs and IOBs are interconnected by a general interconnect structure. Some FPGAs also include additional logic blocks with special purposes (e.g., DLLS, RAM, and so forth).




The general interconnect structure, CLBs, IOBs, and other logic blocks are typically programmed by loading a stream of configuration data (bitstream) into internal configuration memory cells that define how the programmable elements are configured. The configuration data may be read from memory (e.g., an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the functionality of the FPGA.




Efficient use of FPGA resources is important, because such efficiency can allow a user design to fit into a smaller (and less expensive) FPGA. For some very large designs, inefficient resource usage can result in an implementation so large it cannot be implemented in any FPGA available from a given FPGA provider. Therefore, an FPGA that can more efficiently implement common user functions provides a marketing advantage over its competitors. Hence, efficient FPGA implementations of common functions are highly desirable.




One function often used in user designs is the multiplexing function. A user defines a circuit to be implemented in the FPGA using either schematic entry, where components are explicitly identified for placement in the design, or in a high-level design language (HDL), where the behavior of the circuit is described and synthesis software is used to identify components to be used in the circuit implementation. Regardless of which method is used to specify the design, the resulting circuit implementation is likely to include a large number of multiplexers.




Multiplexers are especially common in circuit netlists generated by synthesis software, and the use of synthesis software is increasing as user circuits increase in size. Therefore, an efficient multiplexer implementation is an increasingly desirable feature in an FPGA.




SUMARY OF THE INVENTION




The invention provides novel structures for implementing wide multiplexers from user designs in FPGAS. Traditionally, wide multiplexers from user designs are implemented using common FPGA elements such as function generators and smaller dedicated multiplexers. On the other hand, existing input multiplexers (which provide data input signals to the function generators) are controlled solely by signals stored in configuration memory cells. Hence, the existing input multiplexers are not available to implement wide multiplexers controlled by user control signals. According to the invention, the input multiplexers providing the function generator data input signals are modified to function under control of user signals. Thus, the input multiplexers of the invention are much more flexible than traditional input multiplexers.




A first aspect of the invention provides an FPGA configurable logic block (CLB) that includes: first and second bypass input multiplexers providing bypass signals from an FPGA general interconnect structure; a function generator with data input terminals; and a first data input multiplexer that provides signals from the general interconnect structure to one of the data input terminals of the function generator. (The terms “bypass input multiplexer” and “bypass multiplexer” are used herein to describe input multiplexers driving bypass input signals to the CLB, i.e., data input signals bypassing the function generator data input terminals. For example, in a Virtex or Virtex-II FPGA a bypass input signal BX or BY can drive the flip-flop directly, without passing through the function generator.) The first data input multiplexer includes a decoder circuit and a second stage multiplexer. The decoder circuit decodes user signals provided by the first and second bypass input multiplexers and provides control signals to select terminals of the second stage multiplexer. As directed by these control signals, the second stage multiplexer selects one of several values from the general interconnect structure and provides it to the function generator input terminal.




In one embodiment, the first data input multiplexer includes third multiplexers in addition to the second stage multiplexer. The third multiplexers are controlled by configuration data stored in configuration memory cells, in a manner similar to that of presently known input multiplexers.




In another embodiment, the second stage multiplexer is implemented as a group of pass transistors gated by logic gates. In one embodiment, the logic gates are controlled by both configuration memory cells and the control signals from the decoder circuit.




The data input multiplexer of the invention can be used on one, two, or more of the data input signals to the function generator. In one embodiment, the improved data input multiplexer is provided on two of four data input terminals of the function generator. In another embodiment, each data input terminal of the function generator uses an improved data input multiplexer according to the invention.




A second aspect of the invention provides a multiplexing input structure in an FPGA. The multiplexing input structure includes a first multiplexing circuit having data input terminals receiving user signals from the general interconnect structure, a select terminal receiving a bypass input signal also from the general interconnect structure, and an output terminal that drives one of the data input terminals of a CLB function generator.




In another embodiment, the multiplexing input structure includes second multiplexing circuits in addition to the first multiplexing circuit. The second multiplexing circuits are controlled by configuration data stored in configuration memory cells.




In another embodiment, the first multiplexing circuit is implemented as a group of pass transistors gated by logic gates. In one embodiment, the logic gates are controlled by both memory cells and the control signals from the decoder circuit.




According to a third aspect of the invention, an interconnect multiplexing circuit is provided that can be used to drive signal lines in the general interconnect structure. The interconnect multiplexing circuit of the invention extends the concept of mixed memory cell and user control of a multiplexer presented herein into the general interconnect structure of an FPGA.




According to one embodiment, the invention provides an interconnect multiplexing circuit that includes a first multiplexing structure having data input terminals coupled to receive signals from the general interconnect structure, a first select terminal receiving a signal from a signal line in the general interconnect structure, a second select terminal receiving a signal from a configuration memory cell, and an output terminal that drives one of the signal lines making up the general interconnect structure.











BRIEF DESCRIPTION OF THE DRAWINGS




The present invention is illustrated by way of example, and not by way of limitation, in the following figures, in which like reference numerals refer to similar elements.





FIG. 1

is a simplified block diagram of a “slice” (a portion of a Configurable Logic Block) from a Virtex™ or Virtex™-II FPGA, and the input multiplexers providing the input signals to the look-up tables (LUTs) of the slice.





FIG. 1A

schematically illustrates the left slice of a Virtex CLB, which comprises two slices.





FIG. 1B

schematically illustrates the right slice of a Virtex CLB.





FIG. 2

is a schematic diagram of one input multiplexer IMUX from the slice pictured in FIG.


1


.





FIG. 3

shows how an 8-to-1 multiplexer is traditionally implemented in an FPGA using 4-input LUTs.





FIG. 4

shows how an 8-to-1 multiplexer can be implemented using the “F5” and “FX” function generators included in the CLBs of the Virtex-II FPGA.





FIG. 5

shows another way in which an 8-to-1 multiplexer can be implemented in the FPGA of

FIG. 1

, using the LUTs and the carry chain.





FIG. 6

is a schematic diagram of a first novel input multiplexer IMUXn that can be used with an FPGA CLB (e.g., with the slice of

FIG. 1

) to provide added multiplexing capability, according to a first embodiment of the invention.





FIG. 7

is a schematic diagram of a second novel input multiplexer IMUX


8


that can be used with an FPGA CLB (e.g., with the slice of

FIG. 1

) to provide added multiplexing capability, according to a second embodiment of the invention.





FIG. 7A

shows a first NAND-gate that can be used with the embodiment of FIG.


7


.





FIG. 7B

shows a second NAND-gate that can be used with the embodiment of FIG.


7


.





FIG. 8

shows how the input multiplexer of

FIG. 7

can be used in a Virtex-II slice to implement an 8-to-1 multiplexer included in a user circuit.





FIG. 9

shows how the input multiplexer of

FIG. 7

can be used in a Virtex-II slice to implement two related 8- to-1 multiplexers in a single such slice.





FIG. 10

is a schematic diagram of a third novel input multiplexer I


32


MUX that can be used with an FPGA CLB (e.g., with the slice of

FIG. 1

) to provide yet more multiplexing capability, according to a third embodiment of the invention.





FIG. 10A

shows a first AND-NOR gate that can be used with the embodiment of FIG.


10


.





FIG. 10B

shows a first NOR-gate that can be used with the embodiment of FIG.


10


.





FIG. 11

is a schematic diagram of a novel interconnect multiplexing circuit IMUXI that can be included in the general interconnect structure of an FPGA to provide more flexible routing of user signals, according to a fourth embodiment of the invention.











DETAILED DESCRIPTION OF THE DRAWINGS




In the following description, numerous specific details are set forth to provide a more thorough understanding of the present invention. However, it will be apparent to one skilled in the art that the present invention may be practiced without these specific details.





FIG. 1

is a simplified block diagram showing a portion of a configurable logic block (CLB) in an FPGA. The CLB portion shown in the figure can be, for example, one “slice” of a Virtex™ or Virte™-II FPGA, available from Xilinx, Inc. The Virtex and Virtex-II FPGA slices illustrated herein are selected merely as examples to show how the invention can be used, for example, to extend the functionality of existing FPGAs. The invention is not intended to be limited in application to these exemplary FPGAS.




A Virtex or Virtex-II slice includes two function generators F and G, two memory elements FFX and FFY, two multiplexers MF and MG, and two carry multiplexers CF and CG. Function generator F has four data input terminals F


1


-F


4


, and provides an output signal to a select terminal of carry multiplexer CF and to an input terminal of multiplexer MF. (In the present specification, the same reference characters are used to refer to terminals, signal lines, and their corresponding signals.) Multiplexer MF selects among input signals from function generator F, an F5 multiplexer (not shown in FIG.


1


), and an XOR gate (not shown in FIG.


1


), and provides an output signal to an output terminal X and to memory element FFX.




Similarly, function generator G has four data input terminals G


1


-G


4


, and provides an output signal to a select terminal of carry multiplexer CG and to an input terminal of multiplexer MG. Multiplexer MG selects among input signals from function generator G, an FX multiplexer (not shown in FIG.


1


), an XOR gate (not shown in FIG.


1


), and a carry out signal COUT, and provides an output signal to an output terminal Y and to memory element FFY.




Carry multiplexers CF and CG form a carry chain from a carry in terminal CIN to a carry out terminal COUT. Carry multiplexer CF selects between a high signal (“1”), a low signal (“0”), a bypass signal BX, the carry in signal CIN, and other signals (not shown), under control of the output signal from function generator F. Carry multiplexer CG selects between a high signal, a low signal, the output signal from carry multiplexer CF, and other signals (not shown), under control of the output signal from function generator G. Carry multiplexer CG provides output signal COUT to a YB output terminal of the slice and also to the Y output terminal (through multiplexer MG).




Note that one of the input signals to carry multiplexer CF is a bypass input terminal. A “bypass input terminal,” as the term is used herein, provides a user data signal that bypasses the function generator data input terminals (F


1


-F


4


, G


1


-G


4


) in the slice. Although each bypass signal BX, BY can optionally drive the “DI” input terminal of the corresponding function generator (see FIGS.


1


A and


1


B), the bypass signal is not provided to one of the four data input terminals (F


1


-F


4


, G


1


-G


4


) of the function generator. (The DI input terminals are specialized function generator input signals that are only used when the function generator is programmed to function as a RAM or a data shift register, not as the more general lookup table function. Therefore, the DI input terminals are not considered to be function generator data input terminals as the term is used in the present specification.) The bypass input signals BX and BY and their destinations within the CLB are shown in

FIGS. 1A and 1B

, where the signals appear as BF, BG, BH, and BJ.




A Virtex CLB includes two slices. A Virtex-II CLB includes four slices, each slice being similar (at the level of detail shown) to a Virtex slice. For simplicity, the smaller of these two CLBs (the Virtex CLB) is illustrated in

FIGS. 1A and 1B

. These figures show the slice: in more detail than FIG.


1


. For example, the F5 and FX function generators and their connections are shown. The F5 and FX function generators are discussed below with reference to FIG.


4


.




The Virtex CLB is described by Young et al. in U.S. Pat. No. 5,920,202 and shown in

FIGS. 4A and 4B

therein. (U.S. Pat. No. 5,920,202 is hereby incorporated herein by reference.) These figures are reproduced in

FIGS. 1A and 1B

of the present specification. Young et al. describe the figures in detail, therefore, the description is not repeated here.




The Virtex FPGA is also described in pages 3-75 through 3-96 of the Xilinx 2000 Data Book entitled “The Programmable Logic Data Book 2000”, published in April of 2000, available from Xilinx, Inc., 2100 Logic Drive, San Jose, Calif. 95124, which pages are incorporated herein by reference. The Virtex-II FPGA is described in pages 33-75 of the “Virtex-II Platform FPGA Handbook”, published in December of 2000, and also available from Xilinx, Inc. These pages are also incorporated herein by reference.





FIG. 1

also shows the interconnections between the slice and the general interconnect structure of the Virtex-II FPGA. Input signals from the general interconnect structure (labeled “144 Input Signals” in

FIG. 1

) are provided to input multiplexers IMUXG


1


-IMUXG


4


, INUXF


1


-IMUXF


4


, IMUXY, and IMUXX. Each of input multiplexers IMUXG


1


-IMUXG


4


and IMUXF


1


-IMUXF


4


selects one of 36 input signals and provides the selected signal to a data input terminal of one of the function generators. Bypass input multiplexers IMUXY and IMUXX each select one of 32 input signals and provide one of the signals to a bypass input terminal of the CLB. The selection is made under the control of values stored in configuration memory cells, as shown in FIG.


2


.





FIG. 2

shows a prior art implementation of an input multiplexer IMUX from FIG.


1


. This implementation is used, for example, in a Virtex-II CLB to drive the function generator data input terminals. Thus, input multiplexer IMUX of

FIG. 2

corresponds to multiplexers IMUXG


1


-IMUXG


4


and IMUXF


1


-IMUXF


4


in FIG.


1


.




Input multiplexer IMUX includes four 9-to-1 multiplexers MUX


0


-MUX


3


, a 4-to-1 multiplexer MUX


4


, configuration memory cells MC


0


-MC


3


driving the select terminals of multiplexer MUX


4


, and configuration memory cells MC


4


-MC


12


driving the select terminals of multiplexers MUX


0


-MUX


3


. Multiplexers MUX


0


-MUX


3


each select one of nine input signals, of which eight are supplied (via the general interconnect structure) by other sources within the FPGA and of which one is a feedback signal routed back from an output terminal of the same CLB. The four output signals from multiplexers MUX


0


-MUX


3


are provided to multiplexer MUX


4


, which selects one of the four signals as the IMUX output signal. The selected signal is buffered in buffering circuit BUF and applied to a data input terminal of the corresponding function generator. Buffer BUF can include (in addition to other circuitry) one or more inverters, i.e., it can be inverting or non-inverting.




Note that the entire multiplexing structure of multiplexer IMUX is controlled by values stored in configuration memory cells MC


0


-MC


12


Thus, this structure cannot be used to implement any multiplexing function where one or more select signals are user control signals (i.e., signals in the user circuit that change value during the operation of the user circuit).





FIG. 3

shows a first well-known implementation of an 8-to-1 multiplexer in an FPGA. The 8-to-1 multiplexer is shown as an exemplary wide multiplexer that can be implemented in an FPGA. However, the structures of the invention can be used to implement multiplexers both wider and narrower than the 8-to-1 multiplexer. Table 1 is a truth table for the exemplary 8-to-1 multiplexers of

FIGS. 3-5

.















TABLE 1













Select Signals




Output Signal
















S2




S1




S0




OUT











0




0




0




IN0







0




0




1




IN1







0




1




0




IN2







0




1




1




IN3







1




0




0




IN4







1




0




1




IN5







1




1




0




IN6







1




1




1




IN7















The 8-to-1 multiplexer of

FIG. 3

is implemented using function generators to implement all multiplexing logic. The function generators of a typical FPGA are implemented as 4-input lookup tables (LUTS) and can provide any function of up to four inputs. Therefore, one function generator can be used to implement one 2-to-1 MUX.




As shown in

FIG. 3

, an 8-to-1 multiplexer can be implemented as seven 2-to-1 multiplexers. A first stage (implemented in Slices


0


and


1


in

FIG. 3

) reduces the number of input signals from eight to four using four 2-to-1 multiplexers. A second stage (implemented in Slice


2


in

FIG. 3

) reduces the number of input signals from four to two using two 2-to-1 multiplexers. A third stage (implemented in half of Slice


3


in

FIG. 3

) reduces the number of input signals from two to one using a single 2-to-1 multiplexer.




The implementation of an 8-to-1 multiplexer shown in

FIG. 3

consumes 7 function generators (three and a half slices) and imposes a delay of three levels of logic on the output signal OUT.





FIG. 4

shows a second well-known implementation of an 8-to-1 multiplexer in an FPGA. This implementation makes use of the F5 and FX multiplexers that were previously referenced in regard to

FIGS. 1A and 1B

.




The F5 multiplexer in each slice combines the output signals from the F and G function generators in a 2-to-1 multiplexer, under control of the bypass input signal BX. The FX multiplexer combines the output signal from the associated F5 multiplexer with the output of another multiplexer from another slice. The F5 and FX multiplexers in the Virtex CLB are shown and described in U.S. Pat. No. 5,920,202, which is incorporated herein by reference. The F5 and FX multiplexers in the Virtex-II CLB are shown on page 52 of the “Virtex™-II Platform FPGA Handbook”, referenced above.




As shown in

FIG. 4

, the F and G function generators of two slices are used (under control of select signal S


0


) to reduce the number of input signals from eight to four. The F5 multiplexer in each slice is then used (under control of select signal S


1


applied to the BX bypass input terminal of each slice) to reduce the four signals to two. The two signals are then reduced to one signal using the FX multiplexer of one slice, under control of the S


2


control signal applied to the BY bypass input terminal.




The implementation of an 8-to-l multiplexer shown in

FIG. 4

consumes four function generators (two slices) and imposes a delay of about two levels of logic on the output signal OUT, assuming that each F5, FX multiplexer has about half the delay of a function generator.





FIG. 5

shows a third possible implementation of an 8-to-1 multiplexer in an FPGA. This implementation uses the CLB carry chain to implement some of the functionality of the multiplexer, thus reducing both the FPGA resource usage and the number of logic levels in comparison to the implementation of FIG.


3


.




In the implementation of

FIG. 5

, the CF carry multiplexer implements a direct logical connection between the select terminal and the output terminal. The CG carry multiplexer implements an OR function between the signal on the “1” data input terminal and the inverse of the signal on the select terminal.




Thus, the eight input signals are reduced to four signals in the four function generators of Slices


0


and


1


. The four signals are reduced to two signals through the carry chains of the two slices. The S2 select signal is then used to select between the two remaining signals in a fifth function generator in Slice


2


.




The implementation of an 8-to-1 multiplexer shown in

FIG. 5

consumes 5 function generators (two and a half slices) and imposes a delay of two and a half levels of logic on the output signal OUT, assuming the carry chain has about half the delay of a function generator, per slice.





FIGS. 3-5

illustrate three different implementations of an 8-to-1 multiplexer that can be executed in an existing and commercially available FPGA. Each of the three implementations requires several function generators to implement, and each includes at least two levels of logic to delay the output signal, as shown in Table 2.




A first embodiment of the invention provides a modification to the input multiplexer structure of existing FPGAs. This modification allows the implementation of an 8- to-1 multiplexer in a single function generator, with a single function generator delay plus a little additional delay (shown as a total of about 1.25 logic levels in Table 2). Larger multiplexers have similar relative savings in FPGA resources and signal delays.

















TABLE 2











LUT-based




F5/FX




Carry Chain




Invention







(FIG. 2)




(FIG. 3)




(FIG. 4)




(1st Emb.)




























Function




7




4




5  




1  






Generators






Logic




3




2




2.5




1.25






Levels















FIG. 6

shows an input multiplexer IMUXn according to a first embodiment of the invention. Input multiplexer IMUXn can be used, for example, to add functionality and flexibility to the slice of FIG.


1


. Input multiplexer IMUXn includes a decoder DEC, a group MCS of configuration memory cells, a group of n multiplexers MUX


0


-MUXn-1, and a second stage multiplexer S


2


MUX.




A group of input terminals INP provides nxm input signals from the general interconnect structure. Each of the n multiplexers MUX


0


-MUXn-


1


accepts m input signals from the input terminals INP, and selects one of the m input signals under the control of values stored in the memory cells MCS. The selected values are passed to n-to-1 multiplexer S


2


MUX, which selects one of the signals under the control of the decoder circuit DEC. The selected signal is passed to a data input terminal of one of the CLB function generators.




The general interconnect structure also passes bypass input signals B


0


-Bq to the decoder. In one embodiment, bypass input signals B


0


-Bq are selected from the general interconnect structure using multiplexers IMUXB


0


-IMUXBq. In one embodiment, multiplexers IMUXB


0


-IMUXBq are similar to multiplexers IMUXFi, IMUXGi, IMUXX, or IMUXY shown in FIG.


1


. In these embodiments, multiplexers IMUXB


0


-IMUXBq are controlled by values stored in configuration memory cells (not shown).




Bypass input signals B


0


-Bq are also provided to the bypass input terminals of a CLB, which can be the same CLB that includes the function generator driven by multiplexer IMUXn, or can be a different CLB. In one embodiment, the bypass input terminals and the function generator data input terminal are in the same slice. In another embodiment, the bypass input terminals and the function generator data input terminal are in different slices.




Bypass multiplexers IMUXB


0


-IMUXBq are not included in input multiplexer IMUXn in this embodiment, rather, they are implemented separately from multiplexer IMUXn. Therefore, multiplexers IMUXB


0


-IMUXBq are drawn using a dotted line in FIG.


6


.




A comparison of

FIGS. 6 and 2

reveals that the input multiplexer of the invention differs from prior art input multiplexers in that the multiplexer stages are not controlled simply by configuration memory cells. Instead, a combination of configuration memory cells and user signals from the general interconnect structure is used. Thus, input multiplexer IMUXn (from

FIG. 6

) can be used to implement wide multiplexers from a user's circuit that are controlled by user signals, while input multiplexer IMUX (from

FIG. 2

) cannot.




In another embodiment, the multiplexers controlled by configuration memory cells (MUX


0


-MUXn-


1


) are omitted from input multiplexer IMUXB. However, this embodiment reduces the usefulness of the CLB in implementing logic other than wide multiplexers. Thus, the input multiplexer with “mixed sources” for the select signals, as shown in

FIG. 6

, is preferred.





FIG. 7

shows a second input multiplexer IMUX


8


according to a second embodiment of the invention. Multiplexer IMUX


8


is one implementation of multiplexer IMUXn of FIG.


6


. The name “IMUX


8


” was selected for this implementation because in one embodiment (shown in FIG.


8


), multiplexer IMUX


8


is included in an FPGA that easily implements swift and efficient 8-to-1 multiplexers using a single function generator.




Comparing

FIGS. 7 and 6

, in input multiplexer IMUX


8


m is nine, n is four, and q is one. Each of multiplexers MUX


0


-MUX


3


is a 9-to-1 multiplexer, accepting from the general interconnect structure eight signals from other CLBs or other slices and one feedback signal from an output terminal (not shown) of the same CLB. One of these nine signals is selected by each multiplexer MUX


0


-MUX


3


under control of values stored in configuration memory cells MC


4


-MC


12


. Each of the selected values is passed to second stage multiplexer S


2


MUX.




Bypass signals BX and BY are provided from the general interconnect structure to the decoder circuit DEC via bypass multiplexers IMUXX and IMUXY, respectively. Decoder DEC decodes the bypass signals BX and BY using four NAND gates NA


0


-NA


3


, to provide four select signals to the second stage multiplexer S


2


MUX. Multiplexer enable memory cell MUXEN provides a third input signal (also called MUXEN) to each of NAND gates NA


0


-NA


3


. When enable signal MUXEN is high, the decoder functions to decode bypass signals BX and BY and control second stage multiplexer S


2


MUX. When enable signal MUXEN is low, each of NAND gates NA


0


-NA


3


provides a high output signal, and decoder circuit DEC is not a factor in controlling second stage multiplexer S


2


MUX. Therefore, when enable signal MUXEN is low, input multiplexer IMUX


8


functions the same as the prior art input multiplexer of FIG.


2


.




In the embodiment of

FIG. 7

, second stage multiplexer S


2


MUX is implemented as a group of N-channel pass transistors T


0


-T


3


coupled between each data input terminal and an internal node. Each pass transistor is controlled by a logic gate, in this embodiment a NAND gate. Each of NAND gates NB


0


-NB


3


has two input terminals, one coupled to the output of a corresponding NAND gate NA


0


-NA


3


and the other coupled to a corresponding configuration memory cell MC


0


-MC


3


.




Thus, when one of NAND gates NA


0


-NA


3


provides a high signal, the condition of the corresponding pass transistor (e.g., on or off) is controlled by the value in the corresponding configuration memory cell. When one of NAND gates NA


0


-NA


3


provides a low signal, the corresponding pass transistor is turned on, and the signal from the corresponding data input terminal is passed to the internal node.




Thus, when multiplexer input signal MUXEN is high (enabled), each of memory cells MC


0


-MC


3


is programmed to provide a zero value. Because of the “bubble” on the memory cell outputs, each memory cell provides a high value to the corresponding NAND gate NB


0


-NB


3


. Decoder DEC thus completely controls second stage multiplexer S


2


MUx.




Coupled between the internal node and the function generator data input terminal is a buffer circuit BUF. Buffer circuits are well known in the art, therefore, they are not described in detail here.





FIG. 7A

illustrates one embodiment NAn of NAND gates NA


0


-NA


3


of FIG.


7


. The circuit of

FIG. 7A

is a standard 3-input NAND gate implementation. The three input signals BX, BY, and MUXEN (of which signals BX and BY are sometimes inverted) drive N-channel transistors


701


-


703


coupled in series between the output node OUTA and ground. The three input signals also drive P-channel transistors


704


-


706


coupled in parallel between node OUTA and power high VDD.




In one embodiment, node N is shared between all of NAND gates NAn, and only one transistor


703


is used in all of NAND gates NAn. Transistor


706


can also be of smaller size than the other transistors. Being driven by a value determined at the time of configuration (MUXEN), the speed of this transistor is not important.





FIG. 7B

illustrates one embodiment NBn of NAND gates NB


0


-NB


3


of FIG.


7


. With one exception, the circuit of

FIG. 7B

is a standard 2-input NAND gate implementation. Two input signals NAn and MCn drive N-channel transistors


711


and


712


coupled in series between the output node OUTB and ground. The two input signals also drive P-channel transistors


713


and


714


, each coupled between node OUTB and a power high.




However, note that in this embodiment transistor


714


is coupled between output node OUTB and a power high value of VGG, rather than VDD. In one embodiment, power high VGG has a voltage level fifteen percent high than the voltage level of power high VDD. In this embodiment, configuration memory cells MC


0


-MC


12


also use power high VGG rather than VDD.




The reason for this voltage elevation is that output node OUTB drives the gate terminal of an N-channel pass transistor (i.e., transistors T


0


-T


3


in FIG.


7


). An N-channel pass transistor is faster in passing a high value if the gate of the transistor is at a voltage level higher than the high level passed through the pass transistor.




Referring again to

FIG. 7B

, because a high value on signal MCn is at a voltage high level of VGG, transistor


714


must also be tied to VGG. Otherwise, a low value on signal MCn may not be sufficient to completely turn off transistor


714


, and leakage can occur.





FIG. 8

shows one embodiment of an FPGA CLB, in additional input flexibility to two data input terminals of each function generator. For example, for function generator G, data input terminals G


4


and G


3


are driven by input multiplexers IMUX


8


(designated IMUX


8


G


4


and IMUX


8


G


3


, respectively, in FIG.


8


). Data input terminals G


2


and G


1


, however, are still driven by input multiplexers IMUX (see FIG.


2


). Providing the enhanced input multiplexers on only two of four data input terminals saves silicon area, while still enabling the efficient implementation of 8-to-1 multiplexers using the input multiplexer structure of

FIG. 7 and a

single function generator G.




Data input terminals G


4


and G


3


were selected for enhancement in this embodiment, because they were the two fastest input terminals. By selecting the two fastest data input terminals for enhancement, the path through the enhanced input multiplexer is made as fast as possible. Note that if the additional multiplexer capability provided by the invention is not used, there is no adverse effect on the speed of the input path, because the decoder logic is not on the critical path through the input multiplexer.




As shown in

FIG. 8

, an 8-to-1 multiplexer can now be implemented using a single function generator. The second stage multiplexer in input multiplexer IMUX


8


G


4


selects one of the four input signals IN


0


-IN


3


. The second stage multiplexer in input multiplexer IMUX


8


G


3


selects one of the four input signals IN


4


-IN


7


. A 2-to-1 multiplexer is then implemented in function generator G, using the select signal S


2


to select the final output signal for the 8-to-1 multiplexer.




The implementation of an 8-to-1 multiplexer shown in

FIG. 8

consumes one function generator (half a slice) and imposes a delay of slightly more than one level of logic on the output signal OUT.




As shown in

FIG. 9

, a single CLB slice can be used to implement two 8-to-1 multiplexers, but only if they share two out of three select signals. In other words, if select signal S


0


is provided on bypass terminal BX, and select signal S


1


is provided on bypass terminal BY, then both 8-to-1 multiplexers must share these two select signals. However, the S


2


select signal can be different, if desired, for each of the two 8-to-1 multiplexers. Multiplexers having shared select signals are very common in datapath-related applications.




In other embodiments (not shown), the two bypass signals driving the enhanced input multiplexer are two BX bypass signals from two different slices, two BY bypass signals from two different slices, or a BX bypass signal from one slice and a BY bypass signal from another slice.





FIG. 10

shows a third input multiplexer I


32


MUX according to a third embodiment of the invention. Portions of multiplexer I


32


MUX are similar to multiplexer IMUX


8


of FIG.


7


. Therefore, elements in the drawing that are similar to corresponding elements in

FIG. 7

are not further described here.




Input multiplexer I


32


MUX includes another level of multiplexing compared to input multiplexer IMUX


8


of FIG.


7


. The bypass signals from the adjacent slice (BXi+1 and BYi+1) are also used to generate multiplexer select signals, being decoded in decoder DEC


1


. Decoder DEC


1


includes four AND-NOR gates


00


-


03


. AND-NOR gates


00


-


03


are controlled by the inverse of multiplexer enable signal MUXEN, such that bypass signals BXi+1 and BYi+1 are ignored when signal MUXEN is low. When multiplexer enable signal MUXEN is high, the decoded bypass signals are combined with the output signals from memory cells MC


4


-MC


11


in OR gates


04


-


011


. The ninth select signal for multiplexers MUX


0


-MUX


3


, provided by memory cell MC


12


, is unchanged.




As described with reference to

FIG. 7

, when multiplexer input signal MUXEN is high (enabled), each of memory cells MC


0


-MC


3


is programmed to provide a zero value. The embodiment of

FIG. 10

includes a second decoder DEC


1


. When multiplexer input signal MUXEN is high (enabled), memory low values (e.g., MC


4


can be high, MC


5


can be low, etc.). Thus, only half of NOR gates


04


-


011


are controlled by the decoder outputs. When multiplexer input signal MUXEN is low (disabled), input multiplexer I


32


MUX functions the same as the prior art input multiplexer of FIG.


2


.





FIG. 10A

shows one embodiment of AND-NOR gates


00


-


03


of FIG.


10


. The circuit of

FIG. 10A

is a standard AND-NOR gate implementation. The two input signals BXi+1 and BYi+1 (which are sometimes inverted) drive N-channel transistors


1004


and


1005


coupled in series between the output node OUTC and ground. The two input signals also drive P-channel transistors


1002


and


1003


coupled in parallel between output node OUTC and internal node M. Signal MUXENB (the inverse of multiplexer enable signal MUXEN) drives N-channel transistor


1006


coupled between output node OUTC and ground, and also drives P-channel transistor


1001


coupled between node M and power high VDD.




In one embodiment, node M is shared between all of AND-NOR gates


00


-


03


, and only one transistor


1001


is used in all of AND-NOR gates


00


-


03


. Transistor


1006


can also be of smaller size than the other transistors. Being driven by a value determined at the time of configuration (MUXENB), the speed of this transistor is not important.





FIG. 10B

illustrates one embodiment of NOR gates


04


-


011


of FIG.


10


. With one exception, the circuit of

FIG. 10B

is a standard 2-input NOR gate implementation. Two input signals MCx and Ox drive N-channel transistors


1014


and


1013


, respectively, coupled in series between the output node OUTD and ground. Input signals MCx and Ox also drive P-channel transistors


1011


and


1012


, respectively, coupled in series between node OUTD and power high.




However, note that in this embodiment transistors


1011


and


1012


are coupled between output node OUTD and a power high value of VGG, rather than VDD. As described above with reference to

FIG. 7B

, power high VGG has a higher voltage level than the voltage level of power high VDD. This modification from the standard NOR circuit allows the pass gates driven by NOR gates


04


-


011


to pass a high value in a shorter time than would otherwise be possible.





FIGS. 6-10

illustrate the application of a novel multiplexing structure to input multiplexers driving function generator input terminals. However, the principles of the invention can also be applied to other aspects of FPGA circuitry—for example, to signal lines within the general interconnect structure of the FPGA.





FIG. 11

shows an interconnect multiplexing circuit IMUXI that can be included in the general interconnect structure of an FPGA to provide added multiplexing capability, according to a fourth embodiment of the invention.




Interconnect multiplexing circuit IMUXI is similar to input multiplexer IMUXn of

FIG. 6

, except that the output signal from the multiplexer drives one of the signal lines in the general interconnect structure. Interconnect multiplexing circuit IMUXI provides the novel capability of selecting one of many available interconnect lines for connection to another interconnect line, based not just on signal values stored in memory cells, but also on signal values derived from others of the interconnect lines. Thus, wide multiplexers can be implementing within the general routing structure itself.




Those having skill in the relevant arts of the invention will now perceive various modifications and additions that may be made as a result of the disclosure herein. For example, FPGAs, CLBS, general interconnect structures, multiplexers, multiplexing circuits, input multiplexers, decoders, memory cells, transistors, NAND gates, NOR gates, AND NOR gates, and buffering circuits other than those described herein can be used to implement the invention. Moreover, some components are shown directly connected to one another while others are shown connected via intermediate components. In each instance, the method of interconnection establishes some desired electrical communication between two or more circuit nodes. Such communication may often be accomplished using a number of circuit configurations, as will be understood by those of skill in the art. Accordingly, all such modifications and additions are deemed to be within the scope of the invention, which is to be limited only by the appended claims and their equivalents.



Claims
  • 1. An interconnect multiplexing structure in a field programmable gate array (FPGA), the FPGA comprising a general interconnect structure comprising a plurality of signal lines, the interconnect multiplexing structure comprising:a first select terminal coupled to a first signal line from the general interconnect structure; a configuration memory cell; a plurality of data input terminals coupled to a first plurality of signal lines from the general interconnect structure; a first data output terminal coupled to a second signal line from the general interconnect structure; and a first multiplexing circuit having a plurality of multiplexing data terminals coupled to the data input terminals, a first multiplexing select terminal coupled to the first select terminal, a second multiplexing select terminal coupled to the configuration memory cell, and a multiplexing output terminal coupled to the first data output terminal, wherein the first multiplexing circuit comprises: an internal node; a plurality of transistors coupled between the plurality of multiplexing data terminals and the internal node; a plurality of logic gates controlling the plurality of transistors; and a buffer coupled between the internal node and the multiplexing output terminal.
  • 2. The interconnect multiplexing structure of claim 1, wherein the interconnect multiplexing structure comprises a 4-to-1 multiplexer.
  • 3. The interconnect multiplexing structure of claim 1, wherein the interconnect multiplexing structure comprises a 36-to-1 multiplexer.
  • 4. The interconnect multiplexing structure of claim 1, wherein the first multiplexing circuit comprises:a first multiplexer having a select terminal coupled to the first multiplexing select terminal of the first multiplexing circuit; and a second multiplexer having a select terminal coupled to the second multiplexing select terminal of the first multiplexing circuit.
  • 5. The interconnect multiplexing structure of claim 1, wherein:the first multiplexing circuit further comprises a plurality of configuration memory cells; and each of the plurality of logic gates comprises an input terminal coupled to one of the plurality of configuration memory cells.
  • 6. An interconnect multiplexing structure in a field programmable gate array (FPGA), the FPGA comprising a general interconnect structure comprising a plurality of signal lines, the interconnect multiplexing structure comprising:a first select terminal coupled to a first signal line from the general interconnect structure; a configuration memory cell; a plurality of data input terminals coupled to a first plurality of signal lines from the general interconnect structure; a first data output terminal coupled to a second signal line from the general interconnect structure; a first multiplexing circuit having a plurality of multiplexing data terminals coupled to the data input terminals, a first multiplexing select terminal coupled to the first select terminal, a second multiplexing select terminal coupled to the configuration memory cell, and a multiplexing output terminal coupled to the first data output terminal; a second select terminal coupled to a third signal line from the general interconnect structure; and a decoder circuit coupled between the first and second select terminals and the first multiplexing select terminal of the first multiplexing circuit.
  • 7. The interconnect multiplexing structure of claim 6, wherein the decoder circuit comprises a configuration memory element coupled to enable and disable at least a portion of the first multiplexing circuit.
  • 8. An interconnect multiplexing structure in a field programmable gate array (FPGA), the FPGA comprising a general interconnect structure comprising a plurality of signal lines, the interconnect multiplexing structure comprising:a first select terminal coupled to a first signal line from the general interconnect structure; a configuration memory cell; a plurality of data input terminals coupled to a first plurality of signal lines from the general interconnect structure; a first data output terminal coupled to a second signal line from the general interconnect structure; a first multiplexing circuit having a plurality of multiplexing data terminals coupled to the data input terminals, a first multiplexing select terminal coupled to the first select terminal, a second multiplexing select terminal coupled to the configuration memory cell, and a multiplexing output terminal coupled to the first data output terminal; and a multiplexer coupled between a second plurality of signal lines from the general interconnect structure and the first select terminal.
Parent Case Info

This application is a Divisional of Ser. No. 10/080,103, filed Feb 20, 2002, now U.S. Pat. No. 6,556,042.

US Referenced Citations (9)
Number Name Date Kind
5481206 New et al. Jan 1996 A
5682107 Tavana et al. Oct 1997 A
5732407 Mason et al. Mar 1998 A
5850152 Cliff et al. Dec 1998 A
5920202 Young et al. Jul 1999 A
6075380 Lane Jun 2000 A
6118298 Bauer et al. Sep 2000 A
6204686 Agrawal et al. Mar 2001 B1
6621298 Agrawal et al. Sep 2003 B2
Non-Patent Literature Citations (2)
Entry
Xilinx; “The Programmable Logic Data Book 2000”; available from Xilinx, Inc.; 2100 Logic Drive, San Jose, California 95124; pp. 3-75 through 3-96.
Xilinx; “Virtex-II Platform FPGA Handbook”; published Dec. 6, 2000; available from Xilinx, Inc.; 2100 Logic Drive, San Jose, California 95124; pp. 33-75.