| #!/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 |
| |
| |
| def write_ram_ext_tags(segmk, tile_param): |
| for param in ["RAM_EXTENSION_A", "RAM_EXTENSION_B"]: |
| set_val = tile_param[param] |
| for opt in ["LOWER"]: |
| segmk.add_site_tag( |
| tile_param['site'], "{}_{}".format(param, opt), set_val == opt) |
| segmk.add_site_tag( |
| tile_param['site'], "{}_NONE_OR_UPPER".format(param), |
| set_val != "LOWER") |
| |
| |
| def main(): |
| segmk = Segmaker("design.bits") |
| |
| print("Loading tags") |
| with open('params.json') as f: |
| params = json.load(f) |
| |
| for tile_param in params: |
| if tile_param['BRAM36_IN_USE']: |
| write_ram_ext_tags(segmk, tile_param) |
| |
| segmk.add_site_tag( |
| tile_param['site'], 'EN_ECC_READ', tile_param['EN_ECC_READ']) |
| segmk.add_site_tag( |
| tile_param['site'], 'EN_ECC_WRITE', tile_param['EN_ECC_WRITE']) |
| |
| for ab in 'ab': |
| for rw in 'rw': |
| if rw == 'r': |
| dir = 'READ' |
| else: |
| dir = 'WRITE' |
| |
| width = tile_param['bram36_{}{}_width'.format(rw, ab)] |
| tag = 'BRAM36_{}_WIDTH_{}_1'.format(dir, ab.upper()) |
| if width == 1: |
| segmk.add_site_tag( |
| tile_param['site'], tag, tile_param['BRAM36_IN_USE']) |
| |
| segmk.compile() |
| segmk.write() |
| |
| |
| if __name__ == '__main__': |
| main() |