siliconcompiler 0.34.1__py3-none-any.whl → 0.34.3__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 (129) hide show
  1. siliconcompiler/__init__.py +23 -4
  2. siliconcompiler/__main__.py +1 -7
  3. siliconcompiler/_metadata.py +1 -1
  4. siliconcompiler/apps/_common.py +104 -23
  5. siliconcompiler/apps/sc.py +4 -8
  6. siliconcompiler/apps/sc_dashboard.py +6 -4
  7. siliconcompiler/apps/sc_install.py +10 -6
  8. siliconcompiler/apps/sc_issue.py +7 -5
  9. siliconcompiler/apps/sc_remote.py +1 -1
  10. siliconcompiler/apps/sc_server.py +9 -14
  11. siliconcompiler/apps/sc_show.py +7 -6
  12. siliconcompiler/apps/smake.py +130 -94
  13. siliconcompiler/apps/utils/replay.py +4 -7
  14. siliconcompiler/apps/utils/summarize.py +3 -5
  15. siliconcompiler/asic.py +420 -0
  16. siliconcompiler/checklist.py +25 -2
  17. siliconcompiler/cmdlineschema.py +534 -0
  18. siliconcompiler/constraints/__init__.py +17 -0
  19. siliconcompiler/constraints/asic_component.py +378 -0
  20. siliconcompiler/constraints/asic_floorplan.py +449 -0
  21. siliconcompiler/constraints/asic_pins.py +489 -0
  22. siliconcompiler/constraints/asic_timing.py +517 -0
  23. siliconcompiler/core.py +10 -35
  24. siliconcompiler/data/templates/tcl/manifest.tcl.j2 +8 -0
  25. siliconcompiler/dependencyschema.py +96 -202
  26. siliconcompiler/design.py +327 -241
  27. siliconcompiler/filesetschema.py +250 -0
  28. siliconcompiler/flowgraph.py +298 -106
  29. siliconcompiler/fpga.py +124 -1
  30. siliconcompiler/library.py +331 -0
  31. siliconcompiler/metric.py +327 -92
  32. siliconcompiler/metrics/__init__.py +7 -0
  33. siliconcompiler/metrics/asic.py +245 -0
  34. siliconcompiler/metrics/fpga.py +220 -0
  35. siliconcompiler/package/__init__.py +391 -67
  36. siliconcompiler/package/git.py +92 -16
  37. siliconcompiler/package/github.py +114 -22
  38. siliconcompiler/package/https.py +79 -16
  39. siliconcompiler/packageschema.py +341 -16
  40. siliconcompiler/pathschema.py +255 -0
  41. siliconcompiler/pdk.py +566 -1
  42. siliconcompiler/project.py +1460 -0
  43. siliconcompiler/record.py +38 -1
  44. siliconcompiler/remote/__init__.py +5 -2
  45. siliconcompiler/remote/client.py +11 -6
  46. siliconcompiler/remote/schema.py +5 -23
  47. siliconcompiler/remote/server.py +41 -54
  48. siliconcompiler/report/__init__.py +3 -3
  49. siliconcompiler/report/dashboard/__init__.py +48 -14
  50. siliconcompiler/report/dashboard/cli/__init__.py +99 -21
  51. siliconcompiler/report/dashboard/cli/board.py +364 -179
  52. siliconcompiler/report/dashboard/web/__init__.py +90 -12
  53. siliconcompiler/report/dashboard/web/components/__init__.py +219 -240
  54. siliconcompiler/report/dashboard/web/components/flowgraph.py +49 -26
  55. siliconcompiler/report/dashboard/web/components/graph.py +139 -100
  56. siliconcompiler/report/dashboard/web/layouts/__init__.py +29 -1
  57. siliconcompiler/report/dashboard/web/layouts/_common.py +38 -2
  58. siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph.py +39 -26
  59. siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_node_tab.py +50 -50
  60. siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_sac_tabs.py +49 -46
  61. siliconcompiler/report/dashboard/web/state.py +141 -14
  62. siliconcompiler/report/dashboard/web/utils/__init__.py +79 -16
  63. siliconcompiler/report/dashboard/web/utils/file_utils.py +74 -11
  64. siliconcompiler/report/dashboard/web/viewer.py +25 -1
  65. siliconcompiler/report/report.py +5 -2
  66. siliconcompiler/report/summary_image.py +29 -11
  67. siliconcompiler/scheduler/__init__.py +9 -1
  68. siliconcompiler/scheduler/docker.py +81 -4
  69. siliconcompiler/scheduler/run_node.py +37 -20
  70. siliconcompiler/scheduler/scheduler.py +211 -36
  71. siliconcompiler/scheduler/schedulernode.py +394 -60
  72. siliconcompiler/scheduler/send_messages.py +77 -29
  73. siliconcompiler/scheduler/slurm.py +76 -12
  74. siliconcompiler/scheduler/taskscheduler.py +142 -21
  75. siliconcompiler/schema/__init__.py +0 -4
  76. siliconcompiler/schema/baseschema.py +338 -59
  77. siliconcompiler/schema/editableschema.py +14 -6
  78. siliconcompiler/schema/journal.py +28 -17
  79. siliconcompiler/schema/namedschema.py +22 -14
  80. siliconcompiler/schema/parameter.py +89 -28
  81. siliconcompiler/schema/parametertype.py +2 -0
  82. siliconcompiler/schema/parametervalue.py +258 -15
  83. siliconcompiler/schema/safeschema.py +25 -2
  84. siliconcompiler/schema/schema_cfg.py +23 -19
  85. siliconcompiler/schema/utils.py +2 -2
  86. siliconcompiler/schema_obj.py +24 -5
  87. siliconcompiler/tool.py +1131 -265
  88. siliconcompiler/tools/bambu/__init__.py +41 -0
  89. siliconcompiler/tools/builtin/concatenate.py +2 -2
  90. siliconcompiler/tools/builtin/minimum.py +2 -1
  91. siliconcompiler/tools/builtin/mux.py +2 -1
  92. siliconcompiler/tools/builtin/nop.py +2 -1
  93. siliconcompiler/tools/builtin/verify.py +2 -1
  94. siliconcompiler/tools/klayout/__init__.py +95 -0
  95. siliconcompiler/tools/openroad/__init__.py +289 -0
  96. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +3 -0
  97. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +7 -2
  98. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +8 -4
  99. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +9 -5
  100. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +5 -1
  101. siliconcompiler/tools/slang/__init__.py +1 -1
  102. siliconcompiler/tools/slang/elaborate.py +2 -1
  103. siliconcompiler/tools/vivado/scripts/sc_run.tcl +1 -1
  104. siliconcompiler/tools/vivado/scripts/sc_syn_fpga.tcl +8 -1
  105. siliconcompiler/tools/vivado/syn_fpga.py +6 -0
  106. siliconcompiler/tools/vivado/vivado.py +35 -2
  107. siliconcompiler/tools/vpr/__init__.py +150 -0
  108. siliconcompiler/tools/yosys/__init__.py +369 -1
  109. siliconcompiler/tools/yosys/scripts/procs.tcl +0 -1
  110. siliconcompiler/toolscripts/_tools.json +5 -10
  111. siliconcompiler/utils/__init__.py +66 -0
  112. siliconcompiler/utils/flowgraph.py +2 -2
  113. siliconcompiler/utils/issue.py +2 -1
  114. siliconcompiler/utils/logging.py +14 -0
  115. siliconcompiler/utils/multiprocessing.py +256 -0
  116. siliconcompiler/utils/showtools.py +10 -0
  117. {siliconcompiler-0.34.1.dist-info → siliconcompiler-0.34.3.dist-info}/METADATA +6 -6
  118. {siliconcompiler-0.34.1.dist-info → siliconcompiler-0.34.3.dist-info}/RECORD +122 -115
  119. {siliconcompiler-0.34.1.dist-info → siliconcompiler-0.34.3.dist-info}/entry_points.txt +3 -0
  120. siliconcompiler/schema/cmdlineschema.py +0 -250
  121. siliconcompiler/schema/packageschema.py +0 -101
  122. siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -40
  123. siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -40
  124. siliconcompiler/toolscripts/ubuntu20/install-slang.sh +0 -47
  125. siliconcompiler/toolscripts/ubuntu22/install-slang.sh +0 -37
  126. siliconcompiler/toolscripts/ubuntu24/install-slang.sh +0 -37
  127. {siliconcompiler-0.34.1.dist-info → siliconcompiler-0.34.3.dist-info}/WHEEL +0 -0
  128. {siliconcompiler-0.34.1.dist-info → siliconcompiler-0.34.3.dist-info}/licenses/LICENSE +0 -0
  129. {siliconcompiler-0.34.1.dist-info → siliconcompiler-0.34.3.dist-info}/top_level.txt +0 -0
siliconcompiler/fpga.py CHANGED
@@ -1,19 +1,142 @@
1
+ """
2
+ Schema definitions for FPGA-related configurations in SiliconCompiler.
3
+
4
+ This module defines classes and functions for managing FPGA-specific
5
+ parameters, such as part names, LUT sizes, and vendor information,
6
+ within the SiliconCompiler schema. It includes schemas for both
7
+ tool-library and temporary configurations.
8
+ """
9
+
1
10
  from siliconcompiler.schema import BaseSchema
2
11
  from siliconcompiler.schema import EditableSchema, Parameter, Scope
3
12
  from siliconcompiler.schema.utils import trim
4
13
 
14
+ from siliconcompiler import ToolLibrarySchema
15
+
16
+
17
+ class FPGASchema(ToolLibrarySchema):
18
+ """
19
+ A schema for configuring FPGA-related parameters.
20
+
21
+ This class extends ToolLibrarySchema to provide a structured way
22
+ to define and access FPGA-specific settings like part name and LUT size.
23
+ """
24
+ def __init__(self, name: str = None):
25
+ """
26
+ Initializes the FPGASchema.
27
+
28
+ Args:
29
+ name (str, optional): The name of the schema. Defaults to None.
30
+ """
31
+ super().__init__()
32
+ self.set_name(name)
33
+
34
+ schema = EditableSchema(self)
35
+ schema.insert(
36
+ "fpga", 'partname',
37
+ Parameter(
38
+ 'str',
39
+ scope=Scope.GLOBAL,
40
+ shorthelp="FPGA: part name",
41
+ switch="-fpga_partname <str>",
42
+ example=["cli: -fpga_partname fpga64k",
43
+ "api: chip.set('fpga', 'partname', 'fpga64k')"],
44
+ help=trim("""
45
+ Complete part name used as a device target by the FPGA compilation
46
+ tool. The part name must be an exact string match to the partname
47
+ hard coded within the FPGA EDA tool.""")))
48
+
49
+ schema.insert(
50
+ "fpga", 'lutsize',
51
+ Parameter(
52
+ 'int',
53
+ scope=Scope.GLOBAL,
54
+ shorthelp="FPGA: lutsize",
55
+ switch="-fpga_lutsize 'partname <int>'",
56
+ example=["cli: -fpga_lutsize 'fpga64k 4'",
57
+ "api: chip.set('fpga', 'fpga64k', 'lutsize', '4')"],
58
+ help=trim("""
59
+ Specify the number of inputs in each lookup table (LUT) for the
60
+ FPGA partname. For architectures with fracturable LUTs, this is
61
+ the number of inputs of the unfractured LUT.""")))
62
+
63
+ def set_partname(self, name: str):
64
+ """
65
+ Sets the FPGA part name.
66
+
67
+ Args:
68
+ name (str): The name of the FPGA part.
69
+
70
+ Returns:
71
+ Any: The result of the `set` operation.
72
+ """
73
+ return self.set("fpga", "partname", name)
74
+
75
+ def set_lutsize(self, lut: int):
76
+ """
77
+ Sets the LUT size for the FPGA.
5
78
 
6
- class FPGASchema(BaseSchema):
79
+ Args:
80
+ lut (int): The number of inputs for the lookup table.
81
+
82
+ Returns:
83
+ Any: The result of the `set` operation.
84
+ """
85
+ return self.set("fpga", "lutsize", lut)
86
+
87
+ @classmethod
88
+ def _getdict_type(cls) -> str:
89
+ """
90
+ Returns the meta data for getdict.
91
+
92
+ Returns:
93
+ str: The name of the class.
94
+ """
95
+
96
+ return FPGASchema.__name__
97
+
98
+
99
+ class FPGASchemaTmp(BaseSchema):
100
+ """
101
+ A temporary schema for FPGA configurations.
102
+
103
+ This class is used for temporary storage of FPGA-related settings.
104
+ It extends BaseSchema and uses the `schema_fpga` function to populate
105
+ its fields.
106
+ """
7
107
  def __init__(self):
108
+ """
109
+ Initializes the FPGASchemaTmp.
110
+ """
8
111
  super().__init__()
9
112
 
10
113
  schema_fpga(self)
11
114
 
115
+ @classmethod
116
+ def _getdict_type(cls) -> str:
117
+ """
118
+ Returns the meta data for getdict.
119
+
120
+ Returns:
121
+ str: The name of the class.
122
+ """
123
+
124
+ return FPGASchemaTmp.__name__
125
+
12
126
 
13
127
  ###############################################################################
14
128
  # FPGA
15
129
  ###############################################################################
16
130
  def schema_fpga(schema):
131
+ """
132
+ Adds FPGA-related parameters to a given schema.
133
+
134
+ This function defines and inserts various FPGA configuration parameters
135
+ into the provided schema object.
136
+
137
+ Args:
138
+ schema: The schema object to which the parameters will be added.
139
+ """
17
140
  schema = EditableSchema(schema)
18
141
 
19
142
  partname = 'default'
@@ -0,0 +1,331 @@
1
+ from typing import final, Union, List
2
+
3
+ from siliconcompiler import PackageSchema
4
+
5
+ from siliconcompiler.dependencyschema import DependencySchema
6
+ from siliconcompiler.filesetschema import FileSetSchema
7
+ from siliconcompiler.schema import NamedSchema
8
+
9
+ from siliconcompiler.schema import EditableSchema, Parameter, Scope, PerNode
10
+ from siliconcompiler.schema.utils import trim
11
+
12
+
13
+ class LibrarySchema(FileSetSchema, PackageSchema, NamedSchema):
14
+ """
15
+ A class for managing library schemas.
16
+ """
17
+ def __init__(self, name: str = None):
18
+ """
19
+ Initializes a LibrarySchema object.
20
+
21
+ Args:
22
+ name (str, optional): The name of the library. Defaults to None.
23
+ """
24
+ super().__init__()
25
+ self.set_name(name)
26
+
27
+ @classmethod
28
+ def _getdict_type(cls) -> str:
29
+ """
30
+ Returns the meta data for getdict.
31
+ """
32
+
33
+ return LibrarySchema.__name__
34
+
35
+
36
+ class ToolLibrarySchema(LibrarySchema):
37
+ """
38
+ A class for managing tool-related library schemas.
39
+ """
40
+ @final
41
+ def define_tool_parameter(self, tool: str, name: str, type: str, help: str, **kwargs):
42
+ """
43
+ Define a new tool parameter for the library.
44
+
45
+ Args:
46
+ tool (str): name of the tool
47
+ name (str): name of the parameter
48
+ type (str): type of parameter, see :class:`.Parameter`.
49
+ help (str): help information for this parameter
50
+ kwargs: passthrough for :class:`.Parameter`.
51
+ """
52
+ if isinstance(help, str):
53
+ # grab first line for short help
54
+ help = trim(help)
55
+ shorthelp = help.splitlines()[0].strip()
56
+ else:
57
+ raise TypeError("help must be a string")
58
+
59
+ kwargs["scope"] = Scope.GLOBAL
60
+ kwargs["pernode"] = PerNode.NEVER
61
+ kwargs["shorthelp"] = shorthelp
62
+ kwargs["help"] = help
63
+
64
+ EditableSchema(self).insert(
65
+ "tool", tool, name,
66
+ Parameter(type, **kwargs)
67
+ )
68
+
69
+ @classmethod
70
+ def _getdict_type(cls) -> str:
71
+ """
72
+ Returns the meta data for getdict.
73
+ """
74
+
75
+ return ToolLibrarySchema.__name__
76
+
77
+ def _from_dict(self, manifest, keypath, version=None):
78
+ """
79
+ Constructs a schema from a dictionary.
80
+
81
+ Args:
82
+ manifest (dict): Dictionary to construct from.
83
+ keypath (list): List of keys representing the path to the current dictionary.
84
+ version (str, optional): Version of the manifest. Defaults to None.
85
+
86
+ Returns:
87
+ dict: The constructed dictionary.
88
+ """
89
+ if "tool" in manifest:
90
+ # collect tool keys
91
+ tool_keys = self.allkeys("tool")
92
+
93
+ # collect manifest
94
+ manifest_keys = set()
95
+ for tool, tool_var in manifest["tool"].items():
96
+ for var in tool_var:
97
+ manifest_keys.add((tool, var))
98
+
99
+ edit = EditableSchema(self)
100
+ for tool, var in sorted(manifest_keys.difference(tool_keys)):
101
+ edit.insert("tool", tool, var,
102
+ Parameter.from_dict(
103
+ manifest["tool"][tool][var],
104
+ keypath=keypath + [tool, var],
105
+ version=version))
106
+ del manifest["tool"][tool][var]
107
+ if not manifest["tool"][tool]:
108
+ del manifest["tool"][tool]
109
+
110
+ if not manifest["tool"]:
111
+ del manifest["tool"]
112
+
113
+ return super()._from_dict(manifest, keypath, version)
114
+
115
+
116
+ class StdCellLibrarySchema(ToolLibrarySchema, DependencySchema):
117
+ """
118
+ A class for managing standard cell library schemas.
119
+ """
120
+ def __init__(self, name: str = None):
121
+ """
122
+ Initializes a StdCellLibrarySchema object.
123
+
124
+ Args:
125
+ name (str, optional): The name of the standard cell library. Defaults to None.
126
+ """
127
+ super().__init__()
128
+ self.set_name(name)
129
+
130
+ schema = EditableSchema(self)
131
+
132
+ schema.insert(
133
+ "asic", "pdk",
134
+ Parameter(
135
+ "str",
136
+ scope=Scope.GLOBAL,
137
+ shorthelp="ASIC: ",
138
+ example=[
139
+ "api: schema.set('asic', 'libcornerfileset', 'slow', 'nldm', 'timing.slow')"],
140
+ help=trim("""""")))
141
+
142
+ schema.insert(
143
+ "asic", "stackup",
144
+ Parameter(
145
+ "{str}",
146
+ scope=Scope.GLOBAL,
147
+ shorthelp="ASIC: ",
148
+ example=[
149
+ "api: schema.set('asic', 'libcornerfileset', 'slow', 'nldm', 'timing.slow')"],
150
+ help=trim("""Set of supported stackups""")))
151
+
152
+ schema.insert(
153
+ 'asic', 'libcornerfileset', 'default', 'default',
154
+ Parameter(
155
+ '{str}',
156
+ scope=Scope.GLOBAL,
157
+ shorthelp="ASIC: map of filesets to timing corners",
158
+ example=[
159
+ "api: schema.set('asic', 'libcornerfileset', 'slow', 'nldm', 'timing.slow')"],
160
+ help=trim("""Map between filesets and timing corners.""")))
161
+
162
+ schema.insert(
163
+ 'asic', 'pexcornerfileset', 'default',
164
+ Parameter(
165
+ '{str}',
166
+ scope=Scope.GLOBAL,
167
+ shorthelp="ASIC: map of filesets to pex corners",
168
+ example=[
169
+ "api: schema.set('asic', 'pexcornerfileset', 'slow', 'timing.slow')"],
170
+ help=trim("""Map between filesets and pex corners.""")))
171
+
172
+ schema.insert(
173
+ 'asic', 'aprfileset',
174
+ Parameter(
175
+ '{str}',
176
+ scope=Scope.GLOBAL,
177
+ shorthelp="ASIC: map of filesets to APR files",
178
+ example=[
179
+ "api: schema.set('asic', 'aprfileset', 'model.lef')"],
180
+ help=trim("""Map between filesets and automated place and route tool files.""")))
181
+
182
+ # TODO: Expand on the exact definitions of these types of cells.
183
+ # minimize typing
184
+ for item in [
185
+ 'decap',
186
+ 'tie',
187
+ 'hold',
188
+ 'clkbuf',
189
+ 'clkgate',
190
+ 'clklogic',
191
+ 'dontuse',
192
+ 'filler',
193
+ 'tap',
194
+ 'endcap',
195
+ 'antenna']:
196
+ schema.insert(
197
+ 'asic', 'cells', item,
198
+ Parameter(
199
+ '[str]',
200
+ scope=Scope.GLOBAL,
201
+ shorthelp=f"ASIC: {item} cell list",
202
+ example=[f"api: schema.set('asic', 'cells', '{item}', '*eco*')"],
203
+ help=trim("""
204
+ List of cells grouped by a property that can be accessed
205
+ directly by the designer and tools. The example below shows how
206
+ all cells containing the string 'eco' could be marked as dont use
207
+ for the tool.""")))
208
+
209
+ schema.insert(
210
+ 'asic', 'site',
211
+ Parameter(
212
+ '[str]',
213
+ scope=Scope.GLOBAL,
214
+ shorthelp="ASIC: library sites",
215
+ example=["api: schema.set('asic', 'site', 'Site_12T')"],
216
+ help="Site names for a given library architecture."))
217
+
218
+ def add_asic_pdk(self, pdk, default: bool = True):
219
+ """
220
+ Adds the PDK associated with this library.
221
+
222
+ Args:
223
+ pdk (class:`PDKSchema`): pdk to associate
224
+ default (bool): if True, sets this PDK in [asic,pdk]
225
+ """
226
+ from siliconcompiler import PDKSchema
227
+ if isinstance(pdk, PDKSchema):
228
+ pdk_name = pdk.name
229
+ self.add_dep(pdk)
230
+
231
+ if pdk.get("pdk", "stackup"):
232
+ # copy over stackup information
233
+ self.add_asic_stackup(pdk.get("pdk", "stackup"))
234
+ elif default:
235
+ if isinstance(pdk, str):
236
+ pdk_name = pdk
237
+ else:
238
+ raise TypeError("pdk must be a PDK object or string")
239
+ else:
240
+ raise TypeError("pdk must be a PDK object")
241
+
242
+ if default:
243
+ return self.set("asic", "pdk", pdk_name)
244
+
245
+ def add_asic_stackup(self, stackup: Union[str, List[str]]):
246
+ """
247
+ Set the stackups supported by this library.
248
+
249
+ Args:
250
+ stackup (str or list of str): stackups supported
251
+ """
252
+ return self.add("asic", "stackup", stackup)
253
+
254
+ def add_asic_libcornerfileset(self, corner: str, model: str, fileset: str = None):
255
+ """
256
+ Adds a mapping between filesets a corners defined in the library.
257
+
258
+ Args:
259
+ corner (str): name of the timing or parasitic corner
260
+ model (str): type of delay modeling used, eg. ccs, nldm, etc.
261
+ fileset (str): name of the fileset
262
+ """
263
+ if not fileset:
264
+ fileset = self._get_active("fileset")
265
+
266
+ if not isinstance(model, str):
267
+ raise TypeError("model must be a string")
268
+
269
+ self._assert_fileset(fileset)
270
+
271
+ return self.add("asic", "libcornerfileset", corner, model, fileset)
272
+
273
+ def add_asic_pexcornerfileset(self, corner: str, model: str, fileset: str = None):
274
+ """
275
+ Adds a mapping between filesets a corners defined in the library.
276
+
277
+ Args:
278
+ corner (str): name of the timing or parasitic corner
279
+ model(str): type of delay modeling used, eg. spice, etc.
280
+ fileset (str): name of the fileset
281
+ """
282
+ if not fileset:
283
+ fileset = self._get_active("fileset")
284
+
285
+ if not isinstance(model, str):
286
+ raise TypeError("model must be a string")
287
+
288
+ self._assert_fileset(fileset)
289
+
290
+ return self.add("asic", "pexcornerfileset", corner, model, fileset)
291
+
292
+ def add_asic_aprfileset(self, fileset: str = None):
293
+ """
294
+ Adds a mapping between filesets defined in the library.
295
+
296
+ Args:
297
+ fileset (str): name of the fileset
298
+ """
299
+ if not fileset:
300
+ fileset = self._get_active("fileset")
301
+
302
+ self._assert_fileset(fileset)
303
+
304
+ return self.add("asic", "aprfileset", fileset)
305
+
306
+ def add_asic_celllist(self, type: str, cells: Union[List[str], str]):
307
+ """
308
+ Adds a standard cell library to the specified type.
309
+
310
+ Args:
311
+ type (str): category of cell type
312
+ cells (list of str): cells to add
313
+ """
314
+ return self.add("asic", "cells", type, cells)
315
+
316
+ def add_asic_site(self, site: Union[List[str], str]):
317
+ """
318
+ Adds a standard site to the library.
319
+
320
+ Args:
321
+ site (list of str or str): sites to add
322
+ """
323
+ return self.add("asic", "site", site)
324
+
325
+ @classmethod
326
+ def _getdict_type(cls) -> str:
327
+ """
328
+ Returns the meta data for getdict.
329
+ """
330
+
331
+ return StdCellLibrarySchema.__name__