| #!/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 os import environ, getcwd, chdir, mkdir, environ |
| import json |
| from tempfile import TemporaryDirectory |
| from contextlib import contextmanager |
| from unittest import TestCase, main |
| |
| # Setup location of database file to a relative term so it can be generated |
| # in the current subdirectory, which will be a temporary one, to allow concurent |
| # testing. |
| environ['XRAY_DATABASE_ROOT'] = '.' |
| environ['XRAY_PART'] = 'xc7a200tffg1156-1' |
| |
| from prjxray.util import get_roi, get_db_root |
| from prjxray.overlay import Overlay |
| from prjxray.grid_types import GridLoc |
| |
| |
| @contextmanager |
| def setup_database(contents): |
| with TemporaryDirectory() as d: |
| olddir = getcwd() |
| chdir(d) |
| mkdir('xc7a200t') |
| mkdir('mapping') |
| environ['XRAY_DATABASE_ROOT'] = d |
| e = None |
| with open('xc7a200t/tilegrid.json', 'w') as fd: |
| json.dump(contents, fd) |
| # Create some dummy data |
| with open('mapping/devices.yaml', 'w') as fd: |
| json.dump({'xc7a200t': {'fabric': "xc7a200t"}}, fd) |
| with open('mapping/parts.yaml', 'w') as fd: |
| json.dump({'xc7a200tffg1156-1': {"device": "xc7a200t"}}, fd) |
| |
| try: |
| yield |
| except Exception as ereal: |
| e = ereal |
| chdir(olddir) |
| if e is not None: |
| raise e |
| |
| |
| class TestUtil(TestCase): |
| def test_get_roi_gen_sites(self): |
| makedb = lambda sites: { |
| "ATILE": { |
| "bits": { |
| "CLB_IO_CLK": { |
| "baseaddr": "0x00400F00", |
| "frames": 28, |
| "height": 2, |
| "offset": 0, |
| "words": 2 |
| } |
| }, |
| "grid_x": 10, |
| "grid_y": 10, |
| "segment": "ASEGMENT", |
| "segment_type": "bram0_l", |
| "sites": sites, |
| "prohibited_sites": [], |
| "type": "BRAM_INT_INTERFACE_L" |
| } |
| } |
| with setup_database(makedb({})): |
| self.assertListEqual(list(get_roi().gen_sites()), []) |
| with setup_database(makedb({'FOO': 'BAR'})): |
| self.assertListEqual( |
| list(get_roi().gen_sites()), [('ATILE', 'FOO', 'BAR')]) |
| |
| def test_in_roi_overlay(self): |
| region_dict = {} |
| region_dict['pr1'] = (10, 58, 0, 51) |
| region_dict['pr2'] = (10, 58, 52, 103) |
| overlay = Overlay(region_dict) |
| self.assertFalse(overlay.tile_in_roi(GridLoc(18, 50))) |
| self.assertFalse(overlay.tile_in_roi(GridLoc(18, 84))) |
| self.assertTrue(overlay.tile_in_roi(GridLoc(8, 50))) |
| self.assertTrue(overlay.tile_in_roi(GridLoc(18, 112))) |
| self.assertTrue(overlay.tile_in_roi(GridLoc(80, 40))) |
| |
| |
| if __name__ == '__main__': |
| main() |