From 61c51d6a1508826263106f2837e7f9a610fc05fb Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sat, 11 Nov 2017 02:33:02 +0100 Subject: [PATCH] Add segprint.py, use in switchboxes minitest Signed-off-by: Clifford Wolf Signed-off-by: Tim 'mithro' Ansell --- minitests/switchboxes/routes.tcl | 6 ++-- minitests/switchboxes/runme.sh | 2 ++ utils/segprint.py | 51 ++++++++++++++++++++++++++++++++ utils/utils.tcl | 9 ++++-- 4 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 utils/segprint.py diff --git a/minitests/switchboxes/routes.tcl b/minitests/switchboxes/routes.tcl index 7e6d0435..1d8e2bbc 100644 --- a/minitests/switchboxes/routes.tcl +++ b/minitests/switchboxes/routes.tcl @@ -2,9 +2,9 @@ set_property FIXED_ROUTE {} [get_nets] route_design -unroute -route_via x_OBUF {INT_L_X10Y118/NR1BEG1 INT_L_X10Y119/EE2BEG0 INT_L_X12Y119/EE2BEG0 INT_L_X14Y119/SW2BEG0} -route_via y_OBUF {INT_L_X10Y116/NR1BEG1 INT_L_X10Y117/EE2BEG0 INT_L_X12Y117/EE2BEG0 INT_L_X14Y117/SW2BEG0} -route_via z_OBUF {INT_L_X10Y114/NR1BEG1 INT_L_X10Y115/EE2BEG0 INT_L_X12Y115/EE2BEG0 INT_L_X14Y115/SW2BEG0} +route_via x_OBUF {INT_L_X10Y118/NR1BEG1 INT_L_X10Y119/EE2BEG0 INT_L_X12Y119/EE2BEG0 INT_R_X13Y118/SW2END0 INT_R_X13Y118/WW4BEG1} +route_via y_OBUF {INT_L_X10Y116/NR1BEG1 INT_L_X10Y117/EE2BEG0 INT_L_X12Y117/EE2BEG0 INT_R_X13Y116/SW2END0 INT_R_X13Y116/WW4BEG1} +route_via z_OBUF {INT_L_X10Y114/NR1BEG1 INT_L_X10Y115/EE2BEG0 INT_L_X12Y115/EE2BEG0 INT_R_X13Y114/SW2END0 INT_R_X13Y114/WW4BEG1} route_design diff --git a/minitests/switchboxes/runme.sh b/minitests/switchboxes/runme.sh index e5a4f6f8..c4f95471 100644 --- a/minitests/switchboxes/runme.sh +++ b/minitests/switchboxes/runme.sh @@ -2,3 +2,5 @@ vivado -mode batch -source runme.tcl ../../tools/bitread -F $XRAY_ROI_FRAMES -o design.bits -zy design.bit ../../tools/bitread -F $XRAY_ROI_FRAMES -o routes.bits -zy routes.bit +python3 ../../utils/segprint.py routes.bits INT_L_X12Y119 INT_L_X12Y117 INT_L_X12Y115 +python3 ../../utils/segprint.py routes.bits INT_R_X13Y118 INT_R_X13Y116 INT_R_X13Y114 diff --git a/utils/segprint.py b/utils/segprint.py new file mode 100644 index 00000000..7fadb15b --- /dev/null +++ b/utils/segprint.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 + +import sys, os, json, re + +# print("Loading %s grid." % os.getenv("XRAY_DATABASE")) +with open("%s/../database/%s/tilegrid.json" % (os.path.dirname(sys.modules[__name__].__file__), os.getenv("XRAY_DATABASE")), "r") as f: + grid = json.load(f) + +bitdata = dict() + +# print("Loading %s." % sys.argv[1]) +with open(sys.argv[1], "r") as f: + for line in f: + line = line.split("_") + frame = int(line[1], 16) + wordidx = int(line[2], 10) + bitidx = int(line[3], 10) + + if frame not in bitdata: + bitdata[frame] = dict() + + if wordidx not in bitdata[frame]: + bitdata[frame][wordidx] = set() + + bitdata[frame][wordidx].add(bitidx) + +for arg in sys.argv[2:]: + if arg in grid["tiles"]: + segname = grid["tiles"][arg]["segment"] + else: + segname = arg + + print() + print("seg %s" % segname) + + seginfo = grid["segments"][segname] + + baseframe = int(seginfo["baseaddr"][0], 16) + basewordidx = int(seginfo["baseaddr"][1]) + numframes = int(seginfo["frames"]) + numwords = int(seginfo["words"]) + + for frame in range(baseframe, baseframe+numframes): + if frame not in bitdata: + continue + for wordidx in range(basewordidx, basewordidx+numwords): + if wordidx not in bitdata[frame]: + continue + for bitidx in bitdata[frame][wordidx]: + print("bit %02d_%02d" % (frame - baseframe, 32*(wordidx - basewordidx) + bitidx)) + diff --git a/utils/utils.tcl b/utils/utils.tcl index a500f95b..534932d9 100644 --- a/utils/utils.tcl +++ b/utils/utils.tcl @@ -2,21 +2,26 @@ proc route_via {net nodes} { set net [get_nets $net] set fixed_route [get_nodes -of_objects [get_site_pins -filter {DIRECTION == OUT} -of_objects $net]] - - set nodes [get_nodes $nodes] lappend nodes [get_nodes -of_objects [get_site_pins -filter {DIRECTION == IN} -of_objects $net]] + puts "" + puts "Routing net $net:" + foreach to_node $nodes { + set to_node [get_nodes -of_objects [get_wires $to_node]] set from_node [lindex $fixed_route end] set route [find_routing_path -quiet -from $from_node -to $to_node] if {$route == ""} { + puts " $from_node -> $to_node: no route found - assuming direct PIP" lappend fixed_route $to_node } { + puts " $from_node -> $to_node: $route" set fixed_route [concat $fixed_route [lrange $route 1 end]] } } set_property FIXED_ROUTE $fixed_route $net + puts "" } proc putl {lst} {