2021-03-12 20:53:09 +08:00
|
|
|
function(add_interchange_test)
|
|
|
|
# ~~~
|
|
|
|
# add_interchange_test(
|
|
|
|
# name <name>
|
2021-03-12 23:37:00 +08:00
|
|
|
# device <common device>
|
|
|
|
# package <package>
|
2021-03-12 20:53:09 +08:00
|
|
|
# tcl <tcl>
|
|
|
|
# xdc <xdc>
|
|
|
|
# top <top name>
|
|
|
|
# sources <sources list>
|
2021-03-15 18:02:56 +08:00
|
|
|
# [techmap <techmap file>]
|
2021-03-12 20:53:09 +08:00
|
|
|
# )
|
2021-03-13 02:03:02 +08:00
|
|
|
#
|
|
|
|
# Generates targets to run desired tests
|
|
|
|
#
|
|
|
|
# Targets generated:
|
|
|
|
# - test-fpga_interchange-<name>-json : synthesis output
|
|
|
|
# - test-fpga_interchange-<name>-netlist : interchange logical netlist
|
|
|
|
# - test-fpga_interchange-<name>-phys : interchange physical netlist
|
2021-03-15 18:02:56 +08:00
|
|
|
# - test-fpga_interchange-<name>-dcp : design checkpoint with RapidWright
|
2021-03-12 20:53:09 +08:00
|
|
|
|
|
|
|
set(options)
|
2021-03-15 18:02:56 +08:00
|
|
|
set(oneValueArgs name device package tcl xdc top techmap)
|
2021-03-12 20:53:09 +08:00
|
|
|
set(multiValueArgs sources)
|
|
|
|
|
|
|
|
cmake_parse_arguments(
|
|
|
|
add_interchange_test
|
|
|
|
"${options}"
|
|
|
|
"${oneValueArgs}"
|
|
|
|
"${multiValueArgs}"
|
|
|
|
${ARGN}
|
|
|
|
)
|
|
|
|
|
|
|
|
set(name ${add_interchange_test_name})
|
2021-03-12 23:37:00 +08:00
|
|
|
set(device ${add_interchange_test_device})
|
2021-03-12 20:53:09 +08:00
|
|
|
set(package ${add_interchange_test_package})
|
|
|
|
set(top ${add_interchange_test_top})
|
|
|
|
set(tcl ${CMAKE_CURRENT_SOURCE_DIR}/${add_interchange_test_tcl})
|
|
|
|
set(xdc ${CMAKE_CURRENT_SOURCE_DIR}/${add_interchange_test_xdc})
|
2021-03-15 18:02:56 +08:00
|
|
|
set(techmap ${CMAKE_CURRENT_SOURCE_DIR}/${add_interchange_test_techmap})
|
2021-03-12 20:53:09 +08:00
|
|
|
|
|
|
|
set(sources)
|
|
|
|
foreach(source ${add_interchange_test_sources})
|
|
|
|
list(APPEND sources ${CMAKE_CURRENT_SOURCE_DIR}/${source})
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
if (NOT DEFINED top)
|
|
|
|
# Setting default top value
|
|
|
|
set(top "top")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Synthesis
|
|
|
|
set(synth_json ${CMAKE_CURRENT_BINARY_DIR}/${name}.json)
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${synth_json}
|
|
|
|
COMMAND
|
|
|
|
SOURCES=${sources}
|
|
|
|
OUT_JSON=${synth_json}
|
2021-03-15 18:02:56 +08:00
|
|
|
TECHMAP=${techmap}
|
2021-03-12 20:53:09 +08:00
|
|
|
yosys -c ${tcl}
|
|
|
|
DEPENDS ${sources}
|
|
|
|
)
|
|
|
|
|
|
|
|
add_custom_target(test-${family}-${name}-json DEPENDS ${synth_json})
|
|
|
|
|
|
|
|
# Logical Netlist
|
2021-03-12 23:37:00 +08:00
|
|
|
set(device_target constraints-luts-${device}-device)
|
|
|
|
get_property(device_loc TARGET constraints-luts-${device}-device PROPERTY LOCATION)
|
2021-03-12 20:53:09 +08:00
|
|
|
|
|
|
|
set(netlist ${CMAKE_CURRENT_BINARY_DIR}/${name}.netlist)
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${netlist}
|
|
|
|
COMMAND
|
2021-03-12 23:37:00 +08:00
|
|
|
${PYTHON_EXECUTABLE} -mfpga_interchange.yosys_json
|
2021-03-12 20:53:09 +08:00
|
|
|
--schema_dir ${INTERCHANGE_SCHEMA_PATH}
|
|
|
|
--device ${device_loc}
|
|
|
|
--top ${top}
|
|
|
|
${synth_json}
|
|
|
|
${netlist}
|
|
|
|
DEPENDS
|
|
|
|
${synth_json}
|
|
|
|
${device_target}
|
2021-03-13 02:03:02 +08:00
|
|
|
${device_loc}
|
2021-03-12 20:53:09 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist})
|
|
|
|
|
2021-03-15 17:51:37 +08:00
|
|
|
set(chipdb_target chipdb-${device}-bin)
|
2021-03-12 20:53:09 +08:00
|
|
|
|
|
|
|
# Physical Netlist
|
|
|
|
set(phys ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys)
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${phys}
|
|
|
|
COMMAND
|
|
|
|
nextpnr-fpga_interchange
|
2021-03-15 17:51:37 +08:00
|
|
|
--chipdb ${chipdb_dir}/chipdb-${device}.bin
|
2021-03-12 20:53:09 +08:00
|
|
|
--xdc ${xdc}
|
|
|
|
--netlist ${netlist}
|
|
|
|
--phys ${phys}
|
|
|
|
--package ${package}
|
|
|
|
DEPENDS
|
|
|
|
${netlist}
|
|
|
|
${chipdb_target}
|
2021-03-15 17:51:37 +08:00
|
|
|
${chipdb_dir}/chipdb-${device}.bin
|
2021-03-12 20:53:09 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
add_custom_target(test-${family}-${name}-phys DEPENDS ${phys})
|
|
|
|
|
|
|
|
set(dcp ${CMAKE_CURRENT_BINARY_DIR}/${name}.dcp)
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${dcp}
|
|
|
|
COMMAND
|
|
|
|
RAPIDWRIGHT_PATH=${RAPIDWRIGHT_PATH}
|
2021-03-13 03:04:51 +08:00
|
|
|
${INVOKE_RAPIDWRIGHT}
|
2021-03-12 20:53:09 +08:00
|
|
|
com.xilinx.rapidwright.interchange.PhysicalNetlistToDcp
|
|
|
|
${netlist} ${phys} ${xdc} ${dcp}
|
|
|
|
DEPENDS
|
2021-03-13 03:04:51 +08:00
|
|
|
${INVOKE_RAPIDWRIGHT}
|
2021-03-12 20:53:09 +08:00
|
|
|
${phys}
|
|
|
|
${netlist}
|
|
|
|
)
|
|
|
|
|
|
|
|
add_custom_target(test-${family}-${name}-dcp DEPENDS ${dcp})
|
|
|
|
add_dependencies(all-${family}-tests test-${family}-${name}-dcp)
|
|
|
|
endfunction()
|