blob: 150da4902e3da809c96e6a67899fde2d74bab145 [file] [log] [blame]
#!/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()