siliconcompiler 0.29.0__py3-none-any.whl → 0.29.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 (87) hide show
  1. siliconcompiler/_metadata.py +1 -1
  2. siliconcompiler/apps/__init__.py +26 -0
  3. siliconcompiler/apps/utils/replay.py +96 -38
  4. siliconcompiler/checklists/__init__.py +12 -0
  5. siliconcompiler/core.py +75 -10
  6. siliconcompiler/flows/__init__.py +34 -0
  7. siliconcompiler/flows/showflow.py +1 -1
  8. siliconcompiler/libs/__init__.py +5 -0
  9. siliconcompiler/optimizer/__init__.py +199 -0
  10. siliconcompiler/optimizer/vizier.py +259 -0
  11. siliconcompiler/pdks/__init__.py +5 -0
  12. siliconcompiler/scheduler/__init__.py +67 -49
  13. siliconcompiler/scheduler/send_messages.py +1 -1
  14. siliconcompiler/schema/schema_cfg.py +2 -2
  15. siliconcompiler/schema/schema_obj.py +13 -10
  16. siliconcompiler/schema/utils.py +2 -0
  17. siliconcompiler/sphinx_ext/__init__.py +85 -0
  18. siliconcompiler/sphinx_ext/dynamicgen.py +17 -33
  19. siliconcompiler/sphinx_ext/schemagen.py +3 -2
  20. siliconcompiler/targets/__init__.py +26 -0
  21. siliconcompiler/templates/replay/replay.py.j2 +62 -0
  22. siliconcompiler/templates/replay/requirements.txt +2 -1
  23. siliconcompiler/templates/replay/setup.sh +119 -6
  24. siliconcompiler/tools/__init__.py +60 -0
  25. siliconcompiler/tools/_common/asic.py +7 -6
  26. siliconcompiler/tools/ghdl/ghdl.py +1 -2
  27. siliconcompiler/tools/klayout/convert_drc_db.py +1 -1
  28. siliconcompiler/tools/klayout/drc.py +1 -1
  29. siliconcompiler/tools/klayout/export.py +8 -1
  30. siliconcompiler/tools/klayout/klayout.py +2 -2
  31. siliconcompiler/tools/klayout/klayout_convert_drc_db.py +2 -2
  32. siliconcompiler/tools/klayout/klayout_export.py +7 -5
  33. siliconcompiler/tools/klayout/klayout_operations.py +4 -3
  34. siliconcompiler/tools/klayout/klayout_show.py +3 -2
  35. siliconcompiler/tools/klayout/klayout_utils.py +1 -1
  36. siliconcompiler/tools/klayout/operations.py +8 -0
  37. siliconcompiler/tools/klayout/screenshot.py +6 -1
  38. siliconcompiler/tools/klayout/show.py +8 -1
  39. siliconcompiler/tools/magic/magic.py +1 -1
  40. siliconcompiler/tools/openroad/__init__.py +1 -1
  41. siliconcompiler/tools/openroad/_apr.py +2 -1
  42. siliconcompiler/tools/openroad/init_floorplan.py +1 -1
  43. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +1 -1
  44. siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +4 -0
  45. siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +2 -2
  46. siliconcompiler/tools/openroad/scripts/common/procs.tcl +52 -0
  47. siliconcompiler/tools/openroad/scripts/common/reports.tcl +1 -1
  48. siliconcompiler/tools/openroad/scripts/sc_show.tcl +5 -0
  49. siliconcompiler/tools/opensta/__init__.py +1 -1
  50. siliconcompiler/tools/opensta/check_library.py +27 -0
  51. siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +255 -0
  52. siliconcompiler/tools/opensta/scripts/sc_timing.tcl +1 -1
  53. siliconcompiler/tools/sv2v/sv2v.py +1 -2
  54. siliconcompiler/tools/verilator/verilator.py +6 -7
  55. siliconcompiler/tools/vivado/vivado.py +1 -1
  56. siliconcompiler/tools/yosys/__init__.py +149 -0
  57. siliconcompiler/tools/yosys/lec.py +22 -9
  58. siliconcompiler/tools/yosys/sc_lec.tcl +94 -49
  59. siliconcompiler/tools/yosys/sc_syn.tcl +1 -0
  60. siliconcompiler/tools/yosys/screenshot.py +2 -2
  61. siliconcompiler/tools/yosys/syn_asic.py +98 -74
  62. siliconcompiler/tools/yosys/syn_asic.tcl +31 -6
  63. siliconcompiler/tools/yosys/syn_fpga.py +2 -3
  64. siliconcompiler/tools/yosys/syn_fpga.tcl +0 -1
  65. siliconcompiler/toolscripts/_tools.json +3 -3
  66. siliconcompiler/utils/__init__.py +7 -3
  67. {siliconcompiler-0.29.0.dist-info → siliconcompiler-0.29.1.dist-info}/METADATA +13 -10
  68. {siliconcompiler-0.29.0.dist-info → siliconcompiler-0.29.1.dist-info}/RECORD +72 -82
  69. {siliconcompiler-0.29.0.dist-info → siliconcompiler-0.29.1.dist-info}/WHEEL +1 -1
  70. {siliconcompiler-0.29.0.dist-info → siliconcompiler-0.29.1.dist-info}/entry_points.txt +13 -0
  71. siliconcompiler/libs/asap7sc7p5t.py +0 -8
  72. siliconcompiler/libs/gf180mcu.py +0 -8
  73. siliconcompiler/libs/interposer.py +0 -8
  74. siliconcompiler/libs/nangate45.py +0 -8
  75. siliconcompiler/libs/sg13g2_stdcell.py +0 -8
  76. siliconcompiler/libs/sky130hd.py +0 -8
  77. siliconcompiler/libs/sky130io.py +0 -8
  78. siliconcompiler/pdks/asap7.py +0 -8
  79. siliconcompiler/pdks/freepdk45.py +0 -8
  80. siliconcompiler/pdks/gf180.py +0 -8
  81. siliconcompiler/pdks/ihp130.py +0 -8
  82. siliconcompiler/pdks/interposer.py +0 -8
  83. siliconcompiler/pdks/skywater130.py +0 -8
  84. siliconcompiler/templates/replay/run.py.j2 +0 -22
  85. siliconcompiler/tools/yosys/yosys.py +0 -148
  86. {siliconcompiler-0.29.0.dist-info → siliconcompiler-0.29.1.dist-info}/LICENSE +0 -0
  87. {siliconcompiler-0.29.0.dist-info → siliconcompiler-0.29.1.dist-info}/top_level.txt +0 -0
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.interposer.libs.bumps import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- lib = setup(siliconcompiler.Chip('<lib>'))
8
- lib.write_manifest(f'{lib.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.freepdk45.libs.nangate45 import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- lib = setup(siliconcompiler.Chip('<lib>'))
8
- lib.write_manifest(f'{lib.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.ihp130.libs.sg13g2_stdcell import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- lib = setup(siliconcompiler.Chip('<lib>'))
8
- lib.write_manifest(f'{lib.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.sky130.libs.sky130sc import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- lib = setup(siliconcompiler.Chip('<lib>'))
8
- lib.write_manifest(f'{lib.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.sky130.libs.sky130io import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- lib = setup(siliconcompiler.Chip('<lib>'))
8
- lib.write_manifest(f'{lib.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.asap7 import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- pdk = setup(siliconcompiler.Chip('<pdk>'))
8
- pdk.write_manifest(f'{pdk.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.freepdk45 import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- pdk = setup(siliconcompiler.Chip('<pdk>'))
8
- pdk.write_manifest(f'{pdk.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.gf180 import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- pdk = setup(siliconcompiler.Chip('<pdk>'))
8
- pdk.write_manifest(f'{pdk.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.ihp130 import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- pdk = setup(siliconcompiler.Chip('<pdk>'))
8
- pdk.write_manifest(f'{pdk.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.interposer import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- pdk = setup(siliconcompiler.Chip('<lib>'))
8
- pdk.write_manifest(f'{pdk.top()}.json')
@@ -1,8 +0,0 @@
1
- import siliconcompiler
2
- from lambdapdk.sky130 import setup
3
-
4
-
5
- #########################
6
- if __name__ == "__main__":
7
- pdk = setup(siliconcompiler.Chip('<pdk>'))
8
- pdk.write_manifest(f'{pdk.top()}.json')
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env python3
2
- # SiliconCompiler Replay
3
- # From {{ source }}
4
- # Jobname: {{ jobname }}
5
-
6
- from siliconcompiler import Chip
7
-
8
-
9
- if __name__ == "__main__":
10
- chip = Chip("{{ design }}")
11
-
12
- # Read manifest{% for cfg in cfgs %}
13
- chip.read_manifest("{{ cfg }}"){% endfor %}
14
-
15
- # Set tool versions{% for node, tool, version in tool_versions %}
16
- chip.set("tool", "{{ tool }}", "version", "=={{ version }}", step="{{ node[0] }}", index="{{ node[1] }}"){% endfor %}
17
-
18
- # Run
19
- chip.run()
20
-
21
- # Report summary
22
- chip.summary()
@@ -1,148 +0,0 @@
1
- '''
2
- Yosys is a framework for RTL synthesis that takes synthesizable
3
- Verilog-2005 design and converts it to BLIF, EDIF, BTOR, SMT,
4
- Verilog netlist etc. The tool supports logical synthesis and
5
- tech mapping to ASIC standard cell libraries, FPGA architectures.
6
- In addition it has built in formal methods for property and
7
- equivalence checking.
8
-
9
- Documentation: https://yosyshq.readthedocs.io/projects/yosys/en/latest/
10
-
11
- Sources: https://github.com/YosysHQ/yosys
12
-
13
- Installation: https://github.com/YosysHQ/yosys
14
- '''
15
-
16
- import re
17
- import json
18
- from siliconcompiler import sc_open
19
- from siliconcompiler.tools._common import get_tool_task, record_metric
20
- from siliconcompiler.targets import asap7_demo
21
-
22
-
23
- ######################################################################
24
- # Make Docs
25
- ######################################################################
26
- def make_docs(chip):
27
- chip.use(asap7_demo)
28
-
29
-
30
- ################################
31
- # Setup Tool (pre executable)
32
- ################################
33
- def setup(chip):
34
- ''' Tool specific function to run before step execution
35
- '''
36
-
37
- # If the 'lock' bit is set, don't reconfigure.
38
- tool = 'yosys'
39
- refdir = 'tools/' + tool
40
- step = chip.get('arg', 'step')
41
- index = chip.get('arg', 'index')
42
- _, task = get_tool_task(chip, step, index)
43
-
44
- # Standard Setup
45
- chip.set('tool', tool, 'exe', 'yosys')
46
- chip.set('tool', tool, 'vswitch', '--version')
47
- chip.set('tool', tool, 'version', '>=0.41', clobber=False)
48
- chip.set('tool', tool, 'format', 'tcl', clobber=False)
49
-
50
- # Task Setup
51
- # common to all
52
- option = []
53
- if chip.get('option', 'breakpoint', step=step, index=index):
54
- option.append('-C')
55
- option.append('-c')
56
- chip.set('tool', tool, 'task', task, 'option', option, step=step, index=index, clobber=False)
57
- chip.set('tool', tool, 'task', task, 'refdir', refdir, step=step, index=index,
58
- package='siliconcompiler', clobber=False)
59
- chip.set('tool', tool, 'task', task, 'regex', 'warnings', "Warning:",
60
- step=step, index=index, clobber=False)
61
- chip.set('tool', tool, 'task', task, 'regex', 'errors', "^ERROR",
62
- step=step, index=index, clobber=False)
63
-
64
-
65
- ################################
66
- # Version Check
67
- ################################
68
- def parse_version(stdout):
69
- # Yosys 0.9+3672 (git sha1 014c7e26, gcc 7.5.0-3ubuntu1~18.04 -fPIC -Os)
70
- return stdout.split()[1]
71
-
72
-
73
- def normalize_version(version):
74
- # Replace '+', which represents a "local version label", with '-', which is
75
- # an "implicit post release number".
76
- return version.replace('+', '-')
77
-
78
-
79
- def syn_setup(chip):
80
- ''' Helper method for configs specific to synthesis tasks.
81
- '''
82
-
83
- # Generic tool setup.
84
- setup(chip)
85
-
86
- tool = 'yosys'
87
- step = chip.get('arg', 'step')
88
- index = chip.get('arg', 'index')
89
- _, task = get_tool_task(chip, step, index)
90
- design = chip.top()
91
-
92
- # Set yosys script path.
93
- chip.set('tool', tool, 'task', task, 'script', 'sc_syn.tcl',
94
- step=step, index=index, clobber=False)
95
-
96
- # Input/output requirements.
97
- chip.set('tool', tool, 'task', task, 'input', design + '.v', step=step, index=index)
98
- chip.set('tool', tool, 'task', task, 'output', design + '.vg', step=step, index=index)
99
-
100
-
101
- ##################################################
102
- def syn_post_process(chip):
103
- ''' Tool specific function to run after step execution
104
- '''
105
-
106
- step = chip.get('arg', 'step')
107
- index = chip.get('arg', 'index')
108
-
109
- with sc_open("reports/stat.json") as f:
110
- metrics = json.load(f)
111
- if "design" in metrics:
112
- metrics = metrics["design"]
113
-
114
- if "area" in metrics:
115
- record_metric(chip, step, index, 'cellarea',
116
- float(metrics["area"]),
117
- "reports/stat.json",
118
- source_unit='um^2')
119
- if "num_cells" in metrics:
120
- record_metric(chip, step, index, 'cells',
121
- metrics["num_cells"],
122
- "reports/stat.json")
123
- if "num_wire_bits" in metrics:
124
- record_metric(chip, step, index, 'nets',
125
- metrics["num_wire_bits"],
126
- "reports/stat.json")
127
- if "num_port_bits" in metrics:
128
- record_metric(chip, step, index, 'pins',
129
- metrics["num_port_bits"],
130
- "reports/stat.json")
131
-
132
- registers = None
133
- with sc_open(f"{step}.log") as f:
134
- for line in f:
135
- line_registers = re.findall(r"^\s*mapped ([0-9]+) \$_DFF.*", line)
136
- if line_registers:
137
- if registers is None:
138
- registers = 0
139
- registers += int(line_registers[0])
140
- if registers is not None:
141
- record_metric(chip, step, index, 'registers', registers, f"{step}.log")
142
-
143
-
144
- ##################################################
145
- if __name__ == "__main__":
146
-
147
- chip = make_docs()
148
- chip.write_manifest("yosys.json")