blob: 26626b779832da771cf2c573fc0990ed0b16a2ed [file] [log] [blame]
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)