diff --git a/hammer/technology/sky130/README.md b/hammer/technology/sky130/README.md index 9128a382b..d6ac0bdaa 100644 --- a/hammer/technology/sky130/README.md +++ b/hammer/technology/sky130/README.md @@ -47,6 +47,62 @@ Note that the various configurations of the SRAMs available are encoded in the f To modify this file to include different configurations, or switch to using the OpenRAM SRAMs, navigate to ``./extra/[sram22|openram]`` and run the script ``./sram-cache-gen.py`` for usage information. +IO Library +---------- + +The IO ring required by efabless for MPW/ChipIgnite can be created in Innovus using the `sky130_fd_io` and `sky130_ef_io `IO cell libraries. Here are the steps to use them: + +1. `extra/efabless_template.io` is a template IO file. You should modify this by replacing the ``s with the netlist paths to your GPIO & analog pads. **DO NOT MODIFY ANY POSITIONS OR REPLACE CLAMP CELLS WITH IO CELLS**. + + a. For pad assignment: the ordering in the instance lists are from left to right (for top/bottom edges) and **bottom to top (for left/right edges)**. + + b. Refer to [this documentation](https://skywater-pdk.readthedocs.io/en/main/contents/libraries/sky130_fd_io/docs/user_guide.html) for how to configure the pins of the IO cells (not exhaustive). + + c. Your chip reset signal must go thru the `xres4v2` cell. Since this is in your netlist, you must remove the `cell=...` instantiation from your IO file (it is only in the template for clarity) and update the inst name. Otherwise a separate instance will be placed instead. + + d. The `ENABLE_INP_H` pin must be hard-tied to `TIE_HI_ESD` or `TIE_LO_ESD`. Since this is at a higher voltage, verify that this is routed as a wire only (no buffers can be inserted). + + e. `ENABLE_H` must be low at chip startup before going high. Absent using the power detector cell from the NDA IO library, you may elect to connect this to a reset signal. + + f. This template file does not contain dedicated clamps for the `VSWITCH` or `VCCHIB` supplies (following Caravel). EFabless provides a `sky130_ef_io__connect_vcchib_vccd_and_vswitch_vddio_slice_20um` slice in `open_pdks` that replaces a standard 20um spacer with a slice that connects `VCCHIB` and `VCCD` together, and `VSWITCH` and `VDDIO` together. Note that this slice cannot be placed immediately to the right (in the R0 orientation) of a `*_clamped3_pad` cell, because otherwise they *will* create a supply short. The template IO file contains normal 20um spacer slices explicitly placed at these critical locations, and the provided hook instantiates the `connect` slice in place of the standard 20um spacer. This can be modified if desired. Caravel distributes the `*connect*` slices across the bottom edge of the padframe. + +2. Then, in your design YAML file, specify your IO file with the following. The top-level constraint must be exactly as below: + + ```yaml + technology.sky130.io_file: + technology.sky130.io_file_meta: prependlocal + + path: Top + type: toplevel + x: 0 + y: 0 + width: 3588 + height: 5188 + margins: + left: 249.78 + right: 249.78 + top: 252.08 + bottom: 252.08 + ``` + +3. In your CLIDriver, you must import the following hook from the tech plugin and insert it as a `post_insertion_hook` after `floorplan_design`. + + ```python + from hammer.technology.sky130 import efabless_ring_io + ``` + + In addition, to ensure ties to `TIE_HI_ESD` / `TIE_LO_ESD` are preserved during synthesis, a `post_insertion_hook` to `init_environment` should be added to `dont_touch` the IO cells + + ```python + def donttouch_iocells(x: HammerTool) -> bool: + x.append('set_dont_touch [get_db insts -if {.base_cell.name == sky130_ef_io__*}] true') + return True + ``` + +4. If you want to use the NDA s8iom0s8 library, you must include the `s8io.yml` file with `-p` on the `hammer-vlsi` command line, and then change the cells to that library in the IO file. Net names in the hook above will need to be lower-cased. + +5. DRC requires a rectangle of `areaid.lowTapDensity` (GDS layer 81/14) around the core area to check latchup correctly. Currently, this is not yet implemented in Hammer, and will need to be added manually in a GDS editor after GDS streamout. + NDA Files --------- The NDA version of the Sky130 PDK is only required for Siemens Calibre to perform DRC/LVS signoff with the commercial VLSI flow. @@ -63,8 +119,6 @@ We use the Calibre decks in the ``s8`` PDK, version ``V2.0.1``, see [here for the DRC deck path](https://github.com/ucb-bar/hammer/blob/612b4b662a774b1cab5cf25e8f41c6a771388e47/hammer/technology/sky130/sky130.tech.json#L16) and [here for the LVS deck path](https://github.com/ucb-bar/hammer/blob/612b4b662a774b1cab5cf25e8f41c6a771388e47/hammer/technology/sky130/sky130.tech.json#L24). - - Resources --------- The good thing about this process being open-source is that most questions about the process are answerable through a google search. @@ -195,5 +249,3 @@ make install This generates all the Sky130 PDK files and installs them to `$PDK_ROOT/share/pdk/sky130A` - - diff --git a/hammer/technology/sky130/__init__.py b/hammer/technology/sky130/__init__.py index 83cf28b97..9587e2363 100644 --- a/hammer/technology/sky130/__init__.py +++ b/hammer/technology/sky130/__init__.py @@ -12,7 +12,8 @@ import hammer.tech from hammer.tech import HammerTechnology -from hammer.vlsi import HammerTool, HammerPlaceAndRouteTool, TCLTool, HammerDRCTool, HammerLVSTool, HammerToolHookAction +from hammer.vlsi import HammerTool, HammerPlaceAndRouteTool, TCLTool, HammerDRCTool, HammerLVSTool, \ + HammerToolHookAction, HierarchicalMode import hammer.tech.specialcells as specialcells from hammer.tech.specialcells import CellType, SpecialCell @@ -31,6 +32,7 @@ def post_install_script(self) -> None: self.setup_verilog() self.setup_techlef() self.setup_lvs_deck() + self.setup_io_lefs() print('Loaded Sky130 Tech') @@ -160,6 +162,41 @@ def setup_lvs_deck(self) -> None: df.write(matcher.sub("", sf.read())) df.write(LVS_DECK_INSERT_LINES) + # Power pins for clamps must be CLASS CORE + # connect/disconnect spacers must be CLASS PAD SPACER, not AREAIO + def setup_io_lefs(self) -> None: + sky130A_path = Path(self.get_setting('technology.sky130.sky130A')) + source_path = sky130A_path / 'libs.ref' / 'sky130_fd_io' / 'lef' / 'sky130_ef_io.lef' + if not source_path.exists(): + raise FileNotFoundError(f"IO LEF not found: {source_path}") + + cache_tech_dir_path = Path(self.cache_dir) + os.makedirs(cache_tech_dir_path, exist_ok=True) + dest_path = cache_tech_dir_path / 'sky130_ef_io.lef' + + with open(source_path, 'r') as sf: + with open(dest_path, 'w') as df: + self.logger.info("Modifying IO LEF: {} -> {}".format + (source_path, dest_path)) + sl = sf.readlines() + for net in ['VCCD1', 'VSSD1']: + start = [idx for idx,line in enumerate(sl) if 'PIN ' + net in line] + end = [idx for idx,line in enumerate(sl) if 'END ' + net in line] + intervals = zip(start, end) + for intv in intervals: + port_idx = [idx for idx,line in enumerate(sl[intv[0]:intv[1]]) if 'PORT' in line] + for idx in port_idx: + sl[intv[0]+idx]=sl[intv[0]+idx].replace('PORT', 'PORT\n CLASS CORE ;') + for cell in [ + 'sky130_ef_io__connect_vcchib_vccd_and_vswitch_vddio_slice_20um', + 'sky130_ef_io__disconnect_vccd_slice_5um', + 'sky130_ef_io__disconnect_vdda_slice_5um', + ]: + # force class to spacer + start = [idx for idx, line in enumerate(sl) if f'MACRO {cell}' in line] + sl[start[0] + 1] = sl[start[0] + 1].replace('AREAIO', 'SPACER') + df.writelines(sl) + def get_tech_par_hooks(self, tool_name: str) -> List[HammerToolHookAction]: hooks = { "innovus": [ @@ -285,6 +322,13 @@ def sky130_innovus_settings(ht: HammerTool) -> bool: set_db route_design_detail_use_multi_cut_via_effort medium ''' ) + if ht.hierarchical_mode in {HierarchicalMode.Top, HierarchicalMode.Flat}: + ht.append( + ''' +# For top module: snap die to manufacturing grid, not placement grid +set_db floorplan_snap_die_grid manufacturing + ''' + ) return True def sky130_connect_nets(ht: HammerTool) -> bool: @@ -319,6 +363,49 @@ def sky130_add_endcaps(ht: HammerTool) -> bool: ) return True +def efabless_ring_io(ht: HammerTool) -> bool: + assert isinstance(ht, HammerPlaceAndRouteTool), "IO ring instantiation only for par" + assert isinstance(ht, TCLTool), "IO ring instantiation can only run on TCL tools" + io_file = ht.get_setting("technology.sky130.io_file") + ht.append(f"read_io_file {io_file} -no_die_size_adjust") + p_nets = list(map(lambda s: s.name, ht.get_independent_power_nets())) + g_nets = list(map(lambda s: s.name, ht.get_independent_ground_nets())) + ht.append(f''' +# Global net connections +connect_global_net VDDA -type pg_pin -pin_base_name VDDA -verbose +connect_global_net VDDIO -type pg_pin -pin_base_name VDDIO* -verbose +connect_global_net {p_nets[0]} -type pg_pin -pin_base_name VCCD* -verbose +connect_global_net {p_nets[0]} -type pg_pin -pin_base_name VCCHIB -verbose +connect_global_net {p_nets[0]} -type pg_pin -pin_base_name VSWITCH -verbose +connect_global_net {g_nets[0]} -type pg_pin -pin_base_name VSSA -verbose +connect_global_net {g_nets[0]} -type pg_pin -pin_base_name VSSIO* -verbose +connect_global_net {g_nets[0]} -type pg_pin -pin_base_name VSSD* -verbose + ''') + ht.append(''' +# IO fillers +set io_fillers {sky130_ef_io__connect_vcchib_vccd_and_vswitch_vddio_slice_20um sky130_ef_io__com_bus_slice_10um sky130_ef_io__com_bus_slice_5um sky130_ef_io__com_bus_slice_1um} +add_io_fillers -prefix IO_FILLER -io_ring 1 -cells $io_fillers -side top -filler_orient r0 +add_io_fillers -prefix IO_FILLER -io_ring 1 -cells $io_fillers -side right -filler_orient r270 +add_io_fillers -prefix IO_FILLER -io_ring 1 -cells $io_fillers -side bottom -filler_orient r180 +add_io_fillers -prefix IO_FILLER -io_ring 1 -cells $io_fillers -side left -filler_orient r90 +# Fix placement +set io_filler_insts [get_db insts IO_FILLER_*] +set_db $io_filler_insts .place_status fixed + ''') + # An offset of 40um is used to place the core ring inside the core area. It + # can be decreased down to 5um as desired, but will require additional + # routing / settings to connect the core power stripes to the ring. + ht.append(f''' +# Core ring +add_rings -follow io -layer met5 -nets {{ {p_nets[0]} {g_nets[0]} }} -offset 40 -width 13 -spacing 3 +route_special -connect pad_pin -nets {{ {p_nets[0]} {g_nets[0]} }} -detailed_log + ''') + ht.append(''' +# Prevent buffering on TIE_LO_ESD and TIE_HI_ESD +set_dont_touch [get_db [get_db pins -if {.name == *TIE*ESD}] .net] + ''') + return True + def drc_blackbox_srams(ht: HammerTool) -> bool: assert isinstance(ht, HammerDRCTool), "Exlude SRAMs only in DRC" drc_box = '' diff --git a/hammer/technology/sky130/defaults.yml b/hammer/technology/sky130/defaults.yml index 5311dc06b..7f6250683 100644 --- a/hammer/technology/sky130/defaults.yml +++ b/hammer/technology/sky130/defaults.yml @@ -26,6 +26,9 @@ technology.sky130: drc_blackbox_srams: false lvs_blackbox_srams: false + + io_file: "extra/efabless_template.io" # IO ring - take this template and modify for your own use + io_file_meta: prependlocal mentor.extra_env_vars_meta: lazydeepsubst # Mentor environment variables diff --git a/hammer/technology/sky130/defaults_types.yml b/hammer/technology/sky130/defaults_types.yml index 627a5ffdc..b43a22faa 100644 --- a/hammer/technology/sky130/defaults_types.yml +++ b/hammer/technology/sky130/defaults_types.yml @@ -20,3 +20,6 @@ technology.sky130: # Shouldn't need to change these pdk_home: Optional[str] lvs_deck_sources: Optional[list[str]] + + # Path to IO file + io_file: str diff --git a/hammer/technology/sky130/extra/efabless_template.io b/hammer/technology/sky130/extra/efabless_template.io new file mode 100644 index 000000000..524090739 --- /dev/null +++ b/hammer/technology/sky130/extra/efabless_template.io @@ -0,0 +1,124 @@ + +(globals + version = 3 + io_order = default +) +(row_margin + (top + (io_row ring_number = 1 margin = 0) + ) + (right + (io_row ring_number = 1 margin = 0) + ) + (bottom + (io_row ring_number = 1 margin = 0) + ) + (left + (io_row ring_number = 1 margin = 0) + ) +) +(iopad + (topleft + (locals ring_number = 1) + (inst name = "corner_topleft" orientation=R90 cell="sky130_ef_io__corner_pad") + ) + + (top + (locals ring_number = 1) + (inst name = "" orientation=R0 offset=381) + (inst name = "" orientation=R0 offset=638) + (inst name = "" orientation=R0 offset=895) + (inst name = "" orientation=R0 offset=1152) + (inst name = "" orientation=R0 offset=1410) + (inst name = "clamp_0" orientation=R0 cell="sky130_ef_io__vssio_hvc_clamped_pad" offset=1667) + (inst name = "" orientation=R0 offset=1919) + (inst name = "" orientation=R0 offset=2364) + (inst name = "" orientation=R0 offset=2621) + (inst name = "clamp_1" orientation=R0 cell="sky130_ef_io__vssa_hvc_clamped_pad" offset=2878) + (inst name = "" orientation=R0 offset=3130) + ) + + (topright + (locals ring_number = 1) + (inst name = "corner_topright" orientation=R0 cell="sky130_ef_io__corner_pad") + ) + + (right + (locals ring_number = 1) + (inst name = "" orientation=R270 offset=580) + (inst name = "" orientation=R270 offset=806) + (inst name = "" orientation=R270 offset=1031) + (inst name = "" orientation=R270 offset=1257) + (inst name = "" orientation=R270 offset=1482) + (inst name = "" orientation=R270 offset=1707) + (inst name = "" orientation=R270 offset=1933) + (inst name = "clamp_2" orientation=R270 cell="sky130_ef_io__vssa_hvc_clamped_pad" offset=2153) + (inst name = "clamp_3" orientation=R270 cell="sky130_ef_io__vssd_lvc_clamped3_pad" offset=2374) + (inst name = "clamp_4" orientation=R270 cell="sky130_ef_io__vdda_hvc_clamped_pad" offset=2594) + (inst name = "" orientation=R270 offset=2819) + (inst name = "" orientation=R270 offset=3045) + (inst name = "" orientation=R270 offset=3270) + (inst name = "" orientation=R270 offset=3496) + (inst name = "" orientation=R270 offset=3721) + (inst name = "" orientation=R270 offset=3946) + (inst name = "clamp_5" orientation=R270 cell="sky130_ef_io__vdda_hvc_clamped_pad" offset=4167) + (inst name = "" orientation=R270 offset=4392) + (inst name = "clamp_6" orientation=R270 cell="sky130_ef_io__vccd_lvc_clamped3_pad" offset=4613) + (inst name = "" orientation=R270 offset=4838) + (inst name = "IO_FILLER_MANUAL_E_1" orientation = R270 offset = 4593 cell = "sky130_ef_io__com_bus_slice_20um") + (inst name = "IO_FILLER_MANUAL_E_2" orientation = R270 offset = 2354 cell = "sky130_ef_io__com_bus_slice_20um") + ) + + (bottomright + (locals ring_number = 1) + (inst name = "corner_bottomright" orientation=R270 cell="sky130_ef_io__corner_pad") + ) + + (bottom + (locals ring_number = 1) + (inst name = "clamp_7" orientation=R180 cell="sky130_ef_io__vssa_hvc_clamped_pad" offset=469) + (inst name = "reset" orientation=R180 cell="sky130_fd_io__top_xres4v2" offset=738) + (inst name = "" orientation=R180 offset=1012) + (inst name = "clamp_8" orientation=R180 cell="sky130_ef_io__vssd_lvc_clamped_pad" offset=1281) + (inst name = "" orientation=R180 offset=1555) + (inst name = "" orientation=R180 offset=1829) + (inst name = "" orientation=R180 offset=2103) + (inst name = "" orientation=R180 offset=2377) + (inst name = "" orientation=R180 offset=2651) + (inst name = "clamp_9" orientation=R180 cell="sky130_ef_io__vssio_hvc_clamped_pad" offset=2920) + (inst name = "clamp_10" orientation=R180 cell="sky130_ef_io__vdda_hvc_clamped_pad" offset=3189) + ) + + (bottomleft + (locals ring_number = 1) + (inst name = "corner_bottomleft" orientation=R180 cell="sky130_ef_io__corner_pad") + ) + + (left + (locals ring_number = 1) + (inst name = "clamp_11" orientation=R90 cell="sky130_ef_io__vccd_lvc_clamped_pad" offset=340) + (inst name = "clamp_12" orientation=R90 cell="sky130_ef_io__vddio_hvc_clamped_pad" offset=551) + (inst name = "" orientation=R90 offset=908) + (inst name = "" orientation=R90 offset=1124) + (inst name = "" orientation=R90 offset=1340) + (inst name = "" orientation=R90 offset=1556) + (inst name = "" orientation=R90 offset=1772) + (inst name = "" orientation=R90 offset=1988) + (inst name = "clamp_13" orientation=R90 cell="sky130_ef_io__vssd_lvc_clamped3_pad" offset=2204) + (inst name = "clamp_14" orientation=R90 cell="sky130_ef_io__vdda_hvc_clamped_pad" offset=2415) + (inst name = "" orientation=R90 offset=2626) + (inst name = "" orientation=R90 offset=2842) + (inst name = "" orientation=R90 offset=3058) + (inst name = "" orientation=R90 offset=3274) + (inst name = "" orientation=R90 offset=3490) + (inst name = "" orientation=R90 offset=3706) + (inst name = "" orientation=R90 offset=3922) + (inst name = "clamp_15" orientation=R90 cell="sky130_ef_io__vssa_hvc_clamped_pad" offset=4138) + (inst name = "clamp_16" orientation=R90 cell="sky130_ef_io__vddio_hvc_clamped_pad" offset=4349) + (inst name = "clamp_17" orientation=R90 cell="sky130_ef_io__vccd_lvc_clamped3_pad" offset=4560) + (inst name = "" orientation=R90 offset=4771) + (inst name = "IO_FILLER_MANUAL_W_1" orientation = R90 offset = 415 cell = "sky130_ef_io__com_bus_slice_20um") + (inst name = "IO_FILLER_MANUAL_W_2" orientation = R90 offset = 2279 cell = "sky130_ef_io__com_bus_slice_20um") + (inst name = "IO_FILLER_MANUAL_W_3" orientation = R90 offset = 4635 cell = "sky130_ef_io__com_bus_slice_20um") + ) +) diff --git a/hammer/technology/sky130/extra/s8io.yml b/hammer/technology/sky130/extra/s8io.yml new file mode 100644 index 000000000..4e198b73c --- /dev/null +++ b/hammer/technology/sky130/extra/s8io.yml @@ -0,0 +1,168 @@ +vlsi.technology.extra_libraries_meta: [append, lazydeepsubst] +vlsi.technology.extra_libraries: +- library: + name: s8iom0s8_phys_only + gds_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/gds/s8iom0s8.gds + lef_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lef/s8iom0s8.lef + spice_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/cdl/ic6/s8iom0s8.cdl + provides: + - lib_type: iocell + +- library: + name: s8iom0s8_top_ground_hvc_wpad + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_ground_hvc_wpad.v + provides: + - lib_type: clamp + +- library: + name: s8iom0s8_top_power_hvc_wpad + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_power_hvc_wpad.v + provides: + - lib_type: clamp + +- library: + name: s8iom0s8_top_ground_lvc_wpad + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_ground_lvc_wpad.v + provides: + - lib_type: clamp + +- library: + name: s8iom0s8_top_power_lvc_wpad + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_power_lvc_wpad.v + provides: + - lib_type: clamp + +- library: + name: s8iom0s8_top_xres4v2_SS + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_xres4v2.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_top_xres4v2_ss_ss_1p60v_x_3p00v_100C.lib + corner: + nmos: slow + pmos: slow + temperature: 100 C + supplies: + VDD: 1.60 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_top_xres4v2_FF + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_xres4v2.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_top_xres4v2_ff_ff_1p95v_x_5p50v_n40C.lib + corner: + nmos: fast + pmos: fast + temperature: -40 C + supplies: + VDD: 1.95 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_top_xres4v2_TT + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_xres4v2.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_top_xres4v2_tt_tt_1p80v_x_3p30v_025C.lib + corner: + nmos: typical + pmos: typical + temperature: 25 C + supplies: + VDD: 1.80 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_analog_pad_SS + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_analog_pad.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_analog_pad_ss_1.60v_3.00v_100C.lib + corner: + nmos: slow + pmos: slow + temperature: 100 C + supplies: + VDD: 1.60 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_analog_pad_FF + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_analog_pad.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_analog_pad_ff_1.95v_5.50v_-40C.lib + corner: + nmos: fast + pmos: fast + temperature: -40 C + supplies: + VDD: 1.95 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_analog_pad_TT + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_analog_pad.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_analog_pad_tt_1.80v_3.30v_025C.lib + corner: + nmos: typical + pmos: typical + temperature: 25 C + supplies: + VDD: 1.80 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_top_gpiov2_SS + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_gpiov2.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_top_gpiov2_ss_ss_1p60v_x_3p00v_100C.lib + corner: + nmos: slow + pmos: slow + temperature: 100 C + supplies: + VDD: 1.60 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_top_gpiov2_FF + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_gpiov2.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_top_gpiov2_ff_ff_1p95v_x_5p50v_n40C.lib + corner: + nmos: fast + pmos: fast + temperature: -40 C + supplies: + VDD: 1.95 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT + +- library: + name: s8iom0s8_top_gpiov2_TT + verilog_sim: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/verilog/s8iom0s8_top_gpiov2.v + nldm_liberty_file: ${technology.sky130.sky130_nda}/s8iom0s8/V0.2.1/lib/s8iom0s8_top_gpiov2_tt_tt_1p80v_x_3p30v_025C.lib + corner: + nmos: typical + pmos: typical + temperature: 25 C + supplies: + VDD: 1.80 V + GND: 0 V + provides: + - lib_type: iocell + vt: RVT diff --git a/hammer/technology/sky130/extra/sky130-tech-gen-files/beginning_nda.json b/hammer/technology/sky130/extra/sky130-tech-gen-files/beginning_nda.json index 9d9674759..14dcab7be 100644 --- a/hammer/technology/sky130/extra/sky130-tech-gen-files/beginning_nda.json +++ b/hammer/technology/sky130/extra/sky130-tech-gen-files/beginning_nda.json @@ -16,15 +16,20 @@ "drc_decks": [ { "tool_name": "calibre", - "deck_name": "all_drc", + "deck_name": "calibre_drc", "path": "$SKY130_NDA/s8/V2.0.1/DRC/Calibre/s8_drcRules" + }, + { + "tool_name": "klayout", + "deck_name": "klayout_drc", + "path": "$SKY130A/libs.tech/klayout/drc/sky130A.lydrc" } ], "additional_drc_text": "", "lvs_decks": [ { "tool_name": "calibre", - "deck_name": "all_lvs", + "deck_name": "calibre_lvs", "old_path": "$SKY130_NDA/s8/V2.0.1/LVS/Calibre/lvsRules_s8", "path": "cache/lvsControlFile_s8" } @@ -41,4 +46,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/hammer/technology/sky130/extra/sky130-tech-gen.py b/hammer/technology/sky130/extra/sky130-tech-gen.py index b9c5c2979..a4ea1afbf 100755 --- a/hammer/technology/sky130/extra/sky130-tech-gen.py +++ b/hammer/technology/sky130/extra/sky130-tech-gen.py @@ -9,9 +9,10 @@ import sys import json import os +import re +import functools use_nda_files=True -library='sky130_fd_sc_hd' def main(args) -> int: if len(args) != 3: @@ -31,15 +32,18 @@ def main(args) -> int: data["dont_use_list"] = cells["dont_use_list"] data["special_cells"] = cells["special_cells"] + # Standard cells + library='sky130_fd_sc_hd' SKYWATER_LIBS = os.path.join('$SKY130A', 'libs.ref', library) LIBRARY_PATH = os.path.join( SKY130A, 'libs.ref', library, 'lib') lib_corner_files=os.listdir(LIBRARY_PATH) + lib_corner_files.sort() for cornerfilename in lib_corner_files: if (not (library in cornerfilename) ) : continue if ('ccsnoise' in cornerfilename): continue # ignore duplicate corner.lib/corner_ccsnoise.lib files tmp = cornerfilename.replace('.lib','') - if (tmp+'_ccsnoise.lib' in lib_corner_files): + if (tmp+'_ccsnoise.lib' in lib_corner_files): cornerfilename=tmp+'_ccsnoise.lib' # use ccsnoise version of lib file cornername = tmp.split('__')[1] @@ -75,7 +79,85 @@ def main(args) -> int: "provides": [ { "lib_type": "stdcell", - "vt": "RVT" + "vt": "RVT" + } + ] + } + + data["libraries"].append(lib_entry) + + # IO cells + library='sky130_fd_io' + SKYWATER_LIBS = os.path.join('$SKY130A', 'libs.ref', library) + LIBRARY_PATH = os.path.join( SKY130A, 'libs.ref', library, 'lib') + lib_corner_files=os.listdir(LIBRARY_PATH) + lib_corner_files.sort() + for cornerfilename in lib_corner_files: + # Skip versions with no internal power + if ('nointpwr' in cornerfilename) : continue + + tmp = cornerfilename.replace('.lib','') + # Split into cell, and corner strings + # Resulting list if only one ff/ss/tt in name: [, , , , ] + # Resulting list if ff_ff/ss_ss/tt_tt in name: [, , , , '', , , , ] + split_cell_corner = re.split('_(ff)|_(ss)|_(tt)', tmp) + cell_name = split_cell_corner[0] + process = split_cell_corner[1:-1] + temp_volt = split_cell_corner[-1].split('_')[1:] + + # Filter out cross corners (e.g ff_ss or ss_ff) + if len(process) > 3: + if not functools.reduce(lambda x,y: x and y, map(lambda p,q: p==q, process[0:3], process[4:]), True): + continue + # Determine actual corner + speed = next(c for c in process if c is not None).replace('_','') + if (speed == 'ff'): speed = 'fast' + if (speed == 'tt'): speed = 'typical' + if (speed == 'ss'): speed = 'slow' + + temp = temp_volt[0] + temp = temp.replace('n','-') + temp = temp.split('C')[0]+' C' + + vdd = ('.').join(temp_volt[1].split('v')) + ' V' + # Filter out IO/analog voltages that are not high voltage + if temp_volt[2].startswith('1'): continue + if len(temp_volt) == 4: + if temp_volt[3].startswith('1'): continue + + # gpiov2_pad_wrapped has separate GDS + if cell_name == 'sky130_ef_io__gpiov2_pad_wrapped': + file_lib = 'sky130_ef_io' + gds_file = cell_name + '.gds' + lef_file = 'cache/sky130_ef_io.lef' + elif 'sky130_ef_io' in cell_name: + file_lib = 'sky130_ef_io' + gds_file = file_lib + '.gds' + lef_file = 'cache/' + file_lib + '.lef' + else: + file_lib = library + gds_file = file_lib + '.gds' + lef_file = os.path.join(SKYWATER_LIBS,'lef', file_lib + '.lef') + + lib_entry = { + "nldm_liberty_file": os.path.join(SKYWATER_LIBS,'lib', cornerfilename), + "verilog_sim": os.path.join(SKYWATER_LIBS,'verilog', file_lib + '.v'), + "lef_file": lef_file, + "spice_file": os.path.join(SKYWATER_LIBS,'spice', file_lib + '.spice'), + "gds_file": os.path.join(SKYWATER_LIBS,'gds', gds_file), + "corner": { + "nmos": speed, + "pmos": speed, + "temperature": temp + }, + "supplies": { + "VDD": vdd, + "GND": "0 V" + }, + "provides": [ + { + "lib_type": cell_name, + "vt": "RVT" } ] } @@ -92,7 +174,7 @@ def main(args) -> int: with open(sys.argv[2], 'w') as f: json.dump(data, f, indent=2) - + return 0 if __name__ == '__main__': diff --git a/hammer/technology/sky130/sky130.tech.json b/hammer/technology/sky130/sky130.tech.json index 8bc1c077e..3841803b7 100644 --- a/hammer/technology/sky130/sky130.tech.json +++ b/hammer/technology/sky130/sky130.tech.json @@ -12,6 +12,7 @@ "path": "technology.sky130.sky130A" } ], + "layer_map_file": "$SKY130_NDA/s8/V2.0.1/VirtuosoOA/libs/technology_library/technology_library.layermap", "drc_decks": [ { "tool_name": "calibre", @@ -29,7 +30,7 @@ { "tool_name": "calibre", "deck_name": "calibre_lvs", - "old path": "$SKY130_NDA/s8/V2.0.1/LVS/Calibre/lvsRules_s8", + "old_path": "$SKY130_NDA/s8/V2.0.1/LVS/Calibre/lvsRules_s8", "path": "cache/lvsControlFile_s8" } ], @@ -395,6 +396,1414 @@ "vt": "RVT" } ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_tt_tt_025C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__gpiov2_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ff_ff_100C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io__gpiov2_pad_wrapped.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__gpiov2_pad_wrapped", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ff_ff_n40C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io__gpiov2_pad_wrapped.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__gpiov2_pad_wrapped", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_ss_ss_100C_1v60_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io__gpiov2_pad_wrapped.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__gpiov2_pad_wrapped", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__gpiov2_pad_wrapped_tt_tt_025C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io__gpiov2_pad_wrapped.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__gpiov2_pad_wrapped", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped3_pad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vccd_lvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vccd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vdda_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vdda_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vdda_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vdda_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vdda_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vddio_hvc_clamped_pad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vddio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vddio_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vddio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vddio_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vddio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vddio_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vddio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssa_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssa_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssa_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssa_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssa_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ff_100C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ff_n40C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_ss_100C_1v60_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_tt_025C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped3_pad_tt_100C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped3_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ff_100C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ff_n40C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_ss_100C_1v60_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_tt_025C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssd_lvc_clamped_pad_tt_100C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssd_lvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssio_hvc_clamped_pad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssio_hvc_clamped_pad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssio_hvc_clamped_pad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_ef_io__vssio_hvc_clamped_pad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_ef_io.v", + "lef_file": "cache/sky130_ef_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_ef_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_ef_io__vssio_hvc_clamped_pad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_gpiov2_ff_ff_100C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_gpiov2", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_gpiov2_ff_ff_n40C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_gpiov2", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_gpiov2_ss_ss_100C_1v60_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_gpiov2", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_gpiov2_tt_tt_025C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_gpiov2", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_hvc_wpad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_hvc_wpad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_hvc_wpad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_hvc_wpad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_ff_100C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_ff_n40C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_ss_100C_1v60_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_tt_025C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_ground_lvc_wpad_tt_100C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_ground_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_hvc_wpad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_hvc_wpad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_hvc_wpad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_hvc_wpad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_hvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_lvc_wpad_ff_100C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_lvc_wpad_ff_n40C_1v95_5v50_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_lvc_wpad_ss_100C_1v60_3v00_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_power_lvc_wpad_tt_025C_1v80_3v30_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_power_lvc_wpad", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ff_ff_100C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_xres4v2", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ff_ff_n40C_1v95_5v50.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "fast", + "pmos": "fast", + "temperature": "-40 C" + }, + "supplies": { + "VDD": "1.95 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_xres4v2", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_ss_ss_100C_1v60_3v00.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "slow", + "pmos": "slow", + "temperature": "100 C" + }, + "supplies": { + "VDD": "1.60 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_xres4v2", + "vt": "RVT" + } + ] + }, + { + "nldm_liberty_file": "$SKY130A/libs.ref/sky130_fd_io/lib/sky130_fd_io__top_xres4v2_tt_tt_025C_1v80_3v30.lib", + "verilog_sim": "$SKY130A/libs.ref/sky130_fd_io/verilog/sky130_fd_io.v", + "lef_file": "$SKY130A/libs.ref/sky130_fd_io/lef/sky130_fd_io.lef", + "spice_file": "$SKY130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice", + "gds_file": "$SKY130A/libs.ref/sky130_fd_io/gds/sky130_fd_io.gds", + "corner": { + "nmos": "typical", + "pmos": "typical", + "temperature": "025 C" + }, + "supplies": { + "VDD": "1.80 V", + "GND": "0 V" + }, + "provides": [ + { + "lib_type": "sky130_fd_io__top_xres4v2", + "vt": "RVT" + } + ] } ], "physical_only_cells_list": [ @@ -497,8 +1906,8 @@ "name": "li1", "index": 1, "direction": "vertical", - "pitch": 0.46, - "offset": 0.23, + "pitch": 0.34, + "offset": 0.17, "min_width": 0.17, "power_strap_widths_and_spacings": [ { @@ -614,4 +2023,4 @@ "y": 5.44 } ] -} +} \ No newline at end of file