| import csv |
| import os |
| |
| from klayout.lay import LayoutView |
| from klayout.lay import LayerPropertiesNode |
| |
| colors = [ |
| 0x2f4f4f, |
| 0x556b2f, |
| 0x8b4513, |
| 0x6b8e23, |
| 0x2e8b57, |
| 0x228b22, |
| 0x800000, |
| 0x708090, |
| 0x483d8b, |
| 0xbc8f8f, |
| 0xbdb76b, |
| 0xcd853f, |
| 0x4682b4, |
| 0x000080, |
| 0x9acd32, |
| 0x20b2aa, |
| 0xcd5c5c, |
| 0x32cd32, |
| 0xdaa520, |
| 0x7f007f, |
| 0x8fbc8f, |
| 0x9932cc, |
| 0xff0000, |
| 0xff8c00, |
| 0xffd700, |
| 0xc71585, |
| 0x0000cd, |
| 0x00ff00, |
| 0x00fa9a, |
| 0xe9967a, |
| 0xdc143c, |
| 0x00ffff, |
| 0x00bfff, |
| 0x0000ff, |
| 0xa020f0, |
| 0xadff2f, |
| 0xb0c4de, |
| 0xff7f50, |
| 0xff00ff, |
| 0xdb7093, |
| 0xffff54, |
| 0x6495ed, |
| 0xdda0dd, |
| 0x90ee90, |
| 0x7b68ee, |
| 0xf5deb3, |
| 0xafeeee, |
| 0xee82ee, |
| 0x7fffd4, |
| 0xff69b4, |
| 0xffc0cb, |
| ] |
| |
| |
| def parse_layer_info(): |
| dict = {} |
| layer_map = os.path.join(os.path.dirname( |
| __file__), '../sky90fd.layermap.csv') |
| with open(layer_map, newline='') as csvfile: |
| layer_map_reader = csv.reader(csvfile, delimiter=',', quotechar='|') |
| next(layer_map_reader) |
| for row in layer_map_reader: |
| layer_name = row[0] |
| layer_datatype = row[2] |
| key = (layer_name, layer_datatype) |
| if key in dict: |
| dict[key].append(row) |
| else: |
| dict[key] = [row] |
| return dict |
| |
| |
| def create_klayout_hierachy(layout_view): |
| dict = parse_layer_info() |
| i = 0 |
| for ((layer_name, layer_number), layers) in dict.items(): |
| current_color = colors[i % len(colors)] |
| brightness = 50 * (i // len(colors)) |
| |
| layout_view_end = layout_view.end_layers() |
| parent_layer = LayerPropertiesNode() |
| parent_layer.name = "{} - {}".format(layer_number, layer_name) |
| parent_layer.source = "{}/*@*".format(layer_number) |
| |
| j = 3 |
| for layer in layers: |
| child_layer = LayerPropertiesNode() |
| child_layer.name = "{}.{}".format(layer[0], layer[1]) |
| child_layer.source_layer = int(layer[2]) |
| child_layer.source_datatype = int(layer[3]) |
| child_layer.fill_color = current_color |
| child_layer.dither_pattern = j |
| if len(layer) == 6: |
| child_layer.fill_color = int(layer[4], base=16) |
| child_layer.dither_pattern = int(layer[5]) |
| |
| parent_layer.add_child(child_layer) |
| j = j + 1 |
| |
| layout_view.insert_layer(layout_view_end, parent_layer) |
| i = i + 1 |
| |
| |
| def main(): |
| editable = True |
| layout_view = LayoutView(editable) |
| create_klayout_hierachy(layout_view) |
| layout_view.save_layer_props("sky90fd.lyp") |
| |
| |
| if __name__ == "__main__": |
| main() |