#!/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 sys import os sys.path.append(os.getenv("XRAY_UTILS_DIR")) import simpleroute print() print('ready') def load_design(f): ''' name node pin wire clk CLK_HROW_TOP_R_X60Y130/CLK_HROW_CK_BUFHCLK_L0 W5 HCLK_VBRK_X34Y130/HCLK_VBRK_CK_BUFHCLK0 din[0] INT_R_X9Y100/NE2BEG3 V17 VBRK_X29Y106/VBRK_NE2A3 ''' ret = {} f.readline() for l in f: l = l.strip() name, node, pin, wire = l.split(' ') ret[name] = wire return ret def route2fasm(route, out_f): pips = simpleroute.route(route) for pip in pips: # INT_L_X10Y122.NL1BEG2.NE2END3 # to # INT_L_X10Y122.NL1BEG2 NE2END3 doti = pip.rfind('.') pip = pip[0:doti] + ' ' + pip[doti + 1:] out_f.write(pip + '\n') def run(design_f, swn, ledn, out_f): name2wire = load_design(design_f) led_name = 'dout[%d]' % ledn sw_name = 'din[%d]' % swn led_wire = name2wire[led_name] sw_wire = name2wire[sw_name] print( 'Routing %s (%s) => %s (%s)' % (sw_wire, sw_name, led_wire, led_name)) route2fasm((sw_wire, led_wire), out_f) # XXX: terminate LEDs so they are off? if __name__ == '__main__': import argparse parser = argparse.ArgumentParser( description='Switch to LED interconnect demo: FASM generator') parser.add_argument('design_txt', help='ROI metadata file') parser.add_argument('sw', type=int, help='Switch to use') parser.add_argument('led', type=int, help='LED to use') # For now can't use stdout since simpleroute is spewing out prints parser.add_argument('out_fasm', help='Output .fasm file') args = parser.parse_args() run( open(args.design_txt, 'r'), args.sw, args.led, open( args.out_fasm, 'w'))