# Patent

## Title
Method and system for providing placement based configurations in programmable logic devices

## Abstract

A method for providing placement based configurations in programmable logic devices and programmable logic devices having configurable data files for logic blocks based on the location of the blocks therein are disclosed. Location information for at least one logic block in a programmable logic device is identified. A configuration data file for configuring the at least one logic block in the programmable logic device is generated based on the identified location of the at least one logic block.

## Background
FIELD OF THE INVENTION
This disclosure relates in general to providing placement based configurations in programmable logic devices.
BACKGROUND
Programmable logic devices (PLDs) are a well-known type of 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 programmable tiles. These programmable tiles can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), and so forth.
Each programmable tile typically includes both programmable interconnect and programmable logic. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). The programmable logic implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect and programmable logic are typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Another type of PLD is the Complex Programmable Logic Device, or CPLD. A CPLD includes two or more “function blocks” connected together and to input/output (I/O) resources by an interconnect switch matrix. Each function block of the CPLD includes a two-level AND/OR structure similar to those used in Programmable Logic Arrays (PLAs) and Programmable Array Logic (PAL) devices. In some CPLDs, configuration data is stored on-chip in non-volatile memory. In other CPLDs, configuration data is stored on-chip in non-volatile memory, and then downloaded to volatile memory as part of an initial configuration sequence.
For all of these programmable logic devices (PLDs), the functionality of the device is controlled by data bits provided to the device for that purpose. The data bits can be stored in volatile memory (e.g., static memory cells, as in FPGAs and some CPLDs), in non-volatile memory (e.g., FLASH memory, as in some CPLDs), or in any other type of memory cell.
Other PLDs are programmed by applying a processing layer, such as a metal layer, that programmably interconnects the various elements on the device. These PLDs are known as mask programmable devices. PLDs can also be implemented in other ways, e.g., using fuse or antifuse technology. The terms “PLD” and “programmable logic device” include but are not limited to these exemplary devices, as well as encompassing devices that are only partially programmable.
In a PLD, CLBs, IOBs, interconnect, and other logic blocks are typically programmed by loading a stream of configuration data (bitstream) into internal configuration memory cells that define how the CLBs, IOBs, and interconnect 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 function of the FPGA.
Current technology allows for configuration of an FPGA device based on function only. Thus, current techniques of FGPA implementation do not take into consideration the actual location or function of a circuit on the silicon die, which can result in decreased circuit performance. For example, a master unit may be separated from a first by a first distance and from a second slave unit by a second distance. In this case, the locations of the first and second unit cause different propagation delays between the master unit and the two slave units. If propagation delays are not accounted for output glitches may occur for logic gates and/or data may be corrupted.
It can be seen then that there is a need for a method for providing placement based configurations in programmable logic devices and programmable logic devices having configurable data files for logic blocks based on the location of the blocks therein.
SUMMARY
To overcome the limitations described above, and to overcome other limitations that will become apparent upon reading and understanding the present specification, the present invention discloses a method for providing placement based configurations in programmable logic devices and programmable logic devices having configurable data files for logic blocks based on the location of the blocks therein.
Embodiments of the present invention solve the above-described problems by generating a configuration data file for configuring logic blocks within programmable logic devices based on location information associated with a block.
An embodiment of the present invention includes identifying location information for at least one logic block in a programmable logic device and generating a configuration data file for configuring the at least one logic block in the programmable logic device based on the identified location of the at least one logic block.
These and various other advantages and features of novelty which characterize the invention are pointed out with particularity in the claims annexed hereto and form a part hereof. However, for a better understanding of the invention, its advantages, and the objects obtained by its use, reference should be made to the drawings which form a further part hereof, and to accompanying descriptive matter, in which there are illustrated and described specific examples of an apparatus in accordance with the invention.



BRIEF DESCRIPTION OF THE DRAWINGS
Referring now to the drawings in which like reference numbers represent corresponding parts throughout:
FIG. 1 is a simplified illustration of an exemplary FPGA;
FIG. 2 illustrates an FPGA architecture according to an embodiment of the present invention;
FIG. 3 illustrates a simplified block diagram of a programmable logic device demonstrating the use of location information to configure a programmable logic device according to an embodiment of the present invention;
FIG. 4 illustrates a simplified block diagram of a FPGA demonstrating the use of the method for providing placement-based configurations according to another embodiment of the present invention;
FIG. 5 is a flow chart of the method for providing placement based configurations in programmable logic devices according to an embodiment of the present invention; and
FIG. 6 illustrates a system and computer-readable medium wherein the process illustrated with reference to FIGS. 2–5 may be tangibly embodied in the computer-readable medium and performed by the system.



DETAILED DESCRIPTION
In the following description of the embodiments, reference is made to the accompanying drawings that form a part hereof, and in which is shown by way of illustration the specific embodiments in which the invention may be practiced. It is to be understood that other embodiments may be utilized because structural changes may be made without departing from the scope of the present invention.
The present invention provides a method for providing placement based configurations in programmable logic devices and programmable logic devices having configurable data files for logic blocks based on the location of the blocks therein. Location information for at least one logic block in a programmable logic device is identified. A configuration data file for configuring the at least one logic block in the programmable logic device is generated based on the identified location of the at least one logic block.
FIG. 1 is a simplified illustration of an exemplary FPGA. The FPGA of FIG. 1 includes an array of configurable logic blocks (LBs 101a–101i) and programmable input/output blocks (I/Os 102a–102d). The LBs and I/O blocks are interconnected by a programmable interconnect structure that includes a large number of interconnect lines 103 interconnected by programmable interconnect points (PIPs 104, shown as small circles in FIG. 1). PIPs are often coupled into groups (e.g., group 105) that implement multiplexer circuits selecting one of several interconnect lines to provide a signal to a destination interconnect line or logic block. Some FPGAs also include additional logic blocks with special purposes (not shown), e.g., DLLs, RAM, and so forth.
FIG. 2 illustrates an FPGA architecture 200 according to an embodiment of the present invention. As noted above, advanced FPGAs can include several different types of programmable logic blocks in the array. For example, in FIG. 2, the FPGA architecture 200 includes a large number of different programmable tiles including multi-gigabit transceivers (MGTs 201), configurable logic blocks (CLBs 202), random access memory blocks (BRAMs 203), input/output blocks (IOBs 204), configuration and clocking logic (CONFIG/CLOCKS 205), digital signal processing blocks (DSPs 206), specialized input/output blocks (I/O 207) (e.g., configuration ports and clock ports), and other programmable logic 208 such as digital clock managers, analog-to-digital converters, system monitoring logic, and so forth. Some FPGAs also include dedicated processor blocks (PROC 210).
In one embodiment of the present invention the MGTs 201 include logic blocks which can be programmed. For example, an MGT can include a channel bond logic block having a two bit attribute that is set during configuration of the MGT. The two bit attribute indicated whether the channel bond logic block is a master, slave one hop, or slave two hop. The slave one hop and slave two hop attributes give different delays to the master.
As an illustrative example, let a first channel bond logic block in a first MGT be a master, and a second channel bond logic block in a second MGT be a first slave, and a third channel bond logic block in a third MGT be a second slave. Let the second slave be placed at a location twice the distance to the master than the distance of the first slave to the master. The two bit attribute for the first channel bond logic block is set to indicate a master. The two bit attribute for the first slave can be set for a slave two hop and the two bit attribute for the second slave can be set as a slave one hop. Hence the first slave adds extra delay so that its data arrives at the master about the same time as the data from the second slave. In this embodiment the attributes (i.e., configuration memory cells) of the slaves are automatically set depending upon the slaves' locations.
In some FPGAs, each programmable tile includes a programmable interconnect element (INT 211) having standardized connections to and from a corresponding interconnect element in each adjacent tile. Therefore, the programmable interconnect elements taken together implement the programmable interconnect structure for the illustrated FPGA. The programmable interconnect element (INT 211) also includes the connections to and from the programmable logic element within the same tile, as shown by the examples included at the top of FIG. 2.
For example, a CLB 202 can include a configurable logic element (CLE 212) that can be programmed to implement user logic plus a single programmable interconnect element (INT 211). A BRAM 203 can include a BRAM logic element (BRL 213) in addition to one or more programmable interconnect elements. Typically, the number of interconnect elements included in a tile depends on the height of the tile. In the pictured embodiment, a BRAM tile has the same height as four CLBs, but other numbers (e.g., five) can also be used. A DSP tile 206 can include a DSP logic element (DSPL 214) in addition to an appropriate number of programmable interconnect elements. An IOB 204 can include, for example, two instances of an input/output logic element (IOL 215) in addition to one instance of the programmable interconnect element (INT 211). As will be clear to those of skill in the art, the actual I/O pads connected, for example, to the I/O logic element 215 are manufactured using metal layered above the various illustrated logic blocks, and typically are not confined to the area of the input/output logic element 215.
In the pictured embodiment, a columnar area near the center of the die (shown shaded in FIG. 2) is used for configuration, clock, and other control logic. Horizontal areas 209 extending from this column are used to distribute the clocks and configuration signals across the breadth of the FPGA.
Some FPGAs utilizing the architecture illustrated in FIG. 2 include additional logic blocks that disrupt the regular columnar structure making up a large part of the FPGA. The additional logic blocks can be programmable blocks and/or dedicated logic. For example, the processor block PROC 210 shown in FIG. 2 spans several columns of CLBs and BRAMs.
Configuration logic 205 allows configuration data values to be loaded into the FPGA architecture 200. In accordance with an embodiment of the present invention, the configuration data takes into consideration the actual location and/or function of a circuit on the silicon die, which can result in increased circuit performance and provide additional functional constructs. Placement based information is provided to the FPGA architecture 200 that will optimize it's design.
Note that FIG. 2 is intended to illustrate only one example of an FPGA architecture. The numbers of logic blocks in a column, the relative widths of the columns, the number and order of columns, the types of logic blocks included in the columns, the relative sizes of the logic blocks, and the interconnect/logic implementations included at the top of FIG. 2 are purely exemplary. For example, in an actual FPGA more than one adjacent column of CLBs is typically included wherever the CLBs appear, to facilitate the efficient implementation of user logic.
FIG. 3 illustrates a simplified block diagram of a programmable logic device 300 demonstrating the use of location information to configure a programmable logic device according to an embodiment of the present invention. In FIG. 3, a master circuit 310 and slave circuits 320 and 330. Using current methods the functions or attributes of slave units 320 and 330 are generated without regard to their location. If the master circuit 310 sends a signal to the slaves 320, 330 it is assumed that the distance is the same when in reality slave circuit 320 will receive the signal first. If the location and/or function information is provided to the slave devices 320, 330 their performance can be adjusted and/or additional performance constructions may be provided.
Thus, according to an embodiment of the present invention, slave circuit 320 may be configured so that it will compensate for the extra delay that slave circuit 330 experiences. Other parameters that may be configured include setup times; hold times, clock width, clock period, propagation delay compensation recovery time, etc.
FIG. 4 illustrates a simplified block diagram of a FPGA package 400 demonstrating the use of the method for providing placement-based configurations according to another embodiment of the present invention. Before describing FIG. 4, those of skilled in the art will recognize that the present invention is not meant to be limited to FPGAs or PLDs. Rather, the present invention is application to a broader category of devices including integrated circuits having programmable functions in general. In FIG. 4, a chip such as a FPGA 402 includes pads 410 for connecting to bonding wires 420. The bonding wire 420 may be gold or copper traces for example. The bonding wires 420 are coupled to pins 430 of the package 400. For clarity and simplicity only one pin 430 is shown. In referencing the FPGA package 400, a second example of a parameter for consideration when providing placement-based configurations may be contemplated, i.e., packaging effects. For example, blocks 440 of FPGA 402 may require different configuration settings based on parasitic effects of the packaging at that location. Location information may be provided and used to generate a configuration date file that accounts for the parasitic effect. The amount of parasitic effects to any driver is predictable and may be accounted for in the design of the drivers. Thus, the drivers may be optimized to drive the known loads they will have to drive.
FIG. 5 is a flow chart of the method for providing placement-based configurations in field programmable gate arrays according to an embodiment of the present invention. Location information for at least one logic block in a FPGA is identified 510. A configuration data file for configuring the at least one logic block in the FPGA based on the identified location of the at least one logic block is generated 520. For example, the block may be identified as a master or a slave relative to another block within the field programmable gate array.
FIG. 6 illustrates a system 600 according to an embodiment of the present invention, wherein the process illustrated with reference to FIGS. 2–5 may be tangibly embodied in a computer-readable medium or carrier, e.g. one or more of the fixed and/or removable data storage devices 668 illustrated in FIG. 6, or other data storage or data communications devices. A computer program 690 expressing the processes embodied on the removable data storage devices 668 may be loaded into the memory 692 or processor 696, e.g., in a processor (not shown), to configure the system 600 of FIG. 6, for execution. The computer program 690 comprise instructions which, when read and executed by the system 600 of FIG. 6, causes the system 600 to perform the steps necessary to execute the steps or elements of the present invention.
The location information, attributes and functions of the logic blocks within a programmable logic device may be provided by configuration software or on-chip hardware. For example, software may be used to allow user input for determining the location and/or function during placement or to implement automated methods. The location and/or function could also be determined by a unique circuit at each location. Thus, the location and/or function of a circuit will determine it's environment and therefore it's performance. By providing the logic blocks with configuration data files that are based upon location information, it's characteristics may be modified to maximize performance and/or to provide additional functional constructs.
The foregoing description of the exemplary embodiment of the invention has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed. Many modifications and variations are possible in light of the above teaching. It is intended that the scope of the invention be limited not with this detailed description, but rather by the claims appended hereto.

## Claims

1. A processor-implemented method for using location information to configure logic blocks of a programmable logic device (PLD) to implement a circuit design, comprising:
identifying location information for at least one logic block in a programmable logic device;
wherein a unit of the circuit design is to be implemented on the at least one logic block;
generating a configuration data file for configuring the PLD to implement the circuit design;
wherein the generating includes,
adjusting a function of the unit of the circuit design based upon the identified location information of the at least one logic block, and
generating the configuration data file to implement the unit of the circuit design on the at least one logic block based on the adjusted function;
wherein the generating the configuration data file includes generating the configuration data file to maximize performance of the programmable logic device; and

configuring the PLD with the configuration data file.

2. The method of claim 1, wherein the generating the configuration data file to adjust the function of the at least one logic block further comprises adjusting a delay parameter for the at least one logic block.

3. The method of claim 1, wherein the generating the configuration data file to adjust the function of the at least one logic block further comprises adjusting an attribute of the at least one logic block selected from a group consisting of setup times; hold times, clock width, clock period, propagation delay compensation and recovery time.

4. The method of claim 1, wherein the generating the configuration data file comprises providing modifications for adjusting parameters for improving circuit performance.

5. The method of claim 4, wherein adjusting parameters comprises adjusting delay parameters representing a propagation delay difference between a first and second block.

6. The method of claim 5, wherein adjusting parameters comprises adjusting for packaging effects.

7. The method of claim 6, wherein the adjusting for packaging effects comprises adjusting for parasitic effects.

8. The method of claim 1, wherein the generating the configuration data file further comprises adjusting a delay parameter for the at least one logic block.

9. An article of manufacture, comprising:
a program storage medium readable by a computer, the medium tangibly embodying one or more programs of instructions executable by the computer to perform operations for using location information to configure logic blocks of a programmable logic device (PLD) to implement a circuit design, the operations comprising:
identifying location information for at least one logic block in a programmable logic device;
wherein a unit of the circuit design is to be implemented on the at least one logic block;
generating a configuration data file for configuring the PLD to implement the circuit design;
wherein the generating includes,
adjusting a function of the unit of the circuit design based upon the identified location information of the at least one logic block, and
generating the configuration data file to implement the unit of the circuit design based on the adjusted function;
wherein the generating the configuration data file comprises generating the configuration data file to maximize performance of the programmable logic device; and

configuring the PLD with the configuration data file.