librelane 2.4.1__py3-none-any.whl → 2.4.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.

Potentially problematic release.


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

librelane/config/flow.py CHANGED
@@ -153,13 +153,13 @@ pdk_variables = [
153
153
  Variable(
154
154
  "FP_IO_HLAYER",
155
155
  str,
156
- "The metal layer on which to place horizontal IO pins, i.e., the top and bottom of the die.",
156
+ "The metal layer on which to place horizontally-aligned (long side parallel with the horizon) pins alongside the east and west edges of the die.",
157
157
  pdk=True,
158
158
  ),
159
159
  Variable(
160
160
  "FP_IO_VLAYER",
161
161
  str,
162
- "The metal layer on which to place vertical IO pins, i.e., the top and bottom of the die.",
162
+ "The metal layer on which to place vertically-aligned (long side perpendicular to the horizon) pins alongside the north and south edges of the die.",
163
163
  pdk=True,
164
164
  ),
165
165
  Variable("RT_MIN_LAYER", str, "The lowest metal layer to route on.", pdk=True),
librelane/flows/cli.py CHANGED
@@ -35,7 +35,7 @@ from cloup.typing import Decorator
35
35
 
36
36
  from .flow import Flow
37
37
  from ..common import set_tpe, cli, get_opdks_rev, _get_process_limit
38
- from ..logging import set_log_level, verbose, err, options, LogLevels
38
+ from ..logging import set_log_level, verbose, info, err, options, LogLevels
39
39
  from ..state import State, InvalidState
40
40
 
41
41
 
@@ -146,27 +146,30 @@ def cloup_flow_opts(
146
146
  function decorated with @cloup.command (https://cloup.readthedocs.io/en/stable/autoapi/cloup/index.html#cloup.command).
147
147
 
148
148
  The following keyword arguments will be passed to the decorated function.
149
+
149
150
  * Those postfixed ‡ are compatible with the constructor for :class:`Flow`.
150
151
  * Those postfixed § are compatible with the :meth:`Flow.start`.
151
152
 
153
+ ---
154
+
152
155
  * Flow configuration options (if parameter ``config_options`` is ``True``):
153
156
  * ``flow_name``: ``Optional[str]``: A valid flow ID to be used with :meth:`Flow.factory.get`
154
- * ``config_override_strings``‡: ``Optional[Iterable[str]]``
157
+ * ``config_override_strings`` ‡: ``Optional[Iterable[str]]``
155
158
  * Sequential flow controls (if parameter ``sequential_flow_controls`` is ``True``)
156
- * ``frm``§: ``Optional[str]``: Start from a step with this ID. Supported by sequential flows.
157
- * ``to``§: ``Optional[str]``: Stop at a step with this id. Supported by sequential flows.
158
- * ``skip``§: ``Iterable[str]``: Skip these steps. Supported by sequential flows.
159
+ * ``frm`` §: ``Optional[str]``: Start from a step with this ID. Supported by sequential flows.
160
+ * ``to`` §: ``Optional[str]``: Stop at a step with this id. Supported by sequential flows.
161
+ * ``skip`` §: ``Iterable[str]``: Skip these steps. Supported by sequential flows.
159
162
  * Sequential flow reproducible (if parameter ``sequential_flow_reproducible`` is ``True``)
160
- * ``reproducible``§: ``str``: Create a reproducible for a step with is ID, aborting the flow afterwards. Supported by sequential flows.
163
+ * ``reproducible`` §: ``str``: Create a reproducible for a step with is ID, aborting the flow afterwards. Supported by sequential flows.
161
164
  * Flow run options (if parameter ``run_options`` is ``True``):
162
- * ``tag``§: ``Optional[str]``
163
- * ``last_run``§: ``bool``: If ``True``, ``tag`` is guaranteed to be None.
164
- * ``with_initial_state``§: ``Optional[State]``
165
+ * ``tag`` §: ``Optional[str]``
166
+ * ``last_run`` §: ``bool``: If ``True``, ``tag`` is guaranteed to be None.
167
+ * ``with_initial_state`` §: ``Optional[State]``
165
168
  * PDK options
166
- * ``use_volare``: ``bool``
167
- * ``pdk_root``‡: ``Optional[str]``
168
- * ``pdk``‡: ``str``
169
- * ``scl``‡: ``Optional[str]``
169
+ * ``use_volare`` : ``bool``
170
+ * ``pdk_root`` ‡: ``Optional[str]``
171
+ * ``pdk`` ‡: ``str``
172
+ * ``scl`` ‡: ``Optional[str]``
170
173
  * ``config_files``: ``Iterable[str]``: Paths to configuration files (if
171
174
  parameter ``accept_config_files`` is ``True``)
172
175
 
@@ -443,16 +446,29 @@ def cloup_flow_opts(
443
446
  err(f"Could not resolve the PDK '{pdk}'.")
444
447
  exit(1)
445
448
 
446
- version = ciel.fetch(
447
- ciel_home,
448
- pdk_family,
449
- opdks_rev,
450
- data_source=StaticWebDataSource(
451
- "https://fossi-foundation.github.io/ciel-releases"
452
- ),
453
- include_libraries=include_libraries,
454
- )
455
- pdk_root = version.get_dir(ciel_home)
449
+ if pdk_family == "ihp-sg13g2":
450
+ err(
451
+ "The IHP Open PDK is only supported in the development version of LibreLane, specifically 3.0.0.dev28 or higher."
452
+ )
453
+ info(
454
+ "If you're using Nix, switch to the 'dev' branch. If you're using the Python package, run \"python3 -m pip install 'librelane>=3.0.0.dev28'\"."
455
+ )
456
+ exit(1)
457
+
458
+ try:
459
+ version = ciel.fetch(
460
+ ciel_home,
461
+ pdk_family,
462
+ opdks_rev,
463
+ data_source=StaticWebDataSource(
464
+ "https://fossi-foundation.github.io/ciel-releases"
465
+ ),
466
+ include_libraries=include_libraries,
467
+ )
468
+ pdk_root = version.get_dir(ciel_home)
469
+ except ValueError as e:
470
+ err(f"Failed to download PDK: {e}")
471
+ exit(1)
456
472
 
457
473
  return f(*args, pdk_root=pdk_root, pdk=pdk, scl=scl, **kwargs)
458
474
 
librelane/flows/flow.py CHANGED
@@ -534,8 +534,11 @@ class Flow(ABC):
534
534
 
535
535
  :param with_initial_state: An optional initial state object to use.
536
536
  If not provided:
537
+
537
538
  * If resuming a previous run, the latest ``state_out.json`` (by filesystem modification date)
539
+
538
540
  * If not, an empty state object is created.
541
+
539
542
  :param tag: A name for this invocation of the flow. If not provided,
540
543
  one based on a date string will be created.
541
544
 
@@ -1002,8 +1005,9 @@ class Flow(ABC):
1002
1005
  A factory singleton for Flows, allowing Flow types to be registered and then
1003
1006
  retrieved by name.
1004
1007
 
1005
- See https://en.wikipedia.org/wiki/Factory_(object-oriented_programming) for
1006
- a primer.
1008
+ See
1009
+ `Factory (object-oriented programming) on Wikipedia <https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)>`_
1010
+ for a primer.
1007
1011
  """
1008
1012
 
1009
1013
  __registry: ClassVar[Dict[str, Type[Flow]]] = {}
@@ -248,13 +248,19 @@ def relocate_pins(db, input_lefs, template_def, permissive, copy_def_power=False
248
248
  pin_name = bterm.getName()
249
249
  pin_net_name = bterm.getNet().getName()
250
250
  pin_net = output_block.findNet(pin_net_name)
251
+ new_net_created = False
251
252
  if pin_net is None:
252
253
  pin_net = odb.dbNet.create(output_block, pin_net_name, True)
253
254
  pin_net.setSpecial()
254
255
  pin_net.setSigType(bterm.getSigType())
255
- pin_bterm = odb.dbBTerm.create(pin_net, pin_name)
256
- pin_bterm.setSigType(bterm.getSigType())
257
- output_bterms.append(pin_bterm)
256
+ new_net_created = True
257
+ pin_bterm = output_block.findBTerm(pin_name)
258
+ if pin_bterm is None:
259
+ pin_bterm = odb.dbBTerm.create(pin_net, pin_name)
260
+ pin_bterm.setSigType(bterm.getSigType())
261
+ output_bterms.append(pin_bterm)
262
+ elif new_net_created:
263
+ pin_bterm.connect(pin_net)
258
264
 
259
265
  grid_errors = False
260
266
  for output_bterm in output_bterms:
librelane/steps/step.py CHANGED
@@ -1440,7 +1440,8 @@ class Step(ABC):
1440
1440
  A factory singleton for Steps, allowing steps types to be registered and then
1441
1441
  retrieved by name.
1442
1442
 
1443
- See https://en.wikipedia.org/wiki/Factory_(object-oriented_programming) for
1443
+ See
1444
+ `Factory (object-oriented programming) on Wikipedia <https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)>`_
1444
1445
  a primer.
1445
1446
  """
1446
1447
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: librelane
3
- Version: 2.4.1
3
+ Version: 2.4.3
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
@@ -19,7 +19,7 @@ librelane/common/types.py,sha256=xo_OKq-2ue7JVpyQb6oUu6JuVSnLNEFKQCPBqNhZnQ4,350
19
19
  librelane/config/__init__.py,sha256=lbJmD5CbrrrnaNdIUWqFIK488ea0uyej3iExh-9mkgE,1107
20
20
  librelane/config/__main__.py,sha256=NsJGoIOb950mdXql1zmzSq10wuFovK9NGWm011NNJ3A,4474
21
21
  librelane/config/config.py,sha256=WUznKnVYLn7ZNbUL4YMkMX7akmyc2S26ksQSicKeN1c,34964
22
- librelane/config/flow.py,sha256=qCGaUOj12j57gORzoE10m7_WG-n600llnFDMlZagUF4,16660
22
+ librelane/config/flow.py,sha256=M69rKdNxoshaoSyMzUyUq8ZemtbYjoNEllDlCTzioo0,16771
23
23
  librelane/config/pdk_compat.py,sha256=rznq5xIny9M0PmddhPOGtCIrSdv98ysAoYgkpyM0gUA,8450
24
24
  librelane/config/preprocessor.py,sha256=I239Y01dC2o5eb1UtcSbLdybVrZgqGyDr7ecT234I4Y,14913
25
25
  librelane/config/removals.py,sha256=lJ0xpkCqnZAdA_ug4yq0NDjRBFuw4XsdORwymbEVGyQ,2907
@@ -42,8 +42,8 @@ librelane/examples/spm-user_project_wrapper/user_project_wrapper.v,sha256=zc6GC5
42
42
  librelane/flows/__init__.py,sha256=ghtmUG-taVpHJ3CKJRYZGn3dU0r93araT1EIGlBEsxg,896
43
43
  librelane/flows/builtins.py,sha256=tR14Qc1ZUey2w-Ar4DWOvxuP7LGPtMecCJq8WgcYJpk,773
44
44
  librelane/flows/classic.py,sha256=fI-LNhrvi7lzfsHRyJv_yjgFbpbWBVxN-9QpsgDxpTQ,10940
45
- librelane/flows/cli.py,sha256=P2LCFn5_RQ88yB0WuetpLAuWeKQXd-DrpCOMgnVh9Mg,16705
46
- librelane/flows/flow.py,sha256=LkG9B-kes37IqqLS3MDjD97c9YbHV3WP-m8Kh5fuv9Q,37132
45
+ librelane/flows/cli.py,sha256=4cJT7l9Nl-RJMMqWrS6W5QpbomM5aPYBToXdyZjwF4I,17443
46
+ librelane/flows/flow.py,sha256=V3NMKH0C8XHcfWiRwus36kQ3TqxOpnimGDCe0iLIo5A,37199
47
47
  librelane/flows/misc.py,sha256=32Om3isexesfKKiJZCajNmINc-xdv7eVx_tgoh9SR6U,2015
48
48
  librelane/flows/optimizing.py,sha256=OwZz6WGmXpliwO8vtmhjKHD-kzDyNv-zoCECZIigXsI,6076
49
49
  librelane/flows/sequential.py,sha256=DLzgvHKq0cO-U-eLO98zIFRnhGLfRv80_ozSX973TlI,13350
@@ -83,7 +83,7 @@ librelane/scripts/odbpy/apply_def_template.py,sha256=Tn6y65biu0bAQ6XilYxq5jn3a_K
83
83
  librelane/scripts/odbpy/cell_frequency.py,sha256=NfGgM8wxIvjM1C_GHUghZPOh8gpdasLOWR4qBdHHLFE,3105
84
84
  librelane/scripts/odbpy/check_antenna_properties.py,sha256=dMD-RcoA7plcAu9IIqa2e-8XCO0EMcKG-6P39D3Gpic,3942
85
85
  librelane/scripts/odbpy/contextualize.py,sha256=G8EEgmK6ISikXD2-Pw-RTs1JxLWPnuppwL7oPfAsb84,4020
86
- librelane/scripts/odbpy/defutil.py,sha256=g0UaAQRt8hXb9nfI6SbMp_Hx__0o1POw33_fS6xyibU,17849
86
+ librelane/scripts/odbpy/defutil.py,sha256=gBANy_XTeLeXRBMGdCy2vI5y44qMB6E_Fy0VeyW6rUg,18104
87
87
  librelane/scripts/odbpy/diodes.py,sha256=ZS_1niaTcwvaTTNjJcth4Qepcwxa6aV6E9WM_KiMtTI,11811
88
88
  librelane/scripts/odbpy/disconnected_pins.py,sha256=hS_Iletg7N6K6yN_ccvWxZ3nWNZp4ecUJM-oY0kkEfA,11139
89
89
  librelane/scripts/odbpy/eco_buffer.py,sha256=QOL2J0UJQiVvuGFbpdyAj-RRsPfEL-rT_qro3Rp0KeE,6256
@@ -160,11 +160,11 @@ librelane/steps/odb.py,sha256=WaYquQfdp0j5XSbDa7a_un0HF4bOprpuC6fFtKpHHI8,37956
160
160
  librelane/steps/openroad.py,sha256=XJ8D8pvKLToTR83uTWAeszNu30BDGewntBQ8uttXGeU,86458
161
161
  librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
162
162
  librelane/steps/pyosys.py,sha256=mnbPR267XzJvDhtXW4cdTAB3IqvksUZt4ch5xQHgdY0,22705
163
- librelane/steps/step.py,sha256=M0Jqvr8sQaYmvXApZ-tfa4SFVOb-l_2ZfR31QaoRUf0,55742
163
+ librelane/steps/step.py,sha256=oV67Vdw7apNaHovvLguNwX4EylWEvzqkciV6Edocc_M,55802
164
164
  librelane/steps/tclstep.py,sha256=0PMWJ6C3dKnlQf9mA9rZntgxUBCiByE9csHcEcM1iq0,10027
165
165
  librelane/steps/verilator.py,sha256=MWx2TpLqYyea9_jSeLG9c2S5ujvYERQZRFNaMhfHxZE,7916
166
166
  librelane/steps/yosys.py,sha256=GX6rTiQG-ZhDxfB9SxrPQ9Sab3WC84p0OUtqiL1Nubk,12533
167
- librelane-2.4.1.dist-info/METADATA,sha256=1MqDGeycFJQRU52dJbjGPx_9nDJG_zZW-BrjunZQmIM,6557
168
- librelane-2.4.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
169
- librelane-2.4.1.dist-info/entry_points.txt,sha256=0eZs2NOH-w-W_GVRCs-ualst26XplkPpJkOnGWMaFw0,306
170
- librelane-2.4.1.dist-info/RECORD,,
167
+ librelane-2.4.3.dist-info/METADATA,sha256=3edrDxxPFG1cmPqpgoMQtQAPf7ZFN-DWBVMka_wvSAU,6557
168
+ librelane-2.4.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
169
+ librelane-2.4.3.dist-info/entry_points.txt,sha256=0eZs2NOH-w-W_GVRCs-ualst26XplkPpJkOnGWMaFw0,306
170
+ librelane-2.4.3.dist-info/RECORD,,