In an example implementation, a method of implementing a circuit design for an integrated circuit (IC), includes: on at least one programmed processor, performing operations including: processing a description of the circuit design having logic elements into a graph having nodes representing the logic elements and edges representing potential pairs of the logic elements; determining a packing of pairs of the nodes to divide the graph into selected nodes and unselected nodes and selected edges and unselected edges by performing iterations of: identifying an augmenting path in the graph between a pair of unselected nodes; and modifying the selected nodes and unselected nodes and the selected edges and unselected edges based on the augmenting path; and grouping the logic elements in the description into pairs of logic elements based on the packing of pairs of the nodes.
|
1. A method of implementing a circuit design for an integrated circuit (IC), comprising:
on at least one programmed processor, performing operations including: processing a description of the circuit design having logic elements into a graph having nodes representing the logic elements and edges representing potential pairs of the logic elements;
determining a packing of pairs of the nodes to divide the graph into selected nodes and unselected nodes and selected edges and unselected edges by performing iterations of:
identifying an augmenting path in the graph between a pair of unselected nodes; and
modifying the selected nodes and unselected nodes and the selected edges and unselected edges based on the augmenting path; and
grouping the logic elements in the description into pairs of logic elements based on the packing of pairs of the nodes.
9. A computer system including a circuit design tool executing therein configured to implement a circuit design for an integrated circuit (IC), wherein the circuit design tool is programmed to:
process a description of the circuit design having logic elements into a graph having nodes representing the logic elements and edges representing potential pairs of the logic elements;
determine a packing of pairs of the nodes to divide the graph into selected nodes and unselected nodes and selected edges and unselected edges by performing iterations of:
identifying an augmenting path in the graph between a pair of unselected nodes; and
modifying the selected nodes and unselected nodes and the selected edges and unselected edges based on the augmenting path; and
group the logic elements in the description into pairs of logic elements based on the packing of pairs of the nodes.
16. A non-transitory computer-readable storage medium comprising instructions, which, when executed in a computer system, causes the computer system to carry out a method of implementing a circuit design for an integrated circuit (IC), comprising:
processing a description of the circuit design having logic elements into a graph having nodes representing the logic elements and edges representing potential pairs of the logic elements;
determining a packing of pairs of the nodes to divide the graph into selected nodes and unselected nodes and selected edges and unselected edges by performing iterations of:
identifying an augmenting path in the graph between a pair of unselected nodes; and
modifying the selected nodes and unselected nodes and the selected edges and unselected edges based on the augmenting path; and
grouping the logic elements in the description into pairs of logic elements based on the packing of pairs of the nodes.
2. The method of
changing each selected edge to an unselected edge, and each unselected edge to a selected edge, in the augmenting path.
3. The method of
determining an initial packing of pairs of the nodes, where the selected nodes and unselected nodes and the selected edges and unselected edges are initialized based on the initial packing.
4. The method of
assigning weights to the edges in the graph; and
assigning values to the nodes in the graph.
5. The method of
identifying tight edges of the edges in the graph where, for each tight edge of the tight edges, a sum of the values of a respective pair of nodes connected by said each tight edge equals the weight of said each tight edge;
wherein the selected edges in the graph comprising a second packing include only tight edges.
6. The method of
adjusting, for at least one of the iterations, the values of the nodes in the graph to add at least one tight edge to the tight edges.
7. The method of
8. The method of
10. The computer system of
changing each selected edge to an unselected edge, and each unselected edge to a selected edge, in the augmenting path.
11. The computer system of
12. The computer system of
assigning weights to the edges in the graph; and
assigning values to the nodes in the graph.
13. The computer system of
identify tight edges of the edges in the graph where, for each tight edge of the tight edges, a sum of the values of a respective pair of nodes connected by said each tight edge equals the weight of said each tight edge;
wherein the circuit design tool is programmed to select the selected edges from only said each tight edges.
14. The computer system of
adjust, for at least one of the iterations, the values of the nodes in the graph to add at least one tight edge to the tight edges.
15. The computer system of
17. The non-transitory computer-readable storage medium of
changing each selected edge to an unselected edge, and each unselected edge to a selected edge, in the augmenting path.
18. The non-transitory computer-readable storage medium of
assigning weights to the edges in the graph; and
assigning values to the nodes in the graph.
19. The non-transitory computer-readable storage medium of
identifying tight edges of the edges in the graph where, for each tight edge of the tight edges, a sum of the values of a respective pair of nodes connected by said each tight edge equals the weight of said each tight edge;
wherein the selected edges in the graph comprising a second packing include only tight edges.
20. The non-transitory computer-readable storage medium of claim of
adjusting, for at least one of the iterations, the values of the nodes in the graph to add at least one tight edge to the tight edges.
|
Examples of the present disclosure generally relate to electronic circuit design and, in particular, to combining logic elements into pairs in a circuit design system.
Programmable integrated circuits (ICs) are often used to implement digital logic operations according to user configurable input. Example programmable ICs include complex programmable logic devices (CPLDs) and field programmable gate arrays (FPGAs). CPLDs often include several function blocks that are based on a programmable logic array (PLA) architecture with sum-of-products logic. A configurable interconnect matrix transmits signals between the function blocks.
One type of FPGA includes an array of programmable tiles. The programmable tiles comprise various types of logic blocks, which 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), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet 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.
A conventional design process for programmable ICs begins with the creation of the design. The design is then compiled for implementation in a particular programmable IC device. During compilation, a circuit design can be “synthesized” to produce a representation of the circuit design in terms of specific logic elements, which can be optimized to the architecture of the programmable IC (e.g., lookup tables (LUTs), carry logic, 10 buffers, etc.). To generate an optimal implementation in terms of area in the programmable IC, the synthesis process can attempt to combine some logic elements together, including specific pairs of logic elements. Methods currently used to combine or “pack” pairs of logic elements during circuit design employ greedy algorithms. Greedy algorithms can be fast, but can also produce suboptimal results. Generally, greedy algorithms do not reconsider previous packing choices to improve the overall result. Suboptimal packing of logic element pairs results in suboptimal implementation area for the circuit design and suboptimal usage of resources in the programmable IC.
Combining logic elements into pairs in a circuit design system is described. In an example implementation, a method of implementing a circuit design for an integrated circuit (IC), includes: on at least one programmed processor, performing operations including: processing a description of the circuit design having logic elements into a graph having nodes representing the logic elements and edges representing potential pairs of the logic elements; determining a packing of pairs of the nodes to divide the graph into selected and unselected nodes and selected and unselected edges by performing iterations of: identifying an augmenting path in the graph between a pair of unselected nodes; and modifying the selected and unselected nodes and the selected and unselected edges based on the augmenting path; and grouping the logic elements in the description into pairs of logic elements based on the packing of pairs of the nodes.
In another example implementation, a computer system including a circuit design tool executing therein configured to implement a circuit design for an integrated circuit (IC), wherein the circuit design tool is programmed to: process a description of the circuit design having logic elements into a graph having nodes representing the logic elements and edges representing potential pairs of the logic elements; determine a packing of pairs of the nodes to divide the graph into selected and unselected nodes and selected and unselected edges by performing iterations of: identifying an augmenting path in the graph between a pair of unselected nodes; and modifying the selected and unselected nodes and the selected and unselected edges based on the augmenting path; and group the logic elements in the description into pairs of logic elements based on the packing of pairs of the nodes.
In another example implementation, a non-transitory computer-readable storage medium comprising instructions, which when executed in a computer system, causes the computer system to carry out a method of implementing a circuit design for an integrated circuit (IC), comprising: processing a description of the circuit design having logic elements into a graph having nodes representing the logic elements and edges representing potential pairs of the logic elements; determining a packing of pairs of the nodes to divide the graph into selected and unselected nodes and selected and unselected edges by performing iterations of: identifying an augmenting path in the graph between a pair of unselected nodes; and modifying the selected and unselected nodes and the selected and unselected edges based on the augmenting path; and grouping the logic elements in the description into pairs of logic elements based on the packing of pairs of the nodes.
So that the manner in which the above recited features can be understood in detail, a more particular description, briefly summarized above, may be had by reference to example implementations, some of which are illustrated in the appended drawings. It is to be noted, however, that the appended drawings illustrate only typical example implementations and are therefore not to be considered limiting of its scope.
To facilitate understanding, identical reference numerals have been used, where possible, to designate identical elements that are common to the figures. It is contemplated that elements of one example may be beneficially incorporated in other examples.
Combining logic elements into pairs in a circuit design system is described. An example implementation includes a method of implementing a circuit design for an integrated circuit (IC). The method includes a dual-element packing algorithm that finds an optimal combination of pairs of logic elements in a description of a circuit design, such as a logical description generated during synthesis of a circuit design for an IC. The method generates a graph having nodes representing the logic elements to be packed into pairs, and edges between nodes representing the potential logic element pairs. The method employs a matching algorithm to find an optimal packing of node pairs in the graph. The matching algorithm selects edges corresponding to node pairs until no more node pairs are possible. This logically divides the graph into selected nodes (i.e., nodes in pairs) and unselected nodes (i.e., nodes not in pairs), and selected edges (i.e., edges connecting selected node pairs) and unselected edges (i.e., edges not connecting selected node pairs). The matching algorithm can be performed in multiple iterations of identifying an “augmenting path” in the graph, and modifying the current packing of node pairs based on the augmenting path.
In general, an augmenting path in the graph begins and ends at unselected nodes having an alternating sequence of unselected and selected edges therebetween. In a given iteration, the current packing can be modified by changing each selected edge to an unselected edge, and each unselected edge to a selected edge, in the augmenting path. This results in a new, more optimal packing of node pairs than that produced in a previous iteration. The matching algorithm performs iterations on the graph to produce a packing of node pairs. After the packing is determined, the method groups the logic elements in the description into pairs of logic elements based on the packing of node pairs.
In one example implementation, the method processes the graph in two phases. In a first phase, an initial packing of node pairs is selected. For example, the initial packing can be obtained using a greedy algorithm. The greedy algorithm can be used to select edges corresponding to node pairs until no more node pairs are possible. The initial packing, however, is generally not an optimal solution. To further optimize the initial packing, the method proceeds to a second phase. In the second phase, the matching algorithm is performed using the initial packing to initialize the selected and unselected nodes and selected and unselected edges. The matching algorithm produces an optimal packing of node pairs for the graph.
In one example implementation, the edges in the graph are un-weighted and the objective is to maximize the number of node pairs in the graph. When no more augmenting paths can be identified, the packing includes the maximum number of node pairs and is optimal. In examples where an initial packing is determined, such as a greedy packing, the initial packing will be a suboptimal packing in terms of the number of node pairs. The optimal matching algorithm will add at leat one additional node pair to the initial packing.
In another example implementation, when the method forms the graph, weights are assigned to the edges representing potential logic element pairs. The objective is to maximize the total weight of packed logic element pairs. The method assigns values to the nodes in the graph. The values satisfy a “domination property” in that the sum of values of any node pair is greater than or equal to the weight of the edge connecting the node pair. For some node pairs, the sum of their values will be equal to the weight of the connecting edge and such node pairs will satisfy a “tightness property.” Connecting edges between node pairs that satisfy the tightness property are referred to as “tight edges.”
The method then performs an optimal matching algorithm having iterations of the following: (1) The method optionally adjusts some of the values assigned to the nodes to form at least one additional tight edge; (2) The method then identifies an augmenting path between two unselected nodes having an alternating sequence of unselected and selected tight edges (and potentially “fake edge(s)” that do not change the problem, as described below); and (3) The method modifies the current packing of node pairs based on the augmenting path (e.g., unselected and selected tight edges in the augmenting path are swapped to selected and unselected tight edges, respectively). This results in an optimal packing of node pairs in terms of weight. The optimal matching algorithm performs iterations on the graph to produce a packing of node pairs. After the packing is determined, the method groups the logic elements in the description into pairs of logic elements based on the packing of node pairs.
In the weighted graph example, the method performs two phases similar to the un-weighted example. That is, the method can determine the packing in two phases by first determining an initial packing based on tight edges (e.g., greedy packing) and then performing the matching algorithm described above using the initial packing as a starting point. The initial packing is used to produce an initial, faster, suboptimal result in terms of maximum weighting, and the matching algorithm is used to augment the initial packing to produce an optimal result in terms of maximum weighting.
The example dual-element packing methods described herein can be used during synthesis of circuit designs for ICs to pack pairs of logic elements for more efficient implementation. Example ICs include programmable ICs, such as field programmable gate arrays (FPGAs), complex programmable logic devices (CPLDs), and like types of programmable ICs having a set of programmable resources that can be configured to implement circuits. FPGAs, for example, include an array of configurable logic blocks (CLBs) that include lookup tables (LUTs) for implementing logic. A circuit design for an FPGA can be synthesized in terms of specific components, including LUTs. Some FPGA architectures allow two LUTs to be packed together into the same physical entity (a “dual LUT”) when the LUTs share a specific number of inputs. In an example, LUTs can be generated during synthesis and then the dual-element packing methods described herein can be used to pack the LUTs into dual LUTs. The example methods can find the maximum number of duel LUTs that can be implemented, which provides an optimal implementation area. The dual-element packing methods can be employed to pack pairs of other types of logic elements for programmable ICs. The dual-element packing methods can be employed during circuit design for other types of ICs, including application specific integrated circuits (ASICs) and the like. These and further aspects are described further below.
Turning now to the figures,
In some FPGAs, each programmable tile includes a programmable interconnect element (“INT”) 111 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 111 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
For example, a CLB 102 can include a configurable logic element (“CLE”) 112 that can be programmed to implement user logic plus a single programmable interconnect element (“INT”) 111. A BRAM 103 can include a BRAM logic element (“BRL”) 113 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 example, a BRAM tile has the same height as five CLBs, but other numbers (e.g., four) can also be used. A DSP tile 106 can include a DSP logic element (“DSPL”) 114 in addition to an appropriate number of programmable interconnect elements. An 10B 104 can include, for example, two instances of an input/output logic element (“IOL”) 115 in addition to one instance of the programmable interconnect element 111. 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 115 typically are not confined to the area of the input/output logic element 115.
In the pictured example, a horizontal area near the center of the die (shown in
Some FPGAs utilizing the architecture illustrated in
Note that
In general, the circuit design system 200 generates a description of the circuit design, which is processed into a physical implementation (“implementation”) of the circuit design for a particular IC. The circuit design system 200 can process the description of the circuit design through various intermediate transformations to produce the implementation of the circuit design, including a functional description and a logical description. The implementation of the circuit design can be formatted and loaded into a programmable IC to produce a physical circuit, or used to produce physical masks to form an ASIC. Thus, the circuit design system 200 transforms an abstract representation of the circuit design (the description) into a physical representation of the circuit design (the implementation) that can be formatted to realize a physical circuit in an IC. By way of example, the circuit design system 200 is shown as generating a circuit design implementation for a programmable IC, such as an FPGA.
The circuit design system 200 includes a design entry tool 202, a compiler tool (“compiler 204”), and a bitstream generator tool (“bitstream generator 206”). The design entry tool 202 is configured to generate a functional description of the circuit design in response to user input. The functional description can include descriptions for a plurality of circuit components, such as flip-flops, memories, logic gates, processors, and the like, coupled together by connections (referred to as “nets” or “signals”). Example functional descriptions include a schematic description, a structural description, a behavioral description, or a combination thereof.
The design entry tool 202 may include a graphic user interface (GUI) through which a user connects symbols and blocks representing various components to produce a schematic description of the circuit design. In another example, the design entry tool 202 can also include a text interface through which a user writes hardware description language (HDL) code to produce a structural and/or behavioral description of the circuit design in terms of HDL constructs. The design entry tool 202 can employ a combination of schematic and HDL entry.
The compiler 204 is configured to process the functional description of the circuit design to produce a physical implementation of the circuit design. The compiler 204 can include a synthesis tool 212 and an implementation tool 208. The synthesis tool 212 can include dual-element packing tool 214.
The synthesis tool 212 is configured to produce a logical description of the circuit design from the functional description. The logical description of the circuit design includes a logical representation of the circuit design in terms of specific logic elements. For example, the logical description can include a register transfer level (RTL) description that represents the circuit design in terms of generic logic elements, such as adders, multipliers, counters, logic gates, and the like. In another example, the logical description can include a representation of the circuit design in terms of specific logic elements optimized to the architecture of the programmable IC, such as lookup tables (LUTs), carry logic, 10 buffers, and like technology-specific components. In an example, the logical description includes a logical network list (“netlist”) supported by the target programmable IC. One operation performed by the synthesis tool 212 is “technology mapping” that transforms generic circuit elements into technology-specific circuit elements.
The dual-element packing tool 214 is configured to combine logic elements into pairs in the circuit design according to example dual-element packing methods described herein. In general, the dual-element packing tool 214 finds an optimal combination of pairs of logic elements in the logical description of the circuit design. The dual-element packing tool 214 is configured to form a graph having nodes representing the logic elements and edges between nodes representing potential pairings of the logic elements. In some examples, the edges are un-weighted. Such a graph can model the case where there are no preferred pairings of logic elements. In other examples, the edges can be assigned weights. Such a graph with weighted edges can model the case where there are preferred pairings of the logic elements.
In one example, the dual-element packing tool 214 employs a matching algorithm to form an optimal packing of node pairs in the graph. The dual-element packing tool 214 then groups the logic elements according to the optimal node packing. In another example, the dual-element packing tool 214 operates on the graph in two phases. In a first phase, the dual-element packing tool 214 processes the graph to form an initial packing of node pairs (e.g., using a greedy algorithm). In a second phase, the dual-element packing tool 214 employs the matching algorithm to form a more optimal, second packing of node pairs. The dual-element packing tool 214 then groups the logic elements according to the second, optimal packing of the nodes in the graph. Using a greedy algorithm to find an initial packing does not improve the quality of the final packing, which is guaranteed to be optimal after complete of the matching algorithm. The greedy algorithm can be employed, however, to speed-up the matching algorithm by provide an initial set of packings.
In one example, dual-element packing tool 214 finds an optimal combination of pairs of lookup tables (LUTs) in the logical description of the circuit design. ICs, such as programmable ICs, can include LUTs for implementing combinatorial logic, shift registers, memories, or the like of the functional description. The dual-element packing tool 214 can combine LUTs in different ways. For example, pairs of LUTs can be implemented as dual LUTs. In another example, pairs of LUTs can be implemented as cascaded LUTs. Example LUT circuits for implementing pairs of LUTs are described below in
Returning to
The method 550 begins at step 502, the circuit design description is processed to form a graph. Nodes in the graph represent logic elements, and edges in the graph represent potential pairs of the logic elements. At optional step 504, an initial packing of the node pairs can be determined (e.g., a “first packing” is determined). For example, the dual-element packing tool 214 can iteratively select one pair of nodes at each step and pack them into pairs until no more packing is possible (e.g., using a greedy algorithm). With the initial packing (e.g., greedy packing), the dual-element packing tool 214 does not reconsider selections of node pairs in previous iterations. Thus, the initial packing may not be an optimal packing.
At step 506, an optimal matching algorithm is performed to determine a packing of node pairs in the graph. In general, at step 510, an augmenting path is identified in the graph. An “augmenting path” in the graph begins and ends at unselected nodes (i.e., nodes not grouped into pairs). In a general, the augmenting path includes an alternating sequence of unselected and selected edges (i.e., selected edges are those connecting selected node pairs, and unselected edges are those not connecting selected node pairs). At step 512, the current packing is modified based on the augmenting path. The modification results in a more optimal packing than the current packing. For example, in a graph with un-weighted edges, a more optimal packing includes at least one more node pair than a previous packing. In a graph with weighted edges, a more optimal packing includes a more optimal packing in terms of weight than a previous packing.
At step 514, a determination is made whether the current packing is optimal. If not, the method 500 returns to step 510 and repeats for another iteration. If so, the method 500 exits step 506 and proceeds to step 508. Various criteria can be used to determine if the current packing is optimal. For example, for a graph with un-weighted edges, a determination can be made whether there are more augmenting paths that can be identified. If not, the packing is optimal. For a graph with weighted edges, a determination can be made whether the weight of the current packing is optimal (discussed below). At step 508, logic elements in the description are grouped into pairs based on the packing produced in step 506.
The method 550 then proceeds to step 516. At step 516, the description of the circuit design is processed to implement the circuit design for a target IC. For example, the description can be processed by implementation tool 208 and bitstream generator 206 to produce a physical implementation formatted for a programmable IC, such as an FPGA.
At step 608, an augmenting path is identified between unselected nodes. Generally, the augmenting path has an alternating sequence of unselected and selected edges between the unselected nodes. In a trivial case, however, the set of selected edges is empty and the augmenting path can have a single unselected edge between the unselected nodes. At step 610, each selected edge is changed to an unselected edge, and each unselected edge is changed to a selected edge, in the augmenting path. Thus, the graph is modified to include an additional node pair. At step 612, a determination is made whether another augmenting path can be identified. If so, the method 600 returns to step 608 and repeats for another iteration. If the graph includes no more augmenting paths, the current packing is optimal. If the graph includes no more augmenting paths, the method 600 proceeds to step 614, where logic elements are grouped into pairs based on the final packing.
At a next step (“step 1”), a first pair of nodes is selected (e.g., nodes 6 and 7). Selected nodes and edges are represented in
Turning to
At a next step (“step 5”), the augmenting path 704 is modified to improve the number of selected node pairs by one and form an augmenting path 704a. The modification includes changing each selected edge to an unselected edge, and each unselected edge to a selected edge, in the augmenting path 704. Thus, the augmenting path 704a includes a selected edge between nodes 1 and 2, an unselected edge between nodes 2 and 8, a selected edge between nodes 8 and 5, an unselected edge between nodes 5 and 4, and a selected edge between nodes 4 and 3. Thus, after steps 4 and 5, the greedy packing 710 is modified to form an augmented packing 712 having one additional pair of nodes (in terms of the number of node pairs). That is, in the augmented packing 712, nodes 1 and 3 are selected as part of node pairs (e.g., node pair 1 and 2, and node pair 3 and 4). The modification of the greedy packing 710 can include the breaking of previously defined node pair(s) in order to form one additional node pair. In the example, the node pair 2 and 8 is unselected to form node pair 1 and 2 and node pair 3 and 4. The modification of the packing can be performed at step 610 in the method 600. In the present example, only one augmenting path can be identified and an optimal packing is achieved after one augmenting iteration. Other more complicated graphs can require more than one augmenting iteration to achieve optimal packing. Further, in other examples as discussed above, an initial packing is not formed and the matching algorithm is performed on the graph without starting from an initial packing.
In the method 800, the objective is to maximize the total weight of all logic element pairs (not necessarily the number of logic element pairs). It can be useful to put weights on edges in order to favor some packing of the logic elements. For example, two LUTs that share five inputs are a more efficient packed pair than two LUTs that share only a single input (e.g., each shared input saves one connection from having to be routed during implementation). In order to solve the maximum weighted dual-packing problem, values are assigned to each node in the graph. The values assigned to nodes satisfy a “domination property” if the sum of values of a potential node pair in the graph is greater than or equal to the weight of the edge connecting the potential node pair. That is, for each node pair (u, v) such that there is an edge, e, between u and v with weight, w:
y(u)+y(v)≧w(e) Eq.1,
where y(u) is the value assigned to node u, and y(v) is the value assigned to node v. The values assigned to nodes satisfy a “tightness property” if the sum of the values of a potential node pair in the graph is equal to the weight of the edge connecting the potential node pair. That is, a node pair (u, v) satisfy the tightness property if:
y(u)+y(v)=w(e) Eq.2.
The sum of all values assigned to nodes in the graph is always greater than or equal to the weight of any packing. That is, for any packing M, the following is true:
where the set G includes all nodes in the graph, and the set M includes all edges selected for a given packing. Equation 3 is a consequence of the domination property used to assign the values to the nodes. Thus, if the total weight of a particular packing is equal to the sum of the values assigned to the nodes, then the packing is guaranteed to be optimal.
Accordingly, at step 802, the values are assigned to the nodes to satisfy the domination property. At step 804, tight edges in the graph are identified. At optional step 806, an initial packing of node pairs connected by tight edges is determined (e.g., greedy packing). At step 808, the graph is divided into selected nodes and unselected nodes, and selected edges and unselected edges. If an initial packing is not performed, all of the nodes and edges are unselected and the sets of selected nodes and edges are empty. If an initial packing was performed on the tight edges, the selected edges include tight edges and the division is logically formed as a result of the initial packing of node pairs connected by tight edges (e.g., some node pairs are selected and others unselected, resulting in some tight edges being selected and other edges being unselected).
At step 810, an augmenting path is identified between unselected nodes. Generally, the augmenting path has an alternating sequence of unselected and selected tight edges between unselected nodes. In a trivial case, however, the set of selected tight edges is empty and the augmenting path can have a single unselected tight edge between unselected nodes.
In some examples, the augmenting path can include a “fake edge” in the sequence that is deemed to be an unselected edge. A “fake edge” is a connection between nodes in the graph that does not alter the original problem, i.e., an edge having a weight of zero. A fake edge can always be added between two nodes in the graph not having an edge without changing the problem because adding such fake edges into the set of selected edges does not change the total weight of the packing. Fake edges, however, can only be added if they are tight, which implies that the node values of two nodes connected by a fake edge are zero. A fake tight edge can be added at optional step 812.
At step 814, each selected tight edge is changed to an unselected tight edge, and each unselected tight edge is changed to a selected tight edge, in the augmenting path. In some examples, if the augmenting path includes a fake edge, the fake edge can be removed at step 816. Thus, the graph is modified to include a more optimal packing in terms of weight. That is, after the modification at step 814, the packing is increased by one node pair (including a fake edge if present) and the total weight of the packing is increased by a positive number.
Returning to
At a next step (“step 1”), values are assigned to the nodes satisfying the domination property. In the present example, node a is assigned a value of 2; node c is assigned a value of 3; node e is assigned a value of 3; node g is assigned a value of 2; and nodes b, d, f, and h are each assigned a value of 0. Values can be assigned to the graph at step 802 of the method 800.
At a next step (“step 2”), tight edges are identified. Tight edges are represented by dash-dot lines in the graph. In the example, the graph includes tight edges between nodes a and b, nodes c and b, nodes e and d, and nodes g and f. Tight edges can be identified at step 804 of the method 800.
At a next step (“step 3”), node pairs having tight edges are selected iteratively according to a greedy algorithm to produce a greedy packing of tight edges (“greedy packing 910”). Selected nodes and tight edges are represented in
Turning to
At a next step (“step 5”), an augmenting path 904 is identified. The augmenting path 904 is a path between unselected nodes h and c. The augmenting path 904 includes an unselected tight edge between c and b, a selected tight edge between nodes b and a, an unselected tight edge 902 between a and h. The unselected tight edge 902 is a fake edge having a weight of 0. The augmenting path 904 can be identified at step 810 of the method 800.
Turning to
The modification of the packing can be performed at step 814 of the method 800. In the present example, only one augmenting path is identified and optimal packing is achieved after one augmenting iteration. Other more complicated graphs can require more than one augmenting iteration to achieve optimal packing.
If a target programmable IC had CLBs with LUT circuits capable of being configured to implement dual-cascaded LUTs, the circuit 1000 can be optimized for the dual-cascaded LUT configuration. In particular, pairs of the LUTs L1 through L7 can be selected, with each pair being implemented in a dual-cascaded LUT of the programmable IC.
The memory 1308 may store all or portions of one or more programs and/or data to implement the systems and methods described herein. For example, the memory 1308 can store programs for implementing the circuit design system 200 of
The various examples described herein may employ various computer-implemented operations involving data stored in computer systems. For example, these operations may require physical manipulation of physical quantities—usually, though not necessarily, these quantities may take the form of electrical or magnetic signals, where they or representations of them are capable of being stored, transferred, combined, compared, or otherwise manipulated. Further, such manipulations are often referred to in terms, such as producing, identifying, determining, or comparing. Any operations described herein that form part of one or more examples of the disclosure may be useful machine operations. In addition, one or more examples of the disclosure also relate to a device or an apparatus for performing these operations. The apparatus may be specially constructed for specific required purposes, or it may be a general purpose computer selectively activated or configured by a computer program stored in the computer. In particular, various general purpose machines may be used with computer programs written in accordance with the teachings herein, or it may be more convenient to construct a more specialized apparatus to perform the required operations.
The various examples described herein may be practiced with other computer system configurations including hand-held devices, microprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, and the like.
One or more examples of the present disclosure may be implemented as one or more computer programs or as one or more computer program modules embodied in one or more computer readable media. The term computer readable medium refers to any data storage device that can store data which can thereafter be input to a computer system—computer readable media may be based on any existing or subsequently developed technology for embodying computer programs in a manner that enables them to be read by a computer. Examples of a computer readable medium include a hard drive, network attached storage (NAS), read-only memory, random-access memory (e.g., a flash memory device), a Compact Disc (CD)-ROM, a CD-R, or a CD-RW, a DVD (Digital Versatile Disc), a magnetic tape, and other optical and non-optical data storage devices. The computer readable medium can also be distributed over a network coupled computer system so that the computer readable code is stored and executed in a distributed fashion.
While the foregoing is directed to specific examples, other and further examples may be devised without departing from the basic scope thereof, and the scope thereof is determined by the claims that follow.
Patent | Priority | Assignee | Title |
Patent | Priority | Assignee | Title |
7237214, | Mar 04 2003 | SYNOPSYS, INC , A DELAWARE CORPORATION | Method and apparatus for circuit partitioning and trace assignment in circuit design |
7844930, | Mar 04 2003 | SYNOPSYS, INC , A DELAWARE CORPORATION | Method and apparatus for circuit partitioning and trace assignment in circuit design |
8176452, | Mar 04 2003 | Synopsys, Inc. | Method and apparatus for circuit partitioning and trace assignment in circuit design |
8458639, | Mar 04 2003 | Synopsys, Inc. | Circuit partitioning and trace assignment in circuit design |
9038013, | Mar 04 2003 | Synopsys, Inc. | Circuit partitioning and trace assignment in circuit design |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Aug 12 2014 | FRAISSE, HENRI | Xilinx, Inc | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 033541 | /0220 | |
Aug 14 2014 | XILINX, Inc. | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Jul 12 2019 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Jun 21 2023 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Date | Maintenance Schedule |
Jan 12 2019 | 4 years fee payment window open |
Jul 12 2019 | 6 months grace period start (w surcharge) |
Jan 12 2020 | patent expiry (for year 4) |
Jan 12 2022 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jan 12 2023 | 8 years fee payment window open |
Jul 12 2023 | 6 months grace period start (w surcharge) |
Jan 12 2024 | patent expiry (for year 8) |
Jan 12 2026 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jan 12 2027 | 12 years fee payment window open |
Jul 12 2027 | 6 months grace period start (w surcharge) |
Jan 12 2028 | patent expiry (for year 12) |
Jan 12 2030 | 2 years to revive unintentionally abandoned end. (for year 12) |