| function(ADD_QUICKLOGIC_BOARD) |
| |
| set(options) |
| set(oneValueArgs BOARD DEVICE PACKAGE FABRIC_PACKAGE PINMAP_XML PINMAP BIT_TO_V_EXTRA_ARGS) |
| set(multiValueArgs) |
| cmake_parse_arguments( |
| ADD_QUICKLOGIC_BOARD |
| "${options}" |
| "${oneValueArgs}" |
| "${multiValueArgs}" |
| ${ARGN} |
| ) |
| |
| get_target_property_required(PYTHON3 env PYTHON3) |
| |
| # Define the board |
| define_board( |
| BOARD ${ADD_QUICKLOGIC_BOARD_BOARD} |
| DEVICE ${ADD_QUICKLOGIC_BOARD_DEVICE} |
| PACKAGE ${ADD_QUICKLOGIC_BOARD_PACKAGE} |
| PINMAP ${ADD_QUICKLOGIC_BOARD_PINMAP} |
| PINMAP_XML ${ADD_QUICKLOGIC_BOARD_PINMAP_XML} |
| ) |
| |
| set(DEVICE ${ADD_QUICKLOGIC_BOARD_DEVICE}) |
| get_target_property_required(ARCH ${DEVICE} ARCH) |
| get_target_property_required(DEVICE_TYPE ${DEVICE} DEVICE_TYPE) |
| get_target_property_required(FAMILY ${ARCH} FAMILY) |
| set(PACKAGE ${ADD_QUICKLOGIC_BOARD_PACKAGE}) |
| set(BOARD ${ADD_QUICKLOGIC_BOARD_BOARD}) |
| set(PINMAP ${ADD_QUICKLOGIC_BOARD_PINMAP}) |
| set(PINMAP_XML ${ADD_QUICKLOGIC_BOARD_PINMAP_XML}) |
| set(BIT_TO_V_EXTRA_ARGS ${ADD_QUICKLOGIC_BOARD_BIT_TO_V_EXTRA_ARGS}) |
| |
| # Get the database location. If given then use the database to generate |
| # pinmap and clkmap CSV files |
| get_target_property(VPR_DB_FILE ${DEVICE_TYPE} VPR_DB_FILE) |
| if(NOT "${VPR_DB_FILE}" STREQUAL "VPR_DB_FILE-NOTFOUND") |
| |
| # Get the database location |
| get_target_property_required(VPR_DB_FILE ${DEVICE_TYPE} VPR_DB_FILE) |
| get_file_location(VPR_DB_FILE_LOC ${VPR_DB_FILE}) |
| get_file_target(VPR_DB_TARGET ${VPR_DB_FILE}) |
| |
| # Generate clock pad map CSV file |
| set(CREATE_CLKMAP_CSV ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/utils/create_clkmap_csv.py) |
| set(CLKMAP_CSV ${BOARD}_clkmap.csv) |
| set(CLKMAP_CSV_DEPS ${PYTHON3} ${CREATE_CLKMAP_CSV}) |
| append_file_dependency(CLKMAP_CSV_DEPS ${VPR_DB_FILE}) |
| |
| add_custom_command( |
| OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV} |
| COMMAND ${PYTHON3} ${CREATE_CLKMAP_CSV} |
| -o ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV} |
| --db ${VPR_DB_FILE_LOC} |
| DEPENDS ${CLKMAP_CSV_DEPS} |
| ) |
| |
| add_file_target(FILE ${CLKMAP_CSV} GENERATED) |
| |
| # Generate pinmap CSV file |
| set(CREATE_PINMAP_CSV ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/utils/create_pinmap_csv.py) |
| set(PINMAP_CSV ${BOARD}_pinmap.csv) |
| set(PINMAP_CSV_DEPS ${PYTHON3} ${CREATE_PINMAP_CSV}) |
| append_file_dependency(PINMAP_CSV_DEPS ${VPR_DB_FILE}) |
| |
| # Make the pinmap depend on clkmap. This way it is build without the need for |
| # adding the dependency elsewhere. |
| append_file_dependency(PINMAP_CSV_DEPS ${CLKMAP_CSV}) |
| |
| # TODO: Use the PACKAGE in the pinmap CSV generation. |
| add_custom_command( |
| OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV} |
| COMMAND ${PYTHON3} ${CREATE_PINMAP_CSV} |
| -o ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV} |
| --package ${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE} |
| --db ${VPR_DB_FILE_LOC} |
| DEPENDS ${PINMAP_CSV_DEPS} |
| ) |
| |
| add_file_target(FILE ${PINMAP_CSV} GENERATED) |
| |
| # Setup extra args for bit to v |
| set(BIT_TO_V_EXTRA_ARGS_FOR_BOARD ${BIT_TO_V_EXTRA_ARGS}) |
| string(REPLACE "ql-" "" DEVICE_FOR_BIT_TO_V "${DEVICE}") |
| string(APPEND BIT_TO_V_EXTRA_ARGS_FOR_BOARD " --device-name ${DEVICE_FOR_BIT_TO_V}") |
| string(APPEND BIT_TO_V_EXTRA_ARGS_FOR_BOARD " --package-name ${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE}") |
| |
| # Set the board properties |
| set_target_properties( |
| ${BOARD} |
| PROPERTIES |
| PINMAP |
| ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV} |
| CLKMAP |
| ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV} |
| BIT_TO_V_EXTRA_ARGS |
| "${BIT_TO_V_EXTRA_ARGS_FOR_BOARD}" |
| ) |
| |
| set_target_properties( |
| dummy_${ARCH}_${DEVICE}_${PACKAGE} |
| PROPERTIES |
| PINMAP ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV} |
| CLKMAP ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV} |
| ) |
| |
| define_ql_pinmap_csv_install_target( |
| PART ${PART} |
| BOARD ${BOARD} |
| DEVICE_TYPE ${DEVICE_TYPE} |
| DEVICE ${DEVICE} |
| PACKAGE ${PACKAGE} |
| ) |
| |
| # For AP3 architecture generate pinmap and clkmap CSV files using the techfile |
| # and VPR grid map which is generated along rr graph patching |
| elseif("${ARCH}" STREQUAL "ql-ap3") |
| |
| # Get techfile location |
| get_target_property_required(TECHFILE ${DEVICE_TYPE} TECHFILE) |
| |
| # Get the rr graph target and location |
| get_target_property_required(RR_GRAPH_FILE ${DEVICE} ${PACKAGE}_OUT_RRBIN_REAL) |
| get_file_target(RR_GRAPH_TARGET ${RR_GRAPH_FILE}) |
| get_file_location(RR_GRAPH_LOCATION ${RR_GRAPH_FILE}) |
| |
| # Format VPR grid map file name |
| get_filename_component(DEVICES_DIR ${RR_GRAPH_LOCATION} DIRECTORY) |
| set(VPR_GRID_MAP_LOCATION ${DEVICES_DIR}/vpr_grid_map_${DEVICE}_${PACKAGE}.csv) |
| |
| # Generate clock pad map CSV file |
| set(CLKMAP_CSV_LOCATION ${DEVICES_DIR}/clkmap_${DEVICE}_${PACKAGE}.csv) |
| set(CLKMAP_CSV ${BOARD}_clkmap.csv) |
| add_custom_command( |
| OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV} |
| COMMAND |
| ${CMAKE_COMMAND} -E copy |
| ${CLKMAP_CSV_LOCATION} |
| ${CMAKE_CURRENT_BINARY_DIR}/${CLKMAP_CSV} |
| DEPENDS ${RR_GRAPH_TARGET} |
| ) |
| |
| add_file_target(FILE ${CLKMAP_CSV} GENERATED) |
| |
| # Generate pinmap CSV file |
| set(CREATE_PINMAP_CSV ${f4pga-arch-defs_SOURCE_DIR}/quicklogic/${FAMILY}/utils/ap3_create_pinmap_csv.py) |
| set(PINMAP_CSV ${BOARD}_pinmap.csv) |
| set(PINMAP_CSV_DEPS ${PYTHON3} ${PYTHON3_TARGET} ${CREATE_PINMAP_CSV} ${TECHFILE}) |
| append_file_dependency(PINMAP_CSV_DEPS ${RR_GRAPH_FILE}) |
| |
| # Make the pinmap depend on clkmap. This way it is build without the need for |
| # adding the dependency elsewhere. |
| append_file_dependency(PINMAP_CSV_DEPS ${CLKMAP_CSV}) |
| |
| # TODO: Use the PACKAGE in the pinmap CSV generation. |
| add_custom_command( |
| OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV} |
| COMMAND ${PYTHON3} ${CREATE_PINMAP_CSV} |
| -o ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV} |
| --package ${ADD_QUICKLOGIC_BOARD_FABRIC_PACKAGE} |
| --techfile ${TECHFILE} |
| --vpr-grid-map ${VPR_GRID_MAP_LOCATION} |
| DEPENDS ${PINMAP_CSV_DEPS} |
| ) |
| |
| add_file_target(FILE ${PINMAP_CSV} GENERATED) |
| |
| # Set the board properties |
| set_target_properties( |
| ${BOARD} |
| PROPERTIES |
| PINMAP |
| ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV} |
| CLKMAP |
| ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV} |
| ) |
| |
| set_target_properties( |
| dummy_${ARCH}_${DEVICE}_${PACKAGE} |
| PROPERTIES |
| PINMAP ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV} |
| CLKMAP ${CMAKE_CURRENT_SOURCE_DIR}/${CLKMAP_CSV} |
| ) |
| |
| # Install board files |
| define_ql_pinmap_csv_install_target( |
| PART ${PART} |
| BOARD ${BOARD} |
| DEVICE_TYPE ${DEVICE_TYPE} |
| DEVICE ${DEVICE} |
| PACKAGE ${PACKAGE} |
| ) |
| |
| elseif("${ARCH}" STREQUAL "qlf_k4n8") |
| set(PINMAP_CSV ${PINMAP}) |
| |
| # Copy the pinmap XML |
| get_file_target(PINMAP_XML_TARGET ${PINMAP_XML}) |
| |
| if(NOT TARGET ${PINMAP_XML_TARGET}) |
| add_custom_command( |
| OUTPUT |
| ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_XML} |
| COMMAND |
| ${CMAKE_COMMAND} -E copy |
| ${CMAKE_CURRENT_SOURCE_DIR}/devices/umc22/${PINMAP_XML} |
| ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_XML} |
| ) |
| add_file_target(FILE ${PINMAP_XML} GENERATED) |
| endif() |
| |
| # Make the pinmap CSV depend on pinmap XML. This way the file will be |
| # created without the need for adding the dependency elsewhere. |
| set(PINMAP_CSV_DEPS) |
| append_file_dependency(PINMAP_CSV_DEPS ${PINMAP_XML}) |
| |
| get_file_target(PINMAP_CSV_TARGET ${PINMAP_CSV}) |
| |
| if(NOT TARGET ${PINMAP_CSV_TARGET}) |
| # Copy the pinmap CSV |
| add_custom_command( |
| OUTPUT |
| ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV} |
| COMMAND |
| ${CMAKE_COMMAND} -E copy |
| ${CMAKE_CURRENT_SOURCE_DIR}/devices/umc22/${PINMAP_CSV} |
| ${CMAKE_CURRENT_BINARY_DIR}/${PINMAP_CSV} |
| DEPENDS |
| ${PINMAP_CSV_DEPS} |
| ) |
| add_file_target(FILE ${PINMAP_CSV} GENERATED) |
| endif() |
| |
| |
| # Set the board properties |
| set_target_properties( |
| ${BOARD} |
| PROPERTIES |
| PINMAP |
| ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_CSV} |
| PINMAP_XML |
| ${CMAKE_CURRENT_SOURCE_DIR}/${PINMAP_XML} |
| ) |
| |
| # Install board files |
| define_ql_pinmap_csv_install_target( |
| PART ${PART} |
| BOARD ${BOARD} |
| DEVICE_TYPE ${DEVICE_TYPE} |
| DEVICE ${DEVICE} |
| PACKAGE ${PACKAGE} |
| ) |
| endif() |
| |
| endfunction() |