| add_subdirectory(tiles) |
| |
| add_file_target(FILE arch.xml SCANNER_TYPE xml) |
| |
| get_target_property_required(PYTHON3 env PYTHON3) |
| |
| set(ICEBOX_TIMING ${f4pga-arch-defs_SOURCE_DIR}/third_party/icestorm/icefuzz/timings.py) |
| set(CLEAN_ICEBOX_TIMING cleaned_timing.txt) |
| set(TIMING_TXT_FILE ${ICEBOX_SHARE}/timings_hx1k.txt) |
| set(SDF_FILE timings_hx1k.sdf) |
| add_file_target(FILE ${SDF_FILE} GENERATED) |
| get_file_target(SDF_FILE_TARGET ${SDF_FILE}) |
| |
| add_custom_command( |
| OUTPUT ${SDF_FILE} |
| COMMAND grep -v \\* ${TIMING_TXT_FILE} > ${CLEAN_ICEBOX_TIMING} |
| COMMAND ${PYTHON3} ${ICEBOX_TIMING} -t ${CLEAN_ICEBOX_TIMING} -s > ${SDF_FILE} |
| BYPRODUCTS ${CLEAN_ICEBOX_TIMING} |
| DEPENDS ${TIMING_TXT_FILE} ${ICEBOX_TIMING} ${PYTHON3} |
| ) |
| |
| add_custom_target( |
| ice40_sdf_target |
| DEPENDS ${SDF_FILE} |
| ) |
| get_target_property_required(ICE40_IMPORT_TIMING ice40_import_timing_deps ICE40_IMPORT_TIMING) |
| set(TIMING_IMPORT_CMD "${PYTHON3} ${ICE40_IMPORT_TIMING} --read_sdf ${SDF_FILE} --write_arch_xml /dev/stdout --read_arch_xml /dev/stdin") |
| set(TIMING_IMPORT_DEPS ${SDF_FILE_TARGET}) |
| |
| set(UPDATE_TILES "${f4pga-arch-defs_SOURCE_DIR}/utils/update_arch_tiles.py") |
| set(UPDATE_TILES_CMD "${PYTHON3} ${UPDATE_TILES} --in_xml /dev/stdin --out_xml /dev/stdout") |
| |
| get_file_target(UPDATE_TILES_TARGET ${UPDATE_TILES}) |
| set(UPDATE_TILES_DEPS ${UPDATE_TILES_TARGET}) |
| |
| define_device_type( |
| DEVICE_TYPE top-routing-virt |
| ARCH ice40 |
| ARCH_XML arch.xml |
| SCRIPT_OUTPUT_NAME tiles timing |
| SCRIPT_DEPS UPDATE_TILES_DEPS TIMING_IMPORT_DEPS |
| SCRIPTS UPDATE_TILES_CMD TIMING_IMPORT_CMD |
| ) |
| |
| add_dependencies(ice40_top-routing-virt_arch ice40_import_timing_deps ice40_sdf_target) |
| get_target_property_required(VIRT_DEVICE_MERGED_FILE top-routing-virt DEVICE_MERGED_FILE) |
| get_file_target(DEVICE_MERGED_FILE_TARGET ${VIRT_DEVICE_MERGED_FILE}) |
| add_dependencies(${DEVICE_MERGED_FILE_TARGET} ice40_import_timing_deps ice40_sdf_target) |