| #!/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)) |