librelane 3.0.2__tar.gz → 3.1.0.dev1__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.
- {librelane-3.0.2 → librelane-3.1.0.dev1}/PKG-INFO +1 -1
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/toolbox.py +7 -1
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/flow.py +34 -11
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/pdk_compat.py +3 -3
- librelane-3.1.0.dev1/librelane/pdk_hashes.yaml +3 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/common/read.tcl +24 -45
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/drc.tcl +4 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/io.tcl +0 -14
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/pad_cfg.tcl +5 -2
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/pdn_cfg.tcl +1 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/common_variables.py +6 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/odb.py +2 -1
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/openroad.py +4 -2
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/pyosys.py +8 -3
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/yosys.py +5 -4
- {librelane-3.0.2 → librelane-3.1.0.dev1}/pyproject.toml +1 -1
- librelane-3.0.2/librelane/pdk_hashes.yaml +0 -3
- {librelane-3.0.2 → librelane-3.1.0.dev1}/Readme.md +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/__main__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/__version__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/cli.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/drc.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/generic_dict.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/metrics/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/metrics/__main__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/metrics/library.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/metrics/metric.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/metrics/util.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/misc.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/ring_buffer.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/tcl.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/tpe.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/common/types.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/__main__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/config.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/preprocessor.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/removals.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/config/variable.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/container.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/env_info.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/hold_eco_demo/config.yaml +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/hold_eco_demo/demo.v +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm/config.yaml +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm/pin_order.cfg +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm/src/impl.sdc +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm/src/signoff.sdc +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm/src/spm.v +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm/verify/spm_tb.v +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/builtins.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/chip.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/classic.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/cli.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/flow.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/misc.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/optimizing.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/sequential.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/flows/synth_explore.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/help/__main__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/logging/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/logging/logger.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/plugins.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/py.typed +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/base.sdc +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/Readme.md +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/insert_cell.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/open_design.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/render.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/stream_out.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/xor.drc +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/Readme.md +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/def/mag.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/extract_spice.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/get_bbox.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/lef/maglef.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/lef.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/open.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/spice_rcx.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/magic/wrapper.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/netgen/setup.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/apply_def_template.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/cell_frequency.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/contextualize.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/defutil.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/diodes.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/eco_buffer.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/eco_diode.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/io_place.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/lefutil.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/placers.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/power_utils.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/random_place.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/reader.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/remove_buffers.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/wire_lengths.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/antenna_check.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/buffer_list.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/dpl.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/grt.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/resizer.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/cts.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/cut_rows.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/dpl.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/drt.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/dump_rc.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/fill.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/floorplan.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/gpl.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/grt.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/gui.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/ioplacer.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/irdrop.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/pad.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/pdn.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/rcx.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/repair_design.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/sta/corner.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/tapcell.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/ungpl.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/write_cdl.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/write_views.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/pyosys/json_header.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/pyosys/synthesize.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/pyosys/ys_common.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/tclsh/hello.tcl +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/state/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/state/__main__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/state/design_format.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/state/state.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/__init__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/__main__.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/checker.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/klayout.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/magic.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/misc.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/netgen.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/openroad_alerts.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/step.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/tclstep.py +0 -0
- {librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/steps/verilator.py +0 -0
|
@@ -232,10 +232,16 @@ class Toolbox(object):
|
|
|
232
232
|
|
|
233
233
|
timing_corner = timing_corner or config["DEFAULT_CORNER"]
|
|
234
234
|
|
|
235
|
-
|
|
235
|
+
# Filter the cell libs
|
|
236
|
+
all_libs: List[Path] = self.filter_views(
|
|
237
|
+
config, config["CELL_LIBS"], timing_corner
|
|
238
|
+
)
|
|
236
239
|
if len(all_libs) == 0:
|
|
237
240
|
warn(f"No SCL lib files found for {timing_corner}.")
|
|
238
241
|
|
|
242
|
+
# Add optional I/O pad libs
|
|
243
|
+
all_libs += self.filter_views(config, config["PAD_LIBS"], timing_corner)
|
|
244
|
+
|
|
239
245
|
all_netlists: List[Path] = []
|
|
240
246
|
all_spefs: List[Tuple[str, Path]] = []
|
|
241
247
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import os
|
|
19
19
|
|
|
20
20
|
from decimal import Decimal
|
|
21
|
-
from typing import List, Optional, Dict, Sequence, Union, Tuple
|
|
21
|
+
from typing import List, Optional, Dict, Sequence, Union, Tuple, Literal
|
|
22
22
|
|
|
23
23
|
from .variable import Variable, Macro
|
|
24
24
|
from ..common import Path, get_script_dir
|
|
@@ -127,9 +127,10 @@ scl_variables = [
|
|
|
127
127
|
deprecated_names=["DECAP_CELL"],
|
|
128
128
|
),
|
|
129
129
|
Variable(
|
|
130
|
-
"
|
|
130
|
+
"CELL_LIBS",
|
|
131
131
|
Dict[str, List[Path]],
|
|
132
132
|
"A map from corner patterns to a list of associated liberty files. Exactly one entry must match the `DEFAULT_CORNER`.",
|
|
133
|
+
deprecated_names=["LIB"],
|
|
133
134
|
pdk=True,
|
|
134
135
|
),
|
|
135
136
|
Variable(
|
|
@@ -427,9 +428,10 @@ option_variables = [
|
|
|
427
428
|
|
|
428
429
|
pad_variables = [
|
|
429
430
|
Variable(
|
|
430
|
-
"
|
|
431
|
-
Optional[List[Path]],
|
|
432
|
-
"
|
|
431
|
+
"PAD_LIBS",
|
|
432
|
+
Optional[Dict[str, List[Path]]],
|
|
433
|
+
"A map from corner patterns to a list of associated liberty files. Exactly one entry must match the `DEFAULT_CORNER`.",
|
|
434
|
+
default={},
|
|
433
435
|
pdk=True,
|
|
434
436
|
),
|
|
435
437
|
Variable(
|
|
@@ -438,6 +440,12 @@ pad_variables = [
|
|
|
438
440
|
"Path(s) to IO pad LEF file(s).",
|
|
439
441
|
pdk=True,
|
|
440
442
|
),
|
|
443
|
+
Variable(
|
|
444
|
+
"PAD_GDS",
|
|
445
|
+
Optional[List[Path]],
|
|
446
|
+
"Path(s) to IO pad GDS file(s).",
|
|
447
|
+
pdk=True,
|
|
448
|
+
),
|
|
441
449
|
Variable(
|
|
442
450
|
"PAD_VERILOG_MODELS",
|
|
443
451
|
Optional[List[Path]],
|
|
@@ -456,12 +464,6 @@ pad_variables = [
|
|
|
456
464
|
description="A circuit-design language view of the io pad library.",
|
|
457
465
|
pdk=True,
|
|
458
466
|
),
|
|
459
|
-
Variable(
|
|
460
|
-
"PAD_LIBS",
|
|
461
|
-
Optional[Dict[str, List[Path]]],
|
|
462
|
-
"A map from corner patterns to a list of associated liberty files. Exactly one entry must match the `DEFAULT_CORNER`.",
|
|
463
|
-
pdk=True,
|
|
464
|
-
),
|
|
465
467
|
Variable(
|
|
466
468
|
"PAD_CORNER",
|
|
467
469
|
Optional[List[str]],
|
|
@@ -535,6 +537,27 @@ pad_variables = [
|
|
|
535
537
|
units="µm",
|
|
536
538
|
pdk=True,
|
|
537
539
|
),
|
|
540
|
+
Variable(
|
|
541
|
+
"PAD_ROTATION_HORIZONTAL",
|
|
542
|
+
Optional[Literal["R0", "MY", "R90", "MXR90", "R180", "MX", "R270", "MYR90"]],
|
|
543
|
+
"Rotation to apply to the horizontal sites to ensure pads are placed correctly.",
|
|
544
|
+
default="R0",
|
|
545
|
+
pdk=True,
|
|
546
|
+
),
|
|
547
|
+
Variable(
|
|
548
|
+
"PAD_ROTATION_VERTICAL",
|
|
549
|
+
Optional[Literal["R0", "MY", "R90", "MXR90", "R180", "MX", "R270", "MYR90"]],
|
|
550
|
+
"Rotation to apply to the vertical sites to ensure pads are placed correctly.",
|
|
551
|
+
default="R0",
|
|
552
|
+
pdk=True,
|
|
553
|
+
),
|
|
554
|
+
Variable(
|
|
555
|
+
"PAD_ROTATION_CORNER",
|
|
556
|
+
Optional[Literal["R0", "MY", "R90", "MXR90", "R180", "MX", "R270", "MYR90"]],
|
|
557
|
+
"Rotation to apply to the corner sites to ensure pads are placed correctly.",
|
|
558
|
+
default="R0",
|
|
559
|
+
pdk=True,
|
|
560
|
+
),
|
|
538
561
|
]
|
|
539
562
|
|
|
540
563
|
flow_common_variables = pdk_variables + scl_variables + option_variables + pad_variables
|
|
@@ -203,9 +203,9 @@ def migrate_old_config(config: Mapping[str, Any]) -> Dict[str, Any]:
|
|
|
203
203
|
corner = f"*_{pvt}"
|
|
204
204
|
lib_sta[corner] = lib_list
|
|
205
205
|
|
|
206
|
-
if (
|
|
207
|
-
|
|
208
|
-
)
|
|
206
|
+
if (new["PDK"].startswith("sky130") or new["PDK"].startswith("gf180mcu")) and (
|
|
207
|
+
"LIB" not in config and "CELL_LIBS" not in config
|
|
208
|
+
):
|
|
209
209
|
process_sta("LIB_SYNTH")
|
|
210
210
|
process_sta("LIB_SLOWEST")
|
|
211
211
|
process_sta("LIB_FASTEST")
|
|
@@ -56,34 +56,37 @@ proc read_pad_lef {} {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
proc
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
proc _read_gds {env_name} {
|
|
60
|
+
# Pre-check
|
|
61
|
+
if { ![info exist ::env($env_name)] } {
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Save options
|
|
66
|
+
set old [list]
|
|
67
|
+
lappend old [gds rescale]
|
|
68
|
+
lappend old [gds readonly]
|
|
62
69
|
gds rescale false
|
|
63
70
|
gds readonly true
|
|
64
|
-
|
|
71
|
+
|
|
72
|
+
# Read GDS
|
|
73
|
+
set gds_files_in $::env($env_name)
|
|
65
74
|
foreach gds_file $gds_files_in {
|
|
66
75
|
puts "> gds read $gds_file"
|
|
67
76
|
gds read $gds_file
|
|
68
77
|
}
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
|
|
79
|
+
# Restore options
|
|
80
|
+
gds rescale [lindex $old 0]
|
|
81
|
+
gds readonly [lindex $old 1]
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
proc read_pdk_gds {} {
|
|
85
|
+
_read_gds CELL_GDS
|
|
71
86
|
}
|
|
72
87
|
|
|
73
88
|
proc read_macro_gds {} {
|
|
74
|
-
|
|
75
|
-
set old_readonly [gds readonly]
|
|
76
|
-
gds rescale false
|
|
77
|
-
gds readonly true
|
|
78
|
-
if { [info exist ::env(MACRO_GDS_FILES)] } {
|
|
79
|
-
set gds_files_in $::env(MACRO_GDS_FILES)
|
|
80
|
-
foreach gds_file $gds_files_in {
|
|
81
|
-
puts "> gds read $gds_file"
|
|
82
|
-
gds read $gds_file
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
gds rescale $old_rescale
|
|
86
|
-
gds readonly $old_readonly
|
|
89
|
+
_read_gds MACRO_GDS_FILES
|
|
87
90
|
}
|
|
88
91
|
|
|
89
92
|
proc read_macro_gds_blackbox {} {
|
|
@@ -104,35 +107,11 @@ proc read_macro_gds_blackbox {} {
|
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
proc read_extra_gds {} {
|
|
107
|
-
|
|
108
|
-
set old_readonly [gds readonly]
|
|
109
|
-
gds rescale false
|
|
110
|
-
gds readonly true
|
|
111
|
-
if { [info exist ::env(EXTRA_GDS)] } {
|
|
112
|
-
set gds_files_in $::env(EXTRA_GDS)
|
|
113
|
-
foreach gds_file $gds_files_in {
|
|
114
|
-
puts "> gds read $gds_file"
|
|
115
|
-
gds read $gds_file
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
gds rescale $old_rescale
|
|
119
|
-
gds readonly $old_readonly
|
|
110
|
+
_read_gds EXTRA_GDS
|
|
120
111
|
}
|
|
121
112
|
|
|
122
113
|
proc read_pad_gds {} {
|
|
123
|
-
|
|
124
|
-
set old_readonly [gds readonly]
|
|
125
|
-
gds rescale false
|
|
126
|
-
gds readonly true
|
|
127
|
-
if { [info exist ::env(PAD_GDS)] } {
|
|
128
|
-
set gds_files_in $::env(PAD_GDS)
|
|
129
|
-
foreach gds_file $gds_files_in {
|
|
130
|
-
puts "> gds read $gds_file"
|
|
131
|
-
gds read $gds_file
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
gds rescale $old_rescale
|
|
135
|
-
gds readonly $old_readonly
|
|
114
|
+
_read_gds PAD_GDS
|
|
136
115
|
}
|
|
137
116
|
|
|
138
117
|
proc read_def {} {
|
|
@@ -32,6 +32,10 @@ if { [info exists ::env(MAGIC_DRC_MAGLEFS)] } {
|
|
|
32
32
|
gds noduplicates true
|
|
33
33
|
gds readonly true
|
|
34
34
|
|
|
35
|
+
# Enable maskhints so that DRC rules against generated layers are run
|
|
36
|
+
# against the closest possible version to what's actually in the GDS
|
|
37
|
+
gds maskhints true
|
|
38
|
+
|
|
35
39
|
# Flatten cells
|
|
36
40
|
if { [info exists ::env(MAGIC_GDS_FLATGLOB)] } {
|
|
37
41
|
foreach {gds_flatglob} $::env(MAGIC_GDS_FLATGLOB) {
|
|
@@ -235,13 +235,6 @@ proc read_timing_info {args} {
|
|
|
235
235
|
read_liberty -corner $corner_name $extra_lib
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
|
-
|
|
239
|
-
if { [info exists ::env(PAD_LIBS) ] } {
|
|
240
|
-
foreach lib $::env(PAD_LIBS) {
|
|
241
|
-
puts "Reading gpio pad timing for the '$corner_name' corner at '$lib'…"
|
|
242
|
-
read_liberty -corner $corner_name $lib
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
238
|
|
|
246
239
|
set blackbox_wildcard {/// sta-blackbox}
|
|
247
240
|
foreach nl $::env(_CURRENT_CORNER_NETLISTS) {
|
|
@@ -343,13 +336,6 @@ proc read_pnr_libs {args} {
|
|
|
343
336
|
read_liberty -corner $corner_name $extra_lib
|
|
344
337
|
}
|
|
345
338
|
}
|
|
346
|
-
|
|
347
|
-
if { [info exists ::env(PAD_LIBS) ] } {
|
|
348
|
-
foreach pad_lib $::env(PAD_LIBS) {
|
|
349
|
-
puts "Reading gpio pad timing library for the '$corner_name' corner at '$pad_lib'…"
|
|
350
|
-
read_liberty -corner $corner_name $pad_lib
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
339
|
}
|
|
354
340
|
}
|
|
355
341
|
|
|
@@ -74,7 +74,10 @@ make_io_sites \
|
|
|
74
74
|
-horizontal_site $::env(PAD_SITE_NAME) \
|
|
75
75
|
-vertical_site $::env(PAD_SITE_NAME) \
|
|
76
76
|
-corner_site $::env(PAD_CORNER_SITE_NAME) \
|
|
77
|
-
-offset $::env(PAD_EDGE_SPACING)
|
|
77
|
+
-offset $::env(PAD_EDGE_SPACING) \
|
|
78
|
+
-rotation_horizontal $::env(PAD_ROTATION_HORIZONTAL) \
|
|
79
|
+
-rotation_vertical $::env(PAD_ROTATION_VERTICAL) \
|
|
80
|
+
-rotation_corner $::env(PAD_ROTATION_CORNER)
|
|
78
81
|
|
|
79
82
|
set sides {PAD_SOUTH PAD_EAST PAD_NORTH PAD_WEST}
|
|
80
83
|
set vertical_sides [list PAD_EAST PAD_WEST]
|
|
@@ -150,7 +153,7 @@ foreach side $sides {
|
|
|
150
153
|
# For all instances
|
|
151
154
|
foreach inst_name $::env($side) {
|
|
152
155
|
if { [set inst [$block findInst $inst_name]] == "NULL" } {
|
|
153
|
-
puts stderr "\[ERROR\] No instance $
|
|
156
|
+
puts stderr "\[ERROR\] No instance $inst_name found."
|
|
154
157
|
exit 1
|
|
155
158
|
}
|
|
156
159
|
set master_name [[$inst getMaster] getName]
|
|
@@ -139,6 +139,7 @@ if { $::env(PDN_CORE_RING) == 1 } {
|
|
|
139
139
|
append_if_flag arg_list PDN_CORE_RING_ALLOW_OUT_OF_DIE -allow_out_of_die
|
|
140
140
|
append_if_flag arg_list PDN_CORE_RING_CONNECT_TO_PADS -connect_to_pads
|
|
141
141
|
append_if_equals arg_list PDN_EXTEND_TO "boundary" -extend_to_boundary
|
|
142
|
+
append_if_exists_argument arg_list PDN_CORE_RING_CONNECT_TO_PAD_LAYERS -connect_to_pad_layers
|
|
142
143
|
|
|
143
144
|
set pdn_core_vertical_layer $::env(PDN_VERTICAL_LAYER)
|
|
144
145
|
set pdn_core_horizontal_layer $::env(PDN_HORIZONTAL_LAYER)
|
|
@@ -263,6 +263,12 @@ pdn_variables = [
|
|
|
263
263
|
default=False,
|
|
264
264
|
pdk=True,
|
|
265
265
|
),
|
|
266
|
+
Variable(
|
|
267
|
+
"PDN_CORE_RING_CONNECT_TO_PAD_LAYERS",
|
|
268
|
+
Optional[List[str]],
|
|
269
|
+
"Restrict the pad pins layers to this list.",
|
|
270
|
+
pdk=True,
|
|
271
|
+
),
|
|
266
272
|
Variable(
|
|
267
273
|
"PDN_CORE_RING_ALLOW_OUT_OF_DIE",
|
|
268
274
|
bool,
|
|
@@ -972,7 +972,8 @@ class CellFrequencyTables(OdbpyStep):
|
|
|
972
972
|
kwargs, env = self.extract_env(kwargs)
|
|
973
973
|
|
|
974
974
|
env_copy = env.copy()
|
|
975
|
-
lib_list = self.toolbox.filter_views(self.config, self.config["
|
|
975
|
+
lib_list = self.toolbox.filter_views(self.config, self.config["CELL_LIBS"])
|
|
976
|
+
lib_list += self.toolbox.filter_views(self.config, self.config["PAD_LIBS"])
|
|
976
977
|
env_copy["_PNR_LIBS"] = TclStep.value_to_tcl(lib_list)
|
|
977
978
|
super().run_subprocess(
|
|
978
979
|
[
|
|
@@ -317,7 +317,8 @@ class OpenROADStep(TclStep):
|
|
|
317
317
|
def prepare_env(self, env: dict, state: State) -> dict:
|
|
318
318
|
env = super().prepare_env(env, state)
|
|
319
319
|
|
|
320
|
-
lib_list = self.toolbox.filter_views(self.config, self.config["
|
|
320
|
+
lib_list = self.toolbox.filter_views(self.config, self.config["CELL_LIBS"])
|
|
321
|
+
lib_list += self.toolbox.filter_views(self.config, self.config["PAD_LIBS"])
|
|
321
322
|
lib_list += self.toolbox.get_macro_views(self.config, DesignFormat.LIB)
|
|
322
323
|
|
|
323
324
|
env["_SDC_IN"] = self.config["PNR_SDC_FILE"] or self.config["FALLBACK_SDC"]
|
|
@@ -2239,7 +2240,8 @@ class IRDropReport(OpenROADStep):
|
|
|
2239
2240
|
elif len(spefs_in) < 1:
|
|
2240
2241
|
raise StepException("No SPEF file found for the default corner.")
|
|
2241
2242
|
|
|
2242
|
-
libs_in = self.toolbox.filter_views(self.config, self.config["
|
|
2243
|
+
libs_in = self.toolbox.filter_views(self.config, self.config["CELL_LIBS"])
|
|
2244
|
+
libs_in += self.toolbox.filter_views(self.config, self.config["PAD_LIBS"])
|
|
2243
2245
|
|
|
2244
2246
|
if self.config["VSRC_LOC_FILES"] is None:
|
|
2245
2247
|
self.warn(
|
|
@@ -294,9 +294,13 @@ class VerilogStep(PyosysStep):
|
|
|
294
294
|
|
|
295
295
|
blackbox_models = []
|
|
296
296
|
scl_lib_list = self.toolbox.filter_views(
|
|
297
|
-
self.config, self.config["
|
|
297
|
+
self.config, self.config["CELL_LIBS"], self.config.get("SYNTH_CORNER")
|
|
298
|
+
)
|
|
299
|
+
pad_lib_list = self.toolbox.filter_views(
|
|
300
|
+
self.config, self.config["PAD_LIBS"], self.config.get("SYNTH_CORNER")
|
|
298
301
|
)
|
|
299
302
|
|
|
303
|
+
# Try your best to use powered blackbox models if power_defines is true
|
|
300
304
|
if self.power_defines:
|
|
301
305
|
if self.config["CELL_VERILOG_MODELS"] is not None:
|
|
302
306
|
blackbox_models.extend(
|
|
@@ -317,7 +321,8 @@ class VerilogStep(PyosysStep):
|
|
|
317
321
|
]
|
|
318
322
|
)
|
|
319
323
|
else:
|
|
320
|
-
|
|
324
|
+
# Fall back to scl_lib_list and pad_lib_list if you cant
|
|
325
|
+
blackbox_models.extend(str(f) for f in scl_lib_list + pad_lib_list)
|
|
321
326
|
|
|
322
327
|
# Priorities from higher to lower
|
|
323
328
|
format_list = (
|
|
@@ -352,7 +357,7 @@ class VerilogStep(PyosysStep):
|
|
|
352
357
|
excluded_cells.update(process_list_file(self.config["PNR_EXCLUDED_CELL_FILE"]))
|
|
353
358
|
|
|
354
359
|
libs_synth = self.toolbox.remove_cells_from_lib(
|
|
355
|
-
frozenset([str(lib) for lib in scl_lib_list]),
|
|
360
|
+
frozenset([str(lib) for lib in scl_lib_list + pad_lib_list]),
|
|
356
361
|
excluded_cells=frozenset(excluded_cells),
|
|
357
362
|
)
|
|
358
363
|
extra_path = os.path.join(self.step_dir, "extra.json")
|
|
@@ -69,7 +69,8 @@ def _generate_read_deps(
|
|
|
69
69
|
f"lappend ::_synlig_defines {TclUtils.escape(f'+define+{define}')}\n"
|
|
70
70
|
)
|
|
71
71
|
|
|
72
|
-
scl_lib_list = toolbox.filter_views(config, config["
|
|
72
|
+
scl_lib_list = toolbox.filter_views(config, config["CELL_LIBS"])
|
|
73
|
+
pad_lib_list = toolbox.filter_views(config, config["PAD_LIBS"])
|
|
73
74
|
|
|
74
75
|
if power_defines:
|
|
75
76
|
if power_define := config.get(
|
|
@@ -94,8 +95,8 @@ def _generate_read_deps(
|
|
|
94
95
|
)
|
|
95
96
|
commands += f"read_verilog -sv -lib {pad_blackbox_models}\n"
|
|
96
97
|
else:
|
|
97
|
-
# Fall back to scl_lib_list if you cant
|
|
98
|
-
for lib in scl_lib_list:
|
|
98
|
+
# Fall back to scl_lib_list and pad_lib_list if you cant
|
|
99
|
+
for lib in scl_lib_list + pad_lib_list:
|
|
99
100
|
lib_str = TclUtils.escape(str(lib))
|
|
100
101
|
commands += (
|
|
101
102
|
f"read_liberty -lib -ignore_miss_dir -setattr blackbox {lib_str}\n"
|
|
@@ -106,7 +107,7 @@ def _generate_read_deps(
|
|
|
106
107
|
excluded_cells.update(process_list_file(config["PNR_EXCLUDED_CELL_FILE"]))
|
|
107
108
|
|
|
108
109
|
lib_synth = toolbox.remove_cells_from_lib(
|
|
109
|
-
frozenset([str(lib) for lib in scl_lib_list]),
|
|
110
|
+
frozenset([str(lib) for lib in scl_lib_list + pad_lib_list]),
|
|
110
111
|
excluded_cells=frozenset(excluded_cells),
|
|
111
112
|
)
|
|
112
113
|
if tcl:
|
|
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.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/SPM_example.v
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/config-tut.json
RENAMED
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/config.json
RENAMED
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/defines.v
RENAMED
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/examples/spm-user_project_wrapper/template.def
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/klayout/xml_drc_report_to_json.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/odbpy/check_antenna_properties.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
|
|
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.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_layer_adjustments.tcl
RENAMED
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_power_nets.tcl
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/common/set_routing_layers.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/repair_design_postgrt.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.2 → librelane-3.1.0.dev1}/librelane/scripts/openroad/sta/check_macro_instances.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
|
|
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
|