| #!/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 |
| |
| import json |
| |
| from prjxray.segmaker import Segmaker |
| |
| |
| #Decouple interconnect bits from PRESELECT property bits |
| def bitfilter(frame, bit): |
| if frame == 7 or frame == 21: |
| return False |
| return True |
| |
| |
| def main(): |
| segmk = Segmaker("design.bits") |
| |
| print("Loading tags") |
| with open('params.json') as f: |
| params = json.load(f) |
| |
| for row in params: |
| base_name = 'BUFGCTRL_X{}Y{}'.format(row['x'], row['y']) |
| |
| segmk.add_site_tag( |
| row['site'], '{}.IN_USE'.format(base_name), row['IN_USE']) |
| |
| if not row['IN_USE']: |
| continue |
| |
| for param in ( |
| 'INIT_OUT', |
| 'IS_IGNORE0_INVERTED', |
| 'IS_IGNORE1_INVERTED', |
| ): |
| segmk.add_site_tag( |
| row['site'], '{}.{}'.format(base_name, param), row[param]) |
| |
| for param in ('PRESELECT_I0', ): |
| segmk.add_site_tag( |
| row['site'], '{}.Z{}'.format(base_name, param), 1 ^ row[param]) |
| |
| for param in ('PRESELECT_I1', ): |
| segmk.add_site_tag( |
| row['site'], '{}.{}'.format(base_name, param), row[param]) |
| |
| for param, tag in (('IS_CE0_INVERTED', 'ZINV_CE0'), ('IS_S0_INVERTED', |
| 'ZINV_S0'), |
| ('IS_CE1_INVERTED', 'ZINV_CE1'), ('IS_S1_INVERTED', |
| 'ZINV_S1')): |
| segmk.add_site_tag( |
| row['site'], '{}.{}'.format(base_name, tag), 1 ^ row[param]) |
| |
| segmk.compile(bitfilter=bitfilter) |
| segmk.write() |
| |
| |
| if __name__ == '__main__': |
| main() |