| set(FULL_BOARDS dummy_ice40_hx1k_tq144 qlf_k4n8-qlf_k4n8_umc22_slow_board) | |
| if (NOT LIGHT_BUILD) | |
| list(APPEND FULL_BOARDS dummy_artix7_xc7a50t-basys3_test) | |
| endif() | |
| set(SMALL_BOARDS dummy_testarch_4x4_dummy dummy_testarch_10x10_dummy) | |
| set(BOARDS ${FULL_BOARDS} ${SMALL_BOARDS}) | |
| foreach(BOARD ${BOARDS}) | |
| add_custom_target(all_${BOARD}) | |
| endforeach() | |
| function(add_simple_test) | |
| # ~~~ | |
| # ADD_SIMPLE_TEST( | |
| # NAME <name of test> | |
| # SOURCES <list of sources for test> | |
| # BOARDS <list of boards to test against> | |
| # [ROUTE_ONLY] | |
| # [EQUIV_CHECK_SCRIPT <filename of yosys script to prove gold and gate>] | |
| # [EXPLICIT_ADD_FILE_TARGET] | |
| # [DEFINES <list of defines>] | |
| # ) | |
| # ~~~ | |
| # | |
| # ADD_SIMPLE_TEST creates test targets that check routing and equivilence | |
| # between original source, post-synthesis and post-place and route modules. | |
| set(options ROUTE_ONLY EXPLICIT_ADD_FILE_TARGET NO_SYNTHESIS) | |
| set(oneValueArgs NAME EQUIV_CHECK_SCRIPT) | |
| set(multiValueArgs SOURCES BOARDS DEFINES) | |
| cmake_parse_arguments( | |
| ADD_SIMPLE_TEST | |
| "${options}" | |
| "${oneValueArgs}" | |
| "${multiValueArgs}" | |
| ${ARGN} | |
| ) | |
| if(NOT ${ADD_SIMPLE_TEST_EXPLICIT_ADD_FILE_TARGET}) | |
| foreach(SRC ${ADD_SIMPLE_TEST_SOURCES}) | |
| add_file_target( | |
| FILE ${SRC} | |
| SCANNER_TYPE verilog | |
| ) | |
| endforeach() | |
| endif() | |
| set(EQUIV_CHECK_SCRIPT ${ADD_SIMPLE_TEST_EQUIV_CHECK_SCRIPT}) | |
| if("${EQUIV_CHECK_SCRIPT}" STREQUAL "") | |
| set(EQUIV_CHECK_SCRIPT | |
| ${f4pga-arch-defs_SOURCE_DIR}/common/yosys/miter_and_tempinduct.ys) | |
| endif() | |
| foreach(BOARD ${ADD_SIMPLE_TEST_BOARDS}) | |
| get_target_property_required(DEVICE ${BOARD} DEVICE) | |
| get_target_property_required(ARCH ${DEVICE} ARCH) | |
| get_target_property_required(NO_PINS ${ARCH} NO_PINS) | |
| get_target_property_required(NO_TEST_PINS ${ARCH} NO_TEST_PINS) | |
| get_target_property_required(NO_BITSTREAM ${ARCH} NO_BITSTREAM) | |
| set_target_properties(${BOARD} PROPERTIES PART "dummy") | |
| set(INPUT_IO_FILE_ARG "") | |
| if(NOT ${NO_PINS} AND NOT ${NO_TEST_PINS}) | |
| generate_pinmap( | |
| NAME ${ADD_SIMPLE_TEST_NAME}_${BOARD}.pcf | |
| TOP top | |
| BOARD ${BOARD} | |
| SOURCES ${ADD_SIMPLE_TEST_SOURCES} | |
| ) | |
| set(INPUT_IO_FILE_ARG INPUT_IO_FILE ${ADD_SIMPLE_TEST_NAME}_${BOARD}.pcf) | |
| endif() | |
| set(NO_SYNTHESIS_ARG "") | |
| if(${ADD_SIMPLE_TEST_NO_SYNTHESIS}) | |
| set(NO_SYNTHESIS_ARG NO_SYNTHESIS) | |
| endif() | |
| set(CHECK_TEST_ARGS "") | |
| if(NOT ${ADD_SIMPLE_TEST_ROUTE_ONLY} AND NOT ${NO_BITSTREAM}) | |
| set(CHECK_TEST_ARGS EMIT_CHECK_TESTS EQUIV_CHECK_SCRIPT ${EQUIV_CHECK_SCRIPT}) | |
| else() | |
| set(CHECK_TEST_ARGS "ROUTE_ONLY") | |
| endif() | |
| add_fpga_target( | |
| NAME ${ADD_SIMPLE_TEST_NAME}_${BOARD} | |
| BOARD ${BOARD} | |
| ${INPUT_IO_FILE_ARG} | |
| SOURCES ${ADD_SIMPLE_TEST_SOURCES} | |
| EXPLICIT_ADD_FILE_TARGET | |
| ${CHECK_TEST_ARGS} | |
| ${NO_SYNTHESIS_ARG} | |
| DEFINES ${ADD_SIMPLE_TEST_DEFINES} | |
| ) | |
| add_dependencies(all_route_tests ${ADD_SIMPLE_TEST_NAME}_${BOARD}_route) | |
| add_dependencies(all_${BOARD} ${ADD_SIMPLE_TEST_NAME}_${BOARD}_route) | |
| endforeach() | |
| endfunction() | |
| add_subdirectory(0-const) | |
| add_subdirectory(1-wire) | |
| add_subdirectory(2-mwire) | |
| add_subdirectory(3-ff) | |
| add_subdirectory(3-lut4) | |
| add_subdirectory(3-lut5x2) | |
| add_subdirectory(3-lut6) | |
| add_subdirectory(3-lut7) | |
| add_subdirectory(3-lut8) | |
| add_subdirectory(4-lutff) | |
| add_subdirectory(4-mlut) | |
| add_subdirectory(5-lut_cascade_1) | |
| add_subdirectory(6-big_xor) | |
| add_subdirectory(6-counter) | |
| add_subdirectory(6-led) | |
| add_subdirectory(6-rot) | |
| add_subdirectory(7-carry_stress) | |
| add_subdirectory(9-soc) | |
| add_subdirectory(9-scalable_proc) | |