feat: enhance commercial flow with new features and improvements

- Added support for optional files in GDS generation to handle legacy layouts.
- Introduced macro-level LVS/ERC processing to improve verification of hard macros.
- Updated STA scripts to adopt PrimeTime analysis settings from legacy flows.
- Enhanced synthesis settings to align with CX55 legacy flow, including clock gating and area optimization.
- Improved reporting functions to include detailed synthesis summaries and area metrics.
- Updated package generation script to support both TINY and MINI SOC configurations.
- Added comprehensive tests for ECO translation, timing contract generation, and constraint handling.
- Ensured compatibility with new timing contract formats and enhanced error handling for domain drift.
This commit is contained in:
maksyuki committed 2026-10-08 15:20:39 +08:00
1 parent 8a2dad4a93
commit bab01352f8
32 files changed
+2240 -408

No files matched your search

+39 -19
View File
@@ -102,9 +102,43 @@ def main() -> int:
) as temp:
staging = Path(temp) / "package"
staging.mkdir()
timing_contract = Path(temp) / ("tiny_core.sdc" if soc == "TINY" else "commercial_timing_contract.tcl")
timing_generator = (root / "physical/smoke/sta/opensta/generate_sdc.py" if soc == "TINY"
else root / "physical/commercial/scripts/generate_timing_contract.py")
commercial_contract = Path(temp) / "commercial_timing_contract.tcl"
subprocess.run(
[
"python3",
str(root / "physical/commercial/scripts/generate_timing_contract.py"),
"--soc",
soc,
"--domains",
str(product_root / "integration/clock_reset_domains.json"),
"--pin-map",
str(product_root / "pin_map/pin_map.json"),
"--output",
str(commercial_contract),
],
cwd=root,
check=True,
)
metadata_files = [
f"contracts/{commercial_contract.name}={commercial_contract}",
]
if soc == "TINY":
tiny_sdc = Path(temp) / "tiny_core.sdc"
subprocess.run(
[
"python3",
str(root / "physical/smoke/sta/opensta/generate_sdc.py"),
"--domains",
str(product_root / "integration/clock_reset_domains.json"),
"--pin-map",
str(product_root / "pin_map/pin_map.json"),
"--output",
str(tiny_sdc),
],
cwd=root,
check=True,
)
metadata_files.append(f"contracts/{tiny_sdc.name}={tiny_sdc}")
if config.get("MINI_MODE", "PRODUCT") == "MPW":
dynamic_core_filelist = (
args.variant_root
@@ -125,20 +159,6 @@ def main() -> int:
dynamic_ip_filelist = (
args.variant_root / "generated/user_extensions/legacy_ip.fl"
)
subprocess.run(
[
"python3",
str(timing_generator),
"--domains",
str(product_root / "integration/clock_reset_domains.json"),
"--pin-map",
str(product_root / "pin_map/pin_map.json"),
"--output",
str(timing_contract),
],
cwd=root,
check=True,
)
command = [
"python3",
str(root / "physical/smoke/syn/tools/export_soc_sources.py"),
@@ -171,9 +191,9 @@ def main() -> int:
str(args.variant_root / "generated/pin_map/pin_map.fl"),
"--archinfo-incdir",
str(args.variant_root / "generated/archinfo"),
"--metadata-file",
f"contracts/{timing_contract.name}={timing_contract}",
]
for metadata in metadata_files:
command.extend(("--metadata-file", metadata))
if soc == "TINY":
if config.get("SYNTH") == "YOSYS":
recipe = config.get("SYNTH_RECIPE", "balanced")