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
|
@@ -70,6 +70,17 @@ def setup(chip):
|
|
|
70
70
|
chip.add('tool', tool, 'task', task, 'require', f'constraint,timing,{scenario},file',
|
|
71
71
|
step=step, index=index)
|
|
72
72
|
|
|
73
|
+
# Add the SPEF or SDF files as inputs if provided.
|
|
74
|
+
spef_files = [f for f in input_provides(chip, step, index) if f.endswith(".spef")]
|
|
75
|
+
sdf_files = [f for f in input_provides(chip, step, index) if f.endswith(".sdf")]
|
|
76
|
+
if spef_files and sdf_files:
|
|
77
|
+
# If both SPEF and SDF files are provided, only use the SPEF files.
|
|
78
|
+
chip.add('tool', tool, 'task', task, 'input', spef_files, step=step, index=index)
|
|
79
|
+
elif spef_files:
|
|
80
|
+
chip.add('tool', tool, 'task', task, 'input', spef_files, step=step, index=index)
|
|
81
|
+
elif sdf_files:
|
|
82
|
+
chip.add('tool', tool, 'task', task, 'input', sdf_files, step=step, index=index)
|
|
83
|
+
|
|
73
84
|
add_common_file(chip, 'opensta_generic_sdc', 'sdc/sc_constraints.sdc')
|
|
74
85
|
|
|
75
86
|
|
|
@@ -70,38 +70,38 @@ def common_runtime_options(chip):
|
|
|
70
70
|
'param'])
|
|
71
71
|
|
|
72
72
|
if opts['libext']:
|
|
73
|
-
options.
|
|
73
|
+
options.extend(['--libext', f'{",".join(opts["libext"])}'])
|
|
74
74
|
|
|
75
75
|
#####################
|
|
76
76
|
# Library directories
|
|
77
77
|
#####################
|
|
78
78
|
if opts['ydir']:
|
|
79
|
-
options.
|
|
79
|
+
options.extend(['-y', f'{",".join(opts["ydir"])}'])
|
|
80
80
|
|
|
81
81
|
#####################
|
|
82
82
|
# Library files
|
|
83
83
|
#####################
|
|
84
84
|
if opts['vlib']:
|
|
85
|
-
options.
|
|
85
|
+
options.extend(['-libfile', f'{",".join(opts["vlib"])}'])
|
|
86
86
|
|
|
87
87
|
#####################
|
|
88
88
|
# Include paths
|
|
89
89
|
#####################
|
|
90
90
|
if opts['idir']:
|
|
91
|
-
options.
|
|
91
|
+
options.extend(['--include-directory', f'{",".join(opts["idir"])}'])
|
|
92
92
|
|
|
93
93
|
#######################
|
|
94
94
|
# Variable Definitions
|
|
95
95
|
#######################
|
|
96
96
|
for value in opts['define']:
|
|
97
|
-
options.
|
|
97
|
+
options.extend(['-D', value])
|
|
98
98
|
|
|
99
99
|
#######################
|
|
100
100
|
# Command files
|
|
101
101
|
#######################
|
|
102
102
|
cmdfiles = get_input_files(chip, 'input', 'cmdfile', 'f')
|
|
103
103
|
if cmdfiles:
|
|
104
|
-
options.
|
|
104
|
+
options.extend(['-F', f'{",".join(cmdfiles)}'])
|
|
105
105
|
|
|
106
106
|
#######################
|
|
107
107
|
# Sources
|
|
@@ -114,7 +114,7 @@ def common_runtime_options(chip):
|
|
|
114
114
|
#######################
|
|
115
115
|
# Top Module
|
|
116
116
|
#######################
|
|
117
|
-
options.
|
|
117
|
+
options.extend(['--top', chip.top(step, index)])
|
|
118
118
|
|
|
119
119
|
###############################
|
|
120
120
|
# Parameters (top module only)
|
|
@@ -122,7 +122,7 @@ def common_runtime_options(chip):
|
|
|
122
122
|
# Set up user-provided parameters to ensure we elaborate the correct modules
|
|
123
123
|
for param, value in opts['param']:
|
|
124
124
|
value = value.replace('"', '\\"')
|
|
125
|
-
options.
|
|
125
|
+
options.extend(['-G', f'{param}={value}'])
|
|
126
126
|
|
|
127
127
|
return options
|
|
128
128
|
|
|
@@ -133,11 +133,11 @@ def _get_driver(chip, options_func, ignored_diagnotics=None):
|
|
|
133
133
|
|
|
134
134
|
options = options_func(chip)
|
|
135
135
|
|
|
136
|
-
|
|
137
|
-
|
|
136
|
+
parse_options = pyslang.CommandLineOptions()
|
|
137
|
+
parse_options.ignoreProgramName = True
|
|
138
138
|
opts = " ".join(options)
|
|
139
139
|
code = 0
|
|
140
|
-
if not driver.parseCommandLine(opts,
|
|
140
|
+
if not driver.parseCommandLine(opts, parse_options):
|
|
141
141
|
code = 1
|
|
142
142
|
|
|
143
143
|
if code == 0 and not driver.processOptions():
|
|
@@ -211,5 +211,5 @@ def _diagnostics(chip, driver, compilation):
|
|
|
211
211
|
for diag in compilation.getAllDiagnostics():
|
|
212
212
|
diags.issue(diag)
|
|
213
213
|
|
|
214
|
-
record_metric(chip, step, index, 'errors', diags.numErrors, [])
|
|
215
|
-
record_metric(chip, step, index, 'warnings', diags.numWarnings, [])
|
|
214
|
+
record_metric(chip, step, index, 'errors', diags.numErrors, [f'sc_{step}{index}.log'])
|
|
215
|
+
record_metric(chip, step, index, 'warnings', diags.numWarnings, [f'sc_{step}{index}.log'])
|
|
@@ -50,16 +50,16 @@ def __get_files(manager, tree):
|
|
|
50
50
|
nodes = Queue(maxsize=0)
|
|
51
51
|
nodes.put(tree.root)
|
|
52
52
|
|
|
53
|
-
def
|
|
53
|
+
def proc_range(range):
|
|
54
54
|
files.add(manager.getFileName(range.start))
|
|
55
55
|
files.add(manager.getFileName(range.end))
|
|
56
56
|
|
|
57
57
|
while not nodes.empty():
|
|
58
58
|
node = nodes.get()
|
|
59
|
-
|
|
59
|
+
proc_range(node.sourceRange)
|
|
60
60
|
for token in node:
|
|
61
61
|
if isinstance(token, pyslang.Token):
|
|
62
|
-
|
|
62
|
+
proc_range(token.range)
|
|
63
63
|
else:
|
|
64
64
|
nodes.put(token)
|
|
65
65
|
|
|
@@ -103,7 +103,7 @@ def run(chip):
|
|
|
103
103
|
add_source = chip.get('tool', tool, 'task', task, 'var', 'include_source_paths',
|
|
104
104
|
step=step, index=index)[0] == 'true'
|
|
105
105
|
|
|
106
|
-
def
|
|
106
|
+
def print_files(out, files):
|
|
107
107
|
for src_file in files:
|
|
108
108
|
out.write(f'// File: {src_file}\n')
|
|
109
109
|
|
|
@@ -126,12 +126,12 @@ def run(chip):
|
|
|
126
126
|
|
|
127
127
|
out.write("////////////////////////////////////////////////////////////////\n")
|
|
128
128
|
out.write("// Start:\n")
|
|
129
|
-
|
|
129
|
+
print_files(out, files)
|
|
130
130
|
|
|
131
131
|
out.write(writer.print(tree).str() + '\n')
|
|
132
132
|
|
|
133
133
|
out.write("// End:\n")
|
|
134
|
-
|
|
134
|
+
print_files(out, files)
|
|
135
135
|
out.write("////////////////////////////////////////////////////////////////\n")
|
|
136
136
|
|
|
137
137
|
if ok:
|
|
@@ -83,13 +83,13 @@ def runtime_options(chip):
|
|
|
83
83
|
# Library directories
|
|
84
84
|
#####################
|
|
85
85
|
for value in opts['ydir']:
|
|
86
|
-
cmdlist.
|
|
86
|
+
cmdlist.extend(['-y', value])
|
|
87
87
|
|
|
88
88
|
#####################
|
|
89
89
|
# Library files
|
|
90
90
|
#####################
|
|
91
91
|
for value in opts['vlib']:
|
|
92
|
-
cmdlist.
|
|
92
|
+
cmdlist.extend(['-v', value])
|
|
93
93
|
|
|
94
94
|
#####################
|
|
95
95
|
# Include paths
|
|
@@ -107,7 +107,7 @@ def runtime_options(chip):
|
|
|
107
107
|
# Command files
|
|
108
108
|
#######################
|
|
109
109
|
for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
|
|
110
|
-
cmdlist.
|
|
110
|
+
cmdlist.extend(['-f', + value])
|
|
111
111
|
|
|
112
112
|
#######################
|
|
113
113
|
# Sources
|
|
@@ -120,7 +120,7 @@ def runtime_options(chip):
|
|
|
120
120
|
#######################
|
|
121
121
|
# Top Module
|
|
122
122
|
#######################
|
|
123
|
-
cmdlist.
|
|
123
|
+
cmdlist.extend(['-top', chip.top(step, index)])
|
|
124
124
|
|
|
125
125
|
###############################
|
|
126
126
|
# Parameters (top module only)
|
|
@@ -23,6 +23,26 @@ def setup(chip):
|
|
|
23
23
|
chip.set('tool', tool, 'vswitch', '--numeric-version')
|
|
24
24
|
chip.set('tool', tool, 'version', '>=0.0.9', clobber=False)
|
|
25
25
|
|
|
26
|
+
chip.add('tool', tool, 'task', task, 'require',
|
|
27
|
+
",".join(['tool', tool, 'task', task, 'var', 'skip_convert']), step=step, index=index)
|
|
28
|
+
chip.set('tool', tool, 'task', task, 'var', 'skip_convert',
|
|
29
|
+
'true/false, if true will skip converting system verilog to verilog', field='help')
|
|
30
|
+
skip = chip.get('tool', tool, 'task', task, 'var', 'skip_convert', step=step, index=index)
|
|
31
|
+
if skip:
|
|
32
|
+
skip = skip[0] == "true"
|
|
33
|
+
else:
|
|
34
|
+
skip = False
|
|
35
|
+
chip.set('tool', tool, 'task', task, 'var', 'skip_convert', skip,
|
|
36
|
+
step=step, index=index, clobber=False)
|
|
37
|
+
|
|
38
|
+
chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.sv', step=step, index=index)
|
|
39
|
+
|
|
40
|
+
if skip:
|
|
41
|
+
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.sv', step=step, index=index)
|
|
42
|
+
return "passing system verilog along"
|
|
43
|
+
|
|
44
|
+
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.v', step=step, index=index)
|
|
45
|
+
|
|
26
46
|
chip.set('tool', tool, 'task', task, 'threads', utils.get_cores(chip),
|
|
27
47
|
step=step, index=index, clobber=False)
|
|
28
48
|
|
|
@@ -41,6 +61,3 @@ def setup(chip):
|
|
|
41
61
|
step=step, index=index)
|
|
42
62
|
chip.add('tool', tool, 'task', task, 'option', "--write=outputs/" + topmodule + ".v",
|
|
43
63
|
step=step, index=index)
|
|
44
|
-
|
|
45
|
-
chip.set('tool', tool, 'task', task, 'input', f'{topmodule}.sv', step=step, index=index)
|
|
46
|
-
chip.set('tool', tool, 'task', task, 'output', f'{topmodule}.v', step=step, index=index)
|
|
@@ -161,12 +161,12 @@ def runtime_options(chip):
|
|
|
161
161
|
|
|
162
162
|
if c_flags:
|
|
163
163
|
cflags_str = ' '.join(c_flags)
|
|
164
|
-
cmdlist.extend(['-CFLAGS',
|
|
164
|
+
cmdlist.extend(['-CFLAGS', cflags_str])
|
|
165
165
|
|
|
166
166
|
ld_flags = chip.get('tool', tool, 'task', task, 'var', 'ldflags', step=step, index=index)
|
|
167
167
|
if ld_flags:
|
|
168
168
|
ldflags_str = ' '.join(ld_flags)
|
|
169
|
-
cmdlist.extend(['-LDFLAGS',
|
|
169
|
+
cmdlist.extend(['-LDFLAGS', ldflags_str])
|
|
170
170
|
|
|
171
171
|
for value in get_input_files(chip, 'input', 'hll', 'c'):
|
|
172
172
|
cmdlist.append(value)
|
|
@@ -144,9 +144,9 @@ def runtime_options(chip):
|
|
|
144
144
|
cmdlist.append(f'inputs/{design}.v')
|
|
145
145
|
else:
|
|
146
146
|
for value in frontend_opts['ydir']:
|
|
147
|
-
cmdlist.
|
|
147
|
+
cmdlist.extend(['-y', value])
|
|
148
148
|
for value in frontend_opts['vlib']:
|
|
149
|
-
cmdlist.
|
|
149
|
+
cmdlist.extend(['-v', value])
|
|
150
150
|
for value in frontend_opts['idir']:
|
|
151
151
|
cmdlist.append(f'-I{value}')
|
|
152
152
|
for value in frontend_opts['define']:
|
|
@@ -160,7 +160,7 @@ def runtime_options(chip):
|
|
|
160
160
|
cmdlist.append(value)
|
|
161
161
|
|
|
162
162
|
for value in get_input_files(chip, 'input', 'cmdfile', 'f'):
|
|
163
|
-
cmdlist.
|
|
163
|
+
cmdlist.extend(['-f', value])
|
|
164
164
|
|
|
165
165
|
return cmdlist
|
|
166
166
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
from xml.etree import ElementTree
|
|
2
2
|
import xml.dom.minidom
|
|
3
3
|
|
|
4
4
|
|
|
@@ -10,7 +10,7 @@ def generate_vpr_constraints_xml_file(pin_map, filename):
|
|
|
10
10
|
|
|
11
11
|
def generate_vpr_constraints_xml(pin_map):
|
|
12
12
|
|
|
13
|
-
constraints_xml =
|
|
13
|
+
constraints_xml = ElementTree.Element("vpr_constraints")
|
|
14
14
|
|
|
15
15
|
# Generate partition list section
|
|
16
16
|
partition_list = generate_partition_list_xml(pin_map)
|
|
@@ -22,7 +22,7 @@ def generate_vpr_constraints_xml(pin_map):
|
|
|
22
22
|
|
|
23
23
|
def generate_partition_list_xml(pin_map):
|
|
24
24
|
|
|
25
|
-
partition_list =
|
|
25
|
+
partition_list = ElementTree.Element("partition_list")
|
|
26
26
|
|
|
27
27
|
# ***ASSUMPTION: pin map is a dictionary of block names
|
|
28
28
|
# and tuples, where the tuples specify the
|
|
@@ -38,7 +38,7 @@ def generate_partition_list_xml(pin_map):
|
|
|
38
38
|
|
|
39
39
|
def generate_partition_xml(pin, pin_region):
|
|
40
40
|
|
|
41
|
-
partition =
|
|
41
|
+
partition = ElementTree.Element("partition")
|
|
42
42
|
|
|
43
43
|
partition_name = generate_partition_name(pin)
|
|
44
44
|
partition.set("name", partition_name)
|
|
@@ -80,7 +80,7 @@ def generate_partition_name(pin):
|
|
|
80
80
|
|
|
81
81
|
def generate_add_atom_xml(pin_name):
|
|
82
82
|
|
|
83
|
-
atom_xml =
|
|
83
|
+
atom_xml = ElementTree.Element("add_atom")
|
|
84
84
|
|
|
85
85
|
atom_xml.set("name_pattern", str(pin_name))
|
|
86
86
|
|
|
@@ -89,7 +89,7 @@ def generate_add_atom_xml(pin_name):
|
|
|
89
89
|
|
|
90
90
|
def generate_add_region_xml(x_low, x_high, y_low, y_high, subtile):
|
|
91
91
|
|
|
92
|
-
region_xml =
|
|
92
|
+
region_xml = ElementTree.Element("add_region")
|
|
93
93
|
|
|
94
94
|
region_xml.set("x_low", str(x_low))
|
|
95
95
|
region_xml.set("y_low", str(y_low))
|
|
@@ -100,9 +100,9 @@ def generate_add_region_xml(x_low, x_high, y_low, y_high, subtile):
|
|
|
100
100
|
return region_xml
|
|
101
101
|
|
|
102
102
|
|
|
103
|
-
def write_vpr_constraints_xml_file(constraints:
|
|
103
|
+
def write_vpr_constraints_xml_file(constraints: ElementTree.Element, filename: str):
|
|
104
104
|
|
|
105
|
-
dom = xml.dom.minidom.parseString(
|
|
105
|
+
dom = xml.dom.minidom.parseString(ElementTree.tostring(constraints))
|
|
106
106
|
xml_string = dom.toprettyxml()
|
|
107
107
|
|
|
108
108
|
with open(filename, 'w') as xfile:
|
|
@@ -62,8 +62,8 @@ def runtime_options(chip):
|
|
|
62
62
|
|
|
63
63
|
options.append('--route')
|
|
64
64
|
# To run only the routing step we need to pass in the placement files
|
|
65
|
-
options.
|
|
66
|
-
options.
|
|
65
|
+
options.extend(['--net_file', f'inputs/{design}.net'])
|
|
66
|
+
options.extend(['--place_file', f'inputs/{design}.place'])
|
|
67
67
|
|
|
68
68
|
enable_images = chip.get('tool', tool, 'task', task, 'var', 'enable_images',
|
|
69
69
|
step=step, index=index)[0]
|
|
@@ -72,7 +72,7 @@ def runtime_options(chip):
|
|
|
72
72
|
step=step, index=index)
|
|
73
73
|
|
|
74
74
|
if (len(route_iterations) > 0):
|
|
75
|
-
options.
|
|
75
|
+
options.extend(['--max_router_iterations', route_iterations[0]])
|
|
76
76
|
|
|
77
77
|
if enable_images == 'true':
|
|
78
78
|
design = chip.top()
|
|
@@ -102,7 +102,7 @@ def runtime_options(chip):
|
|
|
102
102
|
graphics_command_str = " ".join(graphics_commands)
|
|
103
103
|
|
|
104
104
|
options.append("--graphics_commands")
|
|
105
|
-
options.append(
|
|
105
|
+
options.append(graphics_command_str)
|
|
106
106
|
|
|
107
107
|
return options
|
|
108
108
|
|
|
@@ -64,14 +64,14 @@ def generic_show_options(chip):
|
|
|
64
64
|
raise SiliconCompilerError("Blif file does not exist", chip=chip)
|
|
65
65
|
|
|
66
66
|
if os.path.exists(net_file):
|
|
67
|
-
options.
|
|
67
|
+
options.extend(['--net_file', net_file])
|
|
68
68
|
else:
|
|
69
69
|
raise SiliconCompilerError("Net file does not exist", chip=chip)
|
|
70
70
|
|
|
71
71
|
if os.path.exists(route_file) and os.path.exists(place_file):
|
|
72
72
|
options.append('--analysis')
|
|
73
|
-
options.
|
|
74
|
-
options.
|
|
73
|
+
options.extend(['--place_file', place_file])
|
|
74
|
+
options.extend(['--route_file', route_file])
|
|
75
75
|
elif os.path.exists(place_file):
|
|
76
76
|
# NOTE: This is a workaround to display the VPR GUI on the output of the place step.
|
|
77
77
|
# VPR GUI can be invoked during the place, route or analysis steps - not after they are run.
|
|
@@ -81,8 +81,8 @@ def generic_show_options(chip):
|
|
|
81
81
|
# the placed design. Setting max_router_iterations to 0 avoids running routing iterations
|
|
82
82
|
# and provides a fast way to invoke VPR GUI on the placed design.
|
|
83
83
|
options.append('--route')
|
|
84
|
-
options.
|
|
85
|
-
options.
|
|
84
|
+
options.extend(['--max_router_iterations', 0])
|
|
85
|
+
options.extend(['--place_file', place_file])
|
|
86
86
|
else:
|
|
87
87
|
raise SiliconCompilerError("Place file does not exist", chip=chip)
|
|
88
88
|
|
siliconcompiler/tools/vpr/vpr.py
CHANGED
|
@@ -103,15 +103,15 @@ def runtime_options(chip):
|
|
|
103
103
|
|
|
104
104
|
device_code = chip.get('fpga', part_name, 'var', 'vpr_device_code')
|
|
105
105
|
|
|
106
|
-
options.
|
|
106
|
+
options.extend(["--device", device_code[0]])
|
|
107
107
|
|
|
108
108
|
# Medium-term solution: VPR performs hash digest checks that
|
|
109
109
|
# fail if file paths are changed between steps. We wish to
|
|
110
110
|
# disable the digest checks to work around this
|
|
111
|
-
options.
|
|
111
|
+
options.extend(["--verify_file_digests", "off"])
|
|
112
112
|
|
|
113
|
-
options.
|
|
114
|
-
options.
|
|
113
|
+
options.extend(["--write_block_usage", __block_file])
|
|
114
|
+
options.extend(["--outfile_prefix", "outputs/"])
|
|
115
115
|
|
|
116
116
|
if chip.valid('fpga', part_name, 'file', 'archfile') and \
|
|
117
117
|
chip.get('fpga', part_name, 'file', 'archfile'):
|
|
@@ -133,25 +133,25 @@ def runtime_options(chip):
|
|
|
133
133
|
"Only one architecture XML file can be passed to VPR", chip=chip)
|
|
134
134
|
|
|
135
135
|
threads = chip.get('tool', tool, 'task', task, 'threads', step=step, index=index)
|
|
136
|
-
options.
|
|
136
|
+
options.extend(["--num_workers", threads])
|
|
137
137
|
|
|
138
138
|
# For most architectures, constant nets need to be routed
|
|
139
139
|
# like regular nets to be functionally correct (however inefficient
|
|
140
140
|
# that might be...); these two options help control that
|
|
141
|
-
options.
|
|
142
|
-
options.
|
|
141
|
+
options.extend(['--constant_net_method', 'route'])
|
|
142
|
+
options.extend(['--const_gen_inference', 'none'])
|
|
143
143
|
|
|
144
144
|
# If we allow VPR to sweep dangling primary I/Os and logic blocks
|
|
145
145
|
# it can interfere with circuit debugging; so disable that
|
|
146
|
-
options.
|
|
146
|
+
options.extend(['--sweep_dangling_primary_ios', 'off'])
|
|
147
147
|
# If you don't sweep dangling primary I/Os, but sweeping nets
|
|
148
148
|
# VPR can crash:
|
|
149
|
-
options.
|
|
149
|
+
options.extend(['--sweep_dangling_nets', 'off'])
|
|
150
150
|
# If you don't sweep dangling nets then the timing engine requires
|
|
151
151
|
# you to set an option allowing dangling nodes
|
|
152
|
-
options.
|
|
153
|
-
options.
|
|
154
|
-
options.
|
|
152
|
+
options.extend(['--allow_dangling_combinational_nodes', 'on'])
|
|
153
|
+
options.extend(['--sweep_constant_primary_outputs', 'off'])
|
|
154
|
+
options.extend(['--sweep_dangling_blocks', 'off'])
|
|
155
155
|
|
|
156
156
|
# Explicitly specify the clock modeling type in the part driver
|
|
157
157
|
# to avoid ambiguity and future-proof against new VPR clock models
|
|
@@ -163,11 +163,11 @@ def runtime_options(chip):
|
|
|
163
163
|
# When dedicated networks are used, tell VPR to use the two-stage router,
|
|
164
164
|
# otherwise not.
|
|
165
165
|
if (selected_clock_model == 'ideal'):
|
|
166
|
-
options.
|
|
166
|
+
options.extend(['--clock_modeling', selected_clock_model])
|
|
167
167
|
elif (selected_clock_model == 'route'):
|
|
168
|
-
options.
|
|
168
|
+
options.extend(['--clock_modeling', selected_clock_model])
|
|
169
169
|
elif (selected_clock_model == 'dedicated_network'):
|
|
170
|
-
options.
|
|
170
|
+
options.extend(['--clock_modeling', selected_clock_model])
|
|
171
171
|
options.append('--two_stage_clock_routing')
|
|
172
172
|
else:
|
|
173
173
|
raise SiliconCompilerError(
|
|
@@ -181,24 +181,24 @@ def runtime_options(chip):
|
|
|
181
181
|
file_not_found_msg="SDC file not found")
|
|
182
182
|
|
|
183
183
|
if sdc_file:
|
|
184
|
-
|
|
185
|
-
options.append(
|
|
184
|
+
options.append("--sdc_file")
|
|
185
|
+
options.append(sdc_file)
|
|
186
186
|
|
|
187
187
|
report_type = chip.get('tool', tool, 'task', task, 'var', 'timing_report_type',
|
|
188
188
|
step=step, index=index)[0]
|
|
189
|
-
options.
|
|
189
|
+
options.extend(['--timing_report_detail', report_type])
|
|
190
190
|
report_paths = chip.get('tool', tool, 'task', task, 'var', 'timing_paths',
|
|
191
191
|
step=step, index=index)[0]
|
|
192
|
-
options.
|
|
192
|
+
options.extend(['--timing_report_npaths', report_paths])
|
|
193
193
|
else:
|
|
194
|
-
options.
|
|
194
|
+
options.extend(["--timing_analysis", "off"])
|
|
195
195
|
|
|
196
196
|
# Per the scheme implemented in the placement pre-process step,
|
|
197
197
|
# if a constraints file exists it will always be in the auto_constraints()
|
|
198
198
|
# location:
|
|
199
199
|
if (os.path.isfile(auto_constraints())):
|
|
200
|
-
|
|
201
|
-
options.append(
|
|
200
|
+
options.append("--read_vpr_constraints")
|
|
201
|
+
options.append(auto_constraints())
|
|
202
202
|
|
|
203
203
|
# Routing graph XML:
|
|
204
204
|
rr_graph = find_single_file(chip, 'fpga', part_name, 'file', 'graphfile',
|
|
@@ -208,7 +208,7 @@ def runtime_options(chip):
|
|
|
208
208
|
chip.logger.info("No VPR RR graph file specified")
|
|
209
209
|
chip.logger.info("Routing architecture will come from architecture XML file")
|
|
210
210
|
else:
|
|
211
|
-
options.
|
|
211
|
+
options.extend(["--read_rr_graph", rr_graph])
|
|
212
212
|
|
|
213
213
|
# ***NOTE: For real FPGA chips you need to specify the routing channel
|
|
214
214
|
# width explicitly. VPR requires an explicit routing channel
|
|
@@ -222,7 +222,7 @@ def runtime_options(chip):
|
|
|
222
222
|
if (len(num_routing_channels) == 0):
|
|
223
223
|
raise SiliconCompilerError("Number of routing channels not specified", chip=chip)
|
|
224
224
|
elif (len(num_routing_channels) == 1):
|
|
225
|
-
options.
|
|
225
|
+
options.extend(["--route_chan_width", num_routing_channels[0]])
|
|
226
226
|
elif (len(num_routing_channels) > 1):
|
|
227
227
|
raise SiliconCompilerError(
|
|
228
228
|
"Only one routing channel width argument can be passed to VPR", chip=chip)
|
|
@@ -24,9 +24,9 @@ def setup(chip):
|
|
|
24
24
|
|
|
25
25
|
chip.add('tool', tool, 'task', task, 'option', '--auto',
|
|
26
26
|
step=step, index=index)
|
|
27
|
-
chip.add('tool', tool, 'task', task, 'option', '--source_file_format hspice',
|
|
27
|
+
chip.add('tool', tool, 'task', task, 'option', ['--source_file_format', 'hspice'],
|
|
28
28
|
step=step, index=index)
|
|
29
|
-
chip.add('tool', tool, 'task', task, 'option',
|
|
29
|
+
chip.add('tool', tool, 'task', task, 'option', ['--dir_out', f'outputs/{design}.xyce'],
|
|
30
30
|
step=step, index=index)
|
|
31
31
|
|
|
32
32
|
chip.set('tool', 'xdm', 'task', 'convert', 'var', 'rename', 'true',
|
|
@@ -48,7 +48,7 @@ def setup(chip):
|
|
|
48
48
|
step=step, index=index) == ['true']:
|
|
49
49
|
chip.add('tool', tool, 'task', task, 'output', f'{design}.raw',
|
|
50
50
|
step=step, index=index)
|
|
51
|
-
chip.add('tool', tool, 'task', task, 'option',
|
|
51
|
+
chip.add('tool', tool, 'task', task, 'option', ['-r', f'outputs/{design}.raw'],
|
|
52
52
|
step=step, index=index)
|
|
53
53
|
|
|
54
54
|
|
|
@@ -6,7 +6,7 @@ import gzip
|
|
|
6
6
|
import argparse # argument parsing
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def
|
|
9
|
+
def process_liberty_file(input_file, logger=None):
|
|
10
10
|
# Read input file
|
|
11
11
|
if logger:
|
|
12
12
|
logger.info(f"Opening file for replace: {input_file}")
|
|
@@ -56,4 +56,4 @@ if __name__ == "__main__":
|
|
|
56
56
|
help='Output File')
|
|
57
57
|
args = parser.parse_args()
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
process_liberty_file(args.inputFile, args.outputFile, args.patterns)
|