| include(install.cmake) | |
| function(ADD_XC_ARCH_DEFINE) | |
| # ~~~ | |
| # ADD_XC_ARCH_DEFINE( | |
| # FAMILY <family> | |
| # PRJRAY_DIR <documentation project dir> | |
| # PRJRAY_DB_DIR <documentation project database dir> | |
| # ARCH <arch> | |
| # PRJRAY_ARCH <prjray_arch> | |
| # PROTOTYPE_PART <prototype_part> | |
| # YOSYS_SYNTH_SCRIPT <yosys_script> | |
| # YOSYS_UTILS_SCRIPT <yosys_script> | |
| # ) | |
| # | |
| # FAMILY: The family the architecture is belonging to (e.g. xc7). | |
| # | |
| # ARCH: The architecture to add (e.g. artix7). | |
| # | |
| # PRJRAY_ARCH: The architecture in PRJRAY that holds all the part data that need to be imported. | |
| # | |
| # PROTOTYPE_PART: The PART that is valid for all the different PARTs having the same ARCH. | |
| set(options) | |
| set(oneValueArgs | |
| FAMILY | |
| ARCH | |
| PRJRAY_ARCH | |
| PRJRAY_DIR | |
| PRJRAY_DB_DIR | |
| PRJRAY_NAME | |
| PROTOTYPE_PART | |
| YOSYS_SYNTH_SCRIPT | |
| YOSYS_UTILS_SCRIPT) | |
| set(multiValueArgs) | |
| cmake_parse_arguments( | |
| ADD_XC_ARCH_DEFINE | |
| "${options}" | |
| "${oneValueArgs}" | |
| "${multiValueArgs}" | |
| ${ARGN} | |
| ) | |
| # The default IOSTANDARD and DRIVE to use in fasm2bels | |
| set(DEFAULT_IOSTANDARD "LVCMOS33") | |
| set(DEFAULT_DRIVE 12) | |
| set(FAMILY ${ADD_XC_ARCH_DEFINE_FAMILY}) | |
| set(ARCH ${ADD_XC_ARCH_DEFINE_ARCH}) | |
| if("${ADD_XC_ARCH_DEFINE_PRJRAY_ARCH}" STREQUAL "") | |
| set(PRJRAY_ARCH "${ARCH}") | |
| else() | |
| set(PRJRAY_ARCH "${ADD_XC_ARCH_DEFINE_PRJRAY_ARCH}") | |
| endif() | |
| set(PRJRAY_DIR ${ADD_XC_ARCH_DEFINE_PRJRAY_DIR}) | |
| set(PRJRAY_DB_DIR ${ADD_XC_ARCH_DEFINE_PRJRAY_DB_DIR}) | |
| set(PRJRAY_NAME ${ADD_XC_ARCH_DEFINE_PRJRAY_NAME}) | |
| set(PROTOTYPE_PART ${ADD_XC_ARCH_DEFINE_PROTOTYPE_PART}) | |
| set(YOSYS_SYNTH_SCRIPT ${ADD_XC_ARCH_DEFINE_YOSYS_SYNTH_SCRIPT}) | |
| set(YOSYS_UTILS_SCRIPT ${ADD_XC_ARCH_DEFINE_YOSYS_UTILS_SCRIPT}) | |
| set(YOSYS_TECHMAP ${f4pga-arch-defs_SOURCE_DIR}/xilinx/${FAMILY}/techmap) | |
| # Notes on optimized flag settings: | |
| # These flags have been optimized for the ibex and baselitex designs. | |
| # - place_delay_model: delta is ~5% faster than delta_override (default: delta) | |
| # - acc_fac: Lowering this to 0.7 slightly improves runtime 1-4% (default: 1) | |
| # - astar_fac: Increasing this to 1.8 reduces runtime 2-15% (default: 1.2) | |
| # - initial_pres_fac: Setting this to 2.828 reduces runtime 10-20% from the default, | |
| # and about 3% faster than the previous value of 4 (default: 0.5) | |
| # - pres_fac_mult: A lower value of 1.2 performs better given the other parameters (default: 1.3) | |
| # Based on analysis performed on hydra.vtr.tools for the ibex, baselitex, and bram-n3 designs. | |
| # These changes did not have a measurable effect on QoR for these designs. | |
| # More details can be found in the report: https://colab.research.google.com/drive/1X91RGZnvlC7dBjJJUbS7JfqCbPCzJ3Xb | |
| # Also checked in at: utils/ipynb/Parameter_Sweep_using_fpga_tool_perf.ipynb | |
| set(VPR_ARCH_ARGS "\ | |
| --router_heap bucket \ | |
| --clock_modeling route \ | |
| --place_delta_delay_matrix_calculation_method dijkstra \ | |
| --place_delay_model delta \ | |
| --router_lookahead extended_map \ | |
| --check_route quick \ | |
| --strict_checks off \ | |
| --allow_dangling_combinational_nodes on \ | |
| --disable_errors check_unbuffered_edges:check_route \ | |
| --congested_routing_iteration_threshold 0.8 \ | |
| --incremental_reroute_delay_ripup off \ | |
| --base_cost_type delay_normalized_length_bounded \ | |
| --bb_factor 10 \ | |
| --acc_fac 0.7 \ | |
| --astar_fac 1.8 \ | |
| --initial_pres_fac 2.828 \ | |
| --pres_fac_mult 1.2 \ | |
| --check_rr_graph off \ | |
| --suppress_warnings \${OUT_NOISY_WARNINGS},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment:calculate_average_switch" | |
| ) | |
| set(YOSYS_CELLS_SIM ${YOSYS_DATADIR}/xilinx/cells_sim.v) | |
| set(VPR_CELLS_SIM ${f4pga-arch-defs_SOURCE_DIR}/xilinx/${FAMILY}/techmap/cells_sim.v) | |
| get_file_target(YOSYS_CELLS_SIM_TARGET ${YOSYS_CELLS_SIM}) | |
| if (NOT TARGET ${YOSYS_CELLS_SIM_TARGET}) | |
| add_file_target(FILE ${YOSYS_CELLS_SIM} ABSOLUTE) | |
| endif () | |
| get_file_target(VPR_CELLS_SIM_TARGET ${VPR_CELLS_SIM}) | |
| if (NOT TARGET ${VPR_CELLS_SIM_TARGET}) | |
| add_file_target(FILE ${VPR_CELLS_SIM} ABSOLUTE) | |
| endif () | |
| get_target_property_required(XCFASM env XCFASM) | |
| get_target_property_required(XC7FRAMES2BIT env XC7FRAMES2BIT) | |
| get_target_property_required(BITREAD env BITREAD) | |
| get_target_property_required(RAPIDWRIGHT_INSTALLED rapidwright RAPIDWRIGHT_INSTALLED) | |
| if(${RAPIDWRIGHT_INSTALLED}) | |
| get_target_property_required(RAPIDWRIGHT_PATH rapidwright RAPIDWRIGHT_PATH) | |
| set(INTERCHANGE_FASM2BELS "--interchange_capnp_schema_dir ${RAPIDWRIGHT_PATH}/interchange/fpga-interchange-schema/interchange | |
| --logical_netlist \${OUT_BIT_VERILOG}.netlist | |
| --physical_netlist \${OUT_BIT_VERILOG}.phys | |
| --interchange_xdc \${OUT_BIT_VERILOG}.inter.xdc") | |
| else() | |
| set(INTERCHANGE_FASM2BELS) | |
| endif() | |
| define_arch( | |
| ARCH ${ARCH} | |
| FAMILY ${FAMILY} | |
| DOC_PRJ ${PRJRAY_DIR} | |
| DOC_PRJ_DB ${PRJRAY_DB_DIR} | |
| DOC_PRJ_NAME ${PRJRAY_NAME} | |
| PROTOTYPE_PART ${PROTOTYPE_PART} | |
| YOSYS_SYNTH_SCRIPT ${YOSYS_SYNTH_SCRIPT} | |
| YOSYS_TECHMAP ${YOSYS_TECHMAP} | |
| DEVICE_FULL_TEMPLATE \${DEVICE}-\${PACKAGE} | |
| CELLS_SIM ${YOSYS_CELLS_SIM} ${VPR_CELLS_SIM} | |
| VPR_ARCH_ARGS ${VPR_ARCH_ARGS} | |
| RR_PATCH_CMD "${CMAKE_COMMAND} -E env \ | |
| PYTHONPATH=${PRJRAY_DIR}:${f4pga-arch-defs_SOURCE_DIR}/utils:${f4pga-arch-defs_BINARY_DIR}/utils \ | |
| \${PYTHON3} ${f4pga-arch-defs_SOURCE_DIR}/xilinx/common/utils/prjxray_routing_import.py \ | |
| --db_root ${PRJRAY_DB_DIR}/${PRJRAY_ARCH} \ | |
| --part \${PART} \ | |
| --read_rr_graph \${OUT_RRXML_VIRT} \ | |
| --write_rr_graph \${OUT_RRXML_REAL} \ | |
| --write_rr_node_map \${OUT_RRXML_REAL}.node_map.pickle \ | |
| --vpr_capnp_schema_dir ${VPR_CAPNP_SCHEMA_DIR} | |
| " | |
| PLACE_TOOL_CMD "${CMAKE_COMMAND} -E env \ | |
| PYTHONPATH=${f4pga-arch-defs_SOURCE_DIR}/utils \ | |
| \${PYTHON3} -m f4pga.utils.xc7.create_ioplace \ | |
| --map \${PINMAP} \ | |
| --blif \${OUT_EBLIF} \ | |
| \${PCF_INPUT_IO_FILE} \ | |
| --net \${OUT_NET}" | |
| PLACE_CONSTR_TOOL_CMD "${CMAKE_COMMAND} -E env \ | |
| PYTHONPATH=${f4pga-arch-defs_SOURCE_DIR}/utils \ | |
| \${PYTHON3} -m f4pga.utils.xc7.create_place_constraints \ | |
| --net \${OUT_NET} \ | |
| --arch \${DEVICE_MERGED_FILE_LOCATION} \ | |
| --blif \${OUT_EBLIF} \ | |
| --input /dev/stdin \ | |
| --output /dev/stdout \ | |
| \${PLACE_CONSTR_TOOL_EXTRA_ARGS}" | |
| BITSTREAM_EXTENSION bit | |
| FASM_TO_BIT ${XCFASM} | |
| FASM_TO_BIT_CMD "${CMAKE_COMMAND} -E env \ | |
| PYTHONPATH=${f4pga-arch-defs_BINARY_DIR}/env/conda/lib/python3.7/site-packages:${PRJRAY_DIR}:${PRJRAY_DIR}/third_party/fasm \ | |
| \${FASM_TO_BIT} \ | |
| --db-root ${PRJRAY_DB_DIR}/${PRJRAY_ARCH} \ | |
| --sparse \ | |
| --emit_pudc_b_pullup \ | |
| --fn_in \${OUT_FASM} \ | |
| --bit_out \${OUT_BITSTREAM} \ | |
| --frm2bit ${XC7FRAMES2BIT} \ | |
| \${FASM_TO_BIT_EXTRA_ARGS}" | |
| BIT_TO_V_CMD "${CMAKE_COMMAND} -E env \ | |
| PYTHONPATH=${f4pga-arch-defs_BINARY_DIR}/env/conda/lib/python3.7/site-packages:${PRJRAY_DIR}:${PRJRAY_DIR}/third_party/fasm:${f4pga-arch-defs_SOURCE_DIR}/utils \ | |
| \${PYTHON3} -mfasm2bels \ | |
| \${BIT_TO_V_EXTRA_ARGS} \ | |
| --db_root ${PRJRAY_DB_DIR}/${PRJRAY_ARCH} \ | |
| --rr_graph \${OUT_RRBIN_REAL_LOCATION} \ | |
| --vpr_capnp_schema_dir ${VPR_CAPNP_SCHEMA_DIR} \ | |
| --route \${OUT_ROUTE} \ | |
| --bitread ${BITREAD} \ | |
| --bit_file \${OUT_BITSTREAM} \ | |
| --fasm_file \${OUT_BITSTREAM}.fasm \ | |
| --iostandard ${DEFAULT_IOSTANDARD} \ | |
| --drive ${DEFAULT_DRIVE} \ | |
| \${PCF_INPUT_IO_FILE} \ | |
| --eblif \${OUT_EBLIF} \ | |
| --top \${TOP} \ | |
| --verilog_file \${OUT_BIT_VERILOG} | |
| --xdc_file \${OUT_BIT_VERILOG}.xdc ${INTERCHANGE_FASM2BELS}" | |
| NO_BIT_TO_BIN | |
| NO_BIT_TIME | |
| USE_FASM | |
| RR_GRAPH_EXT ".bin" | |
| ROUTE_CHAN_WIDTH 500 | |
| ) | |
| set_target_properties(${ARCH} PROPERTIES PRJRAY_ARCH ${PRJRAY_ARCH}) | |
| add_custom_target(all_${ARCH}_diff_fasm) | |
| endfunction() |