librelane 3.0.0.dev23__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.

@@ -14,7 +14,6 @@
14
14
  import os
15
15
  import sys
16
16
  import json
17
- import functools
18
17
  from decimal import Decimal
19
18
 
20
19
  import click
@@ -111,9 +110,7 @@ def create_config(
111
110
  print("At least one source RTL file is required.", file=sys.stderr)
112
111
  exit(1)
113
112
  source_rtl_key = "VERILOG_FILES"
114
- if not functools.reduce(
115
- lambda acc, x: acc and (x.endswith(".sv") or x.endswith(".v")), source_rtl, True
116
- ):
113
+ if not all((file.endswith(".sv") or file.endswith(".v")) for file in source_rtl):
117
114
  print(
118
115
  "Only Verilog/SystemVerilog files are supported by create-config.",
119
116
  file=sys.stderr,
@@ -42,4 +42,5 @@ removed_variables: Dict[str, str] = {
42
42
  "FP_PADFRAME_CFG": "To be implemented.",
43
43
  "FP_CONTEXT_DEF": "To be implemented.",
44
44
  "FP_CONTEXT_LEF": "To be implemented.",
45
+ "SYNLIG_DEFER": "Synlig replaced with Slang.",
45
46
  }
@@ -575,7 +575,7 @@ class Variable:
575
575
  kwargs_dict = {}
576
576
  for current_field in fields(validating_type):
577
577
  key = current_field.name
578
- subtype = current_field.type
578
+ subtype: Type[Any] = current_field.type # type: ignore
579
579
  explicitly_specified = False
580
580
  if key in raw:
581
581
  explicitly_specified = True
@@ -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
- FP_PDN_VOFFSET: 5
11
- FP_PDN_HOFFSET: 5
12
- FP_PDN_VWIDTH: 2
13
- FP_PDN_HWIDTH: 2
14
- FP_PDN_VPITCH: 30
15
- FP_PDN_HPITCH: 30
16
- FP_PDN_SKIPTRIM: true
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
- FP_PIN_ORDER_CFG: dir::pin_order.cfg
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": ["dir::./defines.v", "dir::./SPM_example.v"],
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": ["vccd1"],
10
- "GND_NETS": ["vssd1"],
11
- "FP_PDN_MULTILAYER": false,
12
- "DIE_AREA": [0, 0, 600, 600]
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
  }
@@ -166,7 +166,7 @@ class OdbReader(object):
166
166
  grt.setMinLayerForClock(min_clk_idx)
167
167
  grt.setMaxLayerForClock(max_clk_idx)
168
168
  grt.setMacroExtension(self.config["GRT_MACRO_EXTENSION"])
169
- grt.setOverflowIterations(self.config["GRT_OVERFLOW_ITERS"])
169
+ grt.setCongestionIterations(self.config["GRT_OVERFLOW_ITERS"])
170
170
  grt.setAllowCongestion(self.config["GRT_ALLOW_CONGESTION"])
171
171
  grt.setVerbose(True)
172
172
  grt.initFastRoute(min_layer_idx, max_layer_idx)
@@ -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 ::env(DESIGN_IS_CORE) $::env(FP_PDN_MULTILAYER)
103
- set ::env(FP_PDN_ENABLE_MACROS_GRID) $::env(PDN_CONNECT_MACROS_TO_GRID)
104
- set ::env(FP_PDN_RAILS_LAYER) $::env(FP_PDN_RAIL_LAYER)
105
- set ::env(FP_PDN_UPPER_LAYER) $::env(FP_PDN_HORIZONTAL_LAYER)
106
- set ::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_VERTICAL_LAYER)
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(FP_PDN_CFG)} errmsg]} {
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
- unset ::env(DESIGN_IS_CORE)
115
- unset ::env(FP_PDN_ENABLE_MACROS_GRID)
116
- unset ::env(FP_PDN_RAILS_LAYER)
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
 
@@ -174,9 +186,9 @@ proc read_timing_info {args} {
174
186
  foreach nl $::env(_CURRENT_CORNER_NETLISTS) {
175
187
  puts "Reading macro netlist at '$nl'…"
176
188
  if { [catch {read_verilog $nl} err] } {
177
- puts "Error while reading macro netlist '$nl':"
178
- puts $err
179
- puts "Make sure that this a gate-level netlist and not an RTL file."
189
+ puts stderr "Error while reading macro netlist '$nl':"
190
+ puts stderr $err
191
+ puts stderr "Make sure that this a gate-level netlist and not an RTL file."
180
192
  exit 1
181
193
  }
182
194
  }
@@ -185,9 +197,9 @@ proc read_timing_info {args} {
185
197
  if { [string_in_file $verilog_file $blackbox_wildcard] } {
186
198
  puts "Found '$blackbox_wildcard' in '$verilog_file', skipping…"
187
199
  } elseif { [catch {puts "Reading Verilog model at '$verilog_file'…"; read_verilog $verilog_file} err] } {
188
- puts "Error while reading $verilog_file:"
189
- puts $err
190
- puts "Make sure that this a gate-level netlist and not an RTL file, otherwise, you can add the following comment '$blackbox_wildcard' in the file to skip it and blackbox the modules inside if needed."
200
+ puts stderr "Error while reading $verilog_file:"
201
+ puts stderr $err
202
+ puts stderr "Make sure that this a gate-level netlist and not an RTL file, otherwise, you can add the following comment '$blackbox_wildcard' in the file to skip it and blackbox the modules inside if needed."
191
203
  exit 1
192
204
  }
193
205
  }
@@ -411,6 +423,13 @@ proc write_views {args} {
411
423
  write_verilog $::env(SAVE_NL)
412
424
  }
413
425
 
426
+ if { [info exists ::env(SAVE_LOGICAL_NL)] } {
427
+ puts "Writing logic-only netlist to '$::env(SAVE_LOGICAL_NL)'…"
428
+ write_verilog\
429
+ -remove_cells "[get_physical_cells]"\
430
+ $::env(SAVE_LOGICAL_NL)
431
+ }
432
+
414
433
  if { [info exists ::env(SAVE_PNL)] } {
415
434
  puts "Writing powered netlist to '$::env(SAVE_PNL)'…"
416
435
  write_verilog -include_pwr_gnd $::env(SAVE_PNL)
@@ -575,7 +594,8 @@ proc get_layers {args} {
575
594
  flags {-constrained}
576
595
 
577
596
  if { ![info exists keys(-types)] } {
578
- puts "\[ERROR\] Invalid usage of get_layers: -types is required."
597
+ puts stderr "\[ERROR\] Invalid usage of get_layers: -types is required."
598
+ return -code error
579
599
  }
580
600
 
581
601
  set layers [$::tech getLayers]
@@ -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(FP_PDN_MULTILAYER) == 1 } {
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(FP_PDN_VERTICAL_LAYER) $::env(FP_PDN_HORIZONTAL_LAYER)"
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(FP_PDN_VERTICAL_LAYER) \
56
- -width $::env(FP_PDN_VWIDTH) \
57
- -pitch $::env(FP_PDN_VPITCH) \
58
- -offset $::env(FP_PDN_VOFFSET) \
59
- -spacing $::env(FP_PDN_VSPACING) \
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(FP_PDN_HORIZONTAL_LAYER) \
65
- -width $::env(FP_PDN_HWIDTH) \
66
- -pitch $::env(FP_PDN_HPITCH) \
67
- -offset $::env(FP_PDN_HOFFSET) \
68
- -spacing $::env(FP_PDN_HSPACING) \
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(FP_PDN_VERTICAL_LAYER) $::env(FP_PDN_HORIZONTAL_LAYER)"
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(FP_PDN_VERTICAL_LAYER)
79
+ -pins $::env(PDN_VERTICAL_LAYER)
80
80
 
81
81
  add_pdn_stripe \
82
82
  -grid stdcell_grid \
83
- -layer $::env(FP_PDN_VERTICAL_LAYER) \
84
- -width $::env(FP_PDN_VWIDTH) \
85
- -pitch $::env(FP_PDN_VPITCH) \
86
- -offset $::env(FP_PDN_VOFFSET) \
87
- -spacing $::env(FP_PDN_VSPACING) \
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(FP_PDN_ENABLE_RAILS) == 1 } {
92
+ if { $::env(PDN_ENABLE_RAILS) == 1 } {
93
93
  add_pdn_stripe \
94
94
  -grid stdcell_grid \
95
- -layer $::env(FP_PDN_RAIL_LAYER) \
96
- -width $::env(FP_PDN_RAIL_WIDTH) \
97
- -followpins \
98
- -starts_with POWER
95
+ -layer $::env(PDN_RAIL_LAYER) \
96
+ -width $::env(PDN_RAIL_WIDTH) \
97
+ -followpins
99
98
 
100
99
  add_pdn_connect \
101
100
  -grid stdcell_grid \
102
- -layers "$::env(FP_PDN_RAIL_LAYER) $::env(FP_PDN_VERTICAL_LAYER)"
101
+ -layers "$::env(PDN_RAIL_LAYER) $::env(PDN_VERTICAL_LAYER)"
103
102
  }
104
103
 
105
104
 
106
105
  # Adds the core ring if enabled.
107
- if { $::env(FP_PDN_CORE_RING) == 1 } {
108
- if { $::env(FP_PDN_MULTILAYER) == 1 } {
106
+ if { $::env(PDN_CORE_RING) == 1 } {
107
+ if { $::env(PDN_MULTILAYER) == 1 } {
109
108
  add_pdn_ring \
109
+ -allow_out_of_die \
110
110
  -grid stdcell_grid \
111
- -layers "$::env(FP_PDN_VERTICAL_LAYER) $::env(FP_PDN_HORIZONTAL_LAYER)" \
112
- -widths "$::env(FP_PDN_CORE_RING_VWIDTH) $::env(FP_PDN_CORE_RING_HWIDTH)" \
113
- -spacings "$::env(FP_PDN_CORE_RING_VSPACING) $::env(FP_PDN_CORE_RING_HSPACING)" \
114
- -core_offset "$::env(FP_PDN_CORE_RING_VOFFSET) $::env(FP_PDN_CORE_RING_HOFFSET)"
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 "FP_PDN_CORE_RING cannot be used when FP_PDN_MULTILAYER is set to false."
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(FP_PDN_VERTICAL_LAYER)" \
120
- # -widths "$::env(FP_PDN_CORE_RING_VWIDTH)" \
121
- # -spacings "$::env(FP_PDN_CORE_RING_VSPACING)" \
122
- # -core_offset "$::env(FP_PDN_CORE_RING_VOFFSET)"
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(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)"
131
+ -halo "$::env(PDN_HORIZONTAL_HALO) $::env(PDN_VERTICAL_HALO)"
132
132
 
133
133
  add_pdn_connect \
134
134
  -grid macro \
135
- -layers "$::env(FP_PDN_VERTICAL_LAYER) $::env(FP_PDN_HORIZONTAL_LAYER)"
135
+ -layers "$::env(PDN_VERTICAL_LAYER) $::env(PDN_HORIZONTAL_LAYER)"
@@ -56,7 +56,7 @@ proc set_global_connections {} {
56
56
  }
57
57
  }
58
58
  if { $matched != 1 } {
59
- puts "\[ERROR\] No match found for regular expression '$instance_name' defined in PDN_MACRO_CONNECTIONS."
59
+ puts stderr "\[ERROR\] No match found for regular expression '$instance_name' defined in PDN_MACRO_CONNECTIONS."
60
60
  exit_unless_gui 1
61
61
  }
62
62
 
@@ -17,8 +17,8 @@ proc drt_run {i args} {
17
17
  set output_drc "-output_drc $::env(STEP_DIR)/$directory/$::env(DESIGN_NAME).drc"
18
18
  log_cmd detailed_route {*}$args {*}$output_drc
19
19
  if { $::env(DRT_SAVE_SNAPSHOTS) } {
20
- foreach snapshot [glob -nocomplain drt_iter*.odb] {
21
- file rename -force $snapshot $directory/[file tail $snapshot]
20
+ foreach snapshot [glob -nocomplain $::env(STEP_DIR)/drt_iter*.odb] {
21
+ file rename -force $snapshot $::env(STEP_DIR)/$directory/[file tail $snapshot]
22
22
  }
23
23
  }
24
24
  foreach drc_file [glob -nocomplain $::env(STEP_DIR)/$directory/*.drc] {
@@ -41,13 +41,11 @@ set max_layer $::env(RT_MAX_LAYER)
41
41
  if { [info exists ::env(DRT_MAX_LAYER)] } {
42
42
  set max_layer $::env(DRT_MAX_LAYER)
43
43
  }
44
- if { $::env(DRT_SAVE_SNAPSHOTS) } {
45
- set_debug_level DRT snapshot 1
46
- }
47
44
  set drc_report_iter_step_arg ""
48
45
  if { $::env(DRT_SAVE_SNAPSHOTS) } {
49
46
  set_debug_level DRT snapshot 1
50
47
  set drc_report_iter_step_arg "-drc_report_iter_step 1"
48
+ detailed_route_debug -snapshot_dir "$::env(STEP_DIR)/$directory"
51
49
  }
52
50
  if { [info exists ::env(DRT_SAVE_DRC_REPORT_ITERS)] } {
53
51
  set drc_report_iter_step_arg "-drc_report_iter_step $::env(DRT_SAVE_DRC_REPORT_ITERS)"
@@ -33,10 +33,18 @@ puts "Using site height: $::default_site_height and site width: $::default_site_
33
33
 
34
34
  unset_propagated_clock [all_clocks]
35
35
 
36
- set bottom_margin [expr $::default_site_height * $::env(BOTTOM_MARGIN_MULT)]
37
- set top_margin [expr $::default_site_height * $::env(TOP_MARGIN_MULT)]
38
- set left_margin [expr $::default_site_width * $::env(LEFT_MARGIN_MULT)]
39
- set right_margin [expr $::default_site_width * $::env(RIGHT_MARGIN_MULT)]
36
+ proc set_margin {var site_dimension mult} {
37
+ set value [expr $site_dimension * $mult]
38
+ if { $value < 0 } {
39
+ puts stderr "\[ERROR IFP-0013\] Negative values not allowed for margins."
40
+ exit_unless_gui 1
41
+ }
42
+ uplevel 1 set "$var $value"
43
+ }
44
+ set_margin bottom_margin $::default_site_height $::env(BOTTOM_MARGIN_MULT)
45
+ set_margin top_margin $::default_site_height $::env(TOP_MARGIN_MULT)
46
+ set_margin left_margin $::default_site_width $::env(LEFT_MARGIN_MULT)
47
+ set_margin right_margin $::default_site_width $::env(RIGHT_MARGIN_MULT)
40
48
 
41
49
  set arg_list [list]
42
50
 
@@ -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
- read_lef $::env(placement_tmpfiles)/top_level.lef
18
+ read_lef $::env(placement_tmpfiles)/top_level.lef
19
19
  }
20
20
 
21
- if { [info exists ::env(FP_IO_HLENGTH)] } {
22
- set_pin_length -hor_length $::env(FP_IO_HLENGTH)
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(FP_IO_VLENGTH)] } {
26
- set_pin_length -ver_length $::env(FP_IO_VLENGTH)
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(FP_IO_HEXTEND) != "0"} {
30
- set_pin_length_extension -hor_extension $::env(FP_IO_HEXTEND)
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(FP_IO_VEXTEND) != "0"} {
34
- set_pin_length_extension -ver_extension $::env(FP_IO_VEXTEND)
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(FP_IO_VTHICKNESS_MULT) != "" && $::env(FP_IO_HTHICKNESS_MULT) != ""} {
38
- set_pin_thick_multiplier -hor_multiplier $::env(FP_IO_HTHICKNESS_MULT) \
39
- -ver_multiplier $::env(FP_IO_VTHICKNESS_MULT)
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(FP_PPL_MODE) == "random_equidistant" } {
44
- lappend arg_list -random
44
+ if { $::env(IO_PIN_PLACEMENT_MODE) == "random_equidistant" } {
45
+ lappend arg_list -random
45
46
  }
46
47
 
47
- if { [info exists ::env(FP_IO_MIN_DISTANCE)] } {
48
- lappend arg_list -min_distance $::env(FP_IO_MIN_DISTANCE)
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(FP_PPL_MODE) == "annealing" } {
52
- lappend arg_list -annealing
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
- -random_seed 42 \
60
- -hor_layers $HMETAL \
61
- -ver_layers $VMETAL
60
+ -random_seed 42 \
61
+ -hor_layers $HMETAL \
62
+ -ver_layers $VMETAL
62
63
 
63
64
  write_views
64
65
 
@@ -21,7 +21,7 @@ source $::env(SCRIPTS_DIR)/openroad/common/set_power_nets.tcl
21
21
  read_pdn_cfg
22
22
 
23
23
  set arg_list [list]
24
- if { $::env(FP_PDN_SKIPTRIM) } {
24
+ if { $::env(PDN_SKIPTRIM) } {
25
25
  lappend arg_list -skip_trim
26
26
  }
27
27
  # run PDNGEN
@@ -30,10 +30,10 @@ foreach {instance_name macro_name} $::env(_check_macro_instances) {
30
30
  set instances [get_cells -hierarchical $instance_name]
31
31
  set instance_count [llength $instances]
32
32
  if { $instance_count < 1 } {
33
- puts "\[ERROR\] No macro instance $instance_name found."
33
+ puts stderr "\[ERROR\] No macro instance $instance_name found."
34
34
  incr error_count
35
35
  } elseif { $instance_count > 1 } {
36
- puts "\[ERROR\] Macro instance name $instance_name matches multiple cells."
36
+ puts stderr "\[ERROR\] Macro instance name $instance_name matches multiple cells."
37
37
  incr error_count
38
38
  } else {
39
39
  # The next line doesn't actually matter because this is Tcl but I'd feel
@@ -42,7 +42,7 @@ foreach {instance_name macro_name} $::env(_check_macro_instances) {
42
42
 
43
43
  set master_name [get_property $instance ref_name]
44
44
  if { $master_name != $macro_name } {
45
- puts "\[ERROR\] Instance $instance_name is configured as an instance of macro $macro_name, but is an instance of $master_name."
45
+ puts stderr "\[ERROR\] Instance $instance_name is configured as an instance of macro $macro_name, but is an instance of $master_name."
46
46
  incr error_count
47
47
  }
48
48
  }
@@ -54,7 +54,7 @@ puts "\n========================================================================
54
54
  puts "report_checks -path_delay min (Hold)"
55
55
  puts "============================================================================"
56
56
  puts "======================= [$corner name] Corner ===================================\n"
57
- report_checks -sort_by_slack -path_delay min -fields {slew cap input nets fanout} -format full_clock_expanded -group_count 1000 -corner [$corner name]
57
+ report_checks -sort_by_slack -path_delay min -fields {slew cap input net fanout} -format full_clock_expanded -group_path_count 1000 -corner [$corner name]
58
58
  puts ""
59
59
  puts "%OL_END_REPORT"
60
60
 
@@ -64,7 +64,7 @@ puts "\n========================================================================
64
64
  puts "report_checks -path_delay max (Setup)"
65
65
  puts "============================================================================"
66
66
  puts "======================= [$corner name] Corner ===================================\n"
67
- report_checks -sort_by_slack -path_delay max -fields {slew cap input nets fanout} -format full_clock_expanded -group_count 1000 -corner [$corner name]
67
+ report_checks -sort_by_slack -path_delay max -fields {slew cap input net fanout} -format full_clock_expanded -group_path_count 1000 -corner [$corner name]
68
68
  puts ""
69
69
  puts "%OL_END_REPORT"
70
70
 
@@ -74,7 +74,7 @@ puts "\n========================================================================
74
74
  puts "report_checks -unconstrained"
75
75
  puts "==========================================================================="
76
76
  puts "======================= [$corner name] Corner ===================================\n"
77
- report_checks -unconstrained -fields {slew cap input nets fanout} -format full_clock_expanded -corner [$corner name]
77
+ report_checks -unconstrained -fields {slew cap input net fanout} -format full_clock_expanded -corner [$corner name]
78
78
  puts ""
79
79
 
80
80
 
@@ -82,7 +82,7 @@ puts "\n========================================================================
82
82
  puts "report_checks --slack_max -0.01"
83
83
  puts "============================================================================"
84
84
  puts "======================= [$corner name] Corner ===================================\n"
85
- report_checks -slack_max -0.01 -fields {slew cap input nets fanout} -format full_clock_expanded -corner [$corner name]
85
+ report_checks -slack_max -0.01 -fields {slew cap input net fanout} -format full_clock_expanded -corner [$corner name]
86
86
  puts ""
87
87
 
88
88
  puts "\n==========================================================================="
@@ -260,7 +260,7 @@ if { [info exists ::env(STA_MAX_VIOLATOR_COUNT)] } {
260
260
  set max_violator_count $::env(STA_MAX_VIOLATOR_COUNT)
261
261
  }
262
262
 
263
- set hold_violating_paths [find_timing_paths -unique_paths_to_endpoint -path_delay min -sort_by_slack -group_count $max_violator_count -slack_max 0]
263
+ set hold_violating_paths [find_timing_paths -unique_paths_to_endpoint -path_delay min -sort_by_slack -group_path_count $max_violator_count -slack_max 0]
264
264
  foreach path $hold_violating_paths {
265
265
  set start_pin [get_property $path startpoint]
266
266
  set end_pin [get_property $path endpoint]
@@ -279,7 +279,7 @@ foreach path $hold_violating_paths {
279
279
  }
280
280
 
281
281
  set worst_r2r_hold_slack 1e30
282
- set hold_paths [find_timing_paths -unique_paths_to_endpoint -path_delay min -sort_by_slack -group_count $max_violator_count -slack_max $worst_r2r_hold_slack]
282
+ set hold_paths [find_timing_paths -unique_paths_to_endpoint -path_delay min -sort_by_slack -group_path_count $max_violator_count -slack_max $worst_r2r_hold_slack]
283
283
  foreach path $hold_paths {
284
284
  set start_pin [get_property $path startpoint]
285
285
  set end_pin [get_property $path endpoint]
@@ -295,7 +295,7 @@ foreach path $hold_paths {
295
295
  }
296
296
  }
297
297
 
298
- set setup_violating_paths [find_timing_paths -unique_paths_to_endpoint -path_delay max -sort_by_slack -group_count $max_violator_count -slack_max 0]
298
+ set setup_violating_paths [find_timing_paths -unique_paths_to_endpoint -path_delay max -sort_by_slack -group_path_count $max_violator_count -slack_max 0]
299
299
  foreach path $setup_violating_paths {
300
300
  set start_pin [get_property $path startpoint]
301
301
  set end_pin [get_property $path endpoint]
@@ -314,7 +314,7 @@ foreach path $setup_violating_paths {
314
314
  }
315
315
 
316
316
  set worst_r2r_setup_slack 1e30
317
- set setup_paths [find_timing_paths -unique_paths_to_endpoint -path_delay max -sort_by_slack -group_count $max_violator_count -slack_max $worst_r2r_setup_slack]
317
+ set setup_paths [find_timing_paths -unique_paths_to_endpoint -path_delay max -sort_by_slack -group_path_count $max_violator_count -slack_max $worst_r2r_setup_slack]
318
318
  foreach path $setup_paths {
319
319
  set start_pin [get_property $path startpoint]
320
320
  set end_pin [get_property $path endpoint]
@@ -62,8 +62,7 @@ def json_header(
62
62
  synth_parameters=config["SYNTH_PARAMETERS"] or [],
63
63
  includes=includes,
64
64
  defines=defines,
65
- use_synlig=config["USE_SYNLIG"],
66
- synlig_defer=config["SYNLIG_DEFER"],
65
+ use_slang=config["USE_SLANG"],
67
66
  )
68
67
  d.run_pass(
69
68
  "hierarchy",
@@ -262,8 +262,7 @@ def synthesize(
262
262
  synth_parameters=[],
263
263
  includes=includes,
264
264
  defines=defines,
265
- use_synlig=False,
266
- synlig_defer=False,
265
+ use_slang=False,
267
266
  )
268
267
  elif verilog_files := config.get("VERILOG_FILES"):
269
268
  d.read_verilog_files(
@@ -272,8 +271,7 @@ def synthesize(
272
271
  synth_parameters=config["SYNTH_PARAMETERS"] or [],
273
272
  includes=includes,
274
273
  defines=defines,
275
- use_synlig=config["USE_SYNLIG"],
276
- synlig_defer=config["SYNLIG_DEFER"],
274
+ use_slang=config["USE_SLANG"],
277
275
  )
278
276
  elif vhdl_files := config.get("VHDL_FILES"):
279
277
  d.run_pass("plugin", "-i", "ghdl")
@@ -300,6 +298,8 @@ def synthesize(
300
298
  )
301
299
  except Exception:
302
300
  pass
301
+ if config["SYNTH_NORMALIZE_SINGLE_BIT_VECTORS"]:
302
+ d.run_pass("attrmap", "-remove", "single_bit_vector")
303
303
  d.run_pass("select", "-clear")
304
304
 
305
305
  lib_arguments = []