From bc4e46651b1fb9267cd09dbfc31010a77f30944d Mon Sep 17 00:00:00 2001 From: Peter Gadfort Date: Sun, 20 Oct 2024 10:56:31 -0400 Subject: [PATCH 1/5] add initial batch of interposers --- README.md | 1 + lambdapdk/__init__.py | 4 +- lambdapdk/interposer/__init__.py | 104 ++++ lambdapdk/interposer/_generator.py | 513 ++++++++++++++++++ .../interposer/base/templates/README.md.j2 | 20 + lambdapdk/interposer/base/templates/drc.j2 | 76 +++ .../interposer/base/templates/layermap.j2 | 7 + lambdapdk/interposer/base/templates/lef.j2 | 28 + .../interposer/base/templates/pex.tcl.j2 | 12 + pyproject.toml | 3 +- tests/test_getters.py | 4 +- tests/test_paths.py | 5 +- 12 files changed, 770 insertions(+), 7 deletions(-) create mode 100644 lambdapdk/interposer/__init__.py create mode 100644 lambdapdk/interposer/_generator.py create mode 100644 lambdapdk/interposer/base/templates/README.md.j2 create mode 100644 lambdapdk/interposer/base/templates/drc.j2 create mode 100644 lambdapdk/interposer/base/templates/layermap.j2 create mode 100644 lambdapdk/interposer/base/templates/lef.j2 create mode 100644 lambdapdk/interposer/base/templates/pex.tcl.j2 diff --git a/README.md b/README.md index ae5bf3bc..d19db7a1 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Supported PDKs: * [Skywater130](lambdapdk/sky130/base/README.md) * [Global Foundries 180](lambdapdk/gf180/README.md) * [IHP 180](https://github.com/IHP-GmbH/IHP-Open-PDK) +* [interposer](lambdapdk/interposer/README.md) # License diff --git a/lambdapdk/__init__.py b/lambdapdk/__init__.py index 3e956bc2..bbcd6fda 100644 --- a/lambdapdk/__init__.py +++ b/lambdapdk/__init__.py @@ -20,10 +20,10 @@ def get_pdks(): Returns a list of pdk names in lambdapdk ''' - from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130 + from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130, interposer all_pdks = [] - for pdk_mod in [asap7, freepdk45, sky130, gf180, ihp130]: + for pdk_mod in [asap7, freepdk45, sky130, gf180, ihp130, interposer]: pdks = pdk_mod.setup() if not isinstance(pdks, (list, tuple)): pdks = [pdks] diff --git a/lambdapdk/interposer/__init__.py b/lambdapdk/interposer/__init__.py new file mode 100644 index 00000000..83297f81 --- /dev/null +++ b/lambdapdk/interposer/__init__.py @@ -0,0 +1,104 @@ +import os +import siliconcompiler +from lambdapdk import register_data_source + + +#################################################### +# PDK Setup +#################################################### +def setup(): + ''' + The interposer PDK is a passive technology with a number of + simulated stackups. The PDK contains enablement for place and + route tools and design rule signoff. + Note that this process design kit is provided as an academic + and research aid only and the resulting designs are not manufacturable. + ''' + + foundry = 'virtual' + process = 'interposer' + + libtype = 'none' + + node = 130 + # TODO: dummy numbers, only matter for cost estimation + wafersize = 300 + hscribe = 0.1 + vscribe = 0.1 + edgemargin = 2 + + pdkdir = os.path.join('lambdapdk', 'interposer', 'base') + + pdk = siliconcompiler.PDK(process, package='lambdapdk') + register_data_source(pdk) + + stackups = [] + for m in ("3ML", "4ML", "5ML"): + for w in ("0400", "0800", "2000", "0400_2000"): + stackups.append(f'{m}_{w}') + + # process name + pdk.set('pdk', process, 'foundry', foundry) + pdk.set('pdk', process, 'node', node) + pdk.set('pdk', process, 'version', 'v0.0.1') + pdk.set('pdk', process, 'stackup', stackups) + pdk.set('pdk', process, 'wafersize', wafersize) + pdk.set('pdk', process, 'edgemargin', edgemargin) + pdk.set('pdk', process, 'scribe', (hscribe, vscribe)) + + # APR Setup + for stackup in stackups: + for tool in ('openroad', 'klayout', 'magic'): + pdk.set('pdk', process, 'aprtech', tool, stackup, libtype, 'lef', + pdkdir + f'/apr/{stackup}.lef') + + pdk.set('pdk', process, 'minlayer', stackup, 'metal1') + pdk.set('pdk', process, 'maxlayer', stackup, 'topmetal') + + # DRC Runsets + pdk.set('pdk', process, 'drc', 'runset', 'magic', stackup, 'drc', + pdkdir + f'/setup/klayout/{stackup}.drc') + + # Layer map and display file + pdk.set('pdk', process, 'layermap', 'klayout', 'def', 'gds', stackup, + pdkdir + f'/apr/{stackup}.layermap') + pdk.set('pdk', process, 'display', 'klayout', stackup, + pdkdir + f'/setup/klayout/{stackup}.lyp') + + pdk.set('pdk', process, 'aprtech', 'openroad', stackup, libtype, 'fill', + pdkdir + f'/dfm/openroad/{stackup}.fill.json') + + # Openroad global routing grid derating + openroad_layer_adjustments = { + 'metal1': 0.20, + 'metal2': 0.20, + 'metal3': 0.20, + 'metal4': 0.20, + 'metal5': 0.20, + 'metal6': 0.20, + 'topmetal': 0.20 + } + for layer, adj in openroad_layer_adjustments.items(): + if layer != 'topmetal' and int(layer[-1]) >= int(stackup[0]): + continue + pdk.set('pdk', process, 'var', 'openroad', f'{layer}_adjustment', stackup, adj) + + pdk.set('pdk', process, 'var', 'openroad', 'rclayer_signal', stackup, 'metal2') + pdk.set('pdk', process, 'var', 'openroad', 'rclayer_clock', stackup, 'metal2') + + pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_vertical', stackup, 'metal2') + pdk.set('pdk', process, 'var', 'openroad', 'pin_layer_horizontal', stackup, 'metal3') + + # PEX + for corner in ["minimum", "typical", "maximum"]: + pdk.set('pdk', process, 'pexmodel', 'openroad', stackup, corner, + pdkdir + '/pex/openroad/' + stackup + '.' + corner + '.tcl') + + return pdk + + +######################### +if __name__ == "__main__": + pdk = setup() + pdk.write_manifest(f'{pdk.top()}.json') + pdk.check_filepaths() diff --git a/lambdapdk/interposer/_generator.py b/lambdapdk/interposer/_generator.py new file mode 100644 index 00000000..1e67388b --- /dev/null +++ b/lambdapdk/interposer/_generator.py @@ -0,0 +1,513 @@ +import json +import os + +from jinja2 import Environment, FileSystemLoader +import xml.etree.ElementTree as ET +import xml.dom.minidom + +template_dir = os.path.join(os.path.dirname(__file__), 'base', 'templates') +jinja2_env = Environment(loader=FileSystemLoader(template_dir)) + + +LICENSE = '''Copyright 2024 ZeroASIC Corp + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +''' + + +def __get_gds_type_name(gds_type): + if gds_type == 0: + return "" + if gds_type == 10: + return "pin" + if gds_type == 20: + return "text" + if gds_type == 30: + return "fill" + + raise ValueError(str(gds_type)) + + +def make_metal_layer( + name, + gds_mapping, + direction, + min_width, + min_spacing, + resistance_per_um, + capacitance_per_um, + max_width=None): + + layer = { + "name": name, + "type": "ROUTING", + "direction": direction, + "gds": gds_mapping, + "width": { + "min": min_width + }, + "spacing": { + "min": min_spacing + }, + "parasitic": { + "resistance": resistance_per_um, + "capacitance": capacitance_per_um + } + } + + if max_width: + layer["width"]["max"] = max_width + + return layer + + +def make_cut_layer( + name, + gds_mapping, + width, + min_spacing, + enclosure_bot, + enclosure_top, + resistance_per_cut): + + layer = { + "name": name, + "type": "CUT", + "gds": gds_mapping, + "width": { + "min": width + }, + "spacing": { + "min": min_spacing + }, + "enclosure": { + "bottom": enclosure_bot, + "top": enclosure_top + }, + "parasitic": { + "resistance": resistance_per_cut + } + } + + return layer + + +def build_tech(layer_count, name=None, width=None): + if not isinstance(width, (tuple, list)): + width = layer_count * [width] + + layers = [] + gds_layer = 1 + for n in range(layer_count): + layeridx = n + 1 + + metal_name = f"metal{layeridx}" + if layeridx == layer_count: + metal_name = "topmetal" + + layers.append( + make_metal_layer( + metal_name, + { + "number": gds_layer, + "types": { + "NET": 0, + "SPNET": 0, + "PIN": 10, + "LEFPIN": 10, + "FILL": 30 + }, + "name": { + "PIN": 20, + "SPNET": 20, + "TEXT": 20 + } + }, + "HORIZONTAL" if layeridx % 2 == 1 else "VERITCAL", + min_width=width[n], + min_spacing=width[n], + resistance_per_um=1.5000e-03, + capacitance_per_um=1.0000E-01, + max_width=5.0 + )) + + if layeridx != layer_count: + layers.append( + make_cut_layer( + f"via{layeridx}", + { + "number": gds_layer + 1, + "types": { + "NET": 0, + "SPNET": 0, + "PIN": 10, + "LEFPIN": 10, + "FILL": 30 + }, + "name": { + "PIN": 20, + "SPNET": 20, + "TEXT": 20 + } + }, + width[n] / 2, + width[n] / 2, + width[n] / 2, + width[n] / 2, + resistance_per_cut=10e-3 + )) + gds_layer += 2 + + if not name: + name = f"{layer_count}ML" + + tech = { + "name": name, + "grid": 0.005, + "layers": layers + } + + return tech + + +def build_layermap(tech, path): + layermap = [] + for layer in tech["layers"]: + name = layer["name"] + gds_number = layer["gds"]["number"] + + for map_type, gds_type in layer["gds"]["types"].items(): + layermap.append(( + name, + map_type, + str(gds_number), + str(gds_type) + )) + + for map_type, gds_type in layer["gds"]["name"].items(): + layermap.append(( + "NAME", + f"{name}/{map_type}", + str(gds_number), + str(gds_type) + )) + + os.makedirs(path, exist_ok=True) + with open(f'{path}/{tech["name"]}.layermap', 'w') as f: + f.write( + jinja2_env.get_template('layermap.j2').render( + license=LICENSE, + layers=layermap + ) + ) + f.write('\n') + + +def build_openroad_pex(tech, path): + corners = { + "maximum": 0.3, + "typical": 0.0, + "minimum": -0.3 + } + + for corner, adjustment in corners.items(): + metals = [] + vias = [] + for layer in tech["layers"]: + name = layer["name"] + + if layer["type"] == "ROUTING": + metals.append(( + name, + layer["parasitic"]["resistance"]*(1+adjustment), + layer["parasitic"]["capacitance"]*(1+adjustment) + )) + else: + vias.append(( + name, + layer["parasitic"]["resistance"]*(1+adjustment) + )) + + os.makedirs(path, exist_ok=True) + with open(f'{path}/{tech["name"]}.{corner}.tcl', 'w') as f: + f.write( + jinja2_env.get_template('pex.tcl.j2').render( + license=LICENSE, + metals=metals, + vias=vias + ) + ) + f.write('\n') + + +def build_klayout_drc(tech, path): + layers = [] + + for n, layer in enumerate(tech["layers"]): + layer_nm = { + "name": layer["name"], + "type": layer["type"], + "width": { + "min": int(layer["width"]["min"] * 1000) + }, + "spacing": { + "min": int(layer["spacing"]["min"] * 1000) + } + } + + if "max" in layer["width"]: + layer_nm["width"]["max"] = int(layer["width"]["max"] * 1000) + + if layer["type"] == "CUT": + layer_nm["enclosure"] = { + "bottom": ( + tech["layers"][n - 1]["name"], + int(layer["enclosure"]["bottom"] * 1000) + ), + "top": ( + tech["layers"][n + 1]["name"], + int(layer["enclosure"]["top"] * 1000) + ) + } + + gds_types = sorted(set(layer["gds"]["types"].values())) + layer_nm["gds"] = [ + (layer["gds"]["number"], gds_type) for gds_type in gds_types + ] + + layers.append(layer_nm) + + os.makedirs(path, exist_ok=True) + with open(f'{path}/{tech["name"]}.drc', 'w') as f: + f.write( + jinja2_env.get_template('drc.j2').render( + license=LICENSE, + grid=int(tech["grid"] * 1000), + layers=layers + ) + ) + f.write('\n') + + +def build_klayout_layer_properties(tech, path): + colors = [ + "#ffc280", + "#ff9d9d", + "#ff80a8", + "#c080ff", + "#9580ff", + "#8086ff", + "#80a8ff", + "#ff0000", + "#ff0080", + "#ff00ff", + "#8000ff", + "#91ff00", + "#008000", + "#508000", + "#808000", + "#805000" + ] + patterns = [ + "I5", + "I9" + ] + + layeridx = 0 + + def make_layer(name, gds): + prop = ET.Element("properties") + + color = colors[layeridx % len(colors)] + pattern = patterns[layeridx % len(patterns)] + + for tag, value in [ + ("frame-color", color), + ("frame-brightness", "0"), + ("fill-color", color), + ("fill-brightness", "0"), + ("dither-pattern", pattern), + ("line-style", None), + ("value", "true"), + ("visible", "true"), + ("transparent", "false"), + ("width", "1"), + ("marked", "false"), + ("xfill", "false"), + ("animation", "0"), + ("name", name), + ("source", f"{name} {gds[0]}/{gds[1]}@1") + ]: + el = ET.Element(tag) + + if value is not None: + el.text = value + prop.append(el) + + return prop + + props = ET.Element("layer-properties") + for layer in tech["layers"]: + gds_types = sorted(set([*layer["gds"]["types"].values(), *layer["gds"]["name"].values()])) + for gds_type in gds_types: + name = layer["name"] + gds_name = __get_gds_type_name(gds_type) + if gds_type: + name += "." + gds_name + props.append(make_layer(name, (layer["gds"]["number"], gds_type))) + + layeridx += 1 + + props.insert(0, ET.Comment(f"\n{LICENSE}")) + + os.makedirs(path, exist_ok=True) + with open(f'{path}/{tech["name"]}.lyp', 'w') as f: + f.write( + xml.dom.minidom.parseString( + ET.tostring(props)).toprettyxml(indent=" ")) + + +def build_lef(tech, path): + vias = [] + for n, layer in enumerate(tech["layers"]): + if layer["type"] == "ROUTING": + continue + bottom_layer = tech["layers"][n - 1] + top_layer = tech["layers"][n + 1] + + name = layer["name"].upper() + "_1" + + cut_egde = layer["width"]["min"] + cut = (-cut_egde / 2, -cut_egde / 2, cut_egde / 2, cut_egde / 2) + bot = (cut[0] - layer["enclosure"]['bottom'], cut[1] - layer["enclosure"]['bottom'], cut[2] + layer["enclosure"]['bottom'], cut[3] + layer["enclosure"]['bottom']) + top = (cut[0] - layer["enclosure"]['top'], cut[1] - layer["enclosure"]['top'], cut[2] + layer["enclosure"]['top'], cut[3] + layer["enclosure"]['top']) + + vias.append({ + "name": name, + "layers": [ + (layer["name"], [f"{v:.3f}" for v in cut]), + (bottom_layer["name"], [f"{v:.3f}" for v in bot]), + (top_layer["name"], [f"{v:.3f}" for v in top]) + ]}) + + os.makedirs(path, exist_ok=True) + with open(f'{path}/{tech["name"]}.lef', 'w') as f: + f.write( + jinja2_env.get_template('lef.j2').render( + license=LICENSE, + grid=tech["grid"], + layers=tech["layers"], + vias=vias + ) + ) + + +def build_openroad_fill(tech, path): + fill = {"layers": {}} + + for layer in tech["layers"]: + if layer["type"] == "CUT": + continue + + max_spacing = 5 * layer["spacing"]["min"] + + max_width = 10 * layer["width"]["min"] + if "max" in layer["width"]: + max_width = layer["width"]["max"] + + shapes = [] + for ratio in (1.0, 0.75, 0.5, 0.25, 0.0): + width = layer["width"]["min"] + ratio * (max_width - layer["width"]["min"]) + width = tech["grid"] * round(width / tech["grid"]) + + shapes.append(width) + + fill["layers"][layer["name"]] = { + "space_to_outline": max_spacing, + "non-opc": { + "width": shapes, + "height": shapes, + "space_to_fill": layer["spacing"]["min"], + "space_to_non_fill": max_spacing + } + } + + os.makedirs(path, exist_ok=True) + with open(f'{path}/{tech["name"]}.fill.json', 'w') as f: + json.dump(fill, f, indent=2) + + +def build_readme(stackups): + from lambdapdk import interposer + + for stackup in stackups: + metals = [] + for layer in stackup["tech"]["layers"]: + if layer["type"] == "ROUTING": + metals.append(( + layer["name"], + f'{int(layer["width"]["min"] * 1000)}nm', + f'{int(layer["spacing"]["min"] * 1000)}nm' + )) + stackup["metalstack"] = reversed(metals) + + with open('README.md', 'w') as f: + f.write( + jinja2_env.get_template('README.md.j2').render( + desc=interposer.setup.__doc__, + license=LICENSE, + stackups=stackups + ) + ) + + +if __name__ == "__main__": + def tapered_metal(layer_count): + mid = int(layer_count // 2) + widths = mid * [0.4] + if layer_count % 2 != 0: + widths += [0.8] + widths += mid * [2.0] + return widths + + tech_specs = { + "0400": 0.4, + "0800": 0.8, + "2000": 2.0, + "0400_2000": tapered_metal + } + + stackups = [] + + for name, width in tech_specs.items(): + for layer_count in range(3, 6): + tech_name = f"{layer_count}ML_{name}" + + widths = width + if not isinstance(widths, (int, float, list, tuple)): + widths = widths(layer_count) + + tech = build_tech(layer_count, name=tech_name, width=widths) + stackups.append({ + "name": tech_name, + "tech": tech + }) + + build_lef(tech, 'base/apr') + build_layermap(tech, 'base/apr') + build_klayout_layer_properties(tech, 'base/setup/klayout') + build_klayout_drc(tech, 'base/setup/klayout') + build_openroad_pex(tech, 'base/pex/openroad') + build_openroad_fill(tech, 'base/dfm/openroad') + + build_readme(stackups) diff --git a/lambdapdk/interposer/base/templates/README.md.j2 b/lambdapdk/interposer/base/templates/README.md.j2 new file mode 100644 index 00000000..b62d0238 --- /dev/null +++ b/lambdapdk/interposer/base/templates/README.md.j2 @@ -0,0 +1,20 @@ +# Interposer + +{% for line in desc.splitlines() %}{{ line.strip() }} +{% endfor %} + +## Stackups{% for stackup in stackups %} +### {{ stackup["name"] }} +``` +{{ 'metal name'.center(30) }} | width | spacing +------------------------------ | ------- | -------{% for metal, width, spacing in stackup["metalstack"] %} +{{ metal.center(30) }} | {{ width.center(7) }} | {{ spacing.center(7) }} +------------------------------ | ------- | -------{% endfor %} +``` +{% endfor %} + +## License +``` +{% for line in license.splitlines() %}{{ line }} +{% endfor %} +``` diff --git a/lambdapdk/interposer/base/templates/drc.j2 b/lambdapdk/interposer/base/templates/drc.j2 new file mode 100644 index 00000000..a58bfc35 --- /dev/null +++ b/lambdapdk/interposer/base/templates/drc.j2 @@ -0,0 +1,76 @@ +{% for line in license.splitlines() %}# {{ line }} +{% endfor %} +{% if comment %}{% for line in comment.splitlines() %}# {{ line }} +{% endfor %}{% endif %}#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0){% for layer in layers %} +{{ layer["name"] }} = {% for number, type in layer["gds"] %}polygons({{ number }}, {{ type }}){% if not loop.last %} + {% endif %}{% endfor %}{% endfor %} + +{% for layer in layers %}#================================================ +#--------------- {{ layer["name"] }} RULES ------------------- +#================================================ + +on_grid = {{ layer["name"] }}.ongrid({{ grid }}.nm) +on_grid.output("{{ layer["name"] }}.ongrid", "{{ layer["name"] }} On Grid : {{ grid }}nm") +on_grid.forget + +in_outline = {{ layer["name"] }}.not_inside(outline.sized(-1000.nm)) +in_outline.output("{{ layer["name"] }}.outline", "{{ layer["name"] }} Inside Outline : 1000nm") +in_outline.forget +{% if layer["type"] == "ROUTING" %} +min_width = {{ layer["name"] }}.drc(width(euclidian) < {{ layer["width"]["min"] }}.nm) +min_width.output("{{ layer["name"] }}.min_width", "{{ layer["name"] }} Min. Width : {{ layer["width"]["min"] }}nm") +min_width.forget{% else %} +via_shape = {{ layer["name"] }}.drc(width(euclidian) != {{ layer["width"]["min"] }}.nm) +via_shape.output("{{ layer["name"] }}.via_shape", "{{ layer["name"] }} Shape : {{ layer["width"]["min"] }}nm x {{ layer["width"]["min"] }}nm") +via_shape.forget{% endif %} + +min_space = {{ layer["name"] }}.drc(space(euclidian) < {{ layer["spacing"]["min"] }}.nm) +min_space.output("{{ layer["name"] }}.min_space", "{{ layer["name"] }} Min. Width : {{ layer["spacing"]["min"] }}nm") +min_space.forget +{% if "max" in layer["width"] %} +max_width = {{ layer["name"] }}.drc(width(euclidian) > {{ layer["width"]["max"] }}.nm) +max_width.output("{{ layer["name"] }}.max_width", "{{ layer["name"] }} Max. Width : {{ layer["width"]["max"] }}nm") +max_width.forget +{% endif %}{% if layer["type"] == "CUT" %} +in_{{ layer["enclosure"]["bottom"][0] }} = {{ layer["name"] }}.not_inside({{ layer["enclosure"]["bottom"][0] }}) +in_{{ layer["enclosure"]["bottom"][0] }}.output("{{ layer["name"] }}.in_{{ layer["enclosure"]["bottom"][0] }}", "{{ layer["name"] }} must overlap {{ layer["enclosure"]["bottom"][0] }}") +in_{{ layer["enclosure"]["bottom"][0] }}.forget + +enc_{{ layer["enclosure"]["bottom"][0] }} = {{ layer["name"] }}.enclosed({{ layer["enclosure"]["bottom"][0] }}, {{ layer["enclosure"]["bottom"][1] }}.nm).polygons() +enc_{{ layer["enclosure"]["bottom"][0] }}.output("{{ layer["name"] }}.in_{{ layer["enclosure"]["bottom"][0] }}", "{{ layer["name"] }} {{ layer["enclosure"]["bottom"][0] }} enclosure: {{ layer["enclosure"]["bottom"][1] }}nm") +enc_{{ layer["enclosure"]["bottom"][0] }}.forget + +in_{{ layer["enclosure"]["top"][0] }} = {{ layer["name"] }}.not_inside({{ layer["enclosure"]["top"][0] }}) +in_{{ layer["enclosure"]["top"][0] }}.output("{{ layer["name"] }}.in_{{ layer["enclosure"]["top"][0] }}", "{{ layer["name"] }} must overlap {{ layer["enclosure"]["top"][0] }}") +in_{{ layer["enclosure"]["top"][0] }}.forget + +enc_{{ layer["enclosure"]["top"][0] }} = {{ layer["name"] }}.enclosed({{ layer["enclosure"]["top"][0] }}, {{ layer["enclosure"]["top"][1] }}.nm).polygons() +enc_{{ layer["enclosure"]["top"][0] }}.output("{{ layer["name"] }}.in_{{ layer["enclosure"]["top"][0] }}", "{{ layer["name"] }} {{ layer["enclosure"]["top"][0] }} enclosure: {{ layer["enclosure"]["top"][1] }}nm") +enc_{{ layer["enclosure"]["top"][0] }}.forget +{% endif %} +{% endfor %} diff --git a/lambdapdk/interposer/base/templates/layermap.j2 b/lambdapdk/interposer/base/templates/layermap.j2 new file mode 100644 index 00000000..a8cf46a7 --- /dev/null +++ b/lambdapdk/interposer/base/templates/layermap.j2 @@ -0,0 +1,7 @@ +{% for line in license.splitlines() %}# {{ line }} +{% endfor %} +{% if comment %}{% for line in comment.splitlines() %}# {{ line }} +{% endfor %}{% endif %}#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ =============={% for layer, type, gds_number, gds_type in layers %} +{{ layer.ljust(15) }} {{ type.ljust(14) }} {{ gds_number.rjust(16) }} {{ gds_type.rjust(14) }}{% endfor %} diff --git a/lambdapdk/interposer/base/templates/lef.j2 b/lambdapdk/interposer/base/templates/lef.j2 new file mode 100644 index 00000000..f9644ece --- /dev/null +++ b/lambdapdk/interposer/base/templates/lef.j2 @@ -0,0 +1,28 @@ +{% for line in license.splitlines() %}# {{ line }} +{% endfor %} +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID {{ grid }} ; +{% for layer in layers %} +LAYER {{ layer["name"] }} + TYPE {{ layer["type"] }} ;{% if layer["type"] == "ROUTING" %} + DIRECTION {{ layer["direction"] }} ; + PITCH {{ layer["width"]["min"] + layer["spacing"]["min"] }} ; + SPACING {{ layer["spacing"]["min"] }} ; + WIDTH {{ layer["width"]["min"] }} ;{% if "max" in layer["width"] %} + MAXWIDTH {{ layer["width"]["max"] }} ;{% endif %}{% else %} + SPACING {{ layer["spacing"]["min"] }} ; + WIDTH {{ layer["width"]["min"] }} ;{% endif %} +END {{ layer["name"] }} +{% endfor %}{% for via in vias %} +VIA {{ via["name"] }} DEFAULT{% for layer, shape in via["layers"] %} + LAYER {{ layer }} ; + RECT {{ shape[0] }} {{ shape[1] }} {{ shape[2] }} {{ shape[3] }} ;{% endfor %} +END {{ via["name"] }} +{% endfor %} diff --git a/lambdapdk/interposer/base/templates/pex.tcl.j2 b/lambdapdk/interposer/base/templates/pex.tcl.j2 new file mode 100644 index 00000000..acd1509a --- /dev/null +++ b/lambdapdk/interposer/base/templates/pex.tcl.j2 @@ -0,0 +1,12 @@ +{% for line in license.splitlines() %}# {{ line }} +{% endfor %} +# Metals{% for layer, resistance, capacitance in metals %} +set_layer_rc {{ '{{' }} corner {{ '}}' }} \ + -layer {{ layer }} \ + -capacitance {{ capacitance }} \ + -resistance {{ resistance }}{% endfor %} + +# Vias{% for layer, resistance in vias %} +set_layer_rc {{ '{{' }} corner {{ '}}' }} \ + -via {{ layer }} \ + -resistance {{ resistance }}{% endfor %} diff --git a/pyproject.toml b/pyproject.toml index f2601323..7a039c55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,8 @@ test = [ "pytest-timeout == 2.3.1", "tclint == 0.4.2", "lambdalib == 0.3.0", - "sc-leflib == 0.4.0" + "sc-leflib == 0.4.0", + "Jinja2 == 3.1.4" ] [tool.tclint] diff --git a/tests/test_getters.py b/tests/test_getters.py index 9316d78f..9a7c9037 100644 --- a/tests/test_getters.py +++ b/tests/test_getters.py @@ -2,7 +2,7 @@ from siliconcompiler import Chip import lambdapdk -from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130 +from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130, interposer from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7, fakeio7 from lambdapdk.freepdk45.libs import nangate45, fakeram45 from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram @@ -10,7 +10,7 @@ from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram -@pytest.mark.parametrize('pdk', [asap7, freepdk45, sky130, gf180, ihp130]) +@pytest.mark.parametrize('pdk', [asap7, freepdk45, sky130, gf180, ihp130, interposer]) def test_pdk(pdk): chip = Chip('') chip.use(pdk) diff --git a/tests/test_paths.py b/tests/test_paths.py index f12171b0..a16988fa 100644 --- a/tests/test_paths.py +++ b/tests/test_paths.py @@ -2,7 +2,7 @@ from siliconcompiler import Chip import os -from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130 +from lambdapdk import asap7, freepdk45, sky130, gf180, ihp130, interposer from lambdapdk.asap7.libs import asap7sc7p5t, fakeram7, fakeio7 from lambdapdk.freepdk45.libs import nangate45, fakeram45 from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram @@ -11,7 +11,8 @@ @pytest.mark.parametrize('pdk', [ - asap7, freepdk45, sky130, gf180, ihp130]) + asap7, freepdk45, sky130, gf180, ihp130, + interposer]) def test_pdk_paths(pdk): chip = Chip('') chip.use(pdk) From 27e78713b394301d93cc9f1e8010b8d9e7063aa5 Mon Sep 17 00:00:00 2001 From: Peter Gadfort Date: Wed, 23 Oct 2024 09:47:43 -0400 Subject: [PATCH 2/5] add interposer files --- lambdapdk/interposer/README.md | 198 ++++++ lambdapdk/interposer/_generator.py | 6 +- .../interposer/base/apr/3ML_0400.layermap | 57 ++ lambdapdk/interposer/base/apr/3ML_0400.lef | 80 +++ .../base/apr/3ML_0400_2000.layermap | 57 ++ .../interposer/base/apr/3ML_0400_2000.lef | 80 +++ .../interposer/base/apr/3ML_0800.layermap | 57 ++ lambdapdk/interposer/base/apr/3ML_0800.lef | 80 +++ .../interposer/base/apr/3ML_2000.layermap | 57 ++ lambdapdk/interposer/base/apr/3ML_2000.lef | 80 +++ .../interposer/base/apr/4ML_0400.layermap | 73 ++ lambdapdk/interposer/base/apr/4ML_0400.lef | 104 +++ .../base/apr/4ML_0400_2000.layermap | 73 ++ .../interposer/base/apr/4ML_0400_2000.lef | 104 +++ .../interposer/base/apr/4ML_0800.layermap | 73 ++ lambdapdk/interposer/base/apr/4ML_0800.lef | 104 +++ .../interposer/base/apr/4ML_2000.layermap | 73 ++ lambdapdk/interposer/base/apr/4ML_2000.lef | 104 +++ .../interposer/base/apr/5ML_0400.layermap | 89 +++ lambdapdk/interposer/base/apr/5ML_0400.lef | 128 ++++ .../base/apr/5ML_0400_2000.layermap | 89 +++ .../interposer/base/apr/5ML_0400_2000.lef | 128 ++++ .../interposer/base/apr/5ML_0800.layermap | 89 +++ lambdapdk/interposer/base/apr/5ML_0800.lef | 128 ++++ .../interposer/base/apr/5ML_2000.layermap | 89 +++ lambdapdk/interposer/base/apr/5ML_2000.lef | 128 ++++ .../base/dfm/openroad/3ML_0400.fill.json | 67 ++ .../base/dfm/openroad/3ML_0400_2000.fill.json | 67 ++ .../base/dfm/openroad/3ML_0800.fill.json | 67 ++ .../base/dfm/openroad/3ML_2000.fill.json | 67 ++ .../base/dfm/openroad/4ML_0400.fill.json | 88 +++ .../base/dfm/openroad/4ML_0400_2000.fill.json | 88 +++ .../base/dfm/openroad/4ML_0800.fill.json | 88 +++ .../base/dfm/openroad/4ML_2000.fill.json | 88 +++ .../base/dfm/openroad/5ML_0400.fill.json | 109 +++ .../base/dfm/openroad/5ML_0400_2000.fill.json | 109 +++ .../base/dfm/openroad/5ML_0800.fill.json | 109 +++ .../base/dfm/openroad/5ML_2000.fill.json | 109 +++ .../base/pex/openroad/3ML_0400.maximum.tcl | 35 + .../base/pex/openroad/3ML_0400.minimum.tcl | 35 + .../base/pex/openroad/3ML_0400.typical.tcl | 35 + .../pex/openroad/3ML_0400_2000.maximum.tcl | 35 + .../pex/openroad/3ML_0400_2000.minimum.tcl | 35 + .../pex/openroad/3ML_0400_2000.typical.tcl | 35 + .../base/pex/openroad/3ML_0800.maximum.tcl | 35 + .../base/pex/openroad/3ML_0800.minimum.tcl | 35 + .../base/pex/openroad/3ML_0800.typical.tcl | 35 + .../base/pex/openroad/3ML_2000.maximum.tcl | 35 + .../base/pex/openroad/3ML_2000.minimum.tcl | 35 + .../base/pex/openroad/3ML_2000.typical.tcl | 35 + .../base/pex/openroad/4ML_0400.maximum.tcl | 42 ++ .../base/pex/openroad/4ML_0400.minimum.tcl | 42 ++ .../base/pex/openroad/4ML_0400.typical.tcl | 42 ++ .../pex/openroad/4ML_0400_2000.maximum.tcl | 42 ++ .../pex/openroad/4ML_0400_2000.minimum.tcl | 42 ++ .../pex/openroad/4ML_0400_2000.typical.tcl | 42 ++ .../base/pex/openroad/4ML_0800.maximum.tcl | 42 ++ .../base/pex/openroad/4ML_0800.minimum.tcl | 42 ++ .../base/pex/openroad/4ML_0800.typical.tcl | 42 ++ .../base/pex/openroad/4ML_2000.maximum.tcl | 42 ++ .../base/pex/openroad/4ML_2000.minimum.tcl | 42 ++ .../base/pex/openroad/4ML_2000.typical.tcl | 42 ++ .../base/pex/openroad/5ML_0400.maximum.tcl | 49 ++ .../base/pex/openroad/5ML_0400.minimum.tcl | 49 ++ .../base/pex/openroad/5ML_0400.typical.tcl | 49 ++ .../pex/openroad/5ML_0400_2000.maximum.tcl | 49 ++ .../pex/openroad/5ML_0400_2000.minimum.tcl | 49 ++ .../pex/openroad/5ML_0400_2000.typical.tcl | 49 ++ .../base/pex/openroad/5ML_0800.maximum.tcl | 49 ++ .../base/pex/openroad/5ML_0800.minimum.tcl | 49 ++ .../base/pex/openroad/5ML_0800.typical.tcl | 49 ++ .../base/pex/openroad/5ML_2000.maximum.tcl | 49 ++ .../base/pex/openroad/5ML_2000.minimum.tcl | 49 ++ .../base/pex/openroad/5ML_2000.typical.tcl | 49 ++ .../base/setup/klayout/3ML_0400.drc | 192 ++++++ .../base/setup/klayout/3ML_0400.lyp | 358 ++++++++++ .../base/setup/klayout/3ML_0400_2000.drc | 192 ++++++ .../base/setup/klayout/3ML_0400_2000.lyp | 358 ++++++++++ .../base/setup/klayout/3ML_0800.drc | 192 ++++++ .../base/setup/klayout/3ML_0800.lyp | 358 ++++++++++ .../base/setup/klayout/3ML_2000.drc | 192 ++++++ .../base/setup/klayout/3ML_2000.lyp | 358 ++++++++++ .../base/setup/klayout/4ML_0400.drc | 254 +++++++ .../base/setup/klayout/4ML_0400.lyp | 494 ++++++++++++++ .../base/setup/klayout/4ML_0400_2000.drc | 254 +++++++ .../base/setup/klayout/4ML_0400_2000.lyp | 494 ++++++++++++++ .../base/setup/klayout/4ML_0800.drc | 254 +++++++ .../base/setup/klayout/4ML_0800.lyp | 494 ++++++++++++++ .../base/setup/klayout/4ML_2000.drc | 254 +++++++ .../base/setup/klayout/4ML_2000.lyp | 494 ++++++++++++++ .../base/setup/klayout/5ML_0400.drc | 316 +++++++++ .../base/setup/klayout/5ML_0400.lyp | 630 ++++++++++++++++++ .../base/setup/klayout/5ML_0400_2000.drc | 316 +++++++++ .../base/setup/klayout/5ML_0400_2000.lyp | 630 ++++++++++++++++++ .../base/setup/klayout/5ML_0800.drc | 316 +++++++++ .../base/setup/klayout/5ML_0800.lyp | 630 ++++++++++++++++++ .../base/setup/klayout/5ML_2000.drc | 316 +++++++++ .../base/setup/klayout/5ML_2000.lyp | 630 ++++++++++++++++++ .../interposer/base/templates/pex.tcl.j2 | 2 +- 99 files changed, 13871 insertions(+), 3 deletions(-) create mode 100644 lambdapdk/interposer/README.md create mode 100644 lambdapdk/interposer/base/apr/3ML_0400.layermap create mode 100644 lambdapdk/interposer/base/apr/3ML_0400.lef create mode 100644 lambdapdk/interposer/base/apr/3ML_0400_2000.layermap create mode 100644 lambdapdk/interposer/base/apr/3ML_0400_2000.lef create mode 100644 lambdapdk/interposer/base/apr/3ML_0800.layermap create mode 100644 lambdapdk/interposer/base/apr/3ML_0800.lef create mode 100644 lambdapdk/interposer/base/apr/3ML_2000.layermap create mode 100644 lambdapdk/interposer/base/apr/3ML_2000.lef create mode 100644 lambdapdk/interposer/base/apr/4ML_0400.layermap create mode 100644 lambdapdk/interposer/base/apr/4ML_0400.lef create mode 100644 lambdapdk/interposer/base/apr/4ML_0400_2000.layermap create mode 100644 lambdapdk/interposer/base/apr/4ML_0400_2000.lef create mode 100644 lambdapdk/interposer/base/apr/4ML_0800.layermap create mode 100644 lambdapdk/interposer/base/apr/4ML_0800.lef create mode 100644 lambdapdk/interposer/base/apr/4ML_2000.layermap create mode 100644 lambdapdk/interposer/base/apr/4ML_2000.lef create mode 100644 lambdapdk/interposer/base/apr/5ML_0400.layermap create mode 100644 lambdapdk/interposer/base/apr/5ML_0400.lef create mode 100644 lambdapdk/interposer/base/apr/5ML_0400_2000.layermap create mode 100644 lambdapdk/interposer/base/apr/5ML_0400_2000.lef create mode 100644 lambdapdk/interposer/base/apr/5ML_0800.layermap create mode 100644 lambdapdk/interposer/base/apr/5ML_0800.lef create mode 100644 lambdapdk/interposer/base/apr/5ML_2000.layermap create mode 100644 lambdapdk/interposer/base/apr/5ML_2000.lef create mode 100644 lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json create mode 100644 lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0400.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0400.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0400.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0800.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0800.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_0800.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_2000.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_2000.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/3ML_2000.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0400.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0400.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0400.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0800.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0800.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_0800.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_2000.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_2000.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/4ML_2000.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0400.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0400.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0400.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0800.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0800.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_0800.typical.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_2000.maximum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_2000.minimum.tcl create mode 100644 lambdapdk/interposer/base/pex/openroad/5ML_2000.typical.tcl create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_0400.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_0800.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_2000.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_0400.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_0800.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_2000.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_0400.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_0800.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_2000.drc create mode 100644 lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp diff --git a/lambdapdk/interposer/README.md b/lambdapdk/interposer/README.md new file mode 100644 index 00000000..f4bf0afa --- /dev/null +++ b/lambdapdk/interposer/README.md @@ -0,0 +1,198 @@ +# Interposer + + +The interposer PDK is a passive technology with a number of +simulated stackups. The PDK contains enablement for place and +route tools and design rule signoff. +Note that this process design kit is provided as an academic +and research aid only and the resulting designs are not manufacturable. + + + +## Stackups +### 3ML_0400 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 400nm | 400nm +------------------------------ | ------- | ------- + metal2 | 400nm | 400nm +------------------------------ | ------- | ------- + metal1 | 400nm | 400nm +------------------------------ | ------- | ------- +``` + +### 4ML_0400 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 400nm | 400nm +------------------------------ | ------- | ------- + metal3 | 400nm | 400nm +------------------------------ | ------- | ------- + metal2 | 400nm | 400nm +------------------------------ | ------- | ------- + metal1 | 400nm | 400nm +------------------------------ | ------- | ------- +``` + +### 5ML_0400 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 400nm | 400nm +------------------------------ | ------- | ------- + metal4 | 400nm | 400nm +------------------------------ | ------- | ------- + metal3 | 400nm | 400nm +------------------------------ | ------- | ------- + metal2 | 400nm | 400nm +------------------------------ | ------- | ------- + metal1 | 400nm | 400nm +------------------------------ | ------- | ------- +``` + +### 3ML_0800 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 800nm | 800nm +------------------------------ | ------- | ------- + metal2 | 800nm | 800nm +------------------------------ | ------- | ------- + metal1 | 800nm | 800nm +------------------------------ | ------- | ------- +``` + +### 4ML_0800 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 800nm | 800nm +------------------------------ | ------- | ------- + metal3 | 800nm | 800nm +------------------------------ | ------- | ------- + metal2 | 800nm | 800nm +------------------------------ | ------- | ------- + metal1 | 800nm | 800nm +------------------------------ | ------- | ------- +``` + +### 5ML_0800 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 800nm | 800nm +------------------------------ | ------- | ------- + metal4 | 800nm | 800nm +------------------------------ | ------- | ------- + metal3 | 800nm | 800nm +------------------------------ | ------- | ------- + metal2 | 800nm | 800nm +------------------------------ | ------- | ------- + metal1 | 800nm | 800nm +------------------------------ | ------- | ------- +``` + +### 3ML_2000 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal2 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal1 | 2000nm | 2000nm +------------------------------ | ------- | ------- +``` + +### 4ML_2000 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal3 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal2 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal1 | 2000nm | 2000nm +------------------------------ | ------- | ------- +``` + +### 5ML_2000 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal4 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal3 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal2 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal1 | 2000nm | 2000nm +------------------------------ | ------- | ------- +``` + +### 3ML_0400_2000 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal2 | 800nm | 800nm +------------------------------ | ------- | ------- + metal1 | 400nm | 400nm +------------------------------ | ------- | ------- +``` + +### 4ML_0400_2000 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal3 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal2 | 400nm | 400nm +------------------------------ | ------- | ------- + metal1 | 400nm | 400nm +------------------------------ | ------- | ------- +``` + +### 5ML_0400_2000 +``` + metal name | width | spacing +------------------------------ | ------- | ------- + topmetal | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal4 | 2000nm | 2000nm +------------------------------ | ------- | ------- + metal3 | 800nm | 800nm +------------------------------ | ------- | ------- + metal2 | 400nm | 400nm +------------------------------ | ------- | ------- + metal1 | 400nm | 400nm +------------------------------ | ------- | ------- +``` + + +## License +``` +Copyright 2024 ZeroASIC Corp + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +``` \ No newline at end of file diff --git a/lambdapdk/interposer/_generator.py b/lambdapdk/interposer/_generator.py index 1e67388b..1ba14287 100644 --- a/lambdapdk/interposer/_generator.py +++ b/lambdapdk/interposer/_generator.py @@ -389,8 +389,10 @@ def build_lef(tech, path): cut_egde = layer["width"]["min"] cut = (-cut_egde / 2, -cut_egde / 2, cut_egde / 2, cut_egde / 2) - bot = (cut[0] - layer["enclosure"]['bottom'], cut[1] - layer["enclosure"]['bottom'], cut[2] + layer["enclosure"]['bottom'], cut[3] + layer["enclosure"]['bottom']) - top = (cut[0] - layer["enclosure"]['top'], cut[1] - layer["enclosure"]['top'], cut[2] + layer["enclosure"]['top'], cut[3] + layer["enclosure"]['top']) + bot = (cut[0] - layer["enclosure"]['bottom'], cut[1] - layer["enclosure"]['bottom'], + cut[2] + layer["enclosure"]['bottom'], cut[3] + layer["enclosure"]['bottom']) + top = (cut[0] - layer["enclosure"]['top'], cut[1] - layer["enclosure"]['top'], + cut[2] + layer["enclosure"]['top'], cut[3] + layer["enclosure"]['top']) vias.append({ "name": name, diff --git a/lambdapdk/interposer/base/apr/3ML_0400.layermap b/lambdapdk/interposer/base/apr/3ML_0400.layermap new file mode 100644 index 00000000..77a62c8f --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_0400.layermap @@ -0,0 +1,57 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +topmetal NET 5 0 +topmetal SPNET 5 0 +topmetal PIN 5 10 +topmetal LEFPIN 5 10 +topmetal FILL 5 30 +NAME topmetal/PIN 5 20 +NAME topmetal/SPNET 5 20 +NAME topmetal/TEXT 5 20 diff --git a/lambdapdk/interposer/base/apr/3ML_0400.lef b/lambdapdk/interposer/base/apr/3ML_0400.lef new file mode 100644 index 00000000..6c79361e --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_0400.lef @@ -0,0 +1,80 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via2 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal1 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER topmetal ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA2_1 diff --git a/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap new file mode 100644 index 00000000..77a62c8f --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap @@ -0,0 +1,57 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +topmetal NET 5 0 +topmetal SPNET 5 0 +topmetal PIN 5 10 +topmetal LEFPIN 5 10 +topmetal FILL 5 30 +NAME topmetal/PIN 5 20 +NAME topmetal/SPNET 5 20 +NAME topmetal/TEXT 5 20 diff --git a/lambdapdk/interposer/base/apr/3ML_0400_2000.lef b/lambdapdk/interposer/base/apr/3ML_0400_2000.lef new file mode 100644 index 00000000..ee9cad4f --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_0400_2000.lef @@ -0,0 +1,80 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via2 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal1 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal2 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER topmetal ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA2_1 diff --git a/lambdapdk/interposer/base/apr/3ML_0800.layermap b/lambdapdk/interposer/base/apr/3ML_0800.layermap new file mode 100644 index 00000000..77a62c8f --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_0800.layermap @@ -0,0 +1,57 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +topmetal NET 5 0 +topmetal SPNET 5 0 +topmetal PIN 5 10 +topmetal LEFPIN 5 10 +topmetal FILL 5 30 +NAME topmetal/PIN 5 20 +NAME topmetal/SPNET 5 20 +NAME topmetal/TEXT 5 20 diff --git a/lambdapdk/interposer/base/apr/3ML_0800.lef b/lambdapdk/interposer/base/apr/3ML_0800.lef new file mode 100644 index 00000000..e4853b70 --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_0800.lef @@ -0,0 +1,80 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via2 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal1 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER metal2 ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal2 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER topmetal ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA2_1 diff --git a/lambdapdk/interposer/base/apr/3ML_2000.layermap b/lambdapdk/interposer/base/apr/3ML_2000.layermap new file mode 100644 index 00000000..77a62c8f --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_2000.layermap @@ -0,0 +1,57 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +topmetal NET 5 0 +topmetal SPNET 5 0 +topmetal PIN 5 10 +topmetal LEFPIN 5 10 +topmetal FILL 5 30 +NAME topmetal/PIN 5 20 +NAME topmetal/SPNET 5 20 +NAME topmetal/TEXT 5 20 diff --git a/lambdapdk/interposer/base/apr/3ML_2000.lef b/lambdapdk/interposer/base/apr/3ML_2000.lef new file mode 100644 index 00000000..ce233db1 --- /dev/null +++ b/lambdapdk/interposer/base/apr/3ML_2000.lef @@ -0,0 +1,80 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via2 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal1 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER metal2 ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal2 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER topmetal ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA2_1 diff --git a/lambdapdk/interposer/base/apr/4ML_0400.layermap b/lambdapdk/interposer/base/apr/4ML_0400.layermap new file mode 100644 index 00000000..18704b65 --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_0400.layermap @@ -0,0 +1,73 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +topmetal NET 7 0 +topmetal SPNET 7 0 +topmetal PIN 7 10 +topmetal LEFPIN 7 10 +topmetal FILL 7 30 +NAME topmetal/PIN 7 20 +NAME topmetal/SPNET 7 20 +NAME topmetal/TEXT 7 20 diff --git a/lambdapdk/interposer/base/apr/4ML_0400.lef b/lambdapdk/interposer/base/apr/4ML_0400.lef new file mode 100644 index 00000000..f44d2f3c --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_0400.lef @@ -0,0 +1,104 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via3 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal1 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal3 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal3 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER topmetal ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA3_1 diff --git a/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap new file mode 100644 index 00000000..18704b65 --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap @@ -0,0 +1,73 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +topmetal NET 7 0 +topmetal SPNET 7 0 +topmetal PIN 7 10 +topmetal LEFPIN 7 10 +topmetal FILL 7 30 +NAME topmetal/PIN 7 20 +NAME topmetal/SPNET 7 20 +NAME topmetal/TEXT 7 20 diff --git a/lambdapdk/interposer/base/apr/4ML_0400_2000.lef b/lambdapdk/interposer/base/apr/4ML_0400_2000.lef new file mode 100644 index 00000000..6ea42c13 --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_0400_2000.lef @@ -0,0 +1,104 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via3 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal1 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal3 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal3 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER topmetal ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA3_1 diff --git a/lambdapdk/interposer/base/apr/4ML_0800.layermap b/lambdapdk/interposer/base/apr/4ML_0800.layermap new file mode 100644 index 00000000..18704b65 --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_0800.layermap @@ -0,0 +1,73 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +topmetal NET 7 0 +topmetal SPNET 7 0 +topmetal PIN 7 10 +topmetal LEFPIN 7 10 +topmetal FILL 7 30 +NAME topmetal/PIN 7 20 +NAME topmetal/SPNET 7 20 +NAME topmetal/TEXT 7 20 diff --git a/lambdapdk/interposer/base/apr/4ML_0800.lef b/lambdapdk/interposer/base/apr/4ML_0800.lef new file mode 100644 index 00000000..afc0bed0 --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_0800.lef @@ -0,0 +1,104 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via3 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal1 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER metal2 ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal2 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER metal3 ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal3 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER topmetal ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA3_1 diff --git a/lambdapdk/interposer/base/apr/4ML_2000.layermap b/lambdapdk/interposer/base/apr/4ML_2000.layermap new file mode 100644 index 00000000..18704b65 --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_2000.layermap @@ -0,0 +1,73 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +topmetal NET 7 0 +topmetal SPNET 7 0 +topmetal PIN 7 10 +topmetal LEFPIN 7 10 +topmetal FILL 7 30 +NAME topmetal/PIN 7 20 +NAME topmetal/SPNET 7 20 +NAME topmetal/TEXT 7 20 diff --git a/lambdapdk/interposer/base/apr/4ML_2000.lef b/lambdapdk/interposer/base/apr/4ML_2000.lef new file mode 100644 index 00000000..50eb3cad --- /dev/null +++ b/lambdapdk/interposer/base/apr/4ML_2000.lef @@ -0,0 +1,104 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via3 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal1 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER metal2 ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal2 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER metal3 ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal3 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER topmetal ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA3_1 diff --git a/lambdapdk/interposer/base/apr/5ML_0400.layermap b/lambdapdk/interposer/base/apr/5ML_0400.layermap new file mode 100644 index 00000000..de53c0b4 --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_0400.layermap @@ -0,0 +1,89 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +metal4 NET 7 0 +metal4 SPNET 7 0 +metal4 PIN 7 10 +metal4 LEFPIN 7 10 +metal4 FILL 7 30 +NAME metal4/PIN 7 20 +NAME metal4/SPNET 7 20 +NAME metal4/TEXT 7 20 +via4 NET 8 0 +via4 SPNET 8 0 +via4 PIN 8 10 +via4 LEFPIN 8 10 +via4 FILL 8 30 +NAME via4/PIN 8 20 +NAME via4/SPNET 8 20 +NAME via4/TEXT 8 20 +topmetal NET 9 0 +topmetal SPNET 9 0 +topmetal PIN 9 10 +topmetal LEFPIN 9 10 +topmetal FILL 9 30 +NAME topmetal/PIN 9 20 +NAME topmetal/SPNET 9 20 +NAME topmetal/TEXT 9 20 diff --git a/lambdapdk/interposer/base/apr/5ML_0400.lef b/lambdapdk/interposer/base/apr/5ML_0400.lef new file mode 100644 index 00000000..f75e218e --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_0400.lef @@ -0,0 +1,128 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via3 + +LAYER metal4 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal4 + +LAYER via4 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via4 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal1 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal3 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal3 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal4 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA3_1 + +VIA VIA4_1 DEFAULT + LAYER via4 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal4 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER topmetal ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA4_1 diff --git a/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap new file mode 100644 index 00000000..de53c0b4 --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap @@ -0,0 +1,89 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +metal4 NET 7 0 +metal4 SPNET 7 0 +metal4 PIN 7 10 +metal4 LEFPIN 7 10 +metal4 FILL 7 30 +NAME metal4/PIN 7 20 +NAME metal4/SPNET 7 20 +NAME metal4/TEXT 7 20 +via4 NET 8 0 +via4 SPNET 8 0 +via4 PIN 8 10 +via4 LEFPIN 8 10 +via4 FILL 8 30 +NAME via4/PIN 8 20 +NAME via4/SPNET 8 20 +NAME via4/TEXT 8 20 +topmetal NET 9 0 +topmetal SPNET 9 0 +topmetal PIN 9 10 +topmetal LEFPIN 9 10 +topmetal FILL 9 30 +NAME topmetal/PIN 9 20 +NAME topmetal/SPNET 9 20 +NAME topmetal/TEXT 9 20 diff --git a/lambdapdk/interposer/base/apr/5ML_0400_2000.lef b/lambdapdk/interposer/base/apr/5ML_0400_2000.lef new file mode 100644 index 00000000..6bc4c6c6 --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_0400_2000.lef @@ -0,0 +1,128 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 0.8 ; + SPACING 0.4 ; + WIDTH 0.4 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.2 ; + WIDTH 0.2 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via3 + +LAYER metal4 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal4 + +LAYER via4 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via4 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal1 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.100 -0.100 0.100 0.100 ; + LAYER metal2 ; + RECT -0.300 -0.300 0.300 0.300 ; + LAYER metal3 ; + RECT -0.300 -0.300 0.300 0.300 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal3 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER metal4 ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA3_1 + +VIA VIA4_1 DEFAULT + LAYER via4 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal4 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER topmetal ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA4_1 diff --git a/lambdapdk/interposer/base/apr/5ML_0800.layermap b/lambdapdk/interposer/base/apr/5ML_0800.layermap new file mode 100644 index 00000000..de53c0b4 --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_0800.layermap @@ -0,0 +1,89 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +metal4 NET 7 0 +metal4 SPNET 7 0 +metal4 PIN 7 10 +metal4 LEFPIN 7 10 +metal4 FILL 7 30 +NAME metal4/PIN 7 20 +NAME metal4/SPNET 7 20 +NAME metal4/TEXT 7 20 +via4 NET 8 0 +via4 SPNET 8 0 +via4 PIN 8 10 +via4 LEFPIN 8 10 +via4 FILL 8 30 +NAME via4/PIN 8 20 +NAME via4/SPNET 8 20 +NAME via4/TEXT 8 20 +topmetal NET 9 0 +topmetal SPNET 9 0 +topmetal PIN 9 10 +topmetal LEFPIN 9 10 +topmetal FILL 9 30 +NAME topmetal/PIN 9 20 +NAME topmetal/SPNET 9 20 +NAME topmetal/TEXT 9 20 diff --git a/lambdapdk/interposer/base/apr/5ML_0800.lef b/lambdapdk/interposer/base/apr/5ML_0800.lef new file mode 100644 index 00000000..dc9e51a2 --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_0800.lef @@ -0,0 +1,128 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via3 + +LAYER metal4 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END metal4 + +LAYER via4 + TYPE CUT ; + SPACING 0.4 ; + WIDTH 0.4 ; +END via4 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 1.6 ; + SPACING 0.8 ; + WIDTH 0.8 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal1 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER metal2 ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal2 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER metal3 ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal3 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER metal4 ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA3_1 + +VIA VIA4_1 DEFAULT + LAYER via4 ; + RECT -0.200 -0.200 0.200 0.200 ; + LAYER metal4 ; + RECT -0.600 -0.600 0.600 0.600 ; + LAYER topmetal ; + RECT -0.600 -0.600 0.600 0.600 ; +END VIA4_1 diff --git a/lambdapdk/interposer/base/apr/5ML_2000.layermap b/lambdapdk/interposer/base/apr/5ML_2000.layermap new file mode 100644 index 00000000..de53c0b4 --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_2000.layermap @@ -0,0 +1,89 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#============== ============== ================ ============== +#EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type +#============== ============== ================ ============== +metal1 NET 1 0 +metal1 SPNET 1 0 +metal1 PIN 1 10 +metal1 LEFPIN 1 10 +metal1 FILL 1 30 +NAME metal1/PIN 1 20 +NAME metal1/SPNET 1 20 +NAME metal1/TEXT 1 20 +via1 NET 2 0 +via1 SPNET 2 0 +via1 PIN 2 10 +via1 LEFPIN 2 10 +via1 FILL 2 30 +NAME via1/PIN 2 20 +NAME via1/SPNET 2 20 +NAME via1/TEXT 2 20 +metal2 NET 3 0 +metal2 SPNET 3 0 +metal2 PIN 3 10 +metal2 LEFPIN 3 10 +metal2 FILL 3 30 +NAME metal2/PIN 3 20 +NAME metal2/SPNET 3 20 +NAME metal2/TEXT 3 20 +via2 NET 4 0 +via2 SPNET 4 0 +via2 PIN 4 10 +via2 LEFPIN 4 10 +via2 FILL 4 30 +NAME via2/PIN 4 20 +NAME via2/SPNET 4 20 +NAME via2/TEXT 4 20 +metal3 NET 5 0 +metal3 SPNET 5 0 +metal3 PIN 5 10 +metal3 LEFPIN 5 10 +metal3 FILL 5 30 +NAME metal3/PIN 5 20 +NAME metal3/SPNET 5 20 +NAME metal3/TEXT 5 20 +via3 NET 6 0 +via3 SPNET 6 0 +via3 PIN 6 10 +via3 LEFPIN 6 10 +via3 FILL 6 30 +NAME via3/PIN 6 20 +NAME via3/SPNET 6 20 +NAME via3/TEXT 6 20 +metal4 NET 7 0 +metal4 SPNET 7 0 +metal4 PIN 7 10 +metal4 LEFPIN 7 10 +metal4 FILL 7 30 +NAME metal4/PIN 7 20 +NAME metal4/SPNET 7 20 +NAME metal4/TEXT 7 20 +via4 NET 8 0 +via4 SPNET 8 0 +via4 PIN 8 10 +via4 LEFPIN 8 10 +via4 FILL 8 30 +NAME via4/PIN 8 20 +NAME via4/SPNET 8 20 +NAME via4/TEXT 8 20 +topmetal NET 9 0 +topmetal SPNET 9 0 +topmetal PIN 9 10 +topmetal LEFPIN 9 10 +topmetal FILL 9 30 +NAME topmetal/PIN 9 20 +NAME topmetal/SPNET 9 20 +NAME topmetal/TEXT 9 20 diff --git a/lambdapdk/interposer/base/apr/5ML_2000.lef b/lambdapdk/interposer/base/apr/5ML_2000.lef new file mode 100644 index 00000000..506c1718 --- /dev/null +++ b/lambdapdk/interposer/base/apr/5ML_2000.lef @@ -0,0 +1,128 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +UNITS + DATABASE MICRONS 2000 ; +END UNITS + +MANUFACTURINGGRID 0.005 ; + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal1 + +LAYER via1 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal2 + +LAYER via2 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal3 + +LAYER via3 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via3 + +LAYER metal4 + TYPE ROUTING ; + DIRECTION VERITCAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END metal4 + +LAYER via4 + TYPE CUT ; + SPACING 1.0 ; + WIDTH 1.0 ; +END via4 + +LAYER topmetal + TYPE ROUTING ; + DIRECTION HORIZONTAL ; + PITCH 4.0 ; + SPACING 2.0 ; + WIDTH 2.0 ; + MAXWIDTH 5.0 ; +END topmetal + +VIA VIA1_1 DEFAULT + LAYER via1 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal1 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER metal2 ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA1_1 + +VIA VIA2_1 DEFAULT + LAYER via2 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal2 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER metal3 ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA2_1 + +VIA VIA3_1 DEFAULT + LAYER via3 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal3 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER metal4 ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA3_1 + +VIA VIA4_1 DEFAULT + LAYER via4 ; + RECT -0.500 -0.500 0.500 0.500 ; + LAYER metal4 ; + RECT -1.500 -1.500 1.500 1.500 ; + LAYER topmetal ; + RECT -1.500 -1.500 1.500 1.500 ; +END VIA4_1 diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json new file mode 100644 index 00000000..e63a7ae7 --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json @@ -0,0 +1,67 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal2": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "topmetal": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json new file mode 100644 index 00000000..b1dbbf7e --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json @@ -0,0 +1,67 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal2": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "topmetal": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json new file mode 100644 index 00000000..fbeba5d2 --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json @@ -0,0 +1,67 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "metal2": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "topmetal": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json new file mode 100644 index 00000000..31158a4b --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json @@ -0,0 +1,67 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "metal2": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "topmetal": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json new file mode 100644 index 00000000..75c605ee --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json @@ -0,0 +1,88 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal2": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal3": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "topmetal": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json new file mode 100644 index 00000000..d191dfeb --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json @@ -0,0 +1,88 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal2": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal3": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "topmetal": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json new file mode 100644 index 00000000..14f2590e --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json @@ -0,0 +1,88 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "metal2": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "metal3": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "topmetal": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json new file mode 100644 index 00000000..0dcfdd91 --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json @@ -0,0 +1,88 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "metal2": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "metal3": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "topmetal": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json new file mode 100644 index 00000000..8a2d555a --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json @@ -0,0 +1,109 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal2": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal3": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal4": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "topmetal": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json new file mode 100644 index 00000000..1c14dfdd --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json @@ -0,0 +1,109 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal2": { + "space_to_outline": 2.0, + "non-opc": { + "width": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "height": [ + 5.0, + 3.85, + 2.7, + 1.55, + 0.4 + ], + "space_to_fill": 0.4, + "space_to_non_fill": 2.0 + } + }, + "metal3": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "metal4": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "topmetal": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json new file mode 100644 index 00000000..965e3b10 --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json @@ -0,0 +1,109 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "metal2": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "metal3": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "metal4": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + }, + "topmetal": { + "space_to_outline": 4.0, + "non-opc": { + "width": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "height": [ + 5.0, + 3.95, + 2.9, + 1.85, + 0.8 + ], + "space_to_fill": 0.8, + "space_to_non_fill": 4.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json new file mode 100644 index 00000000..94daaa72 --- /dev/null +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json @@ -0,0 +1,109 @@ +{ + "layers": { + "metal1": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "metal2": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "metal3": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "metal4": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + }, + "topmetal": { + "space_to_outline": 10.0, + "non-opc": { + "width": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "height": [ + 5.0, + 4.25, + 3.5, + 2.75, + 2.0 + ], + "space_to_fill": 2.0, + "space_to_non_fill": 10.0 + } + } + } +} \ No newline at end of file diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0400.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0400.maximum.tcl new file mode 100644 index 00000000..3402bfdc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0400.maximum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0400.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0400.minimum.tcl new file mode 100644 index 00000000..b34b7b0f --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0400.minimum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0400.typical.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0400.typical.tcl new file mode 100644 index 00000000..a6ab6abc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0400.typical.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.maximum.tcl new file mode 100644 index 00000000..3402bfdc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.maximum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.minimum.tcl new file mode 100644 index 00000000..b34b7b0f --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.minimum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.typical.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.typical.tcl new file mode 100644 index 00000000..a6ab6abc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0400_2000.typical.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0800.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0800.maximum.tcl new file mode 100644 index 00000000..3402bfdc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0800.maximum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0800.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0800.minimum.tcl new file mode 100644 index 00000000..b34b7b0f --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0800.minimum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_0800.typical.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_0800.typical.tcl new file mode 100644 index 00000000..a6ab6abc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_0800.typical.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_2000.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_2000.maximum.tcl new file mode 100644 index 00000000..3402bfdc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_2000.maximum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_2000.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_2000.minimum.tcl new file mode 100644 index 00000000..b34b7b0f --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_2000.minimum.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/3ML_2000.typical.tcl b/lambdapdk/interposer/base/pex/openroad/3ML_2000.typical.tcl new file mode 100644 index 00000000..a6ab6abc --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/3ML_2000.typical.tcl @@ -0,0 +1,35 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0400.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0400.maximum.tcl new file mode 100644 index 00000000..df92d7ac --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0400.maximum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0400.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0400.minimum.tcl new file mode 100644 index 00000000..b9d99ec2 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0400.minimum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0400.typical.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0400.typical.tcl new file mode 100644 index 00000000..6dc51668 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0400.typical.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.maximum.tcl new file mode 100644 index 00000000..df92d7ac --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.maximum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.minimum.tcl new file mode 100644 index 00000000..b9d99ec2 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.minimum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.typical.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.typical.tcl new file mode 100644 index 00000000..6dc51668 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0400_2000.typical.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0800.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0800.maximum.tcl new file mode 100644 index 00000000..df92d7ac --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0800.maximum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0800.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0800.minimum.tcl new file mode 100644 index 00000000..b9d99ec2 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0800.minimum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_0800.typical.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_0800.typical.tcl new file mode 100644 index 00000000..6dc51668 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_0800.typical.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_2000.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_2000.maximum.tcl new file mode 100644 index 00000000..df92d7ac --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_2000.maximum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_2000.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_2000.minimum.tcl new file mode 100644 index 00000000..b9d99ec2 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_2000.minimum.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/4ML_2000.typical.tcl b/lambdapdk/interposer/base/pex/openroad/4ML_2000.typical.tcl new file mode 100644 index 00000000..6dc51668 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/4ML_2000.typical.tcl @@ -0,0 +1,42 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0400.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0400.maximum.tcl new file mode 100644 index 00000000..a1f65ff8 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0400.maximum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0400.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0400.minimum.tcl new file mode 100644 index 00000000..bc2cdb53 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0400.minimum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0400.typical.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0400.typical.tcl new file mode 100644 index 00000000..31c5e140 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0400.typical.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.maximum.tcl new file mode 100644 index 00000000..a1f65ff8 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.maximum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.minimum.tcl new file mode 100644 index 00000000..bc2cdb53 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.minimum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.typical.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.typical.tcl new file mode 100644 index 00000000..31c5e140 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0400_2000.typical.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0800.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0800.maximum.tcl new file mode 100644 index 00000000..a1f65ff8 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0800.maximum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0800.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0800.minimum.tcl new file mode 100644 index 00000000..bc2cdb53 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0800.minimum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_0800.typical.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_0800.typical.tcl new file mode 100644 index 00000000..31c5e140 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_0800.typical.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_2000.maximum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_2000.maximum.tcl new file mode 100644 index 00000000..a1f65ff8 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_2000.maximum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.13 \ + -resistance 0.0019500000000000001 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.013000000000000001 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.013000000000000001 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_2000.minimum.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_2000.minimum.tcl new file mode 100644 index 00000000..bc2cdb53 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_2000.minimum.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.06999999999999999 \ + -resistance 0.00105 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.006999999999999999 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.006999999999999999 diff --git a/lambdapdk/interposer/base/pex/openroad/5ML_2000.typical.tcl b/lambdapdk/interposer/base/pex/openroad/5ML_2000.typical.tcl new file mode 100644 index 00000000..31c5e140 --- /dev/null +++ b/lambdapdk/interposer/base/pex/openroad/5ML_2000.typical.tcl @@ -0,0 +1,49 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Metals +set_layer_rc {{ corner }} \ + -layer metal1 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal2 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal3 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer metal4 \ + -capacitance 0.1 \ + -resistance 0.0015 +set_layer_rc {{ corner }} \ + -layer topmetal \ + -capacitance 0.1 \ + -resistance 0.0015 + +# Vias +set_layer_rc {{ corner }} \ + -via via1 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via2 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via3 \ + -resistance 0.01 +set_layer_rc {{ corner }} \ + -via via4 \ + -resistance 0.01 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc new file mode 100644 index 00000000..6468218b --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc @@ -0,0 +1,192 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 400.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 400nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 400.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 400nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 200.nm) +via_shape.output("via1.via_shape", "via1 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 200.nm) +min_space.output("via1.min_space", "via1 Min. Width : 200nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 200.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 200nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 200nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 400.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 400nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 400.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 400nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 200.nm) +via_shape.output("via2.via_shape", "via2 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 200.nm) +min_space.output("via2.min_space", "via2 Min. Width : 200nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 200nm") +enc_metal2.forget + +in_topmetal = via2.not_inside(topmetal) +in_topmetal.output("via2.in_topmetal", "via2 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via2.enclosed(topmetal, 200.nm).polygons() +enc_topmetal.output("via2.in_topmetal", "via2 topmetal enclosure: 200nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 400.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 400nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 400.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 400nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp new file mode 100644 index 00000000..f4d13329 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp @@ -0,0 +1,358 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 5/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc new file mode 100644 index 00000000..7d1eca29 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc @@ -0,0 +1,192 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 400.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 400nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 400.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 400nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 200.nm) +via_shape.output("via1.via_shape", "via1 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 200.nm) +min_space.output("via1.min_space", "via1 Min. Width : 200nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 200.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 200nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 200nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 800.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 800nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 800.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 800nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 400.nm) +via_shape.output("via2.via_shape", "via2 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 400.nm) +min_space.output("via2.min_space", "via2 Min. Width : 400nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 400.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 400nm") +enc_metal2.forget + +in_topmetal = via2.not_inside(topmetal) +in_topmetal.output("via2.in_topmetal", "via2 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via2.enclosed(topmetal, 400.nm).polygons() +enc_topmetal.output("via2.in_topmetal", "via2 topmetal enclosure: 400nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 2000.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 2000nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 2000.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp new file mode 100644 index 00000000..f4d13329 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp @@ -0,0 +1,358 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 5/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc new file mode 100644 index 00000000..70c864c2 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc @@ -0,0 +1,192 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 800.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 800nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 800.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 800nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 400.nm) +via_shape.output("via1.via_shape", "via1 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 400.nm) +min_space.output("via1.min_space", "via1 Min. Width : 400nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 400.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 400nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 400.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 400nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 800.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 800nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 800.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 800nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 400.nm) +via_shape.output("via2.via_shape", "via2 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 400.nm) +min_space.output("via2.min_space", "via2 Min. Width : 400nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 400.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 400nm") +enc_metal2.forget + +in_topmetal = via2.not_inside(topmetal) +in_topmetal.output("via2.in_topmetal", "via2 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via2.enclosed(topmetal, 400.nm).polygons() +enc_topmetal.output("via2.in_topmetal", "via2 topmetal enclosure: 400nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 800.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 800nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 800.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 800nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp new file mode 100644 index 00000000..f4d13329 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp @@ -0,0 +1,358 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 5/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc new file mode 100644 index 00000000..d38c41a9 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc @@ -0,0 +1,192 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 2000.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 2000nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 2000.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 2000nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 1000.nm) +via_shape.output("via1.via_shape", "via1 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 1000.nm) +min_space.output("via1.min_space", "via1 Min. Width : 1000nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 1000.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 1000nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 1000.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 1000nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 2000.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 2000nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 2000.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 2000nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 1000.nm) +via_shape.output("via2.via_shape", "via2 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 1000.nm) +min_space.output("via2.min_space", "via2 Min. Width : 1000nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 1000.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 1000nm") +enc_metal2.forget + +in_topmetal = via2.not_inside(topmetal) +in_topmetal.output("via2.in_topmetal", "via2 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via2.enclosed(topmetal, 1000.nm).polygons() +enc_topmetal.output("via2.in_topmetal", "via2 topmetal enclosure: 1000nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 2000.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 2000nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 2000.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp new file mode 100644 index 00000000..f4d13329 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp @@ -0,0 +1,358 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 5/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc new file mode 100644 index 00000000..9d89aaf6 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc @@ -0,0 +1,254 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 400.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 400nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 400.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 400nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 200.nm) +via_shape.output("via1.via_shape", "via1 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 200.nm) +min_space.output("via1.min_space", "via1 Min. Width : 200nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 200.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 200nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 200nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 400.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 400nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 400.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 400nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 200.nm) +via_shape.output("via2.via_shape", "via2 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 200.nm) +min_space.output("via2.min_space", "via2 Min. Width : 200nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 200nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 200.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 200nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 400.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 400nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 400.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 400nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 200.nm) +via_shape.output("via3.via_shape", "via3 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 200.nm) +min_space.output("via3.min_space", "via3 Min. Width : 200nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 200.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 200nm") +enc_metal3.forget + +in_topmetal = via3.not_inside(topmetal) +in_topmetal.output("via3.in_topmetal", "via3 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via3.enclosed(topmetal, 200.nm).polygons() +enc_topmetal.output("via3.in_topmetal", "via3 topmetal enclosure: 200nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 400.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 400nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 400.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 400nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp new file mode 100644 index 00000000..632c71d7 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp @@ -0,0 +1,494 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 7/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc new file mode 100644 index 00000000..f806de17 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc @@ -0,0 +1,254 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 400.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 400nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 400.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 400nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 200.nm) +via_shape.output("via1.via_shape", "via1 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 200.nm) +min_space.output("via1.min_space", "via1 Min. Width : 200nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 200.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 200nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 200nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 400.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 400nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 400.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 400nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 200.nm) +via_shape.output("via2.via_shape", "via2 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 200.nm) +min_space.output("via2.min_space", "via2 Min. Width : 200nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 200nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 200.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 200nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 2000.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 2000nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 2000.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 2000nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 1000.nm) +via_shape.output("via3.via_shape", "via3 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 1000.nm) +min_space.output("via3.min_space", "via3 Min. Width : 1000nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 1000.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 1000nm") +enc_metal3.forget + +in_topmetal = via3.not_inside(topmetal) +in_topmetal.output("via3.in_topmetal", "via3 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via3.enclosed(topmetal, 1000.nm).polygons() +enc_topmetal.output("via3.in_topmetal", "via3 topmetal enclosure: 1000nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 2000.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 2000nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 2000.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp new file mode 100644 index 00000000..632c71d7 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp @@ -0,0 +1,494 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 7/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc new file mode 100644 index 00000000..71615045 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc @@ -0,0 +1,254 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 800.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 800nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 800.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 800nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 400.nm) +via_shape.output("via1.via_shape", "via1 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 400.nm) +min_space.output("via1.min_space", "via1 Min. Width : 400nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 400.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 400nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 400.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 400nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 800.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 800nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 800.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 800nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 400.nm) +via_shape.output("via2.via_shape", "via2 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 400.nm) +min_space.output("via2.min_space", "via2 Min. Width : 400nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 400.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 400nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 400.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 400nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 800.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 800nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 800.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 800nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 400.nm) +via_shape.output("via3.via_shape", "via3 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 400.nm) +min_space.output("via3.min_space", "via3 Min. Width : 400nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 400.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 400nm") +enc_metal3.forget + +in_topmetal = via3.not_inside(topmetal) +in_topmetal.output("via3.in_topmetal", "via3 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via3.enclosed(topmetal, 400.nm).polygons() +enc_topmetal.output("via3.in_topmetal", "via3 topmetal enclosure: 400nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 800.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 800nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 800.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 800nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp new file mode 100644 index 00000000..632c71d7 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp @@ -0,0 +1,494 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 7/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc new file mode 100644 index 00000000..f032ff9f --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc @@ -0,0 +1,254 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 2000.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 2000nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 2000.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 2000nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 1000.nm) +via_shape.output("via1.via_shape", "via1 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 1000.nm) +min_space.output("via1.min_space", "via1 Min. Width : 1000nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 1000.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 1000nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 1000.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 1000nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 2000.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 2000nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 2000.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 2000nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 1000.nm) +via_shape.output("via2.via_shape", "via2 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 1000.nm) +min_space.output("via2.min_space", "via2 Min. Width : 1000nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 1000.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 1000nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 1000.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 1000nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 2000.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 2000nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 2000.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 2000nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 1000.nm) +via_shape.output("via3.via_shape", "via3 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 1000.nm) +min_space.output("via3.min_space", "via3 Min. Width : 1000nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 1000.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 1000nm") +enc_metal3.forget + +in_topmetal = via3.not_inside(topmetal) +in_topmetal.output("via3.in_topmetal", "via3 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via3.enclosed(topmetal, 1000.nm).polygons() +enc_topmetal.output("via3.in_topmetal", "via3 topmetal enclosure: 1000nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 2000.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 2000nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 2000.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp new file mode 100644 index 00000000..632c71d7 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp @@ -0,0 +1,494 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 7/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc new file mode 100644 index 00000000..aeea164f --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc @@ -0,0 +1,316 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) +topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 400.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 400nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 400.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 400nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 200.nm) +via_shape.output("via1.via_shape", "via1 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 200.nm) +min_space.output("via1.min_space", "via1 Min. Width : 200nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 200.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 200nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 200nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 400.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 400nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 400.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 400nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 200.nm) +via_shape.output("via2.via_shape", "via2 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 200.nm) +min_space.output("via2.min_space", "via2 Min. Width : 200nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 200nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 200.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 200nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 400.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 400nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 400.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 400nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 200.nm) +via_shape.output("via3.via_shape", "via3 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 200.nm) +min_space.output("via3.min_space", "via3 Min. Width : 200nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 200.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 200nm") +enc_metal3.forget + +in_metal4 = via3.not_inside(metal4) +in_metal4.output("via3.in_metal4", "via3 must overlap metal4") +in_metal4.forget + +enc_metal4 = via3.enclosed(metal4, 200.nm).polygons() +enc_metal4.output("via3.in_metal4", "via3 metal4 enclosure: 200nm") +enc_metal4.forget + +#================================================ +#--------------- metal4 RULES ------------------- +#================================================ + +on_grid = metal4.ongrid(5.nm) +on_grid.output("metal4.ongrid", "metal4 On Grid : 5nm") +on_grid.forget + +in_outline = metal4.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal4.outline", "metal4 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal4.drc(width(euclidian) < 400.nm) +min_width.output("metal4.min_width", "metal4 Min. Width : 400nm") +min_width.forget + +min_space = metal4.drc(space(euclidian) < 400.nm) +min_space.output("metal4.min_space", "metal4 Min. Width : 400nm") +min_space.forget + +max_width = metal4.drc(width(euclidian) > 5000.nm) +max_width.output("metal4.max_width", "metal4 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via4 RULES ------------------- +#================================================ + +on_grid = via4.ongrid(5.nm) +on_grid.output("via4.ongrid", "via4 On Grid : 5nm") +on_grid.forget + +in_outline = via4.not_inside(outline.sized(-1000.nm)) +in_outline.output("via4.outline", "via4 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via4.drc(width(euclidian) != 200.nm) +via_shape.output("via4.via_shape", "via4 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via4.drc(space(euclidian) < 200.nm) +min_space.output("via4.min_space", "via4 Min. Width : 200nm") +min_space.forget + +in_metal4 = via4.not_inside(metal4) +in_metal4.output("via4.in_metal4", "via4 must overlap metal4") +in_metal4.forget + +enc_metal4 = via4.enclosed(metal4, 200.nm).polygons() +enc_metal4.output("via4.in_metal4", "via4 metal4 enclosure: 200nm") +enc_metal4.forget + +in_topmetal = via4.not_inside(topmetal) +in_topmetal.output("via4.in_topmetal", "via4 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via4.enclosed(topmetal, 200.nm).polygons() +enc_topmetal.output("via4.in_topmetal", "via4 topmetal enclosure: 200nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 400.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 400nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 400.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 400nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp new file mode 100644 index 00000000..c91b582b --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp @@ -0,0 +1,630 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4 + metal4 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.pin + metal4.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4.text + metal4.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.fill + metal4.fill 7/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4 + via4 8/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.pin + via4.pin 8/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4.text + via4.text 8/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.fill + via4.fill 8/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 9/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 9/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 9/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 9/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc new file mode 100644 index 00000000..987a749b --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc @@ -0,0 +1,316 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) +topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 400.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 400nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 400.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 400nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 200.nm) +via_shape.output("via1.via_shape", "via1 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 200.nm) +min_space.output("via1.min_space", "via1 Min. Width : 200nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 200.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 200nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 200nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 400.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 400nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 400.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 400nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 200.nm) +via_shape.output("via2.via_shape", "via2 Shape : 200nm x 200nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 200.nm) +min_space.output("via2.min_space", "via2 Min. Width : 200nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 200.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 200nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 200.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 200nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 800.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 800nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 800.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 800nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 400.nm) +via_shape.output("via3.via_shape", "via3 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 400.nm) +min_space.output("via3.min_space", "via3 Min. Width : 400nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 400.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 400nm") +enc_metal3.forget + +in_metal4 = via3.not_inside(metal4) +in_metal4.output("via3.in_metal4", "via3 must overlap metal4") +in_metal4.forget + +enc_metal4 = via3.enclosed(metal4, 400.nm).polygons() +enc_metal4.output("via3.in_metal4", "via3 metal4 enclosure: 400nm") +enc_metal4.forget + +#================================================ +#--------------- metal4 RULES ------------------- +#================================================ + +on_grid = metal4.ongrid(5.nm) +on_grid.output("metal4.ongrid", "metal4 On Grid : 5nm") +on_grid.forget + +in_outline = metal4.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal4.outline", "metal4 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal4.drc(width(euclidian) < 2000.nm) +min_width.output("metal4.min_width", "metal4 Min. Width : 2000nm") +min_width.forget + +min_space = metal4.drc(space(euclidian) < 2000.nm) +min_space.output("metal4.min_space", "metal4 Min. Width : 2000nm") +min_space.forget + +max_width = metal4.drc(width(euclidian) > 5000.nm) +max_width.output("metal4.max_width", "metal4 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via4 RULES ------------------- +#================================================ + +on_grid = via4.ongrid(5.nm) +on_grid.output("via4.ongrid", "via4 On Grid : 5nm") +on_grid.forget + +in_outline = via4.not_inside(outline.sized(-1000.nm)) +in_outline.output("via4.outline", "via4 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via4.drc(width(euclidian) != 1000.nm) +via_shape.output("via4.via_shape", "via4 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via4.drc(space(euclidian) < 1000.nm) +min_space.output("via4.min_space", "via4 Min. Width : 1000nm") +min_space.forget + +in_metal4 = via4.not_inside(metal4) +in_metal4.output("via4.in_metal4", "via4 must overlap metal4") +in_metal4.forget + +enc_metal4 = via4.enclosed(metal4, 1000.nm).polygons() +enc_metal4.output("via4.in_metal4", "via4 metal4 enclosure: 1000nm") +enc_metal4.forget + +in_topmetal = via4.not_inside(topmetal) +in_topmetal.output("via4.in_topmetal", "via4 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via4.enclosed(topmetal, 1000.nm).polygons() +enc_topmetal.output("via4.in_topmetal", "via4 topmetal enclosure: 1000nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 2000.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 2000nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 2000.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp new file mode 100644 index 00000000..c91b582b --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp @@ -0,0 +1,630 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4 + metal4 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.pin + metal4.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4.text + metal4.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.fill + metal4.fill 7/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4 + via4 8/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.pin + via4.pin 8/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4.text + via4.text 8/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.fill + via4.fill 8/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 9/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 9/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 9/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 9/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc new file mode 100644 index 00000000..0fc1da04 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc @@ -0,0 +1,316 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) +topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 800.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 800nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 800.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 800nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 400.nm) +via_shape.output("via1.via_shape", "via1 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 400.nm) +min_space.output("via1.min_space", "via1 Min. Width : 400nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 400.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 400nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 400.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 400nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 800.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 800nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 800.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 800nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 400.nm) +via_shape.output("via2.via_shape", "via2 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 400.nm) +min_space.output("via2.min_space", "via2 Min. Width : 400nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 400.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 400nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 400.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 400nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 800.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 800nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 800.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 800nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 400.nm) +via_shape.output("via3.via_shape", "via3 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 400.nm) +min_space.output("via3.min_space", "via3 Min. Width : 400nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 400.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 400nm") +enc_metal3.forget + +in_metal4 = via3.not_inside(metal4) +in_metal4.output("via3.in_metal4", "via3 must overlap metal4") +in_metal4.forget + +enc_metal4 = via3.enclosed(metal4, 400.nm).polygons() +enc_metal4.output("via3.in_metal4", "via3 metal4 enclosure: 400nm") +enc_metal4.forget + +#================================================ +#--------------- metal4 RULES ------------------- +#================================================ + +on_grid = metal4.ongrid(5.nm) +on_grid.output("metal4.ongrid", "metal4 On Grid : 5nm") +on_grid.forget + +in_outline = metal4.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal4.outline", "metal4 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal4.drc(width(euclidian) < 800.nm) +min_width.output("metal4.min_width", "metal4 Min. Width : 800nm") +min_width.forget + +min_space = metal4.drc(space(euclidian) < 800.nm) +min_space.output("metal4.min_space", "metal4 Min. Width : 800nm") +min_space.forget + +max_width = metal4.drc(width(euclidian) > 5000.nm) +max_width.output("metal4.max_width", "metal4 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via4 RULES ------------------- +#================================================ + +on_grid = via4.ongrid(5.nm) +on_grid.output("via4.ongrid", "via4 On Grid : 5nm") +on_grid.forget + +in_outline = via4.not_inside(outline.sized(-1000.nm)) +in_outline.output("via4.outline", "via4 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via4.drc(width(euclidian) != 400.nm) +via_shape.output("via4.via_shape", "via4 Shape : 400nm x 400nm") +via_shape.forget + +min_space = via4.drc(space(euclidian) < 400.nm) +min_space.output("via4.min_space", "via4 Min. Width : 400nm") +min_space.forget + +in_metal4 = via4.not_inside(metal4) +in_metal4.output("via4.in_metal4", "via4 must overlap metal4") +in_metal4.forget + +enc_metal4 = via4.enclosed(metal4, 400.nm).polygons() +enc_metal4.output("via4.in_metal4", "via4 metal4 enclosure: 400nm") +enc_metal4.forget + +in_topmetal = via4.not_inside(topmetal) +in_topmetal.output("via4.in_topmetal", "via4 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via4.enclosed(topmetal, 400.nm).polygons() +enc_topmetal.output("via4.in_topmetal", "via4 topmetal enclosure: 400nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 800.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 800nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 800.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 800nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp new file mode 100644 index 00000000..c91b582b --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp @@ -0,0 +1,630 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4 + metal4 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.pin + metal4.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4.text + metal4.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.fill + metal4.fill 7/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4 + via4 8/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.pin + via4.pin 8/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4.text + via4.text 8/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.fill + via4.fill 8/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 9/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 9/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 9/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 9/30@1 + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc new file mode 100644 index 00000000..b708d963 --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc @@ -0,0 +1,316 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#================================================ +#---------- Interposer DRC RULE DECK ------------ +#================================================ +# Required inputs: +# input - input gds/oas +# topcell - topcell +# report - path to report file +# threads - number of threads to use + +print("Layout: %s\n" % [$input]) +source($input, $topcell) + +print("DRC report: %s\n" % [$report]) +report("DRC Report", $report) + +# Requires threads to be defined +print("Number of threads to use %s\n" % [$threads]) +threads($threads) + +# Run in flat mode +flat + +#================================================ +#------------- LAYERS DEFINITIONS --------------- +#================================================ + +outline = polygons(0, 0) +metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) +via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) +metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) +via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) +metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) +metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) +topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) + +#================================================ +#--------------- metal1 RULES ------------------- +#================================================ + +on_grid = metal1.ongrid(5.nm) +on_grid.output("metal1.ongrid", "metal1 On Grid : 5nm") +on_grid.forget + +in_outline = metal1.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal1.outline", "metal1 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal1.drc(width(euclidian) < 2000.nm) +min_width.output("metal1.min_width", "metal1 Min. Width : 2000nm") +min_width.forget + +min_space = metal1.drc(space(euclidian) < 2000.nm) +min_space.output("metal1.min_space", "metal1 Min. Width : 2000nm") +min_space.forget + +max_width = metal1.drc(width(euclidian) > 5000.nm) +max_width.output("metal1.max_width", "metal1 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via1 RULES ------------------- +#================================================ + +on_grid = via1.ongrid(5.nm) +on_grid.output("via1.ongrid", "via1 On Grid : 5nm") +on_grid.forget + +in_outline = via1.not_inside(outline.sized(-1000.nm)) +in_outline.output("via1.outline", "via1 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via1.drc(width(euclidian) != 1000.nm) +via_shape.output("via1.via_shape", "via1 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via1.drc(space(euclidian) < 1000.nm) +min_space.output("via1.min_space", "via1 Min. Width : 1000nm") +min_space.forget + +in_metal1 = via1.not_inside(metal1) +in_metal1.output("via1.in_metal1", "via1 must overlap metal1") +in_metal1.forget + +enc_metal1 = via1.enclosed(metal1, 1000.nm).polygons() +enc_metal1.output("via1.in_metal1", "via1 metal1 enclosure: 1000nm") +enc_metal1.forget + +in_metal2 = via1.not_inside(metal2) +in_metal2.output("via1.in_metal2", "via1 must overlap metal2") +in_metal2.forget + +enc_metal2 = via1.enclosed(metal2, 1000.nm).polygons() +enc_metal2.output("via1.in_metal2", "via1 metal2 enclosure: 1000nm") +enc_metal2.forget + +#================================================ +#--------------- metal2 RULES ------------------- +#================================================ + +on_grid = metal2.ongrid(5.nm) +on_grid.output("metal2.ongrid", "metal2 On Grid : 5nm") +on_grid.forget + +in_outline = metal2.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal2.outline", "metal2 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal2.drc(width(euclidian) < 2000.nm) +min_width.output("metal2.min_width", "metal2 Min. Width : 2000nm") +min_width.forget + +min_space = metal2.drc(space(euclidian) < 2000.nm) +min_space.output("metal2.min_space", "metal2 Min. Width : 2000nm") +min_space.forget + +max_width = metal2.drc(width(euclidian) > 5000.nm) +max_width.output("metal2.max_width", "metal2 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via2 RULES ------------------- +#================================================ + +on_grid = via2.ongrid(5.nm) +on_grid.output("via2.ongrid", "via2 On Grid : 5nm") +on_grid.forget + +in_outline = via2.not_inside(outline.sized(-1000.nm)) +in_outline.output("via2.outline", "via2 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via2.drc(width(euclidian) != 1000.nm) +via_shape.output("via2.via_shape", "via2 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via2.drc(space(euclidian) < 1000.nm) +min_space.output("via2.min_space", "via2 Min. Width : 1000nm") +min_space.forget + +in_metal2 = via2.not_inside(metal2) +in_metal2.output("via2.in_metal2", "via2 must overlap metal2") +in_metal2.forget + +enc_metal2 = via2.enclosed(metal2, 1000.nm).polygons() +enc_metal2.output("via2.in_metal2", "via2 metal2 enclosure: 1000nm") +enc_metal2.forget + +in_metal3 = via2.not_inside(metal3) +in_metal3.output("via2.in_metal3", "via2 must overlap metal3") +in_metal3.forget + +enc_metal3 = via2.enclosed(metal3, 1000.nm).polygons() +enc_metal3.output("via2.in_metal3", "via2 metal3 enclosure: 1000nm") +enc_metal3.forget + +#================================================ +#--------------- metal3 RULES ------------------- +#================================================ + +on_grid = metal3.ongrid(5.nm) +on_grid.output("metal3.ongrid", "metal3 On Grid : 5nm") +on_grid.forget + +in_outline = metal3.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal3.outline", "metal3 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal3.drc(width(euclidian) < 2000.nm) +min_width.output("metal3.min_width", "metal3 Min. Width : 2000nm") +min_width.forget + +min_space = metal3.drc(space(euclidian) < 2000.nm) +min_space.output("metal3.min_space", "metal3 Min. Width : 2000nm") +min_space.forget + +max_width = metal3.drc(width(euclidian) > 5000.nm) +max_width.output("metal3.max_width", "metal3 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via3 RULES ------------------- +#================================================ + +on_grid = via3.ongrid(5.nm) +on_grid.output("via3.ongrid", "via3 On Grid : 5nm") +on_grid.forget + +in_outline = via3.not_inside(outline.sized(-1000.nm)) +in_outline.output("via3.outline", "via3 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via3.drc(width(euclidian) != 1000.nm) +via_shape.output("via3.via_shape", "via3 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via3.drc(space(euclidian) < 1000.nm) +min_space.output("via3.min_space", "via3 Min. Width : 1000nm") +min_space.forget + +in_metal3 = via3.not_inside(metal3) +in_metal3.output("via3.in_metal3", "via3 must overlap metal3") +in_metal3.forget + +enc_metal3 = via3.enclosed(metal3, 1000.nm).polygons() +enc_metal3.output("via3.in_metal3", "via3 metal3 enclosure: 1000nm") +enc_metal3.forget + +in_metal4 = via3.not_inside(metal4) +in_metal4.output("via3.in_metal4", "via3 must overlap metal4") +in_metal4.forget + +enc_metal4 = via3.enclosed(metal4, 1000.nm).polygons() +enc_metal4.output("via3.in_metal4", "via3 metal4 enclosure: 1000nm") +enc_metal4.forget + +#================================================ +#--------------- metal4 RULES ------------------- +#================================================ + +on_grid = metal4.ongrid(5.nm) +on_grid.output("metal4.ongrid", "metal4 On Grid : 5nm") +on_grid.forget + +in_outline = metal4.not_inside(outline.sized(-1000.nm)) +in_outline.output("metal4.outline", "metal4 Inside Outline : 1000nm") +in_outline.forget + +min_width = metal4.drc(width(euclidian) < 2000.nm) +min_width.output("metal4.min_width", "metal4 Min. Width : 2000nm") +min_width.forget + +min_space = metal4.drc(space(euclidian) < 2000.nm) +min_space.output("metal4.min_space", "metal4 Min. Width : 2000nm") +min_space.forget + +max_width = metal4.drc(width(euclidian) > 5000.nm) +max_width.output("metal4.max_width", "metal4 Max. Width : 5000nm") +max_width.forget + +#================================================ +#--------------- via4 RULES ------------------- +#================================================ + +on_grid = via4.ongrid(5.nm) +on_grid.output("via4.ongrid", "via4 On Grid : 5nm") +on_grid.forget + +in_outline = via4.not_inside(outline.sized(-1000.nm)) +in_outline.output("via4.outline", "via4 Inside Outline : 1000nm") +in_outline.forget + +via_shape = via4.drc(width(euclidian) != 1000.nm) +via_shape.output("via4.via_shape", "via4 Shape : 1000nm x 1000nm") +via_shape.forget + +min_space = via4.drc(space(euclidian) < 1000.nm) +min_space.output("via4.min_space", "via4 Min. Width : 1000nm") +min_space.forget + +in_metal4 = via4.not_inside(metal4) +in_metal4.output("via4.in_metal4", "via4 must overlap metal4") +in_metal4.forget + +enc_metal4 = via4.enclosed(metal4, 1000.nm).polygons() +enc_metal4.output("via4.in_metal4", "via4 metal4 enclosure: 1000nm") +enc_metal4.forget + +in_topmetal = via4.not_inside(topmetal) +in_topmetal.output("via4.in_topmetal", "via4 must overlap topmetal") +in_topmetal.forget + +enc_topmetal = via4.enclosed(topmetal, 1000.nm).polygons() +enc_topmetal.output("via4.in_topmetal", "via4 topmetal enclosure: 1000nm") +enc_topmetal.forget + +#================================================ +#--------------- topmetal RULES ------------------- +#================================================ + +on_grid = topmetal.ongrid(5.nm) +on_grid.output("topmetal.ongrid", "topmetal On Grid : 5nm") +on_grid.forget + +in_outline = topmetal.not_inside(outline.sized(-1000.nm)) +in_outline.output("topmetal.outline", "topmetal Inside Outline : 1000nm") +in_outline.forget + +min_width = topmetal.drc(width(euclidian) < 2000.nm) +min_width.output("topmetal.min_width", "topmetal Min. Width : 2000nm") +min_width.forget + +min_space = topmetal.drc(space(euclidian) < 2000.nm) +min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") +min_space.forget + +max_width = topmetal.drc(width(euclidian) > 5000.nm) +max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") +max_width.forget + + diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp new file mode 100644 index 00000000..c91b582b --- /dev/null +++ b/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp @@ -0,0 +1,630 @@ + + + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1 + metal1 1/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.pin + metal1.pin 1/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal1.text + metal1.text 1/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal1.fill + metal1.fill 1/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1 + via1 2/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.pin + via1.pin 2/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via1.text + via1.text 2/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via1.fill + via1.fill 2/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2 + metal2 3/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.pin + metal2.pin 3/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal2.text + metal2.text 3/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal2.fill + metal2.fill 3/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2 + via2 4/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.pin + via2.pin 4/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via2.text + via2.text 4/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via2.fill + via2.fill 4/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3 + metal3 5/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.pin + metal3.pin 5/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal3.text + metal3.text 5/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal3.fill + metal3.fill 5/30@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3 + via3 6/0@1 + + + #8086ff + 0 + #8086ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.pin + via3.pin 6/10@1 + + + #80a8ff + 0 + #80a8ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + via3.text + via3.text 6/20@1 + + + #ff0000 + 0 + #ff0000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via3.fill + via3.fill 6/30@1 + + + #ff0080 + 0 + #ff0080 + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4 + metal4 7/0@1 + + + #ff00ff + 0 + #ff00ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.pin + metal4.pin 7/10@1 + + + #8000ff + 0 + #8000ff + 0 + I5 + + true + true + false + 1 + false + false + 0 + metal4.text + metal4.text 7/20@1 + + + #91ff00 + 0 + #91ff00 + 0 + I9 + + true + true + false + 1 + false + false + 0 + metal4.fill + metal4.fill 7/30@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4 + via4 8/0@1 + + + #508000 + 0 + #508000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.pin + via4.pin 8/10@1 + + + #808000 + 0 + #808000 + 0 + I5 + + true + true + false + 1 + false + false + 0 + via4.text + via4.text 8/20@1 + + + #805000 + 0 + #805000 + 0 + I9 + + true + true + false + 1 + false + false + 0 + via4.fill + via4.fill 8/30@1 + + + #ffc280 + 0 + #ffc280 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal + topmetal 9/0@1 + + + #ff9d9d + 0 + #ff9d9d + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.pin + topmetal.pin 9/10@1 + + + #ff80a8 + 0 + #ff80a8 + 0 + I5 + + true + true + false + 1 + false + false + 0 + topmetal.text + topmetal.text 9/20@1 + + + #c080ff + 0 + #c080ff + 0 + I9 + + true + true + false + 1 + false + false + 0 + topmetal.fill + topmetal.fill 9/30@1 + + diff --git a/lambdapdk/interposer/base/templates/pex.tcl.j2 b/lambdapdk/interposer/base/templates/pex.tcl.j2 index acd1509a..c6a0ca90 100644 --- a/lambdapdk/interposer/base/templates/pex.tcl.j2 +++ b/lambdapdk/interposer/base/templates/pex.tcl.j2 @@ -1,4 +1,4 @@ -{% for line in license.splitlines() %}# {{ line }} +{% for line in license.splitlines() %}#{% if line %} {{ line }}{% endif %} {% endfor %} # Metals{% for layer, resistance, capacitance in metals %} set_layer_rc {{ '{{' }} corner {{ '}}' }} \ From a7b3d0c4c69f1b9e929e7ce1976cdc80f9b104bf Mon Sep 17 00:00:00 2001 From: Peter Gadfort Date: Thu, 31 Oct 2024 13:03:37 -0400 Subject: [PATCH 3/5] make topmetal 100 GDS number and add bumps library --- lambdapdk/__init__.py | 4 +- lambdapdk/ihp130/libs/sg13g2_sram.py | 2 +- lambdapdk/interposer/__init__.py | 11 ++-- lambdapdk/interposer/_generator.py | 1 + .../interposer/base/apr/3ML_0400.layermap | 16 +++--- .../base/apr/3ML_0400_2000.layermap | 16 +++--- .../interposer/base/apr/3ML_0800.layermap | 16 +++--- .../interposer/base/apr/3ML_2000.layermap | 16 +++--- .../interposer/base/apr/4ML_0400.layermap | 16 +++--- .../base/apr/4ML_0400_2000.layermap | 16 +++--- .../interposer/base/apr/4ML_0800.layermap | 16 +++--- .../interposer/base/apr/4ML_2000.layermap | 16 +++--- .../interposer/base/apr/5ML_0400.layermap | 16 +++--- .../base/apr/5ML_0400_2000.layermap | 16 +++--- .../interposer/base/apr/5ML_0800.layermap | 16 +++--- .../interposer/base/apr/5ML_2000.layermap | 16 +++--- .../base/setup/klayout/3ML_0400.drc | 2 +- .../base/setup/klayout/3ML_0400.lyp | 8 +-- .../base/setup/klayout/3ML_0400_2000.drc | 2 +- .../base/setup/klayout/3ML_0400_2000.lyp | 8 +-- .../base/setup/klayout/3ML_0800.drc | 2 +- .../base/setup/klayout/3ML_0800.lyp | 8 +-- .../base/setup/klayout/3ML_2000.drc | 2 +- .../base/setup/klayout/3ML_2000.lyp | 8 +-- .../base/setup/klayout/4ML_0400.drc | 2 +- .../base/setup/klayout/4ML_0400.lyp | 8 +-- .../base/setup/klayout/4ML_0400_2000.drc | 2 +- .../base/setup/klayout/4ML_0400_2000.lyp | 8 +-- .../base/setup/klayout/4ML_0800.drc | 2 +- .../base/setup/klayout/4ML_0800.lyp | 8 +-- .../base/setup/klayout/4ML_2000.drc | 2 +- .../base/setup/klayout/4ML_2000.lyp | 8 +-- .../base/setup/klayout/5ML_0400.drc | 2 +- .../base/setup/klayout/5ML_0400.lyp | 8 +-- .../base/setup/klayout/5ML_0400_2000.drc | 2 +- .../base/setup/klayout/5ML_0400_2000.lyp | 8 +-- .../base/setup/klayout/5ML_0800.drc | 2 +- .../base/setup/klayout/5ML_0800.lyp | 8 +-- .../base/setup/klayout/5ML_2000.drc | 2 +- .../base/setup/klayout/5ML_2000.lyp | 8 +-- lambdapdk/interposer/libs/bumps.py | 31 ++++++++++++ lambdapdk/interposer/libs/bumps/gds/bumps.gds | Bin 0 -> 342 bytes lambdapdk/interposer/libs/bumps/lef/bumps.lef | 47 ++++++++++++++++++ tests/test_getters.py | 4 +- tests/test_paths.py | 6 ++- 45 files changed, 252 insertions(+), 166 deletions(-) create mode 100644 lambdapdk/interposer/libs/bumps.py create mode 100644 lambdapdk/interposer/libs/bumps/gds/bumps.gds create mode 100644 lambdapdk/interposer/libs/bumps/lef/bumps.lef diff --git a/lambdapdk/__init__.py b/lambdapdk/__init__.py index bbcd6fda..eaceab69 100644 --- a/lambdapdk/__init__.py +++ b/lambdapdk/__init__.py @@ -43,6 +43,7 @@ def get_libs(): from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram from lambdapdk.gf180.libs import gf180mcu, gf180io, gf180sram from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram + from lambdapdk.interposer.libs import bumps as interposer_bumps all_libs = [] for lib_mod in [ @@ -50,7 +51,8 @@ def get_libs(): nangate45, fakeram45, sky130sc, sky130io, sky130sram, gf180mcu, gf180io, gf180sram, - sg13g2_stdcell, sg13g2_sram]: + sg13g2_stdcell, sg13g2_sram, + interposer_bumps]: libs = lib_mod.setup() if not isinstance(libs, (list, tuple)): libs = [libs] diff --git a/lambdapdk/ihp130/libs/sg13g2_sram.py b/lambdapdk/ihp130/libs/sg13g2_sram.py index eb6a478c..1f28d928 100644 --- a/lambdapdk/ihp130/libs/sg13g2_sram.py +++ b/lambdapdk/ihp130/libs/sg13g2_sram.py @@ -15,7 +15,7 @@ def setup(): path_base = 'ihp-sg13g2/libs.ref/sg13g2_sram' lib.add('output', stackup, 'lef', f'{path_base}/lef/{mem_name}.lef') lib.add('output', stackup, 'gds', f'{path_base}/gds/{mem_name}.gds') - lib.add('output', stackup, 'cdl', f'{path_base}/spice/{mem_name}.cdl') + lib.add('output', stackup, 'cdl', f'{path_base}/cdl/{mem_name}.cdl') lib.add('output', 'typ', 'nldm', f'{path_base}/lib/{mem_name}_typ_1p20V_25C.lib') lib.add('output', 'slow', 'nldm', f'{path_base}/lib/{mem_name}_slow_1p08V_125C.lib') diff --git a/lambdapdk/interposer/__init__.py b/lambdapdk/interposer/__init__.py index 83297f81..08bbe867 100644 --- a/lambdapdk/interposer/__init__.py +++ b/lambdapdk/interposer/__init__.py @@ -3,6 +3,12 @@ from lambdapdk import register_data_source +stackups = [] +for m in ("3ML", "4ML", "5ML"): + for w in ("0400", "0800", "2000", "0400_2000"): + stackups.append(f'{m}_{w}') + + #################################################### # PDK Setup #################################################### @@ -32,11 +38,6 @@ def setup(): pdk = siliconcompiler.PDK(process, package='lambdapdk') register_data_source(pdk) - stackups = [] - for m in ("3ML", "4ML", "5ML"): - for w in ("0400", "0800", "2000", "0400_2000"): - stackups.append(f'{m}_{w}') - # process name pdk.set('pdk', process, 'foundry', foundry) pdk.set('pdk', process, 'node', node) diff --git a/lambdapdk/interposer/_generator.py b/lambdapdk/interposer/_generator.py index 1ba14287..2d793630 100644 --- a/lambdapdk/interposer/_generator.py +++ b/lambdapdk/interposer/_generator.py @@ -114,6 +114,7 @@ def build_tech(layer_count, name=None, width=None): metal_name = f"metal{layeridx}" if layeridx == layer_count: metal_name = "topmetal" + gds_layer = 100 layers.append( make_metal_layer( diff --git a/lambdapdk/interposer/base/apr/3ML_0400.layermap b/lambdapdk/interposer/base/apr/3ML_0400.layermap index 77a62c8f..eb2b5a52 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0400.layermap @@ -47,11 +47,11 @@ via2 FILL 4 30 NAME via2/PIN 4 20 NAME via2/SPNET 4 20 NAME via2/TEXT 4 20 -topmetal NET 5 0 -topmetal SPNET 5 0 -topmetal PIN 5 10 -topmetal LEFPIN 5 10 -topmetal FILL 5 30 -NAME topmetal/PIN 5 20 -NAME topmetal/SPNET 5 20 -NAME topmetal/TEXT 5 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap index 77a62c8f..eb2b5a52 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap @@ -47,11 +47,11 @@ via2 FILL 4 30 NAME via2/PIN 4 20 NAME via2/SPNET 4 20 NAME via2/TEXT 4 20 -topmetal NET 5 0 -topmetal SPNET 5 0 -topmetal PIN 5 10 -topmetal LEFPIN 5 10 -topmetal FILL 5 30 -NAME topmetal/PIN 5 20 -NAME topmetal/SPNET 5 20 -NAME topmetal/TEXT 5 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/3ML_0800.layermap b/lambdapdk/interposer/base/apr/3ML_0800.layermap index 77a62c8f..eb2b5a52 100644 --- a/lambdapdk/interposer/base/apr/3ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0800.layermap @@ -47,11 +47,11 @@ via2 FILL 4 30 NAME via2/PIN 4 20 NAME via2/SPNET 4 20 NAME via2/TEXT 4 20 -topmetal NET 5 0 -topmetal SPNET 5 0 -topmetal PIN 5 10 -topmetal LEFPIN 5 10 -topmetal FILL 5 30 -NAME topmetal/PIN 5 20 -NAME topmetal/SPNET 5 20 -NAME topmetal/TEXT 5 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/3ML_2000.layermap b/lambdapdk/interposer/base/apr/3ML_2000.layermap index 77a62c8f..eb2b5a52 100644 --- a/lambdapdk/interposer/base/apr/3ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/3ML_2000.layermap @@ -47,11 +47,11 @@ via2 FILL 4 30 NAME via2/PIN 4 20 NAME via2/SPNET 4 20 NAME via2/TEXT 4 20 -topmetal NET 5 0 -topmetal SPNET 5 0 -topmetal PIN 5 10 -topmetal LEFPIN 5 10 -topmetal FILL 5 30 -NAME topmetal/PIN 5 20 -NAME topmetal/SPNET 5 20 -NAME topmetal/TEXT 5 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/4ML_0400.layermap b/lambdapdk/interposer/base/apr/4ML_0400.layermap index 18704b65..158a63c6 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0400.layermap @@ -63,11 +63,11 @@ via3 FILL 6 30 NAME via3/PIN 6 20 NAME via3/SPNET 6 20 NAME via3/TEXT 6 20 -topmetal NET 7 0 -topmetal SPNET 7 0 -topmetal PIN 7 10 -topmetal LEFPIN 7 10 -topmetal FILL 7 30 -NAME topmetal/PIN 7 20 -NAME topmetal/SPNET 7 20 -NAME topmetal/TEXT 7 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap index 18704b65..158a63c6 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap @@ -63,11 +63,11 @@ via3 FILL 6 30 NAME via3/PIN 6 20 NAME via3/SPNET 6 20 NAME via3/TEXT 6 20 -topmetal NET 7 0 -topmetal SPNET 7 0 -topmetal PIN 7 10 -topmetal LEFPIN 7 10 -topmetal FILL 7 30 -NAME topmetal/PIN 7 20 -NAME topmetal/SPNET 7 20 -NAME topmetal/TEXT 7 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/4ML_0800.layermap b/lambdapdk/interposer/base/apr/4ML_0800.layermap index 18704b65..158a63c6 100644 --- a/lambdapdk/interposer/base/apr/4ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0800.layermap @@ -63,11 +63,11 @@ via3 FILL 6 30 NAME via3/PIN 6 20 NAME via3/SPNET 6 20 NAME via3/TEXT 6 20 -topmetal NET 7 0 -topmetal SPNET 7 0 -topmetal PIN 7 10 -topmetal LEFPIN 7 10 -topmetal FILL 7 30 -NAME topmetal/PIN 7 20 -NAME topmetal/SPNET 7 20 -NAME topmetal/TEXT 7 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/4ML_2000.layermap b/lambdapdk/interposer/base/apr/4ML_2000.layermap index 18704b65..158a63c6 100644 --- a/lambdapdk/interposer/base/apr/4ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/4ML_2000.layermap @@ -63,11 +63,11 @@ via3 FILL 6 30 NAME via3/PIN 6 20 NAME via3/SPNET 6 20 NAME via3/TEXT 6 20 -topmetal NET 7 0 -topmetal SPNET 7 0 -topmetal PIN 7 10 -topmetal LEFPIN 7 10 -topmetal FILL 7 30 -NAME topmetal/PIN 7 20 -NAME topmetal/SPNET 7 20 -NAME topmetal/TEXT 7 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/5ML_0400.layermap b/lambdapdk/interposer/base/apr/5ML_0400.layermap index de53c0b4..f2129fd7 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0400.layermap @@ -79,11 +79,11 @@ via4 FILL 8 30 NAME via4/PIN 8 20 NAME via4/SPNET 8 20 NAME via4/TEXT 8 20 -topmetal NET 9 0 -topmetal SPNET 9 0 -topmetal PIN 9 10 -topmetal LEFPIN 9 10 -topmetal FILL 9 30 -NAME topmetal/PIN 9 20 -NAME topmetal/SPNET 9 20 -NAME topmetal/TEXT 9 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap index de53c0b4..f2129fd7 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap @@ -79,11 +79,11 @@ via4 FILL 8 30 NAME via4/PIN 8 20 NAME via4/SPNET 8 20 NAME via4/TEXT 8 20 -topmetal NET 9 0 -topmetal SPNET 9 0 -topmetal PIN 9 10 -topmetal LEFPIN 9 10 -topmetal FILL 9 30 -NAME topmetal/PIN 9 20 -NAME topmetal/SPNET 9 20 -NAME topmetal/TEXT 9 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/5ML_0800.layermap b/lambdapdk/interposer/base/apr/5ML_0800.layermap index de53c0b4..f2129fd7 100644 --- a/lambdapdk/interposer/base/apr/5ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0800.layermap @@ -79,11 +79,11 @@ via4 FILL 8 30 NAME via4/PIN 8 20 NAME via4/SPNET 8 20 NAME via4/TEXT 8 20 -topmetal NET 9 0 -topmetal SPNET 9 0 -topmetal PIN 9 10 -topmetal LEFPIN 9 10 -topmetal FILL 9 30 -NAME topmetal/PIN 9 20 -NAME topmetal/SPNET 9 20 -NAME topmetal/TEXT 9 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/apr/5ML_2000.layermap b/lambdapdk/interposer/base/apr/5ML_2000.layermap index de53c0b4..f2129fd7 100644 --- a/lambdapdk/interposer/base/apr/5ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/5ML_2000.layermap @@ -79,11 +79,11 @@ via4 FILL 8 30 NAME via4/PIN 8 20 NAME via4/SPNET 8 20 NAME via4/TEXT 8 20 -topmetal NET 9 0 -topmetal SPNET 9 0 -topmetal PIN 9 10 -topmetal LEFPIN 9 10 -topmetal FILL 9 30 -NAME topmetal/PIN 9 20 -NAME topmetal/SPNET 9 20 -NAME topmetal/TEXT 9 20 +topmetal NET 100 0 +topmetal SPNET 100 0 +topmetal PIN 100 10 +topmetal LEFPIN 100 10 +topmetal FILL 100 30 +NAME topmetal/PIN 100 20 +NAME topmetal/SPNET 100 20 +NAME topmetal/TEXT 100 20 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc index 6468218b..201a4061 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc @@ -43,7 +43,7 @@ metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) -topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp index f4d13329..bcb5d05f 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp @@ -302,7 +302,7 @@ limitations under the License. false 0 topmetal - topmetal 5/0@1 + topmetal 100/0@1 #ff9d9d @@ -319,7 +319,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 5/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -336,7 +336,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 5/20@1 + topmetal.text 100/20@1 #c080ff @@ -353,6 +353,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 5/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc index 7d1eca29..43c5d7ae 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc @@ -43,7 +43,7 @@ metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) -topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp index f4d13329..bcb5d05f 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp @@ -302,7 +302,7 @@ limitations under the License. false 0 topmetal - topmetal 5/0@1 + topmetal 100/0@1 #ff9d9d @@ -319,7 +319,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 5/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -336,7 +336,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 5/20@1 + topmetal.text 100/20@1 #c080ff @@ -353,6 +353,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 5/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc index 70c864c2..681c7dc9 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc @@ -43,7 +43,7 @@ metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) -topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp index f4d13329..bcb5d05f 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp @@ -302,7 +302,7 @@ limitations under the License. false 0 topmetal - topmetal 5/0@1 + topmetal 100/0@1 #ff9d9d @@ -319,7 +319,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 5/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -336,7 +336,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 5/20@1 + topmetal.text 100/20@1 #c080ff @@ -353,6 +353,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 5/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc index d38c41a9..a3dba1cb 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc @@ -43,7 +43,7 @@ metal1 = polygons(1, 0) + polygons(1, 10) + polygons(1, 30) via1 = polygons(2, 0) + polygons(2, 10) + polygons(2, 30) metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) -topmetal = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp index f4d13329..bcb5d05f 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp @@ -302,7 +302,7 @@ limitations under the License. false 0 topmetal - topmetal 5/0@1 + topmetal 100/0@1 #ff9d9d @@ -319,7 +319,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 5/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -336,7 +336,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 5/20@1 + topmetal.text 100/20@1 #c080ff @@ -353,6 +353,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 5/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc index 9d89aaf6..34c57cd4 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc @@ -45,7 +45,7 @@ metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) -topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp index 632c71d7..d3d01757 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp @@ -438,7 +438,7 @@ limitations under the License. false 0 topmetal - topmetal 7/0@1 + topmetal 100/0@1 #ff00ff @@ -455,7 +455,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 7/10@1 + topmetal.pin 100/10@1 #8000ff @@ -472,7 +472,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 7/20@1 + topmetal.text 100/20@1 #91ff00 @@ -489,6 +489,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 7/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc index f806de17..ef4136aa 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc @@ -45,7 +45,7 @@ metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) -topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp index 632c71d7..d3d01757 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp @@ -438,7 +438,7 @@ limitations under the License. false 0 topmetal - topmetal 7/0@1 + topmetal 100/0@1 #ff00ff @@ -455,7 +455,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 7/10@1 + topmetal.pin 100/10@1 #8000ff @@ -472,7 +472,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 7/20@1 + topmetal.text 100/20@1 #91ff00 @@ -489,6 +489,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 7/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc index 71615045..ae28150f 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc @@ -45,7 +45,7 @@ metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) -topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp index 632c71d7..d3d01757 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp @@ -438,7 +438,7 @@ limitations under the License. false 0 topmetal - topmetal 7/0@1 + topmetal 100/0@1 #ff00ff @@ -455,7 +455,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 7/10@1 + topmetal.pin 100/10@1 #8000ff @@ -472,7 +472,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 7/20@1 + topmetal.text 100/20@1 #91ff00 @@ -489,6 +489,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 7/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc index f032ff9f..ba3fec4a 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc @@ -45,7 +45,7 @@ metal2 = polygons(3, 0) + polygons(3, 10) + polygons(3, 30) via2 = polygons(4, 0) + polygons(4, 10) + polygons(4, 30) metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) -topmetal = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp index 632c71d7..d3d01757 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp @@ -438,7 +438,7 @@ limitations under the License. false 0 topmetal - topmetal 7/0@1 + topmetal 100/0@1 #ff00ff @@ -455,7 +455,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 7/10@1 + topmetal.pin 100/10@1 #8000ff @@ -472,7 +472,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 7/20@1 + topmetal.text 100/20@1 #91ff00 @@ -489,6 +489,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 7/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc index aeea164f..bf8fbd55 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc @@ -47,7 +47,7 @@ metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) -topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp index c91b582b..aa30279c 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp @@ -574,7 +574,7 @@ limitations under the License. false 0 topmetal - topmetal 9/0@1 + topmetal 100/0@1 #ff9d9d @@ -591,7 +591,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 9/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -608,7 +608,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 9/20@1 + topmetal.text 100/20@1 #c080ff @@ -625,6 +625,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 9/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc index 987a749b..7aa602a3 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc @@ -47,7 +47,7 @@ metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) -topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp index c91b582b..aa30279c 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp @@ -574,7 +574,7 @@ limitations under the License. false 0 topmetal - topmetal 9/0@1 + topmetal 100/0@1 #ff9d9d @@ -591,7 +591,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 9/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -608,7 +608,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 9/20@1 + topmetal.text 100/20@1 #c080ff @@ -625,6 +625,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 9/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc index 0fc1da04..e2d80237 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc @@ -47,7 +47,7 @@ metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) -topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp index c91b582b..aa30279c 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp @@ -574,7 +574,7 @@ limitations under the License. false 0 topmetal - topmetal 9/0@1 + topmetal 100/0@1 #ff9d9d @@ -591,7 +591,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 9/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -608,7 +608,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 9/20@1 + topmetal.text 100/20@1 #c080ff @@ -625,6 +625,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 9/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc index b708d963..54577178 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc @@ -47,7 +47,7 @@ metal3 = polygons(5, 0) + polygons(5, 10) + polygons(5, 30) via3 = polygons(6, 0) + polygons(6, 10) + polygons(6, 30) metal4 = polygons(7, 0) + polygons(7, 10) + polygons(7, 30) via4 = polygons(8, 0) + polygons(8, 10) + polygons(8, 30) -topmetal = polygons(9, 0) + polygons(9, 10) + polygons(9, 30) +topmetal = polygons(100, 0) + polygons(100, 10) + polygons(100, 30) #================================================ #--------------- metal1 RULES ------------------- diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp index c91b582b..aa30279c 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp @@ -574,7 +574,7 @@ limitations under the License. false 0 topmetal - topmetal 9/0@1 + topmetal 100/0@1 #ff9d9d @@ -591,7 +591,7 @@ limitations under the License. false 0 topmetal.pin - topmetal.pin 9/10@1 + topmetal.pin 100/10@1 #ff80a8 @@ -608,7 +608,7 @@ limitations under the License. false 0 topmetal.text - topmetal.text 9/20@1 + topmetal.text 100/20@1 #c080ff @@ -625,6 +625,6 @@ limitations under the License. false 0 topmetal.fill - topmetal.fill 9/30@1 + topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/libs/bumps.py b/lambdapdk/interposer/libs/bumps.py new file mode 100644 index 00000000..704b94e1 --- /dev/null +++ b/lambdapdk/interposer/libs/bumps.py @@ -0,0 +1,31 @@ +import os +import siliconcompiler +from lambdapdk import register_data_source +from lambdapdk.interposer import stackups + + +def setup(): + ''' + Interposer bump library + ''' + libdir = "lambdapdk/interposer/libs/bumps/" + + lib = siliconcompiler.Library('interposer_bumps', package='lambdapdk') + register_data_source(lib) + + # pdk + lib.set('option', 'pdk', 'interposer') + + for stackup in stackups: + lib.set('output', stackup, 'lef', + os.path.join(libdir, 'lef/bumps.lef')) + lib.add('output', stackup, 'gds', + os.path.join(libdir, 'gds/bumps.gds')) + + return lib + + +######################### +if __name__ == "__main__": + lib = setup(siliconcompiler.Chip('')) + lib.write_manifest(f'{lib.top()}.json') diff --git a/lambdapdk/interposer/libs/bumps/gds/bumps.gds b/lambdapdk/interposer/libs/bumps/gds/bumps.gds new file mode 100644 index 0000000000000000000000000000000000000000..7fb7661d4e02f75a4c1617b5ef82dbbc35e792bf GIT binary patch literal 342 zcmZQzV_;&6V31*CVt>KF#URhX!(hgsg3M;%U}E#}bYfr-VP>^+>@@d2w)}&o%MSeo zv!g;7WLRiT3iS;zG+=d!e(G# zzW@?vU=Z#Au^}{q4Uq$>0qKM4VG(3tU}0w<#w8}E*j@5s!vFs#10Wc}W?&F6`2YXK c1O^7P4InmzMzA4rAT=O;P(3i0u&^)y03)MhasU7T literal 0 HcmV?d00001 diff --git a/lambdapdk/interposer/libs/bumps/lef/bumps.lef b/lambdapdk/interposer/libs/bumps/lef/bumps.lef new file mode 100644 index 00000000..85012816 --- /dev/null +++ b/lambdapdk/interposer/libs/bumps/lef/bumps.lef @@ -0,0 +1,47 @@ +# Copyright 2024 ZeroASIC Corp +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +VERSION 5.7 ; +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; + +MACRO BUMP10 + CLASS BUMP COVER ; + FOREIGN BUMP10 0.0 0.0 ; + ORIGIN 5.0 5.0 ; + SYMMETRY X Y ; + SIZE 10.00 BY 10.00 ; + PIN PAD + DIRECTION INOUT ; + PORT + LAYER topmetal ; + POLYGON 2 -5 -2 -5 -5 -2 -5 2 -2 5 2 5 5 2 5 -2 ; + END + END PAD +END BUMP10 + +MACRO BUMP45 + CLASS BUMP COVER ; + FOREIGN BUMP10 0.0 0.0 ; + ORIGIN 14.0 14.0 ; + SYMMETRY X Y ; + SIZE 28.00 BY 28.00 ; + PIN PAD + DIRECTION INOUT ; + PORT + LAYER topmetal ; + POLYGON 6 -14 -6 -14 -14 -6 -14 6 -6 14 6 14 14 6 14 -6 ; + END + END PAD +END BUMP45 diff --git a/tests/test_getters.py b/tests/test_getters.py index 9a7c9037..f9f8d50e 100644 --- a/tests/test_getters.py +++ b/tests/test_getters.py @@ -8,6 +8,7 @@ from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram from lambdapdk.gf180.libs import gf180mcu, gf180io, gf180sram from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram +from lambdapdk.interposer.libs import bumps as interposer_bumps @pytest.mark.parametrize('pdk', [asap7, freepdk45, sky130, gf180, ihp130, interposer]) @@ -24,7 +25,8 @@ def test_pdk(pdk): nangate45, fakeram45, # freepdk45 sky130sc, sky130io, sky130sram, # sky130 gf180mcu, gf180io, gf180sram, # gf180 - sg13g2_stdcell, sg13g2_sram # ihp130 + sg13g2_stdcell, sg13g2_sram, # ihp130 + interposer_bumps # interposer ]) def test_lib(lib): chip = Chip('') diff --git a/tests/test_paths.py b/tests/test_paths.py index a16988fa..0b89fade 100644 --- a/tests/test_paths.py +++ b/tests/test_paths.py @@ -7,7 +7,8 @@ from lambdapdk.freepdk45.libs import nangate45, fakeram45 from lambdapdk.sky130.libs import sky130sc, sky130io, sky130sram from lambdapdk.gf180.libs import gf180mcu, gf180io, gf180sram -from lambdapdk.ihp130.libs import sg13g2_stdcell +from lambdapdk.ihp130.libs import sg13g2_stdcell, sg13g2_sram +from lambdapdk.interposer.libs import bumps as interposer_bumps @pytest.mark.parametrize('pdk', [ @@ -24,7 +25,8 @@ def test_pdk_paths(pdk): nangate45, fakeram45, # freepdk45 sky130sc, sky130io, sky130sram, # sky130 gf180mcu, gf180io, gf180sram, # gf180 - sg13g2_stdcell # ihp130 + sg13g2_stdcell, sg13g2_sram, # ihp130 + interposer_bumps ]) def test_lib_paths(lib): chip = Chip('') From 0600c77e7adcecd97f7d17f5d0ac098cc0562fd0 Mon Sep 17 00:00:00 2001 From: Peter Gadfort Date: Thu, 31 Oct 2024 13:05:45 -0400 Subject: [PATCH 4/5] add reference to source for layermap --- lambdapdk/interposer/base/apr/3ML_0400.layermap | 1 + lambdapdk/interposer/base/apr/3ML_0400_2000.layermap | 1 + lambdapdk/interposer/base/apr/3ML_0800.layermap | 1 + lambdapdk/interposer/base/apr/3ML_2000.layermap | 1 + lambdapdk/interposer/base/apr/4ML_0400.layermap | 1 + lambdapdk/interposer/base/apr/4ML_0400_2000.layermap | 1 + lambdapdk/interposer/base/apr/4ML_0800.layermap | 1 + lambdapdk/interposer/base/apr/4ML_2000.layermap | 1 + lambdapdk/interposer/base/apr/5ML_0400.layermap | 1 + lambdapdk/interposer/base/apr/5ML_0400_2000.layermap | 1 + lambdapdk/interposer/base/apr/5ML_0800.layermap | 1 + lambdapdk/interposer/base/apr/5ML_2000.layermap | 1 + lambdapdk/interposer/base/templates/layermap.j2 | 1 + 13 files changed, 13 insertions(+) diff --git a/lambdapdk/interposer/base/apr/3ML_0400.layermap b/lambdapdk/interposer/base/apr/3ML_0400.layermap index eb2b5a52..f405f02b 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0400.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap index eb2b5a52..f405f02b 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/3ML_0800.layermap b/lambdapdk/interposer/base/apr/3ML_0800.layermap index eb2b5a52..f405f02b 100644 --- a/lambdapdk/interposer/base/apr/3ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0800.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/3ML_2000.layermap b/lambdapdk/interposer/base/apr/3ML_2000.layermap index eb2b5a52..f405f02b 100644 --- a/lambdapdk/interposer/base/apr/3ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/3ML_2000.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/4ML_0400.layermap b/lambdapdk/interposer/base/apr/4ML_0400.layermap index 158a63c6..ce7678dd 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0400.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap index 158a63c6..ce7678dd 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/4ML_0800.layermap b/lambdapdk/interposer/base/apr/4ML_0800.layermap index 158a63c6..ce7678dd 100644 --- a/lambdapdk/interposer/base/apr/4ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0800.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/4ML_2000.layermap b/lambdapdk/interposer/base/apr/4ML_2000.layermap index 158a63c6..ce7678dd 100644 --- a/lambdapdk/interposer/base/apr/4ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/4ML_2000.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/5ML_0400.layermap b/lambdapdk/interposer/base/apr/5ML_0400.layermap index f2129fd7..185efa17 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0400.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap index f2129fd7..185efa17 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/5ML_0800.layermap b/lambdapdk/interposer/base/apr/5ML_0800.layermap index f2129fd7..185efa17 100644 --- a/lambdapdk/interposer/base/apr/5ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0800.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/apr/5ML_2000.layermap b/lambdapdk/interposer/base/apr/5ML_2000.layermap index f2129fd7..185efa17 100644 --- a/lambdapdk/interposer/base/apr/5ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/5ML_2000.layermap @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap #============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type #============== ============== ================ ============== diff --git a/lambdapdk/interposer/base/templates/layermap.j2 b/lambdapdk/interposer/base/templates/layermap.j2 index a8cf46a7..3eed2a12 100644 --- a/lambdapdk/interposer/base/templates/layermap.j2 +++ b/lambdapdk/interposer/base/templates/layermap.j2 @@ -1,5 +1,6 @@ {% for line in license.splitlines() %}# {{ line }} {% endfor %} +# Based on https://github.com/siliconcompiler/lambdapdk/blob/4a29f3af6b8babae92bc55ee2c8996f37ff99a6a/lambdapdk/gf180/base/apr/gf180mcu_5LM_1TM_9K_7t_edi2gds.layermap {% if comment %}{% for line in comment.splitlines() %}# {{ line }} {% endfor %}{% endif %}#============== ============== ================ ============== #EDI Layer Name EDI Layer Type GDS Layer Number GDS Layer Type From 12abfa8deec66a7f971f58bafa13c62488d6a9a2 Mon Sep 17 00:00:00 2001 From: Peter Gadfort Date: Fri, 1 Nov 2024 10:41:02 -0400 Subject: [PATCH 5/5] fix interposer setup --- lambdapdk/interposer/__init__.py | 8 +- lambdapdk/interposer/_generator.py | 25 ++- .../interposer/base/apr/3ML_0400.layermap | 1 + lambdapdk/interposer/base/apr/3ML_0400.lef | 10 +- .../base/apr/3ML_0400_2000.layermap | 1 + .../interposer/base/apr/3ML_0400_2000.lef | 10 +- .../interposer/base/apr/3ML_0800.layermap | 1 + lambdapdk/interposer/base/apr/3ML_0800.lef | 10 +- .../interposer/base/apr/3ML_2000.layermap | 1 + lambdapdk/interposer/base/apr/3ML_2000.lef | 10 +- .../interposer/base/apr/4ML_0400.layermap | 1 + lambdapdk/interposer/base/apr/4ML_0400.lef | 12 +- .../base/apr/4ML_0400_2000.layermap | 1 + .../interposer/base/apr/4ML_0400_2000.lef | 12 +- .../interposer/base/apr/4ML_0800.layermap | 1 + lambdapdk/interposer/base/apr/4ML_0800.lef | 12 +- .../interposer/base/apr/4ML_2000.layermap | 1 + lambdapdk/interposer/base/apr/4ML_2000.lef | 12 +- .../interposer/base/apr/5ML_0400.layermap | 1 + lambdapdk/interposer/base/apr/5ML_0400.lef | 12 +- .../base/apr/5ML_0400_2000.layermap | 1 + .../interposer/base/apr/5ML_0400_2000.lef | 12 +- .../interposer/base/apr/5ML_0800.layermap | 1 + lambdapdk/interposer/base/apr/5ML_0800.lef | 12 +- .../interposer/base/apr/5ML_2000.layermap | 1 + lambdapdk/interposer/base/apr/5ML_2000.lef | 12 +- .../base/dfm/openroad/3ML_0400.fill.json | 28 +++- .../base/dfm/openroad/3ML_0400_2000.fill.json | 28 +++- .../base/dfm/openroad/3ML_0800.fill.json | 28 +++- .../base/dfm/openroad/3ML_2000.fill.json | 28 +++- .../base/dfm/openroad/4ML_0400.fill.json | 32 +++- .../base/dfm/openroad/4ML_0400_2000.fill.json | 32 +++- .../base/dfm/openroad/4ML_0800.fill.json | 32 +++- .../base/dfm/openroad/4ML_2000.fill.json | 32 +++- .../base/dfm/openroad/5ML_0400.fill.json | 36 +++- .../base/dfm/openroad/5ML_0400_2000.fill.json | 36 +++- .../base/dfm/openroad/5ML_0800.fill.json | 36 +++- .../base/dfm/openroad/5ML_2000.fill.json | 36 +++- .../base/setup/klayout/3ML_0400.drc | 4 - .../base/setup/klayout/3ML_0400.lyp | 93 ++++++----- .../base/setup/klayout/3ML_0400_2000.drc | 4 - .../base/setup/klayout/3ML_0400_2000.lyp | 93 ++++++----- .../base/setup/klayout/3ML_0800.drc | 4 - .../base/setup/klayout/3ML_0800.lyp | 93 ++++++----- .../base/setup/klayout/3ML_2000.drc | 4 - .../base/setup/klayout/3ML_2000.lyp | 93 ++++++----- .../base/setup/klayout/4ML_0400.drc | 4 - .../base/setup/klayout/4ML_0400.lyp | 125 ++++++++------ .../base/setup/klayout/4ML_0400_2000.drc | 4 - .../base/setup/klayout/4ML_0400_2000.lyp | 125 ++++++++------ .../base/setup/klayout/4ML_0800.drc | 4 - .../base/setup/klayout/4ML_0800.lyp | 125 ++++++++------ .../base/setup/klayout/4ML_2000.drc | 4 - .../base/setup/klayout/4ML_2000.lyp | 125 ++++++++------ .../base/setup/klayout/5ML_0400.drc | 4 - .../base/setup/klayout/5ML_0400.lyp | 157 ++++++++++-------- .../base/setup/klayout/5ML_0400_2000.drc | 4 - .../base/setup/klayout/5ML_0400_2000.lyp | 157 ++++++++++-------- .../base/setup/klayout/5ML_0800.drc | 4 - .../base/setup/klayout/5ML_0800.lyp | 157 ++++++++++-------- .../base/setup/klayout/5ML_2000.drc | 4 - .../base/setup/klayout/5ML_2000.lyp | 157 ++++++++++-------- lambdapdk/interposer/base/templates/drc.j2 | 2 +- lambdapdk/interposer/base/templates/lef.j2 | 6 + lambdapdk/interposer/libs/bumps/lef/bumps.lef | 4 +- 65 files changed, 1293 insertions(+), 832 deletions(-) diff --git a/lambdapdk/interposer/__init__.py b/lambdapdk/interposer/__init__.py index 08bbe867..381a7493 100644 --- a/lambdapdk/interposer/__init__.py +++ b/lambdapdk/interposer/__init__.py @@ -57,9 +57,15 @@ def setup(): pdk.set('pdk', process, 'maxlayer', stackup, 'topmetal') # DRC Runsets - pdk.set('pdk', process, 'drc', 'runset', 'magic', stackup, 'drc', + pdk.set('pdk', process, 'drc', 'runset', 'klayout', stackup, 'drc', pdkdir + f'/setup/klayout/{stackup}.drc') + key = 'drc_params:drc' + pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'input=') + pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'topcell=') + pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'report=') + pdk.add('pdk', process, 'var', 'klayout', stackup, key, 'threads=') + # Layer map and display file pdk.set('pdk', process, 'layermap', 'klayout', 'def', 'gds', stackup, pdkdir + f'/apr/{stackup}.layermap') diff --git a/lambdapdk/interposer/_generator.py b/lambdapdk/interposer/_generator.py index 2d793630..97065840 100644 --- a/lambdapdk/interposer/_generator.py +++ b/lambdapdk/interposer/_generator.py @@ -112,9 +112,11 @@ def build_tech(layer_count, name=None, width=None): layeridx = n + 1 metal_name = f"metal{layeridx}" + max_width = 5.0 if layeridx == layer_count: metal_name = "topmetal" gds_layer = 100 + max_width = None layers.append( make_metal_layer( @@ -134,12 +136,12 @@ def build_tech(layer_count, name=None, width=None): "TEXT": 20 } }, - "HORIZONTAL" if layeridx % 2 == 1 else "VERITCAL", + "HORIZONTAL" if layeridx % 2 == 1 else "VERTICAL", min_width=width[n], min_spacing=width[n], resistance_per_um=1.5000e-03, capacitance_per_um=1.0000E-01, - max_width=5.0 + max_width=max_width )) if layeridx != layer_count: @@ -175,7 +177,8 @@ def build_tech(layer_count, name=None, width=None): tech = { "name": name, "grid": 0.005, - "layers": layers + "layers": layers, + "outline": (0, 0) } return tech @@ -203,6 +206,13 @@ def build_layermap(tech, path): str(gds_type) )) + layermap.append(( + "DIEAREA", + "ALL", + str(tech["outline"][0]), + str(tech["outline"][1]) + )) + os.makedirs(path, exist_ok=True) with open(f'{path}/{tech["name"]}.layermap', 'w') as f: f.write( @@ -294,7 +304,8 @@ def build_klayout_drc(tech, path): jinja2_env.get_template('drc.j2').render( license=LICENSE, grid=int(tech["grid"] * 1000), - layers=layers + layers=layers, + outline={"number": tech["outline"][0], "type": tech["outline"][1]} ) ) f.write('\n') @@ -358,6 +369,8 @@ def make_layer(name, gds): return prop props = ET.Element("layer-properties") + props.append(make_layer("outline", (tech["outline"][0], tech["outline"][1]))) + layeridx += 1 for layer in tech["layers"]: gds_types = sorted(set([*layer["gds"]["types"].values(), *layer["gds"]["name"].values()])) for gds_type in gds_types: @@ -436,8 +449,12 @@ def build_openroad_fill(tech, path): shapes.append(width) fill["layers"][layer["name"]] = { + "name": layer["name"], + "layer": layer["gds"]["number"], + "datatype": layer["gds"]["types"]["NET"], "space_to_outline": max_spacing, "non-opc": { + "datatype": layer["gds"]["types"]["FILL"], "width": shapes, "height": shapes, "space_to_fill": layer["spacing"]["min"], diff --git a/lambdapdk/interposer/base/apr/3ML_0400.layermap b/lambdapdk/interposer/base/apr/3ML_0400.layermap index f405f02b..91cb0352 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0400.layermap @@ -56,3 +56,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/3ML_0400.lef b/lambdapdk/interposer/base/apr/3ML_0400.lef index 6c79361e..e5ebeea2 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400.lef +++ b/lambdapdk/interposer/base/apr/3ML_0400.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; @@ -58,7 +58,6 @@ LAYER topmetal PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -78,3 +77,10 @@ VIA VIA2_1 DEFAULT LAYER topmetal ; RECT -0.300 -0.300 0.300 0.300 ; END VIA2_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap index f405f02b..91cb0352 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0400_2000.layermap @@ -56,3 +56,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/3ML_0400_2000.lef b/lambdapdk/interposer/base/apr/3ML_0400_2000.lef index ee9cad4f..e3f94474 100644 --- a/lambdapdk/interposer/base/apr/3ML_0400_2000.lef +++ b/lambdapdk/interposer/base/apr/3ML_0400_2000.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; @@ -58,7 +58,6 @@ LAYER topmetal PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -78,3 +77,10 @@ VIA VIA2_1 DEFAULT LAYER topmetal ; RECT -0.600 -0.600 0.600 0.600 ; END VIA2_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/3ML_0800.layermap b/lambdapdk/interposer/base/apr/3ML_0800.layermap index f405f02b..91cb0352 100644 --- a/lambdapdk/interposer/base/apr/3ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/3ML_0800.layermap @@ -56,3 +56,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/3ML_0800.lef b/lambdapdk/interposer/base/apr/3ML_0800.lef index e4853b70..dec67b7f 100644 --- a/lambdapdk/interposer/base/apr/3ML_0800.lef +++ b/lambdapdk/interposer/base/apr/3ML_0800.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; @@ -58,7 +58,6 @@ LAYER topmetal PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -78,3 +77,10 @@ VIA VIA2_1 DEFAULT LAYER topmetal ; RECT -0.600 -0.600 0.600 0.600 ; END VIA2_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/3ML_2000.layermap b/lambdapdk/interposer/base/apr/3ML_2000.layermap index f405f02b..91cb0352 100644 --- a/lambdapdk/interposer/base/apr/3ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/3ML_2000.layermap @@ -56,3 +56,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/3ML_2000.lef b/lambdapdk/interposer/base/apr/3ML_2000.lef index ce233db1..af3659c5 100644 --- a/lambdapdk/interposer/base/apr/3ML_2000.lef +++ b/lambdapdk/interposer/base/apr/3ML_2000.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; @@ -58,7 +58,6 @@ LAYER topmetal PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -78,3 +77,10 @@ VIA VIA2_1 DEFAULT LAYER topmetal ; RECT -1.500 -1.500 1.500 1.500 ; END VIA2_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/4ML_0400.layermap b/lambdapdk/interposer/base/apr/4ML_0400.layermap index ce7678dd..4f9c8d4e 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0400.layermap @@ -72,3 +72,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/4ML_0400.lef b/lambdapdk/interposer/base/apr/4ML_0400.lef index f44d2f3c..8a290dee 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400.lef +++ b/lambdapdk/interposer/base/apr/4ML_0400.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; @@ -69,11 +69,10 @@ END via3 LAYER topmetal TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -102,3 +101,10 @@ VIA VIA3_1 DEFAULT LAYER topmetal ; RECT -0.300 -0.300 0.300 0.300 ; END VIA3_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap index ce7678dd..4f9c8d4e 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0400_2000.layermap @@ -72,3 +72,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/4ML_0400_2000.lef b/lambdapdk/interposer/base/apr/4ML_0400_2000.lef index 6ea42c13..d968eb47 100644 --- a/lambdapdk/interposer/base/apr/4ML_0400_2000.lef +++ b/lambdapdk/interposer/base/apr/4ML_0400_2000.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; @@ -69,11 +69,10 @@ END via3 LAYER topmetal TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -102,3 +101,10 @@ VIA VIA3_1 DEFAULT LAYER topmetal ; RECT -1.500 -1.500 1.500 1.500 ; END VIA3_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/4ML_0800.layermap b/lambdapdk/interposer/base/apr/4ML_0800.layermap index ce7678dd..4f9c8d4e 100644 --- a/lambdapdk/interposer/base/apr/4ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/4ML_0800.layermap @@ -72,3 +72,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/4ML_0800.lef b/lambdapdk/interposer/base/apr/4ML_0800.lef index afc0bed0..abd7f114 100644 --- a/lambdapdk/interposer/base/apr/4ML_0800.lef +++ b/lambdapdk/interposer/base/apr/4ML_0800.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; @@ -69,11 +69,10 @@ END via3 LAYER topmetal TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -102,3 +101,10 @@ VIA VIA3_1 DEFAULT LAYER topmetal ; RECT -0.600 -0.600 0.600 0.600 ; END VIA3_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/4ML_2000.layermap b/lambdapdk/interposer/base/apr/4ML_2000.layermap index ce7678dd..4f9c8d4e 100644 --- a/lambdapdk/interposer/base/apr/4ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/4ML_2000.layermap @@ -72,3 +72,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/4ML_2000.lef b/lambdapdk/interposer/base/apr/4ML_2000.lef index 50eb3cad..d74032dd 100644 --- a/lambdapdk/interposer/base/apr/4ML_2000.lef +++ b/lambdapdk/interposer/base/apr/4ML_2000.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; @@ -69,11 +69,10 @@ END via3 LAYER topmetal TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -102,3 +101,10 @@ VIA VIA3_1 DEFAULT LAYER topmetal ; RECT -1.500 -1.500 1.500 1.500 ; END VIA3_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/5ML_0400.layermap b/lambdapdk/interposer/base/apr/5ML_0400.layermap index 185efa17..896e3c91 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0400.layermap @@ -88,3 +88,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/5ML_0400.lef b/lambdapdk/interposer/base/apr/5ML_0400.lef index f75e218e..f299cd46 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400.lef +++ b/lambdapdk/interposer/base/apr/5ML_0400.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; @@ -69,7 +69,7 @@ END via3 LAYER metal4 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; @@ -88,7 +88,6 @@ LAYER topmetal PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -126,3 +125,10 @@ VIA VIA4_1 DEFAULT LAYER topmetal ; RECT -0.300 -0.300 0.300 0.300 ; END VIA4_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap index 185efa17..896e3c91 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0400_2000.layermap @@ -88,3 +88,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/5ML_0400_2000.lef b/lambdapdk/interposer/base/apr/5ML_0400_2000.lef index 6bc4c6c6..5ddf34b4 100644 --- a/lambdapdk/interposer/base/apr/5ML_0400_2000.lef +++ b/lambdapdk/interposer/base/apr/5ML_0400_2000.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 0.8 ; SPACING 0.4 ; WIDTH 0.4 ; @@ -69,7 +69,7 @@ END via3 LAYER metal4 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; @@ -88,7 +88,6 @@ LAYER topmetal PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -126,3 +125,10 @@ VIA VIA4_1 DEFAULT LAYER topmetal ; RECT -1.500 -1.500 1.500 1.500 ; END VIA4_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/5ML_0800.layermap b/lambdapdk/interposer/base/apr/5ML_0800.layermap index 185efa17..896e3c91 100644 --- a/lambdapdk/interposer/base/apr/5ML_0800.layermap +++ b/lambdapdk/interposer/base/apr/5ML_0800.layermap @@ -88,3 +88,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/5ML_0800.lef b/lambdapdk/interposer/base/apr/5ML_0800.lef index dc9e51a2..eb721df8 100644 --- a/lambdapdk/interposer/base/apr/5ML_0800.lef +++ b/lambdapdk/interposer/base/apr/5ML_0800.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; @@ -69,7 +69,7 @@ END via3 LAYER metal4 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; @@ -88,7 +88,6 @@ LAYER topmetal PITCH 1.6 ; SPACING 0.8 ; WIDTH 0.8 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -126,3 +125,10 @@ VIA VIA4_1 DEFAULT LAYER topmetal ; RECT -0.600 -0.600 0.600 0.600 ; END VIA4_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/apr/5ML_2000.layermap b/lambdapdk/interposer/base/apr/5ML_2000.layermap index 185efa17..896e3c91 100644 --- a/lambdapdk/interposer/base/apr/5ML_2000.layermap +++ b/lambdapdk/interposer/base/apr/5ML_2000.layermap @@ -88,3 +88,4 @@ topmetal FILL 100 30 NAME topmetal/PIN 100 20 NAME topmetal/SPNET 100 20 NAME topmetal/TEXT 100 20 +DIEAREA ALL 0 0 diff --git a/lambdapdk/interposer/base/apr/5ML_2000.lef b/lambdapdk/interposer/base/apr/5ML_2000.lef index 506c1718..367be9d3 100644 --- a/lambdapdk/interposer/base/apr/5ML_2000.lef +++ b/lambdapdk/interposer/base/apr/5ML_2000.lef @@ -39,7 +39,7 @@ END via1 LAYER metal2 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; @@ -69,7 +69,7 @@ END via3 LAYER metal4 TYPE ROUTING ; - DIRECTION VERITCAL ; + DIRECTION VERTICAL ; PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; @@ -88,7 +88,6 @@ LAYER topmetal PITCH 4.0 ; SPACING 2.0 ; WIDTH 2.0 ; - MAXWIDTH 5.0 ; END topmetal VIA VIA1_1 DEFAULT @@ -126,3 +125,10 @@ VIA VIA4_1 DEFAULT LAYER topmetal ; RECT -1.500 -1.500 1.500 1.500 ; END VIA4_1 + + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site \ No newline at end of file diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json index e63a7ae7..bd8001a0 100644 --- a/lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_0400.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -43,20 +51,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 3.85, - 2.7, - 1.55, + 4.0, + 3.1, + 2.2, + 1.3, 0.4 ], "height": [ - 5.0, - 3.85, - 2.7, - 1.55, + 4.0, + 3.1, + 2.2, + 1.3, 0.4 ], "space_to_fill": 0.4, diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json index b1dbbf7e..7e01a820 100644 --- a/lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_0400_2000.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -43,20 +51,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "height": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "space_to_fill": 2.0, diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json index fbeba5d2..e23d2ef6 100644 --- a/lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_0800.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -43,20 +51,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 3.95, - 2.9, - 1.85, + 8.0, + 6.2, + 4.4, + 2.6, 0.8 ], "height": [ - 5.0, - 3.95, - 2.9, - 1.85, + 8.0, + 6.2, + 4.4, + 2.6, 0.8 ], "space_to_fill": 0.8, diff --git a/lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json index 31158a4b..23e7ba3f 100644 --- a/lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/3ML_2000.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -43,20 +51,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "height": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "space_to_fill": 2.0, diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json index 75c605ee..7fe9a599 100644 --- a/lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_0400.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -64,20 +76,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 3.85, - 2.7, - 1.55, + 4.0, + 3.1, + 2.2, + 1.3, 0.4 ], "height": [ - 5.0, - 3.85, - 2.7, - 1.55, + 4.0, + 3.1, + 2.2, + 1.3, 0.4 ], "space_to_fill": 0.4, diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json index d191dfeb..8a06df40 100644 --- a/lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_0400_2000.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -64,20 +76,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "height": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "space_to_fill": 2.0, diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json index 14f2590e..fc723edb 100644 --- a/lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_0800.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -64,20 +76,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 3.95, - 2.9, - 1.85, + 8.0, + 6.2, + 4.4, + 2.6, 0.8 ], "height": [ - 5.0, - 3.95, - 2.9, - 1.85, + 8.0, + 6.2, + 4.4, + 2.6, 0.8 ], "space_to_fill": 0.8, diff --git a/lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json index 0dcfdd91..812ca1fb 100644 --- a/lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/4ML_2000.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -64,20 +76,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "height": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "space_to_fill": 2.0, diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json index 8a2d555a..202c7179 100644 --- a/lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_0400.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -64,8 +76,12 @@ } }, "metal4": { + "name": "metal4", + "layer": 7, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -85,20 +101,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 3.85, - 2.7, - 1.55, + 4.0, + 3.1, + 2.2, + 1.3, 0.4 ], "height": [ - 5.0, - 3.85, - 2.7, - 1.55, + 4.0, + 3.1, + 2.2, + 1.3, 0.4 ], "space_to_fill": 0.4, diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json index 1c14dfdd..975015dd 100644 --- a/lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_0400_2000.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 2.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.85, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -64,8 +76,12 @@ } }, "metal4": { + "name": "metal4", + "layer": 7, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -85,20 +101,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "height": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "space_to_fill": 2.0, diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json index 965e3b10..4578734b 100644 --- a/lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_0800.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -64,8 +76,12 @@ } }, "metal4": { + "name": "metal4", + "layer": 7, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 3.95, @@ -85,20 +101,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 4.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 3.95, - 2.9, - 1.85, + 8.0, + 6.2, + 4.4, + 2.6, 0.8 ], "height": [ - 5.0, - 3.95, - 2.9, - 1.85, + 8.0, + 6.2, + 4.4, + 2.6, 0.8 ], "space_to_fill": 0.8, diff --git a/lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json b/lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json index 94daaa72..decfa35b 100644 --- a/lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json +++ b/lambdapdk/interposer/base/dfm/openroad/5ML_2000.fill.json @@ -1,8 +1,12 @@ { "layers": { "metal1": { + "name": "metal1", + "layer": 1, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -22,8 +26,12 @@ } }, "metal2": { + "name": "metal2", + "layer": 3, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -43,8 +51,12 @@ } }, "metal3": { + "name": "metal3", + "layer": 5, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -64,8 +76,12 @@ } }, "metal4": { + "name": "metal4", + "layer": 7, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ 5.0, 4.25, @@ -85,20 +101,24 @@ } }, "topmetal": { + "name": "topmetal", + "layer": 100, + "datatype": 0, "space_to_outline": 10.0, "non-opc": { + "datatype": 30, "width": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "height": [ - 5.0, - 4.25, - 3.5, - 2.75, + 20.0, + 15.5, + 11.0, + 6.5, 2.0 ], "space_to_fill": 2.0, diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc index 201a4061..cddd682f 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400.drc @@ -185,8 +185,4 @@ min_space = topmetal.drc(space(euclidian) < 400.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 400nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp index bcb5d05f..0d20b134 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -352,6 +352,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc index 43c5d7ae..841dd1a7 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.drc @@ -185,8 +185,4 @@ min_space = topmetal.drc(space(euclidian) < 2000.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp index bcb5d05f..0d20b134 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0400_2000.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -352,6 +352,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc index 681c7dc9..186cbff2 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0800.drc @@ -185,8 +185,4 @@ min_space = topmetal.drc(space(euclidian) < 800.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 800nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp index bcb5d05f..0d20b134 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_0800.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -352,6 +352,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc index a3dba1cb..7d82d094 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/3ML_2000.drc @@ -185,8 +185,4 @@ min_space = topmetal.drc(space(euclidian) < 2000.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp index bcb5d05f..0d20b134 100644 --- a/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/3ML_2000.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -352,6 +352,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc index 34c57cd4..5d86e28a 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400.drc @@ -247,8 +247,4 @@ min_space = topmetal.drc(space(euclidian) < 400.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 400nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp index d3d01757..eab54c32 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #91ff00 @@ -488,6 +488,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc index ef4136aa..a261d638 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.drc @@ -247,8 +247,4 @@ min_space = topmetal.drc(space(euclidian) < 2000.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp index d3d01757..eab54c32 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0400_2000.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #91ff00 @@ -488,6 +488,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc index ae28150f..f8672f0f 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0800.drc @@ -247,8 +247,4 @@ min_space = topmetal.drc(space(euclidian) < 800.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 800nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp index d3d01757..eab54c32 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_0800.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #91ff00 @@ -488,6 +488,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc index ba3fec4a..41ec9e38 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/4ML_2000.drc @@ -247,8 +247,4 @@ min_space = topmetal.drc(space(euclidian) < 2000.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp index d3d01757..eab54c32 100644 --- a/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/4ML_2000.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #91ff00 @@ -488,6 +488,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #008000 + 0 + #008000 + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc index bf8fbd55..a105f8de 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400.drc @@ -309,8 +309,4 @@ min_space = topmetal.drc(space(euclidian) < 400.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 400nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp index aa30279c..f7a81c95 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - metal4 - metal4 7/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - metal4.pin - metal4.pin 7/10@1 + metal4 + metal4 7/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - metal4.text - metal4.text 7/20@1 + metal4.pin + metal4.pin 7/10@1 #91ff00 @@ -488,8 +488,8 @@ limitations under the License. false false 0 - metal4.fill - metal4.fill 7/30@1 + metal4.text + metal4.text 7/20@1 #008000 @@ -505,8 +505,8 @@ limitations under the License. false false 0 - via4 - via4 8/0@1 + metal4.fill + metal4.fill 7/30@1 #508000 @@ -522,8 +522,8 @@ limitations under the License. false false 0 - via4.pin - via4.pin 8/10@1 + via4 + via4 8/0@1 #808000 @@ -539,8 +539,8 @@ limitations under the License. false false 0 - via4.text - via4.text 8/20@1 + via4.pin + via4.pin 8/10@1 #805000 @@ -556,8 +556,8 @@ limitations under the License. false false 0 - via4.fill - via4.fill 8/30@1 + via4.text + via4.text 8/20@1 #ffc280 @@ -573,8 +573,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via4.fill + via4.fill 8/30@1 #ff9d9d @@ -590,8 +590,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -607,8 +607,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -624,6 +624,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc index 7aa602a3..4f919c82 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.drc @@ -309,8 +309,4 @@ min_space = topmetal.drc(space(euclidian) < 2000.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp index aa30279c..f7a81c95 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0400_2000.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - metal4 - metal4 7/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - metal4.pin - metal4.pin 7/10@1 + metal4 + metal4 7/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - metal4.text - metal4.text 7/20@1 + metal4.pin + metal4.pin 7/10@1 #91ff00 @@ -488,8 +488,8 @@ limitations under the License. false false 0 - metal4.fill - metal4.fill 7/30@1 + metal4.text + metal4.text 7/20@1 #008000 @@ -505,8 +505,8 @@ limitations under the License. false false 0 - via4 - via4 8/0@1 + metal4.fill + metal4.fill 7/30@1 #508000 @@ -522,8 +522,8 @@ limitations under the License. false false 0 - via4.pin - via4.pin 8/10@1 + via4 + via4 8/0@1 #808000 @@ -539,8 +539,8 @@ limitations under the License. false false 0 - via4.text - via4.text 8/20@1 + via4.pin + via4.pin 8/10@1 #805000 @@ -556,8 +556,8 @@ limitations under the License. false false 0 - via4.fill - via4.fill 8/30@1 + via4.text + via4.text 8/20@1 #ffc280 @@ -573,8 +573,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via4.fill + via4.fill 8/30@1 #ff9d9d @@ -590,8 +590,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -607,8 +607,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -624,6 +624,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc b/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc index e2d80237..cf03f268 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0800.drc @@ -309,8 +309,4 @@ min_space = topmetal.drc(space(euclidian) < 800.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 800nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp index aa30279c..f7a81c95 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_0800.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - metal4 - metal4 7/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - metal4.pin - metal4.pin 7/10@1 + metal4 + metal4 7/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - metal4.text - metal4.text 7/20@1 + metal4.pin + metal4.pin 7/10@1 #91ff00 @@ -488,8 +488,8 @@ limitations under the License. false false 0 - metal4.fill - metal4.fill 7/30@1 + metal4.text + metal4.text 7/20@1 #008000 @@ -505,8 +505,8 @@ limitations under the License. false false 0 - via4 - via4 8/0@1 + metal4.fill + metal4.fill 7/30@1 #508000 @@ -522,8 +522,8 @@ limitations under the License. false false 0 - via4.pin - via4.pin 8/10@1 + via4 + via4 8/0@1 #808000 @@ -539,8 +539,8 @@ limitations under the License. false false 0 - via4.text - via4.text 8/20@1 + via4.pin + via4.pin 8/10@1 #805000 @@ -556,8 +556,8 @@ limitations under the License. false false 0 - via4.fill - via4.fill 8/30@1 + via4.text + via4.text 8/20@1 #ffc280 @@ -573,8 +573,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via4.fill + via4.fill 8/30@1 #ff9d9d @@ -590,8 +590,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -607,8 +607,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -624,6 +624,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc b/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc index 54577178..974eeada 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc +++ b/lambdapdk/interposer/base/setup/klayout/5ML_2000.drc @@ -309,8 +309,4 @@ min_space = topmetal.drc(space(euclidian) < 2000.nm) min_space.output("topmetal.min_space", "topmetal Min. Width : 2000nm") min_space.forget -max_width = topmetal.drc(width(euclidian) > 5000.nm) -max_width.output("topmetal.max_width", "topmetal Max. Width : 5000nm") -max_width.forget - diff --git a/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp b/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp index aa30279c..f7a81c95 100644 --- a/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp +++ b/lambdapdk/interposer/base/setup/klayout/5ML_2000.lyp @@ -29,8 +29,8 @@ limitations under the License. false false 0 - metal1 - metal1 1/0@1 + outline + outline 0/0@1 #ff9d9d @@ -46,8 +46,8 @@ limitations under the License. false false 0 - metal1.pin - metal1.pin 1/10@1 + metal1 + metal1 1/0@1 #ff80a8 @@ -63,8 +63,8 @@ limitations under the License. false false 0 - metal1.text - metal1.text 1/20@1 + metal1.pin + metal1.pin 1/10@1 #c080ff @@ -80,8 +80,8 @@ limitations under the License. false false 0 - metal1.fill - metal1.fill 1/30@1 + metal1.text + metal1.text 1/20@1 #9580ff @@ -97,8 +97,8 @@ limitations under the License. false false 0 - via1 - via1 2/0@1 + metal1.fill + metal1.fill 1/30@1 #8086ff @@ -114,8 +114,8 @@ limitations under the License. false false 0 - via1.pin - via1.pin 2/10@1 + via1 + via1 2/0@1 #80a8ff @@ -131,8 +131,8 @@ limitations under the License. false false 0 - via1.text - via1.text 2/20@1 + via1.pin + via1.pin 2/10@1 #ff0000 @@ -148,8 +148,8 @@ limitations under the License. false false 0 - via1.fill - via1.fill 2/30@1 + via1.text + via1.text 2/20@1 #ff0080 @@ -165,8 +165,8 @@ limitations under the License. false false 0 - metal2 - metal2 3/0@1 + via1.fill + via1.fill 2/30@1 #ff00ff @@ -182,8 +182,8 @@ limitations under the License. false false 0 - metal2.pin - metal2.pin 3/10@1 + metal2 + metal2 3/0@1 #8000ff @@ -199,8 +199,8 @@ limitations under the License. false false 0 - metal2.text - metal2.text 3/20@1 + metal2.pin + metal2.pin 3/10@1 #91ff00 @@ -216,8 +216,8 @@ limitations under the License. false false 0 - metal2.fill - metal2.fill 3/30@1 + metal2.text + metal2.text 3/20@1 #008000 @@ -233,8 +233,8 @@ limitations under the License. false false 0 - via2 - via2 4/0@1 + metal2.fill + metal2.fill 3/30@1 #508000 @@ -250,8 +250,8 @@ limitations under the License. false false 0 - via2.pin - via2.pin 4/10@1 + via2 + via2 4/0@1 #808000 @@ -267,8 +267,8 @@ limitations under the License. false false 0 - via2.text - via2.text 4/20@1 + via2.pin + via2.pin 4/10@1 #805000 @@ -284,8 +284,8 @@ limitations under the License. false false 0 - via2.fill - via2.fill 4/30@1 + via2.text + via2.text 4/20@1 #ffc280 @@ -301,8 +301,8 @@ limitations under the License. false false 0 - metal3 - metal3 5/0@1 + via2.fill + via2.fill 4/30@1 #ff9d9d @@ -318,8 +318,8 @@ limitations under the License. false false 0 - metal3.pin - metal3.pin 5/10@1 + metal3 + metal3 5/0@1 #ff80a8 @@ -335,8 +335,8 @@ limitations under the License. false false 0 - metal3.text - metal3.text 5/20@1 + metal3.pin + metal3.pin 5/10@1 #c080ff @@ -352,8 +352,8 @@ limitations under the License. false false 0 - metal3.fill - metal3.fill 5/30@1 + metal3.text + metal3.text 5/20@1 #9580ff @@ -369,8 +369,8 @@ limitations under the License. false false 0 - via3 - via3 6/0@1 + metal3.fill + metal3.fill 5/30@1 #8086ff @@ -386,8 +386,8 @@ limitations under the License. false false 0 - via3.pin - via3.pin 6/10@1 + via3 + via3 6/0@1 #80a8ff @@ -403,8 +403,8 @@ limitations under the License. false false 0 - via3.text - via3.text 6/20@1 + via3.pin + via3.pin 6/10@1 #ff0000 @@ -420,8 +420,8 @@ limitations under the License. false false 0 - via3.fill - via3.fill 6/30@1 + via3.text + via3.text 6/20@1 #ff0080 @@ -437,8 +437,8 @@ limitations under the License. false false 0 - metal4 - metal4 7/0@1 + via3.fill + via3.fill 6/30@1 #ff00ff @@ -454,8 +454,8 @@ limitations under the License. false false 0 - metal4.pin - metal4.pin 7/10@1 + metal4 + metal4 7/0@1 #8000ff @@ -471,8 +471,8 @@ limitations under the License. false false 0 - metal4.text - metal4.text 7/20@1 + metal4.pin + metal4.pin 7/10@1 #91ff00 @@ -488,8 +488,8 @@ limitations under the License. false false 0 - metal4.fill - metal4.fill 7/30@1 + metal4.text + metal4.text 7/20@1 #008000 @@ -505,8 +505,8 @@ limitations under the License. false false 0 - via4 - via4 8/0@1 + metal4.fill + metal4.fill 7/30@1 #508000 @@ -522,8 +522,8 @@ limitations under the License. false false 0 - via4.pin - via4.pin 8/10@1 + via4 + via4 8/0@1 #808000 @@ -539,8 +539,8 @@ limitations under the License. false false 0 - via4.text - via4.text 8/20@1 + via4.pin + via4.pin 8/10@1 #805000 @@ -556,8 +556,8 @@ limitations under the License. false false 0 - via4.fill - via4.fill 8/30@1 + via4.text + via4.text 8/20@1 #ffc280 @@ -573,8 +573,8 @@ limitations under the License. false false 0 - topmetal - topmetal 100/0@1 + via4.fill + via4.fill 8/30@1 #ff9d9d @@ -590,8 +590,8 @@ limitations under the License. false false 0 - topmetal.pin - topmetal.pin 100/10@1 + topmetal + topmetal 100/0@1 #ff80a8 @@ -607,8 +607,8 @@ limitations under the License. false false 0 - topmetal.text - topmetal.text 100/20@1 + topmetal.pin + topmetal.pin 100/10@1 #c080ff @@ -624,6 +624,23 @@ limitations under the License. false false 0 + topmetal.text + topmetal.text 100/20@1 + + + #9580ff + 0 + #9580ff + 0 + I5 + + true + true + false + 1 + false + false + 0 topmetal.fill topmetal.fill 100/30@1 diff --git a/lambdapdk/interposer/base/templates/drc.j2 b/lambdapdk/interposer/base/templates/drc.j2 index a58bfc35..27a94a3d 100644 --- a/lambdapdk/interposer/base/templates/drc.j2 +++ b/lambdapdk/interposer/base/templates/drc.j2 @@ -27,7 +27,7 @@ flat #------------- LAYERS DEFINITIONS --------------- #================================================ -outline = polygons(0, 0){% for layer in layers %} +outline = polygons({{ outline["number"] }}, {{ outline["type"] }}){% for layer in layers %} {{ layer["name"] }} = {% for number, type in layer["gds"] %}polygons({{ number }}, {{ type }}){% if not loop.last %} + {% endif %}{% endfor %}{% endfor %} {% for layer in layers %}#================================================ diff --git a/lambdapdk/interposer/base/templates/lef.j2 b/lambdapdk/interposer/base/templates/lef.j2 index f9644ece..bb6b4ba3 100644 --- a/lambdapdk/interposer/base/templates/lef.j2 +++ b/lambdapdk/interposer/base/templates/lef.j2 @@ -26,3 +26,9 @@ VIA {{ via["name"] }} DEFAULT{% for layer, shape in via["layers"] %} RECT {{ shape[0] }} {{ shape[1] }} {{ shape[2] }} {{ shape[3] }} ;{% endfor %} END {{ via["name"] }} {% endfor %} + +SITE dummy_site + SYMMETRY X Y ; + CLASS core ; + SIZE 1.0 BY 1.0 ; +END dummy_site diff --git a/lambdapdk/interposer/libs/bumps/lef/bumps.lef b/lambdapdk/interposer/libs/bumps/lef/bumps.lef index 85012816..a762c114 100644 --- a/lambdapdk/interposer/libs/bumps/lef/bumps.lef +++ b/lambdapdk/interposer/libs/bumps/lef/bumps.lef @@ -17,7 +17,7 @@ BUSBITCHARS "[]" ; DIVIDERCHAR "/" ; MACRO BUMP10 - CLASS BUMP COVER ; + CLASS COVER BUMP ; FOREIGN BUMP10 0.0 0.0 ; ORIGIN 5.0 5.0 ; SYMMETRY X Y ; @@ -32,7 +32,7 @@ MACRO BUMP10 END BUMP10 MACRO BUMP45 - CLASS BUMP COVER ; + CLASS COVER BUMP ; FOREIGN BUMP10 0.0 0.0 ; ORIGIN 14.0 14.0 ; SYMMETRY X Y ;