| #!/usr/bin/env python3 | |
| from __future__ import print_function | |
| import sys | |
| import os | |
| import pcf | |
| from f4pga.utils.vpr_io_place import IoPlace | |
| import csv | |
| import argparse | |
| parser = argparse.ArgumentParser( | |
| description='Convert a PCF file into a VPR io.place file.' | |
| ) | |
| parser.add_argument( | |
| "--pcf", | |
| '-p', | |
| "-P", | |
| type=argparse.FileType('r'), | |
| required=True, | |
| help='PCF input file' | |
| ) | |
| parser.add_argument( | |
| "--blif", | |
| '-b', | |
| type=argparse.FileType('r'), | |
| required=True, | |
| help='BLIF / eBLIF file' | |
| ) | |
| parser.add_argument( | |
| "--map", | |
| '-m', | |
| "-M", | |
| type=argparse.FileType('r'), | |
| required=True, | |
| help='Pin map CSV file' | |
| ) | |
| parser.add_argument( | |
| "--net", | |
| '-n', | |
| type=argparse.FileType('r'), | |
| required=True, | |
| help='VPR Packed netlist file' | |
| ) | |
| parser.add_argument( | |
| "--output", | |
| '-o', | |
| "-O", | |
| type=argparse.FileType('w'), | |
| default=sys.stdout, | |
| help='The output io.place file' | |
| ) | |
| def main(argv): | |
| args = parser.parse_args() | |
| reader = csv.DictReader(args.map) | |
| pin_map = {} | |
| for row in reader: | |
| pin_map[row['name']] = (int(row['x']), int(row['y']), int(row['z'])) | |
| locs = pcf.parse_pcf(args.pcf, pin_map) | |
| io_place = IoPlace() | |
| io_place.read_io_list_from_eblif(args.blif) | |
| io_place.load_net_file_ios(args.net) | |
| for name, (loc, pcf_line) in locs.items(): | |
| if io_place.is_net_packed(name): | |
| io_place.constrain_net(net_name=name, loc=loc, comment=pcf_line) | |
| io_place.output_io_place(args.output) | |
| if __name__ == "__main__": | |
| sys.exit(main(sys.argv)) |