|  | 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) | 
|  |  |