| #!/bin/bash |
| |
| set -ex |
| |
| rm -rf test_cells |
| mkdir test_cells |
| cd test_cells |
| |
| ../../../yosys -p 'test_cell -muxdiv -w test all /$alu /$macc /$fa /$lcu /$lut /$shift /$shiftx' |
| |
| cat > miter.tpl <<- EOT |
| ; #model# (set-option :produce-models true) |
| (set-logic QF_UFBV) |
| %% |
| (declare-fun s () miter_s) |
| (assert (|miter_n trigger| s)) |
| (check-sat) |
| ; #model# (get-value ((|miter_n in_A| s) (|miter_n in_B| s) (|miter_n gold_Y| s) (|miter_n gate_Y| s) (|miter_n trigger| s))) |
| EOT |
| |
| for x in $(set +x; ls test_*.il | sort -R); do |
| x=${x%.il} |
| cat > $x.ys <<- EOT |
| read_ilang $x.il |
| copy gold gate |
| |
| cd gate |
| techmap; opt; abc;; |
| cd .. |
| |
| miter -equiv -flatten -make_outputs gold gate miter |
| hierarchy -check -top miter |
| |
| dump |
| write_smt2 -bv -tpl miter.tpl $x.smt2 |
| EOT |
| ../../../yosys -q $x.ys |
| if ! cvc4 $x.smt2 > $x.result; then |
| cat $x.result |
| exit 1 |
| fi |
| if ! grep unsat $x.result; then |
| echo "Proof failed! Extracting model..." |
| sed -i 's/^; #model# //' $x.smt2 |
| cvc4 $x.smt2 |
| exit 1 |
| fi |
| done |
| |
| set +x |
| echo "" |
| echo " All tests passed." |
| echo "" |
| exit 0 |
| |