librelane 3.0.0.dev35__tar.gz → 3.0.0.dev38__tar.gz

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 (172) hide show
  1. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/PKG-INFO +1 -1
  2. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/eco_buffer.py +1 -1
  3. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/eco_diode.py +2 -1
  4. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/cts.tcl +11 -12
  5. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/odb.py +14 -1
  6. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/openroad.py +21 -5
  7. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/pyproject.toml +1 -1
  8. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/Readme.md +0 -0
  9. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/__init__.py +0 -0
  10. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/__main__.py +0 -0
  11. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/__version__.py +0 -0
  12. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/__init__.py +0 -0
  13. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/cli.py +0 -0
  14. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/drc.py +0 -0
  15. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/generic_dict.py +0 -0
  16. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/metrics/__init__.py +0 -0
  17. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/metrics/__main__.py +0 -0
  18. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/metrics/library.py +0 -0
  19. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/metrics/metric.py +0 -0
  20. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/metrics/util.py +0 -0
  21. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/misc.py +0 -0
  22. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/ring_buffer.py +0 -0
  23. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/tcl.py +0 -0
  24. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/toolbox.py +0 -0
  25. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/tpe.py +0 -0
  26. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/common/types.py +0 -0
  27. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/__init__.py +0 -0
  28. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/__main__.py +0 -0
  29. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/config.py +0 -0
  30. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/flow.py +0 -0
  31. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/pdk_compat.py +0 -0
  32. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/preprocessor.py +0 -0
  33. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/removals.py +0 -0
  34. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/config/variable.py +0 -0
  35. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/container.py +0 -0
  36. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/env_info.py +0 -0
  37. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm/config.yaml +0 -0
  38. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm/pin_order.cfg +0 -0
  39. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm/src/impl.sdc +0 -0
  40. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm/src/signoff.sdc +0 -0
  41. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm/src/spm.v +0 -0
  42. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm/verify/spm_tb.v +0 -0
  43. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
  44. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
  45. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
  46. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
  47. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
  48. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
  49. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
  50. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/__init__.py +0 -0
  51. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/builtins.py +0 -0
  52. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/classic.py +0 -0
  53. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/cli.py +0 -0
  54. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/flow.py +0 -0
  55. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/misc.py +0 -0
  56. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/optimizing.py +0 -0
  57. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/sequential.py +0 -0
  58. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/flows/synth_explore.py +0 -0
  59. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/help/__main__.py +0 -0
  60. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/logging/__init__.py +0 -0
  61. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/logging/logger.py +0 -0
  62. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/pdk_hashes.yaml +0 -0
  63. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/plugins.py +0 -0
  64. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/py.typed +0 -0
  65. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/base.sdc +0 -0
  66. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/klayout/Readme.md +0 -0
  67. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/klayout/open_design.py +0 -0
  68. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/klayout/render.py +0 -0
  69. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/klayout/stream_out.py +0 -0
  70. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
  71. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/klayout/xor.drc +0 -0
  72. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/Readme.md +0 -0
  73. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/common/read.tcl +0 -0
  74. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
  75. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/def/mag.tcl +0 -0
  76. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
  77. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/drc.tcl +0 -0
  78. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/extract_spice.tcl +0 -0
  79. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
  80. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
  81. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
  82. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
  83. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/get_bbox.tcl +0 -0
  84. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
  85. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/lef/maglef.tcl +0 -0
  86. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/lef.tcl +0 -0
  87. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/open.tcl +0 -0
  88. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/magic/wrapper.tcl +0 -0
  89. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/netgen/setup.tcl +0 -0
  90. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/apply_def_template.py +0 -0
  91. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/cell_frequency.py +0 -0
  92. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
  93. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/contextualize.py +0 -0
  94. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/defutil.py +0 -0
  95. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/diodes.py +0 -0
  96. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
  97. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
  98. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/io_place.py +0 -0
  99. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
  100. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
  101. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
  102. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/lefutil.py +0 -0
  103. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/placers.py +0 -0
  104. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/power_utils.py +0 -0
  105. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/random_place.py +0 -0
  106. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/reader.py +0 -0
  107. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/remove_buffers.py +0 -0
  108. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
  109. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/odbpy/wire_lengths.py +0 -0
  110. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/antenna_check.tcl +0 -0
  111. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
  112. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/basic_mp.tcl +0 -0
  113. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/buffer_list.tcl +0 -0
  114. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/dpl.tcl +0 -0
  115. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
  116. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/grt.tcl +0 -0
  117. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/io.tcl +0 -0
  118. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
  119. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/resizer.tcl +0 -0
  120. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
  121. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
  122. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
  123. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
  124. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
  125. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/cut_rows.tcl +0 -0
  126. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/dpl.tcl +0 -0
  127. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/drt.tcl +0 -0
  128. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/dump_rc.tcl +0 -0
  129. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/fill.tcl +0 -0
  130. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/floorplan.tcl +0 -0
  131. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/gpl.tcl +0 -0
  132. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/grt.tcl +0 -0
  133. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/gui.tcl +0 -0
  134. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
  135. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/ioplacer.tcl +0 -0
  136. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/irdrop.tcl +0 -0
  137. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/pdn.tcl +0 -0
  138. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/rcx.tcl +0 -0
  139. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/repair_design.tcl +0 -0
  140. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
  141. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
  142. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
  143. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
  144. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/sta/corner.tcl +0 -0
  145. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/tapcell.tcl +0 -0
  146. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/ungpl.tcl +0 -0
  147. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/write_cdl.tcl +0 -0
  148. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/openroad/write_views.tcl +0 -0
  149. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
  150. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/pyosys/json_header.py +0 -0
  151. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/pyosys/synthesize.py +0 -0
  152. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/pyosys/ys_common.py +0 -0
  153. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/scripts/tclsh/hello.tcl +0 -0
  154. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/state/__init__.py +0 -0
  155. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/state/__main__.py +0 -0
  156. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/state/design_format.py +0 -0
  157. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/state/state.py +0 -0
  158. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/__init__.py +0 -0
  159. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/__main__.py +0 -0
  160. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/checker.py +0 -0
  161. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/common_variables.py +0 -0
  162. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/cvc_rv.py +0 -0
  163. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/klayout.py +0 -0
  164. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/magic.py +0 -0
  165. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/misc.py +0 -0
  166. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/netgen.py +0 -0
  167. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/openroad_alerts.py +0 -0
  168. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/pyosys.py +0 -0
  169. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/step.py +0 -0
  170. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/tclstep.py +0 -0
  171. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/verilator.py +0 -0
  172. {librelane-3.0.0.dev35 → librelane-3.0.0.dev38}/librelane/steps/yosys.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: librelane
3
- Version: 3.0.0.dev35
3
+ Version: 3.0.0.dev38
4
4
  Summary: An infrastructure for implementing chip design flows
5
5
  Home-page: https://github.com/librelane/librelane
6
6
  License: Apache-2.0
@@ -44,7 +44,7 @@ def cli(reader):
44
44
  i = 0
45
45
 
46
46
  for target_info in reader.config["INSERT_ECO_BUFFERS"]:
47
- target_name, target_pin = target_info["target"].split("/")
47
+ target_name, target_pin = target_info["target"].rsplit("/", 1)
48
48
  name_escaped = reader.escape_verilog_name(target_name)
49
49
  buffer_master = target_info["buffer"]
50
50
 
@@ -38,8 +38,9 @@ def cli(reader):
38
38
  # print(grt)
39
39
  grt_inc = GRT.IncrementalGRoute(grt, reader.block)
40
40
  i = 0
41
+
41
42
  for target_info in reader.config["INSERT_ECO_DIODES"]:
42
- target_name, target_pin = target_info["target"].split("/")
43
+ target_name, target_pin = target_info["target"].rsplit("/", 1)
43
44
  name_escaped = reader.escape_verilog_name(target_name)
44
45
 
45
46
  target = reader.block.findInst(name_escaped)
@@ -63,28 +63,27 @@ proc get_buflist {} {
63
63
  set arg_list [list]
64
64
  lappend arg_list -buf_list [get_buflist]
65
65
  lappend arg_list -root_buf $::env(CTS_ROOT_BUFFER)
66
- lappend arg_list -sink_clustering_size $::env(CTS_SINK_CLUSTERING_SIZE)
67
- lappend arg_list -sink_clustering_max_diameter $::env(CTS_SINK_CLUSTERING_MAX_DIAMETER)
68
- lappend arg_list -sink_clustering_enable
66
+
67
+ append_if_exists_argument arg_list CTS_SINK_CLUSTERING_SIZE -sink_clustering_size
68
+ append_if_exists_argument arg_list CTS_SINK_CLUSTERING_MAX_DIAMETER -sink_clustering_max_diameter
69
+ append_if_flag arg_list CTS_SINK_CLUSTERING_ENABLE -sink_clustering_enable
70
+ append_if_exists_argument arg_list CTS_MACRO_CLUSTERING_SIZE -macro_clustering_size
71
+ append_if_exists_argument arg_list CTS_MACRO_CLUSTERING_MAX_DIAMETER -macro_clustering_max_diameter
72
+ append_if_flag arg_list CTS_DISABLE_POST_PROCESSING -post_cts_disable
73
+ append_if_flag arg_list CTS_OBSTRUCTION_AWARE -obstruction_aware
74
+ append_if_flag arg_list CTS_BALANCE_LEVELS -balance_levels
69
75
 
70
76
  if { $::env(CTS_DISTANCE_BETWEEN_BUFFERS) != 0 } {
71
77
  lappend arg_list -distance_between_buffers $::env(CTS_DISTANCE_BETWEEN_BUFFERS)
72
78
  }
73
- if { $::env(CTS_DISABLE_POST_PROCESSING) } {
74
- lappend arg_list -post_cts_disable
75
- }
76
- if { [info exists ::env(CTS_OBSTRUCTION_AWARE)] && $::env(CTS_OBSTRUCTION_AWARE) } {
77
- lappend arg_list -obstruction_aware
78
- }
79
+
79
80
  if { [info exists ::env(CTS_SINK_BUFFER_MAX_CAP_DERATE_PCT)] } {
80
81
  lappend arg_list -sink_buffer_max_cap_derate [expr $::env(CTS_SINK_BUFFER_MAX_CAP_DERATE_PCT) / 100.0]
81
82
  }
83
+
82
84
  if { [info exists ::env(CTS_DELAY_BUFFER_DERATE_PCT)] } {
83
85
  lappend arg_list -delay_buffer_derate [expr $::env(CTS_DELAY_BUFFER_DERATE_PCT) / 100]
84
86
  }
85
- if { [info exists ::env(CTS_BALANCE_LEVELS)] && $::env(CTS_BALANCE_LEVELS) } {
86
- lappend arg_list -balance_levels
87
- }
88
87
 
89
88
  log_cmd clock_tree_synthesis {*}$arg_list
90
89
 
@@ -1,3 +1,7 @@
1
+ # Copyright 2025 LibreLane Contributors
2
+ #
3
+ # Adapted from OpenLane
4
+ #
1
5
  # Copyright 2023 Efabless Corporation
2
6
  #
3
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -979,7 +983,7 @@ class ManualGlobalPlacement(OdbpyStep):
979
983
 
980
984
  def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
981
985
  if self.config["MANUAL_GLOBAL_PLACEMENTS"] is None:
982
- info(f"'MANUAL_GLOBAL_PLACEMENTS' not set, skipping '{self.id}'…")
986
+ info(f"'MANUAL_GLOBAL_PLACEMENTS' not set. Skipping '{self.id}'…")
983
987
  return {}, {}
984
988
  return super().run(state_in, **kwargs)
985
989
 
@@ -1039,6 +1043,12 @@ class InsertECOBuffers(OdbpyStep):
1039
1043
  assert self.config_path is not None, "get_command called before start()"
1040
1044
  return super().get_command() + ["--step-config", self.config_path]
1041
1045
 
1046
+ def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
1047
+ if self.config["INSERT_ECO_BUFFERS"] is None:
1048
+ info(f"'INSERT_ECO_BUFFERS' not set. Skipping '{self.id}'…")
1049
+ return {}, {}
1050
+ return super().run(state_in, **kwargs)
1051
+
1042
1052
 
1043
1053
  @dataclass
1044
1054
  class ECODiode:
@@ -1092,4 +1102,7 @@ class InsertECODiodes(OdbpyStep):
1092
1102
  if self.config["DIODE_CELL"] is None:
1093
1103
  info(f"'DIODE_CELL' not set. Skipping '{self.id}'…")
1094
1104
  return {}, {}
1105
+ if self.config["INSERT_ECO_DIODES"] is None:
1106
+ info(f"'INSERT_ECO_DIODES' not set. Skipping '{self.id}'…")
1107
+ return {}, {}
1095
1108
  return super().run(state_in, **kwargs)
@@ -2265,17 +2265,33 @@ class CTS(OpenROADStep):
2265
2265
  "Enables obstruction-aware buffering such that clock buffers are not placed on top of blockages or hard macros. "
2266
2266
  + "This option may reduce legalizer displacement, leading to better latency, skew or timing QoR.",
2267
2267
  ),
2268
+ Variable(
2269
+ "CTS_SINK_CLUSTERING_ENABLE",
2270
+ bool,
2271
+ "Enables pre-clustering of sinks to create one level of sub-tree before building the H-tree. "
2272
+ + "Each cluster is driven by a buffer which becomes the end point of the H-tree structure.",
2273
+ default=True,
2274
+ ),
2268
2275
  Variable(
2269
2276
  "CTS_SINK_CLUSTERING_SIZE",
2270
- int,
2277
+ Optional[int],
2271
2278
  "Specifies the maximum number of sinks per cluster.",
2272
- default=25,
2273
2279
  ),
2274
2280
  Variable(
2275
2281
  "CTS_SINK_CLUSTERING_MAX_DIAMETER",
2276
- Decimal,
2277
- "Specifies maximum diameter of the sink cluster.",
2278
- default=50,
2282
+ Optional[Decimal],
2283
+ "Specifies the maximum diameter of the sink cluster.",
2284
+ units="µm",
2285
+ ),
2286
+ Variable(
2287
+ "CTS_MACRO_CLUSTERING_SIZE",
2288
+ Optional[int],
2289
+ "Specifies the maximum number of sinks per cluster for the macro tree.",
2290
+ ),
2291
+ Variable(
2292
+ "CTS_MACRO_CLUSTERING_MAX_DIAMETER",
2293
+ Optional[Decimal],
2294
+ "Specifies the maximum diameter of the sink cluster for the macro tree.",
2279
2295
  units="µm",
2280
2296
  ),
2281
2297
  Variable(
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "librelane"
3
- version = "3.0.0.dev35"
3
+ version = "3.0.0.dev38"
4
4
  description = "An infrastructure for implementing chip design flows"
5
5
  # Technically, maintainer. We cannot use the maintainers field until
6
6
  # poetry-core>=2.0.0 which requires Python version 3.9+. This field does