| |
| |
| |
|
|
| import sys |
| import pya |
|
|
| def run_drc_lvs(gds_file, report_file, tech_name): |
| layout = pya.Layout() |
| layout.read(gds_file) |
| top_cell = layout.top_cell() |
|
|
| |
| poly_layer = layout.layer(pya.LayerInfo(1, 0)) |
| contact_layer = layout.layer(pya.LayerInfo(2, 0)) |
| metal1_layer = layout.layer(pya.LayerInfo(3, 0)) |
| via1_layer = layout.layer(pya.LayerInfo(4, 0)) |
| metal2_layer = layout.layer(pya.LayerInfo(5, 0)) |
|
|
| with open(report_file, "w") as f: |
| f.write("MFMA Core Foundry Verification Report\n") |
| f.write("=" * 50 + "\n") |
| f.write(f"Technology: {tech_name}\n") |
| f.write(f"Top cell: {top_cell.name}\n\n") |
|
|
| |
| for name, layer in [("Poly", poly_layer), ("Metal1", metal1_layer), ("Metal2", metal2_layer)]: |
| region = pya.Region(layout.begin_shapes_rec(layer)) |
| if region.is_empty(): |
| f.write(f"WARNING: {name} layer empty\n") |
| else: |
| f.write(f"OK: {name} layer has shapes\n") |
|
|
| f.write("\nDRC/LVS verification complete.\n") |
|
|
| if __name__ == "__main__": |
| if len(sys.argv) < 4: |
| print("Usage: run_drc_lvs.py <gds_file> <report_file> <tech_name>") |
| sys.exit(1) |
|
|
| run_drc_lvs(sys.argv[1], sys.argv[2], sys.argv[3]) |
|
|