Skip to content

Commit 7c635ba

Browse files
authored
Merge branch 'master' into gui_update
2 parents e164548 + 7641911 commit 7c635ba

38 files changed

+2779
-166
lines changed

doc/src/arch/reference.rst

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2485,7 +2485,7 @@ The full format is documented below.
24852485
Defined under the ``<switchfuncs>`` XML node, one or more ``<func...>`` entries is used to specify permutation functions that connect different sides of a switch block.
24862486

24872487

2488-
.. arch:tag:: <wireconn num_conns="expr" from_type="string, string, string, ..." to_type="string, string, string, ..." from_switchpoint="int, int, int, ..." to_switchpoint="int, int, int, ..." from_order="{fixed | shuffled}" to_order="{fixed | shuffled}" switch_override="string"/>
2488+
.. arch:tag:: <wireconn num_conns="expr" from_type="string, string, string, ..." to_type="string, string, string, ..." from_switchpoint="int, int, int, ..." to_switchpoint="int, int, int, ..." from_order="{fixed | shuffled}" to_order="{fixed | shuffled}" switch_override="string" side="string"/>
24892489
24902490
:req_param num_conns:
24912491
Specifies how many connections should be created between the from_type/from_switchpoint set and the to_type/to_switchpoint set.
@@ -2592,6 +2592,10 @@ The full format is documented below.
25922592
By using a zero-delay and zero-resistance switch one can also create T and L shaped wire segments.
25932593

25942594
**Default:** If no override is specified, the usual wire_switch that drives the ``to`` wire will be used.
2595+
2596+
:opt_param side:
2597+
Specifies the sides that connections are gathered from or scattered to. Valid sides are right, left, top and bottom and are represented by characters 'r', 'l', 't' and 'b'.
2598+
For example, to select connections from right, left and bottom set this attribute to "rlb". Note that this attribute is used only for :ref:`scatter_gather_patterns` and does not do anything for other usages of this tag.
25952599

25962600
.. arch:tag:: <from type="string" switchpoint="int, int, int, ..."/>
25972601
@@ -2634,6 +2638,110 @@ The full format is documented below.
26342638
The 'to' set is all L4 switchpoint 0's.
26352639
Note that since different switchpoints are selected from different segment types it is not possible to specify this without using ``<from>`` sub-tags.
26362640
2641+
.. _scatter_gather_patterns:
2642+
2643+
Scatter-Gather Patterns
2644+
---------------------
2645+
2646+
The content under the ``<scatter_gather_list>`` tag consists of one or more ``<sg_pattern>`` tags that are used to specify a scatter-gather pattern.
2647+
Scatter-gather patterns can be used to specify multi-level switch patterns, rather than the direct wire-to-wire switch patterns of conventional switch blocks.
2648+
These additional switches, wires and/or muxes will be added to the architecture, augmenting wires created using segment specifications and swiches created using switch box specifications.
2649+
The number of any additional wires or muxes created by scatter-gather specifications will not vary with routing channel width.
2650+
2651+
.. figure:: scatter_gather_images/scattergather_diagram.svg
2652+
2653+
Overview of how scatter-gather patterns work. First, connections from a switchblock location are selected according to the specification.
2654+
These selected connection are then muxed and passed through the scatter-gather node, which is typically a wire segment. The scatter-gather node then fans out or scatters in another switchblock location.
2655+
2656+
.. note:: Scatter-Gather patterns are work in progress and experimental. Currently, VPR does not support this specification and using this tag would not result in any modifications to the RR-Graph.
2657+
2658+
When instantiated, a scatter-gather pattern gathers connections from a switchblock and passes the connection through a multiplexer and the scatter-gather node which is typically a wire segment, then scatters or fans out somewhere else in the device. These patterns can be used to define 3D switchblocks. An example is shown below:
2659+
2660+
.. code-block:: xml
2661+
2662+
<scatter_gather_list>
2663+
<sg_pattern name="name" type="unidir">
2664+
<gather>
2665+
<!-- Gather 30 connections from the 0, 4, 8 or 12 position of L16 wires of all four sides of a switchblock location -->
2666+
<wireconn num_conns="30" from_type="L16" from_switchpoint="0,12,8,4" side="rltb"/>
2667+
<gather/>
2668+
2669+
<scatter>
2670+
<!-- Scatter 30 connections to the starting position of L16 wires of all four sides of a switchblock location -->
2671+
<wireconn num_conns="30" to_type="L16" to_switchpoint="0" side="rtlb"/>
2672+
<scatter/>
2673+
2674+
<sg_link_list>
2675+
<!-- Link going up one layer, using the '3D_SB_MUX' multiplexer to gather connections from the bottom layer and using the 'TSV' node/wire to move up one layer -->
2676+
<sg_link name="L_UP" z_offset="1" x_offset="0" y_offset="0" mux="3D_SB_MUX" seg_type="TSV"/>
2677+
<!-- Same as above but moving one layer down -->
2678+
<sg_link name="L_DOWN" z_offset="-1" mux="3D_SB_MUX" seg_type="TSV"/>
2679+
<sg_link_list/>
2680+
2681+
<!-- Instantiate 10 'L_UP' sg_links per switchblock location everywhere on the device -->
2682+
<sg_location type="EVERYWHERE" num="10" sg_link="L_UP"/>
2683+
<!-- Instantiate 10 'L_DOWN' sg_links per switchblock location everywhere on the device -->
2684+
<sg_location type="EVERYWHERE" num="10" sg_link="L_DOWN"/>
2685+
<sg_pattern/>
2686+
2687+
<sg_pattern name="interposer_conn_sg" type="bidir">
2688+
... <!-- Another scatter-gather pattern specification -->
2689+
<sg_pattern/>
2690+
<scatter_gather_list/>
2691+
2692+
.. arch:tag:: <sg_pattern name="string" type={unidir|bidir}>
2693+
2694+
:req_param name: A unique alphanumeric string
2695+
:req_param type: ``unidir`` or ``bidir``.
2696+
2697+
'unidir': Added connections are unidirectional; all the gather connections are combined in a mux that then drives the scatter-gather node which in turn drives the wires specified in the scatter specification.
2698+
2699+
'bidir': The gather and scatter connections are mirrored; the same scatter pattern is implemented at each end of the scatter-gather pattern. This implies the two muxes driving the scatter-gather node can have their outputs tri-stated.
2700+
2701+
.. arch:tag:: <gather>
2702+
2703+
Contains a <wireconn> tag specifying how the fan-in or gather connections are selected. See ``wireconn`` for the relevant specification.
2704+
This <wireconn> tag supports an additioinal 'side' attribute which selects the sides that connections are gathered from (e.g. any of the top, bottom, left and right).
2705+
2706+
.. arch:tag:: <scatter>
2707+
2708+
Contains a <wireconn> tag specifying how the fan-out or scatter connections are selected. See ``wireconn`` for the relevant specification.
2709+
This <wireconn> tag supports an additioinal 'side' attribute which selects the sides that connections are scattered to (e.g. any of the top, bottom, left and right).
2710+
2711+
.. arch:tag:: <sg_link_list>
2712+
2713+
Contains one or more <sg_link> tags specifying how the pattern of how connections move from the gather location to the scatter location i.e. defines the used mux and scatter-gather node.
2714+
2715+
.. note:: <sg_link> tags are not instantiations of the pattern and would not result in any changes to the device. instead, the <sg_location> tag instantiates the pattern and selects one of the <sg_link> tags to be used for the instantiation.
2716+
2717+
.. arch:tag:: <sg_link name="string" x_offset="int" y_offset="int" z_offset="int" mux="string" seg_type="string">
2718+
2719+
:req_param name: A unique alphanumeric string
2720+
:req_param mux: Name of the multiplexer used to gather connections
2721+
:req_param seg_type: Name of the segment/wire used to move through the device to the scatter location (i.e. the type of the scatter-gather node)
2722+
2723+
:opt_param x_offset: Offset of the scatter relative to the gather in the x-axis
2724+
:opt_param y_offset: Offset of the scatter relative to the gather in the y-axis
2725+
:opt_param z_offset: Offset of the scatter relative to the gather in the z-axis
2726+
2727+
.. note:: One and only one of the offset fields for the sg_link tag should be set. The magnitude of the offset will generally be chosen by the architecture file creator to match the length of the sg_link segment type.
2728+
2729+
.. arch:tag:: <sg_location type="string" num="int" sg_link_name="string">
2730+
2731+
Instantiates the scatter-gather pattern with the specified sg_link.
2732+
2733+
:req_param num: number of scatter-gather instances per matching location (e.g. per switch block)
2734+
:req_param sg_link_name: name of the sg_link used in the instantiation
2735+
:req_param type: Can be one of the following strings:
2736+
2737+
* ``EVERYWHERE`` – at each switch block of the FPGA
2738+
* ``PERIMETER`` – at each perimeter switch block (x-directed and/or y-directed channel segments may terminate here)
2739+
* ``CORNER`` – only at the corner switch blocks (both x and y-directed channels terminate here)
2740+
* ``FRINGE`` – same as PERIMETER but excludes corners
2741+
* ``CORE`` – everywhere but the perimeter
2742+
Sets the location on the FPGA where the connections described by this scatter-gather pattern be instantiated.
2743+
2744+
26372745
.. _arch_metadata:
26382746
26392747
Architecture metadata
171 KB
Loading

doc/src/arch/scatter_gather_images/scattergather_diagram.svg

Lines changed: 4 additions & 0 deletions
Loading

doc/src/vpr/command_line_usage.rst

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,14 +1240,19 @@ Analytical Placement is generally split into three stages:
12401240

12411241
Analytical Placement is experimental and under active development.
12421242

1243-
.. option:: --ap_analytical_solver {qp-hybrid | lp-b2b}
1243+
.. option:: --ap_analytical_solver {identity | qp-hybrid | lp-b2b}
12441244

12451245
Controls which Analytical Solver the Global Placer will use in the AP Flow.
12461246
The Analytical Solver solves for a placement which optimizes some objective
12471247
function, ignorant of the FPGA legality constraints. This provides a "lower-
12481248
bound" solution. The Global Placer will legalize this solution and feed it
12491249
back to the analytical solver to make its solution more legal.
12501250

1251+
* ``identity`` Does not formulate any equations and just passes the last
1252+
legalized solution through. In the first iteration, it initializes all blocks
1253+
to the center of the device. This solver is only used for testing and
1254+
debugging and should not be part of any real AP flow.
1255+
12511256
* ``qp-hybrid`` Solves for a placement that minimizes the quadratic HPWL of
12521257
the flat placement using a hybrid clique/star net model (as described in
12531258
FastPlace :cite:`Viswanathan2005_FastPlace`).
@@ -1261,13 +1266,17 @@ Analytical Placement is generally split into three stages:
12611266

12621267
**Default:** ``lp-b2b``
12631268

1264-
.. option:: --ap_partial_legalizer {bipartitioning | flow-based}
1269+
.. option:: --ap_partial_legalizer {none | bipartitioning | flow-based}
12651270

12661271
Controls which Partial Legalizer the Global Placer will use in the AP Flow.
12671272
The Partial Legalizer legalizes a placement generated by an Analytical Solver.
12681273
It is used within the Global Placer to guide the solver to a more legal
12691274
solution.
12701275

1276+
* ``none`` Does not partially legalize the global placement solution and just
1277+
passes the last solved solution through. This partial legalizer is only
1278+
used for testing and debugging and should not be part of any real AP flow.
1279+
12711280
* ``bipartitioning`` Creates minimum windows around over-dense regions of
12721281
the device bi-partitions the atoms in these windows such that the region
12731282
is no longer over-dense and the atoms are in tiles that they can be placed
@@ -1882,6 +1891,9 @@ The following options are only valid when the router is in timing-driven mode (t
18821891

18831892
* ``classic``: The classic VPR lookahead
18841893
* ``map``: A more advanced lookahead which accounts for diverse wire types and their connectivity
1894+
* ``compressed_map``: The algorithm is similar to map lookahead with the exception of sparse sampling of the chip to reduce the run-time to build the router lookahead and also its memory footprint.
1895+
* ``extended_map``: A more advanced and extended lookahead which accounts for a more exhaustive node sampling method.
1896+
* ``simple``: A purely distance-based lookahead loaded from an external file using :option:`--read_router_lookahead`. This lookahead returns a cost estimate for channel nodes by querying a lookup table, while for any other node type it returns zero.
18851897

18861898
**Default:** ``map``
18871899

0 commit comments

Comments
 (0)