aboutsummaryrefslogtreecommitdiffstats
path: root/icefuzz/tests/test_pio.sh
diff options
context:
space:
mode:
Diffstat (limited to 'icefuzz/tests/test_pio.sh')
-rw-r--r--icefuzz/tests/test_pio.sh60
1 files changed, 60 insertions, 0 deletions
diff --git a/icefuzz/tests/test_pio.sh b/icefuzz/tests/test_pio.sh
new file mode 100644
index 0000000..4987259
--- /dev/null
+++ b/icefuzz/tests/test_pio.sh
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+set -e
+lattice_simlib="/opt/lscc/iCEcube2.2014.12/verilog/sb_ice_syn.v"
+
+mkdir -p test_pio.work
+cd test_pio.work
+
+for NEGTRIG in 0 1; do
+for INTYPE in 00 01 10 11; do
+for OUTTYPE in 0000 0110 1010 1110 0101 1001 1101 \
+ 0100 1000 1100 0111 1011 1111; do
+ pf="test_pio_${OUTTYPE}${INTYPE}${NEGTRIG}"
+ echo "Testing ${pf}..."
+ if ! test -f ${pf}.bin; then
+ cat > ${pf}.v <<- EOT
+ module top (
+ inout pin,
+ input latch_in,
+ input clk_en,
+ input clk_in,
+ input clk_out,
+ input oen,
+ input dout_0,
+ input dout_1,
+ output din_0,
+ output din_1,
+ output global
+ );
+ SB_GB_IO #(
+ .PIN_TYPE(6'b${OUTTYPE}${INTYPE}),
+ .PULLUP(1'b0),
+ .NEG_TRIGGER(1'b${NEGTRIG}),
+ .IO_STANDARD("SB_LVCMOS")
+ ) pin_gb_io (
+ .PACKAGE_PIN(pin),
+ .GLOBAL_BUFFER_OUTPUT(global),
+ .LATCH_INPUT_VALUE(latch_in),
+ .CLOCK_ENABLE(clk_en),
+ .INPUT_CLK(clk_in),
+ .OUTPUT_CLK(clk_out),
+ .OUTPUT_ENABLE(oen),
+ .D_OUT_0(dout_0),
+ .D_OUT_1(dout_1),
+ .D_IN_0(din_0),
+ .D_IN_1(din_1)
+ );
+ endmodule
+ EOT
+ bash ../../icecube.sh ${pf}.v > ${pf}.log 2>&1
+ fi
+ python ../../../icebox/icebox_vlog.py -P ${pf}.psb ${pf}.txt > ${pf}_out.v
+ iverilog -D"VCDFILE=\"${pf}_tb.vcd\"" -DINTYPE=${INTYPE} -o ${pf}_tb \
+ -s testbench ../test_pio_tb.v ${pf}.v ${pf}_out.v $lattice_simlib 2> /dev/null
+ ./${pf}_tb > ${pf}_tb.txt
+ if grep ERROR ${pf}_tb.txt; then exit 1; fi
+done; done; done
+
+echo "All tests passed."
+