diff --git a/minitests/roi_harness/create_design_json.py b/minitests/roi_harness/create_design_json.py new file mode 100644 index 00000000..3c7360a5 --- /dev/null +++ b/minitests/roi_harness/create_design_json.py @@ -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() diff --git a/minitests/roi_harness/runme.sh b/minitests/roi_harness/runme.sh index c5da2a4e..8ec24515 100755 --- a/minitests/roi_harness/runme.sh +++ b/minitests/roi_harness/runme.sh @@ -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] diff --git a/minitests/roi_harness/runme.tcl b/minitests/roi_harness/runme.tcl index 06ae5023..c2bd9795 100644 --- a/minitests/roi_harness/runme.tcl +++ b/minitests/roi_harness/runme.tcl @@ -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" diff --git a/prjxray/grid.py b/prjxray/grid.py index 15b7c94d..3acde582 100644 --- a/prjxray/grid.py +++ b/prjxray/grid.py @@ -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())