mirror of https://github.com/openXC7/prjxray.git
75 lines
2.0 KiB
Python
Executable File
75 lines
2.0 KiB
Python
Executable File
#!/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'))
|