-
Notifications
You must be signed in to change notification settings - Fork 12
WIP: Equivalent tiles VTR feature #36
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
Conversation
a32157c
to
b4aed55
Compare
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.
Not sure there is much to review here? This appears to just add parsing support without actually changing the placer? Or is this all there is?
Actually, for now, there's only the parsing logic. I am currently going on with the placer changes. The review request was just to check whether this is the right direction to go :) |
Without seeing the placer changes and seeing how you are handling the routing connections, I cannot really provide input. I see nothing grossly wrong, but I don't see the solutions to the hard part of the problem either. |
@litghost Right, too early for a review. When there will be something more concrete I'll ask for another one then |
638e72c
to
9708bbc
Compare
I have cleaned up the workarounds and managed to have a cleaner solution. The pin mapping management seems to be working fine, the I still need to handle the situation in which the capacity of an equivalent tile changes (e.g. in the BRAM cases). I will proceed now with the modification of the placer. |
Placer now can choose initial locations among all the available tiles (original and equivalent tiles) for a block. I still need to handle the swap algorithm to choose equivalent tiles if it results in a minor cost and a better timing. (CI is failing because all the XMLs require the |
d999a1e
to
07742a6
Compare
328604c
to
0bb4005
Compare
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.
Looking good. I recommend you start this PR on the upstream to begin to get their feedback.
+ Type->pb_type->num_clock_pins); | ||
Type->num_receivers = Type->capacity * Type->pb_type->num_input_pins; | ||
Type->num_drivers = Type->capacity * Type->pb_type->num_output_pins; | ||
Type->index = 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.
Tile type index should be StrongId?
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.
Just checked it, in t_type_descriptor
the index
type is int
. I could change it to StrongId though
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.
Ask VTR devs about it. Seems weird to have random integer ID's floating around. Might be an old example.
pugi::xml_node CurType; | ||
|
||
Type->num_equivalent_tiles = count_children(Node, "mode", loc_data); | ||
Type->equivalent_tiles = (t_type_descriptor **) vtr::malloc(Type->num_equivalent_tiles * sizeof(t_type_descriptor *)); |
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.
Please just use std::vector
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.
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.
Done, I have converted all the new members related to equivalent tiles (e.g. pin_mapping
as well) to unordered_maps
.
I have used unordered_maps
as I need to access to elements by indices and vectors are not too suited for index access.
vpr/src/place/place.cpp
Outdated
@@ -230,7 +230,7 @@ static int try_place_macro(int itype, int ipos, int imacro); | |||
static void initial_placement_pl_macros(int macros_max_num_tries, int * free_locations); | |||
|
|||
static void initial_placement_blocks(int * free_locations, enum e_pad_loc_type pad_loc_type); | |||
static void initial_placement_location(int * free_locations, ClusterBlockId blk_id, | |||
static void initial_placement_location(int * free_locations, int itype, |
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.
int itype should be a StrongId
Ok, I'll deal with the requested changes and than open the PR upstream |
This commit introduces two major features: - introduce the tile concept in the architecture XML. Top level pb_type is discarded and all the top level pb_type information are moved into the tile tags. This will cause CI build to fail as all the architectures do not include the tiles tag right now. - introduce the possibility to place blocks in equivalent tiles (SLICEL blocks into SLICEM ones). According to the XML architecture description there could be tiles equivalent to others that can be used during the placement step (this can bring to better placement solutions) Signed-off-by: Alessandro Comodi <[email protected]>
I have also changes travis.yml to install the lxml python package needed by the script Signed-off-by: Alessandro Comodi <[email protected]>
Signed-off-by: Alessandro Comodi <[email protected]>
Signed-off-by: Alessandro Comodi <[email protected]>
Signed-off-by: Alessandro Comodi <[email protected]>
Signed-off-by: Alessandro Comodi <[email protected]>
Signed-off-by: Alessandro Comodi <[email protected]>
90a87b9
to
a59408a
Compare
b58ffb4
to
8e03da9
Compare
0195849
to
a5b8bf6
Compare
dc80177
to
ed1d247
Compare
31a37cc
to
4e20176
Compare
Signed-off-by: Alessandro Comodi [email protected]
This is a very preliminar WIP to add the equivalent tiles feature to VPR.
Description
The equivalent tiles will let the placer to choose more freely the location of certain blocks that can be placed in different tiles (e.g. SLICELs could be implemented both on a SLICEM or SLICEL). These changes will add a freedom level to the placer.
Types of changes
Checklist: