| # Copyright 2020 Efabless Corporation |
| # |
| # 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 |
| # |
| # http://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. |
| |
| # Developed by @ganeshgore |
| |
| import argparse |
| |
| |
| def formatter(prog): |
| return argparse.HelpFormatter(prog, max_help_position=60) |
| |
| |
| parser = argparse.ArgumentParser(formatter_class=formatter) |
| |
| # Mandatory arguments |
| parser.add_argument("--magic_drc_in", type=str, default="./checks/caravel.magic.drc") |
| parser.add_argument("--rdb_out", type=str, default="./checks/caravel.magic.rdb") |
| args = parser.parse_args() |
| |
| data, drc = True, False |
| |
| |
| def main(): |
| try: |
| fp = open(args.magic_drc_in) |
| lineType = data |
| drcRule = "" |
| with open(args.rdb_out, "w") as fpw: |
| for indx, line in enumerate(fp.readlines()): |
| if ("[INFO]" in line) or (len(line.strip()) == 0): |
| continue |
| elif indx == 0: |
| fpw.write(f"${line} 100\n") |
| elif "------" in line: |
| lineType = not lineType |
| elif lineType == drc: |
| drcRule = line.strip().split("(") |
| drcRule = [drcRule, "UnknownRule"] if len(drcRule) < 2 else drcRule |
| fpw.write(f"r_0_{drcRule[1][:-1]}\n") |
| fpw.write("500 500 2 Nov 29 03:26:39 2020\n") |
| fpw.write(f"Rule File Pathname: {args.magic_drc_in}\n") |
| fpw.write(f"{drcRule[1][:-1]}: {drcRule[0]}\n") |
| drcNumber = 1 |
| elif lineType == data: |
| cord = [int(float(i)) * 100 for i in line.strip().split(" ")] |
| fpw.write(f"p {drcNumber} 4\n") |
| fpw.write(f"{cord[0]} {cord[1]}\n") |
| fpw.write(f"{cord[2]} {cord[1]}\n") |
| fpw.write(f"{cord[2]} {cord[3]}\n") |
| fpw.write(f"{cord[0]} {cord[3]}\n") |
| drcNumber += 1 |
| print(f"Generated RDB at {args.rdb_out}") |
| except IOError: |
| print("Magic DRC Error file not found {args.magic_drc_in}") |
| except Exception: |
| print("Failed to generate RDB file") |
| finally: |
| fp.close() |
| |
| |
| if __name__ == "__main__": |
| main() |