|  | #!/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')) |