mirror of https://github.com/openXC7/prjxray.git
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:
parent
0a66f31188
commit
c7d145a466
|
|
@ -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()
|
||||||
|
|
@ -24,7 +24,7 @@ EOF
|
||||||
stat ${XRAY_DIR}/database/artix7/${XRAY_PART}.yaml >/dev/null
|
stat ${XRAY_DIR}/database/artix7/${XRAY_PART}.yaml >/dev/null
|
||||||
|
|
||||||
# 6x by 18y CLBs (108)
|
# 6x by 18y CLBs (108)
|
||||||
if [ $SMALL = Y ] ; then
|
if [ "$SMALL" = Y ] ; then
|
||||||
echo "Design: small"
|
echo "Design: small"
|
||||||
export PITCH=1
|
export PITCH=1
|
||||||
export DIN_N=8
|
export DIN_N=8
|
||||||
|
|
@ -37,6 +37,7 @@ else
|
||||||
export DIN_N=8
|
export DIN_N=8
|
||||||
export DOUT_N=8
|
export DOUT_N=8
|
||||||
export XRAY_ROI=SLICE_X12Y100:SLICE_X27Y149
|
export XRAY_ROI=SLICE_X12Y100:SLICE_X27Y149
|
||||||
|
#export XRAY_ROI=SLICE_X12Y100:SLICE_X5Y149
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p $BUILD_DIR
|
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_SEGPRINT} -zd design.bits >design.segp
|
||||||
${XRAY_DIR}/utils/bits2fasm.py --verbose design.bits > design.fasm
|
${XRAY_DIR}/utils/bits2fasm.py --verbose design.bits > design.fasm
|
||||||
${XRAY_DIR}/utils/fasm2frames.py design.fasm design.frm
|
${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
|
# Hack to get around weird clock error related to clk net not found
|
||||||
# Remove following lines:
|
# Remove following lines:
|
||||||
#set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
|
#set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
|
||||||
|
|
|
||||||
|
|
@ -360,6 +360,48 @@ proc node2wire {node} {
|
||||||
return $wire
|
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?
|
# XXX: maybe add IOB?
|
||||||
set fp [open "design.txt" w]
|
set fp [open "design.txt" w]
|
||||||
puts $fp "name node pin wire"
|
puts $fp "name node pin wire"
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ class BlockType(enum.Enum):
|
||||||
|
|
||||||
|
|
||||||
GridLoc = namedtuple('GridLoc', 'grid_x grid_y')
|
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')
|
Bits = namedtuple('Bits', 'base_address frames offset words')
|
||||||
BitsInfo = namedtuple('BitsInfo', 'segment_type tile bits')
|
BitsInfo = namedtuple('BitsInfo', 'segment_type tile bits')
|
||||||
|
|
||||||
|
|
@ -43,11 +43,6 @@ class Grid(object):
|
||||||
assert grid_loc not in self.loc
|
assert grid_loc not in self.loc
|
||||||
self.loc[grid_loc] = tile
|
self.loc[grid_loc] = tile
|
||||||
|
|
||||||
if 'in_roi' in tileinfo:
|
|
||||||
in_roi = tileinfo['in_roi']
|
|
||||||
else:
|
|
||||||
in_roi = True
|
|
||||||
|
|
||||||
bits = {}
|
bits = {}
|
||||||
|
|
||||||
if 'segment' in tileinfo:
|
if 'segment' in tileinfo:
|
||||||
|
|
@ -72,7 +67,6 @@ class Grid(object):
|
||||||
bits=bits,
|
bits=bits,
|
||||||
sites=tileinfo['sites'],
|
sites=tileinfo['sites'],
|
||||||
tile_type=tileinfo['type'],
|
tile_type=tileinfo['type'],
|
||||||
in_roi=in_roi,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
x, y = zip(*self.loc.keys())
|
x, y = zip(*self.loc.keys())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue