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
Now direct connection builder in tileable rr_graph supports any subtile index as the from_pin (#3318)
* [test] add a strong test where clb, dsp and bram in a same tile, to validate the direct connections across subtiles
* [test] deploy new test to strong reg test
* [test] add new test
* [test] add new arch from openfpga
* [test] add new blif benchmark for tileable direct connection strong tests
* [test] add new example arch to validate tileable direct connections
* [test] reorg tasks
* [test] deploy new tests to validate supertile with z_offset in direct connection for tileable rr_graph
* [test] debug
* [test] debug
* [core] debug
* [core] now search all the sub tiles which contains the ports defined in the direct
* [core] syntax
* [test] debug
* [test] update golden
* [test] add missing golden results
* [core] add doxygen-style comments to vpr utility function
* [core] simplify swap in if condition
* [test] add arch file to validate direct connections across subtiles for regular rr_graph generator
* [test] add new testcases for strong reg tests about direct connections between subtiles
* [core] fixed the bug where IPIN coordinate does not consider pin offset at tile-level (pin location)
* [core] should sit with root location for IPIN
* [core] debug
* [core] debug
* [core] debug
* [test] update golden
* [doc] add examples
* [doc] typo
* [core] typo
* [doc] typo
:req_param name: is a unique alphanumeric string to name the connection.
@@ -2384,12 +2386,89 @@ The ``<direct>`` tag and its contents are described below.
2384
2386
The ``from_side`` and ``to_side`` options can usually be left unspecified.
2385
2387
However they can be used to explicitly control how direct connections to physically equivalent pins (which may appear on multiple sides) are handled.
2386
2388
2387
-
**Example:**
2388
-
Consider a carry chain where the ``cout`` of each CLB drives the ``cin`` of the CLB immediately below it, using the delay-less switch one would enter the following:
2389
+
**Example: Inter-tile connection**
2390
+
Consider a carry chain where the ``cout`` of each CLB drives the ``cin`` of the CLB immediately below it, using the delay-less switch one would enter the following:
Consider a feedback connection where the ``out`` of each CLB drives the ``in`` of the CLB in the same location, using the connection block switch one would enter the following:
As shown in :numref:`fig_example_subtile_direct_connection`, consider a connection where the ``out`` of a sub tile ``mult_8`` of tile ``cim8_1k`` drives the ``data_in`` of the sub tile ``memory`` of tile ``cim8_1k`` with an offset, using the delayless switch one would enter the following:
VPR_FATAL_ERROR(VPR_ERROR_ARCH, "[Arch LINE %d] From pin (index=%d) of direct connection '%s' does not exist on any side of the programmable block '%s'.\n", directs[i].line, opin, directs[i].from_pin.c_str());
VPR_FATAL_ERROR(VPR_ERROR_ARCH, "[Arch LINE %d] To pin (index=%d) of direct connection '%s' does not exist on any side of the programmable block '%s'.\n", directs[i].line, relative_ipin, directs[i].to_pin.c_str());
1780
+
}
1752
1781
1753
-
/* Find the side of grid pins, the pin location should be unique!
1754
-
* Pin location is required by searching a node in rr_graph
VPR_FATAL_ERROR(VPR_ERROR_ARCH, "[Arch LINE %d] From pin (index=%d) of direct connection '%s' does not exist on any side of the programmable block '%s'.\n", directs[i].line, opin, directs[i].from_pin.c_str());
1759
-
}
1760
-
1761
-
/* directs[i].sub_tile_offset is added to from_capacity(z) to get the target_capacity */
1762
-
int to_subtile_cap = z + directs[i].sub_tile_offset;
1763
-
/* Iterate over all sub_tiles to get the sub_tile which the target_cap belongs to. */
1764
-
const t_sub_tile* to_sub_tile = nullptr;
1765
-
for (const t_sub_tile& sub_tile : to_grid_type->sub_tiles) {
1766
-
if (sub_tile.capacity.is_in_range(to_subtile_cap)) {
VPR_FATAL_ERROR(VPR_ERROR_ARCH, "[Arch LINE %d] To pin (index=%d) of direct connection '%s' does not exist on any side of the programmable block '%s'.\n", directs[i].line, relative_ipin, directs[i].to_pin.c_str());
0 commit comments