aboutsummaryrefslogtreecommitdiffstats
path: root/icefuzz
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2017-11-02 11:48:29 +0000
committerDavid Shah <davey1576@gmail.com>2017-11-02 11:48:29 +0000
commit7e58f47639e12b0d1ab715ca641fdcbb84e9a486 (patch)
tree00de76ccc67e3d0be2e48e6fc5f68b159d372423 /icefuzz
parente75e9171ac7e2a62b83c1dee34ad0f2ef6b6c82a (diff)
downloadicestorm-7e58f47639e12b0d1ab715ca641fdcbb84e9a486.tar.gz
icestorm-7e58f47639e12b0d1ab715ca641fdcbb84e9a486.tar.bz2
icestorm-7e58f47639e12b0d1ab715ca641fdcbb84e9a486.zip
Add 5k colbuf fuzzing scripts
Diffstat (limited to 'icefuzz')
-rwxr-xr-xicefuzz/tests/colbuf_5k.sh51
-rwxr-xr-xicefuzz/tests/colbuf_io_5k.sh37
-rwxr-xr-xicefuzz/tests/colbuf_logic_5k.sh28
-rwxr-xr-xicefuzz/tests/colbuf_ram_5k.sh56
4 files changed, 172 insertions, 0 deletions
diff --git a/icefuzz/tests/colbuf_5k.sh b/icefuzz/tests/colbuf_5k.sh
new file mode 100755
index 0000000..5eb91e4
--- /dev/null
+++ b/icefuzz/tests/colbuf_5k.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+for f in colbuf_io_5k.work/*.exp colbuf_logic_5k.work/*.exp colbuf_ram_5k.work/*.exp; do
+ echo $f >&2
+ python3 colbuf.py $f
+done | sort -u > colbuf_5k.txt
+
+get_colbuf_data()
+{
+ tr -d '(,)' < colbuf_5k.txt
+ # for x in {0..2} {4..9} {11..13}; do
+ # echo $x 4 $x 0
+ # echo $x 5 $x 8
+ # echo $x 12 $x 9
+ # echo $x 13 $x 17
+ # done
+ # for x in 3 10; do
+ # echo $x 3 $x 0
+ # echo $x 3 $x 4
+ # echo $x 5 $x 8
+ # echo $x 11 $x 9
+ # echo $x 11 $x 12
+ # echo $x 13 $x 17
+ # done
+}
+
+{
+ echo "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1050\" width=\"1050\">"
+ for x in {1..33}; do
+ echo "<line x1=\"$((10+x*30))\" y1=\"10\" x2=\"$((10+x*30))\" y2=\"$((10+34*30))\" style=\"stroke:rgb(0,0,0);stroke-width:3\" />"
+ done
+ for y in {1..33}; do
+ echo "<line x1=\"10\" y1=\"$((10+y*30))\" x2=\"$((10+34*30))\" y2=\"$((10+y*30))\" style=\"stroke:rgb(0,0,0);stroke-width:3\" />"
+ done
+ for x in {0..33}; do
+ echo "<text x=\"$((10+$x*30+7))\" y=\"$((10+34*30+15))\" fill=\"black\">$x</text>"
+ done
+ for y in {0..33}; do
+ echo "<text x=\"$((10+34*30+5))\" y=\"$((10+(33-y)*30+20))\" fill=\"black\">$y</text>"
+ done
+ while read x1 y1 x2 y2; do
+ echo "<line x1=\"$((10+x1*30+15))\" y1=\"$((10+(33-y1)*30+15))\" x2=\"$((10+x2*30+15))\" y2=\"$((10+(33-y2)*30+15))\" style=\"stroke:rgb(255,0,0);stroke-width:5\" />"
+ done < <( get_colbuf_data; )
+ while read x1 y1 x2 y2; do
+ echo "<circle cx=\"$((10+x2*30+15))\" cy=\"$((10+(33-y2)*30+15))\" r=\"4\" fill=\"blue\" />"
+ done < <( get_colbuf_data; )
+ while read x1 y1 x2 y2; do
+ echo "<circle cx=\"$((10+x1*30+15))\" cy=\"$((10+(33-y1)*30+15))\" r=\"5\" fill=\"gray\" />"
+ done < <( get_colbuf_data; )
+ echo "</svg>"
+} > colbuf_8k.svg
diff --git a/icefuzz/tests/colbuf_io_5k.sh b/icefuzz/tests/colbuf_io_5k.sh
new file mode 100755
index 0000000..b52826d
--- /dev/null
+++ b/icefuzz/tests/colbuf_io_5k.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+set -ex
+
+mkdir -p colbuf_io_5k.work
+cd colbuf_io_5k.work
+
+glb_pins="20 35 37 44"
+
+pins="
+2 3 4 6 9 10 11 12
+ 13 18 19 20 21
+ 25 26 27 28 31 32 34 35 36
+ 37 38 42 43 44 45 46 47 48
+"
+pins="$( echo $pins )"
+
+for pin in $pins; do
+ pf="colbuf_io_5k_$pin"
+ gpin=$( echo $glb_pins | tr ' ' '\n' | grep -v $pin | sort -R | head -n1; )
+ cat > ${pf}.v <<- EOT
+ module top (input clk, data, output pin);
+ SB_IO #(
+ .PIN_TYPE(6'b 0101_00)
+ ) pin_obuf (
+ .PACKAGE_PIN(pin),
+ .OUTPUT_CLK(clk),
+ .D_OUT_0(data)
+ );
+ endmodule
+ EOT
+ echo "set_io pin $pin" > ${pf}.pcf
+ echo "set_io clk $gpin" >> ${pf}.pcf
+ ICEDEV=up5k-sg48 bash ../../icecube.sh ${pf}.v > ${pf}.log 2>&1
+ ../../../icebox/icebox_explain.py ${pf}.asc > ${pf}.exp
+ rm -rf ${pf}.tmp
+done
diff --git a/icefuzz/tests/colbuf_logic_5k.sh b/icefuzz/tests/colbuf_logic_5k.sh
new file mode 100755
index 0000000..9271cae
--- /dev/null
+++ b/icefuzz/tests/colbuf_logic_5k.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+set -ex
+
+mkdir -p colbuf_logic_5k.work
+cd colbuf_logic_5k.work
+
+glb_pins="20 35 37 44"
+
+for x in {1..5} {7..18} {20..24}; do
+for y in {1..30}; do
+ pf="colbuf_logic_5k_${x}_${y}"
+ gpin=$( echo $glb_pins | tr ' ' '\n' | sort -R | head -n1; )
+ cat > ${pf}.v <<- EOT
+ module top (input c, d, output q);
+ SB_DFF dff (
+ .C(c),
+ .D(d),
+ .Q(q)
+ );
+ endmodule
+ EOT
+ echo "set_location dff $x $y 0" > ${pf}.pcf
+ echo "set_io c $gpin" >> ${pf}.pcf
+ ICEDEV=up5k-sg48 bash ../../icecube.sh ${pf}.v > ${pf}.log 2>&1
+ ../../../icebox/icebox_explain.py ${pf}.asc > ${pf}.exp
+ rm -rf ${pf}.tmp
+done; done
diff --git a/icefuzz/tests/colbuf_ram_5k.sh b/icefuzz/tests/colbuf_ram_5k.sh
new file mode 100755
index 0000000..1069433
--- /dev/null
+++ b/icefuzz/tests/colbuf_ram_5k.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+set -ex
+
+mkdir -p colbuf_ram_5k.work
+cd colbuf_ram_5k.work
+
+glb_pins="20 35 37 44"
+
+for x in 6 19; do
+for y in {1..30}; do
+ pf="colbuf_ram_5k_${x}_${y}"
+ gpin=$( echo $glb_pins | tr ' ' '\n' | sort -R | head -n1; )
+ if [ $((y % 2)) == 1 ]; then
+ clkport="WCLK"
+ other_clkport="RCLK"
+ else
+ clkport="RCLK"
+ other_clkport="WCLK"
+ fi
+ cat > ${pf}.v <<- EOT
+ module top (input c, oc, input [1:0] d, output [1:0] q);
+ wire gc;
+ SB_GB_IO #(
+ .PIN_TYPE(6'b 0000_00),
+ .PULLUP(1'b0),
+ .NEG_TRIGGER(1'b0),
+ .IO_STANDARD("SB_LVCMOS")
+ ) gbuf (
+ .PACKAGE_PIN(c),
+ .GLOBAL_BUFFER_OUTPUT(gc)
+ );
+ SB_RAM40_4K #(
+ .READ_MODE(3),
+ .WRITE_MODE(3)
+ ) ram40 (
+ .WADDR(11'b0),
+ .RADDR(11'b0),
+ .$clkport(gc),
+ .$other_clkport(oc),
+ .RDATA(q),
+ .WDATA(d),
+ .WE(1'b1),
+ .WCLKE(1'b1),
+ .RE(1'b1),
+ .RCLKE(1'b1)
+ );
+ endmodule
+ EOT
+ echo "set_location ram40 $x $((y - (1 - y%2))) 0" > ${pf}.pcf
+ echo "set_io oc 1" >> ${pf}.pcf
+ echo "set_io c $gpin" >> ${pf}.pcf
+ ICEDEV=up5k-sg48 bash ../../icecube.sh ${pf}.v > ${pf}.log 2>&1
+ ../../../icebox/icebox_explain.py ${pf}.asc > ${pf}.exp
+ rm -rf ${pf}.tmp
+done; done