@@ -448,6 +448,18 @@ struct ArchReader {
448
448
return pad_bels_.count (name) != 0 ;
449
449
}
450
450
451
+ /* * @brief Utility function to fill in all the necessary information for the sub_tile
452
+ *
453
+ * Given a physical tile type and a corresponding sub tile with additional information on the IO pin count
454
+ * this function populates all the data structures corresponding to the sub tile, and modifies also the parent
455
+ * physical tile type, updating the pin numberings as well as the directs pin mapping for the equivalent sites
456
+ *
457
+ * Affected data structures:
458
+ * - pinloc
459
+ * - fc_specs
460
+ * - equivalent_sites
461
+ * - tile_block_pin_directs_map
462
+ **/
451
463
void fill_sub_tile (t_physical_tile_type& type, t_sub_tile& sub_tile, int num_pins, int input_count, int output_count) {
452
464
sub_tile.num_phy_pins += num_pins;
453
465
type.num_pins += num_pins;
@@ -2040,6 +2052,31 @@ struct ArchReader {
2040
2052
}
2041
2053
}
2042
2054
2055
+ /* * @brief The constant block is a synthetic tile which is used to assign a virtual
2056
+ * location in the grid to the constant signals which are than driven to
2057
+ * all the real constant wires.
2058
+ *
2059
+ * The block's diagram can be seen below. The port names are specified in
2060
+ * the interchange device database, therefore GND and VCC are mainly
2061
+ * examples in this case.
2062
+ *
2063
+ * +---------------+
2064
+ * | |
2065
+ * | +-------+ |
2066
+ * | | | |
2067
+ * | | GND +----+--> RR Graph node
2068
+ * | | | |
2069
+ * | +-------+ |
2070
+ * | |
2071
+ * | |
2072
+ * | +-------+ |
2073
+ * | | | |
2074
+ * | | VCC +----+--> RR Graph node
2075
+ * | | | |
2076
+ * | +-------+ |
2077
+ * | |
2078
+ * +---------------+
2079
+ */
2043
2080
void process_constant_block () {
2044
2081
std::vector<std::pair<std::string, std::string>> const_cells{arch_->gnd_cell , arch_->vcc_cell };
2045
2082
@@ -2121,6 +2158,7 @@ struct ArchReader {
2121
2158
ltypes_.push_back (block);
2122
2159
}
2123
2160
2161
+ /* * @brief Creates the models corresponding to the constant cells that are used in a given interchange device */
2124
2162
void process_constant_model () {
2125
2163
std::vector<std::pair<std::string, std::string>> const_cells{arch_->gnd_cell , arch_->vcc_cell };
2126
2164
@@ -2146,6 +2184,11 @@ struct ArchReader {
2146
2184
}
2147
2185
}
2148
2186
2187
+ /* * @brief Creates a synthetic constant tile that will be located in the external layer of the device.
2188
+ *
2189
+ * The constant tile has two output ports, one for GND and the other for VCC. The constant tile hosts
2190
+ * the constant pb type that is generated as well. See process_constant_model and process_constant_block.
2191
+ */
2149
2192
void process_constant_tile () {
2150
2193
std::vector<std::pair<std::string, std::string>> const_cells{arch_->gnd_cell , arch_->vcc_cell };
2151
2194
// Create constant tile
0 commit comments