You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/src/arch/reference.rst
+37-1Lines changed: 37 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1724,13 +1724,24 @@ A pack pattern is a power user feature directing that the CAD tool should group
1724
1724
This allows the architect to help the CAD tool recognize structures that have limited flexibility so that netlist atoms that fit those structures be kept together as though they are one unit.
1725
1725
This tag impacts the CAD tool only, there is no architectural impact from defining molecules.
.. warning:: This is a power user option. Unless you know why you need it, you probably shouldn't specify it.
1730
1730
1731
1731
:req_param name: The name of the pattern.
1732
1732
:req_param in_port: The input pins of the edges for this pattern.
1733
1733
:req_param out_port: Which output pins of the edges for this pattern.
1734
+
:opt_param allow_multi_fanout:
1735
+
1736
+
Controls whether a molecule can still be formed over this pattern connection when the netlist signal carrying it also drives other logic.
1737
+
1738
+
By default (``false``), the packer only matches this connection if the net driving it has exactly one sink, i.e. the signal goes straight from the source primitive to the destination primitive and nowhere else.
1739
+
If the net fans out to additional sinks, the molecule is cut at this connection.
1740
+
1741
+
When set to ``true``, the packer will match this connection even if the net drives multiple sinks: the sink that fits the pattern becomes part of the molecule, and the remaining sinks are routed normally outside of it.
1742
+
Only set this on connections where the architecture actually provides a path for that extra fanout to leave the pattern (see *Multi-fanout connections* below).
1743
+
1744
+
**Default:** ``false``
1734
1745
1735
1746
This tag gives a hint to the CAD tool that certain architectural structures should stay together during packing.
1736
1747
The tag labels interconnect edges with a pack pattern name.
@@ -1744,6 +1755,31 @@ This tag impacts the CAD tool only, there is no architectural impact from defini
1744
1755
Pack patterns with more primitives take priority over pack patterns with less primitives.
1745
1756
In the event that the number of primitives is the same, the pack pattern with less inputs takes priority over pack patterns with more inputs.
1746
1757
1758
+
**Multi-fanout connections:**
1759
+
1760
+
By default, the prepacker assumes each pack pattern connection is point-to-point: if the netlist net implementing a connection fans out to more than one sink, no molecule is formed over that connection.
1761
+
This is a conservative assumption — a net with extra fanout may not be routable through the dedicated intra-block interconnect the pattern describes, since the other sinks also need to be reached.
1762
+
1763
+
If the architecture can absorb the extra fanout (e.g., the block provides paths from the pattern connection to general routing), the architect can mark the ``<pack_pattern>`` annotation with ``allow_multi_fanout="true"``.
1764
+
The prepacker will then form molecules over this connection even when its net drives multiple sinks; among the sinks, the one matching the pattern's destination primitive continues the molecule, and the remaining sinks are left to be routed outside the pattern.
1765
+
1766
+
Note that the attribute is written on individual interconnect edges, but its effect is defined at the level of a *primitive-to-primitive connection*.
1767
+
Such a connection may pass through several interconnect edges when the two primitives are not directly wired together (e.g., the signal traverses intermediate modes or levels of the pb_type hierarchy).
1768
+
The architect does not need to annotate every edge along that path: if any annotated edge on the connection's path is marked ``allow_multi_fanout="true"``, the entire primitive-to-primitive connection allows multi-fanout.
1769
+
1770
+
.. note::
1771
+
1772
+
If several sinks match the pattern's destination primitive, only one joins the molecule.
1773
+
For example, with a ``LUT -> FF`` pack pattern and a LUT driving two FFs, the prepacker picks the last matching FF added to the netlist to form the molecule; the other FF is packed as a separate atom.
1774
+
1775
+
For example, in a carry chain where each adder's ``cout`` may also feed look-ahead logic in addition to the next adder's ``cin``, marking the chain's ``cout`` link keeps chain molecules together despite the extra fanout:
0 commit comments