| #!/bin/bash |
| |
| set -x |
| test -d $1 |
| test -f scripts/$2.ys |
| |
| rm -rf $1/work_$2 |
| mkdir $1/work_$2 |
| cd $1/work_$2 |
| |
| touch .start |
| |
| # cases where 'syntax error' or other errors are expected |
| if echo "$1" | grep ".*_error"; then |
| |
| expected_string="" |
| #Change checked string for check other errors |
| if [ "$2" = "read_aiger_cant_interpret_first_char" ]; then |
| expected_string="ERROR: Line 80: cannot interpret first character" |
| elif [ "$2" = "read_aiger_unsup_aiger_file" ]; then |
| expected_string="ERROR: Unsupported AIGER file!" |
| elif [ "$2" = "read_aiger_invalid_aiger_header" ]; then |
| expected_string="ERROR: Invalid AIGER header" |
| elif [ "$2" = "read_aiger_cant_interpret_as_input" ]; then |
| expected_string="ERROR: Line 2 cannot be interpreted as an input!" |
| elif [ "$2" = "read_aiger_cant_interpret_as_and" ]; then |
| expected_string="ERROR: Line 6 cannot be interpreted as an AND!" |
| elif [ "$2" = "read_aiger_bad_state_property" ]; then |
| expected_string="ERROR: Line 4 cannot be interpreted as a bad state property!" |
| elif [ "$2" = "read_aiger_invalid_reset_literal" ]; then |
| expected_string="ERROR: Line 1 has invalid reset literal for latch!" |
| elif [ "$2" = "read_aiger_duplicate_definition" ]; then |
| expected_string="ERROR: Duplicate definition of module top!" |
| elif [ "$2" = "read_blif_syntax_error" ]; then |
| expected_string="ERROR: Syntax error in line" |
| elif [ "$2" = "read_blif_duplicate_defenition" ]; then |
| expected_string="ERROR: Duplicate definition of module " |
| elif [ "$2" = "read_ilang_parse_error" ]; then |
| expected_string="ERROR: Parser error in line " |
| elif [ "$2" = "read_json_nonstring_key" ]; then |
| expected_string="ERROR: Unexpected non-string key in JSON dict." |
| elif [ "$2" = "read_json_nonarray_bits_attr" ]; then |
| expected_string=" has non-array bits attribute." |
| elif [ "$2" = "read_json_unexpected_eof" ]; then |
| expected_string="ERROR: Unexpected EOF in JSON file." |
| elif [ "$2" = "read_json_invalid_direction" ]; then |
| expected_string="ERROR: JSON port node 'x' has invalid 'insdfasdfput' direction attribute." |
| elif [ "$2" = "read_json_no_bits" ]; then |
| expected_string=" has no bits attribute." |
| elif [ "$2" = "read_json_no_direction" ]; then |
| expected_string=" has no direction attribute." |
| elif [ "$2" = "read_json_unexpected_char" ]; then |
| expected_string="ERROR: Unexpected character in JSON file: " |
| elif [ "$2" = "verilog_defaults_missing_arg" ]; then |
| expected_string="ERROR: Command syntax error: Missing argument." |
| elif [ "$2" = "verilog_defaults_extra_arg" ]; then |
| expected_string="ERROR: Command syntax error: Extra argument." |
| elif [ "$2" = "verilog_defines_extra_arg" ]; then |
| expected_string="ERROR: Command syntax error: Extra argument." |
| elif [ "$2" = "read_liberty_invalid_bus_type" ]; then |
| expected_string="ERROR: Missing or invalid direction for bus B on cell bused_cell." |
| elif [ "$2" = "read_liberty_unsupp_type_for_bus" ]; then |
| expected_string="ERROR: Unknown or unsupported type for bus interface D on cell top." |
| elif [ "$2" = "read_liberty_bus_interface_only_in_lib_mode" ]; then |
| expected_string="ERROR: Error in cell top: bus interfaces are only supported in -lib mode." |
| elif [ "$2" = "read_liberty_latch_has_no_data_in" ]; then |
| expected_string="ERROR: Latch cell top has no data_in and/or enable attribute." |
| elif [ "$2" = "read_liberty_miss_func_on_output" ]; then |
| expected_string="ERROR: Missing function on output Y of cell top." |
| elif [ "$2" = "read_liberty_ff_has_no_next_stage_attr" ]; then |
| expected_string="ERROR: FF cell top has no next_state and/or clocked_on attribute." |
| elif [ "$2" = "read_liberty_parse_error_in_function" ]; then |
| expected_string="ERROR: Parser error in function expr " |
| elif [ "$2" = "read_liberty_cant_resolve_wire_name" ]; then |
| expected_string="ERROR: Can't resolve wire name s." |
| elif [ "$2" = "read_liberty_missing_direction" ]; then |
| expected_string="ERROR: Missing or invalid direction for pin A on cell top." |
| elif [ "$2" = "read_liberty_cant_open_input_file" ]; then |
| expected_string="ERROR: Can't open input file \`../libbbb.lib' for reading: No such file or directory" |
| elif [ "$2" = "read_liberty_redefenition_of_module" ]; then |
| expected_string="ERROR: Re-definition of cell/module top!" |
| fi |
| |
| |
| if yosys -ql yosys.log ../../scripts/$2.ys; then |
| echo FAIL > ${1}_${2}.status |
| else |
| if grep "$expected_string" yosys.log && [ "$expected_string" != "" ]; then |
| echo PASS > ${1}_${2}.status |
| else |
| echo FAIL > ${1}_${2}.status |
| fi |
| fi |
| else |
| |
| |
| yosys -ql yosys.log ../../scripts/$2.ys |
| if [ $? != 0 ] ; then |
| echo FAIL > ${1}_${2}.status |
| touch .stamp |
| exit 0 |
| fi |
| sed -i 's/reg =/dummy =/' ./synth.v |
| |
| if [ -f "../../../../../techlibs/common/simcells.v" ]; then |
| COMMON_PREFIX=../../../../../techlibs/common |
| else |
| COMMON_PREFIX=/usr/local/share/yosys |
| fi |
| |
| iverilog -o testbench ../testbench.v synth.v ../../common.v $COMMON_PREFIX/simcells.v $COMMON_PREFIX/simlib.v |
| if [ $? != 0 ] ; then |
| echo FAIL > ${1}_${2}.status |
| touch .stamp |
| exit 0 |
| fi |
| |
| if ! vvp -N testbench > testbench.log 2>&1; then |
| grep 'ERROR' testbench.log |
| echo FAIL > ${1}_${2}.status |
| elif grep 'ERROR' testbench.log || ! grep 'OKAY' testbench.log; then |
| echo FAIL > ${1}_${2}.status |
| else |
| echo PASS > ${1}_${2}.status |
| fi |
| |
| fi |
| |
| touch .stamp |