librelane 3.0.0.dev48__tar.gz → 3.0.0.dev49__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.
Files changed (175) hide show
  1. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/PKG-INFO +3 -5
  2. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/Readme.md +2 -4
  3. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/__main__.py +4 -2
  4. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/sequential.py +7 -5
  5. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/klayout/open_design.py +8 -1
  6. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/pyosys/construct_abc_script.py +7 -7
  7. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/pyproject.toml +1 -1
  8. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/__init__.py +0 -0
  9. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/__version__.py +0 -0
  10. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/__init__.py +0 -0
  11. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/cli.py +0 -0
  12. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/drc.py +0 -0
  13. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/generic_dict.py +0 -0
  14. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/metrics/__init__.py +0 -0
  15. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/metrics/__main__.py +0 -0
  16. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/metrics/library.py +0 -0
  17. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/metrics/metric.py +0 -0
  18. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/metrics/util.py +0 -0
  19. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/misc.py +0 -0
  20. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/ring_buffer.py +0 -0
  21. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/tcl.py +0 -0
  22. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/toolbox.py +0 -0
  23. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/tpe.py +0 -0
  24. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/common/types.py +0 -0
  25. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/__init__.py +0 -0
  26. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/__main__.py +0 -0
  27. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/config.py +0 -0
  28. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/flow.py +0 -0
  29. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/pdk_compat.py +0 -0
  30. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/preprocessor.py +0 -0
  31. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/removals.py +0 -0
  32. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/config/variable.py +0 -0
  33. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/container.py +0 -0
  34. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/env_info.py +0 -0
  35. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/hold_eco_demo/config.yaml +0 -0
  36. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/hold_eco_demo/demo.v +0 -0
  37. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm/config.yaml +0 -0
  38. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm/pin_order.cfg +0 -0
  39. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm/src/impl.sdc +0 -0
  40. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm/src/signoff.sdc +0 -0
  41. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm/src/spm.v +0 -0
  42. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm/verify/spm_tb.v +0 -0
  43. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
  44. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
  45. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
  46. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
  47. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
  48. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
  49. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
  50. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/__init__.py +0 -0
  51. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/builtins.py +0 -0
  52. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/chip.py +0 -0
  53. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/classic.py +0 -0
  54. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/cli.py +0 -0
  55. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/flow.py +0 -0
  56. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/misc.py +0 -0
  57. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/optimizing.py +0 -0
  58. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/flows/synth_explore.py +0 -0
  59. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/help/__main__.py +0 -0
  60. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/logging/__init__.py +0 -0
  61. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/logging/logger.py +0 -0
  62. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/pdk_hashes.yaml +0 -0
  63. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/plugins.py +0 -0
  64. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/py.typed +0 -0
  65. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/base.sdc +0 -0
  66. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/klayout/Readme.md +0 -0
  67. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/klayout/render.py +0 -0
  68. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/klayout/stream_out.py +0 -0
  69. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
  70. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/klayout/xor.drc +0 -0
  71. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/Readme.md +0 -0
  72. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/common/read.tcl +0 -0
  73. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
  74. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/def/mag.tcl +0 -0
  75. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
  76. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/drc.tcl +0 -0
  77. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/extract_spice.tcl +0 -0
  78. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
  79. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
  80. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
  81. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
  82. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/get_bbox.tcl +0 -0
  83. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
  84. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/lef/maglef.tcl +0 -0
  85. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/lef.tcl +0 -0
  86. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/open.tcl +0 -0
  87. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/magic/wrapper.tcl +0 -0
  88. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/netgen/setup.tcl +0 -0
  89. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/apply_def_template.py +0 -0
  90. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/cell_frequency.py +0 -0
  91. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
  92. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/contextualize.py +0 -0
  93. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/defutil.py +0 -0
  94. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/diodes.py +0 -0
  95. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
  96. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/eco_buffer.py +0 -0
  97. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/eco_diode.py +0 -0
  98. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
  99. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/io_place.py +0 -0
  100. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
  101. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
  102. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
  103. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/lefutil.py +0 -0
  104. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/placers.py +0 -0
  105. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/power_utils.py +0 -0
  106. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/random_place.py +0 -0
  107. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/reader.py +0 -0
  108. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/remove_buffers.py +0 -0
  109. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
  110. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/odbpy/wire_lengths.py +0 -0
  111. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/antenna_check.tcl +0 -0
  112. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
  113. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/buffer_list.tcl +0 -0
  114. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/dpl.tcl +0 -0
  115. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
  116. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/grt.tcl +0 -0
  117. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/io.tcl +0 -0
  118. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/pad_cfg.tcl +0 -0
  119. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
  120. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/resizer.tcl +0 -0
  121. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
  122. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
  123. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
  124. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
  125. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
  126. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/cts.tcl +0 -0
  127. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/cut_rows.tcl +0 -0
  128. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/dpl.tcl +0 -0
  129. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/drt.tcl +0 -0
  130. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/dump_rc.tcl +0 -0
  131. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/fill.tcl +0 -0
  132. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/floorplan.tcl +0 -0
  133. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/gpl.tcl +0 -0
  134. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/grt.tcl +0 -0
  135. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/gui.tcl +0 -0
  136. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
  137. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/ioplacer.tcl +0 -0
  138. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/irdrop.tcl +0 -0
  139. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/pad.tcl +0 -0
  140. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/pdn.tcl +0 -0
  141. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/rcx.tcl +0 -0
  142. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/repair_design.tcl +0 -0
  143. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
  144. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
  145. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
  146. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
  147. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/sta/corner.tcl +0 -0
  148. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/tapcell.tcl +0 -0
  149. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/ungpl.tcl +0 -0
  150. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/write_cdl.tcl +0 -0
  151. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/openroad/write_views.tcl +0 -0
  152. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/pyosys/json_header.py +0 -0
  153. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/pyosys/synthesize.py +0 -0
  154. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/pyosys/ys_common.py +0 -0
  155. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/scripts/tclsh/hello.tcl +0 -0
  156. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/state/__init__.py +0 -0
  157. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/state/__main__.py +0 -0
  158. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/state/design_format.py +0 -0
  159. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/state/state.py +0 -0
  160. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/__init__.py +0 -0
  161. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/__main__.py +0 -0
  162. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/checker.py +0 -0
  163. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/common_variables.py +0 -0
  164. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/klayout.py +0 -0
  165. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/magic.py +0 -0
  166. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/misc.py +0 -0
  167. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/netgen.py +0 -0
  168. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/odb.py +0 -0
  169. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/openroad.py +0 -0
  170. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/openroad_alerts.py +0 -0
  171. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/pyosys.py +0 -0
  172. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/step.py +0 -0
  173. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/tclstep.py +0 -0
  174. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/verilator.py +0 -0
  175. {librelane-3.0.0.dev48 → librelane-3.0.0.dev49}/librelane/steps/yosys.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: librelane
3
- Version: 3.0.0.dev48
3
+ Version: 3.0.0.dev49
4
4
  Summary: An infrastructure for implementing chip design flows
5
5
  License-Expression: Apache-2.0
6
6
  Maintainer: Mohamed Gaber
@@ -48,10 +48,8 @@ Description-Content-Type: text/markdown
48
48
 
49
49
  LibreLane is an ASIC infrastructure library based on several components including
50
50
  OpenROAD, Yosys, Magic, Netgen, CVC, KLayout and a number of custom scripts for
51
- design exploration and optimization, currently developed and maintained by
52
- members and affiliates of the
53
- [American University in Cairo Open Hardware Lab](https://github.com/aucohl)
54
- under the stewardship of the [FOSSi Foundation](https://fossi-foundation.org).
51
+ design exploration and optimization, currently developed and maintained under
52
+ the stewardship of the [FOSSi Foundation](https://fossi-foundation.org).
55
53
 
56
54
  A reference flow, "Classic", performs all ASIC implementation steps from RTL all
57
55
  the way down to GDSII.
@@ -14,10 +14,8 @@
14
14
 
15
15
  LibreLane is an ASIC infrastructure library based on several components including
16
16
  OpenROAD, Yosys, Magic, Netgen, CVC, KLayout and a number of custom scripts for
17
- design exploration and optimization, currently developed and maintained by
18
- members and affiliates of the
19
- [American University in Cairo Open Hardware Lab](https://github.com/aucohl)
20
- under the stewardship of the [FOSSi Foundation](https://fossi-foundation.org).
17
+ design exploration and optimization, currently developed and maintained under
18
+ the stewardship of the [FOSSi Foundation](https://fossi-foundation.org).
21
19
 
22
20
  A reference flow, "Classic", performs all ASIC implementation steps from RTL all
23
21
  the way down to GDSII.
@@ -204,8 +204,10 @@ def print_version(ctx: click.Context, param: click.Parameter, value: bool):
204
204
  f"""
205
205
  LibreLane v{__version__}
206
206
 
207
- Copyright ©2020-2025 Efabless Corporation, The American University in
208
- Cairo, and other contributors.
207
+ Copyright ©2025-2026 LibreLane Contributors
208
+
209
+ Adapted from OpenLane 2.0
210
+ Copyright ©2020-2025 Efabless Corporation
209
211
 
210
212
  Available under the Apache License, version 2. Included with the source code,
211
213
  but you can also get a copy at https://www.apache.org/licenses/LICENSE-2.0
@@ -395,11 +395,6 @@ class SequentialFlow(Flow):
395
395
 
396
396
  if to_resolved and to_resolved == step.id:
397
397
  executing = False
398
- if len(deferred_errors) != 0:
399
- raise FlowError(
400
- "One or more deferred errors were encountered:\n"
401
- + "\n".join(deferred_errors)
402
- )
403
398
 
404
399
  assert self.run_dir is not None
405
400
  debug(f"Run concluded ▶ '{self.run_dir}'")
@@ -408,5 +403,12 @@ class SequentialFlow(Flow):
408
403
  current_state.save_snapshot(final_views_path)
409
404
  except Exception as e:
410
405
  raise FlowException(f"Failed to save final views: {e}")
406
+
407
+ if len(deferred_errors) != 0:
408
+ raise FlowError(
409
+ "One or more deferred errors were encountered:\n"
410
+ + "\n".join(deferred_errors)
411
+ )
412
+
411
413
  success("Flow complete.")
412
414
  return (current_state, step_list)
@@ -27,6 +27,13 @@ def open_design(input_lefs: Tuple[str, ...], lyt: str, lyp: str, lym: str, input
27
27
 
28
28
  tech = pya.Technology()
29
29
  tech.load(lyt)
30
+ # Register the technology.
31
+ # Throws an exception if a technology
32
+ # with the same name already exists.
33
+ try:
34
+ pya.Technology().register_technology(tech)
35
+ except Exception:
36
+ print(f"Could not register the technology: {tech.name}.")
30
37
 
31
38
  layout_options = tech.load_layout_options
32
39
  layout_options.keep_other_cells = True
@@ -35,7 +42,7 @@ def open_design(input_lefs: Tuple[str, ...], lyt: str, lyp: str, lym: str, input
35
42
  layout_options.lefdef_config.lef_files = list(input_lefs)
36
43
  layout_options.lefdef_config.map_file = lym
37
44
 
38
- cell_view = main_window.load_layout(input, layout_options, 0)
45
+ cell_view = main_window.load_layout(input, layout_options, tech.name, False)
39
46
  layout_view = cell_view.view()
40
47
  layout_view.load_layer_props(lyp)
41
48
  except Exception as e:
@@ -18,6 +18,8 @@ import re
18
18
  class ABCScriptCreator:
19
19
  def __init__(self, config):
20
20
  self.config = config
21
+ D = config["CLOCK_PERIOD"] * 1000 # ns -> ps
22
+ self.D = D
21
23
 
22
24
  self.rs_K = "resub -K "
23
25
  self.rs = "resub"
@@ -55,8 +57,8 @@ class ABCScriptCreator:
55
57
 
56
58
  self.map_old_area = "map -p -a -B 0.2 -A 0.9 -M 0"
57
59
  self.map_old_dly = "map -p -B 0.2 -A 0.9 -M 0"
58
- self.retime_area = "retime {D} -M 5"
59
- self.retime_dly = "retime {D} -M 6"
60
+ self.retime_area = "retime -M 5"
61
+ self.retime_dly = "retime -M 6"
60
62
  self.map_new_area = "amap -m -Q 0.1 -F 20 -A 20 -C 5000"
61
63
 
62
64
  if config["SYNTH_ABC_AREA_USE_NF"]:
@@ -71,11 +73,9 @@ class ABCScriptCreator:
71
73
  max_tr_arg = ""
72
74
  if self.max_transition != 0:
73
75
  max_tr_arg = f" -S {self.max_transition}"
74
- self.fine_tune = (
75
- f"buffer -N {self.max_fanout}{max_tr_arg};upsize {{D}};dnsize {{D}}"
76
- )
76
+ self.fine_tune = f"buffer -N {self.max_fanout}{max_tr_arg};upsize;dnsize"
77
77
  elif config["SYNTH_SIZING"]:
78
- self.fine_tune = "upsize {D};dnsize {D}"
78
+ self.fine_tune = "upsize;dnsize"
79
79
 
80
80
  def generate_abc_script(self, step_dir, strategy):
81
81
  strategy_clean = re.sub(r"\s+", "_", strategy)
@@ -160,7 +160,7 @@ class ABCScriptCreator:
160
160
  else:
161
161
  print(self.delay_mfs3, file=f)
162
162
 
163
- print("retime {D}", file=f)
163
+ print("retime", file=f)
164
164
 
165
165
  # & space
166
166
  print("&get -n", file=f)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "librelane"
3
- version = "3.0.0.dev48"
3
+ version = "3.0.0.dev49"
4
4
  description = "An infrastructure for implementing chip design flows"
5
5
  maintainers = [
6
6
  {name = "Mohamed Gaber", email = "me@donn.website"}