Top-down hierarchical
This implements the top-down hierarchical flow in Innovus. Users are required to use a channel-based methodology, because feedthrus are not yet supported. Some notes:
- Previously,
vlsi.inputs.hierarchical.modewas purely dynamically-set. Hence, user setting it to "hierarchical" didn't actually do anything. I've repurposed this to be user-facing to be able to select between bottom-up and top-down flows. - That key is now renamed to
vlsi.inputs.hierarchical.module_mode. A similar dynamically-set key isvlsi.inputs.hierarchical.partitioning, which is needed to know if we are traversing up or down the dependency graph. - Innovus implementation uses full databases, so
par.in/outputs.in/output_dbsare added and are also dynamically set.
Note: currently, this flow requires a full top-level synthesis; however, to make it more practical for agile methodologies, we will need to implement hierarchical synthesis as well. The inputs to the flow would start from leaf node synthesis in a bottom-up fashion to top-level synthesis, then top-down to bottom-up traversal of par.
A major additional change is making the Makefile generation much more DRY (see the total rewrite of hammer_build_systems.py). Also closes #616.
TODOs before merging:
- [ ] Test the Innovus implementation
- [ ] Fix many outstanding hierarchical mode issues
- [ ] Documentation
- [ ] Hierarchical synthesis
Related PRs / Issues
Type of change:
- [ ] Bug fix
- [X] New feature
- [X] Other enhancement
Impact:
- [X] Change to core Hammer
- [X] Change to a Hammer plugin
- [ ] Other
Contributor Checklist:
- [X] Did you set
masteras the base branch? - [X] Did you state the type-of-change/impact?
- [X] Did you delete any extraneous prints/debugging code?
- [ ] (If applicable) Did you add documentation for the feature?
- [ ] (If applicable) Did you update the
poetry.lockfile if you updated the requirements inpyproject.toml? - [ ] (If applicable) Did you add a unit test demonstrating the PR?
- [ ] (If applicable) Did you run this through the e2e integration tests?
- [ ] (If applicable) Did you update the submodules in
e2e/if this feature depends on updated plugins?