mirror of https://github.com/openXC7/prjxray.git
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
#!/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()
|