From 5c7791dc17c17aed3d98e29f20de52598a3ae7c1 Mon Sep 17 00:00:00 2001 From: Daniel Schultz Date: Fri, 24 Jul 2026 06:28:06 +0200 Subject: [PATCH 1/2] podman-compose: Update to v2.6 Signed-off-by: Daniel Schultz --- podman-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/podman-compose.yml b/podman-compose.yml index 2496ae6..0b179e3 100644 --- a/podman-compose.yml +++ b/podman-compose.yml @@ -10,7 +10,7 @@ volumes: cache: services: elements: - image: docker.io/dnltz/elements:v2.3 + image: docker.io/dnltz/elements:v2.6 container_name: ipforge_container environment: - DISPLAY=${DISPLAY} From 8c432a9542f775281fd00279791e445c2ced9812 Mon Sep 17 00:00:00 2001 From: Daniel Schultz Date: Fri, 24 Jul 2026 06:29:01 +0200 Subject: [PATCH 2/2] Convert to LibreLane Switch away from OpenROAD-Flow-Scripts to LibreLane for GPIO hardening on ihp-sg13g2, sky130A and gf180mcuD. - Add per-PDK/macro LibreLane configs, drop ORFS config.mk/rules - Update ipfab packaging and manifest to LibreLane artifacts Signed-off-by: Daniel Schultz --- Taskfile.yml | 141 +++--------------- ipfab/README.rst | 6 +- ipfab/ipfab/ipfab.py | 96 ++++++------ manifest.xml | 6 +- .../gf180mcuD/constraints/sdc/gpio_x_x.sdc | 2 +- .../gf180mcuD/flow/librelane/gpio_apb_32b.yml | 47 ++++++ .../gf180mcuD/flow/librelane/gpio_tl_32b.yml | 47 ++++++ .../gf180mcuD/flow/librelane/gpio_wb_32b.yml | 47 ++++++ .../flow/orfs/gpio_apb_32b/config.mk | 29 ---- .../flow/orfs/gpio_apb_32b/rules-base.json | 102 ------------- .../gf180mcuD/flow/orfs/gpio_tl_32b/config.mk | 29 ---- .../flow/orfs/gpio_tl_32b/rules-base.json | 102 ------------- .../gf180mcuD/flow/orfs/gpio_wb_32b/config.mk | 29 ---- .../flow/orfs/gpio_wb_32b/rules-base.json | 102 ------------- .../ihp-sg13g2/constraints/io/gpio_tl_32b.tcl | 3 +- .../flow/librelane/gpio_apb_32b.yml | 41 +++++ .../ihp-sg13g2/flow/librelane/gpio_tl_32b.yml | 41 +++++ .../ihp-sg13g2/flow/librelane/gpio_wb_32b.yml | 41 +++++ .../flow/orfs/gpio_apb_32b/config.mk | 29 ---- .../flow/orfs/gpio_apb_32b/rules-base.json | 102 ------------- .../flow/orfs/gpio_tl_32b/config.mk | 29 ---- .../flow/orfs/gpio_tl_32b/rules-base.json | 102 ------------- .../flow/orfs/gpio_wb_32b/config.mk | 30 ---- .../flow/orfs/gpio_wb_32b/rules-base.json | 102 ------------- .../digital/peripherals/io/gpio/manifest.yml | 18 +-- .../sky130A/constraints/io/gpio_tl_32b.tcl | 3 +- .../sky130A/flow/librelane/gpio_apb_32b.yml | 44 ++++++ .../sky130A/flow/librelane/gpio_tl_32b.yml | 44 ++++++ .../sky130A/flow/librelane/gpio_wb_32b.yml | 44 ++++++ .../sky130A/flow/orfs/gpio_apb_32b/config.mk | 27 ---- .../flow/orfs/gpio_apb_32b/rules-base.json | 102 ------------- .../sky130A/flow/orfs/gpio_tl_32b/config.mk | 27 ---- .../flow/orfs/gpio_tl_32b/rules-base.json | 102 ------------- .../sky130A/flow/orfs/gpio_wb_32b/config.mk | 27 ---- .../flow/orfs/gpio_wb_32b/rules-base.json | 102 ------------- 35 files changed, 481 insertions(+), 1364 deletions(-) create mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_apb_32b.yml create mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_tl_32b.yml create mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_wb_32b.yml delete mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/rules-base.json delete mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/rules-base.json delete mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/rules-base.json create mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_apb_32b.yml create mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_tl_32b.yml create mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_wb_32b.yml delete mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/rules-base.json delete mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/rules-base.json delete mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/rules-base.json create mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_apb_32b.yml create mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_tl_32b.yml create mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_wb_32b.yml delete mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/rules-base.json delete mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/rules-base.json delete mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/config.mk delete mode 100644 sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/rules-base.json diff --git a/Taskfile.yml b/Taskfile.yml index b3457d4..40608c3 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -30,20 +30,12 @@ vars: gf180mcuD) echo "gf180mcu" ;; *) echo ""; echo "Unknown PDK: {{.PDK}}" >&2; exit 1 ;; esac - PDK_ORFS: - sh: | - case "{{.PDK}}" in - ihp-sg13g2) echo "ihp-sg13g2" ;; - sky130A) echo "sky130hd" ;; - gf180mcuD) echo "gf180" ;; - *) echo ""; echo "Unknown PDK: {{.PDK}}" >&2; exit 1 ;; - esac PDK_HASH: sh: | case "{{.PDK}}" in - ihp-sg13g2) echo "5cccb161f7492697cfa52eb14dc03beb00bdca9e" ;; - sky130A) echo "7b70722e33c03fcb5dabcf4d479fb0822d9251c9" ;; - gf180mcuD) echo "7b70722e33c03fcb5dabcf4d479fb0822d9251c9" ;; + ihp-sg13g2) echo "ee974c3adc69d0f36adbf20577079f0df419d702" ;; + sky130A) echo "f6eeac7dad085ffcc829ccfd721f7b4ce39edcf7" ;; + gf180mcuD) echo "f6eeac7dad085ffcc829ccfd721f7b4ce39edcf7" ;; *) echo ""; echo "Unknown PDK: {{.PDK}}" >&2; exit 1 ;; esac @@ -107,96 +99,23 @@ tasks: - "{{.RUN}} 'IP_ROOT={{.PWD}}/sources/{{.ip}}/ sbt \"runMain digital.peripherals.io.gpio.GpioExport\"'" build: - desc: Runs ORFS physical implementation for the given ip/macro/PDK. - vars: - ORFS_ENV: source {{.OPENROAD_FLOW_ROOT}}/../env.sh - ORFS: >- - make -C {{.OPENROAD_FLOW_ROOT}} - YOSYS_EXE=$YOSYS_EXE - OPENROAD_EXE=$OPENROAD_EXE - IP_ROOT={{.PWD}}/sources/{{.ip}}/ - DESIGN_CONFIG={{.PWD}}/sources/{{.ip}}/{{.PDK}}/flow/orfs/{{.macro}}/config.mk - WORK_HOME={{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs - CDL: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/results/{{.PDK_ORFS}}/{{.macro}}/base/6_final.cdl" - cmds: - - "{{.CONTAINER_CHECK}}" - - "{{.PDK_CHECK}}" - - task: lib-sbt-publishLocal - vars: - project: "modules/elements/vexiiriscv" - - "{{.RUN}} '{{.ORFS_ENV}} && {{.ORFS}} {{if .stage}}{{.stage}}{{end}}'" - - "{{.RUN}} '{{.ORFS_ENV}} && {{.ORFS}} generate_abstract'" - - "{{.RUN}} '{{.ORFS_ENV}} && {{.ORFS}} {{.CDL}}'" - - "{{.RUN}} '{{.ORFS_ENV}} && {{.ORFS}} metadata-generate'" - - "{{.RUN}} '{{.ORFS_ENV}} && {{.ORFS}} metadata-check'" - - update-metadata: - desc: Updates the OpenROAD metadata for the given ip/macro/PDK. - vars: - ORFS_ENV: source {{.OPENROAD_FLOW_ROOT}}/../env.sh - ORFS: >- - make -C {{.OPENROAD_FLOW_ROOT}} - YOSYS_EXE=$YOSYS_EXE - OPENROAD_EXE=$OPENROAD_EXE - IP_ROOT={{.PWD}}/sources/{{.ip}}/ - DESIGN_CONFIG={{.PWD}}/sources/{{.ip}}/{{.PDK}}/flow/orfs/{{.macro}}/config.mk - WORK_HOME={{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs - CDL: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/objects/{{.PDK_ORFS}}/{{.macro}}/base/6_final_concat.cdl" - cmds: - - "{{.CONTAINER_CHECK}}" - - "{{.RUN}} '{{.ORFS_ENV}} && {{.ORFS}} metadata-generate'" - - "{{.RUN}} '{{.ORFS_ENV}} && {{.ORFS}} update_rules'" - - build-librelane: desc: Runs LibreLane physical implementation for the given ip/macro/PDK. vars: LIBRELANE_CMD: >- - PYTHONPATH={{.PWD}}/tools/librelane python3 -m librelane - --force-run-dir {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane + PYTHONPATH={{.PWD}}/tools/librelane:{{.PWD}}/tools/librelane-plugins python3 -m librelane + --pdk {{.PDK}} --pdk-root {{.PDK_ROOT}} + --force-run-dir {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane/{{.PDK}} {{.PWD}}/sources/{{.ip}}/{{.PDK}}/flow/librelane/{{.macro}}.yml cmds: - "{{.CONTAINER_CHECK}}" - "{{.PDK_CHECK}}" - - "mkdir -p {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane" + - task: lib-sbt-publishLocal + vars: + project: "modules/elements/vexiiriscv" + - "rm -rf {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane/{{.PDK}}" + - "mkdir -p {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane/{{.PDK}}" - "{{.RUN}} '{{.LIBRELANE_CMD}}'" - check-logs: - desc: Scans ORFS build logs for warnings and errors for the given ip/macro/PDK. - cmds: - - "{{.CONTAINER_CHECK}}" - - "{{.RUN}} 'find {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/logs/{{.PDK_ORFS}}/{{.macro}}/ -type f -iname \"*.log\" -exec grep -v -e \"already destroyed\" -e \"XDG_RUNTIME_DIR not set\" -i {} \\+ | - grep --color -e WARNING -e ERROR'" - - "{{.RUN}} 'find {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/reports/{{.PDK_ORFS}}/{{.macro}}/ -type f -iname \"6_finish.rpt\" -exec grep \"violation count\" {} \\+'" - - run-drc: - desc: Runs KLayout DRC sign-off for the given ip/macro/PDK. - vars: - DRC_CMD: >- - bash {{.PWD}}/scripts/run_drc.sh - --gds {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/results/{{.PDK_ORFS}}/{{.macro}}/base/6_final.gds - --topcell {{.macro}} - --run-dir {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/verification/{{.PDK}}/drc/ - --jobs {{numCPU}} - cmds: - - "{{.CONTAINER_CHECK}}" - - "{{.RUN}} '{{.DRC_CMD}}'" - - run-lvs: - desc: Runs KLayout LVS sign-off for the given ip/macro/PDK. - vars: - ORFS_RESULTS: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/results/{{.PDK_ORFS}}/{{.macro}}/base" - ORFS_OBJECTS: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/objects/{{.PDK_ORFS}}/{{.macro}}/base" - LVS_CMD: >- - bash {{.PWD}}/scripts/run_lvs.sh - --gds {{.ORFS_RESULTS}}/6_final.gds - --topcell {{.macro}} - --netlist {{.ORFS_RESULTS}}/6_final.cdl - --netlist-concat {{.ORFS_OBJECTS}}/6_final_concat.cdl - --run-dir {{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/verification/{{.PDK}}/lvs/ - cmds: - - "{{.CONTAINER_CHECK}}" - - "{{.RUN}} '{{.LVS_CMD}}'" - run-test: desc: Runs cocotb simulation tests for the given ip/macro/PDK. vars: @@ -215,46 +134,28 @@ tasks: cmds: - "venv/bin/reuse --root {{.PWD}}/sources/{{.ip}}/ lint" - view-drc: - desc: Opens DRC results in KLayout for the given ip/macro/PDK. - vars: - GDS: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/results/{{.PDK_ORFS}}/{{.macro}}/base/6_final.gds" - DRC_DB: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/verification/{{.PDK}}/drc/{{.macro}}_drc.lyrdb" - cmds: - - "{{.CONTAINER_CHECK}}" - - "{{.RUN}} 'klayout -n {{.TECH}} -e {{.GDS}} -m {{.DRC_DB}}'" - - view-lvs: - desc: Opens LVS results in KLayout for the given ip/macro/PDK. - vars: - GDS: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/results/{{.PDK_ORFS}}/{{.macro}}/base/6_final.gds" - LVS_DB: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/verification/{{.PDK}}/lvs/6_final.lvsdb" - cmds: - - "{{.CONTAINER_CHECK}}" - - "{{.RUN}} 'klayout -n {{.TECH}} -e {{.GDS}} -mn {{.LVS_DB}}'" - - view-openroad: + openroad: desc: Opens the final ODB in the OpenROAD GUI for the given ip/macro/PDK. vars: - ODB: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/results/{{.PDK_ORFS}}/{{.macro}}/base/{{if .stage}}{{.stage}}{{else}}6_final{{end}}.odb" + ODB: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane/{{.PDK}}/final/odb/{{.macro}}.odb" cmds: - "{{.CONTAINER_CHECK}}" - "{{.RUN}} '{{.OPENROAD_EXE}} -gui <(echo read_db {{.ODB}})'" - view-klayout: - desc: Opens the final GDS in KLayout for the given ip/macro/PDK. + klayout: + desc: | + Opens the final GDS in KLayout for the given ip/macro/PDK. + Use mode=drc to also load the KLayout DRC marker database. vars: - GDS: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/orfs/results/{{.PDK_ORFS}}/{{.macro}}/base/6_final.gds" + GDS: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane/{{.PDK}}/final/gds/{{.macro}}.gds" + DRC_DB: "{{.BUILD_ROOT}}/{{.ip}}/{{.macro}}/librelane/{{.PDK}}/65-klayout-drc/reports/drc.klayout.lyrdb" + DRC_FLAG: '{{if eq .mode "drc"}}-m {{.DRC_DB}}{{end}}' cmds: - "{{.CONTAINER_CHECK}}" - - "{{.RUN}} 'klayout -n {{.TECH}} -e {{.GDS}}'" + - "{{.RUN}} 'klayout -n {{.TECH}} -e {{.GDS}} {{.DRC_FLAG}}'" default: cmds: - task: build - - task: run-drc - # LVS is not stable yet. Skip for now. - #- task: run-lvs - task: run-test - - task: check-logs - task: check-license diff --git a/ipfab/README.rst b/ipfab/README.rst index b521a63..3e07e5a 100644 --- a/ipfab/README.rst +++ b/ipfab/README.rst @@ -123,13 +123,11 @@ archive and publish once all macros are ready. :: - # 1. Build the IP with ORFS (produces build/ artefacts) + # 1. Build the IP with LibreLane (produces build/ artefacts) task ip=digital/peripherals/io/gpio macro=gpio_apb_32b PDK=ihp-sg13g2 build - # 2. Run sign-off (DRC/LVS/simulation) - task ip=digital/peripherals/io/gpio macro=gpio_apb_32b PDK=ihp-sg13g2 run-drc + # 2. Run some checks task ip=digital/peripherals/io/gpio macro=gpio_apb_32b PDK=ihp-sg13g2 run-test - task ip=digital/peripherals/io/gpio macro=gpio_apb_32b PDK=ihp-sg13g2 check-logs task ip=digital/peripherals/io/gpio macro=gpio_apb_32b PDK=ihp-sg13g2 check-license # 3. Package each macro diff --git a/ipfab/ipfab/ipfab.py b/ipfab/ipfab/ipfab.py index 591f6a5..357ec25 100644 --- a/ipfab/ipfab/ipfab.py +++ b/ipfab/ipfab/ipfab.py @@ -22,17 +22,10 @@ IPXACT_NS = "http://www.accellera.org/XMLSchema/IPXACT/1685-2014" XSI_NS = "http://www.w3.org/2001/XMLSchema-instance" -# Map canonical PDK names to their ORFS platform directory names. -_ORFS_PDK_MAP = { - "ihp-sg13g2": "ihp-sg13g2", - "sky130A": "sky130hd", - "gf180mcuD": "gf180", -} - -# Map canonical corner names to PDK-specific ORFS output suffixes. -# PDKs not listed here use the defaults (slow/typ/fast). _CORNER_MAP = { - "gf180mcuD": {"slow": "WC", "typ": "TT", "fast": "BC"}, + "gf180mcuD": {"slow": "ss_125C_4v50", "typ": "tt_025C_5v00", "fast": "ff_n40C_5v50"}, + "sky130A": {"slow": "ss_100C_1v60", "typ": "tt_025C_1v80", "fast": "ff_n40C_1v95"}, + "ihp-sg13g2": {"slow": "slow_1p08V_125C", "typ": "typ_1p20V_25C", "fast": "fast_1p32V_m40C"}, } @@ -66,7 +59,7 @@ def _corners(pdk: str) -> dict: def func_package(args): - """Assemble a package directory from sources and ORFS build artefacts.""" + """Assemble a package directory from sources and LibreLane build artefacts.""" _check_clean_repo(args.allow_dirty) git = _git_info() @@ -89,7 +82,7 @@ def func_package(args): print(f"Copying source files from {src_dir}") shutil.copytree(src_dir, pkg_dir, dirs_exist_ok=True, - ignore=shutil.ignore_patterns("__pycache__", args.pdk)) + ignore=shutil.ignore_patterns("__pycache__", args.pdk, *_CORNER_MAP)) pdk_src_dir = src_dir / args.pdk if pdk_src_dir.is_dir(): @@ -109,43 +102,46 @@ def _package_macro(pkg_dir, args, macro): for dir_ in ("gds", "lef", "netlist", "lib", f"reports/{macro}", f"signoff/{macro}"): (pkg_dir / dir_).mkdir(parents=True, exist_ok=True) - orfs_pdk = args.orfs_pdk or _ORFS_PDK_MAP.get(args.pdk, args.pdk) - report_dir = build_dir / f"orfs/reports/{orfs_pdk}/{macro}/base/" - result_dir = build_dir / f"orfs/results/{orfs_pdk}/{macro}/base/" - object_dir = build_dir / f"orfs/objects/{orfs_pdk}/{macro}/base/" - print(f"Copying build artifacts for {macro} from {result_dir}") - shutil.copy(result_dir / "6_final.gds", pkg_dir / f"gds/{macro}.gds") - shutil.copy(result_dir / f"{macro}.lef", pkg_dir / f"lef/{macro}.lef") - shutil.copy(result_dir / "6_final.v", pkg_dir / f"netlist/{macro}.v") - shutil.copy(result_dir / "6_final.sdc", pkg_dir / f"netlist/{macro}.sdc") - shutil.copy(result_dir / "6_final.spef", pkg_dir / f"netlist/{macro}.spef") - shutil.copy(result_dir / "6_final.cdl", pkg_dir / f"netlist/{macro}.cdl") + final_dir = build_dir / "librelane" / args.pdk / "final" + if not final_dir.is_dir(): + raise FileNotFoundError(f"LibreLane final directory not found: {final_dir}") + print(f"Copying build artifacts for {macro} from {final_dir}") + shutil.copy(final_dir / f"gds/{macro}.gds", pkg_dir / f"gds/{macro}.gds") + shutil.copy(final_dir / f"lef/{macro}.lef", pkg_dir / f"lef/{macro}.lef") + shutil.copy(final_dir / f"nl/{macro}.nl.v", pkg_dir / f"netlist/{macro}.v") + shutil.copy(final_dir / f"sdc/{macro}.sdc", pkg_dir / f"netlist/{macro}.sdc") + shutil.copy(final_dir / f"spef/nom/{macro}.nom.spef", pkg_dir / f"netlist/{macro}.spef") + shutil.copy(final_dir / f"spice/{macro}.spice", pkg_dir / f"netlist/{macro}.cdl") c = _corners(args.pdk) - shutil.copy(result_dir / f"{macro}_{c['slow']}.lib", pkg_dir / f"lib/{macro}_slow.lib") - shutil.copy(result_dir / f"{macro}_{c['typ']}.lib", pkg_dir / f"lib/{macro}_typ.lib") - shutil.copy(result_dir / f"{macro}_{c['fast']}.lib", pkg_dir / f"lib/{macro}_fast.lib") - - shutil.copy(report_dir / "6_finish.rpt", pkg_dir / "reports" / macro) - for f in report_dir.rglob("*.webp"): - shutil.copy(f, pkg_dir / "reports" / macro) - - verification_dir = build_dir / f"verification/{args.pdk}" - for check in ("drc", "lvs", "test"): - check_src = verification_dir / check - check_dst = pkg_dir / "signoff" / macro / check - if not check_src.is_dir(): - continue - check_dst.mkdir(parents=True, exist_ok=True) - if check == "drc": - for f in check_src.glob("*.lyrdb"): - shutil.copy(f, check_dst) - elif check == "lvs": - for f in check_src.glob("*.lvsdb"): - shutil.copy(f, check_dst) - elif check == "test": - results = check_src / "results.xml" - if results.exists(): - shutil.copy(results, check_dst) + for name in ("slow", "typ", "fast"): + corner = f"nom_{c[name]}" + shutil.copy(final_dir / f"lib/{corner}/{macro}__{corner}.lib", + pkg_dir / f"lib/{macro}_{name}.lib") + + metrics = final_dir / "metrics.json" + if metrics.exists(): + shutil.copy(metrics, pkg_dir / "reports" / macro) + render = final_dir / f"render/{macro}.png" + if render.exists(): + shutil.copy(render, pkg_dir / "reports" / macro) + + librelane_dir = build_dir / "librelane" / args.pdk + signoff_dir = pkg_dir / "signoff" / macro + + drc = sorted(librelane_dir.glob("*-klayout-drc/reports/drc.klayout.lyrdb")) + if drc: + (signoff_dir / "drc").mkdir(parents=True, exist_ok=True) + shutil.copy(drc[-1], signoff_dir / "drc") + + lvs = sorted(librelane_dir.glob("*-netgen-lvs/reports/lvs.netgen.rpt")) + if lvs: + (signoff_dir / "lvs").mkdir(parents=True, exist_ok=True) + shutil.copy(lvs[-1], signoff_dir / "lvs") + + test_results = build_dir / f"verification/{args.pdk}/test/results.xml" + if test_results.exists(): + (signoff_dir / "test").mkdir(parents=True, exist_ok=True) + shutil.copy(test_results, signoff_dir / "test") def _update_manifest(pkg_dir: Path, macro: str, pdk: str, @@ -475,10 +471,6 @@ def arguments(): parser_package = subparsers.add_parser("package", parents=[common], help="Package a macro") parser_package.add_argument("--macro", type=str, required=True) - parser_package.add_argument( - "--orfs-pdk", type=str, default=None, - help="ORFS PDK name if different from --pdk (e.g. gf180mcuD uses orfs-pdk gf180)", - ) parser_package.add_argument( "--allow-dirty", action="store_true", help="Allow packaging from a repository with uncommitted changes", diff --git a/manifest.xml b/manifest.xml index 78a8c39..0156c22 100644 --- a/manifest.xml +++ b/manifest.xml @@ -11,10 +11,12 @@ SPDX-License-Identifier: CERN-OHL-W-2.0 - - + + + + diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/constraints/sdc/gpio_x_x.sdc b/sources/digital/peripherals/io/gpio/gf180mcuD/constraints/sdc/gpio_x_x.sdc index 9c156f9..f983f67 100644 --- a/sources/digital/peripherals/io/gpio/gf180mcuD/constraints/sdc/gpio_x_x.sdc +++ b/sources/digital/peripherals/io/gpio/gf180mcuD/constraints/sdc/gpio_x_x.sdc @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: CERN-OHL-W-2.0 -create_clock [get_ports clk] -name clk -period 20.0 -waveform {0 10.0} +create_clock [get_ports clk] -name clk -period 30.0 -waveform {0 15.0} set_ideal_network [get_ports clk] set_clock_uncertainty 0.15 [get_clocks clk] set_clock_transition 0.25 [get_clocks clk] diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_apb_32b.yml b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_apb_32b.yml new file mode 100644 index 0000000..6fe657a --- /dev/null +++ b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_apb_32b.yml @@ -0,0 +1,47 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_apb_32b +PDK: gf180mcuD +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_apb_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 30.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_apb_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 262.08, 426.16] +CORE_AREA: [11.20, 11.76, 250.88, 414.96] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: Metal4 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +DESIGN_REPAIR_MAX_SLEW_PCT: 50 +DESIGN_REPAIR_MAX_CAP_PCT: 50 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true + +KLAYOUT_DRC_RUNSET: ref::$DESIGN_DIR/../../../../../../../../pdks/gf180mcuD/libs.tech/klayout/tech/drc/gf180mcu.drc +ERROR_ON_KLAYOUT_DRC: false diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_tl_32b.yml b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_tl_32b.yml new file mode 100644 index 0000000..6fe657a --- /dev/null +++ b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_tl_32b.yml @@ -0,0 +1,47 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_apb_32b +PDK: gf180mcuD +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_apb_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 30.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_apb_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 262.08, 426.16] +CORE_AREA: [11.20, 11.76, 250.88, 414.96] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: Metal4 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +DESIGN_REPAIR_MAX_SLEW_PCT: 50 +DESIGN_REPAIR_MAX_CAP_PCT: 50 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true + +KLAYOUT_DRC_RUNSET: ref::$DESIGN_DIR/../../../../../../../../pdks/gf180mcuD/libs.tech/klayout/tech/drc/gf180mcu.drc +ERROR_ON_KLAYOUT_DRC: false diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_wb_32b.yml b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_wb_32b.yml new file mode 100644 index 0000000..6fe657a --- /dev/null +++ b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/librelane/gpio_wb_32b.yml @@ -0,0 +1,47 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_apb_32b +PDK: gf180mcuD +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_apb_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 30.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_apb_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 262.08, 426.16] +CORE_AREA: [11.20, 11.76, 250.88, 414.96] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: Metal4 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +DESIGN_REPAIR_MAX_SLEW_PCT: 50 +DESIGN_REPAIR_MAX_CAP_PCT: 50 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true + +KLAYOUT_DRC_RUNSET: ref::$DESIGN_DIR/../../../../../../../../pdks/gf180mcuD/libs.tech/klayout/tech/drc/gf180mcu.drc +ERROR_ON_KLAYOUT_DRC: false diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/config.mk b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/config.mk deleted file mode 100644 index 3371250..0000000 --- a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/config.mk +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_apb_32b -export DESIGN_NICKNAME=gpio_apb_32b -export PLATFORM=gf180 -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_apb_32b.v -export DIE_AREA = 0.0 0.0 262.08 426.16 -export CORE_AREA = 11.20 11.76 250.88 414.96 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = Metal4 -export PLACE_DENSITY = 0.80 -export CORNERS = WC TT BC -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_apb_32b.tcl -export CDL_FILE = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/cdl/gf180mcu_fd_sc_mcu7t5v0.cdl -export TRACK_OPTION = 7t -export TECH_LEF = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/techlef/gf180mcu_fd_sc_mcu7t5v0__nom.tlef -export SC_LEF = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lef/gf180mcu_fd_sc_mcu7t5v0.lef -export BC_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__ff_n40C_5v50.lib -export WC_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__ss_125C_4v50.lib -export TT_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__tt_025C_5v00.lib -export TT_LIB_FILES += $(ADDITIONAL_LIBS) -export WC_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export BC_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/gds/gf180mcu_fd_sc_mcu7t5v0.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/rules-base.json b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/rules-base.json deleted file mode 100644 index 7201bca..0000000 --- a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_apb_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 77100.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 83808, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2339, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 203, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 203, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 141913, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 87640, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/config.mk b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/config.mk deleted file mode 100644 index c4096b4..0000000 --- a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/config.mk +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_tl_32b -export DESIGN_NICKNAME=gpio_tl_32b -export PLATFORM=gf180 -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_tl_32b.v -export DIE_AREA = 0.0 0.0 277.20 426.16 -export CORE_AREA = 11.20 11.76 266.00 414.96 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = Metal4 -export PLACE_DENSITY = 0.80 -export CORNERS = WC TT BC -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_tl_32b.tcl -export CDL_FILE = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/cdl/gf180mcu_fd_sc_mcu7t5v0.cdl -export TRACK_OPTION = 7t -export TECH_LEF = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/techlef/gf180mcu_fd_sc_mcu7t5v0__nom.tlef -export SC_LEF = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lef/gf180mcu_fd_sc_mcu7t5v0.lef -export BC_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__ff_n40C_5v50.lib -export WC_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__ss_125C_4v50.lib -export TT_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__tt_025C_5v00.lib -export TT_LIB_FILES += $(ADDITIONAL_LIBS) -export WC_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export BC_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/gds/gf180mcu_fd_sc_mcu7t5v0.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/rules-base.json b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/rules-base.json deleted file mode 100644 index a2ce1b4..0000000 --- a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_tl_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 83700.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 90174, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2510, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 218, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 218, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 161158, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 94451, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/config.mk b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/config.mk deleted file mode 100644 index bcaaf13..0000000 --- a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/config.mk +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_wb_32b -export DESIGN_NICKNAME=gpio_wb_32b -export PLATFORM=gf180 -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_wb_32b.v -export DIE_AREA = 0.0 0.0 262.08 426.16 -export CORE_AREA = 11.20 11.76 250.88 414.96 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = Metal4 -export PLACE_DENSITY = 0.80 -export CORNERS = WC TT BC -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_wb_32b.tcl -export CDL_FILE = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/cdl/gf180mcu_fd_sc_mcu7t5v0.cdl -export TRACK_OPTION = 7t -export TECH_LEF = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/techlef/gf180mcu_fd_sc_mcu7t5v0__nom.tlef -export SC_LEF = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lef/gf180mcu_fd_sc_mcu7t5v0.lef -export BC_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__ff_n40C_5v50.lib -export WC_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__ss_125C_4v50.lib -export TT_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/lib/gf180mcu_fd_sc_mcu7t5v0__tt_025C_5v00.lib -export TT_LIB_FILES += $(ADDITIONAL_LIBS) -export WC_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export BC_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/${PDK}/libs.ref/gf180mcu_fd_sc_mcu7t5v0/gds/gf180mcu_fd_sc_mcu7t5v0.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/rules-base.json b/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/rules-base.json deleted file mode 100644 index 3ff1e77..0000000 --- a/sources/digital/peripherals/io/gpio/gf180mcuD/flow/orfs/gpio_wb_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 77400.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 83765, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2337, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 203, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 203, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 142255, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 87748, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/constraints/io/gpio_tl_32b.tcl b/sources/digital/peripherals/io/gpio/ihp-sg13g2/constraints/io/gpio_tl_32b.tcl index 3d3ba39..2d971ef 100644 --- a/sources/digital/peripherals/io/gpio/ihp-sg13g2/constraints/io/gpio_tl_32b.tcl +++ b/sources/digital/peripherals/io/gpio/ihp-sg13g2/constraints/io/gpio_tl_32b.tcl @@ -36,7 +36,8 @@ set ::m2_pin_sz [expr {double([$m2_layer getMinWidth]) / $::dbu}] # Pin length must satisfy the minimum metal area rule: area = width × length. # Use max(pitch, minArea / minWidth) so the pin rectangle is always DRC-clean. set m2_pitch [expr {double([$m2_layer getPitch]) / $::dbu}] -set m2_minarea [$m2_layer getArea] +# getArea returns the min-area rule in dbu^2; convert to um^2 before use. +set m2_minarea [expr {double([$m2_layer getArea]) / ($::dbu * $::dbu)}] set ::m2_pin_len [expr {max($m2_pitch, $m2_minarea / $::m2_pin_sz)}] # Metal3 — vertical layer → top edge pins diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_apb_32b.yml b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_apb_32b.yml new file mode 100644 index 0000000..b64b582 --- /dev/null +++ b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_apb_32b.yml @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_apb_32b +PDK: ihp-sg13g2 +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_apb_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 20.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_apb_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 171.46, 367.64] +CORE_AREA: [11.52, 11.34, 159.94, 356.30] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: Metal5 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_tl_32b.yml b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_tl_32b.yml new file mode 100644 index 0000000..ede8a68 --- /dev/null +++ b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_tl_32b.yml @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_tl_32b +PDK: ihp-sg13g2 +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_tl_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 20.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_tl_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 188.29, 359.92] +CORE_AREA: [11.52, 11.34, 176.77, 348.58] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: Metal5 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_wb_32b.yml b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_wb_32b.yml new file mode 100644 index 0000000..d211e20 --- /dev/null +++ b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/librelane/gpio_wb_32b.yml @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_wb_32b +PDK: ihp-sg13g2 +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_wb_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 20.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_wb_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 171.46, 367.64] +CORE_AREA: [11.52, 11.34, 159.94, 356.30] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: Metal5 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/config.mk b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/config.mk deleted file mode 100644 index a889a26..0000000 --- a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/config.mk +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_apb_32b -export DESIGN_NICKNAME=gpio_apb_32b -export PLATFORM=ihp-sg13g2 -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_apb_32b.v -export DIE_AREA = 0.0 0.0 161.28 343.98 -export CORE_AREA = 11.52 11.34 149.76 332.64 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = Metal5 -export PLACE_DENSITY = 0.80 -export CORNERS = slow typ fast -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_apb_32b.tcl -export KLAYOUT_LVS_FILE = $(PDK_ROOT)/ihp-sg13g2/libs.tech/klayout/tech/lvs/sg13g2.lvs -export LOAD_ADDITIONAL_FILES = 0 -export TECH_LEF = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_tech.lef -export SC_LEF = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_stdcell.lef -export TYP_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_typ_1p20V_25C.lib -export SLOW_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_slow_1p08V_125C.lib -export FAST_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_fast_1p32V_m40C.lib -export TYP_LIB_FILES += $(ADDITIONAL_LIBS) -export SLOW_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export FAST_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/gds/sg13g2_stdcell.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/rules-base.json b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/rules-base.json deleted file mode 100644 index 67b6161..0000000 --- a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_apb_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 39700.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 41297, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2317, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 202, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 202, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 113763, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 43386, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/config.mk b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/config.mk deleted file mode 100644 index 91cb639..0000000 --- a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/config.mk +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_tl_32b -export DESIGN_NICKNAME=gpio_tl_32b -export PLATFORM=ihp-sg13g2 -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_tl_32b.v -export DIE_AREA = 0.0 0.0 180.48 343.98 -export CORE_AREA = 11.52 11.34 168.96 332.64 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = Metal5 -export PLACE_DENSITY = 0.80 -export CORNERS = slow typ fast -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_tl_32b.tcl -export KLAYOUT_LVS_FILE = $(PDK_ROOT)/ihp-sg13g2/libs.tech/klayout/tech/lvs/sg13g2.lvs -export LOAD_ADDITIONAL_FILES = 0 -export TECH_LEF = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_tech.lef -export SC_LEF = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_stdcell.lef -export TYP_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_typ_1p20V_25C.lib -export SLOW_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_slow_1p08V_125C.lib -export FAST_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_fast_1p32V_m40C.lib -export TYP_LIB_FILES += $(ADDITIONAL_LIBS) -export SLOW_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export FAST_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/gds/sg13g2_stdcell.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/rules-base.json b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/rules-base.json deleted file mode 100644 index a460d2b..0000000 --- a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_tl_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 43500.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 44882, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2512, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 218, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 218, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 114942, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 46977, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/config.mk b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/config.mk deleted file mode 100644 index ffa97fd..0000000 --- a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/config.mk +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_wb_32b -export DESIGN_NICKNAME=gpio_wb_32b -export PLATFORM=ihp-sg13g2 -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_wb_32b.v -export DIE_AREA = 0.0 0.0 161.28 343.98 -export CORE_AREA = 11.52 11.34 149.76 332.64 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = Metal5 -export PLACE_DENSITY = 0.80 -export MAX_REPAIR_ANTENNAS_ITER_DRT = 10 -export CORNERS = slow typ fast -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_wb_32b.tcl -export KLAYOUT_LVS_FILE = $(PDK_ROOT)/ihp-sg13g2/libs.tech/klayout/tech/lvs/sg13g2.lvs -export LOAD_ADDITIONAL_FILES = 0 -export TECH_LEF = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_tech.lef -export SC_LEF = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lef/sg13g2_stdcell.lef -export TYP_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_typ_1p20V_25C.lib -export SLOW_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_slow_1p08V_125C.lib -export FAST_LIB_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/lib/sg13g2_stdcell_fast_1p32V_m40C.lib -export TYP_LIB_FILES += $(ADDITIONAL_LIBS) -export SLOW_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export FAST_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/ihp-sg13g2/libs.ref/sg13g2_stdcell/gds/sg13g2_stdcell.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/rules-base.json b/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/rules-base.json deleted file mode 100644 index 8bb25a6..0000000 --- a/sources/digital/peripherals/io/gpio/ihp-sg13g2/flow/orfs/gpio_wb_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 39200.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 41091, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2290, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 199, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 199, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 108875, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 43319, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/manifest.yml b/sources/digital/peripherals/io/gpio/manifest.yml index daa0ffe..ecb5306 100644 --- a/sources/digital/peripherals/io/gpio/manifest.yml +++ b/sources/digital/peripherals/io/gpio/manifest.yml @@ -64,11 +64,11 @@ macros: io: gf180mcuD/constraints/io/gpio_apb_32b.tcl flow: ihp-sg13g2: - orfs: ihp-sg13g2/flow/orfs/gpio_apb_32b/config.mk + librelane: ihp-sg13g2/flow/librelane/gpio_apb_32b.yml sky130A: - orfs: sky130A/flow/orfs/gpio_apb_32b/config.mk + librelane: sky130A/flow/librelane/gpio_apb_32b.yml gf180mcuD: - orfs: gf180mcuD/flow/orfs/gpio_apb_32b/config.mk + librelane: gf180mcuD/flow/librelane/gpio_apb_32b.yml - name: gpio_wb_32b description: 32-bit GPIO with Wishbone interface @@ -114,11 +114,11 @@ macros: io: gf180mcuD/constraints/io/gpio_wb_32b.tcl flow: ihp-sg13g2: - orfs: ihp-sg13g2/flow/orfs/gpio_wb_32b/config.mk + librelane: ihp-sg13g2/flow/librelane/gpio_wb_32b.yml sky130A: - orfs: sky130A/flow/orfs/gpio_wb_32b/config.mk + librelane: sky130A/flow/librelane/gpio_wb_32b.yml gf180mcuD: - orfs: gf180mcuD/flow/orfs/gpio_wb_32b/config.mk + librelane: gf180mcuD/flow/librelane/gpio_wb_32b.yml - name: gpio_tl_32b description: 32-bit GPIO with TileLink TL-UL interface @@ -175,11 +175,11 @@ macros: io: gf180mcuD/constraints/io/gpio_tl_32b.tcl flow: ihp-sg13g2: - orfs: ihp-sg13g2/flow/orfs/gpio_tl_32b/config.mk + librelane: ihp-sg13g2/flow/librelane/gpio_tl_32b.yml sky130A: - orfs: sky130A/flow/orfs/gpio_tl_32b/config.mk + librelane: sky130A/flow/librelane/gpio_tl_32b.yml gf180mcuD: - orfs: gf180mcuD/flow/orfs/gpio_tl_32b/config.mk + librelane: gf180mcuD/flow/librelane/gpio_tl_32b.yml docs: - doc/gpio.md diff --git a/sources/digital/peripherals/io/gpio/sky130A/constraints/io/gpio_tl_32b.tcl b/sources/digital/peripherals/io/gpio/sky130A/constraints/io/gpio_tl_32b.tcl index bc705cf..251827d 100644 --- a/sources/digital/peripherals/io/gpio/sky130A/constraints/io/gpio_tl_32b.tcl +++ b/sources/digital/peripherals/io/gpio/sky130A/constraints/io/gpio_tl_32b.tcl @@ -39,7 +39,8 @@ set ::m2_pin_sz [expr {double([$m2_layer getMinWidth]) / $::dbu}] # Also ensures pin_len × minWidth ≥ minArea (DRC area rule). set m2_pitch_dbu [$m2_layer getPitch] set m2_minwidth_dbu [$m2_layer getMinWidth] -set m2_minarea_dbu2 [expr {int([$m2_layer getArea] * $::dbu * $::dbu + 0.5)}] +# getArea already returns the min-area rule in dbu^2 (do not scale by dbu again). +set m2_minarea_dbu2 [expr {int([$m2_layer getArea] + 0.5)}] set mfg_grid_dbu [$tech getManufacturingGrid] set snap_dbu [expr {2 * $mfg_grid_dbu}] set min_len_dbu [expr {int(ceil(double($m2_minarea_dbu2) / $m2_minwidth_dbu))}] diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_apb_32b.yml b/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_apb_32b.yml new file mode 100644 index 0000000..d2a20cf --- /dev/null +++ b/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_apb_32b.yml @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_apb_32b +PDK: sky130A +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_apb_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 20.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_apb_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 181.43, 216.69] +CORE_AREA: [11.50, 10.88, 169.93, 205.81] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: met4 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +DESIGN_REPAIR_MAX_SLEW_PCT: 50 +DESIGN_REPAIR_MAX_CAP_PCT: 50 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_tl_32b.yml b/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_tl_32b.yml new file mode 100644 index 0000000..8dea41f --- /dev/null +++ b/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_tl_32b.yml @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_tl_32b +PDK: sky130A +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_tl_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 20.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_tl_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 185.93, 222.23] +CORE_AREA: [11.50, 10.88, 174.43, 211.35] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: met4 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +DESIGN_REPAIR_MAX_SLEW_PCT: 50 +DESIGN_REPAIR_MAX_CAP_PCT: 50 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_wb_32b.yml b/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_wb_32b.yml new file mode 100644 index 0000000..25ca52a --- /dev/null +++ b/sources/digital/peripherals/io/gpio/sky130A/flow/librelane/gpio_wb_32b.yml @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: 2026 aesc silicon +# +# SPDX-License-Identifier: CERN-OHL-W-2.0 + +meta: + version: 3 + flow: Classic + substituting_steps: + "+OpenROAD.IOPlacement": "Aesc.FixedIOPlacement" + +DESIGN_NAME: gpio_wb_32b +PDK: sky130A +VERILOG_FILES: + - dir::../../../rtl/verilog/gpio_wb_32b.v +LINTER_DISABLE_WARNINGS: [TIMESCALEMOD] + +CLOCK_PORT: clk +CLOCK_PERIOD: 20.00 + +PNR_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc +SIGNOFF_SDC_FILE: ref::$DESIGN_DIR/../../constraints/sdc/gpio_x_x.sdc + +PDN_CFG: ref::$DESIGN_DIR/../../constraints/pdn/gpio_x_32b.tcl + +FIXED_IO_SCRIPT: ref::$DESIGN_DIR/../../constraints/io/gpio_wb_32b.tcl + +FP_SIZING: absolute +DIE_AREA: [0.0, 0.0, 181.43, 216.69] +CORE_AREA: [11.50, 10.88, 169.93, 205.81] +PL_TARGET_DENSITY_PCT: 80 +RT_MAX_LAYER: met4 + +PL_RESIZER_HOLD_SLACK_MARGIN: 0.05 + +DESIGN_REPAIR_MAX_SLEW_PCT: 50 +DESIGN_REPAIR_MAX_CAP_PCT: 50 + +VDD_NETS: [VDD] +GND_NETS: [VSS] + +PRIMARY_GDSII_STREAMOUT_TOOL: klayout + +RUN_MAGIC_DRC: false +RUN_GDSCHECK_DRC: true diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/config.mk b/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/config.mk deleted file mode 100644 index a8f0f3b..0000000 --- a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/config.mk +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_apb_32b -export DESIGN_NICKNAME=gpio_apb_32b -export PLATFORM=sky130hd -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_apb_32b.v -export DIE_AREA = 0.0 0.0 171.12 204.00 -export CORE_AREA = 11.50 10.88 159.62 193.12 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = met4 -export PLACE_DENSITY = 0.80 -export CORNERS = slow typ fast -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_apb_32b.tcl -export TECH_LEF = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/techlef/sky130_fd_sc_hd__nom.tlef -export SC_LEF = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lef/sky130_fd_sc_hd.lef -export TYP_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib -export SLOW_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib -export FAST_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib -export TYP_LIB_FILES += $(ADDITIONAL_LIBS) -export SLOW_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export FAST_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/gds/sky130_fd_sc_hd.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/rules-base.json b/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/rules-base.json deleted file mode 100644 index 7716a1e..0000000 --- a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_apb_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 20800.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 22694, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2364, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 206, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 206, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 93785, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 24405, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/config.mk b/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/config.mk deleted file mode 100644 index b29ec87..0000000 --- a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/config.mk +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_tl_32b -export DESIGN_NICKNAME=gpio_tl_32b -export PLATFORM=sky130hd -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_tl_32b.v -export DIE_AREA = 0.0 0.0 171.12 204.00 -export CORE_AREA = 11.50 10.88 159.62 193.12 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = met4 -export PLACE_DENSITY = 0.80 -export CORNERS = slow typ fast -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_tl_32b.tcl -export TECH_LEF = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/techlef/sky130_fd_sc_hd__nom.tlef -export SC_LEF = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lef/sky130_fd_sc_hd.lef -export TYP_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib -export SLOW_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib -export FAST_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib -export TYP_LIB_FILES += $(ADDITIONAL_LIBS) -export SLOW_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export FAST_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/gds/sky130_fd_sc_hd.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/rules-base.json b/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/rules-base.json deleted file mode 100644 index fa8cfd9..0000000 --- a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_tl_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 22200.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 24316, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2404, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 209, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 209, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 89522, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 26260, - "compare": "<=" - } -} \ No newline at end of file diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/config.mk b/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/config.mk deleted file mode 100644 index 3a25187..0000000 --- a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/config.mk +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-FileCopyrightText: 2026 aesc silicon -# -# SPDX-License-Identifier: CERN-OHL-W-2.0 - -export DESIGN_NAME=gpio_wb_32b -export DESIGN_NICKNAME=gpio_wb_32b -export PLATFORM=sky130hd -export VERILOG_FILES=${IP_ROOT}/rtl/verilog/gpio_wb_32b.v -export DIE_AREA = 0.0 0.0 171.12 204.00 -export CORE_AREA = 11.50 10.88 159.62 193.12 -export LEC_CHECK = 0 -export MAX_ROUTING_LAYER = met4 -export PLACE_DENSITY = 0.80 -export CORNERS = slow typ fast -export SDC_FILE=${IP_ROOT}/${PDK}/constraints/sdc/gpio_x_x.sdc -export PDN_TCL=${IP_ROOT}/${PDK}/constraints/pdn/gpio_x_32b.tcl -export IO_CONSTRAINTS=${IP_ROOT}/${PDK}/constraints/io/gpio_wb_32b.tcl -export TECH_LEF = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/techlef/sky130_fd_sc_hd__nom.tlef -export SC_LEF = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lef/sky130_fd_sc_hd.lef -export TYP_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib -export SLOW_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ss_100C_1v60.lib -export FAST_LIB_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__ff_n40C_1v95.lib -export TYP_LIB_FILES += $(ADDITIONAL_LIBS) -export SLOW_LIB_FILES += $(ADDITIONAL_SLOW_LIBS) -export FAST_LIB_FILES += $(ADDITIONAL_FAST_LIBS) -export GDS_FILES = $(PDK_ROOT)/${PDK}/libs.ref/sky130_fd_sc_hd/gds/sky130_fd_sc_hd.gds -export GDS_FILES += $(ADDITIONAL_GDS) diff --git a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/rules-base.json b/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/rules-base.json deleted file mode 100644 index 907ffcb..0000000 --- a/sources/digital/peripherals/io/gpio/sky130A/flow/orfs/gpio_wb_32b/rules-base.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 20600.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 22664, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 2376, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 207, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 207, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "detailedroute__route__wirelength": { - "value": 92590, - "compare": "<=" - }, - "detailedroute__route__drc_errors": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna__violating__nets": { - "value": 0, - "compare": "<=" - }, - "detailedroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "finish__timing__setup__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -1.0, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -4.0, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 24278, - "compare": "<=" - } -} \ No newline at end of file