| #!/usr/bin/env python3 | |
| """ | |
| Generates a dummy pb_type model for a site type. | |
| """ | |
| import argparse | |
| import prjxray.db | |
| import prjxray.site_type | |
| import sys | |
| import lxml.etree as ET | |
| def main(): | |
| parser = argparse.ArgumentParser( | |
| description=__doc__, fromfile_prefix_chars='@', prefix_chars='-~' | |
| ) | |
| parser.add_argument('--db_root', help="""Project X-Ray database to use.""") | |
| parser.add_argument('--part', help="""FPGA part to use.""") | |
| parser.add_argument('--site_type', help="""Site type to generate for""") | |
| parser.add_argument( | |
| '--output-pb-type', | |
| nargs='?', | |
| type=argparse.FileType('w'), | |
| default=sys.stdout, | |
| help="""File to write the output too.""" | |
| ) | |
| parser.add_argument( | |
| '--output-model', | |
| nargs='?', | |
| type=argparse.FileType('w'), | |
| default=sys.stdout, | |
| help="""File to write the output too.""" | |
| ) | |
| args = parser.parse_args() | |
| db = prjxray.db.Database(args.db_root, args.part) | |
| site_type = db.get_site_type(args.site_type.upper()) | |
| pb_type_xml = ET.Element( | |
| 'pb_type', | |
| { | |
| 'name': 'DUMMY-{}'.format(args.site_type), | |
| }, | |
| ) | |
| for site_pin_name in site_type.get_site_pins(): | |
| site_pin = site_type.get_site_pin(site_pin_name) | |
| if site_pin.direction == prjxray.site_type.SitePinDirection.IN: | |
| ET.SubElement(pb_type_xml, 'input', { | |
| 'name': site_pin.name, | |
| }) | |
| elif site_pin.direction == prjxray.site_type.SitePinDirection.OUT: | |
| ET.SubElement(pb_type_xml, 'output', { | |
| 'name': site_pin.name, | |
| }) | |
| else: | |
| assert False, site_pin | |
| pb_type_str = ET.tostring(pb_type_xml, pretty_print=True).decode('utf-8') | |
| args.output_pb_type.write(pb_type_str) | |
| args.output_pb_type.close() | |
| model_xml = ET.Element('models') | |
| model_str = ET.tostring(model_xml, pretty_print=True).decode('utf-8') | |
| args.output_model.write(model_str) | |
| args.output_model.close() | |
| if __name__ == '__main__': | |
| main() |