|  | if (NOT LIGHT_BUILD) | 
|  |  | 
|  | add_file_target(FILE spiflash.v SCANNER_TYPE verilog) | 
|  |  | 
|  | add_file_target(FILE picosoc.v SCANNER_TYPE verilog) | 
|  | add_file_target(FILE picorv32.v SCANNER_TYPE verilog) | 
|  | add_file_target(FILE simpleuart.v SCANNER_TYPE verilog) | 
|  | add_file_target(FILE spimemio.v SCANNER_TYPE verilog) | 
|  |  | 
|  | add_file_target(FILE picosoc_noflash.v SCANNER_TYPE verilog) | 
|  |  | 
|  | get_target_property_required(PYTHON3 env PYTHON3) | 
|  | get_target_property(PYTHON3_TARGET env PYTHON3_TARGET) | 
|  |  | 
|  | set(HEX_FILES | 
|  | firmware.hex | 
|  | firmware_noflash_100.hex | 
|  | firmware_noflash_50.hex | 
|  | firmware_noflash_25.hex | 
|  | ) | 
|  |  | 
|  | foreach(HEX_FILE ${HEX_FILES}) | 
|  | get_filename_component(HEX_TITLE ${HEX_FILE} NAME_WE) | 
|  |  | 
|  | add_custom_command( | 
|  | OUTPUT ${HEX_TITLE}.v | 
|  | COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/hex2progmem.py ${CMAKE_CURRENT_SOURCE_DIR}/${HEX_FILE} --rom-style initial >${HEX_TITLE}.v | 
|  | DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hex2progmem.py ${PYTHON3} | 
|  | ) | 
|  | add_file_target(FILE ${HEX_TITLE}.v GENERATED) | 
|  |  | 
|  | endforeach() | 
|  |  | 
|  | # ============================================================================ | 
|  | # HX8K-B-EVN | 
|  |  | 
|  | add_file_target(FILE hx8kdemo.v SCANNER_TYPE verilog) | 
|  | add_file_target(FILE hx8kdemo_tb.v SCANNER_TYPE verilog) | 
|  | add_file_target(FILE hx8k-b-evn.pcf) | 
|  |  | 
|  | add_fpga_target( | 
|  | NAME picosoc | 
|  | BOARD hx8k-b-evn | 
|  | TOP hx8kdemo | 
|  | SOURCES | 
|  | hx8kdemo.v | 
|  | picosoc.v | 
|  | picorv32.v | 
|  | simpleuart.v | 
|  | spimemio.v | 
|  | TESTBENCH_SOURCES hx8kdemo_tb.v | 
|  | INPUT_IO_FILE hx8k-b-evn.pcf | 
|  | EXPLICIT_ADD_FILE_TARGET | 
|  | ) | 
|  |  | 
|  | # ============================================================================ | 
|  | # Basys3 (with ROI) | 
|  |  | 
|  | add_file_target(FILE basys3_demo.v SCANNER_TYPE verilog) | 
|  | add_file_target(FILE basys3_demo_tb.v SCANNER_TYPE verilog) | 
|  |  | 
|  | add_fpga_target( | 
|  | NAME picosoc_basys3 | 
|  | BOARD basys3 | 
|  | TOP basys3_demo | 
|  | SOURCES | 
|  | basys3_demo.v | 
|  | picosoc_noflash.v | 
|  | picorv32.v | 
|  | simpleuart.v | 
|  | firmware_noflash_100.v | 
|  | INPUT_IO_FILE ${f4pga-arch-defs_SOURCE_DIR}/xilinx/xc7/tests/common/basys3.pcf | 
|  | TESTBENCH_SOURCES basys3_demo_tb.v | 
|  | EXPLICIT_ADD_FILE_TARGET | 
|  | ) | 
|  |  | 
|  | add_vivado_target( | 
|  | NAME picosoc_basys3_vivado | 
|  | PARENT_NAME picosoc_basys3 | 
|  | CLOCK_PINS clk | 
|  | CLOCK_PERIODS 10.0 | 
|  | ) | 
|  |  | 
|  | add_vivado_pnr_target( | 
|  | NAME picosoc_basys3_vivado_pnr | 
|  | PARENT_NAME picosoc_basys3 | 
|  | CLOCK_PINS clk | 
|  | CLOCK_PERIODS 10.0 | 
|  | IOSTANDARD LVCMOS33 | 
|  | ) | 
|  |  | 
|  | # ============================================================================ | 
|  | # Basys3 (full A50T, no ROI) | 
|  |  | 
|  | set(BASYS3_PCF ${f4pga-arch-defs_SOURCE_DIR}/xilinx/xc7/tests/common/basys3.pcf) | 
|  |  | 
|  | get_file_target(TARGET_BASYS3_PCF ${BASYS3_PCF}) | 
|  |  | 
|  | set(BASYS3_FREQS 50 100) | 
|  |  | 
|  | add_file_target(FILE basys3.xdc) | 
|  |  | 
|  | foreach(FREQ ${BASYS3_FREQS}) | 
|  |  | 
|  | add_file_target(FILE basys3-full_demo_${FREQ}.v SCANNER_TYPE verilog) | 
|  |  | 
|  | get_file_target(TARGET_BASYS3_DEMO_V basys3-full_demo_${FREQ}.v) | 
|  | add_dependencies(${TARGET_BASYS3_DEMO_V} ${TARGET_BASYS3_PCF}) | 
|  |  | 
|  | add_fpga_target( | 
|  | NAME picosoc_basys3_full_${FREQ} | 
|  | BOARD basys3-full | 
|  | TOP basys3_demo | 
|  | SOURCES | 
|  | basys3-full_demo_${FREQ}.v | 
|  | picosoc_noflash.v | 
|  | picorv32.v | 
|  | simpleuart.v | 
|  | firmware_noflash_${FREQ}.v | 
|  | INPUT_XDC_FILES basys3.xdc | 
|  | INPUT_IO_FILE ${BASYS3_PCF} | 
|  | EXPLICIT_ADD_FILE_TARGET | 
|  | INSTALL_CIRCUIT | 
|  | ) | 
|  |  | 
|  | math(EXPR PERIOD "1000 / ${FREQ}" OUTPUT_FORMAT DECIMAL) | 
|  |  | 
|  | add_vivado_target( | 
|  | NAME picosoc_basys3_full_${FREQ}_vivado | 
|  | PARENT_NAME picosoc_basys3_full_${FREQ} | 
|  | CLOCK_PINS clk | 
|  | CLOCK_PERIODS ${PERIOD} | 
|  | ) | 
|  |  | 
|  | endforeach() | 
|  |  | 
|  | # ============================================================================ | 
|  | # Nexys Video | 
|  |  | 
|  | set(NEXYS_VIDEO_PCF ${f4pga-arch-defs_SOURCE_DIR}/xilinx/xc7//tests/common/nexys_video.pcf) | 
|  | set(NEXYS_VIDEO_XDC ${f4pga-arch-defs_SOURCE_DIR}/xilinx/xc7//tests/common/nexys_video.xdc) | 
|  |  | 
|  | get_file_target(TARGET_NEXYS_VIDEO_PCF ${NEXYS_VIDEO_PCF}) | 
|  | get_file_target(TARGET_NEXYS_VIDEO_XDC ${NEXYS_VIDEO_XDC}) | 
|  |  | 
|  | set(NEXYS_VIDEO_FREQS 50 100) | 
|  |  | 
|  | foreach(FREQ ${NEXYS_VIDEO_FREQS}) | 
|  |  | 
|  | add_file_target(FILE nexys_video_demo_${FREQ}.v SCANNER_TYPE verilog) | 
|  |  | 
|  | get_file_target(TARGET_NEXYS_VIDEO_DEMO_V nexys_video_demo_${FREQ}.v) | 
|  | add_dependencies(${TARGET_NEXYS_VIDEO_DEMO_V} ${TARGET_NEXYS_VIDEO_XDC} ${TARGET_NEXYS_VIDEO_PCF}) | 
|  |  | 
|  | math(EXPR PERIOD "1000 / ${FREQ}" OUTPUT_FORMAT DECIMAL) | 
|  |  | 
|  | add_fpga_target( | 
|  | NAME picosoc_nexys_video_${FREQ} | 
|  | BOARD nexys_video | 
|  | TOP nexys_video_demo | 
|  | SOURCES | 
|  | nexys_video_demo_${FREQ}.v | 
|  | picosoc_noflash.v | 
|  | picorv32.v | 
|  | simpleuart.v | 
|  | firmware_noflash_${FREQ}.v | 
|  | INPUT_IO_FILE  ${NEXYS_VIDEO_PCF} | 
|  | INPUT_XDC_FILES ${NEXYS_VIDEO_XDC} | 
|  | EXPLICIT_ADD_FILE_TARGET | 
|  | ) | 
|  |  | 
|  | add_vivado_target( | 
|  | NAME picosoc_nexys_video_${FREQ}_vivado | 
|  | PARENT_NAME picosoc_nexys_video_${FREQ} | 
|  | CLOCK_PINS clk | 
|  | CLOCK_PERIODS ${PERIOD} | 
|  | ) | 
|  |  | 
|  | # Nexys Video with a limited grid | 
|  |  | 
|  | add_fpga_target( | 
|  | NAME picosoc_nexys_video_mid_${FREQ} | 
|  | BOARD nexys_video-mid | 
|  | TOP nexys_video_demo | 
|  | SOURCES | 
|  | nexys_video_demo_${FREQ}.v | 
|  | picosoc_noflash.v | 
|  | picorv32.v | 
|  | simpleuart.v | 
|  | firmware_noflash_${FREQ}.v | 
|  | INPUT_IO_FILE  ${NEXYS_VIDEO_PCF} | 
|  | INPUT_XDC_FILES ${NEXYS_VIDEO_XDC} | 
|  | EXPLICIT_ADD_FILE_TARGET | 
|  | ) | 
|  |  | 
|  | add_vivado_target( | 
|  | NAME picosoc_nexys_video_mid_${FREQ}_vivado | 
|  | PARENT_NAME picosoc_nexys_video_mid_${FREQ} | 
|  | CLOCK_PINS clk | 
|  | CLOCK_PERIODS ${PERIOD} | 
|  | ) | 
|  |  | 
|  | endforeach() | 
|  |  | 
|  | # ============================================================================ | 
|  |  | 
|  | endif (NOT LIGHT_BUILD) |