hammer icon indicating copy to clipboard operation
hammer copied to clipboard

Top-down hierarchical

Open harrisonliew opened this issue 2 years ago • 0 comments

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.mode was 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 is vlsi.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_dbs are 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 master as 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.lock file if you updated the requirements in pyproject.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?

harrisonliew avatar Oct 27 '23 03:10 harrisonliew