librelane 2.4.0.dev11__py3-none-any.whl → 2.4.1__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/__main__.py +29 -25
- librelane/common/__init__.py +2 -0
- librelane/common/drc.py +1 -0
- librelane/common/misc.py +56 -2
- librelane/config/__main__.py +1 -4
- librelane/container.py +48 -27
- librelane/env_info.py +129 -115
- librelane/flows/flow.py +66 -30
- 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/power_utils.py +8 -6
- librelane/scripts/odbpy/reader.py +2 -2
- librelane/state/state.py +11 -3
- librelane/steps/__main__.py +1 -2
- librelane/steps/magic.py +24 -14
- librelane/steps/odb.py +1 -4
- librelane/steps/openroad.py +2 -5
- {librelane-2.4.0.dev11.dist-info → librelane-2.4.1.dist-info}/METADATA +2 -2
- {librelane-2.4.0.dev11.dist-info → librelane-2.4.1.dist-info}/RECORD +27 -26
- {librelane-2.4.0.dev11.dist-info → librelane-2.4.1.dist-info}/entry_points.txt +1 -0
- {librelane-2.4.0.dev11.dist-info → librelane-2.4.1.dist-info}/WHEEL +0 -0
librelane/steps/magic.py
CHANGED
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
import os
|
|
15
15
|
import re
|
|
16
16
|
import shutil
|
|
17
|
-
import functools
|
|
18
17
|
import subprocess
|
|
19
18
|
from signal import SIGKILL
|
|
20
19
|
from decimal import Decimal
|
|
@@ -34,7 +33,8 @@ from .tclstep import TclStep
|
|
|
34
33
|
from ..state import DesignFormat, State
|
|
35
34
|
|
|
36
35
|
from ..config import Variable
|
|
37
|
-
from ..common import get_script_dir, DRC as DRCObject, Path, mkdirp
|
|
36
|
+
from ..common import get_script_dir, DRC as DRCObject, Path, mkdirp, count_occurences
|
|
37
|
+
from ..logging import warn
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
class MagicOutputProcessor(OutputProcessor):
|
|
@@ -464,6 +464,12 @@ class SpiceExtraction(MagicStep):
|
|
|
464
464
|
"Extracts a SPICE netlist based on black-boxed standard cells and macros (basically, anything with a LEF) rather than transistors. An error will be thrown if both this and `MAGIC_EXT_USE_GDS` is set to ``True``.",
|
|
465
465
|
default=False,
|
|
466
466
|
),
|
|
467
|
+
Variable(
|
|
468
|
+
"MAGIC_FEEDBACK_CONVERSION_THRESHOLD",
|
|
469
|
+
int,
|
|
470
|
+
"If Magic provides more feedback items than this threshold, conversion to KLayout databases is skipped (as something has gone horribly wrong.)",
|
|
471
|
+
default=10000,
|
|
472
|
+
),
|
|
467
473
|
]
|
|
468
474
|
|
|
469
475
|
def get_script_path(self):
|
|
@@ -481,22 +487,29 @@ class SpiceExtraction(MagicStep):
|
|
|
481
487
|
|
|
482
488
|
views_updates, metrics_updates = super().run(state_in, env=env, **kwargs)
|
|
483
489
|
|
|
484
|
-
cif_scale = Decimal(open(os.path.join(self.step_dir, "cif_scale.txt")).read())
|
|
485
490
|
feedback_path = os.path.join(self.step_dir, "feedback.txt")
|
|
491
|
+
with open(feedback_path, encoding="utf8") as f:
|
|
492
|
+
illegal_overlap_count = count_occurences(f, "Illegal overlap")
|
|
493
|
+
|
|
494
|
+
metrics_updates["magic__illegal_overlap__count"] = illegal_overlap_count
|
|
495
|
+
threshold = self.config["MAGIC_FEEDBACK_CONVERSION_THRESHOLD"]
|
|
496
|
+
if illegal_overlap_count > threshold:
|
|
497
|
+
warn(
|
|
498
|
+
f"Not converting the feedback to the KLayout database format: {illegal_overlap_count} > MAGIC_FEEDBACK_CONVERSION_THRESHOLD ({threshold}). You may manually increase the threshold, but it might take forever."
|
|
499
|
+
)
|
|
500
|
+
return views_updates, metrics_updates
|
|
501
|
+
|
|
502
|
+
cif_scale = Decimal(open(os.path.join(self.step_dir, "cif_scale.txt")).read())
|
|
486
503
|
try:
|
|
487
504
|
se_feedback, _ = DRCObject.from_magic_feedback(
|
|
488
505
|
open(feedback_path, encoding="utf8"),
|
|
489
506
|
cif_scale,
|
|
490
507
|
self.config["DESIGN_NAME"],
|
|
491
508
|
)
|
|
492
|
-
illegal_overlap_count =
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
for v in se_feedback.violations.values()
|
|
497
|
-
if "Illegal overlap" in v.description
|
|
498
|
-
],
|
|
499
|
-
0,
|
|
509
|
+
illegal_overlap_count = sum(
|
|
510
|
+
len(v.bounding_boxes)
|
|
511
|
+
for v in se_feedback.violations.values()
|
|
512
|
+
if "Illegal overlap" in v.description
|
|
500
513
|
)
|
|
501
514
|
with open(os.path.join(self.step_dir, "feedback.xml"), "wb") as f:
|
|
502
515
|
se_feedback.to_klayout_xml(f)
|
|
@@ -505,9 +518,6 @@ class SpiceExtraction(MagicStep):
|
|
|
505
518
|
self.warn(
|
|
506
519
|
f"Failed to convert SPICE extraction feedback to KLayout database format: {e}"
|
|
507
520
|
)
|
|
508
|
-
metrics_updates["magic__illegal_overlap__count"] = (
|
|
509
|
-
open(feedback_path, encoding="utf8").read().count("Illegal overlap")
|
|
510
|
-
)
|
|
511
521
|
return views_updates, metrics_updates
|
|
512
522
|
|
|
513
523
|
|
librelane/steps/odb.py
CHANGED
|
@@ -17,7 +17,6 @@ import json
|
|
|
17
17
|
import shutil
|
|
18
18
|
from math import inf
|
|
19
19
|
from decimal import Decimal
|
|
20
|
-
from functools import reduce
|
|
21
20
|
from abc import abstractmethod
|
|
22
21
|
from dataclasses import dataclass
|
|
23
22
|
from typing import Dict, List, Literal, Optional, Tuple
|
|
@@ -414,9 +413,7 @@ class ManualMacroPlacement(OdbpyStep):
|
|
|
414
413
|
)
|
|
415
414
|
shutil.copyfile(cfg_ref, cfg_file)
|
|
416
415
|
elif macros := self.config.get("MACROS"):
|
|
417
|
-
instance_count =
|
|
418
|
-
lambda x, y: x + len(y.instances), macros.values(), 0
|
|
419
|
-
)
|
|
416
|
+
instance_count = sum(len(m.instances) for m in macros.values())
|
|
420
417
|
if instance_count >= 1:
|
|
421
418
|
with open(cfg_file, "w") as f:
|
|
422
419
|
for module, macro in macros.items():
|
librelane/steps/openroad.py
CHANGED
|
@@ -19,7 +19,6 @@ import io
|
|
|
19
19
|
import os
|
|
20
20
|
import re
|
|
21
21
|
import json
|
|
22
|
-
import functools
|
|
23
22
|
import subprocess
|
|
24
23
|
from enum import Enum
|
|
25
24
|
from math import inf
|
|
@@ -1147,9 +1146,7 @@ def get_psm_error_count(rpt: io.TextIOWrapper) -> int:
|
|
|
1147
1146
|
|
|
1148
1147
|
sio.seek(0)
|
|
1149
1148
|
violations = yaml.load(sio, Loader=yaml.SafeLoader) or []
|
|
1150
|
-
return
|
|
1151
|
-
lambda acc, current: acc + len(current["srcs"]), violations, 0
|
|
1152
|
-
)
|
|
1149
|
+
return sum(len(violation["srcs"]) for violation in violations)
|
|
1153
1150
|
|
|
1154
1151
|
|
|
1155
1152
|
@Step.factory.register()
|
|
@@ -2140,7 +2137,7 @@ class RepairDesignPostGPL(ResizerStep):
|
|
|
2140
2137
|
Variable(
|
|
2141
2138
|
"DESIGN_REPAIR_BUFFER_OUTPUT_PORTS",
|
|
2142
2139
|
bool,
|
|
2143
|
-
"Specifies whether or not to insert buffers on
|
|
2140
|
+
"Specifies whether or not to insert buffers on output ports when design repairs are run.",
|
|
2144
2141
|
default=True,
|
|
2145
2142
|
deprecated_names=["PL_RESIZER_BUFFER_OUTPUT_PORTS"],
|
|
2146
2143
|
),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: librelane
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.1
|
|
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
|
|
@@ -20,7 +20,7 @@ Requires-Dist: cloup (>=3.0.5,<4)
|
|
|
20
20
|
Requires-Dist: deprecated (>=1.2.10,<2)
|
|
21
21
|
Requires-Dist: httpx (>=0.22.0,<0.29)
|
|
22
22
|
Requires-Dist: klayout (>=0.29.0,<0.31.0)
|
|
23
|
-
Requires-Dist: libparse (
|
|
23
|
+
Requires-Dist: lln-libparse (==0.56.*)
|
|
24
24
|
Requires-Dist: lxml (>=4.9.0)
|
|
25
25
|
Requires-Dist: psutil (>=5.9.0)
|
|
26
26
|
Requires-Dist: pyyaml (>=5,<7)
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
librelane/__init__.py,sha256=EMpoZrRmS_wsweKjhyAg52OXCK7HWQ8o8CVrYaX4ub0,1220
|
|
2
|
-
librelane/__main__.py,sha256=
|
|
2
|
+
librelane/__main__.py,sha256=Yqc42w-sb5DNIOdTENTzeAaraG1ZvdRc1Oqsl__JodM,14953
|
|
3
3
|
librelane/__version__.py,sha256=dbE4stCACDmIoxgKksesAkTa-_hi5dW6nPLWw9Pfq3Q,1486
|
|
4
|
-
librelane/common/__init__.py,sha256=
|
|
4
|
+
librelane/common/__init__.py,sha256=tUX6pVEPrf7LnX7OiIaQFCyB1fs5AgwGt0xR2OHWC5Q,1557
|
|
5
5
|
librelane/common/cli.py,sha256=xi48GBGHRsYrLGwx40ARwpykHx7GnuHbJjHxjOwtZ5Y,2349
|
|
6
|
-
librelane/common/drc.py,sha256=
|
|
6
|
+
librelane/common/drc.py,sha256=3AUxg986X_lCPrQvDkLekVTeC4-4qS7ZDpVMKlVkEmo,9638
|
|
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=
|
|
13
|
+
librelane/common/misc.py,sha256=kcCD0Ld8jEEuCOe3HhU-AAtic3GUxbYsHxGBPwehqR4,14387
|
|
14
14
|
librelane/common/ring_buffer.py,sha256=DGFen9y0JOmiL7E27tmzDTVSJKZtV-waF9hl5Rz9uek,1898
|
|
15
15
|
librelane/common/tcl.py,sha256=G0__oR6azVCS2Aue87zboba7vAR7v-SVQeUbqfviiDA,2709
|
|
16
16
|
librelane/common/toolbox.py,sha256=fBMkpoOOL7rdbwi3W3-U5rrCxSplAqFZtlTcJtjLgMY,20968
|
|
17
17
|
librelane/common/tpe.py,sha256=Txj0fVscXSDJTYmEKZ2ESFHOeqrhHnaPPiwWBgyx4g8,1285
|
|
18
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
22
|
librelane/config/flow.py,sha256=qCGaUOj12j57gORzoE10m7_WG-n600llnFDMlZagUF4,16660
|
|
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
|
|
26
26
|
librelane/config/variable.py,sha256=r88sLpxb7GR2QBwh9EKJNN_Vpd_vjUpRBJq7V3Fd6jI,26786
|
|
27
|
-
librelane/container.py,sha256=
|
|
28
|
-
librelane/env_info.py,sha256=
|
|
27
|
+
librelane/container.py,sha256=7w_V2Fpb3dbnZ8FqBce1vK31jH30UrxByppfEJRyG9M,8672
|
|
28
|
+
librelane/env_info.py,sha256=xF9iqwwJv5yZz7n7BTrrT_yP3Dp1HjAOUObNE9k_1g4,11074
|
|
29
29
|
librelane/examples/spm/config.yaml,sha256=YKBm0lsY3AJZNcxAh1sQ1QMmJeVCpOpil6dw_RgQh4c,633
|
|
30
30
|
librelane/examples/spm/pin_order.cfg,sha256=-8mTGFKnES0vhQATfaE2TXN_mdCZ3SZIN90Src1l6fY,52
|
|
31
31
|
librelane/examples/spm/src/impl.sdc,sha256=wP18UoVlOJ9q4lmUoa3XpgcpPdyzEqHBNxCgOOU7QH0,2961
|
|
@@ -43,11 +43,12 @@ librelane/flows/__init__.py,sha256=ghtmUG-taVpHJ3CKJRYZGn3dU0r93araT1EIGlBEsxg,8
|
|
|
43
43
|
librelane/flows/builtins.py,sha256=tR14Qc1ZUey2w-Ar4DWOvxuP7LGPtMecCJq8WgcYJpk,773
|
|
44
44
|
librelane/flows/classic.py,sha256=fI-LNhrvi7lzfsHRyJv_yjgFbpbWBVxN-9QpsgDxpTQ,10940
|
|
45
45
|
librelane/flows/cli.py,sha256=P2LCFn5_RQ88yB0WuetpLAuWeKQXd-DrpCOMgnVh9Mg,16705
|
|
46
|
-
librelane/flows/flow.py,sha256=
|
|
46
|
+
librelane/flows/flow.py,sha256=LkG9B-kes37IqqLS3MDjD97c9YbHV3WP-m8Kh5fuv9Q,37132
|
|
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
|
|
50
50
|
librelane/flows/synth_explore.py,sha256=8mpeuG6oxeEXVQi4NwS4I415eCu7Ak6DN4oK30h1eCQ,7418
|
|
51
|
+
librelane/help/__main__.py,sha256=gnm0yi-Ih8YoyY2cMiHONV2ZzR-tvHfdEHCb28YQJZ0,1243
|
|
51
52
|
librelane/logging/__init__.py,sha256=mrTnzjpH6AOu2CiDZYfOMCVByAS2Xeg9HS4FJyXsJOE,1043
|
|
52
53
|
librelane/logging/logger.py,sha256=kA61TGsR00Fi6kQSxgTC1pHpS_-zqC1PdQnYqnk2TWY,8632
|
|
53
54
|
librelane/open_pdks_rev,sha256=_q6FiO0UljepWU99r9IgkbLrKLDIPbO-80--OFWrZxA,41
|
|
@@ -64,19 +65,19 @@ librelane/scripts/magic/Readme.md,sha256=NaQrlxY8l8GT-kokJNlMHeAR3PksWVbFpSznOWW
|
|
|
64
65
|
librelane/scripts/magic/common/read.tcl,sha256=BcTGgul2TuSVd0TmhXrR0mvwE4hVO6NaHcy_5uLsOMI,3132
|
|
65
66
|
librelane/scripts/magic/def/antenna_check.tcl,sha256=T_r1CWgySFVlLMcoTrNXQ_aMRs_fBAUYUUjyXJV1Sg0,1019
|
|
66
67
|
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=
|
|
68
|
+
librelane/scripts/magic/def/mag_gds.tcl,sha256=zZESdGgKZG6__Z9f8Kjxhw3Fx4FMpYlSBGCilggIuv8,2129
|
|
69
|
+
librelane/scripts/magic/drc.tcl,sha256=gPGyI96lR10dJXcJACajzHaHiT6ayAYPJqrmmuQkABc,2395
|
|
69
70
|
librelane/scripts/magic/extract_spice.tcl,sha256=lFNXfjIIzAWb2wda9ZtBOecENOOXyFBsh9HgrPYf7VQ,2737
|
|
70
71
|
librelane/scripts/magic/gds/drc_batch.tcl,sha256=O76rwxSrQgoCuoxk36tRBZkQaeMfJknlHrQA3mtU2JU,2198
|
|
71
72
|
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=
|
|
73
|
+
librelane/scripts/magic/gds/extras_mag.tcl,sha256=hOmFK12wmGiA_H70YS0jVK4Faav-1sTCpajUxjTsopM,1317
|
|
74
|
+
librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mfYTQdio1XAA0DpWlV5JS7c3rkxtSS06kZqVfDfKGuQ,1056
|
|
74
75
|
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=
|
|
76
|
+
librelane/scripts/magic/lef/extras_maglef.tcl,sha256=V0TivPN4aLJ0is497IAmOB1qQm8vmCqqycKuwV3w0HY,1586
|
|
77
|
+
librelane/scripts/magic/lef/maglef.tcl,sha256=I6-xFtsCZQtQI4UbU53gaWrpELWUd4agNF5LLgq9Eq0,856
|
|
77
78
|
librelane/scripts/magic/lef.tcl,sha256=Ij_v63siQrgYh56juCiZMcJBBCl2Lco3Ah4YKg-xiAU,2076
|
|
78
79
|
librelane/scripts/magic/open.tcl,sha256=qgk3HiT4qI-pMWn2E2MxwijgveCVmt6oCd8wEWh0jio,915
|
|
79
|
-
librelane/scripts/magic/wrapper.tcl,sha256=
|
|
80
|
+
librelane/scripts/magic/wrapper.tcl,sha256=qO33N2AiEYBTABMB5vWMWWEd2FpyOhg8JlcGsBVD6MY,712
|
|
80
81
|
librelane/scripts/netgen/setup.tcl,sha256=LBkdtVZpxrNGQ8UNwMkEQ-xSrkn9DNIBW_jzB9b1gYk,979
|
|
81
82
|
librelane/scripts/odbpy/apply_def_template.py,sha256=Tn6y65biu0bAQ6XilYxq5jn3a_KqjTl423-aXWI864k,1534
|
|
82
83
|
librelane/scripts/odbpy/cell_frequency.py,sha256=NfGgM8wxIvjM1C_GHUghZPOh8gpdasLOWR4qBdHHLFE,3105
|
|
@@ -94,9 +95,9 @@ librelane/scripts/odbpy/ioplace_parser/parse.py,sha256=L2GXzNA-gkjyySZcTWXrRRP8r
|
|
|
94
95
|
librelane/scripts/odbpy/label_macro_pins.py,sha256=n3o9-_g6HkVP8k49yNnCkQJms9f_ykCE0Rye7bVFtIk,8620
|
|
95
96
|
librelane/scripts/odbpy/lefutil.py,sha256=XhfWSGHdn96yZWYQAPisgJM0iuY3xw4SW7jmMTzbpZs,3064
|
|
96
97
|
librelane/scripts/odbpy/placers.py,sha256=mgy_-GYeLDPMG41YAopMTtJyCHP6ucJRk7cJzI9PLRQ,4572
|
|
97
|
-
librelane/scripts/odbpy/power_utils.py,sha256=
|
|
98
|
+
librelane/scripts/odbpy/power_utils.py,sha256=qbwhvW0QRiqtFXpYNGyfDIrhNZv9dt0JX2n4CQ8YRs8,14722
|
|
98
99
|
librelane/scripts/odbpy/random_place.py,sha256=TEsV4LtXQTP8OJvnBh09Siu9fKkwG9UpIkCkQpdXAgU,1649
|
|
99
|
-
librelane/scripts/odbpy/reader.py,sha256=
|
|
100
|
+
librelane/scripts/odbpy/reader.py,sha256=omOCANavm7khGq3AvDyJX00IvhDn_15cW64IU-u2dRQ,8540
|
|
100
101
|
librelane/scripts/odbpy/remove_buffers.py,sha256=f-kGZIPnMtu4gnl2r2CDkng8U8vUMJKJWNV_akOpc38,5460
|
|
101
102
|
librelane/scripts/odbpy/snap_to_grid.py,sha256=lULRWlcYXvrTBUpemUPlpO2dBnbFeriuG-DlI4KnViE,1743
|
|
102
103
|
librelane/scripts/odbpy/wire_lengths.py,sha256=pSPhVnLlvcvmgEh89G8nu8DRaZVP66r-4ieVoV3zrm4,2737
|
|
@@ -145,25 +146,25 @@ librelane/scripts/tclsh/hello.tcl,sha256=kkR3akY7QnGHYXsQODYwLkMkUEOgWcNFtzaMTTE
|
|
|
145
146
|
librelane/state/__init__.py,sha256=rLUdAkeB278r8pB2Jpv-ccmmmP32FR90wANIFHXdA0w,969
|
|
146
147
|
librelane/state/__main__.py,sha256=Ici4Ejg1ICUZNSYZRguC3BfEk_wFxsmE0ag0Vv8iY1I,1679
|
|
147
148
|
librelane/state/design_format.py,sha256=ISl4O18ky1BiMkQn8Si0Tcf8UA5vrlZ1yay0iKPxvfk,5794
|
|
148
|
-
librelane/state/state.py,sha256
|
|
149
|
+
librelane/state/state.py,sha256=-vg7pYJ7U7uzC26oDKM49H410fm2-kV03Hf0bg3dMus,12149
|
|
149
150
|
librelane/steps/__init__.py,sha256=j3JYrdnWM74dYuEvE931oSrQI7FUz-hKWr8Mts8C0wg,1668
|
|
150
|
-
librelane/steps/__main__.py,sha256=
|
|
151
|
+
librelane/steps/__main__.py,sha256=GQZiV4s-9GIF4AwP34W61zwgzMvPp-QTR4cNELi7r5c,13349
|
|
151
152
|
librelane/steps/checker.py,sha256=vul1D0cT03144qKK5QAKswClKKICK7kNB4PB6xXykvc,21353
|
|
152
153
|
librelane/steps/common_variables.py,sha256=qT0VeIstFsDbe8VGAyqXrXxQw69OZ08haM6u1IbdFiE,10429
|
|
153
154
|
librelane/steps/cvc_rv.py,sha256=32vxFIbzSbrDtE0fXvdoQ-v3LVMrfi3r88f8Y-TKPKg,5531
|
|
154
155
|
librelane/steps/klayout.py,sha256=g7jYz-1cLwgfPTiMJIdAQ9zmkrwNtJLPoRg6PqOUv6Y,16490
|
|
155
|
-
librelane/steps/magic.py,sha256=
|
|
156
|
+
librelane/steps/magic.py,sha256=60Ko7sf_E3KNO18op_pyojrBdfej0v5NCexXxmI0X90,20716
|
|
156
157
|
librelane/steps/misc.py,sha256=Xk_a6JJPljkk8pemu-NtlzDRs-8S7vuRKZKj4pnCRlE,5690
|
|
157
158
|
librelane/steps/netgen.py,sha256=R9sDWv-9wKMdi2rkuLQdOc4uLlbYhXcKKd6WsZsnLt0,8953
|
|
158
|
-
librelane/steps/odb.py,sha256=
|
|
159
|
-
librelane/steps/openroad.py,sha256=
|
|
159
|
+
librelane/steps/odb.py,sha256=WaYquQfdp0j5XSbDa7a_un0HF4bOprpuC6fFtKpHHI8,37956
|
|
160
|
+
librelane/steps/openroad.py,sha256=XJ8D8pvKLToTR83uTWAeszNu30BDGewntBQ8uttXGeU,86458
|
|
160
161
|
librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
|
|
161
162
|
librelane/steps/pyosys.py,sha256=mnbPR267XzJvDhtXW4cdTAB3IqvksUZt4ch5xQHgdY0,22705
|
|
162
163
|
librelane/steps/step.py,sha256=M0Jqvr8sQaYmvXApZ-tfa4SFVOb-l_2ZfR31QaoRUf0,55742
|
|
163
164
|
librelane/steps/tclstep.py,sha256=0PMWJ6C3dKnlQf9mA9rZntgxUBCiByE9csHcEcM1iq0,10027
|
|
164
165
|
librelane/steps/verilator.py,sha256=MWx2TpLqYyea9_jSeLG9c2S5ujvYERQZRFNaMhfHxZE,7916
|
|
165
166
|
librelane/steps/yosys.py,sha256=GX6rTiQG-ZhDxfB9SxrPQ9Sab3WC84p0OUtqiL1Nubk,12533
|
|
166
|
-
librelane-2.4.
|
|
167
|
-
librelane-2.4.
|
|
168
|
-
librelane-2.4.
|
|
169
|
-
librelane-2.4.
|
|
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,,
|
|
@@ -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
|
|
File without changes
|