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