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.

Files changed (170) hide show
  1. librelane/__init__.py +38 -0
  2. librelane/__main__.py +479 -0
  3. librelane/__version__.py +43 -0
  4. librelane/common/__init__.py +63 -0
  5. librelane/common/cli.py +75 -0
  6. librelane/common/drc.py +246 -0
  7. librelane/common/generic_dict.py +319 -0
  8. librelane/common/metrics/__init__.py +35 -0
  9. librelane/common/metrics/__main__.py +413 -0
  10. librelane/common/metrics/library.py +354 -0
  11. librelane/common/metrics/metric.py +186 -0
  12. librelane/common/metrics/util.py +279 -0
  13. librelane/common/misc.py +456 -0
  14. librelane/common/ring_buffer.py +63 -0
  15. librelane/common/tcl.py +80 -0
  16. librelane/common/toolbox.py +549 -0
  17. librelane/common/tpe.py +41 -0
  18. librelane/common/types.py +116 -0
  19. librelane/config/__init__.py +32 -0
  20. librelane/config/__main__.py +155 -0
  21. librelane/config/config.py +1025 -0
  22. librelane/config/flow.py +490 -0
  23. librelane/config/pdk_compat.py +255 -0
  24. librelane/config/preprocessor.py +464 -0
  25. librelane/config/removals.py +45 -0
  26. librelane/config/variable.py +743 -0
  27. librelane/container.py +285 -0
  28. librelane/env_info.py +320 -0
  29. librelane/examples/spm/config.yaml +33 -0
  30. librelane/examples/spm/pin_order.cfg +14 -0
  31. librelane/examples/spm/src/impl.sdc +73 -0
  32. librelane/examples/spm/src/signoff.sdc +68 -0
  33. librelane/examples/spm/src/spm.v +73 -0
  34. librelane/examples/spm/verify/spm_tb.v +106 -0
  35. librelane/examples/spm-user_project_wrapper/SPM_example.v +286 -0
  36. librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +145 -0
  37. librelane/examples/spm-user_project_wrapper/config-tut.json +12 -0
  38. librelane/examples/spm-user_project_wrapper/config.json +13 -0
  39. librelane/examples/spm-user_project_wrapper/defines.v +66 -0
  40. librelane/examples/spm-user_project_wrapper/template.def +7656 -0
  41. librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +123 -0
  42. librelane/flows/__init__.py +24 -0
  43. librelane/flows/builtins.py +18 -0
  44. librelane/flows/classic.py +327 -0
  45. librelane/flows/cli.py +463 -0
  46. librelane/flows/flow.py +1049 -0
  47. librelane/flows/misc.py +71 -0
  48. librelane/flows/optimizing.py +179 -0
  49. librelane/flows/sequential.py +367 -0
  50. librelane/flows/synth_explore.py +173 -0
  51. librelane/help/__main__.py +39 -0
  52. librelane/logging/__init__.py +40 -0
  53. librelane/logging/logger.py +323 -0
  54. librelane/open_pdks_rev +1 -0
  55. librelane/plugins.py +21 -0
  56. librelane/py.typed +0 -0
  57. librelane/scripts/base.sdc +80 -0
  58. librelane/scripts/klayout/Readme.md +2 -0
  59. librelane/scripts/klayout/open_design.py +63 -0
  60. librelane/scripts/klayout/render.py +121 -0
  61. librelane/scripts/klayout/stream_out.py +176 -0
  62. librelane/scripts/klayout/xml_drc_report_to_json.py +45 -0
  63. librelane/scripts/klayout/xor.drc +120 -0
  64. librelane/scripts/magic/Readme.md +1 -0
  65. librelane/scripts/magic/common/read.tcl +114 -0
  66. librelane/scripts/magic/def/antenna_check.tcl +35 -0
  67. librelane/scripts/magic/def/mag.tcl +19 -0
  68. librelane/scripts/magic/def/mag_gds.tcl +79 -0
  69. librelane/scripts/magic/drc.tcl +78 -0
  70. librelane/scripts/magic/extract_spice.tcl +98 -0
  71. librelane/scripts/magic/gds/drc_batch.tcl +74 -0
  72. librelane/scripts/magic/gds/erase_box.tcl +32 -0
  73. librelane/scripts/magic/gds/extras_mag.tcl +45 -0
  74. librelane/scripts/magic/gds/mag_with_pointers.tcl +31 -0
  75. librelane/scripts/magic/get_bbox.tcl +11 -0
  76. librelane/scripts/magic/lef/extras_maglef.tcl +61 -0
  77. librelane/scripts/magic/lef/maglef.tcl +26 -0
  78. librelane/scripts/magic/lef.tcl +57 -0
  79. librelane/scripts/magic/open.tcl +28 -0
  80. librelane/scripts/magic/wrapper.tcl +21 -0
  81. librelane/scripts/netgen/setup.tcl +28 -0
  82. librelane/scripts/odbpy/apply_def_template.py +49 -0
  83. librelane/scripts/odbpy/cell_frequency.py +107 -0
  84. librelane/scripts/odbpy/check_antenna_properties.py +116 -0
  85. librelane/scripts/odbpy/contextualize.py +109 -0
  86. librelane/scripts/odbpy/defutil.py +573 -0
  87. librelane/scripts/odbpy/diodes.py +373 -0
  88. librelane/scripts/odbpy/disconnected_pins.py +305 -0
  89. librelane/scripts/odbpy/eco_buffer.py +181 -0
  90. librelane/scripts/odbpy/eco_diode.py +139 -0
  91. librelane/scripts/odbpy/filter_unannotated.py +100 -0
  92. librelane/scripts/odbpy/io_place.py +482 -0
  93. librelane/scripts/odbpy/ioplace_parser/__init__.py +23 -0
  94. librelane/scripts/odbpy/ioplace_parser/parse.py +147 -0
  95. librelane/scripts/odbpy/label_macro_pins.py +277 -0
  96. librelane/scripts/odbpy/lefutil.py +97 -0
  97. librelane/scripts/odbpy/placers.py +162 -0
  98. librelane/scripts/odbpy/power_utils.py +397 -0
  99. librelane/scripts/odbpy/random_place.py +57 -0
  100. librelane/scripts/odbpy/reader.py +250 -0
  101. librelane/scripts/odbpy/remove_buffers.py +173 -0
  102. librelane/scripts/odbpy/snap_to_grid.py +57 -0
  103. librelane/scripts/odbpy/wire_lengths.py +93 -0
  104. librelane/scripts/openroad/antenna_check.tcl +20 -0
  105. librelane/scripts/openroad/antenna_repair.tcl +31 -0
  106. librelane/scripts/openroad/basic_mp.tcl +24 -0
  107. librelane/scripts/openroad/buffer_list.tcl +10 -0
  108. librelane/scripts/openroad/common/dpl.tcl +24 -0
  109. librelane/scripts/openroad/common/dpl_cell_pad.tcl +26 -0
  110. librelane/scripts/openroad/common/grt.tcl +32 -0
  111. librelane/scripts/openroad/common/io.tcl +540 -0
  112. librelane/scripts/openroad/common/pdn_cfg.tcl +135 -0
  113. librelane/scripts/openroad/common/resizer.tcl +103 -0
  114. librelane/scripts/openroad/common/set_global_connections.tcl +78 -0
  115. librelane/scripts/openroad/common/set_layer_adjustments.tcl +31 -0
  116. librelane/scripts/openroad/common/set_power_nets.tcl +30 -0
  117. librelane/scripts/openroad/common/set_rc.tcl +75 -0
  118. librelane/scripts/openroad/common/set_routing_layers.tcl +30 -0
  119. librelane/scripts/openroad/cts.tcl +80 -0
  120. librelane/scripts/openroad/cut_rows.tcl +24 -0
  121. librelane/scripts/openroad/dpl.tcl +24 -0
  122. librelane/scripts/openroad/drt.tcl +37 -0
  123. librelane/scripts/openroad/fill.tcl +30 -0
  124. librelane/scripts/openroad/floorplan.tcl +145 -0
  125. librelane/scripts/openroad/gpl.tcl +88 -0
  126. librelane/scripts/openroad/grt.tcl +30 -0
  127. librelane/scripts/openroad/gui.tcl +37 -0
  128. librelane/scripts/openroad/insert_buffer.tcl +127 -0
  129. librelane/scripts/openroad/ioplacer.tcl +67 -0
  130. librelane/scripts/openroad/irdrop.tcl +51 -0
  131. librelane/scripts/openroad/pdn.tcl +52 -0
  132. librelane/scripts/openroad/rcx.tcl +32 -0
  133. librelane/scripts/openroad/repair_design.tcl +70 -0
  134. librelane/scripts/openroad/repair_design_postgrt.tcl +48 -0
  135. librelane/scripts/openroad/rsz_timing_postcts.tcl +68 -0
  136. librelane/scripts/openroad/rsz_timing_postgrt.tcl +70 -0
  137. librelane/scripts/openroad/sta/check_macro_instances.tcl +53 -0
  138. librelane/scripts/openroad/sta/corner.tcl +393 -0
  139. librelane/scripts/openroad/tapcell.tcl +25 -0
  140. librelane/scripts/openroad/write_views.tcl +27 -0
  141. librelane/scripts/pyosys/construct_abc_script.py +177 -0
  142. librelane/scripts/pyosys/json_header.py +84 -0
  143. librelane/scripts/pyosys/synthesize.py +493 -0
  144. librelane/scripts/pyosys/ys_common.py +153 -0
  145. librelane/scripts/tclsh/hello.tcl +1 -0
  146. librelane/state/__init__.py +24 -0
  147. librelane/state/__main__.py +61 -0
  148. librelane/state/design_format.py +195 -0
  149. librelane/state/state.py +359 -0
  150. librelane/steps/__init__.py +61 -0
  151. librelane/steps/__main__.py +510 -0
  152. librelane/steps/checker.py +637 -0
  153. librelane/steps/common_variables.py +340 -0
  154. librelane/steps/cvc_rv.py +169 -0
  155. librelane/steps/klayout.py +509 -0
  156. librelane/steps/magic.py +576 -0
  157. librelane/steps/misc.py +160 -0
  158. librelane/steps/netgen.py +253 -0
  159. librelane/steps/odb.py +1088 -0
  160. librelane/steps/openroad.py +2460 -0
  161. librelane/steps/openroad_alerts.py +102 -0
  162. librelane/steps/pyosys.py +640 -0
  163. librelane/steps/step.py +1571 -0
  164. librelane/steps/tclstep.py +288 -0
  165. librelane/steps/verilator.py +222 -0
  166. librelane/steps/yosys.py +371 -0
  167. librelane-2.4.0.dist-info/METADATA +169 -0
  168. librelane-2.4.0.dist-info/RECORD +170 -0
  169. librelane-2.4.0.dist-info/WHEEL +4 -0
  170. librelane-2.4.0.dist-info/entry_points.txt +9 -0
@@ -0,0 +1,70 @@
1
+ # Copyright 2020-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
+ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl
15
+ source $::env(SCRIPTS_DIR)/openroad/common/resizer.tcl
16
+
17
+ load_rsz_corners
18
+ read_current_odb
19
+
20
+ unset_propagated_clock [all_clocks]
21
+
22
+ set_dont_touch_objects
23
+
24
+ # set rc values
25
+ source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl
26
+
27
+ # CTS and detailed placement move instances, so update parastic estimates.
28
+ # estimate wire rc parasitics
29
+ estimate_parasitics -placement
30
+
31
+
32
+ # Buffer I/O
33
+ if { $::env(DESIGN_REPAIR_REMOVE_BUFFERS) } {
34
+ remove_buffers
35
+ }
36
+
37
+ if { $::env(DESIGN_REPAIR_BUFFER_INPUT_PORTS) } {
38
+ buffer_ports -inputs
39
+ }
40
+
41
+ if { $::env(DESIGN_REPAIR_BUFFER_OUTPUT_PORTS) } {
42
+ buffer_ports -outputs
43
+ }
44
+
45
+ # Repair Design
46
+ repair_design -verbose \
47
+ -max_wire_length $::env(DESIGN_REPAIR_MAX_WIRE_LENGTH) \
48
+ -slew_margin $::env(DESIGN_REPAIR_MAX_SLEW_PCT) \
49
+ -cap_margin $::env(DESIGN_REPAIR_MAX_CAP_PCT)
50
+
51
+ if { $::env(DESIGN_REPAIR_TIE_FANOUT) } {
52
+ # repair tie lo fanout
53
+ repair_tie_fanout -separation $::env(DESIGN_REPAIR_TIE_SEPARATION) $::env(SYNTH_TIELO_CELL)
54
+ # repair tie hi fanout
55
+ repair_tie_fanout -separation $::env(DESIGN_REPAIR_TIE_SEPARATION) $::env(SYNTH_TIEHI_CELL)
56
+ }
57
+
58
+ report_floating_nets -verbose
59
+
60
+ # Legalize
61
+ source $::env(SCRIPTS_DIR)/openroad/common/dpl.tcl
62
+
63
+ unset_dont_touch_objects
64
+
65
+ source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl
66
+ estimate_parasitics -placement
67
+
68
+
69
+ write_views
70
+
@@ -0,0 +1,48 @@
1
+ # Copyright 2020-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
+ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl
15
+ source $::env(SCRIPTS_DIR)/openroad/common/resizer.tcl
16
+
17
+ load_rsz_corners
18
+ read_current_odb
19
+
20
+ set_propagated_clock [all_clocks]
21
+
22
+ set_dont_touch_objects
23
+
24
+ # set rc values
25
+ source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl
26
+
27
+ # (Re-)GRT and Estimate Parasitics
28
+ # Temporarily always enabled: https://github.com/The-OpenROAD-Project/OpenROAD/issues/5590
29
+ #if { $::env(GRT_DESIGN_REPAIR_RUN_GRT) } {
30
+ source $::env(SCRIPTS_DIR)/openroad/common/grt.tcl
31
+ #}
32
+ estimate_parasitics -global_routing
33
+
34
+ # Repair design
35
+ repair_design -verbose \
36
+ -max_wire_length $::env(GRT_DESIGN_REPAIR_MAX_WIRE_LENGTH) \
37
+ -slew_margin $::env(GRT_DESIGN_REPAIR_MAX_SLEW_PCT) \
38
+ -cap_margin $::env(GRT_DESIGN_REPAIR_MAX_CAP_PCT)
39
+
40
+ # Re-DPL and GRT
41
+ source $::env(SCRIPTS_DIR)/openroad/common/dpl.tcl
42
+ unset_dont_touch_objects
43
+ if { $::env(GRT_DESIGN_REPAIR_RUN_GRT) } {
44
+ source $::env(SCRIPTS_DIR)/openroad/common/grt.tcl
45
+ }
46
+
47
+
48
+ write_views
@@ -0,0 +1,68 @@
1
+ # Copyright 2020-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
+ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl
15
+ source $::env(SCRIPTS_DIR)/openroad/common/resizer.tcl
16
+
17
+ load_rsz_corners
18
+ read_current_odb
19
+
20
+ set_propagated_clock [all_clocks]
21
+
22
+ set_dont_touch_objects
23
+
24
+ # set rc values
25
+ source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl
26
+
27
+ # CTS and detailed placement move instances, so update parastic estimates.
28
+ # estimate wire rc parasitics
29
+ estimate_parasitics -placement
30
+
31
+ # Resize
32
+ set setup_args [list]
33
+ lappend setup_args -verbose
34
+ lappend setup_args -setup
35
+ lappend setup_args -setup_margin $::env(PL_RESIZER_SETUP_SLACK_MARGIN)
36
+ lappend setup_args -max_buffer_percent $::env(PL_RESIZER_SETUP_MAX_BUFFER_PCT)
37
+ if { $::env(PL_RESIZER_GATE_CLONING) != 1 } {
38
+ lappend setup_args -skip_gate_cloning
39
+ }
40
+
41
+ set hold_args [list]
42
+ lappend hold_args -verbose
43
+ lappend hold_args -hold
44
+ lappend hold_args -setup_margin $::env(PL_RESIZER_SETUP_SLACK_MARGIN)
45
+ lappend hold_args -hold_margin $::env(PL_RESIZER_HOLD_SLACK_MARGIN)
46
+ lappend hold_args -max_buffer_percent $::env(PL_RESIZER_HOLD_MAX_BUFFER_PCT)
47
+ if { $::env(PL_RESIZER_ALLOW_SETUP_VIOS) == 1 } {
48
+ lappend hold_args -allow_setup_violations
49
+ }
50
+
51
+ if { $::env(PL_RESIZER_FIX_HOLD_FIRST) == 1 } {
52
+ repair_timing {*}$hold_args
53
+ repair_timing {*}$setup_args
54
+ } else {
55
+ repair_timing {*}$setup_args
56
+ repair_timing {*}$hold_args
57
+ }
58
+
59
+ # Legalize
60
+ source $::env(SCRIPTS_DIR)/openroad/common/dpl.tcl
61
+
62
+ unset_dont_touch_objects
63
+
64
+ source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl
65
+ estimate_parasitics -placement
66
+
67
+
68
+ write_views
@@ -0,0 +1,70 @@
1
+ # Copyright 2020-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
+ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl
15
+ source $::env(SCRIPTS_DIR)/openroad/common/resizer.tcl
16
+
17
+ load_rsz_corners
18
+ read_current_odb
19
+
20
+ set_propagated_clock [all_clocks]
21
+
22
+ set_dont_touch_objects
23
+
24
+ # set rc values
25
+ source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl
26
+
27
+ # (Re-)GRT and Estimate Parasitics
28
+ # Temporarily always enabled: https://github.com/The-OpenROAD-Project/OpenROAD/issues/5590
29
+ #if { $::env(GRT_RESIZER_RUN_GRT) } {
30
+ source $::env(SCRIPTS_DIR)/openroad/common/grt.tcl
31
+ # }
32
+ estimate_parasitics -global_routing
33
+
34
+ # Resize
35
+ set setup_args [list]
36
+ lappend setup_args -verbose
37
+ lappend setup_args -setup
38
+ lappend setup_args -setup_margin $::env(GRT_RESIZER_SETUP_SLACK_MARGIN)
39
+ lappend setup_args -max_buffer_percent $::env(GRT_RESIZER_SETUP_MAX_BUFFER_PCT)
40
+ if { $::env(GRT_RESIZER_GATE_CLONING) != 1 } {
41
+ lappend setup_args -skip_gate_cloning
42
+ }
43
+
44
+ set hold_args [list]
45
+ lappend hold_args -verbose
46
+ lappend hold_args -hold
47
+ lappend hold_args -setup_margin $::env(GRT_RESIZER_SETUP_SLACK_MARGIN)
48
+ lappend hold_args -hold_margin $::env(GRT_RESIZER_HOLD_SLACK_MARGIN)
49
+ lappend hold_args -max_buffer_percent $::env(GRT_RESIZER_HOLD_MAX_BUFFER_PCT)
50
+ if { $::env(GRT_RESIZER_ALLOW_SETUP_VIOS) == 1 } {
51
+ lappend hold_args -allow_setup_violations
52
+ }
53
+
54
+ if { $::env(GRT_RESIZER_FIX_HOLD_FIRST) == 1 } {
55
+ repair_timing {*}$hold_args
56
+ repair_timing {*}$setup_args
57
+ } else {
58
+ repair_timing {*}$setup_args
59
+ repair_timing {*}$hold_args
60
+ }
61
+
62
+ # Re-DPL and GRT
63
+ source $::env(SCRIPTS_DIR)/openroad/common/dpl.tcl
64
+ unset_dont_touch_objects
65
+ if { $::env(GRT_RESIZER_RUN_GRT) } {
66
+ source $::env(SCRIPTS_DIR)/openroad/common/grt.tcl
67
+ }
68
+
69
+
70
+ write_views
@@ -0,0 +1,53 @@
1
+ # Copyright 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
+ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl
15
+
16
+ set_cmd_units\
17
+ -time ns\
18
+ -capacitance pF\
19
+ -current mA\
20
+ -voltage V\
21
+ -resistance kOhm\
22
+ -distance um
23
+
24
+ set sta_report_default_digits 6
25
+
26
+ read_timing_info
27
+
28
+ set error_count 0
29
+ foreach {instance_name macro_name} $::env(_check_macro_instances) {
30
+ set instances [get_cells -hierarchical $instance_name]
31
+ set instance_count [llength $instances]
32
+ if { $instance_count < 1 } {
33
+ puts "\[ERROR\] No macro instance $instance_name found."
34
+ incr error_count
35
+ } elseif { $instance_count > 1 } {
36
+ puts "\[ERROR\] Macro instance name $instance_name matches multiple cells."
37
+ incr error_count
38
+ } else {
39
+ # The next line doesn't actually matter because this is Tcl but I'd feel
40
+ # dirty otherwise
41
+ set instance [lindex $instances 0]
42
+
43
+ set master_name [get_property $instance ref_name]
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."
46
+ incr error_count
47
+ }
48
+ }
49
+ }
50
+
51
+ if { $error_count != 0 } {
52
+ exit -1
53
+ }