siliconcompiler 0.32.3__py3-none-any.whl → 0.33.0__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.
Files changed (154) hide show
  1. siliconcompiler/__init__.py +19 -2
  2. siliconcompiler/_metadata.py +1 -1
  3. siliconcompiler/apps/sc.py +2 -2
  4. siliconcompiler/apps/sc_install.py +3 -3
  5. siliconcompiler/apps/sc_issue.py +1 -1
  6. siliconcompiler/apps/sc_remote.py +4 -4
  7. siliconcompiler/apps/sc_show.py +2 -2
  8. siliconcompiler/apps/utils/replay.py +5 -3
  9. siliconcompiler/asic.py +120 -0
  10. siliconcompiler/checklist.py +150 -0
  11. siliconcompiler/core.py +267 -289
  12. siliconcompiler/flowgraph.py +803 -515
  13. siliconcompiler/fpga.py +84 -0
  14. siliconcompiler/metric.py +420 -0
  15. siliconcompiler/optimizer/vizier.py +2 -3
  16. siliconcompiler/package/__init__.py +29 -6
  17. siliconcompiler/pdk.py +415 -0
  18. siliconcompiler/record.py +449 -0
  19. siliconcompiler/remote/client.py +6 -3
  20. siliconcompiler/remote/schema.py +116 -112
  21. siliconcompiler/remote/server.py +3 -5
  22. siliconcompiler/report/dashboard/cli/__init__.py +13 -722
  23. siliconcompiler/report/dashboard/cli/board.py +895 -0
  24. siliconcompiler/report/dashboard/web/__init__.py +10 -10
  25. siliconcompiler/report/dashboard/web/components/__init__.py +5 -4
  26. siliconcompiler/report/dashboard/web/components/flowgraph.py +3 -3
  27. siliconcompiler/report/dashboard/web/components/graph.py +6 -3
  28. siliconcompiler/report/dashboard/web/state.py +1 -1
  29. siliconcompiler/report/dashboard/web/utils/__init__.py +4 -3
  30. siliconcompiler/report/html_report.py +2 -3
  31. siliconcompiler/report/report.py +13 -7
  32. siliconcompiler/report/summary_image.py +1 -1
  33. siliconcompiler/report/summary_table.py +3 -3
  34. siliconcompiler/report/utils.py +11 -10
  35. siliconcompiler/scheduler/__init__.py +145 -280
  36. siliconcompiler/scheduler/run_node.py +2 -1
  37. siliconcompiler/scheduler/send_messages.py +4 -4
  38. siliconcompiler/scheduler/slurm.py +2 -2
  39. siliconcompiler/schema/__init__.py +19 -2
  40. siliconcompiler/schema/baseschema.py +493 -0
  41. siliconcompiler/schema/cmdlineschema.py +250 -0
  42. siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
  43. siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
  44. siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
  45. siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
  46. siliconcompiler/schema/editableschema.py +136 -0
  47. siliconcompiler/schema/journalingschema.py +238 -0
  48. siliconcompiler/schema/namedschema.py +41 -0
  49. siliconcompiler/schema/packageschema.py +101 -0
  50. siliconcompiler/schema/parameter.py +791 -0
  51. siliconcompiler/schema/parametertype.py +323 -0
  52. siliconcompiler/schema/parametervalue.py +736 -0
  53. siliconcompiler/schema/safeschema.py +37 -0
  54. siliconcompiler/schema/schema_cfg.py +109 -1789
  55. siliconcompiler/schema/utils.py +5 -68
  56. siliconcompiler/schema_obj.py +119 -0
  57. siliconcompiler/tool.py +1308 -0
  58. siliconcompiler/tools/_common/__init__.py +6 -10
  59. siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
  60. siliconcompiler/tools/bluespec/convert.py +7 -7
  61. siliconcompiler/tools/builtin/_common.py +1 -1
  62. siliconcompiler/tools/builtin/concatenate.py +2 -2
  63. siliconcompiler/tools/builtin/minimum.py +1 -1
  64. siliconcompiler/tools/builtin/mux.py +2 -1
  65. siliconcompiler/tools/builtin/nop.py +1 -1
  66. siliconcompiler/tools/builtin/verify.py +6 -4
  67. siliconcompiler/tools/chisel/convert.py +4 -4
  68. siliconcompiler/tools/genfasm/bitstream.py +3 -3
  69. siliconcompiler/tools/ghdl/convert.py +1 -1
  70. siliconcompiler/tools/icarus/compile.py +4 -4
  71. siliconcompiler/tools/icepack/bitstream.py +6 -1
  72. siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
  73. siliconcompiler/tools/klayout/klayout_export.py +0 -1
  74. siliconcompiler/tools/klayout/klayout_utils.py +3 -10
  75. siliconcompiler/tools/nextpnr/apr.py +6 -1
  76. siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
  77. siliconcompiler/tools/openroad/_apr.py +13 -0
  78. siliconcompiler/tools/openroad/rdlroute.py +3 -3
  79. siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
  80. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
  81. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +2 -2
  82. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +2 -2
  83. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +2 -2
  84. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +2 -2
  85. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +2 -2
  86. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +2 -2
  87. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
  88. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +2 -2
  89. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +2 -2
  90. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +2 -2
  91. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +3 -3
  92. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +2 -2
  93. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +2 -2
  94. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +2 -2
  95. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +2 -2
  96. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +2 -2
  97. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +2 -2
  98. siliconcompiler/tools/openroad/scripts/common/procs.tcl +57 -1
  99. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
  100. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
  101. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
  102. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -3
  103. siliconcompiler/tools/openroad/scripts/sc_show.tcl +6 -6
  104. siliconcompiler/tools/slang/__init__.py +10 -10
  105. siliconcompiler/tools/surelog/parse.py +4 -4
  106. siliconcompiler/tools/sv2v/convert.py +20 -3
  107. siliconcompiler/tools/verilator/compile.py +2 -2
  108. siliconcompiler/tools/verilator/verilator.py +3 -3
  109. siliconcompiler/tools/vpr/place.py +1 -1
  110. siliconcompiler/tools/vpr/route.py +4 -4
  111. siliconcompiler/tools/vpr/screenshot.py +1 -1
  112. siliconcompiler/tools/vpr/show.py +5 -5
  113. siliconcompiler/tools/vpr/vpr.py +24 -24
  114. siliconcompiler/tools/xdm/convert.py +2 -2
  115. siliconcompiler/tools/xyce/simulate.py +1 -1
  116. siliconcompiler/tools/yosys/sc_synth_asic.tcl +74 -68
  117. siliconcompiler/tools/yosys/syn_asic.py +2 -2
  118. siliconcompiler/toolscripts/_tools.json +7 -7
  119. siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +0 -2
  120. siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +0 -2
  121. siliconcompiler/utils/__init__.py +8 -112
  122. siliconcompiler/utils/flowgraph.py +339 -0
  123. siliconcompiler/{issue.py → utils/issue.py} +4 -3
  124. siliconcompiler/utils/logging.py +1 -2
  125. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/METADATA +9 -8
  126. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/RECORD +151 -134
  127. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/WHEEL +1 -1
  128. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/entry_points.txt +8 -8
  129. siliconcompiler/schema/schema_obj.py +0 -1936
  130. siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -29
  131. siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -61
  132. /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
  133. /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
  134. /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
  135. /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
  136. /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
  137. /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
  138. /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
  139. /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
  140. /siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +0 -0
  141. /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
  142. /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
  143. /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
  144. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
  145. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
  146. /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
  147. /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
  148. /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
  149. /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
  150. /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
  151. /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
  152. /siliconcompiler/{units.py → utils/units.py} +0 -0
  153. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.dist-info}/licenses/LICENSE +0 -0
  154. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.0.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
- from siliconcompiler import units
469
-
470
- metric_unit = None
471
- if chip.schema.has_field('metric', metric, 'unit'):
472
- metric_unit = chip.get('metric', metric, field='unit')
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')
@@ -1,6 +1,6 @@
1
1
  # Default constraints file that sets up clocks based on definitions in schema.
2
2
 
3
- source sc_manifest.tcl > /dev/null
3
+ source sc_manifest.tcl
4
4
 
5
5
  ### Create clocks
6
6
  if { [sc_cfg_exists datasheet pin] } {
@@ -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.append(f'-vdir {VLOG_DIR}')
74
- cmdlist.append(f'-bdir {BSC_DIR}')
75
- cmdlist.append('-info-dir reports')
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.append(f'-g {chip.top(step, index)}')
82
+ cmdlist.extend(['-g', chip.top(step, index)])
83
83
 
84
84
  bsc_path = ':'.join(opts['ydir'] + ['%/Libraries'])
85
- cmdlist.append('-p ' + bsc_path)
85
+ cmdlist.extend(['-p', bsc_path])
86
86
 
87
87
  for value in opts['idir']:
88
- cmdlist.append('-I ' + value)
88
+ cmdlist.extend(['-I', value])
89
89
  for value in opts['define']:
90
- cmdlist.append('-D ' + value)
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:
@@ -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 _get_pruned_node_inputs
6
+ from siliconcompiler.utils.flowgraph import _get_pruned_node_inputs
7
7
 
8
8
 
9
9
  ###########################################################################
@@ -3,7 +3,7 @@ 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
6
+ from siliconcompiler.utils import flowgraph
7
7
  from siliconcompiler import scheduler
8
8
 
9
9
 
@@ -12,7 +12,7 @@ def make_docs(chip):
12
12
  _make_docs(chip)
13
13
  chip.set('option', 'flow', 'asicflow')
14
14
 
15
- for step, index in flowgraph._get_flowgraph_entry_nodes(chip, 'asicflow'):
15
+ for step, index in chip.schema.get("flowgraph", "asicflow", field="schema").get_entry_nodes():
16
16
  scheduler._setup_node(chip, step, index)
17
17
 
18
18
  chip.set('arg', 'step', 'import.combine')
@@ -1,5 +1,5 @@
1
1
  from siliconcompiler.tools.builtin import _common
2
- from siliconcompiler import flowgraph
2
+ from siliconcompiler.utils import flowgraph
3
3
  from siliconcompiler.tools.builtin.builtin import set_io_files
4
4
 
5
5
 
@@ -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 flowgraph, SiliconCompilerError
4
+ from siliconcompiler import SiliconCompilerError
5
+ from siliconcompiler.utils import flowgraph
5
6
 
6
7
 
7
8
  def setup(chip):
@@ -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 flowgraph
3
+ from siliconcompiler.utils import flowgraph
4
4
 
5
5
 
6
6
  def setup(chip):
@@ -1,11 +1,13 @@
1
1
  from siliconcompiler.tools.builtin import _common
2
- from siliconcompiler.schema import Schema
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, flowgraph, SiliconCompilerError
5
+ from siliconcompiler import utils, SiliconCompilerError
6
6
 
7
7
  import re
8
8
 
9
+ from siliconcompiler.utils import flowgraph
10
+
9
11
 
10
12
  def setup(chip):
11
13
  '''
@@ -52,8 +54,8 @@ def _select_inputs(chip, step, index):
52
54
  raise SiliconCompilerError(
53
55
  f"Missing metric for {metric} in {inputs[0]}{inputs[1]}", chip=chip)
54
56
 
55
- metric_type = chip.get('metric', metric, field='type')
56
- goal = Schema._normalize_value(goal, metric_type, "", None)
57
+ metric_type = chip.get('metric', metric, field=None)
58
+ goal = NodeType.normalize(goal, metric_type.get(field='type'))
57
59
  if not utils.safecompare(chip, value, op, goal):
58
60
  chip.error(f"{step}{index} fails '{metric}' metric: {value}{op}{goal}")
59
61
 
@@ -120,15 +120,15 @@ def runtime_options(chip):
120
120
  step=step, index=index))
121
121
  runMain.append("--")
122
122
 
123
- runMain.append("--target-dir chisel-output")
123
+ runMain.extend(["--target-dir", "chisel-output"])
124
124
  else:
125
125
  # Use built in driver
126
126
  runMain.append("SCDriver")
127
- runMain.append(f"--module {chip.top(step=step, index=index)}")
127
+ runMain.extend(["--module", chip.top(step=step, index=index)])
128
128
 
129
- runMain.append(f"--output-file ../outputs/{design}.v")
129
+ runMain.extend(["--output-file", f"../outputs/{design}.v"])
130
130
 
131
- return [f'"{" ".join(runMain)}"']
131
+ return [" ".join(runMain)]
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.append(f'--net_file inputs/{design}.net')
45
- options.append(f'--place_file inputs/{design}.place')
46
- options.append(f'--route_file inputs/{design}.route')
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.append('-y ' + value)
71
+ cmdlist.extend(['-y', value])
72
72
  for value in opts['vlib']:
73
- cmdlist.append('-v ' + value)
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=\\\"reports/{design}.vcd\\\"")
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.append('-f ' + value)
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', "", step=step, index=index, clobber=clobber)
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)
@@ -121,7 +121,6 @@ def main():
121
121
  # SC_ROOT provided by CLI
122
122
  sys.path.append(SC_KLAYOUT_ROOT) # noqa: F821
123
123
  sys.path.append(SC_TOOLS_ROOT) # noqa: F821
124
- print(sys.path)
125
124
 
126
125
  from klayout_utils import (
127
126
  technology,
@@ -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
@@ -172,15 +171,9 @@ def get_write_options(filename, timestamps):
172
171
 
173
172
 
174
173
  def get_schema(manifest):
175
- scroot = os.path.join(os.path.dirname(__file__), '..', '..')
176
- module_name = 'schema'
177
- schema_base = os.path.join(scroot, module_name, '__init__.py')
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():
@@ -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', "", step=step, index=index, clobber=clobber)
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.append('--json inputs/' + topmodule + '.netlist.json')
37
- options.append('--asc outputs/' + topmodule + '.asc')
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.append('--up5k --package sg48')
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.append('--pcf ' + constraint_file)
43
+ options.extend(['--pcf', constraint_file])
44
44
 
45
45
  return options
46
46
 
@@ -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)
@@ -31,11 +31,11 @@ def setup(chip):
31
31
  chip.set('tool', tool, 'format', 'tcl')
32
32
 
33
33
  # exit automatically in batch mode and not breakpoint
34
- option = ''
34
+ option = ['-no_init']
35
35
  if exit and not chip.get('option', 'breakpoint', step=step, index=index):
36
- option += " -exit"
36
+ option.append("-exit")
37
37
 
38
- option += " -metrics reports/metrics.json"
38
+ option.extend(["-metrics", "reports/metrics.json"])
39
39
  chip.set('tool', tool, 'task', task, 'option', option, step=step, index=index)
40
40
 
41
41
  # Input/Output requirements for default asicflow steps
@@ -8,7 +8,7 @@ utl::push_metrics_stage "sc__poststep__{}"
8
8
  if { [sc_cfg_tool_task_exists postscript] } {
9
9
  foreach sc_post_script [sc_cfg_tool_task_get postscript] {
10
10
  puts "Sourcing post script: ${sc_post_script}"
11
- source -echo $sc_post_script
11
+ source $sc_post_script
12
12
  }
13
13
  }
14
14
  utl::pop_metrics_stage
@@ -14,7 +14,7 @@ set sc_refdir [sc_cfg_tool_task_get refdir]
14
14
  # Setup debugging
15
15
  ###############################
16
16
 
17
- source -echo "$sc_refdir/common/debugging.tcl"
17
+ source "$sc_refdir/common/debugging.tcl"
18
18
 
19
19
  ###############################
20
20
  # Setup helper functions
@@ -47,11 +47,11 @@ set_thread_count [sc_cfg_tool_task_get threads]
47
47
  # Read Files
48
48
  ###############################
49
49
 
50
- source -echo "$sc_refdir/common/read_liberty.tcl"
50
+ source "$sc_refdir/common/read_liberty.tcl"
51
51
 
52
- source -echo "$sc_refdir/common/read_input_files.tcl"
52
+ source "$sc_refdir/common/read_input_files.tcl"
53
53
 
54
- source -echo "$sc_refdir/common/read_timing_constraints.tcl"
54
+ source "$sc_refdir/common/read_timing_constraints.tcl"
55
55
 
56
56
  ###############################
57
57
  # Common Setup
@@ -81,7 +81,7 @@ utl::push_metrics_stage "sc__prestep__{}"
81
81
  if { [sc_cfg_tool_task_exists prescript] } {
82
82
  foreach sc_pre_script [sc_cfg_tool_task_get prescript] {
83
83
  puts "Sourcing pre script: ${sc_pre_script}"
84
- source -echo $sc_pre_script
84
+ source $sc_pre_script
85
85
  }
86
86
  }
87
87
  utl::pop_metrics_stage
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Report and Repair Antennas
@@ -48,4 +48,4 @@ estimate_parasitics -global_routing
48
48
  # Task Postamble
49
49
  ###############################
50
50
 
51
- source -echo "$sc_refdir/apr/postamble.tcl"
51
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Clock tree synthesis
@@ -66,4 +66,4 @@ estimate_parasitics -placement
66
66
  # Task Postamble
67
67
  ###############################
68
68
 
69
- source -echo "$sc_refdir/apr/postamble.tcl"
69
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # DETAILED PLACEMENT
@@ -38,4 +38,4 @@ estimate_parasitics -placement
38
38
  # Task Postamble
39
39
  ###############################
40
40
 
41
- source -echo "$sc_refdir/apr/postamble.tcl"
41
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Detailed Routing
@@ -78,4 +78,4 @@ estimate_parasitics -global_routing
78
78
  # Task Postamble
79
79
  ###############################
80
80
 
81
- source -echo "$sc_refdir/apr/postamble.tcl"
81
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Error checking
@@ -52,4 +52,4 @@ if {
52
52
  # Task Postamble
53
53
  ###############################
54
54
 
55
- source -echo "$sc_refdir/apr/postamble.tcl"
55
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Add fillers
@@ -24,4 +24,4 @@ estimate_parasitics -placement
24
24
  # Task Postamble
25
25
  ###############################
26
26
 
27
- source -echo "$sc_refdir/apr/postamble.tcl"
27
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Do fill
@@ -33,4 +33,4 @@ estimate_parasitics -global_routing
33
33
  # Task Postamble
34
34
  ###############################
35
35
 
36
- source -echo "$sc_refdir/apr/postamble.tcl"
36
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  set dont_use_args []
15
15
 
@@ -87,4 +87,4 @@ sc_set_dont_use
87
87
 
88
88
  estimate_parasitics -placement
89
89
 
90
- source -echo "$sc_refdir/apr/postamble.tcl"
90
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Pin access
@@ -70,4 +70,4 @@ estimate_parasitics -global_routing
70
70
  # Task Postamble
71
71
  ###############################
72
72
 
73
- source -echo "$sc_refdir/apr/postamble.tcl"
73
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # FLOORPLANNING
@@ -331,4 +331,4 @@ if { [lindex [sc_cfg_tool_task_get var remove_dead_logic] 0] == "true" } {
331
331
  # Task Postamble
332
332
  ###############################
333
333
 
334
- source -echo "$sc_refdir/apr/postamble.tcl"
334
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,14 +9,14 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Macro placement constraints
16
16
  ###############################
17
17
  foreach script [sc_cfg_tool_task_get file rtlmp_constraints] {
18
18
  puts "Sourcing macro placement constraints: $script"
19
- source -echo $script
19
+ source $script
20
20
  }
21
21
 
22
22
  # Need to check if we have any macros before performing macro placement,
@@ -117,4 +117,4 @@ sc_print_macro_information
117
117
  # Task Postamble
118
118
  ###############################
119
119
 
120
- source -echo "$sc_refdir/apr/postamble.tcl"
120
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  ###############################
15
15
  # Report Metrics
@@ -19,4 +19,4 @@ source -echo "$sc_refdir/apr/preamble.tcl"
19
19
  # Task Postamble
20
20
  ###############################
21
21
 
22
- source -echo "$sc_refdir/apr/postamble.tcl"
22
+ source "$sc_refdir/apr/postamble.tcl"
@@ -9,7 +9,7 @@ source ./sc_manifest.tcl
9
9
  ###############################
10
10
 
11
11
  set sc_refdir [sc_cfg_tool_task_get refdir]
12
- source -echo "$sc_refdir/apr/preamble.tcl"
12
+ source "$sc_refdir/apr/preamble.tcl"
13
13
 
14
14
  if { [sc_design_has_placeable_ios] } {
15
15
  ###############################
@@ -38,4 +38,4 @@ if { [sc_design_has_placeable_ios] } {
38
38
  # Task Postamble
39
39
  ###############################
40
40
 
41
- source -echo "$sc_refdir/apr/postamble.tcl"
41
+ source "$sc_refdir/apr/postamble.tcl"