Skip to content
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

Sky130 - Convert to Pydantic, support sky130_scl #848

Draft
wants to merge 30 commits into
base: master
Choose a base branch
from

Conversation

harrisonliew
Copy link
Contributor

@harrisonliew harrisonliew commented Mar 8, 2024

  • Implemented method gen_config for tech plugins to override and generate their own config (TechJSON instance, i.e. directly creating the Pydantic model). This enables multi-library support within the same tech plugin.
  • Removed all existing sky130-tech-gen-... scripts and outputs, static sky130.tech.json
  • Upstream @nayiri-k's tech LEF parsing of Metals into LEFUtils (unfortunately can't create Metal object directly or else it has a circular import)
  • Fixed gds_map_file reading in OpenROAD plugin

TODOs:

  • Add sky130_scl Cadence standard cell library option @elamdf
  • Documentation for this alternate method
  • Sky130 documentation for selecting library
  • e2e tests

Related PRs / Issues

Type of change:

  • Bug fix
  • New feature
  • Other enhancement

Impact:

  • Change to core Hammer
  • Change to a Hammer plugin
  • Other

Contributor Checklist:

  • Did you set master as the base branch?
  • Did you state the type-of-change/impact?
  • 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?

Copy link
Contributor

@nayiri-k nayiri-k left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passed through commercial/openroad e2e flow

@@ -53,4 +53,6 @@ def get_headers(source: str) -> List[str]:
# TODO: handle other compressed file types? Tools only seem to support gzip.
fd = os.open(source, os.O_RDONLY)
lines = os.pread(fd, nbytes, 0).splitlines()
return list(map(lambda l: l.decode('ascii', errors='ignore'), lines))
lines = list(map(lambda l: l.decode('ascii', errors='ignore'), lines))
all_lines = '\n'.join(lines).replace('\\\n','') # combine lines that are split by \ character
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@harrisonliew This might be too hacky, but basically in one of the sky130 lib files (sky130_ef_io__gpiov2_pad_wrapped_ss_ss_100C_1v60_3v00.lib) the capacitive_load_unit declaration spanned 2 lines and it messed up the parsing in LIBUtils.get_cap_unit()

	capacitive_load_unit(1.000000, \
	  "pf");

Copy link
Contributor Author

@harrisonliew harrisonliew Mar 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that's valid. But maybe the better approach is to remove line continuations (\) before processing lines. Can you also fix the type checker error?

par fails (either in place_tap_cells or in power_straps if you force it
past place_tap_cells with a removal hook due to no tapcells)
pwell/nwell/li1, clk gating cell disabled?)
@elamdf
Copy link
Collaborator

elamdf commented Apr 5, 2024

syn/par works on commercial tutorial flow

@elamdf
Copy link
Collaborator

elamdf commented May 6, 2024

make tutorial=sky130-commercial power-syn BINARY=/tools/C/elamdf/chipyard_dev/tests/symmetric.riscv works as well (with joules)

…ps hook since we don't have

tapcells to reference for rails. This is lvs clean for the
sky130-commercial-tutorial (but there are no srams? unsure why)
pegasus work. drc has like 15 random enclousure violations.. not sure
why, they don't seem to be systemic?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants