From 70b9adb93368a3ae9624ffc9eb0fa37119d81a9a Mon Sep 17 00:00:00 2001 From: John McMaster Date: Mon, 3 Dec 2018 17:14:04 -0800 Subject: [PATCH] tilegrid: generating iob deltas Signed-off-by: John McMaster --- fuzzers/005-tilegrid/generate.sh | 1 + fuzzers/005-tilegrid/generate_iob.tcl | 58 +++++++++------------------ 2 files changed, 20 insertions(+), 39 deletions(-) diff --git a/fuzzers/005-tilegrid/generate.sh b/fuzzers/005-tilegrid/generate.sh index 8720ab99..0064e89f 100644 --- a/fuzzers/005-tilegrid/generate.sh +++ b/fuzzers/005-tilegrid/generate.sh @@ -6,6 +6,7 @@ export FUZDIR=$PWD source ${XRAY_GENHEADER} vivado -mode batch -source $FUZDIR/generate_$PRJ.tcl +test -z "$(fgrep CRITICAL vivado.log)" if [ $PRJ != "tiles" ] ; then for x in design*.bit; do diff --git a/fuzzers/005-tilegrid/generate_iob.tcl b/fuzzers/005-tilegrid/generate_iob.tcl index 4b1127f5..515461b6 100644 --- a/fuzzers/005-tilegrid/generate_iob.tcl +++ b/fuzzers/005-tilegrid/generate_iob.tcl @@ -1,61 +1,41 @@ source "$::env(FUZDIR)/util.tcl" -# FIXME: change to grab one IOB from each column -proc loc_iob_old {} { - set ports [concat [get_ports clk] [get_ports do] [get_ports stb] [get_ports di]] - set selected_iobs {} - foreach port $ports { - set site [get_sites -of_objects $port] - set tile [get_tiles -of_objects $site] - set grid_x [get_property GRID_POINT_X $tile] - set grid_y [get_property GRID_POINT_Y $tile] - # 50 per column => 50, 100, 150, etc - if [regexp "Y(?:.*[05])?0" $site] { - lappend selected_iobs $port - } - } - return $selected_iobs -} - proc loc_iob {} { - # Get all possible sites - # set duts [make_iob_sites] - # set dut_sites [get_sites -of_objects [get_pblocks roi] -filter {SITE_TYPE =~ RAMBFIFO36E1*}] - #set duts [get_sites -filter {SITE_TYPE =~ IOB33*}] - set duts [get_bels -filter {TYPE =~ PAD}] + # Some pads are output only (ex: OPAD_X0Y0/PAD) => filt IOB_* + # XXX: GTX bank missing, deal with that later + set duts [get_bels -filter {TYPE =~ PAD && NAME =~ IOB_*}] # Sort them into CMT columns - set dut_columns [group_dut_cols $duts 75] + set dut_columns [group_dut_cols $duts 50] # Assign one from each - write_checkpoint -force tmp.dcp - return [loc_dut_col_bels $dut_columns {di_bufs[} {].ibuf} ] + return [loc_dut_col_sites $dut_columns {di_bufs[} {].ibuf} ] } -proc write_iob { selected_iobs } { - foreach port $selected_iobs { - puts "" - set site [get_sites -of_objects $port] - set tile [get_tiles -of_objects $site] - set pin [get_property PACKAGE_PIN $port] - puts "IOB33 $port $site $tile $pin" - set orig_init [get_property PULLTYPE $port] - set_property PULLTYPE PULLUP $port - write_bitstream -force design_$site.bit - set_property PULLTYPE "$orig_init" $port +proc write_iob { sel_iob_sites } { + foreach site $sel_iob_sites { + puts "" + set port [get_ports -of_objects $site] + set tile [get_tiles -of_objects $site] + set pin [get_property PACKAGE_PIN $port] + puts "IOB $port $site $tile $pin" + set orig_init [get_property PULLTYPE $port] + set_property PULLTYPE PULLUP $port + write_bitstream -force design_$site.bit + set_property PULLTYPE "$orig_init" $port } } proc run {} { make_project - set selected_iobs [loc_iob] - puts "Selected IOBs: [llength $selected_iobs]" + set sel_iob_sites [loc_iob] + puts "Selected IOBs: [llength $sel_iob_sites]" place_design route_design write_checkpoint -force design.dcp write_bitstream -force design.bit - write_iob $selected_iobs + write_iob $sel_iob_sites } run