Add segprint.py, use in switchboxes minitest

Signed-off-by: Clifford Wolf <clifford@clifford.at>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
Clifford Wolf 2017-11-11 02:33:02 +01:00 committed by Tim 'mithro' Ansell
parent 1ce90e7f21
commit 61c51d6a15
4 changed files with 63 additions and 5 deletions

View File

@ -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

View File

@ -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

51
utils/segprint.py Normal file
View File

@ -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))

View File

@ -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} {