| add_file_target(FILE simpleuart.v SCANNER_TYPE verilog) | 
 | add_file_target(FILE scalable_proc.v SCANNER_TYPE verilog) | 
 | add_file_target(FILE processing_unit.v SCANNER_TYPE verilog) | 
 | add_file_target(FILE basys3.pcf) | 
 | add_file_target(FILE basys3.xdc) | 
 |  | 
 | get_target_property_required(PYTHON3 env PYTHON3) | 
 |  | 
 | # Generate ROM veilog modules with different styles of implementation | 
 | set(ROM_FILE_BRAM rom_bram.v) | 
 | set(ROM_FILE_BRAM36 rom_bram36.v) | 
 | set(ROM_FILE_DRAM rom_dram.v) | 
 |  | 
 | add_file_target(FILE ${ROM_FILE_BRAM} GENERATED) | 
 | add_file_target(FILE ${ROM_FILE_BRAM36} GENERATED) | 
 | add_file_target(FILE ${ROM_FILE_DRAM} GENERATED) | 
 |  | 
 | add_custom_command( | 
 |     OUTPUT ${ROM_FILE_BRAM} | 
 |     COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/utils/rom_generator.py --rom-style bram >${ROM_FILE_BRAM} | 
 |     DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/utils/rom_generator.py ${PYTHON3} | 
 | ) | 
 |  | 
 | add_custom_command( | 
 |     OUTPUT ${ROM_FILE_BRAM36} | 
 |     COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/utils/rom_generator.py --rom-style bram36 >${ROM_FILE_BRAM36} | 
 |     DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/utils/rom_generator.py ${PYTHON3} | 
 | ) | 
 |  | 
 | add_custom_command( | 
 |     OUTPUT ${ROM_FILE_DRAM} | 
 |     COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/utils/rom_generator.py --rom-style dram64 >${ROM_FILE_DRAM} | 
 |     DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/utils/rom_generator.py ${PYTHON3} | 
 | ) | 
 |  | 
 | if (NOT LIGHT_BUILD) | 
 |  | 
 | function(SCALABLE_PROC) | 
 |   set(options) | 
 |   set( | 
 |   oneValueArgs | 
 |     TOP_FILE | 
 |     BOARD | 
 |     INPUT_IO_FILE | 
 |     INPUT_XDC_FILES | 
 |     ROM_STYLE | 
 |     MAX_PROC | 
 |  | 
 |   ) | 
 |   set(multiValueArgs) | 
 |   cmake_parse_arguments( | 
 |       SCALABLE_PROC | 
 |     "${options}" | 
 |     "${oneValueArgs}" | 
 |     "${multiValueArgs}" | 
 |     ${ARGN} | 
 |   ) | 
 |  | 
 |   set(ROM_STYLE ${SCALABLE_PROC_ROM_STYLE}) | 
 |   set(ROM_FILE rom_${ROM_STYLE}.v) | 
 |  | 
 |   foreach(NUM_PROCESSING_UNITS RANGE 1 ${SCALABLE_PROC_MAX_PROC}) | 
 |     set(VERILOG_TOP basys3_top_${ROM_STYLE}_n${NUM_PROCESSING_UNITS}.v) | 
 |     set(TOP_NAME top_${ROM_STYLE}_n${NUM_PROCESSING_UNITS}) | 
 |  | 
 |     add_custom_command( | 
 |       OUTPUT ${VERILOG_TOP} | 
 |       COMMAND ${PYTHON3} | 
 |         ${CMAKE_CURRENT_SOURCE_DIR}/parametrize.py | 
 |           --num-processing-units ${NUM_PROCESSING_UNITS} | 
 |           --template ${CMAKE_CURRENT_SOURCE_DIR}/${SCALABLE_PROC_TOP_FILE} > ${VERILOG_TOP} | 
 |       DEPENDS | 
 |         ${CMAKE_CURRENT_SOURCE_DIR}/parametrize.py | 
 |         ${CMAKE_CURRENT_SOURCE_DIR}/${SCALABLE_PROC_TOP_FILE} | 
 |         ${PYTHON3} | 
 |       ) | 
 |  | 
 |    add_file_target( | 
 |     FILE ${VERILOG_TOP} | 
 |     GENERATED | 
 |     ) | 
 |  | 
 |    add_fpga_target( | 
 |      NAME ${TOP_NAME} | 
 |      BOARD ${SCALABLE_PROC_BOARD} | 
 |      INPUT_IO_FILE ${SCALABLE_PROC_INPUT_IO_FILE} | 
 |      INPUT_XDC_FILES ${SCALABLE_PROC_INPUT_XDC_FILES} | 
 |      SOURCES | 
 |        ${ROM_FILE} processing_unit.v simpleuart.v scalable_proc.v | 
 |        ${VERILOG_TOP} | 
 |      EXPLICIT_ADD_FILE_TARGET | 
 |      ) | 
 |   endforeach() | 
 | endfunction() | 
 |  | 
 | # Generate targets for the design | 
 | scalable_proc( | 
 |   TOP_FILE basys3_top.v | 
 |   BOARD basys3 | 
 |   INPUT_IO_FILE basys3.pcf | 
 |   INPUT_XDC_FILES basys3.xdc | 
 |   ROM_STYLE bram | 
 |   MAX_PROC 8 | 
 | ) | 
 |  | 
 | scalable_proc( | 
 |   TOP_FILE basys3_top.v | 
 |   BOARD basys3 | 
 |   INPUT_IO_FILE basys3.pcf | 
 |   INPUT_XDC_FILES basys3.xdc | 
 |   ROM_STYLE bram36 | 
 |   MAX_PROC 8 | 
 | ) | 
 |  | 
 | scalable_proc( | 
 |   TOP_FILE basys3_top.v | 
 |   BOARD basys3 | 
 |   INPUT_IO_FILE basys3.pcf | 
 |   INPUT_XDC_FILES basys3.xdc | 
 |   ROM_STYLE dram | 
 |   MAX_PROC 3 | 
 | ) | 
 |  | 
 | add_vivado_target( | 
 |     NAME top_bram_n3_vivado | 
 |     PARENT_NAME top_bram_n3 | 
 |     CLOCK_PINS clk | 
 |     CLOCK_PERIODS 10.0 | 
 |     ) | 
 |  | 
 | add_vivado_target( | 
 |     NAME top_bram36_n3_vivado | 
 |     PARENT_NAME top_bram36_n3 | 
 |     CLOCK_PINS clk | 
 |     CLOCK_PERIODS 10.0 | 
 |     ) | 
 |  | 
 | add_vivado_target( | 
 |     NAME top_dram_n3_vivado | 
 |     PARENT_NAME top_dram_n3 | 
 |     CLOCK_PINS clk | 
 |     CLOCK_PERIODS 10.0 | 
 |     ) | 
 |  | 
 | endif (NOT LIGHT_BUILD) |