| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # |
| # Copyright (C) 2017-2020 The Project X-Ray Authors. |
| # |
| # Use of this source code is governed by a ISC-style |
| # license that can be found in the LICENSE file or at |
| # https://opensource.org/licenses/ISC |
| # |
| # SPDX-License-Identifier: ISC |
| from __future__ import print_function |
| import prjxray.db |
| import prjxray.util |
| import argparse |
| |
| |
| def quick_test(db_root, part): |
| db = prjxray.db.Database(db_root, part) |
| g = db.grid() |
| |
| # Verify that we have some tile information for every tile in grid. |
| tile_types_in_grid = set( |
| g.gridinfo_at_loc(loc).tile_type for loc in g.tile_locations()) |
| tile_types_in_db = set(db.get_tile_types()) |
| site_types = set(db.get_site_types()) |
| assert len(tile_types_in_grid - tile_types_in_db) == 0 |
| |
| # Verify that all tile types can be loaded. |
| for tile_type in db.get_tile_types(): |
| tile = db.get_tile_type(tile_type) |
| wires = tile.get_wires() |
| for site in tile.get_sites(): |
| assert site.type in site_types |
| site_type = db.get_site_type(site.type) |
| site_pins = site_type.get_site_pins() |
| for site_pin in site.site_pins: |
| if site_pin.wire is not None: |
| assert site_pin.wire in wires, (site_pin.wire, ) |
| |
| assert site_pin.name in site_pins |
| |
| for pip in tile.get_pips(): |
| assert pip.net_to in wires |
| assert pip.net_from in wires |
| |
| for loc in g.tile_locations(): |
| gridinfo = g.gridinfo_at_loc(loc) |
| assert gridinfo.tile_type in db.get_tile_types() |
| for site_name, site_type in gridinfo.sites.items(): |
| assert site_type in site_types |
| |
| tile = db.get_tile_type(gridinfo.tile_type) |
| |
| instance_sites = list(tile.get_instance_sites(gridinfo)) |
| assert len(instance_sites) == len(tile.get_sites()) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser( |
| description="Runs a sanity check on a prjxray database.") |
| |
| util.db_root_arg(parser) |
| util.part_arg(parser) |
| |
| args = parser.parse_args() |
| |
| quick_test(args.db_root, args.part) |
| |
| |
| if __name__ == '__main__': |
| main() |