""" Converts simple PCF file to simple XDC file.

Assumes one IOSTANDARD for entire file.  If something else is required,
recommend just using explicit XDC.

"""
import argparse
from f4pga.utils.pcf import parse_simple_pcf


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--pcf', required=True, help="Input PCF file")
    parser.add_argument('--xdc', required=True, help="Output PCF file")
    parser.add_argument(
        '--iostandard', required=True, help="IOSTANDARD to use"
    )

    args = parser.parse_args()

    with open(args.pcf) as f, open(args.xdc, 'w') as f_out:
        for pcf_constraint in parse_simple_pcf(f):
            print(
                'set_property -dict "PACKAGE_PIN {pin} IOSTANDARD {iostandard}" [get_ports {port}]'
                .format(
                    pin=pcf_constraint.pad,
                    port=pcf_constraint.net,
                    iostandard=args.iostandard
                ),
                file=f_out
            )


if __name__ == "__main__":
    main()
