Skip to content

Commit 6e659aa

Browse files
Improve scatter-gather documentation
1 parent ec1d1ec commit 6e659aa

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

doc/src/arch/reference.rst

Lines changed: 32 additions & 14 deletions
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 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
@@ -2640,73 +2644,87 @@ Scatter-Gather Patterns
26402644
---------------------
26412645
26422646
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+
.. 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.
26432652
26442653
When instantiated, a scatter-gather pattern gathers connections from a switchblock and passes the connection through a multiplexer and 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:
26452654
26462655
.. code-block:: xml
26472656
26482657
<scatter_gather_list>
2649-
<sg_pattern name="name" type="unidir"> <!-- segment: attribute or tag? -->
2658+
<sg_pattern name="name" type="unidir">
26502659
<gather>
2651-
<wireconn num_conns="30" from_type="L16" from_switchpoint="0,12,8,4" side="rltb"/> <!-- Illegal to have to_type and to_switchpoint --> <!-- No above/under side -->
2660+
<!-- Gather 30 connections from the 0, 4, 8 or 12 position of L16 wires of all four sides of a switchblock location -->
2661+
<wireconn num_conns="30" from_type="L16" from_switchpoint="0,12,8,4" side="rltb"/>
26522662
<gather/>
26532663
26542664
<scatter>
2655-
<wireconn num_conns="30" to_type="L16" to_switchpoint="0" side="rtlb"/> <!-- Illegal to have from_type and from_switchpoint -->
2665+
<!-- Scatter 30 connections to the starting position of L16 wires of all four sides of a switchblock location -->
2666+
<wireconn num_conns="30" to_type="L16" to_switchpoint="0" side="rtlb"/>
26562667
<scatter/>
26572668
26582669
<sg_link_list>
2659-
<sg_link name="L_UP" z_offset="1" x_offset="0" y_offset="0" mux="3D_SB_MUX" seg_type="TSV"/> <!-- One hot offsets -->
2670+
<!-- 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 -->
2671+
<sg_link name="L_UP" z_offset="1" x_offset="0" y_offset="0" mux="3D_SB_MUX" seg_type="TSV"/>
2672+
<!-- Same as above but moving one layer down -->
26602673
<sg_link name="L_DOWN" z_offset="-1" mux="3D_SB_MUX" seg_type="TSV"/>
26612674
<sg_link_list/>
2662-
2663-
<sg_location type="EVERYWHERE" num="10" sg_link="L_UP"/> <!-- type="EVERYWHERE/PERIMETER/CORNER/FRINGE/CORE"-->
2675+
2676+
<!-- Instantiate 10 'L_UP' sg_links per switchblock location everywhere on the device -->
2677+
<sg_location type="EVERYWHERE" num="10" sg_link="L_UP"/>
2678+
<!-- Instantiate 10 'L_DOWN' sg_links per switchblock location everywhere on the device -->
26642679
<sg_location type="EVERYWHERE" num="10" sg_link="L_DOWN"/>
26652680
<sg_pattern/>
26662681
26672682
<sg_pattern name="interposer_conn_sg" type="bidir">
2668-
... <!-- Another scatter-gather pattern specification-->
2683+
... <!-- Another scatter-gather pattern specification -->
26692684
<sg_pattern/>
26702685
<scatter_gather_list/>
26712686
2672-
This format allows users to specify complex switchblock patterns without the verbosity of custom switchblocks.
2673-
26742687
.. arch:tag:: <sg_pattern name="string" type={unidir|bidir}>
26752688
26762689
:req_param name: A unique alphanumeric string
26772690
:req_param type: ``unidir`` or ``bidir``.
26782691
2692+
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.
2693+
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.
2694+
26792695
.. arch:tag:: <gather>
26802696
26812697
Contains a <wireconn> tag specifying how the fan-in or gather connections are selected. See ``wireconn`` for the relevant specification.
2698+
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).
26822699
26832700
.. arch:tag:: <scatter>
26842701
26852702
Contains a <wireconn> tag specifying how the fan-out or scatter connections are selected. See ``wireconn`` for the relevant specification.
2703+
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).
26862704
26872705
.. arch:tag:: <sg_link_list>
26882706
2689-
Contains one or more <sg_link> tags specifying how the connections move from the gather location to the scatter location.
2707+
Contains one or more <sg_link> tags specifying how the pattern of how connections move from the gather location to the scatter location.
26902708
26912709
.. note:: These <sg_link> tags are not instantiations of the pattern. instead, the instantiations select one of the sg_link tags to use.
26922710
26932711
.. arch:tag:: <sg_link name="string" x_offset="int" y_offset="int" z_offset="int" mux="string" seg_type="string">
26942712
26952713
:req_param name: A unique alphanumeric string
26962714
:req_param mux: Name of the multiplexer used to gather connections
2697-
:req_param seg_type: Name of the segment/wire used to move through the device to the scatter location
2715+
: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)
26982716
26992717
:opt_param x_offset: Offset of the scatter relative to the gather in the x-axis
27002718
:opt_param x_offset: Offset of the scatter relative to the gather in the y-axis
27012719
:opt_param x_offset: Offset of the scatter relative to the gather in the z-axis
27022720
2703-
.. note:: One and only one of the offset fields for the sg_link tag must be set.
2721+
.. note:: One and only one of the offset fields for the sg_link tag must 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.
27042722
27052723
.. arch:tag:: <sg_location type="string" num="int" sg_link_name="string">
27062724
27072725
Instantiates the scatter-gather pattern with the specified sg_link.
27082726
2709-
:req_param num: number of scatter-gather instances per switch_block
2727+
:req_param num: number of scatter-gather instances per matching location (e.g. per switch block)
27102728
:req_param sg_link_name: name of the sg_link used in the instantiation
27112729
:req_param type: Can be one of the following strings:
27122730

0 commit comments

Comments
 (0)