librelane 3.0.0.dev24__py3-none-any.whl → 3.0.0.dev25__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/examples/spm/config.yaml +8 -8
- librelane/examples/spm-user_project_wrapper/config.json +17 -5
- 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/steps/common_variables.py +82 -33
- librelane/steps/odb.py +14 -35
- librelane/steps/openroad.py +21 -40
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev25.dist-info}/METADATA +1 -1
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev25.dist-info}/RECORD +13 -13
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev25.dist-info}/WHEEL +0 -0
- {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev25.dist-info}/entry_points.txt +0 -0
|
@@ -7,16 +7,16 @@ PNR_SDC_FILE: dir::src/impl.sdc
|
|
|
7
7
|
SIGNOFF_SDC_FILE: dir::src/signoff.sdc
|
|
8
8
|
|
|
9
9
|
# PDN
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
PDN_VOFFSET: 5
|
|
11
|
+
PDN_HOFFSET: 5
|
|
12
|
+
PDN_VWIDTH: 2
|
|
13
|
+
PDN_HWIDTH: 2
|
|
14
|
+
PDN_VPITCH: 30
|
|
15
|
+
PDN_HPITCH: 30
|
|
16
|
+
PDN_SKIPTRIM: true
|
|
17
17
|
|
|
18
18
|
# Pin Order
|
|
19
|
-
|
|
19
|
+
IO_PIN_ORDER_CFG: dir::pin_order.cfg
|
|
20
20
|
|
|
21
21
|
# Technology-Specific Configs
|
|
22
22
|
pdk::sky130*:
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"DESIGN_NAME": "SPM_example",
|
|
3
|
-
"VERILOG_FILES": [
|
|
3
|
+
"VERILOG_FILES": [
|
|
4
|
+
"dir::./defines.v",
|
|
5
|
+
"dir::./SPM_example.v"
|
|
6
|
+
],
|
|
4
7
|
"CLOCK_PERIOD": 25,
|
|
5
8
|
"CLOCK_PORT": "wb_clk_i",
|
|
6
9
|
"CLOCK_NET": "SPM.clk",
|
|
7
10
|
"RT_MAX_LAYER": "met4",
|
|
8
11
|
"FP_SIZING": "absolute",
|
|
9
|
-
"VDD_NETS": [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
12
|
+
"VDD_NETS": [
|
|
13
|
+
"vccd1"
|
|
14
|
+
],
|
|
15
|
+
"GND_NETS": [
|
|
16
|
+
"vssd1"
|
|
17
|
+
],
|
|
18
|
+
"PDN_MULTILAYER": false,
|
|
19
|
+
"DIE_AREA": [
|
|
20
|
+
0,
|
|
21
|
+
0,
|
|
22
|
+
600,
|
|
23
|
+
600
|
|
24
|
+
]
|
|
13
25
|
}
|
|
@@ -99,23 +99,35 @@ proc read_pdn_cfg {} {
|
|
|
99
99
|
|
|
100
100
|
# Compatibility Layer for Deprecated Variables That May Still Be Used By
|
|
101
101
|
# User Files
|
|
102
|
-
set
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
102
|
+
set unset_list {
|
|
103
|
+
DESIGN_IS_CORE
|
|
104
|
+
PDN_ENABLE_MACROS_GRID
|
|
105
|
+
PDN_RAILS_LAYER
|
|
106
|
+
PDN_UPPER_LAYER
|
|
107
|
+
PDN_LOWER_LAYER
|
|
108
|
+
}
|
|
109
|
+
set ::env(DESIGN_IS_CORE) $::env(PDN_MULTILAYER)
|
|
110
|
+
set ::env(PDN_ENABLE_MACROS_GRID) $::env(PDN_CONNECT_MACROS_TO_GRID)
|
|
111
|
+
set ::env(PDN_RAILS_LAYER) $::env(PDN_RAIL_LAYER)
|
|
112
|
+
set ::env(PDN_UPPER_LAYER) $::env(PDN_HORIZONTAL_LAYER)
|
|
113
|
+
set ::env(PDN_LOWER_LAYER) $::env(PDN_VERTICAL_LAYER)
|
|
114
|
+
foreach key [array names ::env] {
|
|
115
|
+
if { [string match PDN_* $key] } {
|
|
116
|
+
set fp_name FP_$key
|
|
117
|
+
lappend unset_list $fp_name
|
|
118
|
+
set ::env($fp_name) $::env($key)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
107
121
|
|
|
108
|
-
if {[catch {source $::env(
|
|
122
|
+
if {[catch {source $::env(PDN_CFG)} errmsg]} {
|
|
109
123
|
puts stderr $errmsg
|
|
110
124
|
exit 1
|
|
111
125
|
}
|
|
112
126
|
|
|
113
127
|
# Restore Environment
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
unset ::env(FP_PDN_UPPER_LAYER)
|
|
118
|
-
unset ::env(FP_PDN_LOWER_LAYER)
|
|
128
|
+
foreach unsettable $unset_list {
|
|
129
|
+
unset ::env($unsettable)
|
|
130
|
+
}
|
|
119
131
|
}
|
|
120
132
|
|
|
121
133
|
|
|
@@ -43,83 +43,83 @@ foreach vdd $::env(VDD_NETS) gnd $::env(GND_NETS) {
|
|
|
43
43
|
set_voltage_domain -name CORE -power $::env(VDD_NET) -ground $::env(GND_NET) \
|
|
44
44
|
-secondary_power $secondary
|
|
45
45
|
|
|
46
|
-
if { $::env(
|
|
46
|
+
if { $::env(PDN_MULTILAYER) == 1 } {
|
|
47
47
|
define_pdn_grid \
|
|
48
48
|
-name stdcell_grid \
|
|
49
49
|
-starts_with POWER \
|
|
50
50
|
-voltage_domain CORE \
|
|
51
|
-
-pins "$::env(
|
|
51
|
+
-pins "$::env(PDN_VERTICAL_LAYER) $::env(PDN_HORIZONTAL_LAYER)"
|
|
52
52
|
|
|
53
53
|
add_pdn_stripe \
|
|
54
54
|
-grid stdcell_grid \
|
|
55
|
-
-layer $::env(
|
|
56
|
-
-width $::env(
|
|
57
|
-
-pitch $::env(
|
|
58
|
-
-offset $::env(
|
|
59
|
-
-spacing $::env(
|
|
55
|
+
-layer $::env(PDN_VERTICAL_LAYER) \
|
|
56
|
+
-width $::env(PDN_VWIDTH) \
|
|
57
|
+
-pitch $::env(PDN_VPITCH) \
|
|
58
|
+
-offset $::env(PDN_VOFFSET) \
|
|
59
|
+
-spacing $::env(PDN_VSPACING) \
|
|
60
60
|
-starts_with POWER -extend_to_core_ring
|
|
61
61
|
|
|
62
62
|
add_pdn_stripe \
|
|
63
63
|
-grid stdcell_grid \
|
|
64
|
-
-layer $::env(
|
|
65
|
-
-width $::env(
|
|
66
|
-
-pitch $::env(
|
|
67
|
-
-offset $::env(
|
|
68
|
-
-spacing $::env(
|
|
64
|
+
-layer $::env(PDN_HORIZONTAL_LAYER) \
|
|
65
|
+
-width $::env(PDN_HWIDTH) \
|
|
66
|
+
-pitch $::env(PDN_HPITCH) \
|
|
67
|
+
-offset $::env(PDN_HOFFSET) \
|
|
68
|
+
-spacing $::env(PDN_HSPACING) \
|
|
69
69
|
-starts_with POWER -extend_to_core_ring
|
|
70
70
|
|
|
71
71
|
add_pdn_connect \
|
|
72
72
|
-grid stdcell_grid \
|
|
73
|
-
-layers "$::env(
|
|
73
|
+
-layers "$::env(PDN_VERTICAL_LAYER) $::env(PDN_HORIZONTAL_LAYER)"
|
|
74
74
|
} else {
|
|
75
75
|
define_pdn_grid \
|
|
76
76
|
-name stdcell_grid \
|
|
77
77
|
-starts_with POWER \
|
|
78
78
|
-voltage_domain CORE \
|
|
79
|
-
-pins $::env(
|
|
79
|
+
-pins $::env(PDN_VERTICAL_LAYER)
|
|
80
80
|
|
|
81
81
|
add_pdn_stripe \
|
|
82
82
|
-grid stdcell_grid \
|
|
83
|
-
-layer $::env(
|
|
84
|
-
-width $::env(
|
|
85
|
-
-pitch $::env(
|
|
86
|
-
-offset $::env(
|
|
87
|
-
-spacing $::env(
|
|
83
|
+
-layer $::env(PDN_VERTICAL_LAYER) \
|
|
84
|
+
-width $::env(PDN_VWIDTH) \
|
|
85
|
+
-pitch $::env(PDN_VPITCH) \
|
|
86
|
+
-offset $::env(PDN_VOFFSET) \
|
|
87
|
+
-spacing $::env(PDN_VSPACING) \
|
|
88
88
|
-starts_with POWER -extend_to_core_ring
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
# Adds the standard cell rails if enabled.
|
|
92
|
-
if { $::env(
|
|
92
|
+
if { $::env(PDN_ENABLE_RAILS) == 1 } {
|
|
93
93
|
add_pdn_stripe \
|
|
94
94
|
-grid stdcell_grid \
|
|
95
|
-
-layer $::env(
|
|
96
|
-
-width $::env(
|
|
95
|
+
-layer $::env(PDN_RAIL_LAYER) \
|
|
96
|
+
-width $::env(PDN_RAIL_WIDTH) \
|
|
97
97
|
-followpins
|
|
98
98
|
|
|
99
99
|
add_pdn_connect \
|
|
100
100
|
-grid stdcell_grid \
|
|
101
|
-
-layers "$::env(
|
|
101
|
+
-layers "$::env(PDN_RAIL_LAYER) $::env(PDN_VERTICAL_LAYER)"
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
|
|
105
105
|
# Adds the core ring if enabled.
|
|
106
|
-
if { $::env(
|
|
107
|
-
if { $::env(
|
|
106
|
+
if { $::env(PDN_CORE_RING) == 1 } {
|
|
107
|
+
if { $::env(PDN_MULTILAYER) == 1 } {
|
|
108
108
|
add_pdn_ring \
|
|
109
109
|
-allow_out_of_die \
|
|
110
110
|
-grid stdcell_grid \
|
|
111
|
-
-layers "$::env(
|
|
112
|
-
-widths "$::env(
|
|
113
|
-
-spacings "$::env(
|
|
114
|
-
-core_offset "$::env(
|
|
111
|
+
-layers "$::env(PDN_VERTICAL_LAYER) $::env(PDN_HORIZONTAL_LAYER)" \
|
|
112
|
+
-widths "$::env(PDN_CORE_RING_VWIDTH) $::env(PDN_CORE_RING_HWIDTH)" \
|
|
113
|
+
-spacings "$::env(PDN_CORE_RING_VSPACING) $::env(PDN_CORE_RING_HSPACING)" \
|
|
114
|
+
-core_offset "$::env(PDN_CORE_RING_VOFFSET) $::env(PDN_CORE_RING_HOFFSET)"
|
|
115
115
|
} else {
|
|
116
|
-
throw APPLICATION "
|
|
116
|
+
throw APPLICATION "PDN_CORE_RING cannot be used when PDN_MULTILAYER is set to false."
|
|
117
117
|
# add_pdn_ring \
|
|
118
118
|
# -grid stdcell_grid \
|
|
119
|
-
# -layers "$::env(
|
|
120
|
-
# -widths "$::env(
|
|
121
|
-
# -spacings "$::env(
|
|
122
|
-
# -core_offset "$::env(
|
|
119
|
+
# -layers "$::env(PDN_VERTICAL_LAYER)" \
|
|
120
|
+
# -widths "$::env(PDN_CORE_RING_VWIDTH)" \
|
|
121
|
+
# -spacings "$::env(PDN_CORE_RING_VSPACING)" \
|
|
122
|
+
# -core_offset "$::env(PDN_CORE_RING_VOFFSET)"
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
|
|
@@ -128,8 +128,8 @@ define_pdn_grid \
|
|
|
128
128
|
-default \
|
|
129
129
|
-name macro \
|
|
130
130
|
-starts_with POWER \
|
|
131
|
-
-halo "$::env(
|
|
131
|
+
-halo "$::env(PDN_HORIZONTAL_HALO) $::env(PDN_VERTICAL_HALO)"
|
|
132
132
|
|
|
133
133
|
add_pdn_connect \
|
|
134
134
|
-grid macro \
|
|
135
|
-
-layers "$::env(
|
|
135
|
+
-layers "$::env(PDN_VERTICAL_LAYER) $::env(PDN_HORIZONTAL_LAYER)"
|
|
@@ -15,50 +15,51 @@ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl
|
|
|
15
15
|
read_current_odb
|
|
16
16
|
|
|
17
17
|
if { [info exists ::env(CONTEXTUAL_IO_FLAG)] } {
|
|
18
|
-
|
|
18
|
+
read_lef $::env(placement_tmpfiles)/top_level.lef
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
if { [info exists ::env(
|
|
22
|
-
|
|
21
|
+
if { [info exists ::env(IO_PIN_H_LENGTH)] } {
|
|
22
|
+
set_pin_length -hor_length $::env(IO_PIN_H_LENGTH)
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
if { [info exists ::env(
|
|
26
|
-
|
|
25
|
+
if { [info exists ::env(IO_PIN_V_LENGTH)] } {
|
|
26
|
+
set_pin_length -ver_length $::env(IO_PIN_V_LENGTH)
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
if { $::env(
|
|
30
|
-
|
|
29
|
+
if { $::env(IO_PIN_H_EXTENSION) != "0"} {
|
|
30
|
+
set_pin_length_extension -hor_extension $::env(IO_PIN_H_EXTENSION)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if { $::env(
|
|
34
|
-
|
|
33
|
+
if { $::env(IO_PIN_V_EXTENSION) != "0"} {
|
|
34
|
+
set_pin_length_extension -ver_extension $::env(IO_PIN_V_EXTENSION)
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
if {$::env(
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
if {$::env(IO_PIN_V_THICKNESS_MULT) != "" && $::env(IO_PIN_H_THICKNESS_MULT) != ""} {
|
|
38
|
+
set_pin_thick_multiplier\
|
|
39
|
+
-hor_multiplier $::env(IO_PIN_H_THICKNESS_MULT) \
|
|
40
|
+
-ver_multiplier $::env(IO_PIN_V_THICKNESS_MULT)
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
set arg_list [list]
|
|
43
|
-
if { $::env(
|
|
44
|
-
|
|
44
|
+
if { $::env(IO_PIN_PLACEMENT_MODE) == "random_equidistant" } {
|
|
45
|
+
lappend arg_list -random
|
|
45
46
|
}
|
|
46
47
|
|
|
47
|
-
if { [info exists ::env(
|
|
48
|
-
|
|
48
|
+
if { [info exists ::env(IO_PIN_MIN_DISTANCE)] } {
|
|
49
|
+
lappend arg_list -min_distance $::env(IO_PIN_MIN_DISTANCE)
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
if { $::env(
|
|
52
|
-
|
|
52
|
+
if { $::env(IO_PIN_PLACEMENT_MODE) == "annealing" } {
|
|
53
|
+
lappend arg_list -annealing
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
set HMETAL $::env(FP_IO_HLAYER)
|
|
56
57
|
set VMETAL $::env(FP_IO_VLAYER)
|
|
57
58
|
|
|
58
59
|
log_cmd place_pins {*}$arg_list \
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
-random_seed 42 \
|
|
61
|
+
-hor_layers $HMETAL \
|
|
62
|
+
-ver_layers $VMETAL
|
|
62
63
|
|
|
63
64
|
write_views
|
|
64
65
|
|
|
@@ -18,204 +18,253 @@ from ..config import Variable
|
|
|
18
18
|
|
|
19
19
|
io_layer_variables = [
|
|
20
20
|
Variable(
|
|
21
|
-
"
|
|
21
|
+
"IO_PIN_V_EXTENSION",
|
|
22
22
|
Decimal,
|
|
23
23
|
"Extends the vertical io pins outside of the die by the specified units.",
|
|
24
24
|
default=0,
|
|
25
25
|
units="µm",
|
|
26
|
+
deprecated_names=["FP_IO_VEXTEND"],
|
|
26
27
|
),
|
|
27
28
|
Variable(
|
|
28
|
-
"
|
|
29
|
+
"IO_PIN_H_EXTENSION",
|
|
29
30
|
Decimal,
|
|
30
31
|
"Extends the horizontal io pins outside of the die by the specified units.",
|
|
31
32
|
default=0,
|
|
32
33
|
units="µm",
|
|
34
|
+
deprecated_names=["FP_IO_HEXTEND"],
|
|
33
35
|
),
|
|
34
36
|
Variable(
|
|
35
|
-
"
|
|
37
|
+
"IO_PIN_V_THICKNESS_MULT",
|
|
36
38
|
Decimal,
|
|
37
39
|
"A multiplier for vertical pin thickness. Base thickness is the pins layer min width.",
|
|
38
40
|
default=2,
|
|
41
|
+
deprecated_names=["FP_IO_VTHICKNESS_MULT"],
|
|
39
42
|
),
|
|
40
43
|
Variable(
|
|
41
|
-
"
|
|
44
|
+
"IO_PIN_H_THICKNESS_MULT",
|
|
42
45
|
Decimal,
|
|
43
46
|
"A multiplier for horizontal pin thickness. Base thickness is the pins layer min width.",
|
|
44
47
|
default=2,
|
|
48
|
+
deprecated_names=["FP_IO_HTHICKNESS_MULT"],
|
|
49
|
+
),
|
|
50
|
+
Variable(
|
|
51
|
+
"IO_PIN_V_LENGTH",
|
|
52
|
+
Optional[Decimal],
|
|
53
|
+
"""
|
|
54
|
+
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:
|
|
55
|
+
* The pin width
|
|
56
|
+
* The minimum value satisfying the minimum area constraint given the pin width
|
|
57
|
+
""",
|
|
58
|
+
units="µm",
|
|
59
|
+
pdk=True,
|
|
60
|
+
deprecated_names=["FP_IO_VLENGTH"],
|
|
61
|
+
),
|
|
62
|
+
Variable(
|
|
63
|
+
"IO_PIN_H_LENGTH",
|
|
64
|
+
Optional[Decimal],
|
|
65
|
+
"""
|
|
66
|
+
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:
|
|
67
|
+
* The pin width
|
|
68
|
+
* The minimum value satisfying the minimum area constraint given the pin width
|
|
69
|
+
""",
|
|
70
|
+
units="µm",
|
|
71
|
+
pdk=True,
|
|
72
|
+
deprecated_names=["FP_IO_HLENGTH"],
|
|
45
73
|
),
|
|
46
74
|
]
|
|
47
75
|
|
|
48
76
|
pdn_variables = [
|
|
49
77
|
Variable(
|
|
50
|
-
"
|
|
78
|
+
"PDN_SKIPTRIM",
|
|
51
79
|
bool,
|
|
52
80
|
"Enables `-skip_trim` option during pdngen which skips the metal trim step, which attempts to remove metal stubs.",
|
|
53
81
|
default=False,
|
|
82
|
+
deprecated_names=["FP_PDN_SKIPTRIM"],
|
|
54
83
|
),
|
|
55
84
|
Variable(
|
|
56
|
-
"
|
|
85
|
+
"PDN_CORE_RING",
|
|
57
86
|
bool,
|
|
58
87
|
"Enables adding a core ring around the design. More details on the control variables in the PDK config documentation.",
|
|
59
88
|
default=False,
|
|
89
|
+
deprecated_names=["FP_PDN_CORE_RING"],
|
|
60
90
|
),
|
|
61
91
|
Variable(
|
|
62
|
-
"
|
|
92
|
+
"PDN_ENABLE_RAILS",
|
|
63
93
|
bool,
|
|
64
94
|
"Enables the creation of rails in the power grid.",
|
|
65
95
|
default=True,
|
|
96
|
+
deprecated_names=["FP_PDN_ENABLE_RAILS"],
|
|
66
97
|
),
|
|
67
98
|
Variable(
|
|
68
|
-
"
|
|
99
|
+
"PDN_HORIZONTAL_HALO",
|
|
69
100
|
Decimal,
|
|
70
101
|
"Sets the horizontal halo around the macros during power grid insertion.",
|
|
71
102
|
default=10,
|
|
72
103
|
units="µm",
|
|
104
|
+
deprecated_names=["FP_PDN_HORIZONTAL_HALO"],
|
|
73
105
|
),
|
|
74
106
|
Variable(
|
|
75
|
-
"
|
|
107
|
+
"PDN_VERTICAL_HALO",
|
|
76
108
|
Decimal,
|
|
77
109
|
"Sets the vertical halo around the macros during power grid insertion.",
|
|
78
110
|
default=10,
|
|
79
111
|
units="µm",
|
|
112
|
+
deprecated_names=["FP_PDN_VERTICAL_HALO"],
|
|
80
113
|
),
|
|
81
114
|
Variable(
|
|
82
|
-
"
|
|
115
|
+
"PDN_MULTILAYER",
|
|
83
116
|
bool,
|
|
84
117
|
"Controls the layers used in the power grid. If set to false, only the lower layer will be used, which is useful when hardening a macro for integrating into a larger top-level design.",
|
|
85
118
|
default=True,
|
|
86
|
-
deprecated_names=["DESIGN_IS_CORE"],
|
|
119
|
+
deprecated_names=["FP_PDN_MULTILAYER", "DESIGN_IS_CORE"],
|
|
87
120
|
),
|
|
88
121
|
Variable(
|
|
89
|
-
"
|
|
122
|
+
"PDN_RAIL_OFFSET",
|
|
90
123
|
Decimal,
|
|
91
124
|
"The offset for the power distribution network rails for first metal layer.",
|
|
92
125
|
units="µm",
|
|
93
126
|
pdk=True,
|
|
127
|
+
deprecated_names=["FP_PDN_RAIL_OFFSET"],
|
|
94
128
|
),
|
|
95
129
|
Variable(
|
|
96
|
-
"
|
|
130
|
+
"PDN_VWIDTH",
|
|
97
131
|
Decimal,
|
|
98
132
|
"The strap width for the vertical layer in generated power distribution networks.",
|
|
99
133
|
units="µm",
|
|
100
134
|
pdk=True,
|
|
135
|
+
deprecated_names=["FP_PDN_VWIDTH"],
|
|
101
136
|
),
|
|
102
137
|
Variable(
|
|
103
|
-
"
|
|
138
|
+
"PDN_HWIDTH",
|
|
104
139
|
Decimal,
|
|
105
140
|
"The strap width for the horizontal layer in generated power distribution networks.",
|
|
106
141
|
units="µm",
|
|
107
142
|
pdk=True,
|
|
143
|
+
deprecated_names=["FP_PDN_HWIDTH"],
|
|
108
144
|
),
|
|
109
145
|
Variable(
|
|
110
|
-
"
|
|
146
|
+
"PDN_VSPACING",
|
|
111
147
|
Decimal,
|
|
112
148
|
"Intra-spacing (within a set) of vertical straps in generated power distribution networks.",
|
|
113
149
|
units="µm",
|
|
114
150
|
pdk=True,
|
|
151
|
+
deprecated_names=["FP_PDN_VSPACING"],
|
|
115
152
|
),
|
|
116
153
|
Variable(
|
|
117
|
-
"
|
|
154
|
+
"PDN_HSPACING",
|
|
118
155
|
Decimal,
|
|
119
156
|
"Intra-spacing (within a set) of horizontal straps in generated power distribution networks.",
|
|
120
157
|
units="µm",
|
|
121
158
|
pdk=True,
|
|
159
|
+
deprecated_names=["FP_PDN_HSPACING"],
|
|
122
160
|
),
|
|
123
161
|
Variable(
|
|
124
|
-
"
|
|
162
|
+
"PDN_VPITCH",
|
|
125
163
|
Decimal,
|
|
126
164
|
"Inter-distance (between sets) of vertical power straps in generated power distribution networks.",
|
|
127
165
|
units="µm",
|
|
128
166
|
pdk=True,
|
|
167
|
+
deprecated_names=["FP_PDN_VPITCH"],
|
|
129
168
|
),
|
|
130
169
|
Variable(
|
|
131
|
-
"
|
|
170
|
+
"PDN_HPITCH",
|
|
132
171
|
Decimal,
|
|
133
172
|
"Inter-distance (between sets) of horizontal power straps in generated power distribution networks.",
|
|
134
173
|
units="µm",
|
|
135
174
|
pdk=True,
|
|
175
|
+
deprecated_names=["FP_PDN_HPITCH"],
|
|
136
176
|
),
|
|
137
177
|
Variable(
|
|
138
|
-
"
|
|
178
|
+
"PDN_VOFFSET",
|
|
139
179
|
Decimal,
|
|
140
180
|
"Initial offset for sets of vertical power straps.",
|
|
141
181
|
units="µm",
|
|
142
182
|
pdk=True,
|
|
183
|
+
deprecated_names=["FP_PDN_VOFFSET"],
|
|
143
184
|
),
|
|
144
185
|
Variable(
|
|
145
|
-
"
|
|
186
|
+
"PDN_HOFFSET",
|
|
146
187
|
Decimal,
|
|
147
188
|
"Initial offset for sets of horizontal power straps.",
|
|
148
189
|
units="µm",
|
|
149
190
|
pdk=True,
|
|
191
|
+
deprecated_names=["FP_PDN_HOFFSET"],
|
|
150
192
|
),
|
|
151
193
|
Variable(
|
|
152
|
-
"
|
|
194
|
+
"PDN_CORE_RING_VWIDTH",
|
|
153
195
|
Decimal,
|
|
154
196
|
"The width for the vertical layer in the core ring of generated power distribution networks.",
|
|
155
197
|
units="µm",
|
|
156
198
|
pdk=True,
|
|
199
|
+
deprecated_names=["FP_PDN_CORE_RING_VWIDTH"],
|
|
157
200
|
),
|
|
158
201
|
Variable(
|
|
159
|
-
"
|
|
202
|
+
"PDN_CORE_RING_HWIDTH",
|
|
160
203
|
Decimal,
|
|
161
204
|
"The width for the horizontal layer in the core ring of generated power distribution networks.",
|
|
162
205
|
units="µm",
|
|
163
206
|
pdk=True,
|
|
207
|
+
deprecated_names=["FP_PDN_CORE_RING_HWIDTH"],
|
|
164
208
|
),
|
|
165
209
|
Variable(
|
|
166
|
-
"
|
|
210
|
+
"PDN_CORE_RING_VSPACING",
|
|
167
211
|
Decimal,
|
|
168
212
|
"The spacing for the vertical layer in the core ring of generated power distribution networks.",
|
|
169
213
|
units="µm",
|
|
170
214
|
pdk=True,
|
|
215
|
+
deprecated_names=["FP_PDN_CORE_RING_VSPACING"],
|
|
171
216
|
),
|
|
172
217
|
Variable(
|
|
173
|
-
"
|
|
218
|
+
"PDN_CORE_RING_HSPACING",
|
|
174
219
|
Decimal,
|
|
175
220
|
"The spacing for the horizontal layer in the core ring of generated power distribution networks.",
|
|
176
221
|
units="µm",
|
|
177
222
|
pdk=True,
|
|
223
|
+
deprecated_names=["FP_PDN_CORE_RING_HSPACING"],
|
|
178
224
|
),
|
|
179
225
|
Variable(
|
|
180
|
-
"
|
|
226
|
+
"PDN_CORE_RING_VOFFSET",
|
|
181
227
|
Decimal,
|
|
182
228
|
"The offset for the vertical layer in the core ring of generated power distribution networks.",
|
|
183
229
|
units="µm",
|
|
184
230
|
pdk=True,
|
|
231
|
+
deprecated_names=["FP_PDN_CORE_RING_VOFFSET"],
|
|
185
232
|
),
|
|
186
233
|
Variable(
|
|
187
|
-
"
|
|
234
|
+
"PDN_CORE_RING_HOFFSET",
|
|
188
235
|
Decimal,
|
|
189
236
|
"The offset for the horizontal layer in the core ring of generated power distribution networks.",
|
|
190
237
|
units="µm",
|
|
191
238
|
pdk=True,
|
|
239
|
+
deprecated_names=["FP_PDN_CORE_RING_HOFFSET"],
|
|
192
240
|
),
|
|
193
241
|
Variable(
|
|
194
|
-
"
|
|
242
|
+
"PDN_RAIL_LAYER",
|
|
195
243
|
str,
|
|
196
244
|
"Defines the metal layer used for PDN rails.",
|
|
197
|
-
deprecated_names=["FP_PDN_RAILS_LAYER"],
|
|
245
|
+
deprecated_names=["FP_PDN_RAIL_LAYER", "FP_PDN_RAILS_LAYER"],
|
|
198
246
|
pdk=True,
|
|
199
247
|
),
|
|
200
248
|
Variable(
|
|
201
|
-
"
|
|
249
|
+
"PDN_RAIL_WIDTH",
|
|
202
250
|
Decimal,
|
|
203
251
|
"Defines the width of PDN rails on the `FP_PDN_RAILS_LAYER` layer.",
|
|
204
252
|
units="µm",
|
|
205
253
|
pdk=True,
|
|
254
|
+
deprecated_names=["FP_PDN_RAIL_WIDTH"],
|
|
206
255
|
),
|
|
207
256
|
Variable(
|
|
208
|
-
"
|
|
257
|
+
"PDN_HORIZONTAL_LAYER",
|
|
209
258
|
str,
|
|
210
259
|
"Defines the horizontal PDN layer.",
|
|
211
|
-
deprecated_names=["FP_PDN_UPPER_LAYER"],
|
|
260
|
+
deprecated_names=["FP_PDN_HORIZONTAL_LAYER", "FP_PDN_UPPER_LAYER"],
|
|
212
261
|
pdk=True,
|
|
213
262
|
),
|
|
214
263
|
Variable(
|
|
215
|
-
"
|
|
264
|
+
"PDN_VERTICAL_LAYER",
|
|
216
265
|
str,
|
|
217
266
|
"Defines the vertical PDN layer.",
|
|
218
|
-
deprecated_names=["FP_PDN_LOWER_LAYER"],
|
|
267
|
+
deprecated_names=["FP_PDN_VERTICAL_LAYER", "FP_PDN_LOWER_LAYER"],
|
|
219
268
|
pdk=True,
|
|
220
269
|
),
|
|
221
270
|
]
|
librelane/steps/odb.py
CHANGED
|
@@ -618,31 +618,10 @@ class CustomIOPlacement(OdbpyStep):
|
|
|
618
618
|
|
|
619
619
|
config_vars = io_layer_variables + [
|
|
620
620
|
Variable(
|
|
621
|
-
"
|
|
622
|
-
Optional[Decimal],
|
|
623
|
-
"""
|
|
624
|
-
The length of the pins with a north or south orientation. If unspecified by a PDK, the script will use whichever is higher of the following two values:
|
|
625
|
-
* The pin width
|
|
626
|
-
* The minimum value satisfying the minimum area constraint given the pin width
|
|
627
|
-
""",
|
|
628
|
-
units="µm",
|
|
629
|
-
pdk=True,
|
|
630
|
-
),
|
|
631
|
-
Variable(
|
|
632
|
-
"FP_IO_HLENGTH",
|
|
633
|
-
Optional[Decimal],
|
|
634
|
-
"""
|
|
635
|
-
The length of the pins with an east or west orientation. If unspecified by a PDK, the script will use whichever is higher of the following two values:
|
|
636
|
-
* The pin width
|
|
637
|
-
* The minimum value satisfying the minimum area constraint given the pin width
|
|
638
|
-
""",
|
|
639
|
-
units="µm",
|
|
640
|
-
pdk=True,
|
|
641
|
-
),
|
|
642
|
-
Variable(
|
|
643
|
-
"FP_PIN_ORDER_CFG",
|
|
621
|
+
"IO_PIN_ORDER_CFG",
|
|
644
622
|
Optional[Path],
|
|
645
|
-
"Path to
|
|
623
|
+
"Path to a custom pin configuration file.",
|
|
624
|
+
deprecated_names=["FP_PIN_ORDER_CFG"],
|
|
646
625
|
),
|
|
647
626
|
Variable(
|
|
648
627
|
"ERRORS_ON_UNMATCHED_IO",
|
|
@@ -660,28 +639,28 @@ class CustomIOPlacement(OdbpyStep):
|
|
|
660
639
|
|
|
661
640
|
def get_command(self) -> List[str]:
|
|
662
641
|
length_args = []
|
|
663
|
-
if self.config["
|
|
664
|
-
length_args += ["--ver-length", self.config["
|
|
665
|
-
if self.config["
|
|
666
|
-
length_args += ["--hor-length", self.config["
|
|
642
|
+
if self.config["IO_PIN_V_LENGTH"] is not None:
|
|
643
|
+
length_args += ["--ver-length", self.config["IO_PIN_V_LENGTH"]]
|
|
644
|
+
if self.config["IO_PIN_H_LENGTH"] is not None:
|
|
645
|
+
length_args += ["--hor-length", self.config["IO_PIN_H_LENGTH"]]
|
|
667
646
|
|
|
668
647
|
return (
|
|
669
648
|
super().get_command()
|
|
670
649
|
+ [
|
|
671
650
|
"--config",
|
|
672
|
-
self.config["
|
|
651
|
+
self.config["IO_PIN_ORDER_CFG"],
|
|
673
652
|
"--hor-layer",
|
|
674
653
|
self.config["FP_IO_HLAYER"],
|
|
675
654
|
"--ver-layer",
|
|
676
655
|
self.config["FP_IO_VLAYER"],
|
|
677
656
|
"--hor-width-mult",
|
|
678
|
-
str(self.config["
|
|
657
|
+
str(self.config["IO_PIN_V_THICKNESS_MULT"]),
|
|
679
658
|
"--ver-width-mult",
|
|
680
|
-
str(self.config["
|
|
659
|
+
str(self.config["IO_PIN_H_THICKNESS_MULT"]),
|
|
681
660
|
"--hor-extension",
|
|
682
|
-
str(self.config["
|
|
661
|
+
str(self.config["IO_PIN_H_EXTENSION"]),
|
|
683
662
|
"--ver-extension",
|
|
684
|
-
str(self.config["
|
|
663
|
+
str(self.config["IO_PIN_V_EXTENSION"]),
|
|
685
664
|
"--unmatched-error",
|
|
686
665
|
self.config["ERRORS_ON_UNMATCHED_IO"],
|
|
687
666
|
]
|
|
@@ -689,8 +668,8 @@ class CustomIOPlacement(OdbpyStep):
|
|
|
689
668
|
)
|
|
690
669
|
|
|
691
670
|
def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
|
|
692
|
-
if self.config["
|
|
693
|
-
info(f"No custom
|
|
671
|
+
if self.config["IO_PIN_ORDER_CFG"] is None:
|
|
672
|
+
info(f"No custom I/O placement file configured, skipping '{self.id}'…")
|
|
694
673
|
return {}, {}
|
|
695
674
|
return super().run(state_in, **kwargs)
|
|
696
675
|
|
librelane/steps/openroad.py
CHANGED
|
@@ -1177,8 +1177,8 @@ class IOPlacement(OpenROADStep):
|
|
|
1177
1177
|
"""
|
|
1178
1178
|
Places I/O pins on a floor-planned ODB file using OpenROAD's built-in placer.
|
|
1179
1179
|
|
|
1180
|
-
If ``
|
|
1181
|
-
compatibility with
|
|
1180
|
+
If ``IO_PIN_ORDER_CFG`` is not ``None``, this step is skipped (for
|
|
1181
|
+
compatibility with OpenLane.)
|
|
1182
1182
|
"""
|
|
1183
1183
|
|
|
1184
1184
|
id = "OpenROAD.IOPlacement"
|
|
@@ -1189,51 +1189,31 @@ class IOPlacement(OpenROADStep):
|
|
|
1189
1189
|
+ io_layer_variables
|
|
1190
1190
|
+ [
|
|
1191
1191
|
Variable(
|
|
1192
|
-
"
|
|
1192
|
+
"IO_PIN_PLACEMENT_MODE",
|
|
1193
1193
|
Literal["matching", "random_equidistant", "annealing"],
|
|
1194
1194
|
"Decides the mode of the random IO placement option.",
|
|
1195
1195
|
default="matching",
|
|
1196
|
-
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode)],
|
|
1196
|
+
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode), "FP_PPL_MODE"],
|
|
1197
1197
|
),
|
|
1198
1198
|
Variable(
|
|
1199
|
-
"
|
|
1199
|
+
"IO_PIN_MIN_DISTANCE",
|
|
1200
1200
|
Optional[Decimal],
|
|
1201
1201
|
"The minimum distance between two pins. If unspecified by a PDK, OpenROAD will use the length of two routing tracks.",
|
|
1202
1202
|
units="µm",
|
|
1203
1203
|
pdk=True,
|
|
1204
|
+
deprecated_names=["FP_IO_MIN_DISTANCE"],
|
|
1204
1205
|
),
|
|
1205
1206
|
Variable(
|
|
1206
|
-
"
|
|
1207
|
+
"IO_PIN_ORDER_CFG",
|
|
1207
1208
|
Optional[Path],
|
|
1208
1209
|
"Path to a custom pin configuration file.",
|
|
1210
|
+
deprecated_names=["FP_PIN_ORDER_CFG"],
|
|
1209
1211
|
),
|
|
1210
1212
|
Variable(
|
|
1211
1213
|
"FP_DEF_TEMPLATE",
|
|
1212
1214
|
Optional[Path],
|
|
1213
1215
|
"Points to the DEF file to be used as a template.",
|
|
1214
1216
|
),
|
|
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
1217
|
]
|
|
1238
1218
|
)
|
|
1239
1219
|
|
|
@@ -1241,8 +1221,8 @@ class IOPlacement(OpenROADStep):
|
|
|
1241
1221
|
return os.path.join(get_script_dir(), "openroad", "ioplacer.tcl")
|
|
1242
1222
|
|
|
1243
1223
|
def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
|
|
1244
|
-
if self.config["
|
|
1245
|
-
info(f"
|
|
1224
|
+
if self.config["IO_PIN_ORDER_CFG"] is not None:
|
|
1225
|
+
info(f"IO_PIN_ORDER_CFG is set. Skipping '{self.id}'…")
|
|
1246
1226
|
return {}, {}
|
|
1247
1227
|
if self.config["FP_DEF_TEMPLATE"] is not None:
|
|
1248
1228
|
info(
|
|
@@ -1353,10 +1333,10 @@ class GeneratePDN(OpenROADStep):
|
|
|
1353
1333
|
+ pdn_variables
|
|
1354
1334
|
+ [
|
|
1355
1335
|
Variable(
|
|
1356
|
-
"
|
|
1336
|
+
"PDN_CFG",
|
|
1357
1337
|
Optional[Path],
|
|
1358
1338
|
"A custom PDN configuration file. If not provided, the default PDN config will be used.",
|
|
1359
|
-
deprecated_names=["
|
|
1339
|
+
deprecated_names=["FP_PDN_CFG"],
|
|
1360
1340
|
)
|
|
1361
1341
|
]
|
|
1362
1342
|
)
|
|
@@ -1366,11 +1346,11 @@ class GeneratePDN(OpenROADStep):
|
|
|
1366
1346
|
|
|
1367
1347
|
def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
|
|
1368
1348
|
kwargs, env = self.extract_env(kwargs)
|
|
1369
|
-
if self.config["
|
|
1370
|
-
env["
|
|
1349
|
+
if self.config["PDN_CFG"] is None:
|
|
1350
|
+
env["PDN_CFG"] = os.path.join(
|
|
1371
1351
|
get_script_dir(), "openroad", "common", "pdn_cfg.tcl"
|
|
1372
1352
|
)
|
|
1373
|
-
info(f"'
|
|
1353
|
+
info(f"'PDN_CFG' not explicitly set, setting it to {env['PDN_CFG']}…")
|
|
1374
1354
|
views_updates, metrics_updates = super().run(state_in, env=env, **kwargs)
|
|
1375
1355
|
|
|
1376
1356
|
alerts = self.alerts or []
|
|
@@ -1523,16 +1503,17 @@ class GlobalPlacementSkipIO(_GlobalPlacement):
|
|
|
1523
1503
|
|
|
1524
1504
|
config_vars = _GlobalPlacement.config_vars + [
|
|
1525
1505
|
Variable(
|
|
1526
|
-
"
|
|
1506
|
+
"IO_PIN_PLACEMENT_MODE",
|
|
1527
1507
|
Literal["matching", "random_equidistant", "annealing"],
|
|
1528
1508
|
"Decides the mode of the random IO placement option.",
|
|
1529
1509
|
default="matching",
|
|
1530
|
-
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode)],
|
|
1510
|
+
deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode), "FP_PPL_MODE"],
|
|
1531
1511
|
),
|
|
1532
1512
|
Variable(
|
|
1533
|
-
"
|
|
1513
|
+
"IO_PIN_ORDER_CFG",
|
|
1534
1514
|
Optional[Path],
|
|
1535
1515
|
"Path to a custom pin configuration file.",
|
|
1516
|
+
deprecated_names=["FP_PIN_ORDER_CFG"],
|
|
1536
1517
|
),
|
|
1537
1518
|
Variable(
|
|
1538
1519
|
"FP_DEF_TEMPLATE",
|
|
@@ -1548,9 +1529,9 @@ class GlobalPlacementSkipIO(_GlobalPlacement):
|
|
|
1548
1529
|
f"I/O pins were loaded from {self.config['FP_DEF_TEMPLATE']}. Returning state unaltered…"
|
|
1549
1530
|
)
|
|
1550
1531
|
return {}, {}
|
|
1551
|
-
if self.config["
|
|
1532
|
+
if self.config["IO_PIN_ORDER_CFG"] is not None:
|
|
1552
1533
|
info(
|
|
1553
|
-
f"I/O pins to be placed from {self.config['
|
|
1534
|
+
f"I/O pins to be placed from {self.config['IO_PIN_ORDER_CFG']}. Returning state unaltered…"
|
|
1554
1535
|
)
|
|
1555
1536
|
return {}, {}
|
|
1556
1537
|
env["__PL_SKIP_IO"] = "1"
|
|
@@ -26,7 +26,7 @@ librelane/config/removals.py,sha256=vxqTuRTJ0jt2TX4KmFZCZPTwghDFkCVjIhF2iReHwJA,
|
|
|
26
26
|
librelane/config/variable.py,sha256=v92bVwy11LgS53gYhU9DBwOUABc2XMGqEglqTORpPfc,26269
|
|
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
|
|
@@ -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
|
|
@@ -151,21 +151,21 @@ librelane/state/state.py,sha256=3CdihPR6lryQMt8ihSef0O2F8-qaqy1w7V0wiwie3nk,1171
|
|
|
151
151
|
librelane/steps/__init__.py,sha256=j3JYrdnWM74dYuEvE931oSrQI7FUz-hKWr8Mts8C0wg,1668
|
|
152
152
|
librelane/steps/__main__.py,sha256=GviXtDLISKJCufKxK3oFPOSMF1GyShZbG5RXpVCYFkk,13376
|
|
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
157
|
librelane/steps/magic.py,sha256=Xtsy1KWu8dcNq3pRlqM9WRRxtwbCQJq24IyxC0W8D2o,20254
|
|
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=SD5m1ulI2f1LB0_0oKanY9Yql9YpKGolMqtfXun2xTY,38498
|
|
161
|
+
librelane/steps/openroad.py,sha256=quPV082y__la4YgRKfB4wFslcn9E9nEDUSgSIlE3yRo,99340
|
|
162
162
|
librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
|
|
163
163
|
librelane/steps/pyosys.py,sha256=LY7qqxkhjfoyBBR7vdkm7ylabbxMJDwIoYm7mAUbLVY,23348
|
|
164
164
|
librelane/steps/step.py,sha256=T5z0Nm5z-fq_qj3BIwchnfUobmxX67cEmZ-5dUYT76s,55163
|
|
165
165
|
librelane/steps/tclstep.py,sha256=YwyiSXAjRIflH2vzYvTzYfN4FyAI8Td9B_CKLkBj08o,10084
|
|
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.dev25.dist-info/METADATA,sha256=jBuGDi3vE2DO6eXdV0UE5_PDXxN5SErWVZePiZEfmmA,6561
|
|
169
|
+
librelane-3.0.0.dev25.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
170
|
+
librelane-3.0.0.dev25.dist-info/entry_points.txt,sha256=GTBvXykNMMFsNKiJFgtEw7P1wb_VZIqVM35EFSpyZQE,263
|
|
171
|
+
librelane-3.0.0.dev25.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|