librelane 3.0.0.dev41__tar.gz → 3.0.0.dev42__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.
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/PKG-INFO +1 -1
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/__init__.py +1 -1
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/__main__.py +4 -1
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/tcl.py +2 -1
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/container.py +7 -4
- librelane-3.0.0.dev42/librelane/examples/hold_eco_demo/config.yaml +18 -0
- librelane-3.0.0.dev42/librelane/examples/hold_eco_demo/demo.v +27 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/cli.py +24 -11
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/defutil.py +9 -3
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/eco_buffer.py +3 -2
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/eco_diode.py +3 -3
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/__main__.py +3 -2
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/checker.py +7 -8
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/klayout.py +9 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/misc.py +5 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/odb.py +32 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/openroad.py +0 -5
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/pyosys.py +6 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/yosys.py +9 -1
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/pyproject.toml +7 -1
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/Readme.md +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/__version__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/cli.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/drc.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/generic_dict.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/metrics/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/metrics/__main__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/metrics/library.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/metrics/metric.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/metrics/util.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/misc.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/ring_buffer.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/toolbox.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/tpe.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/common/types.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/__main__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/config.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/flow.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/pdk_compat.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/preprocessor.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/removals.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/config/variable.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/env_info.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm/config.yaml +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm/pin_order.cfg +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm/src/impl.sdc +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm/src/signoff.sdc +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm/src/spm.v +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm/verify/spm_tb.v +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/builtins.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/classic.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/flow.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/misc.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/optimizing.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/sequential.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/flows/synth_explore.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/help/__main__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/logging/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/logging/logger.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/pdk_hashes.yaml +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/plugins.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/py.typed +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/base.sdc +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/klayout/Readme.md +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/klayout/open_design.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/klayout/render.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/klayout/stream_out.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/klayout/xor.drc +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/Readme.md +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/common/read.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/def/mag.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/drc.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/extract_spice.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/get_bbox.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/lef/maglef.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/lef.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/open.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/wrapper.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/netgen/setup.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/apply_def_template.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/cell_frequency.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/contextualize.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/diodes.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/io_place.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/lefutil.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/placers.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/power_utils.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/random_place.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/reader.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/remove_buffers.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/wire_lengths.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/antenna_check.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/basic_mp.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/buffer_list.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/dpl.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/grt.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/io.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/resizer.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/cts.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/cut_rows.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/dpl.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/drt.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/dump_rc.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/fill.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/floorplan.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/gpl.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/grt.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/gui.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/ioplacer.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/irdrop.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/pdn.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/rcx.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/repair_design.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/sta/corner.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/tapcell.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/ungpl.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/write_cdl.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/write_views.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/pyosys/json_header.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/pyosys/synthesize.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/pyosys/ys_common.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/tclsh/hello.tcl +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/state/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/state/__main__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/state/design_format.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/state/state.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/__init__.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/common_variables.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/cvc_rv.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/magic.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/netgen.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/openroad_alerts.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/step.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/tclstep.py +0 -0
- {librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/steps/verilator.py +0 -0
|
@@ -217,7 +217,10 @@ def print_version(ctx: click.Context, param: click.Parameter, value: bool):
|
|
|
217
217
|
if len(discovered_plugins) > 0:
|
|
218
218
|
print("Discovered plugins:")
|
|
219
219
|
for name, module in discovered_plugins.items():
|
|
220
|
-
|
|
220
|
+
if hasattr(module, "__version__"):
|
|
221
|
+
print(f"{name} -> {module.__version__}")
|
|
222
|
+
else:
|
|
223
|
+
print(f"{name}")
|
|
221
224
|
|
|
222
225
|
ctx.exit(0)
|
|
223
226
|
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
# See the License for the specific language governing permissions and
|
|
17
17
|
# limitations under the License.
|
|
18
18
|
import re
|
|
19
|
-
import tkinter
|
|
20
19
|
from typing import Dict, Mapping, Any, Iterable
|
|
21
20
|
|
|
22
21
|
_env_rx = re.compile(r"(?:\:\:)?env\((\w+)\)")
|
|
@@ -59,6 +58,8 @@ class TclUtils(object):
|
|
|
59
58
|
|
|
60
59
|
@staticmethod
|
|
61
60
|
def _eval_env(env_in: Mapping[str, Any], tcl_in: str) -> Dict[str, Any]:
|
|
61
|
+
import tkinter
|
|
62
|
+
|
|
62
63
|
interpreter = tkinter.Tcl()
|
|
63
64
|
|
|
64
65
|
interpreter.eval("array unset ::env")
|
|
@@ -57,10 +57,13 @@ def gui_args(osinfo: OSInfo) -> List[str]:
|
|
|
57
57
|
args += [
|
|
58
58
|
"-e",
|
|
59
59
|
f"DISPLAY={os.environ.get('DISPLAY')}",
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"-v",
|
|
63
|
-
|
|
60
|
+
]
|
|
61
|
+
if os.path.isdir("/tmp/.X11-unix"):
|
|
62
|
+
args += ["-v", "/tmp/.X11-unix:/tmp/.X11-unix"]
|
|
63
|
+
homedir = os.path.expanduser("~")
|
|
64
|
+
if os.path.isfile(f"{homedir}/.Xauthority"):
|
|
65
|
+
args += ["-v", f"{homedir}/.Xauthority:/.Xauthority"]
|
|
66
|
+
args += [
|
|
64
67
|
"--network",
|
|
65
68
|
"host",
|
|
66
69
|
"--security-opt",
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
DESIGN_NAME: hold_violation
|
|
2
|
+
CLOCK_PORT: clk
|
|
3
|
+
CLOCK_PERIOD: 5
|
|
4
|
+
VERILOG_FILES: dir::demo.v
|
|
5
|
+
RUN_POST_CTS_RESIZER_TIMING: false
|
|
6
|
+
RUN_POST_GRT_RESIZER_TIMING: false
|
|
7
|
+
FP_SIZING: absolute
|
|
8
|
+
DIE_AREA: [0, 0, 100, 100]
|
|
9
|
+
INSERT_ECO_BUFFERS:
|
|
10
|
+
- target: u_ff1/Q
|
|
11
|
+
buffer: sky130_fd_sc_hd__buf_1
|
|
12
|
+
- target: u_ff1/Q
|
|
13
|
+
buffer: sky130_fd_sc_hd__buf_1
|
|
14
|
+
meta:
|
|
15
|
+
flow: Classic
|
|
16
|
+
substituting_steps:
|
|
17
|
+
"+OpenROAD.DetailedRouting": "Odb.InsertECOBuffers"
|
|
18
|
+
"+Odb.InsertECOBuffers": "OpenROAD.DetailedRouting"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module hold_violation(
|
|
2
|
+
input clk,
|
|
3
|
+
input d,
|
|
4
|
+
output q
|
|
5
|
+
);
|
|
6
|
+
wire intermediate;
|
|
7
|
+
wire clk_delayed;
|
|
8
|
+
|
|
9
|
+
sky130_fd_sc_hd__clkbuf_4 dly (
|
|
10
|
+
.A(clk),
|
|
11
|
+
.X(clk_delayed)
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
sky130_fd_sc_hd__dfrtp_4 u_ff1 (
|
|
15
|
+
.CLK(clk),
|
|
16
|
+
.D(d),
|
|
17
|
+
.RESET_B(1'b1),
|
|
18
|
+
.Q(intermediate)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
sky130_fd_sc_hd__dfrtp_1 u_ff2 (
|
|
22
|
+
.CLK(clk_delayed),
|
|
23
|
+
.D(intermediate),
|
|
24
|
+
.RESET_B(1'b1),
|
|
25
|
+
.Q(q)
|
|
26
|
+
);
|
|
27
|
+
endmodule
|
|
@@ -43,7 +43,7 @@ from cloup.typing import Decorator
|
|
|
43
43
|
|
|
44
44
|
from .flow import Flow
|
|
45
45
|
from ..common import set_tpe, cli, get_pdk_hash, _get_process_limit
|
|
46
|
-
from ..logging import set_log_level, verbose, err, options, LogLevels
|
|
46
|
+
from ..logging import set_log_level, verbose, info, err, options, LogLevels
|
|
47
47
|
from ..state import State, InvalidState
|
|
48
48
|
|
|
49
49
|
|
|
@@ -520,16 +520,29 @@ def cloup_flow_opts(
|
|
|
520
520
|
err(f"Could not resolve the PDK '{pdk}'.")
|
|
521
521
|
exit(1)
|
|
522
522
|
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
"
|
|
529
|
-
)
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
523
|
+
if pdk_family == "ihp-sg13g2":
|
|
524
|
+
err(
|
|
525
|
+
"The IHP Open PDK is only supported in the development version of LibreLane, specifically 3.0.0.dev28 or higher."
|
|
526
|
+
)
|
|
527
|
+
info(
|
|
528
|
+
"If you're using Nix, switch to the 'dev' branch. If you're using the Python package, run \"python3 -m pip install 'librelane>=3.0.0.dev28'\"."
|
|
529
|
+
)
|
|
530
|
+
exit(1)
|
|
531
|
+
|
|
532
|
+
try:
|
|
533
|
+
version = ciel.fetch(
|
|
534
|
+
ciel_home,
|
|
535
|
+
pdk_family,
|
|
536
|
+
opdks_rev,
|
|
537
|
+
data_source=StaticWebDataSource(
|
|
538
|
+
"https://fossi-foundation.github.io/ciel-releases"
|
|
539
|
+
),
|
|
540
|
+
include_libraries=include_libraries,
|
|
541
|
+
)
|
|
542
|
+
pdk_root = version.get_dir(ciel_home)
|
|
543
|
+
except ValueError as e:
|
|
544
|
+
err(f"Failed to download PDK: {e}")
|
|
545
|
+
exit(1)
|
|
533
546
|
|
|
534
547
|
return f(*args, pdk_root=pdk_root, pdk=pdk, scl=scl, **kwargs)
|
|
535
548
|
|
|
@@ -248,13 +248,19 @@ def relocate_pins(db, input_lefs, template_def, permissive, copy_def_power=False
|
|
|
248
248
|
pin_name = bterm.getName()
|
|
249
249
|
pin_net_name = bterm.getNet().getName()
|
|
250
250
|
pin_net = output_block.findNet(pin_net_name)
|
|
251
|
+
new_net_created = False
|
|
251
252
|
if pin_net is None:
|
|
252
253
|
pin_net = odb.dbNet.create(output_block, pin_net_name, True)
|
|
253
254
|
pin_net.setSpecial()
|
|
254
255
|
pin_net.setSigType(bterm.getSigType())
|
|
255
|
-
|
|
256
|
-
pin_bterm.
|
|
257
|
-
|
|
256
|
+
new_net_created = True
|
|
257
|
+
pin_bterm = output_block.findBTerm(pin_name)
|
|
258
|
+
if pin_bterm is None:
|
|
259
|
+
pin_bterm = odb.dbBTerm.create(pin_net, pin_name)
|
|
260
|
+
pin_bterm.setSigType(bterm.getSigType())
|
|
261
|
+
output_bterms.append(pin_bterm)
|
|
262
|
+
elif new_net_created:
|
|
263
|
+
pin_bterm.connect(pin_net)
|
|
258
264
|
|
|
259
265
|
grid_errors = False
|
|
260
266
|
for output_bterm in output_bterms:
|
|
@@ -43,8 +43,9 @@ def cli(reader):
|
|
|
43
43
|
grt_inc = GRT.IncrementalGRoute(grt, reader.block)
|
|
44
44
|
i = 0
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
eco_buffers = reader.config["INSERT_ECO_BUFFERS"] or []
|
|
47
|
+
for target_info in eco_buffers:
|
|
48
|
+
target_name, target_pin = target_info["target"].split("/")
|
|
48
49
|
name_escaped = reader.escape_verilog_name(target_name)
|
|
49
50
|
buffer_master = target_info["buffer"]
|
|
50
51
|
|
|
@@ -38,9 +38,9 @@ def cli(reader):
|
|
|
38
38
|
# print(grt)
|
|
39
39
|
grt_inc = GRT.IncrementalGRoute(grt, reader.block)
|
|
40
40
|
i = 0
|
|
41
|
-
|
|
42
|
-
for target_info in
|
|
43
|
-
target_name, target_pin = target_info["target"].
|
|
41
|
+
diodes = reader.config["INSERT_ECO_DIODES"] or []
|
|
42
|
+
for target_info in diodes:
|
|
43
|
+
target_name, target_pin = target_info["target"].split("/")
|
|
44
44
|
name_escaped = reader.escape_verilog_name(target_name)
|
|
45
45
|
|
|
46
46
|
target = reader.block.findInst(name_escaped)
|
|
@@ -47,8 +47,9 @@ def load_step_from_inputs(
|
|
|
47
47
|
if Found := Step.factory.get(id):
|
|
48
48
|
Target = Found
|
|
49
49
|
else:
|
|
50
|
-
err(
|
|
51
|
-
|
|
50
|
+
err(f"No step registered with id '{id}'.")
|
|
51
|
+
info(
|
|
52
|
+
f"If the step '{id}' is part of a plugin, make sure the plugin's parent directory is in the PYTHONPATH environment variable."
|
|
52
53
|
)
|
|
53
54
|
ctx.exit(-1)
|
|
54
55
|
|
|
@@ -79,22 +79,21 @@ class MetricChecker(Step):
|
|
|
79
79
|
deferred: ClassVar[bool] = True
|
|
80
80
|
error_on_var: Optional[Variable] = None
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
threshold_string = Self.get_threshold_description(None)
|
|
82
|
+
def __init_subclass__(cls):
|
|
83
|
+
threshold_string = cls.get_threshold_description(None)
|
|
85
84
|
if threshold_string is None:
|
|
86
|
-
threshold_string = str(
|
|
85
|
+
threshold_string = str(cls.get_threshold(None))
|
|
87
86
|
dynamic_docstring = "Raises"
|
|
88
|
-
if
|
|
87
|
+
if cls.deferred:
|
|
89
88
|
dynamic_docstring += " a deferred error"
|
|
90
89
|
else:
|
|
91
90
|
dynamic_docstring += " an immediate error"
|
|
92
|
-
dynamic_docstring += f" if {
|
|
91
|
+
dynamic_docstring += f" if {cls.metric_description} (metric: ``{cls.metric_name}``) are >= {threshold_string}."
|
|
93
92
|
dynamic_docstring += (
|
|
94
93
|
" Doesn't raise an error depending on error_on_var if defined."
|
|
95
94
|
)
|
|
96
|
-
|
|
97
|
-
return super().
|
|
95
|
+
cls.__doc__ = dynamic_docstring
|
|
96
|
+
return super().__init_subclass__()
|
|
98
97
|
|
|
99
98
|
def get_threshold(self: Optional["MetricChecker"]) -> Optional[Decimal]:
|
|
100
99
|
return Decimal(0)
|
|
@@ -353,6 +353,15 @@ class XOR(KLayoutStep):
|
|
|
353
353
|
|
|
354
354
|
@Step.factory.register()
|
|
355
355
|
class DRC(KLayoutStep):
|
|
356
|
+
"""
|
|
357
|
+
Runs DRC using KLayout.
|
|
358
|
+
|
|
359
|
+
Unlike most steps, the KLayout scripts vary quite wildly by PDK. If a PDK
|
|
360
|
+
is not supported by this step, it will simply be skipped.
|
|
361
|
+
|
|
362
|
+
Currently, only sky130A and sky130B are supported.
|
|
363
|
+
"""
|
|
364
|
+
|
|
356
365
|
id = "KLayout.DRC"
|
|
357
366
|
name = "Design Rule Check (KLayout)"
|
|
358
367
|
|
|
@@ -53,6 +53,11 @@ class LoadBaseSDC(Step):
|
|
|
53
53
|
|
|
54
54
|
@Step.factory.register()
|
|
55
55
|
class ReportManufacturability(Step):
|
|
56
|
+
"""
|
|
57
|
+
Logs a simple "manufacturability report", i.e., the status of DRC, LVS, and
|
|
58
|
+
antenna violations.
|
|
59
|
+
"""
|
|
60
|
+
|
|
56
61
|
id = "Misc.ReportManufacturability"
|
|
57
62
|
name = "Report Manufacturability"
|
|
58
63
|
long_name = "Report Manufacturability (DRC, LVS, Antenna)"
|
|
@@ -184,6 +184,10 @@ class OdbpyStep(Step):
|
|
|
184
184
|
|
|
185
185
|
@Step.factory.register()
|
|
186
186
|
class CheckMacroAntennaProperties(OdbpyStep):
|
|
187
|
+
"""
|
|
188
|
+
Prints warnings if the LEF views of macros are missing antenna information.
|
|
189
|
+
"""
|
|
190
|
+
|
|
187
191
|
id = "Odb.CheckMacroAntennaProperties"
|
|
188
192
|
name = "Check Antenna Properties of Macros Pins in Their LEF Views"
|
|
189
193
|
inputs = OdbpyStep.inputs
|
|
@@ -221,6 +225,10 @@ class CheckMacroAntennaProperties(OdbpyStep):
|
|
|
221
225
|
|
|
222
226
|
@Step.factory.register()
|
|
223
227
|
class CheckDesignAntennaProperties(CheckMacroAntennaProperties):
|
|
228
|
+
"""
|
|
229
|
+
Prints warnings if the LEF view of the design is missing antenna information.
|
|
230
|
+
"""
|
|
231
|
+
|
|
224
232
|
id = "Odb.CheckDesignAntennaProperties"
|
|
225
233
|
name = "Check Antenna Properties of Pins in The Generated Design LEF view"
|
|
226
234
|
inputs = CheckMacroAntennaProperties.inputs + [DesignFormat.LEF]
|
|
@@ -527,6 +535,11 @@ class ReportDisconnectedPins(OdbpyStep):
|
|
|
527
535
|
|
|
528
536
|
@Step.factory.register()
|
|
529
537
|
class AddRoutingObstructions(OdbpyStep):
|
|
538
|
+
"""
|
|
539
|
+
Adds obstructions on metal layers which prevent shapes from being created in
|
|
540
|
+
the designated areas.
|
|
541
|
+
"""
|
|
542
|
+
|
|
530
543
|
id = "Odb.AddRoutingObstructions"
|
|
531
544
|
name = "Add Obstructions"
|
|
532
545
|
config_vars = [
|
|
@@ -569,6 +582,11 @@ class AddRoutingObstructions(OdbpyStep):
|
|
|
569
582
|
|
|
570
583
|
@Step.factory.register()
|
|
571
584
|
class RemoveRoutingObstructions(AddRoutingObstructions):
|
|
585
|
+
"""
|
|
586
|
+
Removes any routing obstructions previously placed by
|
|
587
|
+
<#Odb.AddRoutingObstructions>`_.
|
|
588
|
+
"""
|
|
589
|
+
|
|
572
590
|
id = "Odb.RemoveRoutingObstructions"
|
|
573
591
|
name = "Remove Obstructions"
|
|
574
592
|
|
|
@@ -578,6 +596,15 @@ class RemoveRoutingObstructions(AddRoutingObstructions):
|
|
|
578
596
|
|
|
579
597
|
@Step.factory.register()
|
|
580
598
|
class AddPDNObstructions(AddRoutingObstructions):
|
|
599
|
+
"""
|
|
600
|
+
Adds obstructions on metal layers which prevent shapes from being created in
|
|
601
|
+
the designated areas.
|
|
602
|
+
|
|
603
|
+
A soft-duplicate of <#Odb.AddRoutingObstructions>`_ , though this one uses
|
|
604
|
+
a different variable name so the obstructions can be restricted for PDN
|
|
605
|
+
steps only.
|
|
606
|
+
"""
|
|
607
|
+
|
|
581
608
|
id = "Odb.AddPDNObstructions"
|
|
582
609
|
name = "Add PDN obstructions"
|
|
583
610
|
|
|
@@ -595,6 +622,11 @@ class AddPDNObstructions(AddRoutingObstructions):
|
|
|
595
622
|
|
|
596
623
|
@Step.factory.register()
|
|
597
624
|
class RemovePDNObstructions(RemoveRoutingObstructions):
|
|
625
|
+
"""
|
|
626
|
+
Removes any PDN obstructions previously placed by
|
|
627
|
+
<#Odb.RemovePDNObstructions>`_.
|
|
628
|
+
"""
|
|
629
|
+
|
|
598
630
|
id = "Odb.RemovePDNObstructions"
|
|
599
631
|
name = "Remove PDN obstructions"
|
|
600
632
|
|
|
@@ -1518,11 +1518,6 @@ class GlobalPlacementSkipIO(_GlobalPlacement):
|
|
|
1518
1518
|
"Path to a custom pin configuration file.",
|
|
1519
1519
|
deprecated_names=["FP_PIN_ORDER_CFG"],
|
|
1520
1520
|
),
|
|
1521
|
-
Variable(
|
|
1522
|
-
"FP_DEF_TEMPLATE",
|
|
1523
|
-
Optional[Path],
|
|
1524
|
-
"Points to the DEF file to be used as a template.",
|
|
1525
|
-
),
|
|
1526
1521
|
]
|
|
1527
1522
|
|
|
1528
1523
|
def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
|
|
@@ -327,6 +327,12 @@ class VerilogStep(PyosysStep):
|
|
|
327
327
|
|
|
328
328
|
@Step.factory.register()
|
|
329
329
|
class JsonHeader(VerilogStep):
|
|
330
|
+
"""
|
|
331
|
+
Extracts a high-level hierarchical view of the circuit in JSON format,
|
|
332
|
+
including power connections. The power connections are used in later steps
|
|
333
|
+
to ensure macros and cells are connected as desired.
|
|
334
|
+
"""
|
|
335
|
+
|
|
330
336
|
id = "Yosys.JsonHeader"
|
|
331
337
|
name = "Generate JSON Header"
|
|
332
338
|
long_name = "Generate JSON Header"
|
|
@@ -258,6 +258,14 @@ class YosysStep(TclStep):
|
|
|
258
258
|
|
|
259
259
|
@Step.factory.register()
|
|
260
260
|
class EQY(Step):
|
|
261
|
+
"""
|
|
262
|
+
Experimental: Uses the `EQY <https://github.com/yosyshq/eqy>`_ utility to
|
|
263
|
+
perform an RTL vs. Netlist equivalence check.
|
|
264
|
+
|
|
265
|
+
Currently, you are expected to provide your own EQY script if you want this
|
|
266
|
+
to work properly.
|
|
267
|
+
"""
|
|
268
|
+
|
|
261
269
|
id = "Yosys.EQY"
|
|
262
270
|
name = "Equivalence Check"
|
|
263
271
|
long_name = "RTL/Netlist Equivalence Check"
|
|
@@ -272,7 +280,7 @@ class EQY(Step):
|
|
|
272
280
|
Variable(
|
|
273
281
|
"EQY_SCRIPT",
|
|
274
282
|
Optional[Path],
|
|
275
|
-
"
|
|
283
|
+
"The EQY script to use. If unset, a generic EQY script will be generated, but this fails in a number of scenarios.",
|
|
276
284
|
),
|
|
277
285
|
Variable(
|
|
278
286
|
"MACRO_PLACEMENT_CFG",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "librelane"
|
|
3
|
-
version = "3.0.0.
|
|
3
|
+
version = "3.0.0.dev42"
|
|
4
4
|
description = "An infrastructure for implementing chip design flows"
|
|
5
5
|
maintainers = [
|
|
6
6
|
{name = "Mohamed Gaber", email = "me@donn.website"}
|
|
@@ -68,6 +68,12 @@ librelane = "librelane.__main__:cli"
|
|
|
68
68
|
"librelane.help" = "librelane.help.__main__:cli"
|
|
69
69
|
"librelane.env_info" = "librelane:env_info_cli"
|
|
70
70
|
|
|
71
|
+
[tool.ruff]
|
|
72
|
+
# syntax-only check, make sure files are parseable under py310
|
|
73
|
+
# $ ruff check .
|
|
74
|
+
target-version = "py310"
|
|
75
|
+
lint.ignore = ["E", "F"]
|
|
76
|
+
|
|
71
77
|
[build-system]
|
|
72
78
|
requires = ["poetry-core>=2.0.0,<3"]
|
|
73
79
|
build-backend = "poetry.core.masonry.api"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/klayout/xml_drc_report_to_json.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/def/antenna_check.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/gds/mag_with_pointers.tcl
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/magic/lef/extras_maglef.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/apply_def_template.py
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/check_antenna_properties.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/disconnected_pins.py
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/filter_unannotated.py
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/ioplace_parser/__init__.py
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/odbpy/ioplace_parser/parse.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/antenna_check.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/antenna_repair.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/dpl_cell_pad.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/pdn_cfg.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/resizer.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/set_power_nets.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/common/set_rc.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/insert_buffer.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/repair_design.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/repair_design_postgrt.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/rsz_timing_postcts.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/openroad/rsz_timing_postgrt.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev41 → librelane-3.0.0.dev42}/librelane/scripts/pyosys/construct_abc_script.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|