librelane 2.4.0__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/__init__.py +38 -0
- librelane/__main__.py +479 -0
- librelane/__version__.py +43 -0
- librelane/common/__init__.py +63 -0
- librelane/common/cli.py +75 -0
- librelane/common/drc.py +246 -0
- librelane/common/generic_dict.py +319 -0
- librelane/common/metrics/__init__.py +35 -0
- librelane/common/metrics/__main__.py +413 -0
- librelane/common/metrics/library.py +354 -0
- librelane/common/metrics/metric.py +186 -0
- librelane/common/metrics/util.py +279 -0
- librelane/common/misc.py +456 -0
- librelane/common/ring_buffer.py +63 -0
- librelane/common/tcl.py +80 -0
- librelane/common/toolbox.py +549 -0
- librelane/common/tpe.py +41 -0
- librelane/common/types.py +116 -0
- librelane/config/__init__.py +32 -0
- librelane/config/__main__.py +155 -0
- librelane/config/config.py +1025 -0
- librelane/config/flow.py +490 -0
- librelane/config/pdk_compat.py +255 -0
- librelane/config/preprocessor.py +464 -0
- librelane/config/removals.py +45 -0
- librelane/config/variable.py +743 -0
- librelane/container.py +285 -0
- librelane/env_info.py +320 -0
- librelane/examples/spm/config.yaml +33 -0
- librelane/examples/spm/pin_order.cfg +14 -0
- librelane/examples/spm/src/impl.sdc +73 -0
- librelane/examples/spm/src/signoff.sdc +68 -0
- librelane/examples/spm/src/spm.v +73 -0
- librelane/examples/spm/verify/spm_tb.v +106 -0
- librelane/examples/spm-user_project_wrapper/SPM_example.v +286 -0
- librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +145 -0
- librelane/examples/spm-user_project_wrapper/config-tut.json +12 -0
- librelane/examples/spm-user_project_wrapper/config.json +13 -0
- librelane/examples/spm-user_project_wrapper/defines.v +66 -0
- librelane/examples/spm-user_project_wrapper/template.def +7656 -0
- librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +123 -0
- librelane/flows/__init__.py +24 -0
- librelane/flows/builtins.py +18 -0
- librelane/flows/classic.py +327 -0
- librelane/flows/cli.py +463 -0
- librelane/flows/flow.py +1049 -0
- librelane/flows/misc.py +71 -0
- librelane/flows/optimizing.py +179 -0
- librelane/flows/sequential.py +367 -0
- librelane/flows/synth_explore.py +173 -0
- librelane/help/__main__.py +39 -0
- librelane/logging/__init__.py +40 -0
- librelane/logging/logger.py +323 -0
- librelane/open_pdks_rev +1 -0
- librelane/plugins.py +21 -0
- librelane/py.typed +0 -0
- librelane/scripts/base.sdc +80 -0
- librelane/scripts/klayout/Readme.md +2 -0
- librelane/scripts/klayout/open_design.py +63 -0
- librelane/scripts/klayout/render.py +121 -0
- librelane/scripts/klayout/stream_out.py +176 -0
- librelane/scripts/klayout/xml_drc_report_to_json.py +45 -0
- librelane/scripts/klayout/xor.drc +120 -0
- librelane/scripts/magic/Readme.md +1 -0
- librelane/scripts/magic/common/read.tcl +114 -0
- librelane/scripts/magic/def/antenna_check.tcl +35 -0
- librelane/scripts/magic/def/mag.tcl +19 -0
- librelane/scripts/magic/def/mag_gds.tcl +79 -0
- librelane/scripts/magic/drc.tcl +78 -0
- librelane/scripts/magic/extract_spice.tcl +98 -0
- librelane/scripts/magic/gds/drc_batch.tcl +74 -0
- librelane/scripts/magic/gds/erase_box.tcl +32 -0
- librelane/scripts/magic/gds/extras_mag.tcl +45 -0
- librelane/scripts/magic/gds/mag_with_pointers.tcl +31 -0
- librelane/scripts/magic/get_bbox.tcl +11 -0
- librelane/scripts/magic/lef/extras_maglef.tcl +61 -0
- librelane/scripts/magic/lef/maglef.tcl +26 -0
- librelane/scripts/magic/lef.tcl +57 -0
- librelane/scripts/magic/open.tcl +28 -0
- librelane/scripts/magic/wrapper.tcl +21 -0
- librelane/scripts/netgen/setup.tcl +28 -0
- librelane/scripts/odbpy/apply_def_template.py +49 -0
- librelane/scripts/odbpy/cell_frequency.py +107 -0
- librelane/scripts/odbpy/check_antenna_properties.py +116 -0
- librelane/scripts/odbpy/contextualize.py +109 -0
- librelane/scripts/odbpy/defutil.py +573 -0
- librelane/scripts/odbpy/diodes.py +373 -0
- librelane/scripts/odbpy/disconnected_pins.py +305 -0
- librelane/scripts/odbpy/eco_buffer.py +181 -0
- librelane/scripts/odbpy/eco_diode.py +139 -0
- librelane/scripts/odbpy/filter_unannotated.py +100 -0
- librelane/scripts/odbpy/io_place.py +482 -0
- librelane/scripts/odbpy/ioplace_parser/__init__.py +23 -0
- librelane/scripts/odbpy/ioplace_parser/parse.py +147 -0
- librelane/scripts/odbpy/label_macro_pins.py +277 -0
- librelane/scripts/odbpy/lefutil.py +97 -0
- librelane/scripts/odbpy/placers.py +162 -0
- librelane/scripts/odbpy/power_utils.py +397 -0
- librelane/scripts/odbpy/random_place.py +57 -0
- librelane/scripts/odbpy/reader.py +250 -0
- librelane/scripts/odbpy/remove_buffers.py +173 -0
- librelane/scripts/odbpy/snap_to_grid.py +57 -0
- librelane/scripts/odbpy/wire_lengths.py +93 -0
- librelane/scripts/openroad/antenna_check.tcl +20 -0
- librelane/scripts/openroad/antenna_repair.tcl +31 -0
- librelane/scripts/openroad/basic_mp.tcl +24 -0
- librelane/scripts/openroad/buffer_list.tcl +10 -0
- librelane/scripts/openroad/common/dpl.tcl +24 -0
- librelane/scripts/openroad/common/dpl_cell_pad.tcl +26 -0
- librelane/scripts/openroad/common/grt.tcl +32 -0
- librelane/scripts/openroad/common/io.tcl +540 -0
- librelane/scripts/openroad/common/pdn_cfg.tcl +135 -0
- librelane/scripts/openroad/common/resizer.tcl +103 -0
- librelane/scripts/openroad/common/set_global_connections.tcl +78 -0
- librelane/scripts/openroad/common/set_layer_adjustments.tcl +31 -0
- librelane/scripts/openroad/common/set_power_nets.tcl +30 -0
- librelane/scripts/openroad/common/set_rc.tcl +75 -0
- librelane/scripts/openroad/common/set_routing_layers.tcl +30 -0
- librelane/scripts/openroad/cts.tcl +80 -0
- librelane/scripts/openroad/cut_rows.tcl +24 -0
- librelane/scripts/openroad/dpl.tcl +24 -0
- librelane/scripts/openroad/drt.tcl +37 -0
- librelane/scripts/openroad/fill.tcl +30 -0
- librelane/scripts/openroad/floorplan.tcl +145 -0
- librelane/scripts/openroad/gpl.tcl +88 -0
- librelane/scripts/openroad/grt.tcl +30 -0
- librelane/scripts/openroad/gui.tcl +37 -0
- librelane/scripts/openroad/insert_buffer.tcl +127 -0
- librelane/scripts/openroad/ioplacer.tcl +67 -0
- librelane/scripts/openroad/irdrop.tcl +51 -0
- librelane/scripts/openroad/pdn.tcl +52 -0
- librelane/scripts/openroad/rcx.tcl +32 -0
- librelane/scripts/openroad/repair_design.tcl +70 -0
- librelane/scripts/openroad/repair_design_postgrt.tcl +48 -0
- librelane/scripts/openroad/rsz_timing_postcts.tcl +68 -0
- librelane/scripts/openroad/rsz_timing_postgrt.tcl +70 -0
- librelane/scripts/openroad/sta/check_macro_instances.tcl +53 -0
- librelane/scripts/openroad/sta/corner.tcl +393 -0
- librelane/scripts/openroad/tapcell.tcl +25 -0
- librelane/scripts/openroad/write_views.tcl +27 -0
- librelane/scripts/pyosys/construct_abc_script.py +177 -0
- librelane/scripts/pyosys/json_header.py +84 -0
- librelane/scripts/pyosys/synthesize.py +493 -0
- librelane/scripts/pyosys/ys_common.py +153 -0
- librelane/scripts/tclsh/hello.tcl +1 -0
- librelane/state/__init__.py +24 -0
- librelane/state/__main__.py +61 -0
- librelane/state/design_format.py +195 -0
- librelane/state/state.py +359 -0
- librelane/steps/__init__.py +61 -0
- librelane/steps/__main__.py +510 -0
- librelane/steps/checker.py +637 -0
- librelane/steps/common_variables.py +340 -0
- librelane/steps/cvc_rv.py +169 -0
- librelane/steps/klayout.py +509 -0
- librelane/steps/magic.py +576 -0
- librelane/steps/misc.py +160 -0
- librelane/steps/netgen.py +253 -0
- librelane/steps/odb.py +1088 -0
- librelane/steps/openroad.py +2460 -0
- librelane/steps/openroad_alerts.py +102 -0
- librelane/steps/pyosys.py +640 -0
- librelane/steps/step.py +1571 -0
- librelane/steps/tclstep.py +288 -0
- librelane/steps/verilator.py +222 -0
- librelane/steps/yosys.py +371 -0
- librelane-2.4.0.dist-info/METADATA +169 -0
- librelane-2.4.0.dist-info/RECORD +170 -0
- librelane-2.4.0.dist-info/WHEEL +4 -0
- librelane-2.4.0.dist-info/entry_points.txt +9 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2020-2024 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
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
|
|
16
|
+
`default_nettype none
|
|
17
|
+
/*
|
|
18
|
+
*-------------------------------------------------------------
|
|
19
|
+
*
|
|
20
|
+
* user_project_wrapper
|
|
21
|
+
*
|
|
22
|
+
* This wrapper enumerates all of the pins available to the
|
|
23
|
+
* user for the user project.
|
|
24
|
+
*
|
|
25
|
+
* An example user project is provided in this wrapper. The
|
|
26
|
+
* example should be removed and replaced with the actual
|
|
27
|
+
* user project.
|
|
28
|
+
*
|
|
29
|
+
*-------------------------------------------------------------
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
module user_project_wrapper #(
|
|
33
|
+
parameter BITS = 32
|
|
34
|
+
) (
|
|
35
|
+
`ifdef USE_POWER_PINS
|
|
36
|
+
inout vdda1, // User area 1 3.3V supply
|
|
37
|
+
inout vdda2, // User area 2 3.3V supply
|
|
38
|
+
inout vssa1, // User area 1 analog ground
|
|
39
|
+
inout vssa2, // User area 2 analog ground
|
|
40
|
+
inout vccd1, // User area 1 1.8V supply
|
|
41
|
+
inout vccd2, // User area 2 1.8v supply
|
|
42
|
+
inout vssd1, // User area 1 digital ground
|
|
43
|
+
inout vssd2, // User area 2 digital ground
|
|
44
|
+
`endif
|
|
45
|
+
|
|
46
|
+
// Wishbone Slave ports (WB MI A)
|
|
47
|
+
input wb_clk_i,
|
|
48
|
+
input wb_rst_i,
|
|
49
|
+
input wbs_stb_i,
|
|
50
|
+
input wbs_cyc_i,
|
|
51
|
+
input wbs_we_i,
|
|
52
|
+
input [3:0] wbs_sel_i,
|
|
53
|
+
input [31:0] wbs_dat_i,
|
|
54
|
+
input [31:0] wbs_adr_i,
|
|
55
|
+
output wbs_ack_o,
|
|
56
|
+
output [31:0] wbs_dat_o,
|
|
57
|
+
|
|
58
|
+
// Logic Analyzer Signals
|
|
59
|
+
input [127:0] la_data_in,
|
|
60
|
+
output [127:0] la_data_out,
|
|
61
|
+
input [127:0] la_oenb,
|
|
62
|
+
|
|
63
|
+
// IOs
|
|
64
|
+
input [`MPRJ_IO_PADS-1:0] io_in,
|
|
65
|
+
output [`MPRJ_IO_PADS-1:0] io_out,
|
|
66
|
+
output [`MPRJ_IO_PADS-1:0] io_oeb,
|
|
67
|
+
|
|
68
|
+
// Analog (direct connection to GPIO pad---use with caution)
|
|
69
|
+
// Note that analog I/O is not available on the 7 lowest-numbered
|
|
70
|
+
// GPIO pads, and so the analog_io indexing is offset from the
|
|
71
|
+
// GPIO indexing by 7 (also upper 2 GPIOs do not have analog_io).
|
|
72
|
+
inout [`MPRJ_IO_PADS-10:0] analog_io,
|
|
73
|
+
|
|
74
|
+
// Independent clock (on independent integer divider)
|
|
75
|
+
input user_clock2,
|
|
76
|
+
|
|
77
|
+
// User maskable interrupt signals
|
|
78
|
+
output [2:0] user_irq
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
/*--------------------------------------*/
|
|
82
|
+
/* User project is instantiated here */
|
|
83
|
+
/*--------------------------------------*/
|
|
84
|
+
|
|
85
|
+
SPM_example mprj (
|
|
86
|
+
`ifdef USE_POWER_PINS
|
|
87
|
+
.vccd1(vccd1), // User area 1 1.8V power
|
|
88
|
+
.vssd1(vssd1), // User area 1 digital ground
|
|
89
|
+
`endif
|
|
90
|
+
|
|
91
|
+
.wb_clk_i(wb_clk_i),
|
|
92
|
+
.wb_rst_i(wb_rst_i),
|
|
93
|
+
|
|
94
|
+
// MGMT SoC Wishbone Slave
|
|
95
|
+
|
|
96
|
+
.wbs_cyc_i(wbs_cyc_i),
|
|
97
|
+
.wbs_stb_i(wbs_stb_i),
|
|
98
|
+
.wbs_we_i(wbs_we_i),
|
|
99
|
+
.wbs_sel_i(wbs_sel_i),
|
|
100
|
+
.wbs_adr_i(wbs_adr_i),
|
|
101
|
+
.wbs_dat_i(wbs_dat_i),
|
|
102
|
+
.wbs_ack_o(wbs_ack_o),
|
|
103
|
+
.wbs_dat_o(wbs_dat_o),
|
|
104
|
+
|
|
105
|
+
// Logic Analyzer
|
|
106
|
+
|
|
107
|
+
.la_data_in(la_data_in),
|
|
108
|
+
.la_data_out(la_data_out),
|
|
109
|
+
.la_oenb (la_oenb),
|
|
110
|
+
|
|
111
|
+
// IO Pads
|
|
112
|
+
|
|
113
|
+
.io_in (io_in),
|
|
114
|
+
.io_out(io_out),
|
|
115
|
+
.io_oeb(io_oeb),
|
|
116
|
+
|
|
117
|
+
// IRQ
|
|
118
|
+
.irq(user_irq)
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
endmodule // user_project_wrapper
|
|
122
|
+
|
|
123
|
+
`default_nettype wire
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
The Flow Module
|
|
16
|
+
---------------
|
|
17
|
+
|
|
18
|
+
An API for implementing new flows using the LibreLane infrastructure, as well
|
|
19
|
+
as a number of built-in flows.
|
|
20
|
+
"""
|
|
21
|
+
from .flow import FlowError, FlowException, FlowProgressBar, Flow
|
|
22
|
+
from .sequential import SequentialFlow
|
|
23
|
+
from . import builtins
|
|
24
|
+
from .cli import cloup_flow_opts
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
# flake8: noqa
|
|
15
|
+
from .optimizing import Optimizing
|
|
16
|
+
from .classic import Classic, VHDLClassic
|
|
17
|
+
from .misc import OpenInKLayout, OpenInOpenROAD
|
|
18
|
+
from .synth_explore import SynthesisExploration
|
|
@@ -0,0 +1,327 @@
|
|
|
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
|
+
from .flow import Flow
|
|
15
|
+
from .sequential import SequentialFlow
|
|
16
|
+
from ..config import Variable
|
|
17
|
+
from ..steps import (
|
|
18
|
+
Yosys,
|
|
19
|
+
OpenROAD,
|
|
20
|
+
Magic,
|
|
21
|
+
KLayout,
|
|
22
|
+
Odb,
|
|
23
|
+
Netgen,
|
|
24
|
+
Checker,
|
|
25
|
+
Verilator,
|
|
26
|
+
Misc,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@Flow.factory.register()
|
|
31
|
+
class Classic(SequentialFlow):
|
|
32
|
+
"""
|
|
33
|
+
A flow of type :class:`librelane.flows.SequentialFlow` that is the most
|
|
34
|
+
similar to the original OpenLane flow, running the Verilog RTL through
|
|
35
|
+
Yosys, OpenROAD, KLayout and Magic to produce a valid GDSII for simpler designs.
|
|
36
|
+
|
|
37
|
+
This is the default when using LibreLane via the command-line.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
Steps = [
|
|
41
|
+
Verilator.Lint,
|
|
42
|
+
Checker.LintTimingConstructs,
|
|
43
|
+
Checker.LintErrors,
|
|
44
|
+
Checker.LintWarnings,
|
|
45
|
+
Yosys.JsonHeader,
|
|
46
|
+
Yosys.Synthesis,
|
|
47
|
+
Checker.YosysUnmappedCells,
|
|
48
|
+
Checker.YosysSynthChecks,
|
|
49
|
+
Checker.NetlistAssignStatements,
|
|
50
|
+
OpenROAD.CheckSDCFiles,
|
|
51
|
+
OpenROAD.CheckMacroInstances,
|
|
52
|
+
OpenROAD.STAPrePNR,
|
|
53
|
+
OpenROAD.Floorplan,
|
|
54
|
+
Odb.CheckMacroAntennaProperties,
|
|
55
|
+
Odb.SetPowerConnections,
|
|
56
|
+
Odb.ManualMacroPlacement,
|
|
57
|
+
OpenROAD.CutRows,
|
|
58
|
+
OpenROAD.TapEndcapInsertion,
|
|
59
|
+
Odb.AddPDNObstructions,
|
|
60
|
+
OpenROAD.GeneratePDN,
|
|
61
|
+
Odb.RemovePDNObstructions,
|
|
62
|
+
Odb.AddRoutingObstructions,
|
|
63
|
+
OpenROAD.GlobalPlacementSkipIO,
|
|
64
|
+
OpenROAD.IOPlacement,
|
|
65
|
+
Odb.CustomIOPlacement,
|
|
66
|
+
Odb.ApplyDEFTemplate,
|
|
67
|
+
OpenROAD.GlobalPlacement,
|
|
68
|
+
Odb.WriteVerilogHeader,
|
|
69
|
+
Checker.PowerGridViolations,
|
|
70
|
+
OpenROAD.STAMidPNR,
|
|
71
|
+
OpenROAD.RepairDesignPostGPL,
|
|
72
|
+
Odb.ManualGlobalPlacement,
|
|
73
|
+
OpenROAD.DetailedPlacement,
|
|
74
|
+
OpenROAD.CTS,
|
|
75
|
+
OpenROAD.STAMidPNR,
|
|
76
|
+
OpenROAD.ResizerTimingPostCTS,
|
|
77
|
+
OpenROAD.STAMidPNR,
|
|
78
|
+
OpenROAD.GlobalRouting,
|
|
79
|
+
OpenROAD.CheckAntennas,
|
|
80
|
+
OpenROAD.RepairDesignPostGRT,
|
|
81
|
+
Odb.DiodesOnPorts,
|
|
82
|
+
Odb.HeuristicDiodeInsertion,
|
|
83
|
+
OpenROAD.RepairAntennas,
|
|
84
|
+
OpenROAD.ResizerTimingPostGRT,
|
|
85
|
+
OpenROAD.STAMidPNR,
|
|
86
|
+
OpenROAD.DetailedRouting,
|
|
87
|
+
Odb.RemoveRoutingObstructions,
|
|
88
|
+
OpenROAD.CheckAntennas,
|
|
89
|
+
Checker.TrDRC,
|
|
90
|
+
Odb.ReportDisconnectedPins,
|
|
91
|
+
Checker.DisconnectedPins,
|
|
92
|
+
Odb.ReportWireLength,
|
|
93
|
+
Checker.WireLength,
|
|
94
|
+
OpenROAD.FillInsertion,
|
|
95
|
+
Odb.CellFrequencyTables,
|
|
96
|
+
OpenROAD.RCX,
|
|
97
|
+
OpenROAD.STAPostPNR,
|
|
98
|
+
OpenROAD.IRDropReport,
|
|
99
|
+
Magic.StreamOut,
|
|
100
|
+
KLayout.StreamOut,
|
|
101
|
+
Magic.WriteLEF,
|
|
102
|
+
Odb.CheckDesignAntennaProperties,
|
|
103
|
+
KLayout.XOR,
|
|
104
|
+
Checker.XOR,
|
|
105
|
+
Magic.DRC,
|
|
106
|
+
KLayout.DRC,
|
|
107
|
+
Checker.MagicDRC,
|
|
108
|
+
Checker.KLayoutDRC,
|
|
109
|
+
Magic.SpiceExtraction,
|
|
110
|
+
Checker.IllegalOverlap,
|
|
111
|
+
Netgen.LVS,
|
|
112
|
+
Checker.LVS,
|
|
113
|
+
Yosys.EQY,
|
|
114
|
+
Checker.SetupViolations,
|
|
115
|
+
Checker.HoldViolations,
|
|
116
|
+
Checker.MaxSlewViolations,
|
|
117
|
+
Checker.MaxCapViolations,
|
|
118
|
+
Misc.ReportManufacturability,
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
config_vars = [
|
|
122
|
+
Variable(
|
|
123
|
+
"RUN_TAP_ENDCAP_INSERTION",
|
|
124
|
+
bool,
|
|
125
|
+
"Enables the OpenROAD.TapEndcapInsertion step.",
|
|
126
|
+
default=True,
|
|
127
|
+
deprecated_names=["TAP_DECAP_INSERTION", "RUN_TAP_DECAP_INSERTION"],
|
|
128
|
+
),
|
|
129
|
+
Variable(
|
|
130
|
+
"RUN_POST_GPL_DESIGN_REPAIR",
|
|
131
|
+
bool,
|
|
132
|
+
"Enables resizer design repair after global placement using the OpenROAD.RepairDesignPostGPL step.",
|
|
133
|
+
default=True,
|
|
134
|
+
deprecated_names=["PL_RESIZER_DESIGN_OPTIMIZATIONS", "RUN_REPAIR_DESIGN"],
|
|
135
|
+
),
|
|
136
|
+
Variable(
|
|
137
|
+
"RUN_POST_GRT_DESIGN_REPAIR",
|
|
138
|
+
bool,
|
|
139
|
+
"Enables resizer design repair after global placement using the OpenROAD.RepairDesignPostGPL step. This is experimental and may result in hangs and/or extended run times.",
|
|
140
|
+
default=False,
|
|
141
|
+
),
|
|
142
|
+
Variable(
|
|
143
|
+
"RUN_CTS",
|
|
144
|
+
bool,
|
|
145
|
+
"Enables clock tree synthesis using the OpenROAD.CTS step.",
|
|
146
|
+
default=True,
|
|
147
|
+
deprecated_names=["CLOCK_TREE_SYNTH"],
|
|
148
|
+
),
|
|
149
|
+
Variable(
|
|
150
|
+
"RUN_POST_CTS_RESIZER_TIMING",
|
|
151
|
+
bool,
|
|
152
|
+
"Enables resizer timing optimizations after clock tree synthesis using the OpenROAD.ResizerTimingPostCTS step.",
|
|
153
|
+
default=True,
|
|
154
|
+
deprecated_names=["PL_RESIZER_TIMING_OPTIMIZATIONS"],
|
|
155
|
+
),
|
|
156
|
+
Variable(
|
|
157
|
+
"RUN_POST_GRT_RESIZER_TIMING",
|
|
158
|
+
bool,
|
|
159
|
+
"Enables resizer timing optimizations after global routing using the OpenROAD.ResizerTimingPostGRT step. This is experimental and may result in hangs and/or extended run times.",
|
|
160
|
+
default=False,
|
|
161
|
+
deprecated_names=["GLB_RESIZER_TIMING_OPTIMIZATIONS"],
|
|
162
|
+
),
|
|
163
|
+
Variable(
|
|
164
|
+
"RUN_HEURISTIC_DIODE_INSERTION",
|
|
165
|
+
bool,
|
|
166
|
+
"Enables the Odb.HeuristicDiodeInsertion step.",
|
|
167
|
+
default=False, # For compatibility with OL1
|
|
168
|
+
),
|
|
169
|
+
Variable(
|
|
170
|
+
"RUN_ANTENNA_REPAIR",
|
|
171
|
+
bool,
|
|
172
|
+
"Enables the OpenROAD.RepairAntennas step.",
|
|
173
|
+
default=True,
|
|
174
|
+
deprecated_names=["GRT_REPAIR_ANTENNAS"],
|
|
175
|
+
),
|
|
176
|
+
Variable(
|
|
177
|
+
"RUN_DRT",
|
|
178
|
+
bool,
|
|
179
|
+
"Enables the OpenROAD.DetailedRouting step.",
|
|
180
|
+
default=True,
|
|
181
|
+
),
|
|
182
|
+
Variable(
|
|
183
|
+
"RUN_FILL_INSERTION",
|
|
184
|
+
bool,
|
|
185
|
+
"Enables the OpenROAD.FillInsertion step.",
|
|
186
|
+
default=True,
|
|
187
|
+
),
|
|
188
|
+
Variable(
|
|
189
|
+
"RUN_MCSTA",
|
|
190
|
+
bool,
|
|
191
|
+
"Enables multi-corner static timing analysis using the OpenROAD.STAPostPNR step.",
|
|
192
|
+
default=True,
|
|
193
|
+
deprecated_names=["RUN_SPEF_STA"],
|
|
194
|
+
),
|
|
195
|
+
Variable(
|
|
196
|
+
"RUN_SPEF_EXTRACTION",
|
|
197
|
+
bool,
|
|
198
|
+
"Enables parasitics extraction using the OpenROAD.RCX step.",
|
|
199
|
+
default=True,
|
|
200
|
+
),
|
|
201
|
+
Variable(
|
|
202
|
+
"RUN_IRDROP_REPORT",
|
|
203
|
+
bool,
|
|
204
|
+
"Enables generation of an IR Drop report using the OpenROAD.IRDropReport step.",
|
|
205
|
+
default=True,
|
|
206
|
+
),
|
|
207
|
+
Variable(
|
|
208
|
+
"RUN_LVS",
|
|
209
|
+
bool,
|
|
210
|
+
"Enables the Netgen.LVS step.",
|
|
211
|
+
default=True,
|
|
212
|
+
),
|
|
213
|
+
Variable(
|
|
214
|
+
"RUN_MAGIC_STREAMOUT",
|
|
215
|
+
bool,
|
|
216
|
+
"Enables the Magic.StreamOut step to generate GDSII.",
|
|
217
|
+
default=True,
|
|
218
|
+
deprecated_names=["RUN_MAGIC"],
|
|
219
|
+
),
|
|
220
|
+
Variable(
|
|
221
|
+
"RUN_KLAYOUT_STREAMOUT",
|
|
222
|
+
bool,
|
|
223
|
+
"Enables the KLayout.StreamOut step to generate GDSII.",
|
|
224
|
+
default=True,
|
|
225
|
+
deprecated_names=["RUN_KLAYOUT"],
|
|
226
|
+
),
|
|
227
|
+
Variable(
|
|
228
|
+
"RUN_MAGIC_WRITE_LEF",
|
|
229
|
+
bool,
|
|
230
|
+
"Enables the Magic.WriteLEF step.",
|
|
231
|
+
default=True,
|
|
232
|
+
deprecated_names=["MAGIC_GENERATE_LEF"],
|
|
233
|
+
),
|
|
234
|
+
Variable(
|
|
235
|
+
"RUN_KLAYOUT_XOR",
|
|
236
|
+
bool,
|
|
237
|
+
"Enables running the KLayout.XOR step on the two GDSII files generated by Magic and Klayout. Stream-outs for both KLayout and Magic should have already run, and the PDK must support both signoff tools.",
|
|
238
|
+
default=True,
|
|
239
|
+
),
|
|
240
|
+
Variable(
|
|
241
|
+
"RUN_MAGIC_DRC",
|
|
242
|
+
bool,
|
|
243
|
+
"Enables the Magic.DRC step.",
|
|
244
|
+
default=True,
|
|
245
|
+
),
|
|
246
|
+
Variable(
|
|
247
|
+
"RUN_KLAYOUT_DRC",
|
|
248
|
+
bool,
|
|
249
|
+
"Enables the KLayout.DRC step.",
|
|
250
|
+
default=True,
|
|
251
|
+
),
|
|
252
|
+
Variable(
|
|
253
|
+
"RUN_EQY",
|
|
254
|
+
bool,
|
|
255
|
+
"Enables the Yosys.EQY step. Not valid for VHDLClassic.",
|
|
256
|
+
default=False,
|
|
257
|
+
),
|
|
258
|
+
Variable(
|
|
259
|
+
"RUN_LINTER",
|
|
260
|
+
bool,
|
|
261
|
+
"Enables the Verilator.Lint step and associated checker steps. Not valid for VHDLClassic.",
|
|
262
|
+
default=True,
|
|
263
|
+
deprecated_names=["RUN_VERILATOR"],
|
|
264
|
+
),
|
|
265
|
+
]
|
|
266
|
+
|
|
267
|
+
gating_config_vars = {
|
|
268
|
+
"OpenROAD.RepairDesignPostGPL": ["RUN_POST_GPL_DESIGN_REPAIR"],
|
|
269
|
+
"OpenROAD.RepairDesignPostGRT": ["RUN_POST_GRT_DESIGN_REPAIR"],
|
|
270
|
+
"OpenROAD.ResizerTimingPostCTS": ["RUN_POST_CTS_RESIZER_TIMING"],
|
|
271
|
+
"OpenROAD.ResizerTimingPostGRT": ["RUN_POST_GRT_RESIZER_TIMING"],
|
|
272
|
+
"OpenROAD.CTS": ["RUN_CTS"],
|
|
273
|
+
"OpenROAD.RCX": ["RUN_SPEF_EXTRACTION"],
|
|
274
|
+
"OpenROAD.TapEndcapInsertion": ["RUN_TAP_ENDCAP_INSERTION"],
|
|
275
|
+
"Odb.HeuristicDiodeInsertion": ["RUN_HEURISTIC_DIODE_INSERTION"],
|
|
276
|
+
"OpenROAD.RepairAntennas": ["RUN_ANTENNA_REPAIR"],
|
|
277
|
+
"OpenROAD.DetailedRouting": ["RUN_DRT"],
|
|
278
|
+
"OpenROAD.FillInsertion": ["RUN_FILL_INSERTION"],
|
|
279
|
+
"OpenROAD.STAPostPNR": ["RUN_MCSTA"],
|
|
280
|
+
"OpenROAD.IRDropReport": ["RUN_IRDROP_REPORT"],
|
|
281
|
+
"Magic.StreamOut": ["RUN_MAGIC_STREAMOUT"],
|
|
282
|
+
"KLayout.StreamOut": ["RUN_KLAYOUT_STREAMOUT"],
|
|
283
|
+
"Magic.WriteLEF": ["RUN_MAGIC_WRITE_LEF"],
|
|
284
|
+
"Magic.DRC": ["RUN_MAGIC_DRC"],
|
|
285
|
+
"KLayout.DRC": ["RUN_KLAYOUT_DRC"],
|
|
286
|
+
"KLayout.XOR": [
|
|
287
|
+
"RUN_KLAYOUT_XOR",
|
|
288
|
+
"RUN_MAGIC_STREAMOUT",
|
|
289
|
+
"RUN_KLAYOUT_STREAMOUT",
|
|
290
|
+
],
|
|
291
|
+
"Netgen.LVS": ["RUN_LVS"],
|
|
292
|
+
"Checker.TrDRC": ["RUN_DRT"],
|
|
293
|
+
"Checker.MagicDRC": ["RUN_MAGIC_DRC"],
|
|
294
|
+
"Checker.XOR": [
|
|
295
|
+
"RUN_KLAYOUT_XOR",
|
|
296
|
+
"RUN_MAGIC_STREAMOUT",
|
|
297
|
+
"RUN_KLAYOUT_STREAMOUT",
|
|
298
|
+
],
|
|
299
|
+
"Checker.LVS": ["RUN_LVS"],
|
|
300
|
+
"Checker.KLayoutDRC": ["RUN_KLAYOUT_DRC"],
|
|
301
|
+
# Not in VHDLClassic
|
|
302
|
+
"Yosys.EQY": ["RUN_EQY"],
|
|
303
|
+
"Verilator.Lint": ["RUN_LINTER"],
|
|
304
|
+
"Checker.LintErrors": ["RUN_LINTER"],
|
|
305
|
+
"Checker.LintWarnings": ["RUN_LINTER"],
|
|
306
|
+
"Checker.LintTimingConstructs": [
|
|
307
|
+
"RUN_LINTER",
|
|
308
|
+
],
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
@Flow.factory.register()
|
|
313
|
+
class VHDLClassic(Classic):
|
|
314
|
+
"""
|
|
315
|
+
A variant of Classic that accepts VHDL files for Synthesis instead of
|
|
316
|
+
Verilog files (and removes Verilog linting/equivalence steps.)
|
|
317
|
+
"""
|
|
318
|
+
|
|
319
|
+
Substitutions = {
|
|
320
|
+
"Verilator.Lint": None,
|
|
321
|
+
"Checker.Lint*": None,
|
|
322
|
+
"Yosys.JsonHeader": None,
|
|
323
|
+
"Yosys.Synthesis": Yosys.VHDLSynthesis,
|
|
324
|
+
"Odb.SetPowerConnections": None,
|
|
325
|
+
"Odb.WriteVerilogHeader": None,
|
|
326
|
+
"Yosys.EQY": None,
|
|
327
|
+
}
|