#!/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 python3 ../../../icebox/icebox_vlog.py -P ${pf}.psb ${pf}.asc > ${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."