vtr-verilog-to-routing icon indicating copy to clipboard operation
vtr-verilog-to-routing copied to clipboard

Fix bug in which all non-chain luts are considered length-1 chains.

Open KA7E opened this issue 11 months ago • 7 comments

Current find_new_root_atom_for_chain assumes that an atom without a driver is the root of a chain, and so all non-chain luts are considered trivial length-1 chains. This fix permits a driverless atom to be a chain root only if it drives another chain atom.

Description

Added a new boolean input, is_non_trivial_chain, to find_new_root_atom_for_chain, initially set to false. If the current block has no drivers, the function can only return it as the new chain root if the boolean is true. The boolean is set to true when the function is called recursively from further down the chain.

Related Issue

Motivation and Context

I noticed this phenomenon when examining lists of pack molecules while debugging a legalizer tool to read in an external flat placement and recreate a legal clustering. My tool packs chains first, and it works better without trivial chains.

How Has This Been Tested?

This has been tested on all Titan23s as part of normal vpr packing and as part of my legalizer tool.

Types of changes

  • [ ] Bug fix (change which fixes an issue)
  • [ ] New feature (change which adds functionality)
  • [ ] Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • [ ] My change requires a change to the documentation
  • [ ] I have updated the documentation accordingly
  • [ ] I have added tests to cover my changes
  • [ ] All new and existing tests passed

KA7E avatar Aug 08 '23 18:08 KA7E