siliconcompiler 0.32.2__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 (277) hide show
  1. siliconcompiler/__init__.py +19 -2
  2. siliconcompiler/_metadata.py +3 -2
  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 +319 -345
  12. siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +2 -2
  13. siliconcompiler/flowgraph.py +803 -515
  14. siliconcompiler/fpga.py +84 -0
  15. siliconcompiler/metric.py +420 -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 +449 -0
  20. siliconcompiler/remote/client.py +61 -19
  21. siliconcompiler/remote/schema.py +116 -112
  22. siliconcompiler/remote/server.py +3 -5
  23. siliconcompiler/report/__init__.py +3 -2
  24. siliconcompiler/report/dashboard/__init__.py +61 -170
  25. siliconcompiler/report/dashboard/cli/__init__.py +79 -0
  26. siliconcompiler/report/dashboard/cli/board.py +895 -0
  27. siliconcompiler/report/dashboard/web/__init__.py +196 -0
  28. siliconcompiler/report/dashboard/{components → web/components}/__init__.py +9 -8
  29. siliconcompiler/report/dashboard/{components → web/components}/flowgraph.py +3 -3
  30. siliconcompiler/report/dashboard/{components → web/components}/graph.py +7 -4
  31. siliconcompiler/report/dashboard/{layouts → web/layouts}/__init__.py +3 -3
  32. siliconcompiler/report/dashboard/{layouts → web/layouts}/_common.py +1 -1
  33. siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph.py +5 -5
  34. siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_node_tab.py +6 -6
  35. siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_sac_tabs.py +6 -6
  36. siliconcompiler/report/dashboard/{state.py → web/state.py} +1 -1
  37. siliconcompiler/report/dashboard/{utils → web/utils}/__init__.py +4 -3
  38. siliconcompiler/report/dashboard/{viewer.py → web/viewer.py} +4 -4
  39. siliconcompiler/report/html_report.py +2 -3
  40. siliconcompiler/report/report.py +13 -7
  41. siliconcompiler/report/summary_image.py +1 -1
  42. siliconcompiler/report/summary_table.py +3 -3
  43. siliconcompiler/report/utils.py +11 -10
  44. siliconcompiler/scheduler/__init__.py +153 -286
  45. siliconcompiler/scheduler/run_node.py +2 -1
  46. siliconcompiler/scheduler/send_messages.py +4 -4
  47. siliconcompiler/scheduler/slurm.py +2 -2
  48. siliconcompiler/schema/__init__.py +19 -2
  49. siliconcompiler/schema/baseschema.py +493 -0
  50. siliconcompiler/schema/cmdlineschema.py +250 -0
  51. siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
  52. siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
  53. siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
  54. siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
  55. siliconcompiler/schema/editableschema.py +136 -0
  56. siliconcompiler/schema/journalingschema.py +238 -0
  57. siliconcompiler/schema/namedschema.py +41 -0
  58. siliconcompiler/schema/packageschema.py +101 -0
  59. siliconcompiler/schema/parameter.py +791 -0
  60. siliconcompiler/schema/parametertype.py +323 -0
  61. siliconcompiler/schema/parametervalue.py +736 -0
  62. siliconcompiler/schema/safeschema.py +37 -0
  63. siliconcompiler/schema/schema_cfg.py +109 -1789
  64. siliconcompiler/schema/utils.py +5 -68
  65. siliconcompiler/schema_obj.py +119 -0
  66. siliconcompiler/tool.py +1308 -0
  67. siliconcompiler/tools/_common/__init__.py +8 -10
  68. siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
  69. siliconcompiler/tools/bluespec/convert.py +7 -7
  70. siliconcompiler/tools/builtin/_common.py +1 -1
  71. siliconcompiler/tools/builtin/concatenate.py +2 -2
  72. siliconcompiler/tools/builtin/minimum.py +1 -1
  73. siliconcompiler/tools/builtin/mux.py +2 -1
  74. siliconcompiler/tools/builtin/nop.py +1 -1
  75. siliconcompiler/tools/builtin/verify.py +6 -4
  76. siliconcompiler/tools/chisel/convert.py +4 -4
  77. siliconcompiler/tools/genfasm/bitstream.py +3 -3
  78. siliconcompiler/tools/ghdl/convert.py +1 -1
  79. siliconcompiler/tools/icarus/compile.py +4 -4
  80. siliconcompiler/tools/icepack/bitstream.py +6 -1
  81. siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
  82. siliconcompiler/tools/klayout/klayout_export.py +0 -1
  83. siliconcompiler/tools/klayout/klayout_utils.py +3 -10
  84. siliconcompiler/tools/nextpnr/apr.py +6 -1
  85. siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
  86. siliconcompiler/tools/openroad/_apr.py +17 -0
  87. siliconcompiler/tools/openroad/fillmetal_insertion.py +14 -14
  88. siliconcompiler/tools/openroad/rdlroute.py +3 -3
  89. siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
  90. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
  91. siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +3 -3
  92. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +3 -3
  93. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +3 -3
  94. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +3 -3
  95. siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +3 -3
  96. siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +3 -3
  97. siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +4 -4
  98. siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +3 -3
  99. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +3 -3
  100. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +3 -3
  101. siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +4 -4
  102. siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +3 -3
  103. siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +3 -3
  104. siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +3 -3
  105. siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +3 -3
  106. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +4 -4
  107. siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +3 -3
  108. siliconcompiler/tools/openroad/scripts/common/procs.tcl +58 -2
  109. siliconcompiler/tools/openroad/scripts/common/reports.tcl +2 -2
  110. siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
  111. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
  112. siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +2 -2
  113. siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +4 -4
  114. siliconcompiler/tools/openroad/scripts/sc_show.tcl +7 -7
  115. siliconcompiler/tools/opensta/__init__.py +1 -1
  116. siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +1 -1
  117. siliconcompiler/tools/opensta/scripts/sc_procs.tcl +16 -0
  118. siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +1 -1
  119. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +35 -7
  120. siliconcompiler/tools/opensta/timing.py +6 -2
  121. siliconcompiler/tools/slang/__init__.py +10 -10
  122. siliconcompiler/tools/surelog/parse.py +4 -4
  123. siliconcompiler/tools/sv2v/convert.py +20 -3
  124. siliconcompiler/tools/verilator/compile.py +2 -2
  125. siliconcompiler/tools/verilator/verilator.py +3 -3
  126. siliconcompiler/tools/vpr/place.py +1 -1
  127. siliconcompiler/tools/vpr/route.py +4 -4
  128. siliconcompiler/tools/vpr/screenshot.py +1 -1
  129. siliconcompiler/tools/vpr/show.py +5 -5
  130. siliconcompiler/tools/vpr/vpr.py +24 -24
  131. siliconcompiler/tools/xdm/convert.py +2 -2
  132. siliconcompiler/tools/xyce/simulate.py +1 -1
  133. siliconcompiler/tools/yosys/sc_synth_asic.tcl +104 -90
  134. siliconcompiler/tools/yosys/syn_asic.py +13 -4
  135. siliconcompiler/toolscripts/_tools.json +12 -7
  136. siliconcompiler/toolscripts/rhel8/install-chisel.sh +2 -0
  137. siliconcompiler/toolscripts/rhel8/install-icarus.sh +1 -0
  138. siliconcompiler/toolscripts/rhel8/install-klayout.sh +2 -0
  139. siliconcompiler/toolscripts/rhel8/install-magic.sh +1 -2
  140. siliconcompiler/toolscripts/rhel8/install-netgen.sh +1 -1
  141. siliconcompiler/toolscripts/rhel8/install-slang.sh +2 -0
  142. siliconcompiler/toolscripts/rhel8/install-surelog.sh +3 -1
  143. siliconcompiler/toolscripts/rhel8/install-sv2v.sh +1 -0
  144. siliconcompiler/toolscripts/rhel8/install-verible.sh +2 -0
  145. siliconcompiler/toolscripts/rhel8/install-verilator.sh +1 -0
  146. siliconcompiler/toolscripts/rhel8/install-xyce.sh +2 -0
  147. siliconcompiler/toolscripts/rhel9/install-chisel.sh +2 -0
  148. siliconcompiler/toolscripts/rhel9/install-ghdl.sh +1 -0
  149. siliconcompiler/toolscripts/rhel9/install-gtkwave.sh +1 -0
  150. siliconcompiler/toolscripts/rhel9/install-icarus.sh +1 -0
  151. siliconcompiler/toolscripts/rhel9/install-klayout.sh +2 -0
  152. siliconcompiler/toolscripts/rhel9/install-magic.sh +1 -2
  153. siliconcompiler/toolscripts/rhel9/install-netgen.sh +1 -1
  154. siliconcompiler/toolscripts/rhel9/install-openroad.sh +2 -0
  155. siliconcompiler/toolscripts/rhel9/install-opensta.sh +76 -0
  156. siliconcompiler/toolscripts/rhel9/install-slang.sh +3 -1
  157. siliconcompiler/toolscripts/rhel9/install-surelog.sh +2 -1
  158. siliconcompiler/toolscripts/rhel9/install-sv2v.sh +1 -0
  159. siliconcompiler/toolscripts/rhel9/install-verible.sh +2 -0
  160. siliconcompiler/toolscripts/rhel9/install-verilator.sh +1 -0
  161. siliconcompiler/toolscripts/rhel9/install-vpr.sh +2 -0
  162. siliconcompiler/toolscripts/rhel9/install-xdm.sh +2 -0
  163. siliconcompiler/toolscripts/rhel9/install-xyce.sh +2 -0
  164. siliconcompiler/toolscripts/rhel9/install-yosys-moosic.sh +2 -0
  165. siliconcompiler/toolscripts/rhel9/install-yosys-parmys.sh +2 -0
  166. siliconcompiler/toolscripts/rhel9/install-yosys-slang.sh +3 -1
  167. siliconcompiler/toolscripts/rhel9/install-yosys.sh +2 -0
  168. siliconcompiler/toolscripts/ubuntu20/install-bambu.sh +2 -0
  169. siliconcompiler/toolscripts/ubuntu20/install-bluespec.sh +2 -0
  170. siliconcompiler/toolscripts/ubuntu20/install-chisel.sh +2 -0
  171. siliconcompiler/toolscripts/ubuntu20/install-ghdl.sh +2 -0
  172. siliconcompiler/toolscripts/ubuntu20/install-gtkwave.sh +2 -0
  173. siliconcompiler/toolscripts/ubuntu20/install-icarus.sh +2 -0
  174. siliconcompiler/toolscripts/ubuntu20/install-icepack.sh +2 -0
  175. siliconcompiler/toolscripts/ubuntu20/install-klayout.sh +2 -0
  176. siliconcompiler/toolscripts/ubuntu20/install-magic.sh +2 -0
  177. siliconcompiler/toolscripts/ubuntu20/install-netgen.sh +2 -0
  178. siliconcompiler/toolscripts/ubuntu20/install-nextpnr.sh +1 -3
  179. siliconcompiler/toolscripts/ubuntu20/install-openroad.sh +2 -0
  180. siliconcompiler/toolscripts/ubuntu20/install-opensta.sh +72 -0
  181. siliconcompiler/toolscripts/ubuntu20/install-slang.sh +3 -1
  182. siliconcompiler/toolscripts/ubuntu20/install-slurm.sh +2 -0
  183. siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +3 -1
  184. siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +1 -1
  185. siliconcompiler/toolscripts/ubuntu20/install-verible.sh +2 -0
  186. siliconcompiler/toolscripts/ubuntu20/install-verilator.sh +2 -0
  187. siliconcompiler/toolscripts/ubuntu20/install-xdm.sh +2 -0
  188. siliconcompiler/toolscripts/ubuntu20/install-xyce.sh +2 -0
  189. siliconcompiler/toolscripts/ubuntu20/install-yosys-moosic.sh +2 -0
  190. siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +2 -0
  191. siliconcompiler/toolscripts/ubuntu22/install-bambu.sh +2 -0
  192. siliconcompiler/toolscripts/ubuntu22/install-bluespec.sh +2 -0
  193. siliconcompiler/toolscripts/ubuntu22/install-chisel.sh +2 -0
  194. siliconcompiler/toolscripts/ubuntu22/install-ghdl.sh +2 -0
  195. siliconcompiler/toolscripts/ubuntu22/install-gtkwave.sh +2 -0
  196. siliconcompiler/toolscripts/ubuntu22/install-icarus.sh +2 -0
  197. siliconcompiler/toolscripts/ubuntu22/install-icepack.sh +2 -0
  198. siliconcompiler/toolscripts/ubuntu22/install-klayout.sh +2 -0
  199. siliconcompiler/toolscripts/ubuntu22/install-magic.sh +2 -0
  200. siliconcompiler/toolscripts/ubuntu22/install-netgen.sh +2 -0
  201. siliconcompiler/toolscripts/ubuntu22/install-nextpnr.sh +1 -2
  202. siliconcompiler/toolscripts/ubuntu22/install-openroad.sh +2 -0
  203. siliconcompiler/toolscripts/ubuntu22/install-opensta.sh +72 -0
  204. siliconcompiler/toolscripts/ubuntu22/install-slang.sh +3 -1
  205. siliconcompiler/toolscripts/ubuntu22/install-slurm.sh +2 -0
  206. siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +3 -1
  207. siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +1 -1
  208. siliconcompiler/toolscripts/ubuntu22/install-verible.sh +2 -0
  209. siliconcompiler/toolscripts/ubuntu22/install-verilator.sh +2 -0
  210. siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +2 -2
  211. siliconcompiler/toolscripts/ubuntu22/install-xdm.sh +2 -0
  212. siliconcompiler/toolscripts/ubuntu22/install-xyce.sh +2 -0
  213. siliconcompiler/toolscripts/ubuntu22/install-yosys-moosic.sh +2 -0
  214. siliconcompiler/toolscripts/ubuntu22/install-yosys-parmys.sh +2 -0
  215. siliconcompiler/toolscripts/ubuntu22/install-yosys-slang.sh +3 -1
  216. siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +2 -0
  217. siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +2 -0
  218. siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh +2 -0
  219. siliconcompiler/toolscripts/ubuntu24/install-chisel.sh +2 -0
  220. siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh +2 -0
  221. siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh +2 -0
  222. siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +2 -0
  223. siliconcompiler/toolscripts/ubuntu24/install-icepack.sh +2 -0
  224. siliconcompiler/toolscripts/ubuntu24/install-klayout.sh +2 -0
  225. siliconcompiler/toolscripts/ubuntu24/install-magic.sh +2 -0
  226. siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +2 -0
  227. siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh +1 -3
  228. siliconcompiler/toolscripts/ubuntu24/install-openroad.sh +2 -0
  229. siliconcompiler/toolscripts/ubuntu24/install-opensta.sh +72 -0
  230. siliconcompiler/toolscripts/ubuntu24/install-slang.sh +3 -1
  231. siliconcompiler/toolscripts/ubuntu24/install-slurm.sh +2 -0
  232. siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +3 -1
  233. siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +1 -1
  234. siliconcompiler/toolscripts/ubuntu24/install-verible.sh +2 -0
  235. siliconcompiler/toolscripts/ubuntu24/install-verilator.sh +2 -0
  236. siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +2 -2
  237. siliconcompiler/toolscripts/ubuntu24/install-xdm.sh +2 -0
  238. siliconcompiler/toolscripts/ubuntu24/install-xyce.sh +2 -0
  239. siliconcompiler/toolscripts/ubuntu24/install-yosys-moosic.sh +2 -0
  240. siliconcompiler/toolscripts/ubuntu24/install-yosys-parmys.sh +2 -0
  241. siliconcompiler/toolscripts/ubuntu24/install-yosys-slang.sh +3 -1
  242. siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +2 -0
  243. siliconcompiler/utils/__init__.py +8 -112
  244. siliconcompiler/utils/flowgraph.py +339 -0
  245. siliconcompiler/{issue.py → utils/issue.py} +7 -4
  246. siliconcompiler/utils/logging.py +86 -33
  247. {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/METADATA +10 -8
  248. siliconcompiler-0.33.0.dist-info/RECORD +487 -0
  249. {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/WHEEL +1 -1
  250. {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/entry_points.txt +8 -8
  251. siliconcompiler/schema/schema_obj.py +0 -1936
  252. siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -27
  253. siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -59
  254. siliconcompiler-0.32.2.dist-info/RECORD +0 -464
  255. /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
  256. /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
  257. /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
  258. /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
  259. /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
  260. /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
  261. /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
  262. /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
  263. /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
  264. /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
  265. /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
  266. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
  267. /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
  268. /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
  269. /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
  270. /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
  271. /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
  272. /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
  273. /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
  274. /siliconcompiler/report/dashboard/{utils → web/utils}/file_utils.py +0 -0
  275. /siliconcompiler/{units.py → utils/units.py} +0 -0
  276. {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/licenses/LICENSE +0 -0
  277. {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,18 @@
1
1
  from siliconcompiler._common import NodeStatus, SiliconCompilerError
2
2
 
3
3
  from siliconcompiler.utils import sc_open
4
+ from siliconcompiler.schema_obj import SchemaTmp as Schema
5
+
6
+ from siliconcompiler.record import RecordSchema
7
+ from siliconcompiler.metric import MetricSchema
8
+ from siliconcompiler.pdk import PDKSchema
9
+ from siliconcompiler.flowgraph import FlowgraphSchema
10
+ from siliconcompiler.tool import ToolSchema
11
+ from siliconcompiler.checklist import ChecklistSchema
12
+ from siliconcompiler.asic import ASICSchema
13
+ from siliconcompiler.fpga import FPGASchema
4
14
 
5
15
  from siliconcompiler.core import Chip
6
- from siliconcompiler.schema import Schema
7
16
 
8
17
  from siliconcompiler._metadata import version as __version__
9
18
 
@@ -20,5 +29,13 @@ __all__ = [
20
29
  "Flow",
21
30
  "Checklist",
22
31
  "Schema",
23
- "sc_open"
32
+ "sc_open",
33
+ "RecordSchema",
34
+ "MetricSchema",
35
+ "PDKSchema",
36
+ "FlowgraphSchema",
37
+ "ToolSchema",
38
+ "ChecklistSchema",
39
+ "ASICSchema",
40
+ "FPGASchema"
24
41
  ]
@@ -1,5 +1,5 @@
1
1
  # Version number following semver standard.
2
- version = '0.32.2'
2
+ version = '0.33.0'
3
3
 
4
4
  # Default server address for remote runs, if unspecified.
5
5
  default_server = 'https://server.siliconcompiler.com'
@@ -21,7 +21,8 @@ authors = [
21
21
  'Aulihan Teng',
22
22
  'Peter Grossmann',
23
23
  'Gabriel Aguirre',
24
- 'Martin Troiber'
24
+ 'Martin Troiber',
25
+ 'Ciprian Antoci'
25
26
  ]
26
27
 
27
28
  # CLI entry banner autogenerated using pyfiglet.
@@ -12,14 +12,14 @@ from siliconcompiler import SiliconCompilerError
12
12
 
13
13
  def _infer_designname(chip):
14
14
  topfile = None
15
- sourcesets = chip.getkeys('input')
15
+ sourcesets = list(chip.getkeys('input'))
16
16
  for sourceset in reversed(('rtl', 'hll')):
17
17
  if sourceset in sourcesets:
18
18
  sourcesets.remove(sourceset)
19
19
  sourcesets.insert(0, sourceset)
20
20
  for sourceset in sourcesets:
21
21
  for filetype in chip.getkeys('input', sourceset):
22
- all_vals = chip.schema._getvals('input', sourceset, filetype)
22
+ all_vals = chip.schema.get('input', sourceset, filetype, field=None).getvalues()
23
23
  if all_vals:
24
24
  # just look at first value
25
25
  sources, _, _ = all_vals[0]
@@ -10,7 +10,7 @@ import os.path
10
10
  from collections.abc import Container
11
11
  from pathlib import Path
12
12
  import siliconcompiler
13
- from siliconcompiler.scheduler import _get_machine_info
13
+ from siliconcompiler import RecordSchema
14
14
 
15
15
 
16
16
  class ChoiceOptional(Container):
@@ -71,7 +71,7 @@ def show_tool(tool, script):
71
71
 
72
72
 
73
73
  def _get_os_name():
74
- machine_info = _get_machine_info()
74
+ machine_info = RecordSchema.get_machine_information()
75
75
  system = machine_info.get('system', "").lower()
76
76
  if system == 'linux':
77
77
  distro = machine_info.get('distro', "").lower()
@@ -91,7 +91,7 @@ def _get_os_name():
91
91
 
92
92
 
93
93
  def print_machine_info():
94
- machine_info = _get_machine_info()
94
+ machine_info = RecordSchema.get_machine_information()
95
95
  mapped_os = _get_os_name()
96
96
 
97
97
  print("System: ", machine_info.get('system', None))
@@ -5,7 +5,7 @@ import siliconcompiler
5
5
  import tarfile
6
6
  import json
7
7
  from siliconcompiler.scheduler import _runtask, _executenode
8
- from siliconcompiler.issue import generate_testcase
8
+ from siliconcompiler.utils.issue import generate_testcase
9
9
  from siliconcompiler.tools._common import get_tool_task
10
10
 
11
11
 
@@ -6,8 +6,7 @@ from siliconcompiler import Chip
6
6
  from siliconcompiler import SiliconCompilerError
7
7
  from siliconcompiler.remote.client import Client, ConfigureClient
8
8
  from siliconcompiler.scheduler import _finalize_run
9
- from siliconcompiler.flowgraph import _get_flowgraph_entry_nodes, _get_flowgraph_node_outputs, \
10
- nodes_to_execute
9
+ from siliconcompiler.utils.flowgraph import nodes_to_execute
11
10
 
12
11
 
13
12
  def main():
@@ -158,9 +157,10 @@ To delete a job, use:
158
157
  elif args['reconnect']:
159
158
  # Start from successors of entry nodes, so entry nodes are not fetched from remote.
160
159
  flow = chip.get('option', 'flow')
161
- entry_nodes = _get_flowgraph_entry_nodes(chip, flow)
160
+ entry_nodes = chip.schema.get("flowgraph", flow, field="schema").get_entry_nodes()
162
161
  for entry_node in entry_nodes:
163
- outputs = _get_flowgraph_node_outputs(chip, flow, entry_node)
162
+ outputs = chip.schema.get("flowgraph", flow,
163
+ field='schema').get_node_outputs(*entry_node)
164
164
  chip.set('option', 'from', list(map(lambda node: node[0], outputs)))
165
165
  # Enter the remote run loop.
166
166
  try:
@@ -84,7 +84,7 @@ def main():
84
84
  input_mode = []
85
85
  for fileset in chip.getkeys('input'):
86
86
  for mode in chip.getkeys('input', fileset):
87
- if chip.schema._getvals('input', fileset, mode):
87
+ if chip.schema.get('input', fileset, mode, field=None).getvalues():
88
88
  input_mode = [('input', fileset, mode)]
89
89
 
90
90
  filename = None
@@ -97,7 +97,7 @@ def main():
97
97
  def get_file_from_keys():
98
98
  for ext in check_ext:
99
99
  for key in input_mode:
100
- for files, _, _ in chip.schema._getvals(*key):
100
+ for files, _, _ in chip.schema.get(*key, field=None).getvalues():
101
101
  for file in files:
102
102
  if get_file_ext(file) == ext:
103
103
  return file
@@ -86,7 +86,8 @@ def main():
86
86
 
87
87
  pythonversion = set()
88
88
  nodes = set()
89
- for version, step, index in chip.schema._getvals('history', jobname, 'record', 'pythonversion'):
89
+ for version, step, index in chip.schema.get('history', jobname, 'record', 'pythonversion',
90
+ field=None).getvalues():
90
91
  pythonversion.add(version)
91
92
  nodes.add((step, index))
92
93
 
@@ -127,7 +128,8 @@ def main():
127
128
  os.makedirs(os.path.dirname(path), exist_ok=True)
128
129
 
129
130
  starttimes = set()
130
- for starttime, step, index in chip.schema._getvals('history', jobname, 'record', 'starttime'):
131
+ for starttime, step, index in chip.schema.get('history', jobname, 'record', 'starttime',
132
+ field=None).getvalues():
131
133
  starttimes.add(datetime.strptime(starttime, '%Y-%m-%d %H:%M:%S'))
132
134
  starttime = min(starttimes).strftime('%Y-%m-%d %H:%M:%S')
133
135
 
@@ -162,7 +164,7 @@ def main():
162
164
  fd.flush()
163
165
  script = convert_base64(compress(fd.getvalue()))
164
166
 
165
- manifest = convert_base64(compress(json.dumps(chip.schema.cfg, indent=2)))
167
+ manifest = convert_base64(compress(json.dumps(chip.schema.getdict(), indent=2)))
166
168
 
167
169
  tool_info = []
168
170
  for tool, version in tools.items():
@@ -0,0 +1,120 @@
1
+ from siliconcompiler.schema import BaseSchema
2
+ from siliconcompiler.schema import EditableSchema, Parameter, PerNode, Scope
3
+ from siliconcompiler.schema.utils import trim
4
+
5
+
6
+ class ASICSchema(BaseSchema):
7
+ def __init__(self):
8
+ super().__init__()
9
+
10
+ schema_asic(self)
11
+
12
+
13
+ ###############################################################################
14
+ # ASIC
15
+ ###############################################################################
16
+ def schema_asic(schema):
17
+ schema = EditableSchema(schema)
18
+
19
+ schema.insert(
20
+ 'logiclib',
21
+ Parameter(
22
+ '[str]',
23
+ scope=Scope.JOB,
24
+ pernode=PerNode.OPTIONAL,
25
+ shorthelp="ASIC: logic libraries",
26
+ switch="-asic_logiclib <str>",
27
+ example=["cli: -asic_logiclib nangate45",
28
+ "api: chip.set('asic', 'logiclib', 'nangate45')"],
29
+ help=trim("""List of all selected logic libraries libraries
30
+ to use for optimization for a given library architecture
31
+ (9T, 11T, etc).""")))
32
+
33
+ schema.insert(
34
+ 'macrolib',
35
+ Parameter(
36
+ '[str]',
37
+ scope=Scope.JOB,
38
+ pernode=PerNode.OPTIONAL,
39
+ shorthelp="ASIC: macro libraries",
40
+ switch="-asic_macrolib <str>",
41
+ example=["cli: -asic_macrolib sram64x1024",
42
+ "api: chip.set('asic', 'macrolib', 'sram64x1024')"],
43
+ help=trim("""
44
+ List of macro libraries to be linked in during synthesis and place
45
+ and route. Macro libraries are used for resolving instances but are
46
+ not used as targets for logic synthesis.""")))
47
+
48
+ schema.insert(
49
+ 'delaymodel',
50
+ Parameter(
51
+ 'str',
52
+ scope=Scope.JOB,
53
+ pernode=PerNode.OPTIONAL,
54
+ shorthelp="ASIC: delay model",
55
+ switch="-asic_delaymodel <str>",
56
+ example=["cli: -asic_delaymodel ccs",
57
+ "api: chip.set('asic', 'delaymodel', 'ccs')"],
58
+ help=trim("""
59
+ Delay model to use for the target libs. Commonly supported values
60
+ are nldm and ccs.""")))
61
+
62
+ # TODO: Expand on the exact definitions of these types of cells.
63
+ # minimize typing
64
+ names = ['decap',
65
+ 'tie',
66
+ 'hold',
67
+ 'clkbuf',
68
+ 'clkgate',
69
+ 'clklogic',
70
+ 'dontuse',
71
+ 'filler',
72
+ 'tap',
73
+ 'endcap',
74
+ 'antenna']
75
+
76
+ for item in names:
77
+ schema.insert(
78
+ 'cells', item,
79
+ Parameter(
80
+ '[str]',
81
+ pernode=PerNode.OPTIONAL,
82
+ shorthelp=f"ASIC: {item} cell list",
83
+ switch=f"-asic_cells_{item} '<str>'",
84
+ example=[
85
+ f"cli: -asic_cells_{item} '*eco*'",
86
+ f"api: chip.set('asic', 'cells', '{item}', '*eco*')"],
87
+ help=trim("""
88
+ List of cells grouped by a property that can be accessed
89
+ directly by the designer and tools. The example below shows how
90
+ all cells containing the string 'eco' could be marked as dont use
91
+ for the tool.""")))
92
+
93
+ schema.insert(
94
+ 'libarch',
95
+ Parameter(
96
+ 'str',
97
+ pernode=PerNode.OPTIONAL,
98
+ shorthelp="ASIC: library architecture",
99
+ switch="-asic_libarch '<str>'",
100
+ example=[
101
+ "cli: -asic_libarch '12track'",
102
+ "api: chip.set('asic', 'libarch', '12track')"],
103
+ help=trim("""
104
+ The library architecture (e.g. library height) used to build the
105
+ design. For example a PDK with support for 9 and 12 track libraries
106
+ might have 'libarchs' called 9t and 12t.""")))
107
+
108
+ libarch = 'default'
109
+ schema.insert(
110
+ 'site', libarch,
111
+ Parameter(
112
+ '[str]',
113
+ pernode=PerNode.OPTIONAL,
114
+ shorthelp="ASIC: library sites",
115
+ switch="-asic_site 'libarch <str>'",
116
+ example=[
117
+ "cli: -asic_site '12track Site_12T'",
118
+ "api: chip.set('asic', 'site', '12track', 'Site_12T')"],
119
+ help=trim("""
120
+ Site names for a given library architecture.""")))
@@ -0,0 +1,150 @@
1
+ from siliconcompiler.schema import NamedSchema
2
+ from siliconcompiler.schema import EditableSchema, Parameter, Scope
3
+ from siliconcompiler.schema.utils import trim
4
+
5
+
6
+ class ChecklistSchema(NamedSchema):
7
+ def __init__(self, name=None):
8
+ super().__init__(name=name)
9
+
10
+ schema_checklist(self)
11
+
12
+
13
+ ############################################
14
+ # Design Checklist
15
+ ############################################
16
+ def schema_checklist(schema):
17
+ schema = EditableSchema(schema)
18
+
19
+ item = 'default'
20
+ metric = 'default'
21
+
22
+ schema.insert(
23
+ item, 'description',
24
+ Parameter(
25
+ 'str',
26
+ scope=Scope.GLOBAL,
27
+ shorthelp="Checklist: item description",
28
+ switch="-checklist_description 'standard item <str>'",
29
+ example=[
30
+ "cli: -checklist_description 'ISO D000 A-DESCRIPTION'",
31
+ "api: chip.set('checklist', 'ISO', 'D000', 'description', 'A-DESCRIPTION')"],
32
+ help=trim("""
33
+ A short one line description of the checklist item.""")))
34
+
35
+ schema.insert(
36
+ item, 'requirement',
37
+ Parameter(
38
+ 'str',
39
+ scope=Scope.GLOBAL,
40
+ shorthelp="Checklist: item requirement",
41
+ switch="-checklist_requirement 'standard item <str>'",
42
+ example=[
43
+ "cli: -checklist_requirement 'ISO D000 DOCSTRING'",
44
+ "api: chip.set('checklist', 'ISO', 'D000', 'requirement', 'DOCSTRING')"],
45
+ help=trim("""
46
+ A complete requirement description of the checklist item
47
+ entered as a multi-line string.""")))
48
+
49
+ schema.insert(
50
+ item, 'dataformat',
51
+ Parameter(
52
+ 'str',
53
+ scope=Scope.GLOBAL,
54
+ shorthelp="Checklist: item data format",
55
+ switch="-checklist_dataformat 'standard item <str>'",
56
+ example=[
57
+ "cli: -checklist_dataformat 'ISO D000 README'",
58
+ "api: chip.set('checklist', 'ISO', 'D000', 'dataformat', 'README')"],
59
+ help=trim("""
60
+ Free text description of the type of data files acceptable as
61
+ checklist signoff validation.""")))
62
+
63
+ schema.insert(
64
+ item, 'rationale',
65
+ Parameter(
66
+ '[str]',
67
+ scope=Scope.GLOBAL,
68
+ shorthelp="Checklist: item rational",
69
+ switch="-checklist_rationale 'standard item <str>'",
70
+ example=[
71
+ "cli: -checklist_rationale 'ISO D000 reliability'",
72
+ "api: chip.set('checklist', 'ISO', 'D000', 'rationale', 'reliability')"],
73
+ help=trim("""
74
+ Rationale for the the checklist item. Rationale should be a
75
+ unique alphanumeric code used by the standard or a short one line
76
+ or single word description.""")))
77
+
78
+ schema.insert(
79
+ item, 'criteria',
80
+ Parameter(
81
+ '[str]',
82
+ scope=Scope.GLOBAL,
83
+ shorthelp="Checklist: item criteria",
84
+ switch="-checklist_criteria 'standard item <str>'",
85
+ example=[
86
+ "cli: -checklist_criteria 'ISO D000 errors==0'",
87
+ "api: chip.set('checklist', 'ISO', 'D000', 'criteria', 'errors==0')"],
88
+ help=trim("""
89
+ Simple list of signoff criteria for checklist item which
90
+ must all be met for signoff. Each signoff criteria consists of
91
+ a metric, a relational operator, and a value in the form.
92
+ 'metric op value'.""")))
93
+
94
+ schema.insert(
95
+ item, 'task',
96
+ Parameter(
97
+ '[(str,str,str)]',
98
+ scope=Scope.GLOBAL,
99
+ shorthelp="Checklist: item task",
100
+ switch="-checklist_task 'standard item <(str,str,str)>'",
101
+ example=[
102
+ "cli: -checklist_task 'ISO D000 (job0,place,0)'",
103
+ "api: chip.set('checklist', 'ISO', 'D000', 'task', ('job0', 'place', '0'))"],
104
+ help=trim("""
105
+ Flowgraph job and task used to verify the checklist item.
106
+ The parameter should be left empty for manual and for tool
107
+ flows that bypass the SC infrastructure.""")))
108
+
109
+ schema.insert(
110
+ item, 'report',
111
+ Parameter(
112
+ '[file]',
113
+ scope=Scope.GLOBAL,
114
+ shorthelp="Checklist: item report",
115
+ switch="-checklist_report 'standard item <file>'",
116
+ example=[
117
+ "cli: -checklist_report 'ISO D000 my.rpt'",
118
+ "api: chip.set('checklist', 'ISO', 'D000', 'report', 'my.rpt')"],
119
+ help=trim("""
120
+ Filepath to report(s) of specified type documenting the successful
121
+ validation of the checklist item.""")))
122
+
123
+ schema.insert(
124
+ item, 'waiver', metric,
125
+ Parameter(
126
+ '[file]',
127
+ scope=Scope.GLOBAL,
128
+ shorthelp="Checklist: item metric waivers",
129
+ switch="-checklist_waiver 'standard item metric <file>'",
130
+ example=[
131
+ "cli: -checklist_waiver 'ISO D000 bold my.txt'",
132
+ "api: chip.set('checklist', 'ISO', 'D000', 'waiver', 'hold', 'my.txt')"],
133
+ help=trim("""
134
+ Filepath to report(s) documenting waivers for the checklist
135
+ item specified on a per metric basis.""")))
136
+
137
+ schema.insert(
138
+ item, 'ok',
139
+ Parameter(
140
+ 'bool',
141
+ scope=Scope.GLOBAL,
142
+ shorthelp="Checklist: item ok",
143
+ switch="-checklist_ok 'standard item <bool>'",
144
+ example=[
145
+ "cli: -checklist_ok 'ISO D000 true'",
146
+ "api: chip.set('checklist', 'ISO', 'D000', 'ok', True)"],
147
+ help=trim("""
148
+ Boolean check mark for the checklist item. A value of
149
+ True indicates a human has inspected the all item dictionary
150
+ parameters check out.""")))