-
Notifications
You must be signed in to change notification settings - Fork 428
Add interposer wires #3305
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Add interposer wires #3305
Conversation
…d_interposer_wires
…d_interposer_wires
…uld be far from each other
Soheil changed the --device behaviour to be more aligned with the documentation in this PR. While the docs say that if --device is not set, the auto sized device would be selected, previously it would select some fixed size device if there was no auto sized device defined in the architecture file. Now it errors out if --device is not set and there's no auto sized device. This is the reason for the current strong test failure. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed until (but not including) draw_rr_edges.cpp so far.
if (!draw_state->show_graphics) { | ||
ezgl::set_disable_event_loop(true); | ||
else | ||
} else { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Personally I prefe
if () {
// stuff
}
else { // I broke this line.
}
// flag whether the current location is highlighted with a special color or not | ||
bool current_loc_is_highlighted = false; | ||
|
||
if (placer_breakpoint_reached()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could move this into a routine with a proper comment. I think this is checking if we've stopped at a placer breakpoint and if the block is in a special list of blocks to be coloured (due to being part of a move).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could move this into a routine with a proper comment. I think this is checking if we've stopped at a placer breakpoint and if the block is in a special list of blocks to be coloured (due to being part of a move).
// since no U-turns from_tracks must be INC as well | ||
x1 = draw_coords->tile_x[to_xlow - 1] | ||
+ draw_coords->get_tile_width(); | ||
if (rr_graph.node_direction(from_node) == Direction::DEC) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think commenting why you don't draw from the ends in this case would be good.
vtr::RngContainer& rng, | ||
vtr::NdMatrix<std::vector<t_bottleneck_link>, 2>& interdie_3d_links); | ||
|
||
void convert_interposer_cuts_to_sg_patterns(const std::vector<t_layer_def>& interposer_inf, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doxygen comment.
static int get_delayless_switch_id(const t_det_routing_arch& det_routing_arch, | ||
bool load_rr_graph); | ||
|
||
static void add_and_connect_non_3d_sg_links(RRGraphBuilder& rr_graph_builder, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doxygen comment.
Make sure you mention this should only be called once the scatter-gather links/nodes are in the spatial lookup.
And say what the function does.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Make sure it says you're passing data back through the non_3d_... reference.
|
||
vtr::NdMatrix<int, 3>& ptc_matrix = (chan_type == e_rr_type::CHANX) ? chanx_ptc : chany_ptc; | ||
|
||
int ptc = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Explain why you get the max (want to ensure ptc_num is unique along the length of the rr_node we're creating for this sg_link.
const vtr::NdMatrix<std::vector<t_bottleneck_link>, 2>& interdie_3d_links, | ||
int* index); | ||
|
||
std::vector<std::pair<RRNodeId, int>> alloc_and_load_non_3d_sg_pattern_rr_node_indices(RRGraphBuilder& rr_graph_builder, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doxygen comment.
: CHANX_COST_INDEX_START + num_seg_types_x + link.parallel_segment_index; | ||
rr_graph_builder.set_node_cost_index(node_id, RRIndexedDataId(cons_index)); | ||
|
||
float R = 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should come from the segment defined to be used by the sg_link.
Also do the same for CHANZ wires.
|
||
VTR_ASSERT_SAFE(src_loc.layer_num == dst_loc.layer_num); | ||
const int layer = src_loc.layer_num; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could this be refactored with another block of code (which I think was the spatial lookup insertion code) to have a helper once)?
|
||
for (size_t i = 0; i < num_links; i++) { | ||
|
||
const t_bottleneck_link& link = sg_links[i]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Comment the overall flow / algorithm of this routine, or the major code blocks.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unless the comment at the func declaration has enough detail (once it's written).
This PR adds support for inter-die wires defined using the
<interdie_wire>
tag under<interposer_cut>
in the architecture file. The graphics code has been updated accordingly to visualize these wires correctly.