siliconcompiler 0.32.3__py3-none-any.whl → 0.33.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- siliconcompiler/__init__.py +19 -2
- siliconcompiler/_common.py +5 -0
- siliconcompiler/_metadata.py +1 -1
- siliconcompiler/apps/sc.py +2 -2
- siliconcompiler/apps/sc_install.py +10 -3
- siliconcompiler/apps/sc_issue.py +1 -1
- siliconcompiler/apps/sc_remote.py +10 -5
- siliconcompiler/apps/sc_show.py +2 -2
- siliconcompiler/apps/utils/replay.py +5 -3
- siliconcompiler/asic.py +120 -0
- siliconcompiler/checklist.py +150 -0
- siliconcompiler/core.py +299 -299
- siliconcompiler/flowgraph.py +803 -515
- siliconcompiler/fpga.py +84 -0
- siliconcompiler/metric.py +479 -0
- siliconcompiler/optimizer/vizier.py +2 -3
- siliconcompiler/package/__init__.py +29 -6
- siliconcompiler/pdk.py +415 -0
- siliconcompiler/record.py +453 -0
- siliconcompiler/remote/client.py +15 -5
- siliconcompiler/remote/schema.py +116 -112
- siliconcompiler/remote/server.py +9 -6
- siliconcompiler/report/dashboard/cli/__init__.py +14 -721
- siliconcompiler/report/dashboard/cli/board.py +899 -0
- siliconcompiler/report/dashboard/web/__init__.py +10 -10
- siliconcompiler/report/dashboard/web/components/__init__.py +5 -4
- siliconcompiler/report/dashboard/web/components/flowgraph.py +3 -3
- siliconcompiler/report/dashboard/web/components/graph.py +6 -3
- siliconcompiler/report/dashboard/web/state.py +1 -1
- siliconcompiler/report/dashboard/web/utils/__init__.py +4 -3
- siliconcompiler/report/html_report.py +2 -3
- siliconcompiler/report/report.py +22 -11
- siliconcompiler/report/summary_image.py +1 -1
- siliconcompiler/report/summary_table.py +3 -3
- siliconcompiler/report/utils.py +21 -14
- siliconcompiler/scheduler/__init__.py +234 -1206
- siliconcompiler/scheduler/run_node.py +2 -1
- siliconcompiler/scheduler/send_messages.py +11 -5
- siliconcompiler/scheduler/slurm.py +11 -44
- siliconcompiler/scheduler/taskscheduler.py +320 -0
- siliconcompiler/schema/__init__.py +19 -2
- siliconcompiler/schema/baseschema.py +493 -0
- siliconcompiler/schema/cmdlineschema.py +250 -0
- siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
- siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
- siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
- siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
- siliconcompiler/schema/editableschema.py +136 -0
- siliconcompiler/schema/journalingschema.py +238 -0
- siliconcompiler/schema/namedschema.py +41 -0
- siliconcompiler/schema/packageschema.py +101 -0
- siliconcompiler/schema/parameter.py +791 -0
- siliconcompiler/schema/parametertype.py +323 -0
- siliconcompiler/schema/parametervalue.py +736 -0
- siliconcompiler/schema/safeschema.py +37 -0
- siliconcompiler/schema/schema_cfg.py +109 -1789
- siliconcompiler/schema/utils.py +5 -68
- siliconcompiler/schema_obj.py +119 -0
- siliconcompiler/tool.py +1416 -0
- siliconcompiler/tools/_common/__init__.py +6 -10
- siliconcompiler/tools/_common/asic.py +5 -5
- siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
- siliconcompiler/tools/bluespec/convert.py +9 -8
- siliconcompiler/tools/builtin/_common.py +9 -2
- siliconcompiler/tools/builtin/concatenate.py +7 -3
- siliconcompiler/tools/builtin/minimum.py +7 -2
- siliconcompiler/tools/builtin/mux.py +8 -2
- siliconcompiler/tools/builtin/nop.py +7 -2
- siliconcompiler/tools/builtin/verify.py +11 -5
- siliconcompiler/tools/chisel/convert.py +10 -10
- siliconcompiler/tools/genfasm/bitstream.py +3 -3
- siliconcompiler/tools/ghdl/convert.py +1 -1
- siliconcompiler/tools/icarus/compile.py +4 -4
- siliconcompiler/tools/icepack/bitstream.py +6 -1
- siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
- siliconcompiler/tools/klayout/drc.py +2 -2
- siliconcompiler/tools/klayout/klayout_export.py +0 -1
- siliconcompiler/tools/klayout/klayout_show.py +6 -6
- siliconcompiler/tools/klayout/klayout_utils.py +15 -22
- siliconcompiler/tools/netgen/count_lvs.py +2 -2
- siliconcompiler/tools/netgen/lvs.py +1 -1
- siliconcompiler/tools/nextpnr/apr.py +6 -1
- siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
- siliconcompiler/tools/openroad/_apr.py +15 -2
- siliconcompiler/tools/openroad/rdlroute.py +3 -3
- siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
- siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +3 -9
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +75 -1
- siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +1 -7
- siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
- siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/sc_show.tcl +6 -6
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl +10 -0
- siliconcompiler/tools/opensta/timing.py +11 -0
- siliconcompiler/tools/slang/__init__.py +13 -13
- siliconcompiler/tools/slang/elaborate.py +6 -6
- siliconcompiler/tools/slang/lint.py +1 -3
- siliconcompiler/tools/surelog/parse.py +4 -4
- siliconcompiler/tools/sv2v/convert.py +20 -3
- siliconcompiler/tools/verilator/compile.py +2 -2
- siliconcompiler/tools/verilator/verilator.py +3 -3
- siliconcompiler/tools/vpr/_xml_constraint.py +8 -8
- siliconcompiler/tools/vpr/place.py +1 -1
- siliconcompiler/tools/vpr/route.py +4 -4
- siliconcompiler/tools/vpr/screenshot.py +1 -1
- siliconcompiler/tools/vpr/show.py +5 -5
- siliconcompiler/tools/vpr/vpr.py +24 -24
- siliconcompiler/tools/xdm/convert.py +2 -2
- siliconcompiler/tools/xyce/simulate.py +1 -1
- siliconcompiler/tools/yosys/prepareLib.py +2 -2
- siliconcompiler/tools/yosys/sc_synth_asic.tcl +111 -63
- siliconcompiler/tools/yosys/screenshot.py +1 -1
- siliconcompiler/tools/yosys/syn_asic.py +7 -7
- siliconcompiler/toolscripts/_tools.json +12 -10
- siliconcompiler/toolscripts/rhel8/install-chisel.sh +9 -2
- siliconcompiler/toolscripts/rhel8/install-icarus.sh +10 -3
- siliconcompiler/toolscripts/rhel8/install-klayout.sh +8 -1
- siliconcompiler/toolscripts/rhel8/install-magic.sh +9 -2
- siliconcompiler/toolscripts/rhel8/install-montage.sh +1 -1
- siliconcompiler/toolscripts/rhel8/install-netgen.sh +9 -2
- siliconcompiler/toolscripts/rhel8/install-slang.sh +11 -4
- siliconcompiler/toolscripts/rhel8/install-surelog.sh +9 -2
- siliconcompiler/toolscripts/rhel8/install-sv2v.sh +11 -4
- siliconcompiler/toolscripts/rhel8/install-verible.sh +11 -3
- siliconcompiler/toolscripts/rhel8/install-verilator.sh +10 -3
- siliconcompiler/toolscripts/rhel8/install-xyce.sh +15 -10
- siliconcompiler/toolscripts/rhel9/install-chisel.sh +9 -2
- siliconcompiler/toolscripts/rhel9/install-ghdl.sh +9 -2
- siliconcompiler/toolscripts/rhel9/install-gtkwave.sh +10 -3
- siliconcompiler/toolscripts/rhel9/install-icarus.sh +10 -3
- siliconcompiler/toolscripts/rhel9/install-klayout.sh +8 -1
- siliconcompiler/toolscripts/rhel9/install-magic.sh +9 -2
- siliconcompiler/toolscripts/rhel9/install-montage.sh +1 -1
- siliconcompiler/toolscripts/rhel9/install-netgen.sh +9 -2
- siliconcompiler/toolscripts/rhel9/install-openroad.sh +16 -3
- siliconcompiler/toolscripts/rhel9/install-opensta.sh +17 -5
- siliconcompiler/toolscripts/rhel9/install-slang.sh +11 -4
- siliconcompiler/toolscripts/rhel9/install-surelog.sh +9 -2
- siliconcompiler/toolscripts/rhel9/install-sv2v.sh +11 -4
- siliconcompiler/toolscripts/rhel9/install-verible.sh +11 -3
- siliconcompiler/toolscripts/rhel9/install-verilator.sh +10 -3
- siliconcompiler/toolscripts/rhel9/install-vpr.sh +9 -2
- siliconcompiler/toolscripts/rhel9/install-xdm.sh +10 -2
- siliconcompiler/toolscripts/rhel9/install-xyce.sh +15 -10
- siliconcompiler/toolscripts/rhel9/install-yosys-moosic.sh +9 -2
- siliconcompiler/toolscripts/rhel9/install-yosys-parmys.sh +10 -3
- siliconcompiler/toolscripts/rhel9/install-yosys-slang.sh +10 -2
- siliconcompiler/toolscripts/rhel9/install-yosys.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-bambu.sh +10 -2
- siliconcompiler/toolscripts/ubuntu20/install-bluespec.sh +10 -3
- siliconcompiler/toolscripts/ubuntu20/install-chisel.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-ghdl.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-gtkwave.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-icarus.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-icepack.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-klayout.sh +8 -1
- siliconcompiler/toolscripts/ubuntu20/install-magic.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-montage.sh +1 -1
- siliconcompiler/toolscripts/ubuntu20/install-netgen.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-nextpnr.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-openroad.sh +16 -3
- siliconcompiler/toolscripts/ubuntu20/install-opensta.sh +16 -5
- siliconcompiler/toolscripts/ubuntu20/install-slang.sh +11 -4
- siliconcompiler/toolscripts/ubuntu20/install-slurm.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +10 -2
- siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +11 -4
- siliconcompiler/toolscripts/ubuntu20/install-verible.sh +11 -3
- siliconcompiler/toolscripts/ubuntu20/install-verilator.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-xdm.sh +10 -2
- siliconcompiler/toolscripts/ubuntu20/install-xyce.sh +13 -8
- siliconcompiler/toolscripts/ubuntu20/install-yosys-moosic.sh +9 -2
- siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-bambu.sh +10 -2
- siliconcompiler/toolscripts/ubuntu22/install-bluespec.sh +10 -3
- siliconcompiler/toolscripts/ubuntu22/install-chisel.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-ghdl.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-gtkwave.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-icarus.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-icepack.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-klayout.sh +8 -1
- siliconcompiler/toolscripts/ubuntu22/install-magic.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-montage.sh +1 -1
- siliconcompiler/toolscripts/ubuntu22/install-netgen.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-nextpnr.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-openroad.sh +16 -3
- siliconcompiler/toolscripts/ubuntu22/install-opensta.sh +17 -5
- siliconcompiler/toolscripts/ubuntu22/install-slang.sh +11 -4
- siliconcompiler/toolscripts/ubuntu22/install-slurm.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +10 -2
- siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +11 -4
- siliconcompiler/toolscripts/ubuntu22/install-verible.sh +11 -3
- siliconcompiler/toolscripts/ubuntu22/install-verilator.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +9 -4
- siliconcompiler/toolscripts/ubuntu22/install-xdm.sh +10 -2
- siliconcompiler/toolscripts/ubuntu22/install-xyce.sh +13 -8
- siliconcompiler/toolscripts/ubuntu22/install-yosys-moosic.sh +9 -2
- siliconcompiler/toolscripts/ubuntu22/install-yosys-parmys.sh +10 -3
- siliconcompiler/toolscripts/ubuntu22/install-yosys-slang.sh +10 -2
- siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +12 -4
- siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh +10 -3
- siliconcompiler/toolscripts/ubuntu24/install-chisel.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-icepack.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-klayout.sh +8 -1
- siliconcompiler/toolscripts/ubuntu24/install-magic.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-montage.sh +1 -1
- siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-openroad.sh +16 -3
- siliconcompiler/toolscripts/ubuntu24/install-opensta.sh +17 -5
- siliconcompiler/toolscripts/ubuntu24/install-slang.sh +11 -4
- siliconcompiler/toolscripts/ubuntu24/install-slurm.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +10 -2
- siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +11 -4
- siliconcompiler/toolscripts/ubuntu24/install-verible.sh +11 -3
- siliconcompiler/toolscripts/ubuntu24/install-verilator.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +9 -4
- siliconcompiler/toolscripts/ubuntu24/install-xdm.sh +10 -2
- siliconcompiler/toolscripts/ubuntu24/install-xyce.sh +13 -8
- siliconcompiler/toolscripts/ubuntu24/install-yosys-moosic.sh +9 -2
- siliconcompiler/toolscripts/ubuntu24/install-yosys-parmys.sh +10 -3
- siliconcompiler/toolscripts/ubuntu24/install-yosys-slang.sh +10 -2
- siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +9 -2
- siliconcompiler/utils/__init__.py +19 -112
- siliconcompiler/utils/flowgraph.py +244 -0
- siliconcompiler/{issue.py → utils/issue.py} +18 -25
- siliconcompiler/utils/logging.py +3 -4
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/METADATA +9 -8
- siliconcompiler-0.33.1.dist-info/RECORD +488 -0
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/WHEEL +1 -1
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/entry_points.txt +8 -8
- siliconcompiler/schema/schema_obj.py +0 -1936
- siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -29
- siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -61
- siliconcompiler-0.32.3.dist-info/RECORD +0 -470
- /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
- /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
- /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
- /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
- /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
- /siliconcompiler/{units.py → utils/units.py} +0 -0
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/top_level.txt +0 -0
siliconcompiler/pdk.py
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
from siliconcompiler.schema import NamedSchema, PackageSchema
|
|
2
|
+
from siliconcompiler.schema import EditableSchema, Parameter, Scope
|
|
3
|
+
from siliconcompiler.schema.utils import trim
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class PDKSchema(NamedSchema, PackageSchema):
|
|
7
|
+
def __init__(self, name=None, package=None):
|
|
8
|
+
NamedSchema.__init__(self, name=name)
|
|
9
|
+
PackageSchema.__init__(self, package=package)
|
|
10
|
+
|
|
11
|
+
schema_pdk(self)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
###############################################################################
|
|
15
|
+
# PDK
|
|
16
|
+
###############################################################################
|
|
17
|
+
def schema_pdk(schema):
|
|
18
|
+
schema = EditableSchema(schema)
|
|
19
|
+
|
|
20
|
+
tool = 'default'
|
|
21
|
+
filetype = 'default'
|
|
22
|
+
stackup = 'default'
|
|
23
|
+
|
|
24
|
+
schema.insert(
|
|
25
|
+
'foundry',
|
|
26
|
+
Parameter(
|
|
27
|
+
'str',
|
|
28
|
+
scope=Scope.GLOBAL,
|
|
29
|
+
shorthelp="PDK: foundry name",
|
|
30
|
+
switch="-pdk_foundry 'pdkname <str>'",
|
|
31
|
+
example=["cli: -pdk_foundry 'asap7 virtual'",
|
|
32
|
+
"api: chip.set('pdk', 'asap7', 'foundry', 'virtual')"],
|
|
33
|
+
help=trim("""
|
|
34
|
+
Name of foundry corporation. Examples include intel, gf, tsmc,
|
|
35
|
+
samsung, skywater, virtual. The \'virtual\' keyword is reserved for
|
|
36
|
+
simulated non-manufacturable processes.""")))
|
|
37
|
+
|
|
38
|
+
schema.insert(
|
|
39
|
+
'node',
|
|
40
|
+
Parameter(
|
|
41
|
+
'float',
|
|
42
|
+
scope=Scope.GLOBAL,
|
|
43
|
+
unit='nm',
|
|
44
|
+
shorthelp="PDK: process node",
|
|
45
|
+
switch="-pdk_node 'pdkname <float>'",
|
|
46
|
+
example=["cli: -pdk_node 'asap7 130'",
|
|
47
|
+
"api: chip.set('pdk', 'asap7', 'node', 130)"],
|
|
48
|
+
help=trim("""
|
|
49
|
+
Approximate relative minimum dimension of the process target specified
|
|
50
|
+
in nanometers. The parameter is required for flows and tools that
|
|
51
|
+
leverage the value to drive technology dependent synthesis and APR
|
|
52
|
+
optimization. Node examples include 180, 130, 90, 65, 45, 32, 22 14,
|
|
53
|
+
10, 7, 5, 3.""")))
|
|
54
|
+
|
|
55
|
+
schema.insert(
|
|
56
|
+
'version',
|
|
57
|
+
Parameter(
|
|
58
|
+
'str',
|
|
59
|
+
scope=Scope.GLOBAL,
|
|
60
|
+
shorthelp="PDK: version",
|
|
61
|
+
switch="-pdk_version 'pdkname <str>'",
|
|
62
|
+
example=["cli: -pdk_version 'asap7 1.0'",
|
|
63
|
+
"api: chip.set('pdk', 'asap7', 'version', '1.0')"],
|
|
64
|
+
help=trim("""
|
|
65
|
+
Alphanumeric string specifying the version of the PDK. Verification of
|
|
66
|
+
correct PDK and IP versions is a hard ASIC tapeout require in all
|
|
67
|
+
commercial foundries. The version number can be used for design manifest
|
|
68
|
+
tracking and tapeout checklists.""")))
|
|
69
|
+
|
|
70
|
+
schema.insert(
|
|
71
|
+
'stackup',
|
|
72
|
+
Parameter(
|
|
73
|
+
'[str]',
|
|
74
|
+
scope=Scope.GLOBAL,
|
|
75
|
+
shorthelp="PDK: metal stackups",
|
|
76
|
+
switch="-pdk_stackup 'pdkname <str>'",
|
|
77
|
+
example=["cli: -pdk_stackup 'asap7 2MA4MB2MC'",
|
|
78
|
+
"api: chip.add('pdk', 'asap7', 'stackup', '2MA4MB2MC')"],
|
|
79
|
+
help=trim("""
|
|
80
|
+
List of all metal stackups offered in the process node. Older process
|
|
81
|
+
nodes may only offer a single metal stackup, while advanced nodes
|
|
82
|
+
offer a large but finite list of metal stacks with varying combinations
|
|
83
|
+
of metal line pitches and thicknesses. Stackup naming is unique to a
|
|
84
|
+
foundry, but is generally a long string or code. For example, a 10
|
|
85
|
+
metal stackup with two 1x wide, four 2x wide, and 4x wide metals,
|
|
86
|
+
might be identified as 2MA4MB2MC, where MA, MB, and MC denote wiring
|
|
87
|
+
layers with different properties (thickness, width, space). Each
|
|
88
|
+
stackup will come with its own set of routing technology files and
|
|
89
|
+
parasitic models specified in the pdk_pexmodel and pdk_aprtech
|
|
90
|
+
parameters.""")))
|
|
91
|
+
|
|
92
|
+
schema.insert(
|
|
93
|
+
'minlayer', stackup,
|
|
94
|
+
Parameter(
|
|
95
|
+
'str',
|
|
96
|
+
scope=Scope.GLOBAL,
|
|
97
|
+
shorthelp="PDK: minimum routing layer",
|
|
98
|
+
switch="-pdk_minlayer 'pdk stackup <str>'",
|
|
99
|
+
example=[
|
|
100
|
+
"cli: -pdk_minlayer 'asap7 2MA4MB2MC M2'",
|
|
101
|
+
"api: chip.set('pdk', 'asap7', 'minlayer', '2MA4MB2MC', 'M2')"],
|
|
102
|
+
help=trim("""
|
|
103
|
+
Minimum metal layer to be used for automated place and route
|
|
104
|
+
specified on a per stackup basis.""")))
|
|
105
|
+
|
|
106
|
+
schema.insert(
|
|
107
|
+
'maxlayer', stackup,
|
|
108
|
+
Parameter(
|
|
109
|
+
'str',
|
|
110
|
+
scope=Scope.GLOBAL,
|
|
111
|
+
shorthelp="PDK: maximum routing layer",
|
|
112
|
+
switch="-pdk_maxlayer 'pdk stackup <str>'",
|
|
113
|
+
example=[
|
|
114
|
+
"cli: -pdk_maxlayer 'asap7 2MA4MB2MC M8'",
|
|
115
|
+
"api: chip.set('pdk', 'asap7', 'maxlayer', 'MA4MB2MC', 'M8')"],
|
|
116
|
+
help=trim("""
|
|
117
|
+
Maximum metal layer to be used for automated place and route
|
|
118
|
+
specified on a per stackup basis.""")))
|
|
119
|
+
|
|
120
|
+
schema.insert(
|
|
121
|
+
'wafersize',
|
|
122
|
+
Parameter(
|
|
123
|
+
'float',
|
|
124
|
+
scope=Scope.GLOBAL,
|
|
125
|
+
unit='mm',
|
|
126
|
+
shorthelp="PDK: wafer size",
|
|
127
|
+
switch="-pdk_wafersize 'pdkname <float>'",
|
|
128
|
+
example=["cli: -pdk_wafersize 'asap7 300'",
|
|
129
|
+
"api: chip.set('pdk', 'asap7', 'wafersize', 300)"],
|
|
130
|
+
help=trim("""
|
|
131
|
+
Wafer diameter used in wafer based manufacturing process.
|
|
132
|
+
The standard diameter for leading edge manufacturing is 300mm. For
|
|
133
|
+
older process technologies and specialty fabs, smaller diameters
|
|
134
|
+
such as 200, 150, 125, and 100 are common. The value is used to
|
|
135
|
+
calculate dies per wafer and full factory chip costs.""")))
|
|
136
|
+
|
|
137
|
+
schema.insert(
|
|
138
|
+
'panelsize',
|
|
139
|
+
Parameter(
|
|
140
|
+
'[(float,float)]',
|
|
141
|
+
scope=Scope.GLOBAL,
|
|
142
|
+
unit='mm',
|
|
143
|
+
shorthelp="PDK: panel size",
|
|
144
|
+
switch="-pdk_panelsize 'pdkname <(float,float)>'",
|
|
145
|
+
example=[
|
|
146
|
+
"cli: -pdk_panelsize 'asap7 (45.72,60.96)'",
|
|
147
|
+
"api: chip.set('pdk', 'asap7', 'panelsize', (45.72, 60.96))"],
|
|
148
|
+
help=trim("""
|
|
149
|
+
List of panel sizes supported in the manufacturing process.
|
|
150
|
+
""")))
|
|
151
|
+
|
|
152
|
+
schema.insert(
|
|
153
|
+
'unitcost',
|
|
154
|
+
Parameter(
|
|
155
|
+
'float',
|
|
156
|
+
scope=Scope.GLOBAL,
|
|
157
|
+
unit='USD',
|
|
158
|
+
shorthelp="PDK: unit cost",
|
|
159
|
+
switch="-pdk_unitcost 'pdkname <float>'",
|
|
160
|
+
example=["cli: -pdk_unitcost 'asap7 10000'",
|
|
161
|
+
"api: chip.set('pdk', 'asap7', 'unitcost', 10000)"],
|
|
162
|
+
help=trim("""
|
|
163
|
+
Raw cost per unit shipped by the factory, not accounting for yield
|
|
164
|
+
loss.""")))
|
|
165
|
+
|
|
166
|
+
schema.insert(
|
|
167
|
+
'd0',
|
|
168
|
+
Parameter(
|
|
169
|
+
'float',
|
|
170
|
+
scope=Scope.GLOBAL,
|
|
171
|
+
shorthelp="PDK: process defect density",
|
|
172
|
+
switch="-pdk_d0 'pdkname <float>'",
|
|
173
|
+
example=["cli: -pdk_d0 'asap7 0.1'",
|
|
174
|
+
"api: chip.set('pdk', 'asap7', 'd0', 0.1)"],
|
|
175
|
+
help=trim("""
|
|
176
|
+
Process defect density (d0) expressed as random defects per cm^2. The
|
|
177
|
+
value is used to calculate yield losses as a function of area, which in
|
|
178
|
+
turn affects the chip full factory costs. Two yield models are
|
|
179
|
+
supported: Poisson (default), and Murphy. The Poisson based yield is
|
|
180
|
+
calculated as dy = exp(-area * d0/100). The Murphy based yield is
|
|
181
|
+
calculated as dy = ((1-exp(-area * d0/100))/(area * d0/100))^2.""")))
|
|
182
|
+
|
|
183
|
+
schema.insert(
|
|
184
|
+
'scribe',
|
|
185
|
+
Parameter(
|
|
186
|
+
'(float,float)',
|
|
187
|
+
scope=Scope.GLOBAL,
|
|
188
|
+
unit='mm',
|
|
189
|
+
shorthelp="PDK: horizontal scribe line width",
|
|
190
|
+
switch="-pdk_scribe 'pdkname <(float,float)>'",
|
|
191
|
+
example=["cli: -pdk_scribe 'asap7 (0.1,0.1)'",
|
|
192
|
+
"api: chip.set('pdk', 'asap7', 'scribe', (0.1, 0.1))"],
|
|
193
|
+
help=trim("""
|
|
194
|
+
Width of the horizontal and vertical scribe line used during die separation.
|
|
195
|
+
The process is generally completed using a mechanical saw, but can be
|
|
196
|
+
done through combinations of mechanical saws, lasers, wafer thinning,
|
|
197
|
+
and chemical etching in more advanced technologies. The value is used
|
|
198
|
+
to calculate effective dies per wafer and full factory cost.""")))
|
|
199
|
+
|
|
200
|
+
schema.insert(
|
|
201
|
+
'edgemargin',
|
|
202
|
+
Parameter(
|
|
203
|
+
'float',
|
|
204
|
+
scope=Scope.GLOBAL,
|
|
205
|
+
unit='mm',
|
|
206
|
+
shorthelp="PDK: wafer edge keep-out margin",
|
|
207
|
+
switch="-pdk_edgemargin 'pdkname <float>'",
|
|
208
|
+
example=[
|
|
209
|
+
"cli: -pdk_edgemargin 'asap7 1'",
|
|
210
|
+
"api: chip.set('pdk', 'asap7', 'edgemargin', 1)"],
|
|
211
|
+
help=trim("""
|
|
212
|
+
Keep-out distance/margin from the edge inwards. The edge
|
|
213
|
+
is prone to chipping and need special treatment that preclude
|
|
214
|
+
placement of designs in this area. The edge value is used to
|
|
215
|
+
calculate effective units per wafer/panel and full factory cost.""")))
|
|
216
|
+
|
|
217
|
+
simtype = 'default'
|
|
218
|
+
schema.insert(
|
|
219
|
+
'devmodel', tool, simtype, stackup,
|
|
220
|
+
Parameter(
|
|
221
|
+
'[file]',
|
|
222
|
+
scope=Scope.GLOBAL,
|
|
223
|
+
shorthelp="PDK: device models",
|
|
224
|
+
switch="-pdk_devmodel 'pdkname tool simtype stackup <file>'",
|
|
225
|
+
example=[
|
|
226
|
+
"cli: -pdk_devmodel 'asap7 xyce spice M10 asap7.sp'",
|
|
227
|
+
"api: chip.set('pdk', 'asap7', 'devmodel', 'xyce', 'spice', 'M10', 'asap7.sp')"],
|
|
228
|
+
help=trim("""
|
|
229
|
+
List of filepaths to PDK device models for different simulation
|
|
230
|
+
purposes and for different tools. Examples of device model types
|
|
231
|
+
include spice, aging, electromigration, radiation. An example of a
|
|
232
|
+
'spice' tool is xyce. Device models are specified on a per metal stack
|
|
233
|
+
basis. Process nodes with a single device model across all stacks will
|
|
234
|
+
have a unique parameter record per metal stack pointing to the same
|
|
235
|
+
device model file. Device types and tools are dynamic entries
|
|
236
|
+
that depend on the tool setup and device technology. Pseudo-standardized
|
|
237
|
+
device types include spice, em (electromigration), and aging.""")))
|
|
238
|
+
|
|
239
|
+
corner = 'default'
|
|
240
|
+
schema.insert(
|
|
241
|
+
'pexmodel', tool, stackup, corner,
|
|
242
|
+
Parameter(
|
|
243
|
+
'[file]',
|
|
244
|
+
scope=Scope.GLOBAL,
|
|
245
|
+
shorthelp="PDK: parasitic TCAD models",
|
|
246
|
+
switch="-pdk_pexmodel 'pdkname tool stackup corner <file>'",
|
|
247
|
+
example=[
|
|
248
|
+
"cli: -pdk_pexmodel 'asap7 fastcap M10 max wire.mod'",
|
|
249
|
+
"api: chip.set('pdk', 'asap7', 'pexmodel', 'fastcap', 'M10', 'max', 'wire.mod')"],
|
|
250
|
+
help=trim("""
|
|
251
|
+
List of filepaths to PDK wire TCAD models used during automated
|
|
252
|
+
synthesis, APR, and signoff verification. Pexmodels are specified on
|
|
253
|
+
a per metal stack basis. Corner values depend on the process being
|
|
254
|
+
used, but typically include nomenclature such as min, max, nominal.
|
|
255
|
+
For exact names, refer to the DRM. Pexmodels are generally not
|
|
256
|
+
standardized and specified on a per tool basis. An example of pexmodel
|
|
257
|
+
type is 'fastcap'.""")))
|
|
258
|
+
|
|
259
|
+
src = 'default'
|
|
260
|
+
dst = 'default'
|
|
261
|
+
schema.insert(
|
|
262
|
+
'layermap', tool, src, dst, stackup,
|
|
263
|
+
Parameter(
|
|
264
|
+
'[file]',
|
|
265
|
+
scope=Scope.GLOBAL,
|
|
266
|
+
shorthelp="PDK: layer map file",
|
|
267
|
+
switch="-pdk_layermap 'pdkname tool src dst stackup <file>'",
|
|
268
|
+
example=[
|
|
269
|
+
"cli: -pdk_layermap 'asap7 klayout db gds M10 asap7.map'",
|
|
270
|
+
"api: chip.set('pdk', 'asap7', 'layermap', 'klayout', 'db', 'gds', 'M10', "
|
|
271
|
+
"'asap7.map')"],
|
|
272
|
+
help=trim("""
|
|
273
|
+
Files describing input/output mapping for streaming layout data from
|
|
274
|
+
one format to another. A foundry PDK will include an official layer
|
|
275
|
+
list for all user entered and generated layers supported in the GDS
|
|
276
|
+
accepted by the foundry for processing, but there is no standardized
|
|
277
|
+
layer definition format that can be read and written by all EDA tools.
|
|
278
|
+
To ensure mask layer matching, key/value type mapping files are needed
|
|
279
|
+
to convert EDA databases to/from GDS and to convert between different
|
|
280
|
+
types of EDA databases. Layer maps are specified on a per metal
|
|
281
|
+
stackup basis. The 'src' and 'dst' can be names of SC supported tools
|
|
282
|
+
or file formats (like 'gds').""")))
|
|
283
|
+
|
|
284
|
+
schema.insert(
|
|
285
|
+
'display', tool, stackup,
|
|
286
|
+
Parameter(
|
|
287
|
+
'[file]',
|
|
288
|
+
scope=Scope.GLOBAL,
|
|
289
|
+
shorthelp="PDK: display file",
|
|
290
|
+
switch="-pdk_display 'pdkname tool stackup <file>'",
|
|
291
|
+
example=[
|
|
292
|
+
"cli: -pdk_display 'asap7 klayout M10 display.lyt'",
|
|
293
|
+
"api: chip.set('pdk', 'asap7', 'display', 'klayout', 'M10', 'display.cfg')"],
|
|
294
|
+
help=trim("""
|
|
295
|
+
Display configuration files describing colors and pattern schemes for
|
|
296
|
+
all layers in the PDK. The display configuration file is entered on a
|
|
297
|
+
stackup and tool basis.""")))
|
|
298
|
+
|
|
299
|
+
# TODO: create firm list of accepted files
|
|
300
|
+
libarch = 'default'
|
|
301
|
+
schema.insert(
|
|
302
|
+
'aprtech', tool, stackup, libarch, filetype,
|
|
303
|
+
Parameter(
|
|
304
|
+
'[file]',
|
|
305
|
+
scope=Scope.GLOBAL,
|
|
306
|
+
shorthelp="PDK: APR technology files",
|
|
307
|
+
switch="-pdk_aprtech 'pdkname tool stackup libarch filetype <file>'",
|
|
308
|
+
example=[
|
|
309
|
+
"cli: -pdk_aprtech 'asap7 openroad M10 12t lef tech.lef'",
|
|
310
|
+
"api: chip.set('pdk', 'asap7', 'aprtech', 'openroad', 'M10', '12t', 'lef', "
|
|
311
|
+
"'tech.lef')"],
|
|
312
|
+
help=trim("""
|
|
313
|
+
Technology file containing setup information needed to enable DRC clean APR
|
|
314
|
+
for the specified stackup, libarch, and format. The 'libarch' specifies the
|
|
315
|
+
library architecture (e.g. library height). For example a PDK with support
|
|
316
|
+
for 9 and 12 track libraries might have 'libarchs' called 9t and 12t.
|
|
317
|
+
The standard filetype for specifying place and route design rules for a
|
|
318
|
+
process node is through a 'lef' format technology file. The
|
|
319
|
+
'filetype' used in the aprtech is used by the tool specific APR TCL scripts
|
|
320
|
+
to set up the technology parameters. Some tools may require additional
|
|
321
|
+
files beyond the tech.lef file. Examples of extra file types include
|
|
322
|
+
antenna, tracks, tapcell, viarules, and em.""")))
|
|
323
|
+
|
|
324
|
+
name = 'default'
|
|
325
|
+
for item in ('lvs', 'drc', 'erc', 'fill'):
|
|
326
|
+
schema.insert(
|
|
327
|
+
item, 'runset', tool, stackup, name,
|
|
328
|
+
Parameter(
|
|
329
|
+
'[file]',
|
|
330
|
+
scope=Scope.GLOBAL,
|
|
331
|
+
shorthelp=f"PDK: {item.upper()} runset files",
|
|
332
|
+
switch=f"-pdk_{item}_runset 'pdkname tool stackup name <file>'",
|
|
333
|
+
example=[
|
|
334
|
+
f"cli: -pdk_{item}_runset 'asap7 magic M10 basic $PDK/{item}.rs'",
|
|
335
|
+
f"api: chip.set('pdk', 'asap7', '{item}', 'runset', 'magic', 'M10', 'basic', "
|
|
336
|
+
f"'$PDK/{item}.rs')"],
|
|
337
|
+
help=trim(f"""Runset files for {item.upper()} task.""")))
|
|
338
|
+
|
|
339
|
+
schema.insert(
|
|
340
|
+
item, 'waiver', tool, stackup, name,
|
|
341
|
+
Parameter(
|
|
342
|
+
'[file]',
|
|
343
|
+
scope=Scope.GLOBAL,
|
|
344
|
+
shorthelp=f"PDK: {item.upper()} waiver files",
|
|
345
|
+
switch=f"-pdk_{item}_waiver 'pdkname tool stackup name <file>'",
|
|
346
|
+
example=[
|
|
347
|
+
f"cli: -pdk_{item}_waiver 'asap7 magic M10 basic $PDK/{item}.txt'",
|
|
348
|
+
f"api: chip.set('pdk', 'asap7', '{item}', 'waiver', 'magic', 'M10', 'basic', "
|
|
349
|
+
f"'$PDK/{item}.txt')"],
|
|
350
|
+
help=trim(f"""Waiver files for {item.upper()} task.""")))
|
|
351
|
+
|
|
352
|
+
###############
|
|
353
|
+
# EDA vars
|
|
354
|
+
###############
|
|
355
|
+
|
|
356
|
+
key = 'default'
|
|
357
|
+
schema.insert(
|
|
358
|
+
'file', tool, key, stackup,
|
|
359
|
+
Parameter(
|
|
360
|
+
'[file]',
|
|
361
|
+
scope=Scope.GLOBAL,
|
|
362
|
+
shorthelp="PDK: custom file",
|
|
363
|
+
switch="-pdk_file 'pdkname tool key stackup <file>'",
|
|
364
|
+
example=[
|
|
365
|
+
"cli: -pdk_file 'asap7 xyce spice M10 asap7.sp'",
|
|
366
|
+
"api: chip.set('pdk', 'asap7', 'file', 'xyce', 'spice', 'M10', 'asap7.sp')"],
|
|
367
|
+
help=trim("""
|
|
368
|
+
List of named files specified on a per tool and per stackup basis.
|
|
369
|
+
The parameter should only be used for specifying files that are
|
|
370
|
+
not directly supported by the SiliconCompiler PDK schema.""")))
|
|
371
|
+
|
|
372
|
+
schema.insert(
|
|
373
|
+
'dir', tool, key, stackup,
|
|
374
|
+
Parameter(
|
|
375
|
+
'[dir]',
|
|
376
|
+
scope=Scope.GLOBAL,
|
|
377
|
+
shorthelp="PDK: custom directory",
|
|
378
|
+
switch="-pdk_dir 'pdkname tool key stackup <dir>'",
|
|
379
|
+
example=[
|
|
380
|
+
"cli: -pdk_dir 'asap7 xyce rfmodel M10 rftechdir'",
|
|
381
|
+
"api: chip.set('pdk', 'asap7', 'dir', 'xyce', 'rfmodel', 'M10', "
|
|
382
|
+
"'rftechdir')"],
|
|
383
|
+
help=trim("""
|
|
384
|
+
List of named directories specified on a per tool and per stackup basis.
|
|
385
|
+
The parameter should only be used for specifying files that are
|
|
386
|
+
not directly supported by the SiliconCompiler PDK schema.""")))
|
|
387
|
+
|
|
388
|
+
schema.insert(
|
|
389
|
+
'var', tool, key, stackup,
|
|
390
|
+
Parameter(
|
|
391
|
+
'[str]',
|
|
392
|
+
scope=Scope.GLOBAL,
|
|
393
|
+
shorthelp="PDK: custom, variable",
|
|
394
|
+
switch="-pdk_var 'pdkname tool stackup key <str>'",
|
|
395
|
+
example=[
|
|
396
|
+
"cli: -pdk_var 'asap7 xyce modeltype M10 bsim4'",
|
|
397
|
+
"api: chip.set('pdk', 'asap7', 'var', 'xyce', 'modeltype', 'M10', 'bsim4')"],
|
|
398
|
+
help=trim("""
|
|
399
|
+
List of key/value strings specified on a per tool and per stackup basis.
|
|
400
|
+
The parameter should only be used for specifying variables that are
|
|
401
|
+
not directly supported by the SiliconCompiler PDK schema.""")))
|
|
402
|
+
|
|
403
|
+
###############
|
|
404
|
+
# Docs
|
|
405
|
+
###############
|
|
406
|
+
schema.insert(
|
|
407
|
+
'doc', 'default',
|
|
408
|
+
Parameter(
|
|
409
|
+
'[file]',
|
|
410
|
+
scope=Scope.GLOBAL,
|
|
411
|
+
shorthelp="PDK: documentation",
|
|
412
|
+
switch="-pdk_doc 'pdkname doctype <file>'",
|
|
413
|
+
example=["cli: -pdk_doc 'asap7 reference reference.pdf'",
|
|
414
|
+
"api: chip.set('pdk', 'asap7', 'doc', 'reference', 'reference.pdf')"],
|
|
415
|
+
help=trim("""Filepath to pdk documentation.""")))
|