librelane 2.4.0.dev7__py3-none-any.whl → 3.0.0.dev22__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.

Potentially problematic release.


This version of librelane might be problematic. Click here for more details.

Files changed (63) hide show
  1. librelane/__main__.py +12 -15
  2. librelane/common/__init__.py +1 -1
  3. librelane/common/drc.py +88 -7
  4. librelane/common/misc.py +6 -6
  5. librelane/common/toolbox.py +1 -1
  6. librelane/config/config.py +5 -1
  7. librelane/config/flow.py +51 -66
  8. librelane/config/pdk_compat.py +79 -2
  9. librelane/config/preprocessor.py +1 -1
  10. librelane/config/variable.py +2 -2
  11. librelane/flows/classic.py +1 -0
  12. librelane/flows/flow.py +3 -6
  13. librelane/flows/sequential.py +85 -40
  14. librelane/plugins.py +1 -1
  15. librelane/scripts/magic/common/read.tcl +2 -2
  16. librelane/scripts/magic/gds/extras_mag.tcl +2 -2
  17. librelane/scripts/odbpy/diodes.py +2 -2
  18. librelane/scripts/openroad/common/dpl.tcl +1 -1
  19. librelane/scripts/openroad/common/grt.tcl +3 -3
  20. librelane/scripts/openroad/common/io.tcl +163 -45
  21. librelane/scripts/openroad/common/resizer.tcl +1 -40
  22. librelane/scripts/openroad/common/set_global_connections.tcl +2 -2
  23. librelane/scripts/openroad/common/set_power_nets.tcl +1 -1
  24. librelane/scripts/openroad/common/set_rc.tcl +159 -40
  25. librelane/scripts/openroad/cts.tcl +37 -6
  26. librelane/scripts/openroad/cut_rows.tcl +19 -4
  27. librelane/scripts/openroad/drt.tcl +59 -8
  28. librelane/scripts/openroad/dump_rc.tcl +105 -0
  29. librelane/scripts/openroad/fill.tcl +2 -2
  30. librelane/scripts/openroad/floorplan.tcl +5 -3
  31. librelane/scripts/openroad/gpl.tcl +7 -8
  32. librelane/scripts/openroad/gui.tcl +22 -2
  33. librelane/scripts/openroad/insert_buffer.tcl +2 -2
  34. librelane/scripts/openroad/ioplacer.tcl +1 -2
  35. librelane/scripts/openroad/irdrop.tcl +3 -3
  36. librelane/scripts/openroad/pdn.tcl +17 -18
  37. librelane/scripts/openroad/rcx.tcl +1 -1
  38. librelane/scripts/openroad/repair_design.tcl +14 -7
  39. librelane/scripts/openroad/repair_design_postgrt.tcl +13 -6
  40. librelane/scripts/openroad/rsz_timing_postcts.tcl +13 -12
  41. librelane/scripts/openroad/rsz_timing_postgrt.tcl +13 -12
  42. librelane/scripts/openroad/sta/check_macro_instances.tcl +1 -1
  43. librelane/scripts/openroad/tapcell.tcl +13 -6
  44. librelane/scripts/openroad/ungpl.tcl +23 -0
  45. librelane/state/__init__.py +1 -1
  46. librelane/state/design_format.py +194 -142
  47. librelane/state/state.py +20 -21
  48. librelane/steps/checker.py +12 -1
  49. librelane/steps/common_variables.py +4 -4
  50. librelane/steps/cvc_rv.py +1 -1
  51. librelane/steps/klayout.py +14 -6
  52. librelane/steps/magic.py +18 -2
  53. librelane/steps/misc.py +1 -1
  54. librelane/steps/odb.py +50 -31
  55. librelane/steps/openroad.py +455 -128
  56. librelane/steps/pyosys.py +20 -5
  57. librelane/steps/step.py +17 -20
  58. librelane/steps/tclstep.py +9 -7
  59. librelane/steps/yosys.py +1 -1
  60. {librelane-2.4.0.dev7.dist-info → librelane-3.0.0.dev22.dist-info}/METADATA +1 -1
  61. {librelane-2.4.0.dev7.dist-info → librelane-3.0.0.dev22.dist-info}/RECORD +63 -61
  62. {librelane-2.4.0.dev7.dist-info → librelane-3.0.0.dev22.dist-info}/WHEEL +0 -0
  63. {librelane-2.4.0.dev7.dist-info → librelane-3.0.0.dev22.dist-info}/entry_points.txt +0 -0
librelane/steps/pyosys.py CHANGED
@@ -135,6 +135,13 @@ verilog_rtl_cfg_vars = [
135
135
  ),
136
136
  ]
137
137
 
138
+ DesignFormat(
139
+ "json_h",
140
+ "h.json",
141
+ "Design JSON Header File",
142
+ alts=["JSON_HEADER"],
143
+ ).register()
144
+
138
145
 
139
146
  class PyosysStep(Step):
140
147
  config_vars = [
@@ -201,6 +208,12 @@ class PyosysStep(Step):
201
208
  "Which log level for Yosys. At WARNING or higher, the initialization splash is also disabled.",
202
209
  default="ALL",
203
210
  ),
211
+ Variable(
212
+ "SYNTH_CORNER",
213
+ Optional[str],
214
+ "A fully qualified IPVT corner to use during synthesis. If unspecified, the value for `DEFAULT_CORNER` from the PDK will be used.",
215
+ pdk=True,
216
+ ),
204
217
  ]
205
218
 
206
219
  @abstractmethod
@@ -244,7 +257,9 @@ class VerilogStep(PyosysStep):
244
257
  cmd = super().get_command(state_in)
245
258
 
246
259
  blackbox_models = []
247
- scl_lib_list = self.toolbox.filter_views(self.config, self.config["LIB"])
260
+ scl_lib_list = self.toolbox.filter_views(
261
+ self.config, self.config["LIB"], self.config.get("SYNTH_CORNER")
262
+ )
248
263
  if self.power_defines and self.config["CELL_VERILOG_MODELS"] is not None:
249
264
  blackbox_models.extend(
250
265
  [
@@ -319,14 +334,14 @@ class JsonHeader(VerilogStep):
319
334
  def get_command(self, state_in: State) -> List[str]:
320
335
  out_file = os.path.join(
321
336
  self.step_dir,
322
- f"{self.config['DESIGN_NAME']}.{DesignFormat.JSON_HEADER.value.extension}",
337
+ f"{self.config['DESIGN_NAME']}.{DesignFormat.JSON_HEADER.extension}",
323
338
  )
324
339
  return super().get_command(state_in) + ["--output", out_file]
325
340
 
326
341
  def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
327
342
  out_file = os.path.join(
328
343
  self.step_dir,
329
- f"{self.config['DESIGN_NAME']}.{DesignFormat.JSON_HEADER.value.extension}",
344
+ f"{self.config['DESIGN_NAME']}.{DesignFormat.JSON_HEADER.extension}",
330
345
  )
331
346
  views_updates, metrics_updates = super().run(state_in, **kwargs)
332
347
  views_updates[DesignFormat.JSON_HEADER] = Path(out_file)
@@ -495,7 +510,7 @@ class SynthesisCommon(VerilogStep):
495
510
  def get_command(self, state_in: State) -> List[str]:
496
511
  out_file = os.path.join(
497
512
  self.step_dir,
498
- f"{self.config['DESIGN_NAME']}.{DesignFormat.NETLIST.value.extension}",
513
+ f"{self.config['DESIGN_NAME']}.{DesignFormat.NETLIST.extension}",
499
514
  )
500
515
  cmd = super().get_command(state_in)
501
516
  if self.config["USE_LIGHTER"]:
@@ -520,7 +535,7 @@ class SynthesisCommon(VerilogStep):
520
535
  def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
521
536
  out_file = os.path.join(
522
537
  self.step_dir,
523
- f"{self.config['DESIGN_NAME']}.{DesignFormat.NETLIST.value.extension}",
538
+ f"{self.config['DESIGN_NAME']}.{DesignFormat.NETLIST.extension}",
524
539
  )
525
540
 
526
541
  view_updates, metric_updates = super().run(state_in, **kwargs)
librelane/steps/step.py CHANGED
@@ -53,13 +53,7 @@ from ..config import (
53
53
  Variable,
54
54
  universal_flow_config_variables,
55
55
  )
56
- from ..state import (
57
- DesignFormat,
58
- DesignFormatObject,
59
- State,
60
- InvalidState,
61
- StateElement,
62
- )
56
+ from ..state import DesignFormat, State, InvalidState, StateElement
63
57
  from ..common import (
64
58
  GenericDict,
65
59
  GenericImmutableDict,
@@ -678,7 +672,7 @@ class Step(ABC):
678
672
  raise StepException(
679
673
  f"Output '{output}' is not a valid DesignFormat enum object."
680
674
  )
681
- output_str = f"{output.value.name} (.{output.value.extension})"
675
+ output_str = f"{output.full_name} (.{output.extension})"
682
676
  result += f"| {input_str} | {output_str} |\n"
683
677
 
684
678
  if len(Self.config_vars):
@@ -742,9 +736,9 @@ class Step(ABC):
742
736
  continue
743
737
 
744
738
  if state_in.get(id) != value:
745
- df = DesignFormat.by_id(id)
739
+ df = DesignFormat.factory.get(id)
746
740
  assert df is not None
747
- views_updated.append(df.value.name)
741
+ views_updated.append(df.full_name)
748
742
 
749
743
  if len(views_updated):
750
744
  result += "#### Views updated:\n"
@@ -1005,14 +999,14 @@ class Step(ABC):
1005
999
 
1006
1000
  # 2. State
1007
1001
  state_in: GenericDict[str, Any] = self.state_in.result().copy_mut()
1008
- for format in DesignFormat:
1009
- assert isinstance(format.value, DesignFormatObject) # type checker shut up
1002
+ for format_id in state_in:
1003
+ format = DesignFormat.factory.get(format_id)
1010
1004
  if format not in self.__class__.inputs and not (
1011
1005
  format == DesignFormat.DEF
1012
1006
  and DesignFormat.ODB
1013
1007
  in self.__class__.inputs # hack to write tests a bit more easily
1014
1008
  ):
1015
- state_in[format.value.id] = None
1009
+ state_in[format.id] = None
1016
1010
  state_in["metrics"] = self.state_in.result().metrics.copy_mut()
1017
1011
  dumpable_state = copy_recursive(state_in, translator=visitor)
1018
1012
  state_path = os.path.join(target_dir, "state_in.json")
@@ -1149,10 +1143,10 @@ class Step(ABC):
1149
1143
  self.start_time = time.time()
1150
1144
 
1151
1145
  for input in self.inputs:
1152
- value = state_in_result[input]
1153
- if value is None and not input.value.optional:
1146
+ value = state_in_result.get_by_df(input)
1147
+ if value is None and not input.optional:
1154
1148
  raise StepException(
1155
- f"{type(self).__name__}: missing required input '{input.name}'"
1149
+ f"{type(self).__name__}: missing required input '{input.id}'"
1156
1150
  ) from None
1157
1151
 
1158
1152
  try:
@@ -1324,9 +1318,12 @@ class Step(ABC):
1324
1318
  link_start = f"[link=file://{os.path.abspath(log_path)}]"
1325
1319
  link_end = "[/link]"
1326
1320
 
1327
- verbose(
1328
- f"Logging subprocess to [repr.filename]{link_start}'{os.path.relpath(log_path)}'{link_end}[/repr.filename]…"
1329
- )
1321
+ msg = f"Logging subprocess to [repr.filename]{link_start}'{os.path.relpath(log_path)}'{link_end}[/repr.filename]…"
1322
+ if logging.options.get_condensed_mode():
1323
+ info(msg)
1324
+ else:
1325
+ verbose(msg)
1326
+
1330
1327
  process = _popen_callable(
1331
1328
  cmd_str,
1332
1329
  encoding="utf8",
@@ -1546,7 +1543,7 @@ class CompositeStep(Step):
1546
1543
  for key in state:
1547
1544
  if (
1548
1545
  state_in.get(key) != state.get(key)
1549
- and DesignFormat.by_id(key) in self.outputs
1546
+ and DesignFormat.factory.get(key) in self.outputs
1550
1547
  ):
1551
1548
  views_updates[key] = state[key]
1552
1549
  for key in state.metrics:
@@ -88,7 +88,9 @@ class TclStep(Step):
88
88
  return value.name
89
89
  elif isinstance(value, bool):
90
90
  return "1" if value else "0"
91
- elif isinstance(value, Decimal) or isinstance(value, int):
91
+ elif isinstance(value, Decimal):
92
+ return str(value) # f"{value:e}"
93
+ elif isinstance(value, int):
92
94
  return str(value)
93
95
  else:
94
96
  return str(value)
@@ -158,15 +160,15 @@ class TclStep(Step):
158
160
  env[element] = TclStep.value_to_tcl(value)
159
161
 
160
162
  for input in self.inputs:
161
- key = f"CURRENT_{input.name}"
163
+ key = f"CURRENT_{input.id.upper()}"
162
164
  env[key] = TclStep.value_to_tcl(state[input])
163
165
 
164
166
  for output in self.outputs:
165
- if output.value.multiple:
167
+ if output.multiple:
166
168
  # Too step-specific.
167
169
  continue
168
- filename = f"{self.config['DESIGN_NAME']}.{output.value.extension}"
169
- env[f"SAVE_{output.name}"] = os.path.join(self.step_dir, filename)
170
+ filename = f"{self.config['DESIGN_NAME']}.{output.extension}"
171
+ env[f"SAVE_{output.id.upper()}"] = os.path.join(self.step_dir, filename)
170
172
 
171
173
  return env
172
174
 
@@ -210,10 +212,10 @@ class TclStep(Step):
210
212
 
211
213
  overrides: ViewsUpdate = {}
212
214
  for output in self.outputs:
213
- if output.value.multiple:
215
+ if output.multiple:
214
216
  # Too step-specific.
215
217
  continue
216
- path = Path(env[f"SAVE_{output.name}"])
218
+ path = Path(env[f"SAVE_{output.id.upper()}"])
217
219
  if not path.exists():
218
220
  continue
219
221
  overrides[output] = path
librelane/steps/yosys.py CHANGED
@@ -297,7 +297,7 @@ class EQY(Step):
297
297
  )
298
298
  else:
299
299
  info(
300
- f"PDK {self.config['PDK']} is not supported by the EQY step. Skipping…"
300
+ f"PDK {self.config['PDK']} is not supported by the EQY step. Skipping '{self.id}'…"
301
301
  )
302
302
  return {}, {}
303
303
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: librelane
3
- Version: 2.4.0.dev7
3
+ Version: 3.0.0.dev22
4
4
  Summary: An infrastructure for implementing chip design flows
5
5
  Home-page: https://github.com/librelane/librelane
6
6
  License: Apache-2.0
@@ -1,29 +1,29 @@
1
1
  librelane/__init__.py,sha256=EMpoZrRmS_wsweKjhyAg52OXCK7HWQ8o8CVrYaX4ub0,1220
2
- librelane/__main__.py,sha256=48sW8mh1MNbG0Mf75f5LekXzerbaEASLInQSrvQqPw4,14802
2
+ librelane/__main__.py,sha256=MMquJ11yCe3X00XiflcCWZKFF1_G0X3CKD3N59J-45E,14551
3
3
  librelane/__version__.py,sha256=dbE4stCACDmIoxgKksesAkTa-_hi5dW6nPLWw9Pfq3Q,1486
4
- librelane/common/__init__.py,sha256=LrzxjZKJu3-i8oEYdXtV1IxkXicHtoSUNRcOGrGVGsw,1516
4
+ librelane/common/__init__.py,sha256=WTSw8kJaR6JJsi1FLUbKAekE7qmXLTYEeoInLRXQdEc,1529
5
5
  librelane/common/cli.py,sha256=xi48GBGHRsYrLGwx40ARwpykHx7GnuHbJjHxjOwtZ5Y,2349
6
- librelane/common/drc.py,sha256=2N5jPbM0cxnOj2Kci2AhHTTgHcynTtkV118ii3kq7IU,9603
6
+ librelane/common/drc.py,sha256=3hFkUZir0d5D_uMO8-JuaJpcd3hAp9ex_teBc16XkNY,12774
7
7
  librelane/common/generic_dict.py,sha256=ASa5wtVcLuGlsBqGfLxLYXrYksqQB62iHljV04plIqI,10010
8
8
  librelane/common/metrics/__init__.py,sha256=nzdmeia1fN4CDPT604v-OHaBVydz-M4hz232g-jxJ6M,1521
9
9
  librelane/common/metrics/__main__.py,sha256=VfoOHFkGXtei6GLkPUD42X6io8QKFCHhxLMWOXPz_5E,12473
10
10
  librelane/common/metrics/library.py,sha256=CG7rubLdjuCQL9-9bzAC-64hf-KlH-iu_Fg0oKuesqs,7373
11
11
  librelane/common/metrics/metric.py,sha256=h3Xd26z5M80IJgVmmrBTjKcdGLb4I0wyjM-H4jdyi_0,6990
12
12
  librelane/common/metrics/util.py,sha256=Bl_9znlot7-Os2VigYLSmMf56aAkGdv3evWz9vfK7K4,9344
13
- librelane/common/misc.py,sha256=gxf5kDwn6m1Zib9BWK19nfAb2HLEBVlH-OyR3MiGpFQ,12408
13
+ librelane/common/misc.py,sha256=HnkvnObQzPvPgzDmUhm8lG4eXvTb4vFOcGIPGAnmXj8,12408
14
14
  librelane/common/ring_buffer.py,sha256=DGFen9y0JOmiL7E27tmzDTVSJKZtV-waF9hl5Rz9uek,1898
15
15
  librelane/common/tcl.py,sha256=G0__oR6azVCS2Aue87zboba7vAR7v-SVQeUbqfviiDA,2709
16
- librelane/common/toolbox.py,sha256=fBMkpoOOL7rdbwi3W3-U5rrCxSplAqFZtlTcJtjLgMY,20968
16
+ librelane/common/toolbox.py,sha256=ijR__rVqQ_nJtfm34H-VdSCIeArKns7lVAc1TcTUSsQ,20975
17
17
  librelane/common/tpe.py,sha256=Txj0fVscXSDJTYmEKZ2ESFHOeqrhHnaPPiwWBgyx4g8,1285
18
18
  librelane/common/types.py,sha256=oclAQkeluz_iopI_28clHzxvac7gN5moT8Rzipy5mgM,3468
19
19
  librelane/config/__init__.py,sha256=lbJmD5CbrrrnaNdIUWqFIK488ea0uyej3iExh-9mkgE,1107
20
20
  librelane/config/__main__.py,sha256=6KSXxM4qNE2yJhizUsF1kdMsY1kY7hLHoPoz50POsS8,4532
21
- librelane/config/config.py,sha256=WUznKnVYLn7ZNbUL4YMkMX7akmyc2S26ksQSicKeN1c,34964
22
- librelane/config/flow.py,sha256=qCGaUOj12j57gORzoE10m7_WG-n600llnFDMlZagUF4,16660
23
- librelane/config/pdk_compat.py,sha256=rznq5xIny9M0PmddhPOGtCIrSdv98ysAoYgkpyM0gUA,8450
24
- librelane/config/preprocessor.py,sha256=I239Y01dC2o5eb1UtcSbLdybVrZgqGyDr7ecT234I4Y,14913
21
+ librelane/config/config.py,sha256=bAxB0qpw95YoLGmMjvxAwrX1hcpHRvNhH7wjQdyW-DE,35031
22
+ librelane/config/flow.py,sha256=RS8uspcrepl8GT5SsWrBQ-kmssO4c15_lrc2nBPVK5M,16482
23
+ librelane/config/pdk_compat.py,sha256=ofqYuD-MgTcfvPVXpGJo8H1GKzCvN6sxHsK_OqCVXa8,12870
24
+ librelane/config/preprocessor.py,sha256=ATi29SHz0_OBq1IqUkGxvhHUDKB5z5jO0KqvoQXg8R8,14913
25
25
  librelane/config/removals.py,sha256=lJ0xpkCqnZAdA_ug4yq0NDjRBFuw4XsdORwymbEVGyQ,2907
26
- librelane/config/variable.py,sha256=tqH7po203Q7usX9jdVoyng2fdKPzDO36UmbCPZcIcsA,26232
26
+ librelane/config/variable.py,sha256=5TLqeyLlGciuxzce5_vTUMy1MxZsI2XG2B0o2spGV30,26242
27
27
  librelane/container.py,sha256=3KHxs3dUSVUZVYsS6fsA7dD3Q4QEQEzRxgXZZh9dzi0,7554
28
28
  librelane/env_info.py,sha256=vAE9AZ_vDFLt7Srtg4ZywPzE6vgVhCrIvg8PP25-BJ8,10460
29
29
  librelane/examples/spm/config.yaml,sha256=YKBm0lsY3AJZNcxAh1sQ1QMmJeVCpOpil6dw_RgQh4c,633
@@ -41,17 +41,17 @@ librelane/examples/spm-user_project_wrapper/template.def,sha256=7kl9l-oh4BDKuFHh
41
41
  librelane/examples/spm-user_project_wrapper/user_project_wrapper.v,sha256=zc6GC583muuWtzw3p6v_B1k8j-Oo9WypuQf_8doA4uo,3364
42
42
  librelane/flows/__init__.py,sha256=ghtmUG-taVpHJ3CKJRYZGn3dU0r93araT1EIGlBEsxg,896
43
43
  librelane/flows/builtins.py,sha256=tR14Qc1ZUey2w-Ar4DWOvxuP7LGPtMecCJq8WgcYJpk,773
44
- librelane/flows/classic.py,sha256=fI-LNhrvi7lzfsHRyJv_yjgFbpbWBVxN-9QpsgDxpTQ,10940
44
+ librelane/flows/classic.py,sha256=JB9gVgP2hHPhMuCJg7hvoj2BvJcvRec7suEXPgHmz14,10971
45
45
  librelane/flows/cli.py,sha256=P2LCFn5_RQ88yB0WuetpLAuWeKQXd-DrpCOMgnVh9Mg,16705
46
- librelane/flows/flow.py,sha256=wyYw-w6NIbCCfyfgwiq3BpztLlvZkRFUUeePoI9DpaU,34167
46
+ librelane/flows/flow.py,sha256=VIPF8LqiqQX-MYv4yPiQL1oEqrOOboi6N1a2BKmYWHs,34069
47
47
  librelane/flows/misc.py,sha256=32Om3isexesfKKiJZCajNmINc-xdv7eVx_tgoh9SR6U,2015
48
48
  librelane/flows/optimizing.py,sha256=OwZz6WGmXpliwO8vtmhjKHD-kzDyNv-zoCECZIigXsI,6076
49
- librelane/flows/sequential.py,sha256=DLzgvHKq0cO-U-eLO98zIFRnhGLfRv80_ozSX973TlI,13350
49
+ librelane/flows/sequential.py,sha256=kBpR9kxfEfdTaNy9Ter2KNQXkW6qojCwoBsFJBwTq6I,15359
50
50
  librelane/flows/synth_explore.py,sha256=8mpeuG6oxeEXVQi4NwS4I415eCu7Ak6DN4oK30h1eCQ,7418
51
51
  librelane/logging/__init__.py,sha256=mrTnzjpH6AOu2CiDZYfOMCVByAS2Xeg9HS4FJyXsJOE,1043
52
52
  librelane/logging/logger.py,sha256=kA61TGsR00Fi6kQSxgTC1pHpS_-zqC1PdQnYqnk2TWY,8632
53
53
  librelane/open_pdks_rev,sha256=_q6FiO0UljepWU99r9IgkbLrKLDIPbO-80--OFWrZxA,41
54
- librelane/plugins.py,sha256=6skeFuXQjrcx6Nen0mC_sD2LviALUrVZZJk-DQQgMQ0,820
54
+ librelane/plugins.py,sha256=G5o2h1LT4a1LO1Q0gKXXuhqcEdjdTFkYU8QUSg2D2eM,820
55
55
  librelane/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  librelane/scripts/base.sdc,sha256=zGPSBLDt-5dbYvm3AGbjsZsyKxjFOc4znyjwZM4wIps,3145
57
57
  librelane/scripts/klayout/Readme.md,sha256=hJs44QIB3lHPD3E-Z-tbAC1RBmt5Fl1khzQF2gRewLE,76
@@ -61,7 +61,7 @@ librelane/scripts/klayout/stream_out.py,sha256=0GALkaKkrjcnASng32Fxq93dsgC9Fi4Rr
61
61
  librelane/scripts/klayout/xml_drc_report_to_json.py,sha256=6nwTymQ1ypA5OgSvqySxzIWqDgGlW_1tlbtauc0BUdE,1412
62
62
  librelane/scripts/klayout/xor.drc,sha256=Nm_6JR_png-31uajL3DrW3dVGo7Kd6G-zS9RTftL25o,3131
63
63
  librelane/scripts/magic/Readme.md,sha256=NaQrlxY8l8GT-kokJNlMHeAR3PksWVbFpSznOWWshhw,126
64
- librelane/scripts/magic/common/read.tcl,sha256=BcTGgul2TuSVd0TmhXrR0mvwE4hVO6NaHcy_5uLsOMI,3132
64
+ librelane/scripts/magic/common/read.tcl,sha256=BiKyRi2ExXaR7WcSSmbtLfW-CaJU2DAmgVAi-XXrPGA,3120
65
65
  librelane/scripts/magic/def/antenna_check.tcl,sha256=T_r1CWgySFVlLMcoTrNXQ_aMRs_fBAUYUUjyXJV1Sg0,1019
66
66
  librelane/scripts/magic/def/mag.tcl,sha256=PuL3MH6pmZP5Qh2cJ0GygWNzaYjdCSCoAbOli-JB4fs,707
67
67
  librelane/scripts/magic/def/mag_gds.tcl,sha256=pPNKntSkVM0fzHuyVrUtxWc7HWY2-MIMoId6PW8SIT4,2137
@@ -69,7 +69,7 @@ librelane/scripts/magic/drc.tcl,sha256=slHVfI6QoApKc2S6V3MIqcV5xnKRMJ_1wSGleJzkH
69
69
  librelane/scripts/magic/extract_spice.tcl,sha256=lFNXfjIIzAWb2wda9ZtBOecENOOXyFBsh9HgrPYf7VQ,2737
70
70
  librelane/scripts/magic/gds/drc_batch.tcl,sha256=O76rwxSrQgoCuoxk36tRBZkQaeMfJknlHrQA3mtU2JU,2198
71
71
  librelane/scripts/magic/gds/erase_box.tcl,sha256=wsVSwMlkZFJa_MEGNsdXLnXFvjZlrl_lzIWkJjcDBgg,929
72
- librelane/scripts/magic/gds/extras_mag.tcl,sha256=aEABKbyUukMr3AhCCgpE8WpEzWwZzeFbqlQ8kAQJFYI,1325
72
+ librelane/scripts/magic/gds/extras_mag.tcl,sha256=jUu7vBUlJIvgldEC0UiohJC9FGnB2yiTzT1YbG_lmIo,1312
73
73
  librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mK0MEeQMRPN0MopgMlF2v5mq9jkssHEFRKv5gssWbLI,1063
74
74
  librelane/scripts/magic/get_bbox.tcl,sha256=iC0D5Pw09ZiNxHyy70Z0_axlc7eIT_jVGmvlutM8z_4,377
75
75
  librelane/scripts/magic/lef/extras_maglef.tcl,sha256=PsLCHxLslS3UxspmYf_vniL4Jzq54nZTa2AB5F90i58,1594
@@ -83,7 +83,7 @@ librelane/scripts/odbpy/cell_frequency.py,sha256=NfGgM8wxIvjM1C_GHUghZPOh8gpdasL
83
83
  librelane/scripts/odbpy/check_antenna_properties.py,sha256=dMD-RcoA7plcAu9IIqa2e-8XCO0EMcKG-6P39D3Gpic,3942
84
84
  librelane/scripts/odbpy/contextualize.py,sha256=G8EEgmK6ISikXD2-Pw-RTs1JxLWPnuppwL7oPfAsb84,4020
85
85
  librelane/scripts/odbpy/defutil.py,sha256=g0UaAQRt8hXb9nfI6SbMp_Hx__0o1POw33_fS6xyibU,17849
86
- librelane/scripts/odbpy/diodes.py,sha256=ZS_1niaTcwvaTTNjJcth4Qepcwxa6aV6E9WM_KiMtTI,11811
86
+ librelane/scripts/odbpy/diodes.py,sha256=qpsTW2RQlqNm4pzrUFm7d0Jj4x4zSQqladcv5SJF7XI,11752
87
87
  librelane/scripts/odbpy/disconnected_pins.py,sha256=hS_Iletg7N6K6yN_ccvWxZ3nWNZp4ecUJM-oY0kkEfA,11139
88
88
  librelane/scripts/odbpy/eco_buffer.py,sha256=QOL2J0UJQiVvuGFbpdyAj-RRsPfEL-rT_qro3Rp0KeE,6256
89
89
  librelane/scripts/odbpy/eco_diode.py,sha256=2LN7fHh9uO9JP3PYIxIwUiP1lyeqdTNF2ADTcY_Bu-g,4281
@@ -104,66 +104,68 @@ librelane/scripts/openroad/antenna_check.tcl,sha256=HPnypzv45yvbgjMlJXr8qJoFk_bp
104
104
  librelane/scripts/openroad/antenna_repair.tcl,sha256=Piu1wbt00EfleHLVktjCGuPURouWbb3G8pPTg_my88M,1180
105
105
  librelane/scripts/openroad/basic_mp.tcl,sha256=B90ro0jlJ3HxjotCvUWniHQvqBsr6wGhZPsi0HTVZwI,788
106
106
  librelane/scripts/openroad/buffer_list.tcl,sha256=sXygy1KRSUS4dZi1UOpBkGGOuXRVLME45iZUAshThps,185
107
- librelane/scripts/openroad/common/dpl.tcl,sha256=Nqq5e5OwRoyk8mHfVa5uw3DGKDGMEFrx6odpxanc_Ns,912
107
+ librelane/scripts/openroad/common/dpl.tcl,sha256=T_rzoZy8i7S9C92TOmiN79w0MCfudafEhkXcHmB1BAM,920
108
108
  librelane/scripts/openroad/common/dpl_cell_pad.tcl,sha256=KWVuj8u1-y3ZUiQr48TAsFv1GSzOCVnAjdqfBjtoQxQ,1066
109
- librelane/scripts/openroad/common/grt.tcl,sha256=DCKe5D7INCBctitbRdgZNRsBrI9Qo5v7Ag7DF45W4_U,1137
110
- librelane/scripts/openroad/common/io.tcl,sha256=cPJ4O2nBKrGKON7lO7ZX1j_TpcxQFCw3gH858yTWg8Q,18289
109
+ librelane/scripts/openroad/common/grt.tcl,sha256=2qDLSj8lKKEJHH9V9npiSMXQdsIsIHE0DVmbVRStbk4,1132
110
+ librelane/scripts/openroad/common/io.tcl,sha256=Osl_8qvBxfXcHlWBsYE9IC0Oisu_SjG1puiyY4ULmyw,22207
111
111
  librelane/scripts/openroad/common/pdn_cfg.tcl,sha256=KnQAxzlL_261Kp4M02cQ6usZHIRNBj56SAZNn1CqrZc,4552
112
- librelane/scripts/openroad/common/resizer.tcl,sha256=3p59NDcXgEkUzg_43dcUYr2KkD__fkADdqCZ3uWsUU4,3478
113
- librelane/scripts/openroad/common/set_global_connections.tcl,sha256=zGMz0Hu57ZVdLhz4djJASyre0qOi-dszylo6HD8ClUM,2899
112
+ librelane/scripts/openroad/common/resizer.tcl,sha256=OhjpVxw_8IOx5Bmh2_gh_EIHxKaX84NS37Of9Rlchpw,2255
113
+ librelane/scripts/openroad/common/set_global_connections.tcl,sha256=M-3OdAbGQXx7BrTyRIuh9c8m0ajnaWgiqrcmuZg68nk,2920
114
114
  librelane/scripts/openroad/common/set_layer_adjustments.tcl,sha256=xqAIDXsTa1_JsGmKXf6eG2Rni2EZSilSsHfJAhCl1xY,1037
115
- librelane/scripts/openroad/common/set_power_nets.tcl,sha256=Gemv1vp2Apah3ktpLwZAwtj9WqJTsNJ8lxNrvX7YTO4,1243
116
- librelane/scripts/openroad/common/set_rc.tcl,sha256=CTjMLB8XFHoWtxl8LOWVwbLfmHmzIdNIgmQuRg00564,2389
115
+ librelane/scripts/openroad/common/set_power_nets.tcl,sha256=_2n2AKl8UTh9-KeUOOwKaeyRw_4zi1Ifgh8oa9HIWc4,1253
116
+ librelane/scripts/openroad/common/set_rc.tcl,sha256=oJJCQG9RvAltgB5KTFsJcCzVvwUIkXeI7KJehCEWex0,7224
117
117
  librelane/scripts/openroad/common/set_routing_layers.tcl,sha256=fCQsIjcFRsHJPFQvk87ta4mPj-gl27KLOCK3SNXH0jM,1335
118
- librelane/scripts/openroad/cts.tcl,sha256=j-I4aIAJ_93KzVn9beKmHF_WWyxLes2NhJ_lpQAsMxQ,2634
119
- librelane/scripts/openroad/cut_rows.tcl,sha256=WJC5l8iRVg8ryA6yVEnIoMDP8lrYMOafUauuzRfZuj0,845
118
+ librelane/scripts/openroad/cts.tcl,sha256=703n6gGekpOXbRhr390DSBIo4h7qNlHUd-Amai4pGgk,3888
119
+ librelane/scripts/openroad/cut_rows.tcl,sha256=8RN4_muN1FXkXCU1VGVI_nox3BQNVGVNlQn_21HRCKM,1403
120
120
  librelane/scripts/openroad/dpl.tcl,sha256=U5iTPBf7H4w3cmCM8-yTjLTVr8npwc5G7hVuszljCVc,777
121
- librelane/scripts/openroad/drt.tcl,sha256=00OvYCsyqCUS7laOWQrzPHZp30_mVBPm1IjCFkuINSs,1175
122
- librelane/scripts/openroad/fill.tcl,sha256=LzXVqnaFbsGnIRTXuvrGNHqqWBv-T2OGcP82897M-YQ,974
123
- librelane/scripts/openroad/floorplan.tcl,sha256=akWifUeTsfplmFi11_ApU6hRcCaCmCyd0Su5ZWiTf50,5397
124
- librelane/scripts/openroad/gpl.tcl,sha256=OkTGsatlgnTj-sGg20LOhV2Ws87up8K8Ts52vPMC_NM,2540
121
+ librelane/scripts/openroad/drt.tcl,sha256=CtPVi51t3EEDUB3-UBBrE6faP6bf56TVvJHSsjcwWFw,3108
122
+ librelane/scripts/openroad/dump_rc.tcl,sha256=R0EaQqpu23TABO9b5LwwpuafdcCOvaN7jpH6PiLG2Wg,4365
123
+ librelane/scripts/openroad/fill.tcl,sha256=djxPglVtei5Wfi5cStdnowVNysXZ331R0rWT5tT1lVk,976
124
+ librelane/scripts/openroad/floorplan.tcl,sha256=Jpv7GL7hP8g4VCHYx0pLl11hfGJBx26WoAvEKYMYGvI,5487
125
+ librelane/scripts/openroad/gpl.tcl,sha256=WzxlyikUf70Q1FgaE6sIVvquYPZ8RU02_te1VBsAd5U,2614
125
126
  librelane/scripts/openroad/grt.tcl,sha256=r_73hbvc4wMi2EFoPbGTh29Lh5ATT4vVwKjxyPIOFcM,1022
126
- librelane/scripts/openroad/gui.tcl,sha256=PmZUOi06cNPUODaJF0PNWEaXLIITgcV90XXENj7R8Po,664
127
- librelane/scripts/openroad/insert_buffer.tcl,sha256=BMTovQa4_CO8LSCeEqqiDAcTs5ELZt7X3ifJy1pDBVs,4403
128
- librelane/scripts/openroad/ioplacer.tcl,sha256=FdBr8Yg_qT1VhNVTmvR-x6j_Fyh94ZuAm_K6D7k4jTY,1896
129
- librelane/scripts/openroad/irdrop.tcl,sha256=wouIIPS_C_PeYFkCBQz0ERHcsobf74QB2x1NYAxNpjc,1950
130
- librelane/scripts/openroad/pdn.tcl,sha256=t3oVkjl_I-CLaiyl2oepOx6ru9xounng43ohOzdcVk0,1592
131
- librelane/scripts/openroad/rcx.tcl,sha256=GT_4qbghTVzAZjCjHasFeoKdhwyfiOqXvzgkDZMqikA,1049
132
- librelane/scripts/openroad/repair_design.tcl,sha256=tA72A4rJp2_a93atlWXsk5FFl3v7hIXONQX74wd_KM0,1958
133
- librelane/scripts/openroad/repair_design_postgrt.tcl,sha256=_EISEYLCRcqFYwuzQy-dikvemUq8cf21sHhqNzm2vQs,1548
134
- librelane/scripts/openroad/rsz_timing_postcts.tcl,sha256=-rI4My4Apuh0d6eC6qdtIT4q1STUc-BTQHZASzeS2vM,2088
135
- librelane/scripts/openroad/rsz_timing_postgrt.tcl,sha256=ODleN_27YIFs1QTFqtc7GIbe3UBDQFHeC_GhLKMDlnI,2228
136
- librelane/scripts/openroad/sta/check_macro_instances.tcl,sha256=Da1HFlXPrFOjmNN9wlNi6ypndtRSoVHcmn2e7-kbkvA,1766
127
+ librelane/scripts/openroad/gui.tcl,sha256=BhKTcYEo-SajnYtdzXqpzjYbczy0qZ-OvEFlHMjPtlU,1255
128
+ librelane/scripts/openroad/insert_buffer.tcl,sha256=ST0tbr1LoutjjaouqgngiQZudlzzHMd5APB6DTE2TGw,4412
129
+ librelane/scripts/openroad/ioplacer.tcl,sha256=u7PQ8vaPKHAXeb2HNc5RZmOMc52j2LrccO0irnxDNLM,1861
130
+ librelane/scripts/openroad/irdrop.tcl,sha256=bXhNY_87xPV-ocF9v8wOWqjlnFPaVO_6K_DWbBHAAPs,1974
131
+ librelane/scripts/openroad/pdn.tcl,sha256=YlZp5T9A4ZEC5_05QXMyQuOfYtJhQ3uR2Gu3-xud9vM,1569
132
+ librelane/scripts/openroad/rcx.tcl,sha256=kyEhli4sGFMEj-He9UXZDGb0Tmxlw7d6iZD7t6adUx8,1057
133
+ librelane/scripts/openroad/repair_design.tcl,sha256=mSQKIT-uac2gJFia_xMNQtHJKD--aTI2T0gmM5mrWZA,2314
134
+ librelane/scripts/openroad/repair_design_postgrt.tcl,sha256=sEXdFfH2le-q0ggcsWGgCR-GCFyzPdxk4P3RZyWCnpI,1902
135
+ librelane/scripts/openroad/rsz_timing_postcts.tcl,sha256=ztDJ__R7f3eK7-xAg9SklGXqL5F1jydGPQDH7X5twNE,2553
136
+ librelane/scripts/openroad/rsz_timing_postgrt.tcl,sha256=F6ex9Ke85YzS4z9rf8SpqCKjMyzuiQEhYYSJfkN93sM,2699
137
+ librelane/scripts/openroad/sta/check_macro_instances.tcl,sha256=RYmQbLySaKekWGWLit1sCvTx6vhtwoqQZ_YhAagg_2g,1776
137
138
  librelane/scripts/openroad/sta/corner.tcl,sha256=Vt_Qg60GddXs6HUBcgMu5iPE_v93mbH0L-sqVqI7Z9A,15209
138
- librelane/scripts/openroad/tapcell.tcl,sha256=oqBV2oEqMbVtHS2wdfX0oyN4DaLLdFYXJjvv7cvrxw8,907
139
+ librelane/scripts/openroad/tapcell.tcl,sha256=4Ouy5U-_ct5Cfy3vuLQudWL0c1xWF_auLsr9rYh6dP4,1177
140
+ librelane/scripts/openroad/ungpl.tcl,sha256=vhHxou1W3VROwJePoQzmWn0h0d5lQrrt1vofyt-Woek,761
139
141
  librelane/scripts/openroad/write_views.tcl,sha256=-MxTJsB4EF7l5trDaZe-VBFjhfzqRt8F5_DZrADTs0U,892
140
142
  librelane/scripts/pyosys/construct_abc_script.py,sha256=3CCDz5ZTEPpWLco-OvikTmn361-BNitqjQE_-5zHm14,6733
141
143
  librelane/scripts/pyosys/json_header.py,sha256=2_oBI0HE6BgLYOJUVUPv-Lvz97csLndWLE6q5A8zgYw,2362
142
144
  librelane/scripts/pyosys/synthesize.py,sha256=4SztMSmcUFAoxahg_Z_oerGb3BMbwecmKRJ_WWGL9jw,16879
143
145
  librelane/scripts/pyosys/ys_common.py,sha256=mOni8WmKMNuLWsLRNcE15rcqCxGR1kf-9ckvIx-EzHY,4432
144
146
  librelane/scripts/tclsh/hello.tcl,sha256=kkR3akY7QnGHYXsQODYwLkMkUEOgWcNFtzaMTTEV2bY,34
145
- librelane/state/__init__.py,sha256=rLUdAkeB278r8pB2Jpv-ccmmmP32FR90wANIFHXdA0w,969
147
+ librelane/state/__init__.py,sha256=DZ_RyKMr2oj4p5d32u8MmDKfCxR7OEdDw-1HWKTpatA,949
146
148
  librelane/state/__main__.py,sha256=Ici4Ejg1ICUZNSYZRguC3BfEk_wFxsmE0ag0Vv8iY1I,1679
147
- librelane/state/design_format.py,sha256=ISl4O18ky1BiMkQn8Si0Tcf8UA5vrlZ1yay0iKPxvfk,5794
148
- librelane/state/state.py,sha256=J05gAeSVDiF76ITuw4WJZ7WkMyG4oTjt_7kpsI3E3PE,11957
149
+ librelane/state/design_format.py,sha256=kOLMn2pqTO8NtTypSvLPwuCSa8Zw5hGKN8UORvV2HHg,6328
150
+ librelane/state/state.py,sha256=3CdihPR6lryQMt8ihSef0O2F8-qaqy1w7V0wiwie3nk,11710
149
151
  librelane/steps/__init__.py,sha256=j3JYrdnWM74dYuEvE931oSrQI7FUz-hKWr8Mts8C0wg,1668
150
152
  librelane/steps/__main__.py,sha256=GviXtDLISKJCufKxK3oFPOSMF1GyShZbG5RXpVCYFkk,13376
151
- librelane/steps/checker.py,sha256=vul1D0cT03144qKK5QAKswClKKICK7kNB4PB6xXykvc,21353
152
- librelane/steps/common_variables.py,sha256=qT0VeIstFsDbe8VGAyqXrXxQw69OZ08haM6u1IbdFiE,10429
153
- librelane/steps/cvc_rv.py,sha256=32vxFIbzSbrDtE0fXvdoQ-v3LVMrfi3r88f8Y-TKPKg,5531
154
- librelane/steps/klayout.py,sha256=g7jYz-1cLwgfPTiMJIdAQ9zmkrwNtJLPoRg6PqOUv6Y,16490
155
- librelane/steps/magic.py,sha256=4o_WarBAQdTTuekP72uovjvqW5wsaDCpMB3LtAhC_IY,20051
156
- librelane/steps/misc.py,sha256=Xk_a6JJPljkk8pemu-NtlzDRs-8S7vuRKZKj4pnCRlE,5690
153
+ librelane/steps/checker.py,sha256=HD5YFPAbHQKsFmBDrIAbo_0clZcCszNhIXb4lHaNIeQ,21629
154
+ librelane/steps/common_variables.py,sha256=XPNEvrojD-6oIvxgo55mi2lKmARWyYq-PtY1_c_0ZUs,10318
155
+ librelane/steps/cvc_rv.py,sha256=TNnEQDJI5tEUq8OQelVmBWmNbLzygrvKsZ36utKDvp4,5543
156
+ librelane/steps/klayout.py,sha256=EFtzu53bWm-Bg_xEovdR7fc1GbWTwqkcivtr1rivHWU,16615
157
+ librelane/steps/magic.py,sha256=Xtsy1KWu8dcNq3pRlqM9WRRxtwbCQJq24IyxC0W8D2o,20254
158
+ librelane/steps/misc.py,sha256=8ubCvFeFEspXrgnzNWINY5-TXTyalNtlvcX8TSw0qdg,5685
157
159
  librelane/steps/netgen.py,sha256=R9sDWv-9wKMdi2rkuLQdOc4uLlbYhXcKKd6WsZsnLt0,8953
158
- librelane/steps/odb.py,sha256=_WhAFEVbFioSGsVrGbXQVqcXYAnE22gLA4eF1v028EQ,38030
159
- librelane/steps/openroad.py,sha256=8YLMPq22ceG3TVRGghafuCD5a7DxwLtSSuPu4_7thPs,86513
160
+ librelane/steps/odb.py,sha256=rEvlmZmMxeAh5bg_xBCiyOpnaqjvZOOmQQeEWDU6j-0,39144
161
+ librelane/steps/openroad.py,sha256=LDXVqp9jr9KxhD4oQxjXtijH9JIiaDC7nxdSJvoqKTw,99726
160
162
  librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
161
- librelane/steps/pyosys.py,sha256=mnbPR267XzJvDhtXW4cdTAB3IqvksUZt4ch5xQHgdY0,22705
162
- librelane/steps/step.py,sha256=OkFNyW86ZY9VlNQHUeJIOLHtOuO1bioXsnwky7_l1pc,55154
163
- librelane/steps/tclstep.py,sha256=0PMWJ6C3dKnlQf9mA9rZntgxUBCiByE9csHcEcM1iq0,10027
163
+ librelane/steps/pyosys.py,sha256=ASNuA_V-cCEka4I5FX4-2nQ0r3KgDXbxbNrnXpzxll4,23099
164
+ librelane/steps/step.py,sha256=T5z0Nm5z-fq_qj3BIwchnfUobmxX67cEmZ-5dUYT76s,55163
165
+ librelane/steps/tclstep.py,sha256=YwyiSXAjRIflH2vzYvTzYfN4FyAI8Td9B_CKLkBj08o,10084
164
166
  librelane/steps/verilator.py,sha256=MWx2TpLqYyea9_jSeLG9c2S5ujvYERQZRFNaMhfHxZE,7916
165
- librelane/steps/yosys.py,sha256=GX6rTiQG-ZhDxfB9SxrPQ9Sab3WC84p0OUtqiL1Nubk,12533
166
- librelane-2.4.0.dev7.dist-info/METADATA,sha256=Dpvz5yGVJ-3v0gkCKqENV4zi6HsPqAZR-iDmsrVHibA,6558
167
- librelane-2.4.0.dev7.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
168
- librelane-2.4.0.dev7.dist-info/entry_points.txt,sha256=GTBvXykNMMFsNKiJFgtEw7P1wb_VZIqVM35EFSpyZQE,263
169
- librelane-2.4.0.dev7.dist-info/RECORD,,
167
+ librelane/steps/yosys.py,sha256=LYXd5ntLbnMPEFfJiMcUumgmaqw9ZTr14Ss5Dw4fyyc,12545
168
+ librelane-3.0.0.dev22.dist-info/METADATA,sha256=dI4apslJIq4I3W0jfUaH16R--im4PGYtaJ46n0N8nd4,6559
169
+ librelane-3.0.0.dev22.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
170
+ librelane-3.0.0.dev22.dist-info/entry_points.txt,sha256=GTBvXykNMMFsNKiJFgtEw7P1wb_VZIqVM35EFSpyZQE,263
171
+ librelane-3.0.0.dev22.dist-info/RECORD,,