Programmable logic device with multi-port memory

Abstract
An integrated circuit for implementing reconfigurable logic, such as a field programmable gate array (“FPGA”), as described herein has multiple blocks of multi-ported memory. The memory has a plurality of read ports and a plurality of write ports. Each port of the multi-ported memory can be configured with a width and depth that is independent and separate from the width and depth of the other ports. The memory also includes a port for taking a synchronous snapshot of the contents of the memory or for loading the memory to an initial state. The memory shares routing lines used by a low level logic element thereby alleviating the need to add routing lines to an interconnect network just to satisfy the memory requirements.
Description




FIELD OF THE INVENTION




The field of the present invention is integrated circuits for implementing reconfigurable logic, such as field programmable gate arrays (“FPGAs”), that are specially designed for emulation systems. In particular, the present invention is directed to a FPGA having multiple blocks of multi-ported memory and a special port for taking a synchronous snapshot of the contents of the memory or for loading the memory to an initial state.




BACKGROUND OF THE INVENTION




Field programmable gate arrays such as those available from Xilinx, Altera, AT&T and others are widely used for implementing various types of logic functions. FPGAs offer an advantage over mask-programmed gate arrays and discrete logic because the logic functions carried out by an FPGA can be easily reprogrammed to meet the user's objectives.




FPGAs are traditionally structured in a multi-level hierarchy, with simple logic blocks capable of performing the desired logic functions combined together to form more complex blocks, which are then combined to form a complete chip. Designs intended for implementation in FPGAs often include memories. This is especially true in prototyping applications where the designs being prototyped of ten contain large and complex memories.




Some FPGAs provide a mechanism for implementing small amounts of memory. For example, the Xilinx 4000 series of FPGAs allow the user to implement thirty-two bits of random-access memory (“RAM”) for each configurable logic block (“CLB”). RAMs can also be constructed using the flip-flop storage elements in the CLBs. Combining these small RAMs into the larger memories found in real designs, however, is difficult, slow, and consumes much of the FPGA routing and logic resources. This problem is particularly severe when the memory to be implemented has multiple ports, especially multiple write ports which require even greater routing resources to satisfy the memory requirements. Routing of memory outputs additionally should not require a sizable expansion in the routing network. A further drawback of the existing devices is the lack of an easy way to observe the contents of the FPGA memories at a selected point in time or to initialize the memories to a predetermined state. The prior art has not effectively resolved these and other issues.




SUMMARY OF THE INVENTION




A first, separate aspect of the present invention is a memory for an integrated circuit for implementing reconfigurable logic where the memory allows flexible implementation of various types of large and multi-ported memories inside the integrated circuit.




A second, separate aspect of the present invention is a multi-ported memory for an integrated circuit for implementing reconfigurable logic.




A third, separate aspect of the present invention is an integrated circuit for implementing reconfigurable logic having a memory whose width and depth are configurable in a tradeoff fashion.




A fourth, separate aspect of the present invention is an integrated circuit for implementing reconfigurable logic, where the integrated circuit includes a multi-ported memory wherein the width and depth of each port may be configured independently of the width and depth of the other ports.




A fifth, separate aspect of the present invention is an integrated circuit for implementing reconfigurable logic and including a memory, where the memory includes a register that can read the contents of the memory synchronously such that the data read accurately represents a snapshot of the memory contents at a point in time.




A sixth, separate aspect of the present invention is an integrated circuit for implementing reconfigurable logic and including a memory, where the memory includes a register that can load data into the memory so that the memory is loaded to a predetermined state.




A seventh, separate aspect of the present invention is an integrated circuit for implementing reconfigurable logic, where the circuit includes a logic element, an interconnect network and a memory that uses the logic element to access the interconnect network, thereby alleviating the necessity of adding routing lines to the interconnect network just to satisfy the memory requirements.




An eighth, separate aspect of the present invention is an integrated circuit for implementing reconfigurable logic, where the circuit includes a logic element, an interconnect network and a memory that shares some but not all of the routing resources used by the logic element so that the logic element may still perform logic functions.











BRIEF DESCRIPTION OF THE DRAWINGS




The various objects, features and advantages of the present invention will be better understood by considering the Detailed Description of a Preferred Embodiment which follows together with the drawing figures, wherein:





FIG. 1

is a block diagram pinout of a memory block that embodies the present invention.





FIG. 2

is a pulse generator circuit schematic that logically represents the delays in generating a Write strobe signal and a Write Busy signal.





FIG. 3

is a circuit schematic of a logic element with a memory of the preferred embodiment.





FIG. 4

is a schematic of a memory cell which comprises a memory block and a shadow cell which comprises a shadow register.





FIG. 5

is a schematic of circuitry for generating Read lines for Port A.





FIG. 6

is a circuit diagram of a read sense amplifier used to read the data off a data line.





FIG. 7

is a table that shows where each bit of a data word is written into memory, depending on the selected configuration of the width and depth of the memory.





FIG. 8

is a table that shows where each bit in memory is read out, depending on the selected configuration of the width and depth of the memory.





FIG. 9

is a crosspoint array which implements the table of FIG.


8


.





FIG. 10

is a circuit diagram that uses multiple write buffer circuits to generate the Write Data and Write Data Bar control signals.





FIG. 11

is a detailed circuit schematic of the write buffer circuit shown in FIG.


10


.











DETAILED DESCRIPTION OF A PREFERRED EMBODIMENT




In the preferred embodiment, a FPGA has eight 1K blocks of memory. Each memory block


10


contains 1024 bits of memory which can be organized into four different combinations of width and depth: (a) 1K bits×1 bit, (b) 512×2, (c) 256×4, and (d) 128×8. Other memory configurations and combinations of width and depth are certainly possible as well.





FIG. 1

illustrates a block diagram pinout of one of the memory blocks


10


. Each memory block


10


of the preferred embodiment has two read ports


12


,


14


and two write ports


16


,


18


, although other quantities of read and write ports are also foreseen. Each of the four ports operates independently of one another and may be used simultaneously with other ports. If the implementation of a particular memory does not require the memory block


10


to use two read and two write ports, the memory block


10


can be configured as two independent submemories where each submemory has one read and one write port as long as the number of data bits in a submemory suffices for the particular implementation. The memory width/depth tradeoff can be set independently for each port. For example, it is possible to write into individual bits using the 1K×1 option on a write port and read out bytes using the 128×8 option on a read port. As a further example, one read port can be configured with a width/depth option that is different than the width/depth option for the other read port. The number of address and data lines required for each port varies with the various width/depth options as follows:





















1Kx1




512x2




256x4




128x8






























Write Port Signals











Address lines




10




9




8




7







Data In lines




1




2




4




8







Write signal line




1




1




1




1







Write Busy line




1




1




1




1







Total pins/port




13




13




14




17







Read Port Signals







Address lines




10




9




8




7







Data Out lines




1




2




4




8







Read Enable line




1




1




1




1







Total pins/port




12




12




13




16







Overall Total pins




50




50




54




66















Each of the two read ports


12


,


14


has a Read Enable signal


20


,


22


respectively. The rising edge of a Read Enable signal


20


,


22


samples the read port address from the read address lines


24


,


26


and causes data to emerge on the Read Data lines


28


,


30


(known as the data-out lines).




Similarly, each of the two write ports


16


,


18


has a Write Enable signal


32


,


34


. The rising edge of the Write Enable signal


32


,


34


samples the write port address from the write address lines


36


,


38


and data from the Write Data lines


40


,


42


respectively. Internal write strobes are internally generated following a rising edge on Write Enable signals


32


,


34


by the write buffer circuit shown in

FIG. 10

(which is discussed later). Upon receipt of the rising edge of the Write Enable signal


32


,


34


, the Write Busy line


44


,


46


goes high to signify that data is in the process of being written to memory. When the write process is complete, the Write Busy signal


44


,


46


returns to low. The durations of the internal write strobes are relatively short so that the user generally need not pay attention to the Write Busy signals. The Write Busy signals


44


,


46


are provided for users who want to use a foolproof semaphore for RAM write timing.





FIG. 2

illustrates a pulse generator circuit which generates the write strobe or WPulse signal


160


, Write Busy signal


44


and the associated delays. A Write Enable signal


32


from the user generates asynchronously the WPulse signal


160


as well as the Write Busy signal


44


. When the Write Enable signal


32


from the user rises from low to active high, the circuit generates a high going pulse of duration “Delay


1


” (symbolically represented by delay


1


element


51


in

FIG. 2

) which is passed to the memory as WPulse


160


. A stretched version of this pulse having a duration of “Delay


1


”+“Delay


2


” is generated by OR gate


54


and is output as Write Busy


44


. Delay


2


is symbolically represented by delay


2


element


53


in FIG.


2


. Delay


1


and Delay


2


are not necessarily equal in duration. The AND gate


52


and OR gate


54


do not actually exist in the memory circuit, but serve only as logical representations of delays.




The write address and the write data must both satisfy a brief setup time and a short hold time with respect to the rising edge of the Write Enable signal. The setup and hold times serve to guarantee that the data is written correctly to memory. Each write port has only one Write Enable signal. The read ports do not require a setup time or hold time because data is read asynchronously out of the memory. Data can be written either synchronously or asynchronously into memory.




Pins from the memory block


10


use the same routing resources as one of the low level logic blocks (“L


0


s”) in the programmable gate array. Each low level L


0


logic block consists of thirty-six logic elements (“LEs”). Each LE within a L


0


logic block is connected to an X


0


interconnect network (also within the L


0


logic block) so that each LE can communicate with other LEs. The X


0


interconnect network also allows signals to enter or exit the L


0


logic block, thereby permitting communication with the next higher level interconnect network (X


1


) and higher level logic blocks (L


1


).





FIG. 3

is a circuit diagram of a LE logic element


60


preferably used in a FPGA with the described multi-port memory. Each LE


60


has four inputs


62


and one output


64


as well as eight low skew clock inputs. The LE output


64


propagates to an X


0


interconnect network which in turn leads either back to a LE input


62


or a higher level interconnect network. In this particular embodiment, pins from eighteen of the thirty-six LEs


60


within an L


0


block are utilized by a memory block


10


. One input to each LE is reserved to serve as a clock or clock enable to the latch


66


of the LE


60


. Latch


66


may alternately perform a a flip-flop function if desired, depending on the particular logic function to be implemented by the LE


60


. The other three LE inputs


62


are available for connecting to three inputs of the associated memory block


10


. The assignment of signals to and from the memory block


10


is done in such a way that the LE inputs


62


may be arbitrarily permutated. That is, a given signal may be carried by any one of the four LE input lines


62


. This flexible permutation of LE inputs to the memory block


10


is essential for improving the routability of the L


0


logic block.




An LE


60


is connected to a memory block


10


as shown in FIG.


3


. In particular, a total of three signals (comprising two of the four LE inputs


62


and the output


67


of the lookup table


68


) may propagate to memory block


10


. For example, the output


67


of the lookup table


68


, the Set input to the latch


66


and the Clear input to the latch


66


may serve as input signals to a memory block


10


. Each of these three input signals to the memory block


10


may be used as an address line, a Write Data line, a write Enable line, a Read Enable line, or another signal of a memory block


10


. The Read Data line and Write Busy line are assigned to the output


70


of a memory block


10


. The output


70


from a memory block


10


feeds back into the data-in multiplexer


72


of the LE


60


. The data-in multiplexer


72


is a three-to-one multiplexer controlled by configuration bits within storage cells


74


. The data-in multiplexer


72


sends either the memory output


70


, the output


67


of the lookup table


68


, or a delayed lookup table output


75


to the D input of the latch


66


. If the memory output


70


is not selected, the data-in multiplexer


72


chooses whether to bypass the delay element


76


. Delay element


76


serves to insert a programmable delay into the data path within the LE


60


to account for hold time violations. If the memory output


70


is selected by the data-in multiplexer


72


, the latch


66


passes the memory output


70


to a data-out multiplexer


78


. Data-out multiplexer


78


is a two-to-one multiplexer that is controlled by a configuration bit within storage cell


80


. The data-out multiplexer


78


passes the memory output


70


or the output of latch


66


to the X


0


interconnect network. By transmitting the memory output


70


through components of the LE


60


(rather than directly) to the X


0


interconnect network, additional X


0


routing lines are not required to route the memory output. Instead, the memory output


70


simply and advantageously uses part of a LE


60


to reach the X


0


interconnect network. Likewise, the memory block


10


can use some of the LE


60


's input lines to receive signals and again, additional X


0


routing lines are not necessary. Moreover, if only two of the four LE inputs


62


are consumed by the memory function, the remaining LE inputs


62


can still be used by the LE


60


for combinatorial or sequential logic functions. A LE


60


that has some input lines free may still be used to latch data, latch addresses or time multiplex multiple memories to act as a larger memory or a differently configured memory. Therefore, circuit resources are utilized more effectively and efficiently. As shown previously, the memory block


10


requires a maximum of 48 inputs and 18 outputs. Thus, the signals from 18 LEs


60


are sufficient to connect all pins of the memory block


10


.





FIG. 4

is a schematic diagram of a memory cell circuit


90


of a multi-ported memory block


10


. The memory cell circuit


90


has a memory storage cell


91


that includes two inverters


92


,


94


in a series loop which provides a bistable latch configuration. Read line


114


for read port A


12


controls whether the content of the memory storage cell


91


is read out onto Read Data Bar line


28


. Likewise, Read line


115


for read port B


14


controls whether the content of the memory storage cell


91


is read out onto Read Data line


30


. The desired data appears on the respective Read Data lines which must have been previously at a high level. The Read Data lines may be pulled high through a resistor or alternatively, precharged high. Data is read out of the memory storage cell


91


by placing a high level on a Read Enable line.




The memory storage cell


91


of a memory block


10


can be loaded with data from either of the two write ports


16


,


18


. Write line


116


(port C) controls whether data on Write Data line


40


and Write Data Bar line


86


is written into memory storage cell


91


; Write line


117


(port D) controls whether data on Write Data line


42


and Write Data Bar line


88


is written into memory storage cell


91


. As a measure to guarantee correct writing, data is written into memory storage cell


91


only if (1) the Write Enable line is active and (2) either the Write Data line


40


(or


42


) is low or the Write Data Bar line


86


(or


88


) is low. Write Data line and Write Data Bar line must be complementary. The “Write Data Bar” signal is also known as the “Write Data-” signal. Signals on the Data lines are inverted with respect to the Data-(Data Bar) lines. If the Write Data and Write Data Bar lines are not driven, the memory storage cell


91


may not be written properly, even if the Write Enable line goes high, thereby resulting in an undefined state.





FIG. 5

is a circuit schematic that illustrates circuitry to generate Read lines


114


. As shown in the example provided by

FIG. 5

, the Read and Write lines


114


-


117


are generated from address lines ADR [


3


:


9


]


24


,


26


,


36


,


38


and Enable lines


20


,


22


,


32


,


34


. Address lines ADR [


3


:


9


] feed into a decoder


118


which pass signals to AND gates


119


. AND gates


119


also receive the Enable lines;

FIG. 5

shows the example of the Read Enable line


20


being sent to the AND gates


119


. 128 Read or Write lines are generated for each port to address the 128 rows of memory cell circuits


90


. Other types of decoding circuits may also be used, as would be well understood to those skilled in the art of RAM design.




The memory block


10


is comprised of multiple memory cell circuits


90


. Each memory cell circuit


90


has a shadow cell


100


. The shadow cells


100


within memory cell circuits


90


together form a shadow register. Each memory block


10


has a port (“shadow port”) for accessing the shadow cells


100


of the shadow register. The shadow port is a fifth port which is used for transparent initialization and readback of the contents of the entire memory block


10


. By using the shadow register, a synchronous snapshot of the contents of all memory storage cells


91


within a memory block


10


may be taken at an arbitrary instant in time so that an internally consistent view of the memory contents may be obtained. The snapshot of the memory contents is accurate and does not suffer from timing problems. The shadow register may also be used to load the memory array synchronously to an initial, predetermined state. Once loaded, the FPGA may start executing from that state forward. Thus, the shadow register is particularly useful for debugging and diagnostics.




In operation, the content of each memory storage cell


91


can be downloaded into the corresponding shadow cell


100


. Each shadow cell


100


is preferably comprised of two inverters, as for each memory storage cell


91


. By placing a high level on the Load Shadow enable line


102


which runs to each memory block


10


, each shadow cell


100


is loaded with the data from each memory storage cell


91


. From there, the data may be read out on the Shadow Data line


112


and Shadow Data Bar line


110


by placing a high level on the Read/Write Shadow line


108


. The Shadow Data Bar line is also known as the Shadow Data- line. The transfer circuit


104


causes data to be transferred between the memory storage cell


91


and the shadow cell


100


. Since this loading of the shadow register occurs synchronously, a true snapshot of the memory array can be taken accurately. Data is transferred from the shadow register to the shadow data lines


110


,


112


.




Each memory storage cell


91


can also be loaded synchronously (with respect to other memory cells) from the shadow register by placing a high level on the Restore Shadow enable line


106


which runs to each memory block


10


. Data must have been previously loaded into the shadow register by placing a high level on the Read/Write Shadow line


108


while providing data on the Shadow Data


112


and Shadow Data Bar


110


lines.




A simple sense amplifier is adequate for reading data off the data line of a read port.

FIG. 6

is a circuit schematic of a cascode read sense amplifier


120


used in the preferred embodiment. The read sense amplifier


120


is of a type well-known to designers of static memories. The read sense amplifier


120


receives data from memory on an input line


121


. Transistor


124


helps optimize speed of the read sense amplifier by alleviating the effect of large capacitance on the line


121


. High capacitance exists on input line


121


because input line


121


is connected to a large number of memory cells. By isolating the capacitance of the input line


121


from the capacitance of the node


123


, transistor


124


permits node


123


to switch faster. PMOS transistor


126


has a gate connected to a 3.0 volt reference, a source connected to 5 volts and a drain connected to node


123


of the data line. Transistor


126


provides a current which tends to pull up node


123


to Vcc unless the selected memory cell is pulling down on node


122


. Since transistor


126


provides only a limited pull up current, any cell which pulls down on node


122


will also pull down node


123


to a low logic level. Transistors connected to the read data lines as shown on

FIG. 4

pull the data line down to a low voltage when the memory is read. Other well- known read sense amplifiers may be used alternatively.




A total of fifteen possible combinations of width/depth options and addresses exist which determine which RAM bits to write. The following table shows how these combinations, represented by fifteen select signals, are derived:

















Width




ADR[2:0]




Select Signal

























8




XXX




S8






4




0XX




S40






4




1XX




S44






2




00X




S20






2




01X




S22






2




10X




S24






2




11X




S26






1




000




S10






1




001




S11






1




010




S12






1




011




S13






1




100




S14






1




101




S15






1




110




S16






1




111




S17














The width column represents the number of bits per port; the ADR[


2


:


0


] signifies how the address bits are used to select which select signal is active; the select signals control which memory cell is used for writing a data bit. For example, if the width option is eight, only select signal S


8


is active because all memory bits in a byte will be written to memory (one bit to each cell). For the width=


4


option, S


40


and S


44


will be the only possible active select signals because either the upper four bits or the lower four bits will be written depending on whether the ADR


2


address bit is a one or zero. If the ADR


2


address bit is a zero, S


40


will be active and S


44


will be inactive. The select signals are used to control the memory's data lines and, therefore, the memory location to which a data bit will be written.





FIG. 7

is a table that shows to which memory bit location each input data bit will be written, depending on which select signals are active. The “Source Data Bit #” column signifies the eight bits of a data word which is to be stored into memory. Each Memory Bit column is connected to all memory cells in a column of the memory array. The actual physical implementation of the memory is eight bits wide, even though the memory may be configured into a variety of width/depth options. Select signal S


8


is active for an 8 by 128 memory; S


40


or S


44


for a 4 by 256 memory; S


20


, S


22


, S


24


or S


26


for a 2 by 512 memory; and S


10


, S


11


, S


12


, S


13


, S


14


, S


15


, S


16


or S


17


for a 1 by 1024 memory.




For example, if the width =8 option was selected, select signal S


8


would be active and the rest of the select signals would be inactive. The data word being written into memory comprises source bits


0


-


7


where source bit


7


is the most significant bit. In a width =8 memory, source bit


0


would be sent to the column


0


of the memory (and then to a memory cell as selected by the address), source bit


1


to column


1


and so on, with source bit


7


going to column


7


.

FIG. 8

is a similar table which shows how data being read out of the memory is rearranged. If data is to be read out of a memory which has been configured as a width =8 memory, select signal S


8


would be active, causing bits


0


-


7


to come from columns


0


-


7


of the memory and arrive as destination data bits


0


-


7


respectively.




Turning back to

FIG. 7

, if a width =4 memory was selected, a data word to be written into memory would comprise source bits


0


-


3


. If the low order bit of the address was a zero, select signal S


40


would be active and source bit


0


would go to column


0


of the memory, source bit


1


to column


1


, source bit


2


to column


2


and source bit


3


to column


3


. If the low order bit of the address was a one, select signal S


44


would be active so that source bit


0


would go to column


4


of the memory, source bit


1


to column


5


, source bit


2


to column


6


and source bit


3


to column


7


. Thus, the physically eight-bit wide memory can be configured as two four-bit wide memories. The same principles of operation apply to a width =2 and width =1 memory. A programmable logic array (PLA) may be used to move data into and out of the memory based on the select signals.





FIG. 9

is a crosspoint array that may be used to implement the table of FIG.


8


. Each crosspoint may comprise a field effect transistor that turns on when any one of the select signals going to the transistor is active. When the transistor conducts, a connection is made between a column of memory cells and the destination data bit. For example, when select signal S


40


is active, destination data bits


3


,


1


,


0


and


2


are connected to columns


3


,


1


,


0


and


2


of the memory. The crosspoints may also be implemented with other circuits that are well-known in the art.





FIG. 10

is a circuit schematic of write buffer circuits used to route source data bits to the correct memory bit locations, depending on the selected width/depth configuration as specified in the table of FIG.


7


. Eight write buffer circuits


140


are arranged as shown in FIG.


10


. Each write buffer circuit receives four of the possible select signals as well as four of the eight possible source data bits D


0


-D


7


. The select signals are derived from the width/depth configuration option selected and the lowest three bits of the address as shown previously. The D


0


-D


7


signals are source data signals originating from the user for writing to memory. For example, the leftmost write buffer circuit


140


receives select signals S


8


, S


44


, S


26


and S


17


as well as source data bits D


0


, D


1


, D


3


and D


7


. Depending on which select signal is active, a write buffer circuit


140


will route one of its source data bits to the Write Data line


40


and its complement to the Write Data Bar line


86


. As a further example, if select signal S


26


is active for the leftmost write buffer circuit


140


, the write buffer circuit


140


will transfer source data bit D


1


to column


7


of the memory (per FIG.


7


). Instead, if select signal S


44


were active for the leftmost write buffer circuit


140


, source data bit D


3


will be sent to column


7


of the memory. Hence, the inputs to each write buffer circuit


140


of

FIG. 10

matches the entries in the table of FIG.


7


.




The write buffer circuits


140


are arranged in the order shown in

FIG. 10

because this arrangement of write buffer circuits minimizes the required interconnect and performs the desired data movement as shown in the table of FIG.


7


.





FIG. 11

is a detailed circuit schematic of one of the write buffer circuits


140


used in FIG.


10


. Each write buffer circuit


140


generates the Write Data and Write Data Bar signals of FIG.


4


. The write buffer circuit


140


receives four of the select signals and four of the eight source data bits. The particular write buffer circuit


140


selected for illustration in

FIG. 11

is the leftmost write buffer circuit


140


of FIG.


10


.




One of the source data bits (D


0


, D


1


, D


3


, D


7


) is selected by the active select signal (S


8


, S


44


, S


26


or S


17


) to pass to line


142


to NOR gate


144


. The other input to the NOR gate


144


comes from the output


148


of NOR gate


146


. NOR gate


144


sends the selected data bit onto line


150


and onto the Write Data line


40


. The output


154


of the NOR gate


152


is used to generate the complementary data bit on Write Data Bar line


86


. WPulse signal


160


serves as a master timing signal that controls writing to the memory cells. The generation of WPulse signal


160


is shown in FIG.


2


. The WPulse signal


160


causes either the Write Data signal


40


or the Write Data Bar signal


66


to go low assuming one of the select signals is high, thereby causing the data bit selected from the D


0


-D


7


signals to be written into the bit of memory attached to the Write Data and Write Data Bar signals


40


,


86


and selected by the remaining address inputs ADR [


3


:


9


]. Transistor


162


pulls line


142


up to a logic


1


when all the transistors connected to D


0


, D


1


, D


3


and D


7


are off. The memory blocks


10


may be written to either synchronously via the shadow register or asynchronously via the WPulse


160


signal.




While the invention is susceptible to various modifications and alternative forms, specific examples thereof have been shown by way of example in the drawings and are herein described in detail. It should be understood, however, that it is not intended to limit the invention to the particular forms disclosed, but on the contrary, the invention is to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the invention as defined by the following claims.



Claims
  • 1. A programmable logic integrated circuit comprising:an interconnect network; a logic element programmably configurable to implement user-defined logic functions, the logic element comprising: logic element input lines coupled to components of the logic element; and a logic element output line programmably coupled to the interconnect network; and a memory block to store data, the memory block comprising: memory block input lines coupled to the memory block, wherein at least one memory block input line is coupled to one of the logic element input lines; and a memory block output line coupled to one of the components of the logic element.
  • 2. The programmable logic integrated circuit of claim 1 wherein the memory block input lines are coupled to a first port of the memory block, and the memory block output line is coupled to a second port of the memory block.
  • 3. The programmable logic integrated circuit of claim 1 wherein the logic element input lines carry signals routable to the logic element or to the memory block.
  • 4. The programmable logic integrated circuit of claim 3 wherein the signals to be routed to the logic element include signals enabling data to be latched by the logic element, and the signals to be routed to the memory block are selectable from a group of signals including write data, write enable, and read enable signals.
  • 5. A programmable logic integrated circuit comprising:an interconnect network; a logic element programmably configurable to implement user-defined logic functions, the logic element comprising: logic element input lines coupled to components of the logic element; and a logic element output line programmably coupled to the interconnect network; and a memory block to store data, the memory block comprising: memory block input lines coupled to the memory block; and a memory block output line coupled to one of the components of the logic element, wherein a signal on the memory block output line is programmably coupled to be provided on the logic element output line.
  • 6. The programmable logic integrated circuit of claim 5 wherein the logic element further comprises a first circuit coupled to a line from one of the components of the logic element and coupled to the memory block output line, and the first circuit is configured to selectively pass a signal on the line of one of the components of the logic element or a signal on the memory output line signal to the interconnect network via the logic element output line.
  • 7. The programmable logic integrated circuit of claim 5 wherein the memory block input lines are coupled to a first port of the memory block, and the memory block output line is coupled to a second port of the memory block.
Parent Case Info

This is a divisional application of U.S. patent application Ser. No. 09/298,890, filed Apr. 23, 1999 now U.S. Pat. No. 6,011,730, which is a continuation of U.S. patent application Ser. No. 08/895,516, filed Jul. 16, 1997 now U.S. Pat. No. 6,011,744, which are incorporated by reference.

US Referenced Citations (35)
Number Name Date Kind
RE. 34444 Kaplinsky Nov 1993
4293783 Patil Oct 1981
4424581 Kawai Jan 1984
4825414 Kawata Apr 1989
4855958 Ikeda Aug 1989
4893280 Gelsomini et al. Jan 1990
4956818 Hatayama et al. Sep 1990
4963770 Keida Oct 1990
4975601 Steele Dec 1990
5042004 Agrawal et al. Aug 1991
5122685 Chan et al. Jun 1992
5212666 Takeda May 1993
5276842 Sugita Jan 1994
5313119 Cooke et al. May 1994
5315178 Snider May 1994
5329460 Agrawal et al. Jul 1994
5329493 Meyer et al. Jul 1994
5343406 Freeman et al. Aug 1994
5352940 Watson Oct 1994
5375089 Lo Dec 1994
5408434 Stansfield Apr 1995
5414377 Freidin May 1995
5426378 Ong Jun 1995
5454094 Montove Sep 1995
5530670 Matsumoto Jun 1996
5548228 Madurawe Aug 1996
5550782 Cliff et al. Aug 1996
5566123 Freidin et al. Oct 1996
5572148 Lytle et al. Nov 1996
5668771 Cliff et al. Sep 1997
5777932 Chonan Jul 1998
5802007 Kondo Sep 1998
5809281 Steele et al. Sep 1998
5835405 Tsui et al. Nov 1998
5852608 Csoppenszky et al. Dec 1998
Foreign Referenced Citations (10)
Number Date Country
0081917 Aug 1983 EP
0410759 A2 Jan 1991 EP
0415542 A2 Mar 1991 EP
0420389 A1 Apr 1991 EP
0507507 A2 Oct 1992 EP
0530985 A2 Mar 1993 EP
0569137 A2 Nov 1993 EP
01091525 Apr 1989 JP
01091526 Apr 1989 JP
WO 9410754 May 1994 WO
Non-Patent Literature Citations (25)
Entry
Masumoto, Rodney T., “Configurable On-Chip RAM Incorporated into High Speed Logic Array,” IEEE Custom Integrated Circuits Conference, Jun. 1985, CH2157-6/85/0000-0240, pp. 240-243.
Landry, Steve, “Application -Specific ICs, Relying on RAM, Implement Almost Any Logic Function,” Electronic Design, Oct. 31, 1985, pp. 123-130.
Bursky, Dave, “Shrink Systems with One-Chip Decoder, EPROM, and RAM,” Electronic Design, Jul. 28, 1988, pp. 91-94.
Kawana, Keiichi et al., “An Efficient Logic Block Interconnect Architecture for User-Reprogrammable Gate Array,” IEEE 1990 Custom Integrated Circuits Conf., May 1990, CH2860-5/90/0000-0164, pp. 31.3.1 to 31.3.4.
Shubat, Alexander et al., “A Family of User-Programmable Peripherals with a Functional Unit Architecture,” IEEE Jor. of Solid-State Circuits, vol. 27, No. 4, Apr. 1992, 0018-9200/92$03.00, pp. 515-529.
“AT&T's Orthogonal ORCA Targets the FPGA Future,” 8029 Electronic Engineering, 64, No. 786, Jun. 1992, pp. 9-10.
Bursky, Dave, “FPGA Advances Cut Delays, Add Flexibility,” 2328 Electronic Design, 40, No. 20, Oct. 1, 1992, pp. 35-43.
Smith, Daniel, “Intel's FLEXlogic FPGA Architecture,” IEEE 1063-6390/93, 1993 pp. 378-384.
Bursky, Dave, “Denser, Faster FPGAs Vie for Gate-Array Applications,” 2328 Electronic Design, 41, No. 11, May 27, 1993, pp. 55-75.
Ngai, Kai-Kit Tony, “An SRAM-Programmable Field-Reconfigurable Memory,” University of Toronto, Canada, Jun. 1994, UMI Dissertation Services, pp. 1-68.
Kautz, “Cellular Logic in Memory Arrays,” IEEE Trans. on Computers, vol. C-18, No. 8, Aug. 1969, pp. 719-727.
Stone, “A Logic in Memory Computer,” IEEE Trans. on Computers, Jan. 1970, pp. 73-78.
Manning, “An Approach to Highly Integrated Computer Maintained Cellular Arrays,” IEEE Trans. on Computers, vol. C-26, No. 6, Jun. 1977,pp. 536-552.
Patil et al., “A Programmable Logic Approach for VLSI,” IEEE Trans. on Computers, vol. C-28, No. 9, Sep. 1979, pp. 594-601.
Seitz, “Concurrent VLSI Architectures,” IEEE Trans. on Computers, vol. C-33, No. 12, Dec. 1984, pp. 1247-1265.
Hsieh et al., “Third Generation Architecture Boosts Speed and Density of Field Programmable Gate Arrays,” Proc. of IEEE CICC Conf., May 1990, pp. 31.2.1 to 31.2.7.
Bursky, “Combination RAM/PLD Opens New Application Options,” Electronic Design, May 23, 1991, pp. 138-140.
Ling et al., “WASMII: A Data Driven Computer on a Virtual Hardware,” Proc. of IEEE Field Prog. Custom Computing Machines Conf., Napa, California, Apr. 1993, pp. 33-42.
Casselman, “Virtual Computing and The Virtual Computer,” IEEE, Jul. 1993, p. 43.
Quenot et al., “A Reconfigurable Compute Engine for Real-Time Vision Automata Prototyping,” Proc. of IEEE FCCM Conf., Napa, California, Feb. 1994, pp. 91-100.
Plus Logic “FPSL5110 Intelligent Data Buffer” Product Brief, Plus Logic, Inc., San Jose, California, Oct. 1990, pp. 1-6.
Larsson, T, “Programmable Logic Circuits: The Luxury Alternatives are Coming Soon,” Elteknik-med-Aktuell Electronik, No. 4, Feb. 25-Mar. 9, 1988, pp. 37-8, (with English Abstract).
Intel Preliminary Datasheet, “iFX780: 10ns FLEXlogic FPGA with SRAM Option,” Nov. 1993, pp. 2-24 to 2-46.
Quinnell, Richard A., “FPGA Family Offers Speed, Density, On-Chip RAM, and Wide-Decode Logic,” EDN Dec. 6, 1990, pp. 62-63.
Satoh, Hisayasu et al., “A 209K-Transistor ECL Gate Array with RAM,” IEEE Jor. of Solid-State Circuits, vol. 24, No. 5, Oct. 1989, pp. 1275-1279.
Continuations (1)
Number Date Country
Parent 08/895516 Jul 1997 US
Child 09/298890 US