@@ -1599,88 +1599,138 @@ enum e_Fc_type {
1599
1599
FRACTIONAL
1600
1600
};
1601
1601
1602
- /* Lists all the important information about a certain segment type. Only *
1603
- * used if the route_type is DETAILED. [0 .. det_routing_arch.num_segment] *
1604
- * name: the name of this segment *
1605
- * frequency: ratio of tracks which are of this segment type. *
1606
- * length: Length (in clbs) of the segment. *
1607
- * arch_wire_switch: Index of the switch type that connects other wires *
1608
- * *to* this segment. Note that this index is in relation *
1609
- * to the switches from the architecture file, not the *
1610
- * expanded list of switches that is built at the end of *
1611
- * build_rr_graph. *
1612
- * arch_opin_switch: Index of the switch type that connects output pins *
1613
- * (OPINs) *to* this segment. Note that this index is in *
1614
- * relation to the switches from the architecture file, *
1615
- * not the expanded list of switches that is built *
1616
- * at the end of build_rr_graph *
1617
- * @param arch_wire_switch_dec: Same as arch_wire_switch but used only for *
1618
- * decremental tracks if it is specified in the *
1619
- * architecture file. If -1, this value was not set in *
1620
- * the architecture file and arch_wire_switch should be *
1621
- * used for "DEC_DIR" wire segments. *
1622
- * @param arch_opin_switch_dec: Same as arch_opin_switch but used only for *
1623
- * decremental tracks if it is specified in the *
1624
- * architecture file. If -1, this value was not set in *
1625
- * the architecture file and arch_opin_switch should be *
1626
- * used for "DEC_DIR" wire segments. *
1627
- * @param arch_opin_between_dice_switch: Index of the switch type that *
1628
- * connects output pins (OPINs) *to* this segment from *
1629
- * *another die (layer)*. Note that this index is in *
1630
- * relation to the switches from the architecture file, *
1631
- * not the expanded list of switches that is built at *
1632
- * the end of build_rr_graph *
1633
- * *
1634
- * frac_cb: The fraction of logic blocks along its length to which this *
1635
- * segment can connect. (i.e. internal population). *
1636
- * frac_sb: The fraction of the length + 1 switch blocks along the segment *
1637
- * to which the segment can connect. Segments that aren't long *
1638
- * lines must connect to at least two switch boxes. *
1639
- * parallel_axis: Defines what axis the segment is parallel to. See *
1640
- * e_parallel_axis comments for more details on the values. *
1641
- * Cmetal: Capacitance of a routing track, per unit logic block length. *
1642
- * Rmetal: Resistance of a routing track, per unit logic block length. *
1643
- * (UDSD by AY) drivers: How do signals driving a routing track connect to *
1644
- * the track? *
1645
- * seg_index: The index of the segment as stored in the appropriate Segs list*
1646
- * Upon loading the architecture, we use this field to keep track *
1647
- * the segment's index in the unified segment_inf vector. This is *
1648
- * useful when building the rr_graph for different Y & X channels *
1649
- * in terms of track distribution and segment type. *
1650
- * res_type: Determines the routing network to which the segment belongs. *
1651
- * Possible values are: *
1652
- * - GENERAL: The segment is part of the general routing *
1653
- * resources. *
1654
- * - GCLK: The segment is part of the global routing network. *
1655
- * For backward compatibility, this attribute is optional. If not *
1656
- * specified, the resource type for the segment is considered to *
1657
- * be GENERAL. *
1658
- * meta: Table storing extra arbitrary metadata attributes. */
1602
+ /* *
1603
+ * @brief Lists all the important information about a certain segment type. Only
1604
+ * used if the route_type is DETAILED. [0 .. det_routing_arch.num_segment]
1605
+ */
1659
1606
struct t_segment_inf {
1607
+ /* *
1608
+ * @brief The name of the segment type
1609
+ */
1660
1610
std::string name;
1611
+
1612
+ /* *
1613
+ * @brief ratio of tracks which are of this segment type.
1614
+ */
1661
1615
int frequency;
1616
+
1617
+ /* *
1618
+ * @brief Length (in clbs) of the segment.
1619
+ */
1662
1620
int length;
1621
+
1622
+ /* *
1623
+ * @brief Index of the switch type that connects other wires to this segment.
1624
+ * Note that this index is in relation to the switches from the architecture file,
1625
+ * not the expanded list of switches that is built at the end of build_rr_graph.
1626
+ */
1663
1627
short arch_wire_switch;
1628
+
1629
+ /* *
1630
+ * @brief Index of the switch type that connects output pins to this segment.
1631
+ * Note that this index is in relation to the switches from the architecture file,
1632
+ * not the expanded list of switches that is built at the end of build_rr_graph.
1633
+ */
1664
1634
short arch_opin_switch;
1635
+
1636
+ /* *
1637
+ * @brief Same as arch_wire_switch but used only for decremental tracks if it is
1638
+ * specified in the architecture file. If -1, this value was not set in the
1639
+ * architecture file and arch_wire_switch should be used for "DEC_DIR" wire segments.
1640
+ */
1665
1641
short arch_wire_switch_dec = -1 ;
1642
+
1643
+ /* *
1644
+ * @brief Same as arch_opin_switch but used only for decremental tracks if
1645
+ * it is specified in the architecture file. If -1, this value was not set in
1646
+ * the architecture file and arch_opin_switch should be used for "DEC_DIR" wire segments.
1647
+ */
1666
1648
short arch_opin_switch_dec = -1 ;
1667
- short arch_opin_between_dice_switch = -1 ;
1649
+
1650
+ /* *
1651
+ * @brief Index of the switch type that connects output pins (OPINs) to this
1652
+ * segment from another die (layer). Note that this index is in relation to
1653
+ * the switches from the architecture file, not the expanded list of switches
1654
+ * that is built at the end of build_rr_graph.
1655
+ */
1656
+ short arch_inter_die_switch = -1 ;
1657
+
1658
+ /* *
1659
+ * @brief The fraction of logic blocks along its length to which this segment can connect.
1660
+ * (i.e. internal population).
1661
+ */
1668
1662
float frac_cb;
1663
+
1664
+ /* *
1665
+ * @brief The fraction of the length + 1 switch blocks along the segment to which the segment can connect.
1666
+ * Segments that aren't long lines must connect to at least two switch boxes.
1667
+ */
1669
1668
float frac_sb;
1669
+
1670
1670
bool longline;
1671
+
1672
+ /* *
1673
+ * @brief The resistance of a routing track, per unit logic block length. */
1671
1674
float Rmetal;
1675
+
1676
+ /* *
1677
+ * @brief The capacitance of a routing track, per unit logic block length. */
1672
1678
float Cmetal;
1679
+
1673
1680
enum e_directionality directionality;
1681
+
1682
+ /* *
1683
+ * @brief Defines what axis the segment is parallel to. See e_parallel_axis
1684
+ * comments for more details on the values.
1685
+ */
1674
1686
enum e_parallel_axis parallel_axis;
1687
+
1688
+ /* *
1689
+ * @brief A vector of booleans indicating whether the segment can connect to a logic block.
1690
+ */
1675
1691
std::vector<bool > cb;
1692
+
1693
+ /* *
1694
+ * @brief A vector of booleans indicating whether the segment can connect to a switch block.
1695
+ */
1676
1696
std::vector<bool > sb;
1697
+
1698
+ /* *
1699
+ * @brief The index of the segment as stored in the appropriate Segs list.
1700
+ * Upon loading the architecture, we use this field to keep track of the
1701
+ * segment's index in the unified segment_inf vector. This is useful when
1702
+ * building the rr_graph for different Y & X channels in terms of track
1703
+ * distribution and segment type.
1704
+ */
1677
1705
int seg_index;
1706
+
1707
+ /* *
1708
+ * @brief Determines the routing network to which the segment belongs.
1709
+ * Possible values are:
1710
+ * - GENERAL: The segment is part of the general routing resources.
1711
+ * - GCLK: The segment is part of the global routing network.
1712
+ * For backward compatibility, this attribute is optional. If not specified,
1713
+ * the resource type for the segment is considered to be GENERAL.
1714
+ */
1678
1715
enum SegResType res_type = SegResType::GENERAL;
1679
- // float Cmetal_per_m; /* Wire capacitance (per meter) */
1680
1716
};
1681
1717
1682
1718
inline bool operator ==(const t_segment_inf& a, const t_segment_inf& b) {
1683
- return a.name == b.name && a.frequency == b.frequency && a.length == b.length && a.arch_wire_switch == b.arch_wire_switch && a.arch_opin_switch == b.arch_opin_switch && a.arch_opin_between_dice_switch == b.arch_opin_between_dice_switch && a.frac_cb == b.frac_cb && a.frac_sb == b.frac_sb && a.longline == b.longline && a.Rmetal == b.Rmetal && a.Cmetal == b.Cmetal && a.directionality == b.directionality && a.parallel_axis == b.parallel_axis && a.cb == b.cb && a.sb == b.sb ;
1719
+ return a.name == b.name
1720
+ && a.frequency == b.frequency
1721
+ && a.length == b.length
1722
+ && a.arch_wire_switch == b.arch_wire_switch
1723
+ && a.arch_opin_switch == b.arch_opin_switch
1724
+ && a.arch_inter_die_switch == b.arch_inter_die_switch
1725
+ && a.frac_cb == b.frac_cb
1726
+ && a.frac_sb == b.frac_sb
1727
+ && a.longline == b.longline
1728
+ && a.Rmetal == b.Rmetal
1729
+ && a.Cmetal == b.Cmetal
1730
+ && a.directionality == b.directionality
1731
+ && a.parallel_axis == b.parallel_axis
1732
+ && a.cb == b.cb
1733
+ && a.sb == b.sb ;
1684
1734
}
1685
1735
1686
1736
/* provide hashing for t_segment_inf to enable the use of many std containers.
0 commit comments