librelane 3.0.0.dev24__py3-none-any.whl → 3.0.0.dev26__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/common/__init__.py +1 -0
- librelane/common/drc.py +1 -0
- librelane/common/misc.py +27 -5
- librelane/common/types.py +2 -3
- librelane/config/__main__.py +1 -1
- librelane/config/variable.py +16 -0
- librelane/examples/spm/config.yaml +8 -8
- librelane/examples/spm-user_project_wrapper/config.json +17 -5
- librelane/flows/flow.py +89 -21
- librelane/scripts/magic/def/mag_gds.tcl +1 -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/scripts/openroad/common/io.tcl +23 -11
- librelane/scripts/openroad/common/pdn_cfg.tcl +36 -36
- librelane/scripts/openroad/ioplacer.tcl +22 -21
- librelane/scripts/openroad/pdn.tcl +1 -1
- librelane/state/state.py +11 -3
- librelane/steps/__main__.py +1 -2
- librelane/steps/common_variables.py +82 -33
- librelane/steps/magic.py +24 -14
- librelane/steps/odb.py +15 -39
- librelane/steps/openroad.py +22 -44
- librelane/steps/step.py +22 -7
- librelane/steps/tclstep.py +1 -1
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/METADATA +1 -1
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/RECORD +34 -34
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/WHEEL +0 -0
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/entry_points.txt +0 -0
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
|
import textwrap
|
|
25
24
|
import pathlib
|
|
@@ -1177,8 +1176,8 @@ class IOPlacement(OpenROADStep):
|
|
|
1177
1176
|
"""
|
|
1178
1177
|
Places I/O pins on a floor-planned ODB file using OpenROAD's built-in placer.
|
|
1179
1178
|
|
|
1180
|
-
If ``
|
|
1181
|
-
compatibility with
|
|
1179
|
+
If ``IO_PIN_ORDER_CFG`` is not ``None``, this step is skipped (for
|
|
1180
|
+
compatibility with OpenLane.)
|
|
1182
1181
|
"""
|
|
1183
1182
|
|
|
1184
1183
|
id = "OpenROAD.IOPlacement"
|
|
@@ -1189,51 +1188,31 @@ class IOPlacement(OpenROADStep):
|
|
|
1189
1188
|
+ io_layer_variables
|
|
1190
1189
|
+ [
|
|
1191
1190
|
Variable(
|
|
1192
|
-
"
|
|
1191
|
+
"IO_PIN_PLACEMENT_MODE",
|
|
1193
1192
|
Literal["matching", "random_equidistant", "annealing"],
|
|
1194
1193
|
"Decides the mode of the random IO placement option.",
|
|
1195
1194
|
default="matching",
|
|
1196
|
-
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode)],
|
|
1195
|
+
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode), "FP_PPL_MODE"],
|
|
1197
1196
|
),
|
|
1198
1197
|
Variable(
|
|
1199
|
-
"
|
|
1198
|
+
"IO_PIN_MIN_DISTANCE",
|
|
1200
1199
|
Optional[Decimal],
|
|
1201
1200
|
"The minimum distance between two pins. If unspecified by a PDK, OpenROAD will use the length of two routing tracks.",
|
|
1202
1201
|
units="µm",
|
|
1203
1202
|
pdk=True,
|
|
1203
|
+
deprecated_names=["FP_IO_MIN_DISTANCE"],
|
|
1204
1204
|
),
|
|
1205
1205
|
Variable(
|
|
1206
|
-
"
|
|
1206
|
+
"IO_PIN_ORDER_CFG",
|
|
1207
1207
|
Optional[Path],
|
|
1208
1208
|
"Path to a custom pin configuration file.",
|
|
1209
|
+
deprecated_names=["FP_PIN_ORDER_CFG"],
|
|
1209
1210
|
),
|
|
1210
1211
|
Variable(
|
|
1211
1212
|
"FP_DEF_TEMPLATE",
|
|
1212
1213
|
Optional[Path],
|
|
1213
1214
|
"Points to the DEF file to be used as a template.",
|
|
1214
1215
|
),
|
|
1215
|
-
Variable(
|
|
1216
|
-
"FP_IO_VLENGTH",
|
|
1217
|
-
Optional[Decimal],
|
|
1218
|
-
"""
|
|
1219
|
-
The length of the pins with a north or south orientation. If unspecified by a PDK, OpenROAD will use whichever is higher of the following two values:
|
|
1220
|
-
* The pin width
|
|
1221
|
-
* The minimum value satisfying the minimum area constraint given the pin width
|
|
1222
|
-
""",
|
|
1223
|
-
units="µm",
|
|
1224
|
-
pdk=True,
|
|
1225
|
-
),
|
|
1226
|
-
Variable(
|
|
1227
|
-
"FP_IO_HLENGTH",
|
|
1228
|
-
Optional[Decimal],
|
|
1229
|
-
"""
|
|
1230
|
-
The length of the pins with an east or west orientation. If unspecified by a PDK, OpenROAD will use whichever is higher of the following two values:
|
|
1231
|
-
* The pin width
|
|
1232
|
-
* The minimum value satisfying the minimum area constraint given the pin width
|
|
1233
|
-
""",
|
|
1234
|
-
units="µm",
|
|
1235
|
-
pdk=True,
|
|
1236
|
-
),
|
|
1237
1216
|
]
|
|
1238
1217
|
)
|
|
1239
1218
|
|
|
@@ -1241,8 +1220,8 @@ class IOPlacement(OpenROADStep):
|
|
|
1241
1220
|
return os.path.join(get_script_dir(), "openroad", "ioplacer.tcl")
|
|
1242
1221
|
|
|
1243
1222
|
def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
|
|
1244
|
-
if self.config["
|
|
1245
|
-
info(f"
|
|
1223
|
+
if self.config["IO_PIN_ORDER_CFG"] is not None:
|
|
1224
|
+
info(f"IO_PIN_ORDER_CFG is set. Skipping '{self.id}'…")
|
|
1246
1225
|
return {}, {}
|
|
1247
1226
|
if self.config["FP_DEF_TEMPLATE"] is not None:
|
|
1248
1227
|
info(
|
|
@@ -1333,9 +1312,7 @@ def get_psm_error_count(rpt: io.TextIOWrapper) -> int:
|
|
|
1333
1312
|
|
|
1334
1313
|
sio.seek(0)
|
|
1335
1314
|
violations = yaml.load(sio, Loader=yaml.SafeLoader) or []
|
|
1336
|
-
return
|
|
1337
|
-
lambda acc, current: acc + len(current["srcs"]), violations, 0
|
|
1338
|
-
)
|
|
1315
|
+
return sum(len(violation["srcs"]) for violation in violations)
|
|
1339
1316
|
|
|
1340
1317
|
|
|
1341
1318
|
@Step.factory.register()
|
|
@@ -1353,10 +1330,10 @@ class GeneratePDN(OpenROADStep):
|
|
|
1353
1330
|
+ pdn_variables
|
|
1354
1331
|
+ [
|
|
1355
1332
|
Variable(
|
|
1356
|
-
"
|
|
1333
|
+
"PDN_CFG",
|
|
1357
1334
|
Optional[Path],
|
|
1358
1335
|
"A custom PDN configuration file. If not provided, the default PDN config will be used.",
|
|
1359
|
-
deprecated_names=["
|
|
1336
|
+
deprecated_names=["FP_PDN_CFG"],
|
|
1360
1337
|
)
|
|
1361
1338
|
]
|
|
1362
1339
|
)
|
|
@@ -1366,11 +1343,11 @@ class GeneratePDN(OpenROADStep):
|
|
|
1366
1343
|
|
|
1367
1344
|
def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
|
|
1368
1345
|
kwargs, env = self.extract_env(kwargs)
|
|
1369
|
-
if self.config["
|
|
1370
|
-
env["
|
|
1346
|
+
if self.config["PDN_CFG"] is None:
|
|
1347
|
+
env["PDN_CFG"] = os.path.join(
|
|
1371
1348
|
get_script_dir(), "openroad", "common", "pdn_cfg.tcl"
|
|
1372
1349
|
)
|
|
1373
|
-
info(f"'
|
|
1350
|
+
info(f"'PDN_CFG' not explicitly set, setting it to {env['PDN_CFG']}…")
|
|
1374
1351
|
views_updates, metrics_updates = super().run(state_in, env=env, **kwargs)
|
|
1375
1352
|
|
|
1376
1353
|
alerts = self.alerts or []
|
|
@@ -1523,16 +1500,17 @@ class GlobalPlacementSkipIO(_GlobalPlacement):
|
|
|
1523
1500
|
|
|
1524
1501
|
config_vars = _GlobalPlacement.config_vars + [
|
|
1525
1502
|
Variable(
|
|
1526
|
-
"
|
|
1503
|
+
"IO_PIN_PLACEMENT_MODE",
|
|
1527
1504
|
Literal["matching", "random_equidistant", "annealing"],
|
|
1528
1505
|
"Decides the mode of the random IO placement option.",
|
|
1529
1506
|
default="matching",
|
|
1530
|
-
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode)],
|
|
1507
|
+
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode), "FP_PPL_MODE"],
|
|
1531
1508
|
),
|
|
1532
1509
|
Variable(
|
|
1533
|
-
"
|
|
1510
|
+
"IO_PIN_ORDER_CFG",
|
|
1534
1511
|
Optional[Path],
|
|
1535
1512
|
"Path to a custom pin configuration file.",
|
|
1513
|
+
deprecated_names=["FP_PIN_ORDER_CFG"],
|
|
1536
1514
|
),
|
|
1537
1515
|
Variable(
|
|
1538
1516
|
"FP_DEF_TEMPLATE",
|
|
@@ -1548,9 +1526,9 @@ class GlobalPlacementSkipIO(_GlobalPlacement):
|
|
|
1548
1526
|
f"I/O pins were loaded from {self.config['FP_DEF_TEMPLATE']}. Returning state unaltered…"
|
|
1549
1527
|
)
|
|
1550
1528
|
return {}, {}
|
|
1551
|
-
if self.config["
|
|
1529
|
+
if self.config["IO_PIN_ORDER_CFG"] is not None:
|
|
1552
1530
|
info(
|
|
1553
|
-
f"I/O pins to be placed from {self.config['
|
|
1531
|
+
f"I/O pins to be placed from {self.config['IO_PIN_ORDER_CFG']}. Returning state unaltered…"
|
|
1554
1532
|
)
|
|
1555
1533
|
return {}, {}
|
|
1556
1534
|
env["__PL_SKIP_IO"] = "1"
|
librelane/steps/step.py
CHANGED
|
@@ -619,6 +619,7 @@ class Step(ABC):
|
|
|
619
619
|
*,
|
|
620
620
|
docstring_override: str = "",
|
|
621
621
|
use_dropdown: bool = False,
|
|
622
|
+
myst_anchors: bool = False,
|
|
622
623
|
): # pragma: no cover
|
|
623
624
|
"""
|
|
624
625
|
Renders Markdown help for this step to a string.
|
|
@@ -676,11 +677,12 @@ class Step(ABC):
|
|
|
676
677
|
result += f"| {input_str} | {output_str} |\n"
|
|
677
678
|
|
|
678
679
|
if len(Self.config_vars):
|
|
680
|
+
all_vars_anchor = f"({Self.id.lower()}-configuration-variables)="
|
|
679
681
|
result += textwrap.dedent(
|
|
680
682
|
f"""
|
|
681
|
-
|
|
683
|
+
{all_vars_anchor * myst_anchors}
|
|
682
684
|
#### Configuration Variables
|
|
683
|
-
|
|
685
|
+
|
|
684
686
|
| Variable Name | Type | Description | Default | Units |
|
|
685
687
|
| - | - | - | - | - |
|
|
686
688
|
"""
|
|
@@ -688,13 +690,15 @@ class Step(ABC):
|
|
|
688
690
|
for var in Self.config_vars:
|
|
689
691
|
units = var.units or ""
|
|
690
692
|
pdk_superscript = "<sup>PDK</sup>" if var.pdk else ""
|
|
691
|
-
|
|
693
|
+
var_anchor = f"{{#{var._get_docs_identifier(Self.id)}}}"
|
|
694
|
+
result += f"| `{var.name}`{var_anchor * myst_anchors} {pdk_superscript} | {var.type_repr_md(for_document=True)} | {var.desc_repr_md()} | `{var.default}` | {units} |\n"
|
|
692
695
|
result += "\n"
|
|
693
696
|
|
|
697
|
+
step_anchor = f"(step-{slugify(Self.id.lower())})="
|
|
694
698
|
result = (
|
|
695
699
|
textwrap.dedent(
|
|
696
700
|
f"""
|
|
697
|
-
|
|
701
|
+
{step_anchor * myst_anchors}
|
|
698
702
|
### {Self.__get_desc()}
|
|
699
703
|
"""
|
|
700
704
|
)
|
|
@@ -706,11 +710,22 @@ class Step(ABC):
|
|
|
706
710
|
@classmethod
|
|
707
711
|
def display_help(Self): # pragma: no cover
|
|
708
712
|
"""
|
|
709
|
-
|
|
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``.
|
|
710
717
|
"""
|
|
711
|
-
|
|
718
|
+
try:
|
|
719
|
+
get_ipython() # type: ignore
|
|
720
|
+
|
|
721
|
+
import IPython.display
|
|
722
|
+
|
|
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
|
|
712
727
|
|
|
713
|
-
|
|
728
|
+
console.log(Markdown(Self.get_help_md()))
|
|
714
729
|
|
|
715
730
|
def _repr_markdown_(self) -> str: # pragma: no cover
|
|
716
731
|
"""
|
librelane/steps/tclstep.py
CHANGED
|
@@ -255,7 +255,7 @@ class TclStep(Step):
|
|
|
255
255
|
#
|
|
256
256
|
# Emplace file to be sourced in dict with key ``_TCL_ENV_IN``
|
|
257
257
|
env = os.environ.copy()
|
|
258
|
-
with open(env_in_file, "
|
|
258
|
+
with open(env_in_file, "w") as f:
|
|
259
259
|
for key, value in env_in:
|
|
260
260
|
if key in env and env[key] == value:
|
|
261
261
|
continue
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
librelane/__init__.py,sha256=EMpoZrRmS_wsweKjhyAg52OXCK7HWQ8o8CVrYaX4ub0,1220
|
|
2
2
|
librelane/__main__.py,sha256=Zq2h2ZTQqA0T7qpGFELJ1bzVQnv-951nnhJ0-9WzNaM,14541
|
|
3
3
|
librelane/__version__.py,sha256=dbE4stCACDmIoxgKksesAkTa-_hi5dW6nPLWw9Pfq3Q,1486
|
|
4
|
-
librelane/common/__init__.py,sha256=
|
|
4
|
+
librelane/common/__init__.py,sha256=QhzRvLXLR2cGdYenayWYmCfgkTS836dWW41Ve1Wa5IE,1551
|
|
5
5
|
librelane/common/cli.py,sha256=xi48GBGHRsYrLGwx40ARwpykHx7GnuHbJjHxjOwtZ5Y,2349
|
|
6
|
-
librelane/common/drc.py,sha256=
|
|
6
|
+
librelane/common/drc.py,sha256=l1quZbHXGb7yjKCO5IFn-Xxf_zIx4f6kxqpNm3YmpOs,12809
|
|
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=2zj62QbSuYaD2iYqGnM7vFR3ga41E3TxZpOOBYYIka8,13257
|
|
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=ijR__rVqQ_nJtfm34H-VdSCIeArKns7lVAc1TcTUSsQ,20975
|
|
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=bAxB0qpw95YoLGmMjvxAwrX1hcpHRvNhH7wjQdyW-DE,35031
|
|
22
22
|
librelane/config/flow.py,sha256=RS8uspcrepl8GT5SsWrBQ-kmssO4c15_lrc2nBPVK5M,16482
|
|
23
23
|
librelane/config/pdk_compat.py,sha256=ofqYuD-MgTcfvPVXpGJo8H1GKzCvN6sxHsK_OqCVXa8,12870
|
|
24
24
|
librelane/config/preprocessor.py,sha256=ATi29SHz0_OBq1IqUkGxvhHUDKB5z5jO0KqvoQXg8R8,14913
|
|
25
25
|
librelane/config/removals.py,sha256=vxqTuRTJ0jt2TX4KmFZCZPTwghDFkCVjIhF2iReHwJA,2958
|
|
26
|
-
librelane/config/variable.py,sha256=
|
|
26
|
+
librelane/config/variable.py,sha256=YKRlnQu6YvkwnJ5zYfWTcj0fHP0Jcy22ZTb0i4kb3h4,26823
|
|
27
27
|
librelane/container.py,sha256=3KHxs3dUSVUZVYsS6fsA7dD3Q4QEQEzRxgXZZh9dzi0,7554
|
|
28
28
|
librelane/env_info.py,sha256=vAE9AZ_vDFLt7Srtg4ZywPzE6vgVhCrIvg8PP25-BJ8,10460
|
|
29
|
-
librelane/examples/spm/config.yaml,sha256=
|
|
29
|
+
librelane/examples/spm/config.yaml,sha256=H2ERY4xoIeXN7kM3N9yGWiFBbtByyaN2Ni1kFqYPtO4,612
|
|
30
30
|
librelane/examples/spm/pin_order.cfg,sha256=-8mTGFKnES0vhQATfaE2TXN_mdCZ3SZIN90Src1l6fY,52
|
|
31
31
|
librelane/examples/spm/src/impl.sdc,sha256=wP18UoVlOJ9q4lmUoa3XpgcpPdyzEqHBNxCgOOU7QH0,2961
|
|
32
32
|
librelane/examples/spm/src/signoff.sdc,sha256=uiW143QNFig2vw3tXdC0LEtd59_pzsuaBDdgtMGB48Q,2694
|
|
@@ -35,7 +35,7 @@ librelane/examples/spm/verify/spm_tb.v,sha256=FJfUnnI7u4SDcrnKXK0QWd9KSpM-fjH2ni
|
|
|
35
35
|
librelane/examples/spm-user_project_wrapper/SPM_example.v,sha256=pSpVqH0LSzWHDcNCqehPik1GRQbw57fXqWZctITnWmY,8430
|
|
36
36
|
librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc,sha256=O6dbdMWNR1AKi3bdHcYRqMs89angq2eWSBxzSR3R_Pg,7247
|
|
37
37
|
librelane/examples/spm-user_project_wrapper/config-tut.json,sha256=g6NBPVNZifToYeT5yU9Em8yv6TsUUD8JMsIvsGGN0bI,254
|
|
38
|
-
librelane/examples/spm-user_project_wrapper/config.json,sha256=
|
|
38
|
+
librelane/examples/spm-user_project_wrapper/config.json,sha256=BBfnaAQ1VFabzurQDGcHGTgLkFudKL2-RdB3pIZrZ5Q,448
|
|
39
39
|
librelane/examples/spm-user_project_wrapper/defines.v,sha256=TUfuwmRFiUCjY6MdWJLGr0LWiuyoPpH1UeBbacDqFDI,2236
|
|
40
40
|
librelane/examples/spm-user_project_wrapper/template.def,sha256=7kl9l-oh4BDKuFHhp2yzk-ObUcrvvUVwPkqsMG0ZTds,438993
|
|
41
41
|
librelane/examples/spm-user_project_wrapper/user_project_wrapper.v,sha256=zc6GC583muuWtzw3p6v_B1k8j-Oo9WypuQf_8doA4uo,3364
|
|
@@ -43,7 +43,7 @@ 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=JB9gVgP2hHPhMuCJg7hvoj2BvJcvRec7suEXPgHmz14,10971
|
|
45
45
|
librelane/flows/cli.py,sha256=P2LCFn5_RQ88yB0WuetpLAuWeKQXd-DrpCOMgnVh9Mg,16705
|
|
46
|
-
librelane/flows/flow.py,sha256=
|
|
46
|
+
librelane/flows/flow.py,sha256=qly_ENbw8zHSS6ubUY56JrCRjKnfuSoN78suz1k4chw,36997
|
|
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=kBpR9kxfEfdTaNy9Ter2KNQXkW6qojCwoBsFJBwTq6I,15359
|
|
@@ -64,19 +64,19 @@ librelane/scripts/magic/Readme.md,sha256=NaQrlxY8l8GT-kokJNlMHeAR3PksWVbFpSznOWW
|
|
|
64
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
|
-
librelane/scripts/magic/def/mag_gds.tcl,sha256=
|
|
68
|
-
librelane/scripts/magic/drc.tcl,sha256=
|
|
67
|
+
librelane/scripts/magic/def/mag_gds.tcl,sha256=fwtQR9zPZpWqVmmLb-1hzY4WMCr4gbA3S0pTZsS9sss,2144
|
|
68
|
+
librelane/scripts/magic/drc.tcl,sha256=gPGyI96lR10dJXcJACajzHaHiT6ayAYPJqrmmuQkABc,2395
|
|
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=
|
|
73
|
-
librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=
|
|
72
|
+
librelane/scripts/magic/gds/extras_mag.tcl,sha256=1raG0URUezUDEKkdDeJqdlS0Y5gb4IzQFnjFysHHlmU,1304
|
|
73
|
+
librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mfYTQdio1XAA0DpWlV5JS7c3rkxtSS06kZqVfDfKGuQ,1056
|
|
74
74
|
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=
|
|
75
|
+
librelane/scripts/magic/lef/extras_maglef.tcl,sha256=V0TivPN4aLJ0is497IAmOB1qQm8vmCqqycKuwV3w0HY,1586
|
|
76
|
+
librelane/scripts/magic/lef/maglef.tcl,sha256=I6-xFtsCZQtQI4UbU53gaWrpELWUd4agNF5LLgq9Eq0,856
|
|
77
77
|
librelane/scripts/magic/lef.tcl,sha256=Ij_v63siQrgYh56juCiZMcJBBCl2Lco3Ah4YKg-xiAU,2076
|
|
78
78
|
librelane/scripts/magic/open.tcl,sha256=qgk3HiT4qI-pMWn2E2MxwijgveCVmt6oCd8wEWh0jio,915
|
|
79
|
-
librelane/scripts/magic/wrapper.tcl,sha256=
|
|
79
|
+
librelane/scripts/magic/wrapper.tcl,sha256=qO33N2AiEYBTABMB5vWMWWEd2FpyOhg8JlcGsBVD6MY,712
|
|
80
80
|
librelane/scripts/netgen/setup.tcl,sha256=LBkdtVZpxrNGQ8UNwMkEQ-xSrkn9DNIBW_jzB9b1gYk,979
|
|
81
81
|
librelane/scripts/odbpy/apply_def_template.py,sha256=Tn6y65biu0bAQ6XilYxq5jn3a_KqjTl423-aXWI864k,1534
|
|
82
82
|
librelane/scripts/odbpy/cell_frequency.py,sha256=NfGgM8wxIvjM1C_GHUghZPOh8gpdasLOWR4qBdHHLFE,3105
|
|
@@ -94,9 +94,9 @@ librelane/scripts/odbpy/ioplace_parser/parse.py,sha256=L2GXzNA-gkjyySZcTWXrRRP8r
|
|
|
94
94
|
librelane/scripts/odbpy/label_macro_pins.py,sha256=n3o9-_g6HkVP8k49yNnCkQJms9f_ykCE0Rye7bVFtIk,8620
|
|
95
95
|
librelane/scripts/odbpy/lefutil.py,sha256=XhfWSGHdn96yZWYQAPisgJM0iuY3xw4SW7jmMTzbpZs,3064
|
|
96
96
|
librelane/scripts/odbpy/placers.py,sha256=mgy_-GYeLDPMG41YAopMTtJyCHP6ucJRk7cJzI9PLRQ,4572
|
|
97
|
-
librelane/scripts/odbpy/power_utils.py,sha256=
|
|
97
|
+
librelane/scripts/odbpy/power_utils.py,sha256=qbwhvW0QRiqtFXpYNGyfDIrhNZv9dt0JX2n4CQ8YRs8,14722
|
|
98
98
|
librelane/scripts/odbpy/random_place.py,sha256=TEsV4LtXQTP8OJvnBh09Siu9fKkwG9UpIkCkQpdXAgU,1649
|
|
99
|
-
librelane/scripts/odbpy/reader.py,sha256=
|
|
99
|
+
librelane/scripts/odbpy/reader.py,sha256=uoLHGKfXRoMdrfXmkgIj3HHa_sqMOFvB3DIUT3vSSQw,8542
|
|
100
100
|
librelane/scripts/odbpy/remove_buffers.py,sha256=f-kGZIPnMtu4gnl2r2CDkng8U8vUMJKJWNV_akOpc38,5460
|
|
101
101
|
librelane/scripts/odbpy/snap_to_grid.py,sha256=lULRWlcYXvrTBUpemUPlpO2dBnbFeriuG-DlI4KnViE,1743
|
|
102
102
|
librelane/scripts/odbpy/wire_lengths.py,sha256=pSPhVnLlvcvmgEh89G8nu8DRaZVP66r-4ieVoV3zrm4,2737
|
|
@@ -107,8 +107,8 @@ librelane/scripts/openroad/buffer_list.tcl,sha256=sXygy1KRSUS4dZi1UOpBkGGOuXRVLM
|
|
|
107
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
109
|
librelane/scripts/openroad/common/grt.tcl,sha256=2qDLSj8lKKEJHH9V9npiSMXQdsIsIHE0DVmbVRStbk4,1132
|
|
110
|
-
librelane/scripts/openroad/common/io.tcl,sha256=
|
|
111
|
-
librelane/scripts/openroad/common/pdn_cfg.tcl,sha256=
|
|
110
|
+
librelane/scripts/openroad/common/io.tcl,sha256=fAoRoz6E9iwanFsWvaO50T1xGF6CSuxw38O6MtgrZ1w,22756
|
|
111
|
+
librelane/scripts/openroad/common/pdn_cfg.tcl,sha256=8xTK4_her0hcaxySKpXKlQIIe0goetTcJlSEBl88qL0,4417
|
|
112
112
|
librelane/scripts/openroad/common/resizer.tcl,sha256=OhjpVxw_8IOx5Bmh2_gh_EIHxKaX84NS37Of9Rlchpw,2255
|
|
113
113
|
librelane/scripts/openroad/common/set_global_connections.tcl,sha256=jxafLD-2SLciJYeueobrlJYetnfAfK0P5uMLwhaTQco,2927
|
|
114
114
|
librelane/scripts/openroad/common/set_layer_adjustments.tcl,sha256=xqAIDXsTa1_JsGmKXf6eG2Rni2EZSilSsHfJAhCl1xY,1037
|
|
@@ -126,9 +126,9 @@ librelane/scripts/openroad/gpl.tcl,sha256=WzxlyikUf70Q1FgaE6sIVvquYPZ8RU02_te1VB
|
|
|
126
126
|
librelane/scripts/openroad/grt.tcl,sha256=r_73hbvc4wMi2EFoPbGTh29Lh5ATT4vVwKjxyPIOFcM,1022
|
|
127
127
|
librelane/scripts/openroad/gui.tcl,sha256=BhKTcYEo-SajnYtdzXqpzjYbczy0qZ-OvEFlHMjPtlU,1255
|
|
128
128
|
librelane/scripts/openroad/insert_buffer.tcl,sha256=ST0tbr1LoutjjaouqgngiQZudlzzHMd5APB6DTE2TGw,4412
|
|
129
|
-
librelane/scripts/openroad/ioplacer.tcl,sha256=
|
|
129
|
+
librelane/scripts/openroad/ioplacer.tcl,sha256=tV-GF4ExJAKXqw-PQTf1Xlcc87xDJDLi1jksmnS1Smk,1970
|
|
130
130
|
librelane/scripts/openroad/irdrop.tcl,sha256=bXhNY_87xPV-ocF9v8wOWqjlnFPaVO_6K_DWbBHAAPs,1974
|
|
131
|
-
librelane/scripts/openroad/pdn.tcl,sha256=
|
|
131
|
+
librelane/scripts/openroad/pdn.tcl,sha256=WiKVmLw3g_ZN1Hs4iiAzc6Qah7ZwCn6o-OA5iNmlTtY,1566
|
|
132
132
|
librelane/scripts/openroad/rcx.tcl,sha256=kyEhli4sGFMEj-He9UXZDGb0Tmxlw7d6iZD7t6adUx8,1057
|
|
133
133
|
librelane/scripts/openroad/repair_design.tcl,sha256=mSQKIT-uac2gJFia_xMNQtHJKD--aTI2T0gmM5mrWZA,2314
|
|
134
134
|
librelane/scripts/openroad/repair_design_postgrt.tcl,sha256=sEXdFfH2le-q0ggcsWGgCR-GCFyzPdxk4P3RZyWCnpI,1902
|
|
@@ -147,25 +147,25 @@ librelane/scripts/tclsh/hello.tcl,sha256=kkR3akY7QnGHYXsQODYwLkMkUEOgWcNFtzaMTTE
|
|
|
147
147
|
librelane/state/__init__.py,sha256=DZ_RyKMr2oj4p5d32u8MmDKfCxR7OEdDw-1HWKTpatA,949
|
|
148
148
|
librelane/state/__main__.py,sha256=Ici4Ejg1ICUZNSYZRguC3BfEk_wFxsmE0ag0Vv8iY1I,1679
|
|
149
149
|
librelane/state/design_format.py,sha256=75-XXzCfk5HUAJQAcdpwiHYkweeR9NwaXKtubCV0dqg,6461
|
|
150
|
-
librelane/state/state.py,sha256=
|
|
150
|
+
librelane/state/state.py,sha256=tYn2si8NlkVErOSWKfVhsgrMpyxeX2Hv9EAPsQBWx2c,11902
|
|
151
151
|
librelane/steps/__init__.py,sha256=j3JYrdnWM74dYuEvE931oSrQI7FUz-hKWr8Mts8C0wg,1668
|
|
152
|
-
librelane/steps/__main__.py,sha256=
|
|
152
|
+
librelane/steps/__main__.py,sha256=GQZiV4s-9GIF4AwP34W61zwgzMvPp-QTR4cNELi7r5c,13349
|
|
153
153
|
librelane/steps/checker.py,sha256=HD5YFPAbHQKsFmBDrIAbo_0clZcCszNhIXb4lHaNIeQ,21629
|
|
154
|
-
librelane/steps/common_variables.py,sha256=
|
|
154
|
+
librelane/steps/common_variables.py,sha256=eih2eA1m0FpL8ydF5WWattwh_SxtzI55eb8gggJtBuY,12494
|
|
155
155
|
librelane/steps/cvc_rv.py,sha256=TNnEQDJI5tEUq8OQelVmBWmNbLzygrvKsZ36utKDvp4,5543
|
|
156
156
|
librelane/steps/klayout.py,sha256=EFtzu53bWm-Bg_xEovdR7fc1GbWTwqkcivtr1rivHWU,16615
|
|
157
|
-
librelane/steps/magic.py,sha256=
|
|
157
|
+
librelane/steps/magic.py,sha256=m4cZH2VomJs0RudtV8avSaZVqRj1NP7Pm2P6qo2z2X0,20919
|
|
158
158
|
librelane/steps/misc.py,sha256=8ubCvFeFEspXrgnzNWINY5-TXTyalNtlvcX8TSw0qdg,5685
|
|
159
159
|
librelane/steps/netgen.py,sha256=R9sDWv-9wKMdi2rkuLQdOc4uLlbYhXcKKd6WsZsnLt0,8953
|
|
160
|
-
librelane/steps/odb.py,sha256
|
|
161
|
-
librelane/steps/openroad.py,sha256=
|
|
160
|
+
librelane/steps/odb.py,sha256=-zsXi0jVdtfBfAJI0OC4x1jI_B2OX5YVn4uAn6NyFdk,38424
|
|
161
|
+
librelane/steps/openroad.py,sha256=0wA8-fvtIDbaSteh8lY_VxW7cF_73MdNKqTvWc7Blf4,99284
|
|
162
162
|
librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
|
|
163
163
|
librelane/steps/pyosys.py,sha256=LY7qqxkhjfoyBBR7vdkm7ylabbxMJDwIoYm7mAUbLVY,23348
|
|
164
|
-
librelane/steps/step.py,sha256=
|
|
165
|
-
librelane/steps/tclstep.py,sha256=
|
|
164
|
+
librelane/steps/step.py,sha256=THIxZkhtkNYt1iRgMduD0ywrOTCaV7cCfUB2EqXN6-k,55751
|
|
165
|
+
librelane/steps/tclstep.py,sha256=8-zpYOo562E86nm7f4DiTqUsLKY0AFtEJgrp9CnWWDw,10083
|
|
166
166
|
librelane/steps/verilator.py,sha256=MWx2TpLqYyea9_jSeLG9c2S5ujvYERQZRFNaMhfHxZE,7916
|
|
167
167
|
librelane/steps/yosys.py,sha256=uC72fb1yFXyIxrtcRu5DxxR3hadG19SlGh668yjhWHc,12694
|
|
168
|
-
librelane-3.0.0.
|
|
169
|
-
librelane-3.0.0.
|
|
170
|
-
librelane-3.0.0.
|
|
171
|
-
librelane-3.0.0.
|
|
168
|
+
librelane-3.0.0.dev26.dist-info/METADATA,sha256=ndJNvx1YIso3n8GZhhQLFStMDVNpsjMTJ562JZGLULs,6561
|
|
169
|
+
librelane-3.0.0.dev26.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
170
|
+
librelane-3.0.0.dev26.dist-info/entry_points.txt,sha256=GTBvXykNMMFsNKiJFgtEw7P1wb_VZIqVM35EFSpyZQE,263
|
|
171
|
+
librelane-3.0.0.dev26.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|