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 +2 -2
- librelane/flows/cli.py +39 -23
- librelane/flows/flow.py +6 -2
- librelane/scripts/odbpy/defutil.py +9 -3
- librelane/steps/step.py +2 -1
- {librelane-2.4.1.dist-info → librelane-2.4.3.dist-info}/METADATA +1 -1
- {librelane-2.4.1.dist-info → librelane-2.4.3.dist-info}/RECORD +9 -9
- {librelane-2.4.1.dist-info → librelane-2.4.3.dist-info}/WHEEL +0 -0
- {librelane-2.4.1.dist-info → librelane-2.4.3.dist-info}/entry_points.txt +0 -0
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
|
|
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
|
|
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
|
|
157
|
+
* ``config_override_strings`` ‡: ``Optional[Iterable[str]]``
|
|
155
158
|
* Sequential flow controls (if parameter ``sequential_flow_controls`` is ``True``)
|
|
156
|
-
* ``frm
|
|
157
|
-
* ``to
|
|
158
|
-
* ``skip
|
|
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
|
|
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
|
|
163
|
-
* ``last_run
|
|
164
|
-
* ``with_initial_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
|
|
167
|
-
* ``pdk_root
|
|
168
|
-
* ``pdk
|
|
169
|
-
* ``scl
|
|
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
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
"
|
|
452
|
-
)
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
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
|
|
1006
|
-
|
|
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
|
-
|
|
256
|
-
pin_bterm.
|
|
257
|
-
|
|
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
|
|
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
|
|
|
@@ -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=
|
|
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=
|
|
46
|
-
librelane/flows/flow.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
168
|
-
librelane-2.4.
|
|
169
|
-
librelane-2.4.
|
|
170
|
-
librelane-2.4.
|
|
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,,
|
|
File without changes
|
|
File without changes
|