Create design.json that describes roi harness boundry, used for VPR arch def.

Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
This commit is contained in:
Keith Rothman 2018-10-23 14:37:44 -07:00
parent 0a66f31188
commit c7d145a466
4 changed files with 76 additions and 8 deletions

View File

@ -0,0 +1,29 @@
import json
import csv
import argparse
import sys
def main():
parser = argparse.ArgumentParser(description="Creates design.json from output of ROI generation tcl script.")
parser.add_argument('--design_txt', required=True)
parser.add_argument('--design_info_txt', required=True)
args = parser.parse_args()
j = {}
j['ports'] = []
j['info'] = {}
with open(args.design_txt) as f:
for d in csv.DictReader(f, delimiter=' '):
j['ports'].append(d)
with open(args.design_info_txt) as f:
for l in f:
name, value = l.strip().split(' = ')
j['info'][name] = int(value)
json.dump(j, sys.stdout, indent=2, sort_keys=True)
if __name__ == '__main__':
main()

View File

@ -24,7 +24,7 @@ EOF
stat ${XRAY_DIR}/database/artix7/${XRAY_PART}.yaml >/dev/null
# 6x by 18y CLBs (108)
if [ $SMALL = Y ] ; then
if [ "$SMALL" = Y ] ; then
echo "Design: small"
export PITCH=1
export DIN_N=8
@ -37,6 +37,7 @@ else
export DIN_N=8
export DOUT_N=8
export XRAY_ROI=SLICE_X12Y100:SLICE_X27Y149
#export XRAY_ROI=SLICE_X12Y100:SLICE_X5Y149
fi
mkdir -p $BUILD_DIR
@ -59,6 +60,8 @@ ${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design.bits -z -y design.bit
${XRAY_SEGPRINT} -zd design.bits >design.segp
${XRAY_DIR}/utils/bits2fasm.py --verbose design.bits > design.fasm
${XRAY_DIR}/utils/fasm2frames.py design.fasm design.frm
python3 ../create_design_json.py --design_info_txt design_info.txt --design_txt design.txt > design.json
# Hack to get around weird clock error related to clk net not found
# Remove following lines:
#set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]

View File

@ -360,6 +360,48 @@ proc node2wire {node} {
return $wire
}
proc write_grid_roi {fp} {
foreach {slices} [split "$::env(XRAY_ROI)" " "] {
foreach site_name [split "$slices" :] {
set site [get_sites $site_name]
set tile [get_tiles -of_objects $site]
lappend grid_xs [get_property GRID_POINT_X $tile]
lappend grid_ys [get_property GRID_POINT_Y $tile]
}
}
set grid_x_min [lindex $grid_xs 0]
set grid_x_max [lindex $grid_xs 0]
set grid_y_min [lindex $grid_ys 0]
set grid_y_max [lindex $grid_ys 0]
foreach {grid_x} $grid_xs {
if {$grid_x > $grid_x_max} {
set grid_x_max $grid_x
}
if {$grid_x < $grid_x_min} {
set grid_x_min $grid_x
}
}
foreach {grid_y} $grid_ys {
if {$grid_y > $grid_y_max} {
set grid_y_max $grid_y
}
if {$grid_y < $grid_x_min} {
set grid_y_min $grid_y
}
}
puts $fp "GRID_X_MIN = $grid_x_min"
puts $fp "GRID_X_MAX = $grid_x_max"
puts $fp "GRID_Y_MIN = $grid_y_min"
puts $fp "GRID_Y_MAX = $grid_y_max"
}
set fp [open "design_info.txt" w]
write_grid_roi $fp
close $fp
# XXX: maybe add IOB?
set fp [open "design.txt" w]
puts $fp "name node pin wire"

View File

@ -12,7 +12,7 @@ class BlockType(enum.Enum):
GridLoc = namedtuple('GridLoc', 'grid_x grid_y')
GridInfo = namedtuple('GridInfo', 'segment bits sites tile_type in_roi')
GridInfo = namedtuple('GridInfo', 'segment bits sites tile_type')
Bits = namedtuple('Bits', 'base_address frames offset words')
BitsInfo = namedtuple('BitsInfo', 'segment_type tile bits')
@ -43,11 +43,6 @@ class Grid(object):
assert grid_loc not in self.loc
self.loc[grid_loc] = tile
if 'in_roi' in tileinfo:
in_roi = tileinfo['in_roi']
else:
in_roi = True
bits = {}
if 'segment' in tileinfo:
@ -72,7 +67,6 @@ class Grid(object):
bits=bits,
sites=tileinfo['sites'],
tile_type=tileinfo['type'],
in_roi=in_roi,
)
x, y = zip(*self.loc.keys())