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