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.
Files changed (280) hide show
  1. siliconcompiler/__init__.py +19 -2
  2. siliconcompiler/_common.py +5 -0
  3. siliconcompiler/_metadata.py +1 -1
  4. siliconcompiler/apps/sc.py +2 -2
  5. siliconcompiler/apps/sc_install.py +10 -3
  6. siliconcompiler/apps/sc_issue.py +1 -1
  7. siliconcompiler/apps/sc_remote.py +10 -5
  8. siliconcompiler/apps/sc_show.py +2 -2
  9. siliconcompiler/apps/utils/replay.py +5 -3
  10. siliconcompiler/asic.py +120 -0
  11. siliconcompiler/checklist.py +150 -0
  12. siliconcompiler/core.py +299 -299
  13. siliconcompiler/flowgraph.py +803 -515
  14. siliconcompiler/fpga.py +84 -0
  15. siliconcompiler/metric.py +479 -0
  16. siliconcompiler/optimizer/vizier.py +2 -3
  17. siliconcompiler/package/__init__.py +29 -6
  18. siliconcompiler/pdk.py +415 -0
  19. siliconcompiler/record.py +453 -0
  20. siliconcompiler/remote/client.py +15 -5
  21. siliconcompiler/remote/schema.py +116 -112
  22. siliconcompiler/remote/server.py +9 -6
  23. siliconcompiler/report/dashboard/cli/__init__.py +14 -721
  24. siliconcompiler/report/dashboard/cli/board.py +899 -0
  25. siliconcompiler/report/dashboard/web/__init__.py +10 -10
  26. siliconcompiler/report/dashboard/web/components/__init__.py +5 -4
  27. siliconcompiler/report/dashboard/web/components/flowgraph.py +3 -3
  28. siliconcompiler/report/dashboard/web/components/graph.py +6 -3
  29. siliconcompiler/report/dashboard/web/state.py +1 -1
  30. siliconcompiler/report/dashboard/web/utils/__init__.py +4 -3
  31. siliconcompiler/report/html_report.py +2 -3
  32. siliconcompiler/report/report.py +22 -11
  33. siliconcompiler/report/summary_image.py +1 -1
  34. siliconcompiler/report/summary_table.py +3 -3
  35. siliconcompiler/report/utils.py +21 -14
  36. siliconcompiler/scheduler/__init__.py +234 -1206
  37. siliconcompiler/scheduler/run_node.py +2 -1
  38. siliconcompiler/scheduler/send_messages.py +11 -5
  39. siliconcompiler/scheduler/slurm.py +11 -44
  40. siliconcompiler/scheduler/taskscheduler.py +320 -0
  41. siliconcompiler/schema/__init__.py +19 -2
  42. siliconcompiler/schema/baseschema.py +493 -0
  43. siliconcompiler/schema/cmdlineschema.py +250 -0
  44. siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
  45. siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
  46. siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
  47. siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
  48. siliconcompiler/schema/editableschema.py +136 -0
  49. siliconcompiler/schema/journalingschema.py +238 -0
  50. siliconcompiler/schema/namedschema.py +41 -0
  51. siliconcompiler/schema/packageschema.py +101 -0
  52. siliconcompiler/schema/parameter.py +791 -0
  53. siliconcompiler/schema/parametertype.py +323 -0
  54. siliconcompiler/schema/parametervalue.py +736 -0
  55. siliconcompiler/schema/safeschema.py +37 -0
  56. siliconcompiler/schema/schema_cfg.py +109 -1789
  57. siliconcompiler/schema/utils.py +5 -68
  58. siliconcompiler/schema_obj.py +119 -0
  59. siliconcompiler/tool.py +1416 -0
  60. siliconcompiler/tools/_common/__init__.py +6 -10
  61. siliconcompiler/tools/_common/asic.py +5 -5
  62. siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
  63. siliconcompiler/tools/bluespec/convert.py +9 -8
  64. siliconcompiler/tools/builtin/_common.py +9 -2
  65. siliconcompiler/tools/builtin/concatenate.py +7 -3
  66. siliconcompiler/tools/builtin/minimum.py +7 -2
  67. siliconcompiler/tools/builtin/mux.py +8 -2
  68. siliconcompiler/tools/builtin/nop.py +7 -2
  69. siliconcompiler/tools/builtin/verify.py +11 -5
  70. siliconcompiler/tools/chisel/convert.py +10 -10
  71. siliconcompiler/tools/genfasm/bitstream.py +3 -3
  72. siliconcompiler/tools/ghdl/convert.py +1 -1
  73. siliconcompiler/tools/icarus/compile.py +4 -4
  74. siliconcompiler/tools/icepack/bitstream.py +6 -1
  75. siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
  76. siliconcompiler/tools/klayout/drc.py +2 -2
  77. siliconcompiler/tools/klayout/klayout_export.py +0 -1
  78. siliconcompiler/tools/klayout/klayout_show.py +6 -6
  79. siliconcompiler/tools/klayout/klayout_utils.py +15 -22
  80. siliconcompiler/tools/netgen/count_lvs.py +2 -2
  81. siliconcompiler/tools/netgen/lvs.py +1 -1
  82. siliconcompiler/tools/nextpnr/apr.py +6 -1
  83. siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
  84. siliconcompiler/tools/openroad/_apr.py +15 -2
  85. siliconcompiler/tools/openroad/rdlroute.py +3 -3
  86. siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
  87. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
  88. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +2 -2
  89. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +2 -2
  90. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +2 -2
  91. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +2 -2
  92. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +2 -2
  93. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +2 -2
  94. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +2 -2
  95. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +2 -2
  96. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +2 -2
  97. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +3 -9
  98. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +3 -3
  99. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +2 -2
  100. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +2 -2
  101. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +2 -2
  102. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +2 -2
  103. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +2 -2
  104. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +2 -2
  105. siliconcompiler/tools/openroad/scripts/common/procs.tcl +75 -1
  106. siliconcompiler/tools/openroad/scripts/common/read_input_files.tcl +1 -7
  107. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
  108. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
  109. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +1 -1
  110. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +3 -3
  111. siliconcompiler/tools/openroad/scripts/sc_show.tcl +6 -6
  112. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +10 -0
  113. siliconcompiler/tools/opensta/timing.py +11 -0
  114. siliconcompiler/tools/slang/__init__.py +13 -13
  115. siliconcompiler/tools/slang/elaborate.py +6 -6
  116. siliconcompiler/tools/slang/lint.py +1 -3
  117. siliconcompiler/tools/surelog/parse.py +4 -4
  118. siliconcompiler/tools/sv2v/convert.py +20 -3
  119. siliconcompiler/tools/verilator/compile.py +2 -2
  120. siliconcompiler/tools/verilator/verilator.py +3 -3
  121. siliconcompiler/tools/vpr/_xml_constraint.py +8 -8
  122. siliconcompiler/tools/vpr/place.py +1 -1
  123. siliconcompiler/tools/vpr/route.py +4 -4
  124. siliconcompiler/tools/vpr/screenshot.py +1 -1
  125. siliconcompiler/tools/vpr/show.py +5 -5
  126. siliconcompiler/tools/vpr/vpr.py +24 -24
  127. siliconcompiler/tools/xdm/convert.py +2 -2
  128. siliconcompiler/tools/xyce/simulate.py +1 -1
  129. siliconcompiler/tools/yosys/prepareLib.py +2 -2
  130. siliconcompiler/tools/yosys/sc_synth_asic.tcl +111 -63
  131. siliconcompiler/tools/yosys/screenshot.py +1 -1
  132. siliconcompiler/tools/yosys/syn_asic.py +7 -7
  133. siliconcompiler/toolscripts/_tools.json +12 -10
  134. siliconcompiler/toolscripts/rhel8/install-chisel.sh +9 -2
  135. siliconcompiler/toolscripts/rhel8/install-icarus.sh +10 -3
  136. siliconcompiler/toolscripts/rhel8/install-klayout.sh +8 -1
  137. siliconcompiler/toolscripts/rhel8/install-magic.sh +9 -2
  138. siliconcompiler/toolscripts/rhel8/install-montage.sh +1 -1
  139. siliconcompiler/toolscripts/rhel8/install-netgen.sh +9 -2
  140. siliconcompiler/toolscripts/rhel8/install-slang.sh +11 -4
  141. siliconcompiler/toolscripts/rhel8/install-surelog.sh +9 -2
  142. siliconcompiler/toolscripts/rhel8/install-sv2v.sh +11 -4
  143. siliconcompiler/toolscripts/rhel8/install-verible.sh +11 -3
  144. siliconcompiler/toolscripts/rhel8/install-verilator.sh +10 -3
  145. siliconcompiler/toolscripts/rhel8/install-xyce.sh +15 -10
  146. siliconcompiler/toolscripts/rhel9/install-chisel.sh +9 -2
  147. siliconcompiler/toolscripts/rhel9/install-ghdl.sh +9 -2
  148. siliconcompiler/toolscripts/rhel9/install-gtkwave.sh +10 -3
  149. siliconcompiler/toolscripts/rhel9/install-icarus.sh +10 -3
  150. siliconcompiler/toolscripts/rhel9/install-klayout.sh +8 -1
  151. siliconcompiler/toolscripts/rhel9/install-magic.sh +9 -2
  152. siliconcompiler/toolscripts/rhel9/install-montage.sh +1 -1
  153. siliconcompiler/toolscripts/rhel9/install-netgen.sh +9 -2
  154. siliconcompiler/toolscripts/rhel9/install-openroad.sh +16 -3
  155. siliconcompiler/toolscripts/rhel9/install-opensta.sh +17 -5
  156. siliconcompiler/toolscripts/rhel9/install-slang.sh +11 -4
  157. siliconcompiler/toolscripts/rhel9/install-surelog.sh +9 -2
  158. siliconcompiler/toolscripts/rhel9/install-sv2v.sh +11 -4
  159. siliconcompiler/toolscripts/rhel9/install-verible.sh +11 -3
  160. siliconcompiler/toolscripts/rhel9/install-verilator.sh +10 -3
  161. siliconcompiler/toolscripts/rhel9/install-vpr.sh +9 -2
  162. siliconcompiler/toolscripts/rhel9/install-xdm.sh +10 -2
  163. siliconcompiler/toolscripts/rhel9/install-xyce.sh +15 -10
  164. siliconcompiler/toolscripts/rhel9/install-yosys-moosic.sh +9 -2
  165. siliconcompiler/toolscripts/rhel9/install-yosys-parmys.sh +10 -3
  166. siliconcompiler/toolscripts/rhel9/install-yosys-slang.sh +10 -2
  167. siliconcompiler/toolscripts/rhel9/install-yosys.sh +9 -2
  168. siliconcompiler/toolscripts/ubuntu20/install-bambu.sh +10 -2
  169. siliconcompiler/toolscripts/ubuntu20/install-bluespec.sh +10 -3
  170. siliconcompiler/toolscripts/ubuntu20/install-chisel.sh +9 -2
  171. siliconcompiler/toolscripts/ubuntu20/install-ghdl.sh +9 -2
  172. siliconcompiler/toolscripts/ubuntu20/install-gtkwave.sh +9 -2
  173. siliconcompiler/toolscripts/ubuntu20/install-icarus.sh +9 -2
  174. siliconcompiler/toolscripts/ubuntu20/install-icepack.sh +9 -2
  175. siliconcompiler/toolscripts/ubuntu20/install-klayout.sh +8 -1
  176. siliconcompiler/toolscripts/ubuntu20/install-magic.sh +9 -2
  177. siliconcompiler/toolscripts/ubuntu20/install-montage.sh +1 -1
  178. siliconcompiler/toolscripts/ubuntu20/install-netgen.sh +9 -2
  179. siliconcompiler/toolscripts/ubuntu20/install-nextpnr.sh +9 -2
  180. siliconcompiler/toolscripts/ubuntu20/install-openroad.sh +16 -3
  181. siliconcompiler/toolscripts/ubuntu20/install-opensta.sh +16 -5
  182. siliconcompiler/toolscripts/ubuntu20/install-slang.sh +11 -4
  183. siliconcompiler/toolscripts/ubuntu20/install-slurm.sh +9 -2
  184. siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +10 -2
  185. siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +11 -4
  186. siliconcompiler/toolscripts/ubuntu20/install-verible.sh +11 -3
  187. siliconcompiler/toolscripts/ubuntu20/install-verilator.sh +9 -2
  188. siliconcompiler/toolscripts/ubuntu20/install-xdm.sh +10 -2
  189. siliconcompiler/toolscripts/ubuntu20/install-xyce.sh +13 -8
  190. siliconcompiler/toolscripts/ubuntu20/install-yosys-moosic.sh +9 -2
  191. siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +9 -2
  192. siliconcompiler/toolscripts/ubuntu22/install-bambu.sh +10 -2
  193. siliconcompiler/toolscripts/ubuntu22/install-bluespec.sh +10 -3
  194. siliconcompiler/toolscripts/ubuntu22/install-chisel.sh +9 -2
  195. siliconcompiler/toolscripts/ubuntu22/install-ghdl.sh +9 -2
  196. siliconcompiler/toolscripts/ubuntu22/install-gtkwave.sh +9 -2
  197. siliconcompiler/toolscripts/ubuntu22/install-icarus.sh +9 -2
  198. siliconcompiler/toolscripts/ubuntu22/install-icepack.sh +9 -2
  199. siliconcompiler/toolscripts/ubuntu22/install-klayout.sh +8 -1
  200. siliconcompiler/toolscripts/ubuntu22/install-magic.sh +9 -2
  201. siliconcompiler/toolscripts/ubuntu22/install-montage.sh +1 -1
  202. siliconcompiler/toolscripts/ubuntu22/install-netgen.sh +9 -2
  203. siliconcompiler/toolscripts/ubuntu22/install-nextpnr.sh +9 -2
  204. siliconcompiler/toolscripts/ubuntu22/install-openroad.sh +16 -3
  205. siliconcompiler/toolscripts/ubuntu22/install-opensta.sh +17 -5
  206. siliconcompiler/toolscripts/ubuntu22/install-slang.sh +11 -4
  207. siliconcompiler/toolscripts/ubuntu22/install-slurm.sh +9 -2
  208. siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +10 -2
  209. siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +11 -4
  210. siliconcompiler/toolscripts/ubuntu22/install-verible.sh +11 -3
  211. siliconcompiler/toolscripts/ubuntu22/install-verilator.sh +9 -2
  212. siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +9 -4
  213. siliconcompiler/toolscripts/ubuntu22/install-xdm.sh +10 -2
  214. siliconcompiler/toolscripts/ubuntu22/install-xyce.sh +13 -8
  215. siliconcompiler/toolscripts/ubuntu22/install-yosys-moosic.sh +9 -2
  216. siliconcompiler/toolscripts/ubuntu22/install-yosys-parmys.sh +10 -3
  217. siliconcompiler/toolscripts/ubuntu22/install-yosys-slang.sh +10 -2
  218. siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +9 -2
  219. siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +12 -4
  220. siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh +10 -3
  221. siliconcompiler/toolscripts/ubuntu24/install-chisel.sh +9 -2
  222. siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh +9 -2
  223. siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh +9 -2
  224. siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +9 -2
  225. siliconcompiler/toolscripts/ubuntu24/install-icepack.sh +9 -2
  226. siliconcompiler/toolscripts/ubuntu24/install-klayout.sh +8 -1
  227. siliconcompiler/toolscripts/ubuntu24/install-magic.sh +9 -2
  228. siliconcompiler/toolscripts/ubuntu24/install-montage.sh +1 -1
  229. siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +9 -2
  230. siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh +9 -2
  231. siliconcompiler/toolscripts/ubuntu24/install-openroad.sh +16 -3
  232. siliconcompiler/toolscripts/ubuntu24/install-opensta.sh +17 -5
  233. siliconcompiler/toolscripts/ubuntu24/install-slang.sh +11 -4
  234. siliconcompiler/toolscripts/ubuntu24/install-slurm.sh +9 -2
  235. siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +10 -2
  236. siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +11 -4
  237. siliconcompiler/toolscripts/ubuntu24/install-verible.sh +11 -3
  238. siliconcompiler/toolscripts/ubuntu24/install-verilator.sh +9 -2
  239. siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +9 -4
  240. siliconcompiler/toolscripts/ubuntu24/install-xdm.sh +10 -2
  241. siliconcompiler/toolscripts/ubuntu24/install-xyce.sh +13 -8
  242. siliconcompiler/toolscripts/ubuntu24/install-yosys-moosic.sh +9 -2
  243. siliconcompiler/toolscripts/ubuntu24/install-yosys-parmys.sh +10 -3
  244. siliconcompiler/toolscripts/ubuntu24/install-yosys-slang.sh +10 -2
  245. siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +9 -2
  246. siliconcompiler/utils/__init__.py +19 -112
  247. siliconcompiler/utils/flowgraph.py +244 -0
  248. siliconcompiler/{issue.py → utils/issue.py} +18 -25
  249. siliconcompiler/utils/logging.py +3 -4
  250. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/METADATA +9 -8
  251. siliconcompiler-0.33.1.dist-info/RECORD +488 -0
  252. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/WHEEL +1 -1
  253. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/entry_points.txt +8 -8
  254. siliconcompiler/schema/schema_obj.py +0 -1936
  255. siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -29
  256. siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -61
  257. siliconcompiler-0.32.3.dist-info/RECORD +0 -470
  258. /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
  259. /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
  260. /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
  261. /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
  262. /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
  263. /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
  264. /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
  265. /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
  266. /siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +0 -0
  267. /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
  268. /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
  269. /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
  270. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
  271. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
  272. /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
  273. /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
  274. /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
  275. /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
  276. /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
  277. /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
  278. /siliconcompiler/{units.py → utils/units.py} +0 -0
  279. {siliconcompiler-0.32.3.dist-info → siliconcompiler-0.33.1.dist-info}/licenses/LICENSE +0 -0
  280. {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
- 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')
@@ -257,10 +257,10 @@ class CellArea:
257
257
  def __init__(self):
258
258
  self.__areas = {}
259
259
 
260
- def addCell(self, name=None, module=None,
261
- cellarea=None, cellcount=None,
262
- macroarea=None, macrocount=None,
263
- stdcellarea=None, stdcellcount=None):
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 writeReport(self, path):
297
+ def write_report(self, path):
298
298
  with open(path, 'w') as f:
299
299
  json.dump(self.__areas, f, indent=4)
@@ -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:
@@ -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.warn(f"Unable to find module {module} source files at: {BSC_LIB}")
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 _get_pruned_node_inputs
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
- return _get_pruned_node_inputs(chip, flow, (step, index))
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 flowgraph._get_flowgraph_entry_nodes(chip, 'asicflow'):
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 = [flowgraph._gather_outputs(chip, *node) for node in in_nodes]
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 = [flowgraph._gather_outputs(chip, *node) for node in in_nodes]
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 flowgraph, SiliconCompilerError
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 = [flowgraph._gather_outputs(chip, *node) for node in in_nodes]
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 flowgraph
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 = [flowgraph._gather_outputs(chip, *node) for node in in_nodes]
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 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
+ 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='type')
56
- goal = Schema._normalize_value(goal, metric_type, "", None)
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 = [flowgraph._gather_outputs(chip, *node) for node in in_nodes]
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
- runMain = ["runMain"]
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
- runMain.append(f"{app}")
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
- runMain.extend(chip.get('tool', tool, 'task', task, 'var', 'argument',
120
- step=step, index=index))
121
- runMain.append("--")
119
+ run_main.extend(chip.get('tool', tool, 'task', task, 'var', 'argument',
120
+ step=step, index=index))
121
+ run_main.append("--")
122
122
 
123
- runMain.append("--target-dir chisel-output")
123
+ run_main.extend(["--target-dir", "chisel-output"])
124
124
  else:
125
125
  # Use built in driver
126
- runMain.append("SCDriver")
127
- runMain.append(f"--module {chip.top(step=step, index=index)}")
126
+ run_main.append("SCDriver")
127
+ run_main.extend(["--module", chip.top(step=step, index=index)])
128
128
 
129
- runMain.append(f"--output-file ../outputs/{design}.v")
129
+ run_main.extend(["--output-file", f"../outputs/{design}.v"])
130
130
 
131
- return [f'"{" ".join(runMain)}"']
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.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)
@@ -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
- import xml.etree.ElementTree as ET
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 = ET.fromstring(f.read())
147
+ drc_report = ElementTree.fromstring(f.read())
148
148
  if drc_report is None:
149
149
  drc_db = []
150
150
 
@@ -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,
@@ -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
- layoutOptions = tech.load_layout_options
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
- layoutOptions.lefdef_config.produce_blockages = True
25
- layoutOptions.lefdef_config.produce_cell_outlines = True
26
- layoutOptions.lefdef_config.produce_obstructions = True
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
- layoutOptions.lefdef_config.macro_resolution_mode = 1
29
+ layout_options.lefdef_config.macro_resolution_mode = 1
30
30
 
31
- tech.load_layout_options = layoutOptions
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
- layoutOptions = tech.load_layout_options
87
+ layout_options = tech.load_layout_options
89
88
 
90
- layoutOptions.lefdef_config.macro_resolution_mode = 1
91
- layoutOptions.lefdef_config.via_cellname_prefix = "VIA_"
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 layoutOptions.lefdef_config.lef_files:
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
- layoutOptions.lefdef_config.lef_files = list(pathed_files)
104
- layoutOptions.lefdef_config.read_lef_with_def = False
105
- layoutOptions.lefdef_config.dbu = tech.dbu
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
- layoutOptions.lefdef_config.produce_fills = True
106
+ layout_options.lefdef_config.produce_fills = True
108
107
 
109
- for lef_file in layoutOptions.lefdef_config.lef_files:
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 = layoutOptions.lefdef_config.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
- layoutOptions.lefdef_config.map_file = map_file
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 = layoutOptions
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
- 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():
@@ -34,7 +34,7 @@ import argparse
34
34
  from siliconcompiler import sc_open
35
35
 
36
36
 
37
- def count_LVS_failures(filename):
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 = count_LVS_failures(args.file)
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.count_LVS_failures(lvs_report)
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', "", 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
 
@@ -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.addCell(
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.writeReport("reports/hierarchical_cell_area.json")
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)