blob: b46fac3f38c14685ef181da44f8844e9577dbab3 [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
from prjxray import verilog
def add_enum_bits(segmk, params, key, options):
for opt in options:
segmk.add_site_tag(
params['tile'], '{}_{}'.format(key, opt), params[key] == opt)
def output_integer_tags(segmk, params, key, invert=False):
tile = params['tile']
bits = verilog.parse_bitstr(params[key])
for bit, tag_val in enumerate(bits):
if not invert:
segmk.add_tile_tag(
tile, "{}[{}]".format(key,
len(bits) - bit - 1), tag_val)
else:
segmk.add_tile_tag(
tile, "Z{}[{}]".format(key,
len(bits) - bit - 1),
0 if tag_val else 1)
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['EN_SYN'] and tile_param['DATA_WIDTH'] == 4:
output_integer_tags(
segmk, tile_param, 'ALMOST_EMPTY_OFFSET', invert=True)
output_integer_tags(
segmk, tile_param, 'ALMOST_FULL_OFFSET', invert=True)
for param in ('EN_SYN', 'FIRST_WORD_FALL_THROUGH'):
segmk.add_tile_tag(tile_param['tile'], param, tile_param[param])
segmk.compile()
segmk.write()
if __name__ == '__main__':
main()