Fix inverted reachable wire check in SOURCE/OPIN lookahead sampling - #3774
Fix inverted reachable wire check in SOURCE/OPIN lookahead sampling#3774soheilshahrouz wants to merge 15 commits into
Conversation
|
Impact on router lookahead construction for Stratix-IV architecture:
|
|
I am investigating why some CI tests failed. |
|
It seems that the segment type reserved for direct connections between tiles is missing from the src_opin_lookahead. With this chagne, we sample tiles near the borrom left corner. They lack direct connections to tiles below themselves. |
…rc/opin lookahead
…ted_reachable_wire_check
|
I now take a few representative samples for each tile type instead of using samples taken from the bottom left corner. Impact on router lookahead construction for Stratix-IV architecture:
|
vaughnbetz
left a comment
There was a problem hiding this comment.
OK with me, but a couple of minor comments embedded.
| rr_node_typename[rr_type], | ||
| tile_type.name.c_str(), | ||
| from_layer_num, | ||
| rr_node_arch_name(unreachable_nodes.front(), is_flat).c_str()); |
There was a problem hiding this comment.
Do we get spurious warnings from this in the default flow when we have carry chains (directly connect OPIN->IPIN) or when edges are missing at the edge of the FPGA? We should avoid issuing warnings for the default flow for normal things like the array having edges cut off.
There was a problem hiding this comment.
The check is done after we call dijkstra_flood_to_wires() for all sample locations. If only some samples miss an edge, the warning is not triggered.
dijkstra_flood_to_wires() treats OPIN-->IPIN-->SINK as a reachable wire with DIRECT_CONNECT_SPECIAL_SEG_TYPE segment type.
| grid.get_width_offset(neighbour_loc), | ||
| grid.get_height_offset(neighbour_loc)); | ||
| }; | ||
|
|
There was a problem hiding this comment.
I'd comment this a bit more. You go through the whole perimeter of the block, recording all its neighbours I think.
I guess if there were switch blocks inside a large block this would miss them? (probably doesn't cause any big problems, but may be worth mentioning in the comment).
There was a problem hiding this comment.
Added comments inside the function definition.
|
@vaughnbetz If you don't have further comments, I think we can merge this. |
|
Are you sure this gives equivalent QoR? Might be good to do a heap pops comparison. |
It changes QoR on architectures where OPIN-CHAN connectivity pattern/delay depends on grid location. For Stratix-IV, QoR stays the same because OPIN only connect to L4 whose mux delay is independent of fan-in. |
|
In src_opin_lookahead construction, the RR switch delay of a CHAN node is used, but in wire lookahead we use |
compute_router_src_opin_lookaheaditerates over all instances of a tile type and recomputes src_opin_lookahead in each iteration. This happens because the if statement that checks whether there is a route from SRC/OPIN to CHANX\CHANY is wrong. After fixing this,compute_router_src_opin_lookaheaduses a single instance from each tile type to populate src_opin_lookahead.