Skip to content

Commit e06071b

Browse files
Improve scatter-gather documentation
1 parent ec1d1ec commit e06071b

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

doc/src/arch/reference.rst

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2640,42 +2640,52 @@ Scatter-Gather Patterns
26402640
---------------------
26412641
26422642
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.
2643+
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.
2644+
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.
2645+
The number of any additional wires or muxes created by scatter-gather specifications will not vary with routing channel width.
26432646
26442647
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:
26452648
26462649
.. code-block:: xml
26472650
26482651
<scatter_gather_list>
2649-
<sg_pattern name="name" type="unidir"> <!-- segment: attribute or tag? -->
2652+
<sg_pattern name="name" type="unidir">
26502653
<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 -->
2654+
<!-- Gather 30 connections from the 0, 4, 8 or 12 position of L16 wires of all four sides of a switchblock location -->
2655+
<wireconn num_conns="30" from_type="L16" from_switchpoint="0,12,8,4" side="rltb"/>
26522656
<gather/>
26532657
26542658
<scatter>
2655-
<wireconn num_conns="30" to_type="L16" to_switchpoint="0" side="rtlb"/> <!-- Illegal to have from_type and from_switchpoint -->
2659+
<!-- Scatter 30 connections to the starting position of L16 wires of all four sides of a switchblock location -->
2660+
<wireconn num_conns="30" to_type="L16" to_switchpoint="0" side="rtlb"/>
26562661
<scatter/>
26572662
26582663
<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 -->
2664+
<!-- 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 -->
2665+
<sg_link name="L_UP" z_offset="1" x_offset="0" y_offset="0" mux="3D_SB_MUX" seg_type="TSV"/>
2666+
<!-- Same as above but moving one layer down -->
26602667
<sg_link name="L_DOWN" z_offset="-1" mux="3D_SB_MUX" seg_type="TSV"/>
26612668
<sg_link_list/>
2662-
2663-
<sg_location type="EVERYWHERE" num="10" sg_link="L_UP"/> <!-- type="EVERYWHERE/PERIMETER/CORNER/FRINGE/CORE"-->
2669+
2670+
<!-- Instantiate 10 'L_UP' sg_links per switchblock location everywhere on the device -->
2671+
<sg_location type="EVERYWHERE" num="10" sg_link="L_UP"/>
2672+
<!-- Instantiate 10 'L_DOWN' sg_links per switchblock location everywhere on the device -->
26642673
<sg_location type="EVERYWHERE" num="10" sg_link="L_DOWN"/>
26652674
<sg_pattern/>
26662675
26672676
<sg_pattern name="interposer_conn_sg" type="bidir">
2668-
... <!-- Another scatter-gather pattern specification-->
2677+
... <!-- Another scatter-gather pattern specification -->
26692678
<sg_pattern/>
26702679
<scatter_gather_list/>
26712680
2672-
This format allows users to specify complex switchblock patterns without the verbosity of custom switchblocks.
2673-
26742681
.. arch:tag:: <sg_pattern name="string" type={unidir|bidir}>
26752682
26762683
:req_param name: A unique alphanumeric string
26772684
:req_param type: ``unidir`` or ``bidir``.
26782685
2686+
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.
2687+
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.
2688+
26792689
.. arch:tag:: <gather>
26802690
26812691
Contains a <wireconn> tag specifying how the fan-in or gather connections are selected. See ``wireconn`` for the relevant specification.
@@ -2686,27 +2696,27 @@ This format allows users to specify complex switchblock patterns without the ver
26862696
26872697
.. arch:tag:: <sg_link_list>
26882698
2689-
Contains one or more <sg_link> tags specifying how the connections move from the gather location to the scatter location.
2699+
Contains one or more <sg_link> tags specifying how the pattern of how connections move from the gather location to the scatter location.
26902700
26912701
.. note:: These <sg_link> tags are not instantiations of the pattern. instead, the instantiations select one of the sg_link tags to use.
26922702
26932703
.. arch:tag:: <sg_link name="string" x_offset="int" y_offset="int" z_offset="int" mux="string" seg_type="string">
26942704
26952705
:req_param name: A unique alphanumeric string
26962706
: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
2707+
: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)
26982708
26992709
:opt_param x_offset: Offset of the scatter relative to the gather in the x-axis
27002710
:opt_param x_offset: Offset of the scatter relative to the gather in the y-axis
27012711
:opt_param x_offset: Offset of the scatter relative to the gather in the z-axis
27022712
2703-
.. note:: One and only one of the offset fields for the sg_link tag must be set.
2713+
.. 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.
27042714
27052715
.. arch:tag:: <sg_location type="string" num="int" sg_link_name="string">
27062716
27072717
Instantiates the scatter-gather pattern with the specified sg_link.
27082718
2709-
:req_param num: number of scatter-gather instances per switch_block
2719+
:req_param num: number of scatter-gather instances per matching location (e.g. per switch block)
27102720
:req_param sg_link_name: name of the sg_link used in the instantiation
27112721
:req_param type: Can be one of the following strings:
27122722

0 commit comments

Comments
 (0)