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
|
@@ -465,16 +465,12 @@ def record_metric(chip, step, index, metric, value, source, source_unit=None):
|
|
|
465
465
|
Records the metric cell area under 'floorplan0' and notes the source as
|
|
466
466
|
'reports/metrics.json'
|
|
467
467
|
'''
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
if metric_unit:
|
|
475
|
-
value = units.convert(value, from_unit=source_unit, to_unit=metric_unit)
|
|
476
|
-
|
|
477
|
-
chip.set('metric', metric, value, step=step, index=index)
|
|
468
|
+
chip.get("metric", field="schema").record(
|
|
469
|
+
step, index,
|
|
470
|
+
metric,
|
|
471
|
+
value,
|
|
472
|
+
unit=source_unit
|
|
473
|
+
)
|
|
478
474
|
|
|
479
475
|
if source:
|
|
480
476
|
flow = chip.get('option', 'flow')
|
|
@@ -257,10 +257,10 @@ class CellArea:
|
|
|
257
257
|
def __init__(self):
|
|
258
258
|
self.__areas = {}
|
|
259
259
|
|
|
260
|
-
def
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
260
|
+
def add_cell(self, name=None, module=None,
|
|
261
|
+
cellarea=None, cellcount=None,
|
|
262
|
+
macroarea=None, macrocount=None,
|
|
263
|
+
stdcellarea=None, stdcellcount=None):
|
|
264
264
|
if not name and not module:
|
|
265
265
|
return
|
|
266
266
|
|
|
@@ -294,6 +294,6 @@ class CellArea:
|
|
|
294
294
|
def size(self):
|
|
295
295
|
return len(self.__areas)
|
|
296
296
|
|
|
297
|
-
def
|
|
297
|
+
def write_report(self, path):
|
|
298
298
|
with open(path, 'w') as f:
|
|
299
299
|
json.dump(self.__areas, f, indent=4)
|
|
@@ -70,24 +70,24 @@ def runtime_options(chip):
|
|
|
70
70
|
opts = get_frontend_options(chip, ['idir', 'ydir', 'define'])
|
|
71
71
|
|
|
72
72
|
cmdlist.append('-verilog')
|
|
73
|
-
cmdlist.
|
|
74
|
-
cmdlist.
|
|
75
|
-
cmdlist.
|
|
73
|
+
cmdlist.extend(['-vdir', VLOG_DIR])
|
|
74
|
+
cmdlist.extend(['-bdir', BSC_DIR])
|
|
75
|
+
cmdlist.extend(['-info-dir', 'reports'])
|
|
76
76
|
cmdlist.append('-u')
|
|
77
77
|
cmdlist.append('-v')
|
|
78
78
|
|
|
79
79
|
cmdlist.append('-show-module-use')
|
|
80
80
|
cmdlist.append('-sched-dot')
|
|
81
81
|
|
|
82
|
-
cmdlist.
|
|
82
|
+
cmdlist.extend(['-g', chip.top(step, index)])
|
|
83
83
|
|
|
84
84
|
bsc_path = ':'.join(opts['ydir'] + ['%/Libraries'])
|
|
85
|
-
cmdlist.
|
|
85
|
+
cmdlist.extend(['-p', bsc_path])
|
|
86
86
|
|
|
87
87
|
for value in opts['idir']:
|
|
88
|
-
cmdlist.
|
|
88
|
+
cmdlist.extend(['-I', value])
|
|
89
89
|
for value in opts['define']:
|
|
90
|
-
cmdlist.
|
|
90
|
+
cmdlist.extend(['-D', value])
|
|
91
91
|
|
|
92
92
|
sources = get_input_files(chip, 'input', 'hll', 'bsv', add_library_files=False)
|
|
93
93
|
if len(sources) != 1:
|
|
@@ -125,7 +125,8 @@ def post_process(chip):
|
|
|
125
125
|
if os.path.exists(mod_path):
|
|
126
126
|
extra_modules.add(mod_path)
|
|
127
127
|
else:
|
|
128
|
-
chip.logger.
|
|
128
|
+
chip.logger.warning(f"Unable to find module {module} source "
|
|
129
|
+
f"files at: {BSC_LIB}")
|
|
129
130
|
|
|
130
131
|
# bsc outputs each compiled module to its own Verilog file, so we
|
|
131
132
|
# concatenate them all to create a pickled output we can pass along.
|
|
@@ -3,7 +3,7 @@ from siliconcompiler import NodeStatus, SiliconCompilerError
|
|
|
3
3
|
from siliconcompiler import utils
|
|
4
4
|
import shutil
|
|
5
5
|
from siliconcompiler.tools._common import get_tool_task
|
|
6
|
-
from siliconcompiler.flowgraph import
|
|
6
|
+
from siliconcompiler.flowgraph import RuntimeFlowgraph
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
###########################################################################
|
|
@@ -152,4 +152,11 @@ def _select_inputs(chip, step, index):
|
|
|
152
152
|
chip.logger.info(f"Running builtin task '{task}'")
|
|
153
153
|
|
|
154
154
|
flow = chip.get('option', 'flow')
|
|
155
|
-
|
|
155
|
+
|
|
156
|
+
flow_schema = chip.schema.get("flowgraph", flow, field="schema")
|
|
157
|
+
runtime = RuntimeFlowgraph(
|
|
158
|
+
flow_schema,
|
|
159
|
+
from_steps=set([step for step, _ in flow_schema.get_entry_nodes()]),
|
|
160
|
+
prune_nodes=chip.get('option', 'prune'))
|
|
161
|
+
|
|
162
|
+
return runtime.get_node_inputs(step, index, record=chip.schema.get("record", field="schema"))
|
|
@@ -3,7 +3,6 @@ import os
|
|
|
3
3
|
from siliconcompiler import sc_open, SiliconCompilerError
|
|
4
4
|
from siliconcompiler import utils
|
|
5
5
|
from siliconcompiler.tools._common import input_provides, input_file_node_name, get_tool_task
|
|
6
|
-
from siliconcompiler import flowgraph
|
|
7
6
|
from siliconcompiler import scheduler
|
|
8
7
|
|
|
9
8
|
|
|
@@ -12,7 +11,7 @@ def make_docs(chip):
|
|
|
12
11
|
_make_docs(chip)
|
|
13
12
|
chip.set('option', 'flow', 'asicflow')
|
|
14
13
|
|
|
15
|
-
for step, index in
|
|
14
|
+
for step, index in chip.schema.get("flowgraph", "asicflow", field="schema").get_entry_nodes():
|
|
16
15
|
scheduler._setup_node(chip, step, index)
|
|
17
16
|
|
|
18
17
|
chip.set('arg', 'step', 'import.combine')
|
|
@@ -63,7 +62,12 @@ def _gather_outputs(chip, step, index):
|
|
|
63
62
|
flow = chip.get('option', 'flow')
|
|
64
63
|
|
|
65
64
|
in_nodes = chip.get('flowgraph', flow, step, index, 'input')
|
|
66
|
-
in_task_outputs = [
|
|
65
|
+
in_task_outputs = []
|
|
66
|
+
for in_step, in_index in in_nodes:
|
|
67
|
+
in_tool, _ = get_tool_task(chip, in_step, in_index, flow=flow)
|
|
68
|
+
task_class = chip.get("tool", in_tool, field="schema")
|
|
69
|
+
task_class.set_runtime(chip, step=in_step, index=in_index)
|
|
70
|
+
in_task_outputs.append(task_class.get_output_files())
|
|
67
71
|
|
|
68
72
|
if len(in_task_outputs) > 0:
|
|
69
73
|
return in_task_outputs[0].union(*in_task_outputs[1:])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from siliconcompiler.tools.builtin import _common
|
|
2
|
-
from siliconcompiler import flowgraph
|
|
3
2
|
from siliconcompiler.tools.builtin.builtin import set_io_files
|
|
3
|
+
from siliconcompiler.tools._common import get_tool_task
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def setup(chip):
|
|
@@ -41,7 +41,12 @@ def _gather_outputs(chip, step, index):
|
|
|
41
41
|
flow = chip.get('option', 'flow')
|
|
42
42
|
|
|
43
43
|
in_nodes = chip.get('flowgraph', flow, step, index, 'input')
|
|
44
|
-
in_task_outputs = [
|
|
44
|
+
in_task_outputs = []
|
|
45
|
+
for in_step, in_index in in_nodes:
|
|
46
|
+
in_tool, _ = get_tool_task(chip, in_step, in_index, flow=flow)
|
|
47
|
+
task_class = chip.get("tool", in_tool, field="schema")
|
|
48
|
+
task_class.set_runtime(chip, step=in_step, index=in_index)
|
|
49
|
+
in_task_outputs.append(task_class.get_output_files())
|
|
45
50
|
|
|
46
51
|
if len(in_task_outputs) > 0:
|
|
47
52
|
return in_task_outputs[0].intersection(*in_task_outputs[1:])
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from siliconcompiler.tools.builtin import _common
|
|
2
2
|
import re
|
|
3
3
|
from siliconcompiler.tools.builtin.builtin import set_io_files
|
|
4
|
-
from siliconcompiler import
|
|
4
|
+
from siliconcompiler import SiliconCompilerError
|
|
5
|
+
from siliconcompiler.tools._common import get_tool_task
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
def setup(chip):
|
|
@@ -54,7 +55,12 @@ def _gather_outputs(chip, step, index):
|
|
|
54
55
|
flow = chip.get('option', 'flow')
|
|
55
56
|
|
|
56
57
|
in_nodes = chip.get('flowgraph', flow, step, index, 'input')
|
|
57
|
-
in_task_outputs = [
|
|
58
|
+
in_task_outputs = []
|
|
59
|
+
for in_step, in_index in in_nodes:
|
|
60
|
+
in_tool, _ = get_tool_task(chip, in_step, in_index, flow=flow)
|
|
61
|
+
task_class = chip.get("tool", in_tool, field="schema")
|
|
62
|
+
task_class.set_runtime(chip, step=in_step, index=in_index)
|
|
63
|
+
in_task_outputs.append(task_class.get_output_files())
|
|
58
64
|
|
|
59
65
|
if len(in_task_outputs) > 0:
|
|
60
66
|
return in_task_outputs[0].intersection(*in_task_outputs[1:])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from siliconcompiler.tools.builtin import _common
|
|
2
2
|
from siliconcompiler.tools.builtin.builtin import set_io_files
|
|
3
|
-
from siliconcompiler import
|
|
3
|
+
from siliconcompiler.tools._common import get_tool_task
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def setup(chip):
|
|
@@ -22,7 +22,12 @@ def _gather_outputs(chip, step, index):
|
|
|
22
22
|
flow = chip.get('option', 'flow')
|
|
23
23
|
|
|
24
24
|
in_nodes = chip.get('flowgraph', flow, step, index, 'input')
|
|
25
|
-
in_task_outputs = [
|
|
25
|
+
in_task_outputs = []
|
|
26
|
+
for in_step, in_index in in_nodes:
|
|
27
|
+
in_tool, _ = get_tool_task(chip, in_step, in_index, flow=flow)
|
|
28
|
+
task_class = chip.get("tool", in_tool, field="schema")
|
|
29
|
+
task_class.set_runtime(chip, step=in_step, index=in_index)
|
|
30
|
+
in_task_outputs.append(task_class.get_output_files())
|
|
26
31
|
|
|
27
32
|
if len(in_task_outputs) > 0:
|
|
28
33
|
return in_task_outputs[0].union(*in_task_outputs[1:])
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from siliconcompiler.tools.builtin import _common
|
|
2
|
-
from siliconcompiler.schema import
|
|
2
|
+
from siliconcompiler.schema.parametertype import NodeType
|
|
3
3
|
from siliconcompiler.scheduler import _haltstep
|
|
4
4
|
from siliconcompiler.tools.builtin.builtin import set_io_files
|
|
5
|
-
from siliconcompiler import utils,
|
|
5
|
+
from siliconcompiler import utils, SiliconCompilerError
|
|
6
|
+
from siliconcompiler.tools._common import get_tool_task
|
|
6
7
|
|
|
7
8
|
import re
|
|
8
9
|
|
|
@@ -52,8 +53,8 @@ def _select_inputs(chip, step, index):
|
|
|
52
53
|
raise SiliconCompilerError(
|
|
53
54
|
f"Missing metric for {metric} in {inputs[0]}{inputs[1]}", chip=chip)
|
|
54
55
|
|
|
55
|
-
metric_type = chip.get('metric', metric, field=
|
|
56
|
-
goal =
|
|
56
|
+
metric_type = chip.get('metric', metric, field=None)
|
|
57
|
+
goal = NodeType.normalize(goal, metric_type.get(field='type'))
|
|
57
58
|
if not utils.safecompare(chip, value, op, goal):
|
|
58
59
|
chip.error(f"{step}{index} fails '{metric}' metric: {value}{op}{goal}")
|
|
59
60
|
|
|
@@ -67,7 +68,12 @@ def _gather_outputs(chip, step, index):
|
|
|
67
68
|
flow = chip.get('option', 'flow')
|
|
68
69
|
|
|
69
70
|
in_nodes = chip.get('flowgraph', flow, step, index, 'input')
|
|
70
|
-
in_task_outputs = [
|
|
71
|
+
in_task_outputs = []
|
|
72
|
+
for in_step, in_index in in_nodes:
|
|
73
|
+
in_tool, _ = get_tool_task(chip, in_step, in_index, flow=flow)
|
|
74
|
+
task_class = chip.get("tool", in_tool, field="schema")
|
|
75
|
+
task_class.set_runtime(chip, step=in_step, index=in_index)
|
|
76
|
+
in_task_outputs.append(task_class.get_output_files())
|
|
71
77
|
|
|
72
78
|
if len(in_task_outputs) > 0:
|
|
73
79
|
return in_task_outputs[0].intersection(*in_task_outputs[1:])
|
|
@@ -103,7 +103,7 @@ def runtime_options(chip):
|
|
|
103
103
|
|
|
104
104
|
design = chip.top()
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
run_main = ["runMain"]
|
|
107
107
|
if chip.valid('input', 'config', 'chisel') and \
|
|
108
108
|
chip.get('input', 'config', 'chisel', step=step, index=index):
|
|
109
109
|
app = design
|
|
@@ -112,23 +112,23 @@ def runtime_options(chip):
|
|
|
112
112
|
app = chip.get('tool', tool, 'task', task, 'var', 'application',
|
|
113
113
|
step=step, index=index)[0]
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
run_main.append(f"{app}")
|
|
116
116
|
|
|
117
117
|
if chip.valid('tool', tool, 'task', task, 'var', 'argument') and \
|
|
118
118
|
chip.get('tool', tool, 'task', task, 'var', 'argument', step=step, index=index):
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
run_main.extend(chip.get('tool', tool, 'task', task, 'var', 'argument',
|
|
120
|
+
step=step, index=index))
|
|
121
|
+
run_main.append("--")
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
run_main.extend(["--target-dir", "chisel-output"])
|
|
124
124
|
else:
|
|
125
125
|
# Use built in driver
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
run_main.append("SCDriver")
|
|
127
|
+
run_main.extend(["--module", chip.top(step=step, index=index)])
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
run_main.extend(["--output-file", f"../outputs/{design}.v"])
|
|
130
130
|
|
|
131
|
-
return [
|
|
131
|
+
return [" ".join(run_main)]
|
|
132
132
|
|
|
133
133
|
|
|
134
134
|
def post_process(chip):
|
|
@@ -41,9 +41,9 @@ def runtime_options(chip):
|
|
|
41
41
|
blif = f"inputs/{design}.blif"
|
|
42
42
|
options.append(blif)
|
|
43
43
|
|
|
44
|
-
options.
|
|
45
|
-
options.
|
|
46
|
-
options.
|
|
44
|
+
options.extend(['--net_file', f'inputs/{design}.net'])
|
|
45
|
+
options.extend(['--place_file', f'inputs/{design}.place'])
|
|
46
|
+
options.extend(['--route_file', f'inputs/{design}.route'])
|
|
47
47
|
|
|
48
48
|
return options
|
|
49
49
|
|
|
@@ -25,7 +25,7 @@ def setup(chip):
|
|
|
25
25
|
|
|
26
26
|
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
27
27
|
step=step, index=index, clobber=clobber)
|
|
28
|
-
chip.set('tool', tool, 'task', task, 'option',
|
|
28
|
+
chip.set('tool', tool, 'task', task, 'option', [],
|
|
29
29
|
step=step, index=index, clobber=clobber)
|
|
30
30
|
chip.set('tool', tool, 'task', task, 'stdout', 'destination', 'output',
|
|
31
31
|
step=step, index=index)
|
|
@@ -68,19 +68,19 @@ def runtime_options(chip):
|
|
|
68
68
|
|
|
69
69
|
# source files
|
|
70
70
|
for value in opts['ydir']:
|
|
71
|
-
cmdlist.
|
|
71
|
+
cmdlist.extend(['-y', value])
|
|
72
72
|
for value in opts['vlib']:
|
|
73
|
-
cmdlist.
|
|
73
|
+
cmdlist.extend(['-v', value])
|
|
74
74
|
for value in opts['idir']:
|
|
75
75
|
cmdlist.append('-I' + value)
|
|
76
76
|
for value in opts['define']:
|
|
77
77
|
cmdlist.append('-D' + value)
|
|
78
78
|
|
|
79
79
|
# add siliconcompiler specific defines
|
|
80
|
-
cmdlist.append(f"-DSILICONCOMPILER_TRACE_FILE
|
|
80
|
+
cmdlist.append(f"-DSILICONCOMPILER_TRACE_FILE=\"reports/{design}.vcd\"")
|
|
81
81
|
|
|
82
82
|
for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
|
|
83
|
-
cmdlist.
|
|
83
|
+
cmdlist.extend(['-f', value])
|
|
84
84
|
for value in get_input_files(chip, 'input', 'rtl', 'netlist'):
|
|
85
85
|
cmdlist.append(value)
|
|
86
86
|
for value in get_input_files(chip, 'input', 'rtl', 'verilog'):
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import get_tool_task
|
|
2
|
+
from siliconcompiler.tools.icepack.icepack import runtime_options as tool_runtime_options
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
def setup(chip):
|
|
@@ -15,6 +16,10 @@ def setup(chip):
|
|
|
15
16
|
|
|
16
17
|
chip.set('tool', tool, 'exe', tool)
|
|
17
18
|
|
|
18
|
-
chip.set('tool', tool, 'task', task, 'option',
|
|
19
|
+
chip.set('tool', tool, 'task', task, 'option', [], step=step, index=index, clobber=clobber)
|
|
19
20
|
chip.set('tool', tool, 'task', task, 'input', f'{design}.asc', step=step, index=index)
|
|
20
21
|
chip.set('tool', tool, 'task', task, 'output', f'{design}.bit', step=step, index=index)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def runtime_options(chip):
|
|
25
|
+
return tool_runtime_options(chip)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import input_provides, input_file_node_name, get_tool_task
|
|
2
2
|
|
|
3
3
|
from siliconcompiler.tools.klayout.klayout import setup as setup_tool
|
|
4
|
+
from siliconcompiler.tools.klayout.klayout import runtime_options as tool_runtime_options
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
def make_docs(chip):
|
|
@@ -58,3 +59,7 @@ def setup(chip):
|
|
|
58
59
|
|
|
59
60
|
chip.set('tool', tool, 'task', task, 'output', f'{design}.json',
|
|
60
61
|
step=step, index=index)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def runtime_options(chip):
|
|
65
|
+
return tool_runtime_options(chip)
|
|
@@ -6,7 +6,7 @@ from siliconcompiler.tools._common import input_provides, has_input_files, \
|
|
|
6
6
|
from siliconcompiler.tools._common.asic import set_tool_task_var, get_tool_task_var
|
|
7
7
|
|
|
8
8
|
from siliconcompiler.tools.klayout.klayout import setup as setup_tool
|
|
9
|
-
|
|
9
|
+
from xml.etree import ElementTree
|
|
10
10
|
from siliconcompiler import utils
|
|
11
11
|
|
|
12
12
|
|
|
@@ -144,7 +144,7 @@ def post_process(chip):
|
|
|
144
144
|
drc_report = None
|
|
145
145
|
if os.path.isfile(drc_db):
|
|
146
146
|
with open(drc_db, "r") as f:
|
|
147
|
-
drc_report =
|
|
147
|
+
drc_report = ElementTree.fromstring(f.read())
|
|
148
148
|
if drc_report is None:
|
|
149
149
|
drc_db = []
|
|
150
150
|
|
|
@@ -17,18 +17,18 @@ def show(schema, tech, input_path, output_path, screenshot=False, report=None):
|
|
|
17
17
|
sc_hide_layers = []
|
|
18
18
|
|
|
19
19
|
# Load KLayout technology file
|
|
20
|
-
|
|
20
|
+
layout_options = tech.load_layout_options
|
|
21
21
|
|
|
22
22
|
# These may be disabled in our KLayout tech file for reasons relating to GDS
|
|
23
23
|
# export, but for the purposes of viewing we'll hardcode them to True.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
layout_options.lefdef_config.produce_blockages = True
|
|
25
|
+
layout_options.lefdef_config.produce_cell_outlines = True
|
|
26
|
+
layout_options.lefdef_config.produce_obstructions = True
|
|
27
27
|
|
|
28
28
|
# Always use LEF geometry even when LEF file contains FOREIGN statement.
|
|
29
|
-
|
|
29
|
+
layout_options.lefdef_config.macro_resolution_mode = 1
|
|
30
30
|
|
|
31
|
-
tech.load_layout_options =
|
|
31
|
+
tech.load_layout_options = layout_options
|
|
32
32
|
|
|
33
33
|
app = pya.Application.instance()
|
|
34
34
|
main_window = pya.MainWindow.instance()
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import pya
|
|
2
|
-
import importlib.util as importlib_util
|
|
3
2
|
import json
|
|
4
3
|
import os
|
|
5
4
|
import shutil
|
|
@@ -85,12 +84,12 @@ def technology(design, schema):
|
|
|
85
84
|
lefs.extend(schema.get('library', lib, 'output', sc_stackup, 'lef',
|
|
86
85
|
step=sc_step, index=sc_index))
|
|
87
86
|
|
|
88
|
-
|
|
87
|
+
layout_options = tech.load_layout_options
|
|
89
88
|
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
layout_options.lefdef_config.macro_resolution_mode = 1
|
|
90
|
+
layout_options.lefdef_config.via_cellname_prefix = "VIA_"
|
|
92
91
|
pathed_files = set()
|
|
93
|
-
for lef_file in
|
|
92
|
+
for lef_file in layout_options.lefdef_config.lef_files:
|
|
94
93
|
if foundry_lef and not os.path.isabs(lef_file):
|
|
95
94
|
lef_file = os.path.join(os.path.dirname(foundry_lef), lef_file)
|
|
96
95
|
lef_file = os.path.abspath(lef_file)
|
|
@@ -100,13 +99,13 @@ def technology(design, schema):
|
|
|
100
99
|
for lef in lefs:
|
|
101
100
|
pathed_files.add(os.path.abspath(lef))
|
|
102
101
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
layout_options.lefdef_config.lef_files = list(pathed_files)
|
|
103
|
+
layout_options.lefdef_config.read_lef_with_def = False
|
|
104
|
+
layout_options.lefdef_config.dbu = tech.dbu
|
|
106
105
|
|
|
107
|
-
|
|
106
|
+
layout_options.lefdef_config.produce_fills = True
|
|
108
107
|
|
|
109
|
-
for lef_file in
|
|
108
|
+
for lef_file in layout_options.lefdef_config.lef_files:
|
|
110
109
|
print(f"[INFO] LEF file: {lef_file}")
|
|
111
110
|
|
|
112
111
|
# Set layer properties
|
|
@@ -128,7 +127,7 @@ def technology(design, schema):
|
|
|
128
127
|
print(f"[INFO] Layer properties: {layer_properties}")
|
|
129
128
|
|
|
130
129
|
# Set layer map
|
|
131
|
-
map_file =
|
|
130
|
+
map_file = layout_options.lefdef_config.map_file
|
|
132
131
|
if map_file:
|
|
133
132
|
map_file = map_file[0]
|
|
134
133
|
if not os.path.isabs(map_file):
|
|
@@ -142,10 +141,10 @@ def technology(design, schema):
|
|
|
142
141
|
break
|
|
143
142
|
|
|
144
143
|
if map_file and os.path.exists(map_file):
|
|
145
|
-
|
|
144
|
+
layout_options.lefdef_config.map_file = map_file
|
|
146
145
|
print(f"[INFO] Layer map: {map_file}")
|
|
147
146
|
|
|
148
|
-
tech.load_layout_options =
|
|
147
|
+
tech.load_layout_options = layout_options
|
|
149
148
|
|
|
150
149
|
return tech
|
|
151
150
|
|
|
@@ -172,15 +171,9 @@ def get_write_options(filename, timestamps):
|
|
|
172
171
|
|
|
173
172
|
|
|
174
173
|
def get_schema(manifest):
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
spec = importlib_util.spec_from_file_location(module_name, schema_base)
|
|
179
|
-
module = importlib_util.module_from_spec(spec)
|
|
180
|
-
sys.modules[module_name] = module
|
|
181
|
-
spec.loader.exec_module(module)
|
|
182
|
-
# Return schema
|
|
183
|
-
return module.Schema(manifest=manifest)
|
|
174
|
+
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
|
|
175
|
+
from schema.safeschema import SafeSchema
|
|
176
|
+
return SafeSchema.from_manifest(filepath=manifest)
|
|
184
177
|
|
|
185
178
|
|
|
186
179
|
def generate_metrics():
|
|
@@ -34,7 +34,7 @@ import argparse
|
|
|
34
34
|
from siliconcompiler import sc_open
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
def
|
|
37
|
+
def count_lvs_failures(filename):
|
|
38
38
|
with sc_open(filename) as cfile:
|
|
39
39
|
lvsdata = json.load(cfile)
|
|
40
40
|
|
|
@@ -114,7 +114,7 @@ if __name__ == '__main__':
|
|
|
114
114
|
parser = argparse.ArgumentParser(description='Parses netgen lvs')
|
|
115
115
|
parser.add_argument('--file', '-f', required=True)
|
|
116
116
|
args = parser.parse_args()
|
|
117
|
-
failures =
|
|
117
|
+
failures = count_lvs_failures(args.file)
|
|
118
118
|
total = failures[0]
|
|
119
119
|
if total > 0:
|
|
120
120
|
failed = True
|
|
@@ -79,7 +79,7 @@ def post_process(chip):
|
|
|
79
79
|
chip.logger.warning('No LVS report generated. Netgen may have encountered errors.')
|
|
80
80
|
return
|
|
81
81
|
|
|
82
|
-
lvs_failures = count_lvs.
|
|
82
|
+
lvs_failures = count_lvs.count_lvs_failures(lvs_report)
|
|
83
83
|
|
|
84
84
|
# We don't count top-level pin mismatches as errors b/c we seem to get
|
|
85
85
|
# false positives for disconnected pins. Report them as warnings
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from siliconcompiler.tools._common import get_tool_task
|
|
2
|
+
from siliconcompiler.tools.nextpnr.nextpnr import runtime_options as tool_runtime_options
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
def setup(chip):
|
|
@@ -18,7 +19,11 @@ def setup(chip):
|
|
|
18
19
|
chip.set('tool', tool, 'vswitch', '--version')
|
|
19
20
|
chip.set('tool', tool, 'version', '>=0.2', clobber=clobber)
|
|
20
21
|
|
|
21
|
-
chip.set('tool', tool, 'task', task, 'option',
|
|
22
|
+
chip.set('tool', tool, 'task', task, 'option', [], step=step, index=index, clobber=clobber)
|
|
22
23
|
chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.netlist.json',
|
|
23
24
|
step=step, index=index)
|
|
24
25
|
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.asc', step=step, index=index)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def runtime_options(chip):
|
|
29
|
+
return tool_runtime_options(chip)
|
|
@@ -33,14 +33,14 @@ def runtime_options(chip):
|
|
|
33
33
|
|
|
34
34
|
options = []
|
|
35
35
|
|
|
36
|
-
options.
|
|
37
|
-
options.
|
|
36
|
+
options.extend(['--json', 'inputs/' + topmodule + '.netlist.json'])
|
|
37
|
+
options.extend(['--asc', 'outputs/' + topmodule + '.asc'])
|
|
38
38
|
|
|
39
39
|
if partname == 'ice40up5k-sg48':
|
|
40
|
-
options.
|
|
40
|
+
options.extend(['--up5k', '--package', 'sg48'])
|
|
41
41
|
|
|
42
42
|
for constraint_file in chip.find_files('input', 'constraint', 'pcf', step=step, index=index):
|
|
43
|
-
options.
|
|
43
|
+
options.extend(['--pcf', constraint_file])
|
|
44
44
|
|
|
45
45
|
return options
|
|
46
46
|
|
|
@@ -402,7 +402,7 @@ def _generate_cell_area_report(design, ord_metrics):
|
|
|
402
402
|
if stdcell_info_area:
|
|
403
403
|
stdcellarea = sum(stdcell_info_area)
|
|
404
404
|
|
|
405
|
-
cellarea_report.
|
|
405
|
+
cellarea_report.add_cell(
|
|
406
406
|
name=cell_name,
|
|
407
407
|
module=cell_type,
|
|
408
408
|
cellarea=cellarea,
|
|
@@ -420,7 +420,7 @@ def _generate_cell_area_report(design, ord_metrics):
|
|
|
420
420
|
process_cell(module)
|
|
421
421
|
|
|
422
422
|
if cellarea_report.size() > 0:
|
|
423
|
-
cellarea_report.
|
|
423
|
+
cellarea_report.write_report("reports/hierarchical_cell_area.json")
|
|
424
424
|
|
|
425
425
|
|
|
426
426
|
def define_tapcell_params(chip):
|
|
@@ -801,6 +801,14 @@ def define_sta_params(chip):
|
|
|
801
801
|
set_tool_task_var(chip, param_key='sta_top_n_paths',
|
|
802
802
|
default_value='10',
|
|
803
803
|
schelp='number of paths to report timing for')
|
|
804
|
+
set_tool_task_var(chip, param_key='sta_define_path_groups',
|
|
805
|
+
default_value=True,
|
|
806
|
+
skip=['pdk', 'lib'],
|
|
807
|
+
schelp='true/false, if true will generate path groups for timing reporting')
|
|
808
|
+
set_tool_task_var(chip, param_key='sta_unique_path_groups_per_clock',
|
|
809
|
+
default_value=False,
|
|
810
|
+
skip=['pdk', 'lib'],
|
|
811
|
+
schelp='true/false, if true will generate separate path groups per clock')
|
|
804
812
|
|
|
805
813
|
chip.set('tool', tool, 'task', task, 'var', 'power_corner', get_power_corner(chip),
|
|
806
814
|
step=step, index=index, clobber=False)
|
|
@@ -1044,6 +1052,8 @@ def set_pnr_inputs(chip):
|
|
|
1044
1052
|
|
|
1045
1053
|
design = chip.top()
|
|
1046
1054
|
|
|
1055
|
+
# clear
|
|
1056
|
+
chip.set('tool', tool, 'task', task, 'input', [], step=step, index=index)
|
|
1047
1057
|
if f'{design}.sdc' in input_provides(chip, step, index):
|
|
1048
1058
|
chip.add('tool', tool, 'task', task, 'input', design + '.sdc',
|
|
1049
1059
|
step=step, index=index)
|
|
@@ -1071,6 +1081,9 @@ def set_pnr_outputs(chip):
|
|
|
1071
1081
|
|
|
1072
1082
|
design = chip.top()
|
|
1073
1083
|
|
|
1084
|
+
# clear
|
|
1085
|
+
chip.set('tool', tool, 'task', task, 'output', [], step=step, index=index)
|
|
1086
|
+
|
|
1074
1087
|
chip.add('tool', tool, 'task', task, 'output', design + '.sdc', step=step, index=index)
|
|
1075
1088
|
chip.add('tool', tool, 'task', task, 'output', design + '.vg', step=step, index=index)
|
|
1076
1089
|
chip.add('tool', tool, 'task', task, 'output', design + '.def', step=step, index=index)
|