-
Notifications
You must be signed in to change notification settings - Fork 408
Fix bug in which all non-chain luts are considered length-1 chains. #2363
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?
Conversation
Current find_new_root_atom_for_chain assumes that an atom without a driver is the root of a chain. This fix permits a driverless atom to be a chain root only if it drives another chain atom.
Some of the CI test failures may be random changes. E.g.: vtr_nightly_test1_odin: This vtr_reg_strong test looks like it actually failed to complete though: So that is likely a corner case. Some other runs seem to have run out of time; relaunching. |
After CI passes (or the errors are found to be spurious as in the small QoR change above), you should also get a QoR comparison on the vtr and titan circuits anyway to ensure nothing bad has happened. I don't expect it would, but it is best to be safe. See https://docs.verilogtorouting.org/en/latest/README.developers/#example-vtr-benchmarks-qor-measurement for a how-to guide. |
Yes, the carry chain test failure is real. The corner case is when the head is the first node encountered in a chain. I have an idea for a fix, stay tuned. |
… for its chain; since it has no driver, check to see if it drives a pattern connection
It appears that vtr_reg_nightly_test2 and vtr_reg_nightly_test2_odin failed with the message: All others passed. Re-running just those two. |
These two tests keep stopping with the note "the operation was cancelled" and I am not sure why. Vaughn can you take a look? |
Update: @KA7E is deciding if this is a bug or just a somewhat unexpected way to consider all LUTs part of (length 1 at least) carry chains. |
@KA7E tells me her preference is to not merge (at least for now). It seems like an odd behaviour, but it no longer impacts the legalizer. Since there are CI failures (hopefully spurious) and QoR would have to be checked this would need some work to merge. Putting on hold for now. |
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
Checklist: