From 6fb68593ff485e19f623d6117003e39df7ad5f4f Mon Sep 17 00:00:00 2001 From: Tomasz Michalak Date: Tue, 4 Jun 2019 08:50:57 +0200 Subject: [PATCH] 059-pip-byp-bounce: Add separate fuzzer for FAN_ALT.BYP_BOUNCE bits Signed-off-by: Tomasz Michalak --- fuzzers/059-pip-byp-bounce/Makefile | 6 ++ fuzzers/059-pip-byp-bounce/README.md | 4 + fuzzers/059-pip-byp-bounce/generate.tcl | 118 ++++++++++++++++++++++++ fuzzers/059-pip-byp-bounce/top.v | 3 + fuzzers/Makefile | 3 +- 5 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 fuzzers/059-pip-byp-bounce/Makefile create mode 100644 fuzzers/059-pip-byp-bounce/README.md create mode 100644 fuzzers/059-pip-byp-bounce/generate.tcl create mode 100644 fuzzers/059-pip-byp-bounce/top.v diff --git a/fuzzers/059-pip-byp-bounce/Makefile b/fuzzers/059-pip-byp-bounce/Makefile new file mode 100644 index 00000000..ac242b7e --- /dev/null +++ b/fuzzers/059-pip-byp-bounce/Makefile @@ -0,0 +1,6 @@ +MAKETODO_FLAGS=--re "^INT_[LR].FAN_ALT[0-9]\.BYP_BOUNCE.*$$" +GENERATE_FLAGS=--todo ../todo.txt +N = 48 +SEGMATCH_FLAGS=-m 15 -M 45 -c 2 +include ../int_loop.mk + diff --git a/fuzzers/059-pip-byp-bounce/README.md b/fuzzers/059-pip-byp-bounce/README.md new file mode 100644 index 00000000..8db61e68 --- /dev/null +++ b/fuzzers/059-pip-byp-bounce/README.md @@ -0,0 +1,4 @@ +Fuzzer for the FAN_ALT*.BYP_BOUNCE PIPs +--------------------------------------- + +This fuzzer solves the FAN_ALT.BYP_BOUNCE PIPs which were occasionally solved incorrectly in 050-pip-seed or 056-pip-rem. diff --git a/fuzzers/059-pip-byp-bounce/generate.tcl b/fuzzers/059-pip-byp-bounce/generate.tcl new file mode 100644 index 00000000..0539ef48 --- /dev/null +++ b/fuzzers/059-pip-byp-bounce/generate.tcl @@ -0,0 +1,118 @@ +source "$::env(XRAY_DIR)/utils/utils.tcl" + +proc build_basic {} { + create_project -force -part $::env(XRAY_PART) design design + + read_verilog $::env(FUZDIR)/top.v + synth_design -top top + + set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_00) IOSTANDARD LVCMOS33" [get_ports i] + set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_01) IOSTANDARD LVCMOS33" [get_ports o] + + create_pblock roi + resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)" + + set_property CFGBVS VCCO [current_design] + set_property CONFIG_VOLTAGE 3.3 [current_design] + set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design] + set_param tcl.collectionResultDisplayLimit 0 + + place_design + route_design +} + +proc load_todo {} { + set fp [open "../../todo.txt" r] + set todo_lines {} + for {gets $fp line} {$line != ""} {gets $fp line} { + lappend todo_lines [split $line .] + } + close $fp + return $todo_lines +} + +proc lremove { l val } { + set idx [lsearch $l $val] + return [lreplace $l $idx $idx] +} + +proc route_todo {} { + set todo_lines [load_todo] + set int_l_tiles [filter [pblock_tiles roi] {TYPE == INT_L}] + set int_r_tiles [filter [pblock_tiles roi] {TYPE == INT_R}] + + for {set idx 0} {$idx < [llength $todo_lines]} {incr idx} { + set line [lindex $todo_lines $idx] + puts "" + puts "" + puts "== $idx: $line" + set tile_type [lindex $line 0] + set dst_wire [lindex $line 1] + set src_wire [lindex $line 2] + + set mylut [create_cell -reference LUT1 mylut_$idx] + set mynet [create_net mynet_$idx] + connect_net -net $mynet -objects "$mylut/I0 $mylut/O" + + set tries 0 + while {1} { + incr tries + + puts "" + puts "$mynet: try $tries" + if {$tile_type == "INT_L"} { + set tile [randsample_list 1 $int_l_tiles] + set int_l_tiles [lremove $int_l_tiles $tile] + set other_tile [randsample_list 1 $int_r_tiles] + set int_r_tiles [lremove $int_r_tiles $other_tile] + } elseif {$tile_type == "INT_R"} { + set tile [randsample_list 1 $int_r_tiles] + set int_r_tiles [lremove $int_r_tiles $tile] + set other_tile [randsample_list 1 $int_l_tiles] + set int_l_tiles [lremove $int_l_tiles $other_tile] + } else { + error "Bad tile type $tile_type" + } + puts "PIP Tile: $tile, LUT tile: $other_tile" + + set driver_site [get_sites -of_objects [get_site_pins -of_objects [get_nodes -downhill \ + -of_objects [get_nodes -of_objects [get_wires $other_tile/CLK*0]]]]] + puts "LUT site: $driver_site" + set_property -dict "LOC $driver_site BEL A6LUT" $mylut + + set route_list "$tile/$src_wire $tile/$dst_wire" + puts "route_via $mynet $route_list" + set rc [route_via $mynet $route_list 0] + if {$rc != 0} { + break + } + + puts "WARNING: failed to route net" + write_checkpoint -force route_todo_$idx.$tries.fail.dcp + + puts "Rolling back route" + set_property is_route_fixed 0 $mynet + set_property is_bel_fixed 0 $mylut + set_property is_loc_fixed 1 $mylut + route_design -unroute -nets $mynet + + # sometimes it gets stuck in specific orientations + if {$tries >= 3} { + puts "WARNING: failed to route net after $tries tries" + break + } + } + } +} + +proc run {} { + build_basic + route_todo + route_design + + write_checkpoint -force design.dcp + write_bitstream -force design.bit + write_pip_txtdata design.txt +} + +run diff --git a/fuzzers/059-pip-byp-bounce/top.v b/fuzzers/059-pip-byp-bounce/top.v new file mode 100644 index 00000000..c0e91c58 --- /dev/null +++ b/fuzzers/059-pip-byp-bounce/top.v @@ -0,0 +1,3 @@ +module top (input i, output o); + assign o = i; +endmodule diff --git a/fuzzers/Makefile b/fuzzers/Makefile index 4e66d86e..28493072 100644 --- a/fuzzers/Makefile +++ b/fuzzers/Makefile @@ -100,10 +100,11 @@ $(eval $(call fuzzer,052-pip-clkin,048-int-piplist)) $(eval $(call fuzzer,053-pip-ctrlin,048-int-piplist)) $(eval $(call fuzzer,054-pip-fan-alt,048-int-piplist)) $(eval $(call fuzzer,055-pip-gnd,048-int-piplist)) -$(eval $(call fuzzer,056-pip-rem,049-int-imux-gfan 050-pip-seed 051-pip-imuxlout-bypalts 052-pip-clkin 053-pip-ctrlin 054-pip-fan-alt 055-pip-gnd)) +$(eval $(call fuzzer,056-pip-rem,049-int-imux-gfan 050-pip-seed 051-pip-imuxlout-bypalts 052-pip-clkin 053-pip-ctrlin 054-pip-fan-alt 055-pip-gnd 059-pip-byp-bounce)) $(eval $(call fuzzer,057-pip-bi,056-pip-rem)) ifneq ($(QUICK),Y) $(eval $(call fuzzer,058-pip-hclk,005-tilegrid)) +$(eval $(call fuzzer,059-pip-byp-bounce,048-int-piplist)) $(eval $(call fuzzer,060-bram-cascades,005-tilegrid)) $(eval $(call fuzzer,071-ppips,057-pip-bi 058-pip-hclk 060-bram-cascades)) ifneq ($(BITONLY),Y)