librelane 2.4.0.dev2__py3-none-any.whl → 2.4.7__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.
- librelane/__init__.py +1 -1
- librelane/__main__.py +34 -27
- librelane/common/__init__.py +2 -0
- librelane/common/cli.py +1 -1
- librelane/common/drc.py +1 -0
- librelane/common/generic_dict.py +1 -1
- librelane/common/metrics/__main__.py +1 -1
- librelane/common/misc.py +58 -2
- librelane/common/tcl.py +2 -1
- librelane/common/types.py +2 -3
- librelane/config/__main__.py +1 -4
- librelane/config/flow.py +2 -2
- librelane/config/preprocessor.py +1 -1
- librelane/config/variable.py +136 -7
- librelane/container.py +55 -31
- librelane/env_info.py +129 -115
- librelane/examples/hold_eco_demo/config.yaml +18 -0
- librelane/examples/hold_eco_demo/demo.v +27 -0
- librelane/flows/cli.py +39 -23
- librelane/flows/flow.py +100 -36
- librelane/help/__main__.py +39 -0
- librelane/scripts/magic/def/mag_gds.tcl +0 -2
- librelane/scripts/magic/drc.tcl +0 -1
- librelane/scripts/magic/gds/extras_mag.tcl +0 -2
- librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -1
- librelane/scripts/magic/lef/extras_maglef.tcl +0 -2
- librelane/scripts/magic/lef/maglef.tcl +0 -1
- librelane/scripts/magic/wrapper.tcl +2 -0
- librelane/scripts/odbpy/defutil.py +15 -10
- librelane/scripts/odbpy/eco_buffer.py +182 -0
- librelane/scripts/odbpy/eco_diode.py +140 -0
- librelane/scripts/odbpy/ioplace_parser/__init__.py +1 -1
- librelane/scripts/odbpy/ioplace_parser/parse.py +1 -1
- librelane/scripts/odbpy/power_utils.py +8 -6
- librelane/scripts/odbpy/reader.py +17 -13
- librelane/scripts/openroad/common/io.tcl +66 -2
- librelane/scripts/openroad/gui.tcl +23 -1
- librelane/state/design_format.py +16 -1
- librelane/state/state.py +11 -3
- librelane/steps/__init__.py +1 -1
- librelane/steps/__main__.py +4 -4
- librelane/steps/checker.py +7 -8
- librelane/steps/klayout.py +11 -1
- librelane/steps/magic.py +24 -14
- librelane/steps/misc.py +5 -0
- librelane/steps/odb.py +193 -28
- librelane/steps/openroad.py +64 -47
- librelane/steps/pyosys.py +18 -1
- librelane/steps/step.py +36 -17
- librelane/steps/yosys.py +9 -1
- {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/METADATA +10 -11
- {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/RECORD +54 -50
- {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/entry_points.txt +1 -0
- librelane/scripts/odbpy/exception_codes.py +0 -17
- {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/WHEEL +0 -0
librelane/steps/step.py
CHANGED
|
@@ -53,7 +53,13 @@ from ..config import (
|
|
|
53
53
|
Variable,
|
|
54
54
|
universal_flow_config_variables,
|
|
55
55
|
)
|
|
56
|
-
from ..state import
|
|
56
|
+
from ..state import (
|
|
57
|
+
DesignFormat,
|
|
58
|
+
DesignFormatObject,
|
|
59
|
+
State,
|
|
60
|
+
InvalidState,
|
|
61
|
+
StateElement,
|
|
62
|
+
)
|
|
57
63
|
from ..common import (
|
|
58
64
|
GenericDict,
|
|
59
65
|
GenericImmutableDict,
|
|
@@ -619,6 +625,7 @@ class Step(ABC):
|
|
|
619
625
|
*,
|
|
620
626
|
docstring_override: str = "",
|
|
621
627
|
use_dropdown: bool = False,
|
|
628
|
+
myst_anchors: bool = False,
|
|
622
629
|
): # pragma: no cover
|
|
623
630
|
"""
|
|
624
631
|
Renders Markdown help for this step to a string.
|
|
@@ -661,7 +668,10 @@ class Step(ABC):
|
|
|
661
668
|
for input, output in zip_longest(Self.inputs, Self.outputs):
|
|
662
669
|
input_str = ""
|
|
663
670
|
if input is not None:
|
|
664
|
-
|
|
671
|
+
optional = "?" if input.value.optional else ""
|
|
672
|
+
input_str = (
|
|
673
|
+
f"{input.value.name}{optional} (.{input.value.extension})"
|
|
674
|
+
)
|
|
665
675
|
|
|
666
676
|
output_str = ""
|
|
667
677
|
if output is not None:
|
|
@@ -673,25 +683,22 @@ class Step(ABC):
|
|
|
673
683
|
result += f"| {input_str} | {output_str} |\n"
|
|
674
684
|
|
|
675
685
|
if len(Self.config_vars):
|
|
686
|
+
config_var_anchors = f"({Self.id.lower()}-configuration-variables)="
|
|
676
687
|
result += textwrap.dedent(
|
|
677
688
|
f"""
|
|
678
|
-
|
|
689
|
+
{config_var_anchors * myst_anchors}
|
|
679
690
|
#### Configuration Variables
|
|
680
|
-
|
|
681
|
-
| Variable Name | Type | Description | Default | Units |
|
|
682
|
-
| - | - | - | - | - |
|
|
683
691
|
"""
|
|
684
692
|
)
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
result += f"| `{var.name}`{{#{var._get_docs_identifier(Self.id)}}}{pdk_superscript} | {var.type_repr_md(for_document=True)} | {var.desc_repr_md()} | `{var.default}` | {units} |\n"
|
|
689
|
-
result += "\n"
|
|
693
|
+
result += Variable._render_table_md(
|
|
694
|
+
Self.config_vars, myst_anchor_owner_id=Self.id if myst_anchors else None
|
|
695
|
+
)
|
|
690
696
|
|
|
697
|
+
step_anchor = f"(step-{slugify(Self.id.lower())})="
|
|
691
698
|
result = (
|
|
692
699
|
textwrap.dedent(
|
|
693
700
|
f"""
|
|
694
|
-
|
|
701
|
+
{step_anchor * myst_anchors}
|
|
695
702
|
### {Self.__get_desc()}
|
|
696
703
|
"""
|
|
697
704
|
)
|
|
@@ -703,11 +710,22 @@ class Step(ABC):
|
|
|
703
710
|
@classmethod
|
|
704
711
|
def display_help(Self): # pragma: no cover
|
|
705
712
|
"""
|
|
706
|
-
|
|
713
|
+
Displays Markdown help for this Step.
|
|
714
|
+
|
|
715
|
+
If in an IPython environment, it's rendered using ``IPython.display``.
|
|
716
|
+
Otherwise, it's rendered using ``rich.markdown``.
|
|
707
717
|
"""
|
|
708
|
-
|
|
718
|
+
try:
|
|
719
|
+
get_ipython() # type: ignore
|
|
720
|
+
|
|
721
|
+
import IPython.display
|
|
709
722
|
|
|
710
|
-
|
|
723
|
+
IPython.display.display(IPython.display.Markdown(Self.get_help_md()))
|
|
724
|
+
except NameError:
|
|
725
|
+
from ..logging import console
|
|
726
|
+
from rich.markdown import Markdown
|
|
727
|
+
|
|
728
|
+
console.log(Markdown(Self.get_help_md()))
|
|
711
729
|
|
|
712
730
|
def _repr_markdown_(self) -> str: # pragma: no cover
|
|
713
731
|
"""
|
|
@@ -1141,7 +1159,7 @@ class Step(ABC):
|
|
|
1141
1159
|
|
|
1142
1160
|
for input in self.inputs:
|
|
1143
1161
|
value = state_in_result[input]
|
|
1144
|
-
if value is None:
|
|
1162
|
+
if value is None and not input.value.optional:
|
|
1145
1163
|
raise StepException(
|
|
1146
1164
|
f"{type(self).__name__}: missing required input '{input.name}'"
|
|
1147
1165
|
) from None
|
|
@@ -1416,7 +1434,8 @@ class Step(ABC):
|
|
|
1416
1434
|
A factory singleton for Steps, allowing steps types to be registered and then
|
|
1417
1435
|
retrieved by name.
|
|
1418
1436
|
|
|
1419
|
-
See
|
|
1437
|
+
See
|
|
1438
|
+
`Factory (object-oriented programming) on Wikipedia <https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)>`_
|
|
1420
1439
|
a primer.
|
|
1421
1440
|
"""
|
|
1422
1441
|
|
librelane/steps/yosys.py
CHANGED
|
@@ -248,6 +248,14 @@ class YosysStep(TclStep):
|
|
|
248
248
|
|
|
249
249
|
@Step.factory.register()
|
|
250
250
|
class EQY(Step):
|
|
251
|
+
"""
|
|
252
|
+
Experimental: Uses the `EQY <https://github.com/yosyshq/eqy>`_ utility to
|
|
253
|
+
perform an RTL vs. Netlist equivalence check.
|
|
254
|
+
|
|
255
|
+
Currently, you are expected to provide your own EQY script if you want this
|
|
256
|
+
to work properly.
|
|
257
|
+
"""
|
|
258
|
+
|
|
251
259
|
id = "Yosys.EQY"
|
|
252
260
|
name = "Equivalence Check"
|
|
253
261
|
long_name = "RTL/Netlist Equivalence Check"
|
|
@@ -262,7 +270,7 @@ class EQY(Step):
|
|
|
262
270
|
Variable(
|
|
263
271
|
"EQY_SCRIPT",
|
|
264
272
|
Optional[Path],
|
|
265
|
-
"
|
|
273
|
+
"The EQY script to use. If unset, a generic EQY script will be generated, but this fails in a number of scenarios.",
|
|
266
274
|
),
|
|
267
275
|
Variable(
|
|
268
276
|
"MACRO_PLACEMENT_CFG",
|
|
@@ -1,32 +1,31 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: librelane
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.7
|
|
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
|
|
7
7
|
Author: Mohamed Gaber
|
|
8
8
|
Author-email: me@donn.website
|
|
9
|
-
Requires-Python: >=3.8,<4
|
|
9
|
+
Requires-Python: >=3.8.1,<4
|
|
10
10
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.9
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Requires-Dist: ciel (>=0.
|
|
19
|
-
Requires-Dist: click (>=8,<
|
|
17
|
+
Requires-Dist: ciel (>=2.0.3,<3)
|
|
18
|
+
Requires-Dist: click (>=8,<8.2)
|
|
20
19
|
Requires-Dist: cloup (>=3.0.5,<4)
|
|
21
20
|
Requires-Dist: deprecated (>=1.2.10,<2)
|
|
22
21
|
Requires-Dist: httpx (>=0.22.0,<0.29)
|
|
23
22
|
Requires-Dist: klayout (>=0.29.0,<0.31.0)
|
|
24
|
-
Requires-Dist: libparse (
|
|
23
|
+
Requires-Dist: lln-libparse (==0.56.*)
|
|
25
24
|
Requires-Dist: lxml (>=4.9.0)
|
|
26
25
|
Requires-Dist: psutil (>=5.9.0)
|
|
27
26
|
Requires-Dist: pyyaml (>=5,<7)
|
|
28
27
|
Requires-Dist: rapidfuzz (>=3.9.0,<4)
|
|
29
|
-
Requires-Dist: rich (>=12,<
|
|
28
|
+
Requires-Dist: rich (>=12,<15)
|
|
30
29
|
Requires-Dist: semver (>=3.0.2,<4.0.0)
|
|
31
30
|
Requires-Dist: yamlcore (>=0.0.2,<0.0.3)
|
|
32
31
|
Project-URL: Documentation, https://librelane.readthedocs.io
|
|
@@ -36,7 +35,7 @@ Description-Content-Type: text/markdown
|
|
|
36
35
|
<h1 align="center">LibreLane</h1>
|
|
37
36
|
<p align="center">
|
|
38
37
|
<a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0"/></a>
|
|
39
|
-
<a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8 or higher" /></a>
|
|
38
|
+
<a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8.1 or higher" /></a>
|
|
40
39
|
<a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style: black"/></a>
|
|
41
40
|
<a href="https://mypy-lang.org/"><img src="https://www.mypy-lang.org/static/mypy_badge.svg" alt="Checked with mypy"/></a>
|
|
42
41
|
<a href="https://nixos.org/"><img src="https://img.shields.io/static/v1?logo=nixos&logoColor=white&label=&message=Built%20with%20Nix&color=41439a" alt="Built with Nix"/></a>
|
|
@@ -73,7 +72,7 @@ Colaboratory by following
|
|
|
73
72
|
|
|
74
73
|
You'll need the following:
|
|
75
74
|
|
|
76
|
-
* Python **3.8** or higher with PIP, Venv and Tkinter
|
|
75
|
+
* Python **3.8.1** or higher with PIP, Venv and Tkinter
|
|
77
76
|
|
|
78
77
|
### Nix (Recommended)
|
|
79
78
|
|
|
@@ -81,7 +80,7 @@ Works for macOS and Linux (x86-64 and aarch64). Recommended, as it is more
|
|
|
81
80
|
integrated with your filesystem and overall has less upload and download deltas.
|
|
82
81
|
|
|
83
82
|
See
|
|
84
|
-
[Nix-based installation](https://librelane.readthedocs.io/en/latest/
|
|
83
|
+
[Nix-based installation](https://librelane.readthedocs.io/en/latest/installation/nix_installation/index.html)
|
|
85
84
|
in the docs for more info.
|
|
86
85
|
|
|
87
86
|
### Docker
|
|
@@ -89,7 +88,7 @@ in the docs for more info.
|
|
|
89
88
|
Works for Windows, macOS and Linux (x86-64 and aarch64).
|
|
90
89
|
|
|
91
90
|
See
|
|
92
|
-
[Docker-based installation](https://librelane.readthedocs.io/en/latest/
|
|
91
|
+
[Docker-based installation](https://librelane.readthedocs.io/en/latest/installation/docker_installation/index.html)
|
|
93
92
|
in the docs for more info.
|
|
94
93
|
|
|
95
94
|
Do note you'll need to add `--dockerized` right after `librelane` in most CLI
|
|
@@ -1,31 +1,33 @@
|
|
|
1
|
-
librelane/__init__.py,sha256=
|
|
2
|
-
librelane/__main__.py,sha256=
|
|
1
|
+
librelane/__init__.py,sha256=Xbz6e-J9pNxv0AIi89-mApMEQQtRgxJyzHS6yYc00Y0,1221
|
|
2
|
+
librelane/__main__.py,sha256=XeQHNgw0w3ODYxJ9K-dQVfQMMoguteytCrXRquv3RjQ,15055
|
|
3
3
|
librelane/__version__.py,sha256=dbE4stCACDmIoxgKksesAkTa-_hi5dW6nPLWw9Pfq3Q,1486
|
|
4
|
-
librelane/common/__init__.py,sha256=
|
|
5
|
-
librelane/common/cli.py,sha256=
|
|
6
|
-
librelane/common/drc.py,sha256=
|
|
7
|
-
librelane/common/generic_dict.py,sha256=
|
|
4
|
+
librelane/common/__init__.py,sha256=tUX6pVEPrf7LnX7OiIaQFCyB1fs5AgwGt0xR2OHWC5Q,1557
|
|
5
|
+
librelane/common/cli.py,sha256=xi48GBGHRsYrLGwx40ARwpykHx7GnuHbJjHxjOwtZ5Y,2349
|
|
6
|
+
librelane/common/drc.py,sha256=3AUxg986X_lCPrQvDkLekVTeC4-4qS7ZDpVMKlVkEmo,9638
|
|
7
|
+
librelane/common/generic_dict.py,sha256=ASa5wtVcLuGlsBqGfLxLYXrYksqQB62iHljV04plIqI,10010
|
|
8
8
|
librelane/common/metrics/__init__.py,sha256=nzdmeia1fN4CDPT604v-OHaBVydz-M4hz232g-jxJ6M,1521
|
|
9
|
-
librelane/common/metrics/__main__.py,sha256=
|
|
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=
|
|
13
|
+
librelane/common/misc.py,sha256=q6LRHIld6rs6VbmPBQHXlxfqS9O1z9mtMN-rUdXwMec,14466
|
|
14
14
|
librelane/common/ring_buffer.py,sha256=DGFen9y0JOmiL7E27tmzDTVSJKZtV-waF9hl5Rz9uek,1898
|
|
15
|
-
librelane/common/tcl.py,sha256=
|
|
15
|
+
librelane/common/tcl.py,sha256=eNHMyAU_96z_ABPV56HMLDe__Zm2QLZBxR5PjWJN1t8,2718
|
|
16
16
|
librelane/common/toolbox.py,sha256=fBMkpoOOL7rdbwi3W3-U5rrCxSplAqFZtlTcJtjLgMY,20968
|
|
17
17
|
librelane/common/tpe.py,sha256=Txj0fVscXSDJTYmEKZ2ESFHOeqrhHnaPPiwWBgyx4g8,1285
|
|
18
|
-
librelane/common/types.py,sha256=
|
|
18
|
+
librelane/common/types.py,sha256=xo_OKq-2ue7JVpyQb6oUu6JuVSnLNEFKQCPBqNhZnQ4,3509
|
|
19
19
|
librelane/config/__init__.py,sha256=lbJmD5CbrrrnaNdIUWqFIK488ea0uyej3iExh-9mkgE,1107
|
|
20
|
-
librelane/config/__main__.py,sha256=
|
|
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
|
-
librelane/config/preprocessor.py,sha256=
|
|
24
|
+
librelane/config/preprocessor.py,sha256=jakORJjdoJhXky45oCiVYw51GDoxKjD3HJlTTAYRDaw,14913
|
|
25
25
|
librelane/config/removals.py,sha256=lJ0xpkCqnZAdA_ug4yq0NDjRBFuw4XsdORwymbEVGyQ,2907
|
|
26
|
-
librelane/config/variable.py,sha256=
|
|
27
|
-
librelane/container.py,sha256=
|
|
28
|
-
librelane/env_info.py,sha256=
|
|
26
|
+
librelane/config/variable.py,sha256=HWPizQgSFEXCrzzHP76s_uw1McxH0Kh7H5-y3mv8Yo4,30623
|
|
27
|
+
librelane/container.py,sha256=GN1lqVguuqPAuTxINii-bWKBKmIQ-VJc0WHPDEp73sU,8829
|
|
28
|
+
librelane/env_info.py,sha256=xF9iqwwJv5yZz7n7BTrrT_yP3Dp1HjAOUObNE9k_1g4,11074
|
|
29
|
+
librelane/examples/hold_eco_demo/config.yaml,sha256=InDj4pS6o6TpyvQZyR3qCrYcIHdmCd6l04wqanKnK_A,490
|
|
30
|
+
librelane/examples/hold_eco_demo/demo.v,sha256=0In_gDLH1svr4xK59l5N15VjCNtN74uZx1yT5tIVGrM,471
|
|
29
31
|
librelane/examples/spm/config.yaml,sha256=YKBm0lsY3AJZNcxAh1sQ1QMmJeVCpOpil6dw_RgQh4c,633
|
|
30
32
|
librelane/examples/spm/pin_order.cfg,sha256=-8mTGFKnES0vhQATfaE2TXN_mdCZ3SZIN90Src1l6fY,52
|
|
31
33
|
librelane/examples/spm/src/impl.sdc,sha256=wP18UoVlOJ9q4lmUoa3XpgcpPdyzEqHBNxCgOOU7QH0,2961
|
|
@@ -42,12 +44,13 @@ librelane/examples/spm-user_project_wrapper/user_project_wrapper.v,sha256=zc6GC5
|
|
|
42
44
|
librelane/flows/__init__.py,sha256=ghtmUG-taVpHJ3CKJRYZGn3dU0r93araT1EIGlBEsxg,896
|
|
43
45
|
librelane/flows/builtins.py,sha256=tR14Qc1ZUey2w-Ar4DWOvxuP7LGPtMecCJq8WgcYJpk,773
|
|
44
46
|
librelane/flows/classic.py,sha256=fI-LNhrvi7lzfsHRyJv_yjgFbpbWBVxN-9QpsgDxpTQ,10940
|
|
45
|
-
librelane/flows/cli.py,sha256=
|
|
46
|
-
librelane/flows/flow.py,sha256=
|
|
47
|
+
librelane/flows/cli.py,sha256=4cJT7l9Nl-RJMMqWrS6W5QpbomM5aPYBToXdyZjwF4I,17443
|
|
48
|
+
librelane/flows/flow.py,sha256=f7aZgkb42L0c7PUQvVWuaDRTh77rkKNURzS9Nb-SSNE,36865
|
|
47
49
|
librelane/flows/misc.py,sha256=32Om3isexesfKKiJZCajNmINc-xdv7eVx_tgoh9SR6U,2015
|
|
48
50
|
librelane/flows/optimizing.py,sha256=OwZz6WGmXpliwO8vtmhjKHD-kzDyNv-zoCECZIigXsI,6076
|
|
49
51
|
librelane/flows/sequential.py,sha256=DLzgvHKq0cO-U-eLO98zIFRnhGLfRv80_ozSX973TlI,13350
|
|
50
52
|
librelane/flows/synth_explore.py,sha256=8mpeuG6oxeEXVQi4NwS4I415eCu7Ak6DN4oK30h1eCQ,7418
|
|
53
|
+
librelane/help/__main__.py,sha256=gnm0yi-Ih8YoyY2cMiHONV2ZzR-tvHfdEHCb28YQJZ0,1243
|
|
51
54
|
librelane/logging/__init__.py,sha256=mrTnzjpH6AOu2CiDZYfOMCVByAS2Xeg9HS4FJyXsJOE,1043
|
|
52
55
|
librelane/logging/logger.py,sha256=kA61TGsR00Fi6kQSxgTC1pHpS_-zqC1PdQnYqnk2TWY,8632
|
|
53
56
|
librelane/open_pdks_rev,sha256=_q6FiO0UljepWU99r9IgkbLrKLDIPbO-80--OFWrZxA,41
|
|
@@ -64,38 +67,39 @@ librelane/scripts/magic/Readme.md,sha256=NaQrlxY8l8GT-kokJNlMHeAR3PksWVbFpSznOWW
|
|
|
64
67
|
librelane/scripts/magic/common/read.tcl,sha256=BcTGgul2TuSVd0TmhXrR0mvwE4hVO6NaHcy_5uLsOMI,3132
|
|
65
68
|
librelane/scripts/magic/def/antenna_check.tcl,sha256=T_r1CWgySFVlLMcoTrNXQ_aMRs_fBAUYUUjyXJV1Sg0,1019
|
|
66
69
|
librelane/scripts/magic/def/mag.tcl,sha256=PuL3MH6pmZP5Qh2cJ0GygWNzaYjdCSCoAbOli-JB4fs,707
|
|
67
|
-
librelane/scripts/magic/def/mag_gds.tcl,sha256=
|
|
68
|
-
librelane/scripts/magic/drc.tcl,sha256=
|
|
70
|
+
librelane/scripts/magic/def/mag_gds.tcl,sha256=zZESdGgKZG6__Z9f8Kjxhw3Fx4FMpYlSBGCilggIuv8,2129
|
|
71
|
+
librelane/scripts/magic/drc.tcl,sha256=gPGyI96lR10dJXcJACajzHaHiT6ayAYPJqrmmuQkABc,2395
|
|
69
72
|
librelane/scripts/magic/extract_spice.tcl,sha256=lFNXfjIIzAWb2wda9ZtBOecENOOXyFBsh9HgrPYf7VQ,2737
|
|
70
73
|
librelane/scripts/magic/gds/drc_batch.tcl,sha256=O76rwxSrQgoCuoxk36tRBZkQaeMfJknlHrQA3mtU2JU,2198
|
|
71
74
|
librelane/scripts/magic/gds/erase_box.tcl,sha256=wsVSwMlkZFJa_MEGNsdXLnXFvjZlrl_lzIWkJjcDBgg,929
|
|
72
|
-
librelane/scripts/magic/gds/extras_mag.tcl,sha256=
|
|
73
|
-
librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=
|
|
75
|
+
librelane/scripts/magic/gds/extras_mag.tcl,sha256=hOmFK12wmGiA_H70YS0jVK4Faav-1sTCpajUxjTsopM,1317
|
|
76
|
+
librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mfYTQdio1XAA0DpWlV5JS7c3rkxtSS06kZqVfDfKGuQ,1056
|
|
74
77
|
librelane/scripts/magic/get_bbox.tcl,sha256=iC0D5Pw09ZiNxHyy70Z0_axlc7eIT_jVGmvlutM8z_4,377
|
|
75
|
-
librelane/scripts/magic/lef/extras_maglef.tcl,sha256=
|
|
76
|
-
librelane/scripts/magic/lef/maglef.tcl,sha256=
|
|
78
|
+
librelane/scripts/magic/lef/extras_maglef.tcl,sha256=V0TivPN4aLJ0is497IAmOB1qQm8vmCqqycKuwV3w0HY,1586
|
|
79
|
+
librelane/scripts/magic/lef/maglef.tcl,sha256=I6-xFtsCZQtQI4UbU53gaWrpELWUd4agNF5LLgq9Eq0,856
|
|
77
80
|
librelane/scripts/magic/lef.tcl,sha256=Ij_v63siQrgYh56juCiZMcJBBCl2Lco3Ah4YKg-xiAU,2076
|
|
78
81
|
librelane/scripts/magic/open.tcl,sha256=qgk3HiT4qI-pMWn2E2MxwijgveCVmt6oCd8wEWh0jio,915
|
|
79
|
-
librelane/scripts/magic/wrapper.tcl,sha256=
|
|
82
|
+
librelane/scripts/magic/wrapper.tcl,sha256=qO33N2AiEYBTABMB5vWMWWEd2FpyOhg8JlcGsBVD6MY,712
|
|
80
83
|
librelane/scripts/netgen/setup.tcl,sha256=LBkdtVZpxrNGQ8UNwMkEQ-xSrkn9DNIBW_jzB9b1gYk,979
|
|
81
84
|
librelane/scripts/odbpy/apply_def_template.py,sha256=Tn6y65biu0bAQ6XilYxq5jn3a_KqjTl423-aXWI864k,1534
|
|
82
85
|
librelane/scripts/odbpy/cell_frequency.py,sha256=NfGgM8wxIvjM1C_GHUghZPOh8gpdasLOWR4qBdHHLFE,3105
|
|
83
86
|
librelane/scripts/odbpy/check_antenna_properties.py,sha256=dMD-RcoA7plcAu9IIqa2e-8XCO0EMcKG-6P39D3Gpic,3942
|
|
84
87
|
librelane/scripts/odbpy/contextualize.py,sha256=G8EEgmK6ISikXD2-Pw-RTs1JxLWPnuppwL7oPfAsb84,4020
|
|
85
|
-
librelane/scripts/odbpy/defutil.py,sha256=
|
|
88
|
+
librelane/scripts/odbpy/defutil.py,sha256=gBANy_XTeLeXRBMGdCy2vI5y44qMB6E_Fy0VeyW6rUg,18104
|
|
86
89
|
librelane/scripts/odbpy/diodes.py,sha256=ZS_1niaTcwvaTTNjJcth4Qepcwxa6aV6E9WM_KiMtTI,11811
|
|
87
90
|
librelane/scripts/odbpy/disconnected_pins.py,sha256=hS_Iletg7N6K6yN_ccvWxZ3nWNZp4ecUJM-oY0kkEfA,11139
|
|
88
|
-
librelane/scripts/odbpy/
|
|
91
|
+
librelane/scripts/odbpy/eco_buffer.py,sha256=lb7KtVZUzXSkPq9mRTXPVnSo_isy4845wohLFPhDN30,6292
|
|
92
|
+
librelane/scripts/odbpy/eco_diode.py,sha256=LSM3D0ygE7_vSHbXt49DU1R068NkqmSYVlb32a3scZI,4307
|
|
89
93
|
librelane/scripts/odbpy/filter_unannotated.py,sha256=Gvcaj_WNr6TPiHk-36nkMu4betNHZo1g2lD3UcA9hDQ,2950
|
|
90
94
|
librelane/scripts/odbpy/io_place.py,sha256=LSJIJQDLSOpENyQOg_kVTIbh1AbYLiHIXx0siduo-lg,15589
|
|
91
|
-
librelane/scripts/odbpy/ioplace_parser/__init__.py,sha256=
|
|
92
|
-
librelane/scripts/odbpy/ioplace_parser/parse.py,sha256=
|
|
95
|
+
librelane/scripts/odbpy/ioplace_parser/__init__.py,sha256=_xCDqam3PxWO-uhTZ6afdn3dpuu4XlX2T_RaOn7QqJQ,877
|
|
96
|
+
librelane/scripts/odbpy/ioplace_parser/parse.py,sha256=L2GXzNA-gkjyySZcTWXrRRP8rllabE5pGap9dtiFfOo,5584
|
|
93
97
|
librelane/scripts/odbpy/label_macro_pins.py,sha256=n3o9-_g6HkVP8k49yNnCkQJms9f_ykCE0Rye7bVFtIk,8620
|
|
94
98
|
librelane/scripts/odbpy/lefutil.py,sha256=XhfWSGHdn96yZWYQAPisgJM0iuY3xw4SW7jmMTzbpZs,3064
|
|
95
99
|
librelane/scripts/odbpy/placers.py,sha256=mgy_-GYeLDPMG41YAopMTtJyCHP6ucJRk7cJzI9PLRQ,4572
|
|
96
|
-
librelane/scripts/odbpy/power_utils.py,sha256=
|
|
100
|
+
librelane/scripts/odbpy/power_utils.py,sha256=qbwhvW0QRiqtFXpYNGyfDIrhNZv9dt0JX2n4CQ8YRs8,14722
|
|
97
101
|
librelane/scripts/odbpy/random_place.py,sha256=TEsV4LtXQTP8OJvnBh09Siu9fKkwG9UpIkCkQpdXAgU,1649
|
|
98
|
-
librelane/scripts/odbpy/reader.py,sha256=
|
|
102
|
+
librelane/scripts/odbpy/reader.py,sha256=omOCANavm7khGq3AvDyJX00IvhDn_15cW64IU-u2dRQ,8540
|
|
99
103
|
librelane/scripts/odbpy/remove_buffers.py,sha256=f-kGZIPnMtu4gnl2r2CDkng8U8vUMJKJWNV_akOpc38,5460
|
|
100
104
|
librelane/scripts/odbpy/snap_to_grid.py,sha256=lULRWlcYXvrTBUpemUPlpO2dBnbFeriuG-DlI4KnViE,1743
|
|
101
105
|
librelane/scripts/odbpy/wire_lengths.py,sha256=pSPhVnLlvcvmgEh89G8nu8DRaZVP66r-4ieVoV3zrm4,2737
|
|
@@ -106,7 +110,7 @@ librelane/scripts/openroad/buffer_list.tcl,sha256=sXygy1KRSUS4dZi1UOpBkGGOuXRVLM
|
|
|
106
110
|
librelane/scripts/openroad/common/dpl.tcl,sha256=Nqq5e5OwRoyk8mHfVa5uw3DGKDGMEFrx6odpxanc_Ns,912
|
|
107
111
|
librelane/scripts/openroad/common/dpl_cell_pad.tcl,sha256=KWVuj8u1-y3ZUiQr48TAsFv1GSzOCVnAjdqfBjtoQxQ,1066
|
|
108
112
|
librelane/scripts/openroad/common/grt.tcl,sha256=DCKe5D7INCBctitbRdgZNRsBrI9Qo5v7Ag7DF45W4_U,1137
|
|
109
|
-
librelane/scripts/openroad/common/io.tcl,sha256=
|
|
113
|
+
librelane/scripts/openroad/common/io.tcl,sha256=cPJ4O2nBKrGKON7lO7ZX1j_TpcxQFCw3gH858yTWg8Q,18289
|
|
110
114
|
librelane/scripts/openroad/common/pdn_cfg.tcl,sha256=KnQAxzlL_261Kp4M02cQ6usZHIRNBj56SAZNn1CqrZc,4552
|
|
111
115
|
librelane/scripts/openroad/common/resizer.tcl,sha256=3p59NDcXgEkUzg_43dcUYr2KkD__fkADdqCZ3uWsUU4,3478
|
|
112
116
|
librelane/scripts/openroad/common/set_global_connections.tcl,sha256=zGMz0Hu57ZVdLhz4djJASyre0qOi-dszylo6HD8ClUM,2899
|
|
@@ -122,7 +126,7 @@ librelane/scripts/openroad/fill.tcl,sha256=LzXVqnaFbsGnIRTXuvrGNHqqWBv-T2OGcP828
|
|
|
122
126
|
librelane/scripts/openroad/floorplan.tcl,sha256=akWifUeTsfplmFi11_ApU6hRcCaCmCyd0Su5ZWiTf50,5397
|
|
123
127
|
librelane/scripts/openroad/gpl.tcl,sha256=OkTGsatlgnTj-sGg20LOhV2Ws87up8K8Ts52vPMC_NM,2540
|
|
124
128
|
librelane/scripts/openroad/grt.tcl,sha256=r_73hbvc4wMi2EFoPbGTh29Lh5ATT4vVwKjxyPIOFcM,1022
|
|
125
|
-
librelane/scripts/openroad/gui.tcl,sha256=
|
|
129
|
+
librelane/scripts/openroad/gui.tcl,sha256=BhKTcYEo-SajnYtdzXqpzjYbczy0qZ-OvEFlHMjPtlU,1255
|
|
126
130
|
librelane/scripts/openroad/insert_buffer.tcl,sha256=BMTovQa4_CO8LSCeEqqiDAcTs5ELZt7X3ifJy1pDBVs,4403
|
|
127
131
|
librelane/scripts/openroad/ioplacer.tcl,sha256=FdBr8Yg_qT1VhNVTmvR-x6j_Fyh94ZuAm_K6D7k4jTY,1896
|
|
128
132
|
librelane/scripts/openroad/irdrop.tcl,sha256=wouIIPS_C_PeYFkCBQz0ERHcsobf74QB2x1NYAxNpjc,1950
|
|
@@ -143,26 +147,26 @@ librelane/scripts/pyosys/ys_common.py,sha256=mOni8WmKMNuLWsLRNcE15rcqCxGR1kf-9ck
|
|
|
143
147
|
librelane/scripts/tclsh/hello.tcl,sha256=kkR3akY7QnGHYXsQODYwLkMkUEOgWcNFtzaMTTEV2bY,34
|
|
144
148
|
librelane/state/__init__.py,sha256=rLUdAkeB278r8pB2Jpv-ccmmmP32FR90wANIFHXdA0w,969
|
|
145
149
|
librelane/state/__main__.py,sha256=Ici4Ejg1ICUZNSYZRguC3BfEk_wFxsmE0ag0Vv8iY1I,1679
|
|
146
|
-
librelane/state/design_format.py,sha256=
|
|
147
|
-
librelane/state/state.py,sha256
|
|
148
|
-
librelane/steps/__init__.py,sha256=
|
|
149
|
-
librelane/steps/__main__.py,sha256=
|
|
150
|
-
librelane/steps/checker.py,sha256=
|
|
150
|
+
librelane/state/design_format.py,sha256=ISl4O18ky1BiMkQn8Si0Tcf8UA5vrlZ1yay0iKPxvfk,5794
|
|
151
|
+
librelane/state/state.py,sha256=-vg7pYJ7U7uzC26oDKM49H410fm2-kV03Hf0bg3dMus,12149
|
|
152
|
+
librelane/steps/__init__.py,sha256=j3JYrdnWM74dYuEvE931oSrQI7FUz-hKWr8Mts8C0wg,1668
|
|
153
|
+
librelane/steps/__main__.py,sha256=p7eQ8l8V47RBmQifLcwZPXbEN807qR9ICUx4sMwM7fY,13450
|
|
154
|
+
librelane/steps/checker.py,sha256=Uq7DyO8wE7WD3RjDSiB_w_T9f4YO6CC_zkGn21MLrRI,21305
|
|
151
155
|
librelane/steps/common_variables.py,sha256=qT0VeIstFsDbe8VGAyqXrXxQw69OZ08haM6u1IbdFiE,10429
|
|
152
156
|
librelane/steps/cvc_rv.py,sha256=32vxFIbzSbrDtE0fXvdoQ-v3LVMrfi3r88f8Y-TKPKg,5531
|
|
153
|
-
librelane/steps/klayout.py,sha256=
|
|
154
|
-
librelane/steps/magic.py,sha256=
|
|
155
|
-
librelane/steps/misc.py,sha256=
|
|
157
|
+
librelane/steps/klayout.py,sha256=drEx4u1k48tE3SWiW1217rxtcuSfe5YeUXQN2Llt1PI,16768
|
|
158
|
+
librelane/steps/magic.py,sha256=60Ko7sf_E3KNO18op_pyojrBdfej0v5NCexXxmI0X90,20716
|
|
159
|
+
librelane/steps/misc.py,sha256=VUe3GOOaZm9r0mHmMSUi4cDCN2Mccm16I_isisW_r8Y,5811
|
|
156
160
|
librelane/steps/netgen.py,sha256=R9sDWv-9wKMdi2rkuLQdOc4uLlbYhXcKKd6WsZsnLt0,8953
|
|
157
|
-
librelane/steps/odb.py,sha256=
|
|
158
|
-
librelane/steps/openroad.py,sha256=
|
|
161
|
+
librelane/steps/odb.py,sha256=9TFYkFojERc4wVoTxpaHHVvB_sI3SNi6vakTwpmdTfU,38791
|
|
162
|
+
librelane/steps/openroad.py,sha256=SmZT2zj0phyD7aIiVV0USi5KUDHHvDXfyg2VyWFV3Yw,86134
|
|
159
163
|
librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
|
|
160
|
-
librelane/steps/pyosys.py,sha256=
|
|
161
|
-
librelane/steps/step.py,sha256=
|
|
164
|
+
librelane/steps/pyosys.py,sha256=DLft0-g4RFaMiEtElve6-CaNV24IT1usNprzLNYB5io,22933
|
|
165
|
+
librelane/steps/step.py,sha256=XcGHsrn0u1chrVwrjil60pNxw0s_0tz3DBo8knwmRZc,55397
|
|
162
166
|
librelane/steps/tclstep.py,sha256=0PMWJ6C3dKnlQf9mA9rZntgxUBCiByE9csHcEcM1iq0,10027
|
|
163
167
|
librelane/steps/verilator.py,sha256=MWx2TpLqYyea9_jSeLG9c2S5ujvYERQZRFNaMhfHxZE,7916
|
|
164
|
-
librelane/steps/yosys.py,sha256=
|
|
165
|
-
librelane-2.4.
|
|
166
|
-
librelane-2.4.
|
|
167
|
-
librelane-2.4.
|
|
168
|
-
librelane-2.4.
|
|
168
|
+
librelane/steps/yosys.py,sha256=3MDUZU-LSe0YArm1VxGRysZM6Pb87uuzOh8T0AqdHcQ,12805
|
|
169
|
+
librelane-2.4.7.dist-info/METADATA,sha256=4MPYwAo6LXql5gH9zqH0XvD8hl9sG_oATGX0iuUERSg,6537
|
|
170
|
+
librelane-2.4.7.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
171
|
+
librelane-2.4.7.dist-info/entry_points.txt,sha256=0eZs2NOH-w-W_GVRCs-ualst26XplkPpJkOnGWMaFw0,306
|
|
172
|
+
librelane-2.4.7.dist-info/RECORD,,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
librelane=librelane.__main__:cli
|
|
3
3
|
librelane.config=librelane.config.__main__:cli
|
|
4
4
|
librelane.env_info=librelane:env_info_cli
|
|
5
|
+
librelane.help=librelane.help.__main__:cli
|
|
5
6
|
librelane.state=librelane.state.__main__:cli
|
|
6
7
|
librelane.steps=librelane.steps.__main__:cli
|
|
7
8
|
openlane=librelane.__main__:cli
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Copyright 2023 Efabless Corporation
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
|
|
15
|
-
METAL_LAYER_ERROR = 10
|
|
16
|
-
FORMAT_ERROR = 11
|
|
17
|
-
NOT_FOUND_ERROR = 12
|
|
File without changes
|