Description
The current behaviour of the Packer is as follows:
- It performs prepacking on the atoms to create pack molecules (using the Prepacker)
- It uses these molecules to create LegalizationClusters (using the ClusterLegalizer)
- It writes these LegalizationClusters to a .net file (using output clustering)
vtr-verilog-to-routing/vpr/src/pack/pack.cpp
Lines 271 to 273 in e38c0f3
- It then destroys all of the LegalizationClusters
- Then it reads back in this .net file to generate the ClusteredNetlist (using load packing)
vtr-verilog-to-routing/vpr/src/base/vpr_api.cpp
Lines 594 to 599 in e38c0f3
This is very inefficient since a lot of the information from the clustering state is being regenerated again, which wastes a lot of time. It also means that a .net file MUST be made to run VPR, even though it is not necessary.
Instead, the ClusterLegalizer could have a method to convert all of its LegalizationClusters into a valid ClusteredNetlist. The write_packing_results_to_xml
method could then be used to write the ClusteredNetlist directly to a file (instead of generating it from the LegalizationClusters), if the .net file is needed.
vtr-verilog-to-routing/vpr/src/pack/output_clustering.cpp
Lines 720 to 743 in e38c0f3
This should be a straightforward change, but the biggest thing is making sure that the ClusteredNetlist generated from the ClusterLegalizer EXACTLY matches the ClusteredNetlist generated from reading a .net file. A unit test should be added which compares these two ClusteredNetlists and ensures they exactly match.