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