blob: 1c92f5f66e776c62c30fa7a4775deda7c0c4b717 [file] [log] [blame] [edit]
#!/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))