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