From 77ffdd7fd4e90e0da43e81b1f5e021b08ee64a9f Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Fri, 12 Mar 2021 13:53:09 +0100 Subject: fpga_interchange: tests: add cmake functions Also move all tests in a tests directory Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 115 ++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 fpga_interchange/examples/tests.cmake (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake new file mode 100644 index 00000000..a550fb8f --- /dev/null +++ b/fpga_interchange/examples/tests.cmake @@ -0,0 +1,115 @@ +function(add_interchange_test) + # ~~~ + # add_interchange_test( + # name + # part + # part + # tcl + # xdc + # top + # sources + # ) + # ~~~ + + set(options) + set(oneValueArgs name part package tcl xdc top) + set(multiValueArgs sources) + + cmake_parse_arguments( + add_interchange_test + "${options}" + "${oneValueArgs}" + "${multiValueArgs}" + ${ARGN} + ) + + set(name ${add_interchange_test_name}) + set(part ${add_interchange_test_part}) + 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}) + + 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} + yosys -c ${tcl} + DEPENDS ${sources} + ) + + add_custom_target(test-${family}-${name}-json DEPENDS ${synth_json}) + + # Logical Netlist + set(device_target constraints-luts-${part}-device) + get_property(device_loc TARGET constraints-luts-${part}-device PROPERTY LOCATION) + + set(netlist ${CMAKE_CURRENT_BINARY_DIR}/${name}.netlist) + add_custom_command( + OUTPUT ${netlist} + COMMAND + python3 -mfpga_interchange.yosys_json + --schema_dir ${INTERCHANGE_SCHEMA_PATH} + --device ${device_loc} + --top ${top} + ${synth_json} + ${netlist} + DEPENDS + ${synth_json} + ${device_target} + ) + + add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist}) + + set(chipdb_target chipdb-${part}-bba) + + # Physical Netlist + set(phys ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys) + add_custom_command( + OUTPUT ${phys} + COMMAND + nextpnr-fpga_interchange + --chipdb ${chipdb_dir}/chipdb-${part}.bba + --xdc ${xdc} + --netlist ${netlist} + --phys ${phys} + --package ${package} + DEPENDS + ${netlist} + ${chipdb_target} + ) + + 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} + ${RAPIDWRIGHT_PATH}/scripts/invoke_rapidwright.sh + com.xilinx.rapidwright.interchange.PhysicalNetlistToDcp + ${netlist} ${phys} ${xdc} ${dcp} + DEPENDS + ${phys} + ${netlist} + ) + + add_custom_target(test-${family}-${name}-dcp DEPENDS ${dcp}) + add_dependencies(all-${family}-tests test-${family}-${name}-dcp) +endfunction() + +add_custom_target(all-${family}-tests) +add_subdirectory(${family}/examples/tests) -- cgit v1.2.3 From 490fdb0a1c3bb78856d26be2186e4dca5d3d021f Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Fri, 12 Mar 2021 16:37:00 +0100 Subject: fpga_interchange: cmake: generate only one device family Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index a550fb8f..cb2ec483 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -2,8 +2,8 @@ function(add_interchange_test) # ~~~ # add_interchange_test( # name - # part - # part + # device + # package # tcl # xdc # top @@ -12,7 +12,7 @@ function(add_interchange_test) # ~~~ set(options) - set(oneValueArgs name part package tcl xdc top) + set(oneValueArgs name device package tcl xdc top) set(multiValueArgs sources) cmake_parse_arguments( @@ -24,7 +24,7 @@ function(add_interchange_test) ) set(name ${add_interchange_test_name}) - set(part ${add_interchange_test_part}) + set(device ${add_interchange_test_device}) set(package ${add_interchange_test_package}) set(top ${add_interchange_test_top}) set(tcl ${CMAKE_CURRENT_SOURCE_DIR}/${add_interchange_test_tcl}) @@ -54,14 +54,14 @@ function(add_interchange_test) add_custom_target(test-${family}-${name}-json DEPENDS ${synth_json}) # Logical Netlist - set(device_target constraints-luts-${part}-device) - get_property(device_loc TARGET constraints-luts-${part}-device PROPERTY LOCATION) + set(device_target constraints-luts-${device}-device) + get_property(device_loc TARGET constraints-luts-${device}-device PROPERTY LOCATION) set(netlist ${CMAKE_CURRENT_BINARY_DIR}/${name}.netlist) add_custom_command( OUTPUT ${netlist} COMMAND - python3 -mfpga_interchange.yosys_json + ${PYTHON_EXECUTABLE} -mfpga_interchange.yosys_json --schema_dir ${INTERCHANGE_SCHEMA_PATH} --device ${device_loc} --top ${top} @@ -74,7 +74,7 @@ function(add_interchange_test) add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist}) - set(chipdb_target chipdb-${part}-bba) + set(chipdb_target chipdb-${device}-bba) # Physical Netlist set(phys ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys) @@ -82,7 +82,7 @@ function(add_interchange_test) OUTPUT ${phys} COMMAND nextpnr-fpga_interchange - --chipdb ${chipdb_dir}/chipdb-${part}.bba + --chipdb ${chipdb_dir}/chipdb-${device}.bba --xdc ${xdc} --netlist ${netlist} --phys ${phys} -- cgit v1.2.3 From bd2da27e4e35e92ad91145921cf9c7d2c490a9df Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Fri, 12 Mar 2021 19:03:02 +0100 Subject: fpga_interchange: tests: added comment and fixed XDC Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index cb2ec483..4dc5ba48 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -9,7 +9,14 @@ function(add_interchange_test) # top # sources # ) - # ~~~ + # + # Generates targets to run desired tests + # + # Targets generated: + # - test-fpga_interchange--json : synthesis output + # - test-fpga_interchange--netlist : interchange logical netlist + # - test-fpga_interchange--phys : interchange physical netlist + # - test-fpga_interchange--phys : design checkpoint with RapidWright set(options) set(oneValueArgs name device package tcl xdc top) @@ -70,6 +77,7 @@ function(add_interchange_test) DEPENDS ${synth_json} ${device_target} + ${device_loc} ) add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist}) @@ -90,6 +98,7 @@ function(add_interchange_test) DEPENDS ${netlist} ${chipdb_target} + ${chipdb_dir}/chipdb-${device}.bba ) add_custom_target(test-${family}-${name}-phys DEPENDS ${phys}) -- cgit v1.2.3 From 0b62e540a388287bed9c50b7a113b6a7eb87e541 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Fri, 12 Mar 2021 20:04:51 +0100 Subject: fpga_interchange: address review comments Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index 4dc5ba48..ebbdb6be 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -108,10 +108,11 @@ function(add_interchange_test) OUTPUT ${dcp} COMMAND RAPIDWRIGHT_PATH=${RAPIDWRIGHT_PATH} - ${RAPIDWRIGHT_PATH}/scripts/invoke_rapidwright.sh + ${INVOKE_RAPIDWRIGHT} com.xilinx.rapidwright.interchange.PhysicalNetlistToDcp ${netlist} ${phys} ${xdc} ${dcp} DEPENDS + ${INVOKE_RAPIDWRIGHT} ${phys} ${netlist} ) @@ -119,6 +120,3 @@ function(add_interchange_test) add_custom_target(test-${family}-${name}-dcp DEPENDS ${dcp}) add_dependencies(all-${family}-tests test-${family}-${name}-dcp) endfunction() - -add_custom_target(all-${family}-tests) -add_subdirectory(${family}/examples/tests) -- cgit v1.2.3 From 3f3cabea2d16cd93c8d9114939b8a4fc883f09f1 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Mon, 15 Mar 2021 10:51:37 +0100 Subject: fpga_interchange: add bbasm step and archcheck Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index ebbdb6be..9dc73add 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -82,7 +82,7 @@ function(add_interchange_test) add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist}) - set(chipdb_target chipdb-${device}-bba) + set(chipdb_target chipdb-${device}-bin) # Physical Netlist set(phys ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys) @@ -90,7 +90,7 @@ function(add_interchange_test) OUTPUT ${phys} COMMAND nextpnr-fpga_interchange - --chipdb ${chipdb_dir}/chipdb-${device}.bba + --chipdb ${chipdb_dir}/chipdb-${device}.bin --xdc ${xdc} --netlist ${netlist} --phys ${phys} @@ -98,7 +98,7 @@ function(add_interchange_test) DEPENDS ${netlist} ${chipdb_target} - ${chipdb_dir}/chipdb-${device}.bba + ${chipdb_dir}/chipdb-${device}.bin ) add_custom_target(test-${family}-${name}-phys DEPENDS ${phys}) -- cgit v1.2.3 From f52b5b39edf3075fbee7244aabea1a12f6cdc70b Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Mon, 15 Mar 2021 11:02:56 +0100 Subject: fpga_interchange: tests: add techmap optional source file Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index 9dc73add..899bfa4a 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -8,6 +8,7 @@ function(add_interchange_test) # xdc # top # sources + # [techmap ] # ) # # Generates targets to run desired tests @@ -16,10 +17,10 @@ function(add_interchange_test) # - test-fpga_interchange--json : synthesis output # - test-fpga_interchange--netlist : interchange logical netlist # - test-fpga_interchange--phys : interchange physical netlist - # - test-fpga_interchange--phys : design checkpoint with RapidWright + # - test-fpga_interchange--dcp : design checkpoint with RapidWright set(options) - set(oneValueArgs name device package tcl xdc top) + set(oneValueArgs name device package tcl xdc top techmap) set(multiValueArgs sources) cmake_parse_arguments( @@ -36,6 +37,7 @@ function(add_interchange_test) 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}) + set(techmap ${CMAKE_CURRENT_SOURCE_DIR}/${add_interchange_test_techmap}) set(sources) foreach(source ${add_interchange_test_sources}) @@ -54,6 +56,7 @@ function(add_interchange_test) COMMAND SOURCES=${sources} OUT_JSON=${synth_json} + TECHMAP=${techmap} yosys -c ${tcl} DEPENDS ${sources} ) -- cgit v1.2.3 From c1e668f8238141a7d19525e9eb7a23c17cd1b120 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Tue, 16 Mar 2021 21:49:06 +0100 Subject: fpga_interchange: address review comments Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 53 ++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 7 deletions(-) (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index 899bfa4a..194a3f21 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -2,6 +2,7 @@ function(add_interchange_test) # ~~~ # add_interchange_test( # name + # family # device # package # tcl @@ -20,7 +21,7 @@ function(add_interchange_test) # - test-fpga_interchange--dcp : design checkpoint with RapidWright set(options) - set(oneValueArgs name device package tcl xdc top techmap) + set(oneValueArgs name family device package tcl xdc top techmap) set(multiValueArgs sources) cmake_parse_arguments( @@ -32,6 +33,7 @@ function(add_interchange_test) ) set(name ${add_interchange_test_name}) + set(family ${add_interchange_test_family}) set(device ${add_interchange_test_device}) set(package ${add_interchange_test_package}) set(top ${add_interchange_test_top}) @@ -64,8 +66,8 @@ function(add_interchange_test) add_custom_target(test-${family}-${name}-json DEPENDS ${synth_json}) # Logical Netlist - set(device_target constraints-luts-${device}-device) - get_property(device_loc TARGET constraints-luts-${device}-device PROPERTY LOCATION) + get_property(device_target TARGET device-${device} PROPERTY DEVICE_TARGET) + get_property(device_loc TARGET device-${device} PROPERTY DEVICE_LOC) set(netlist ${CMAKE_CURRENT_BINARY_DIR}/${name}.netlist) add_custom_command( @@ -85,27 +87,64 @@ function(add_interchange_test) add_custom_target(test-${family}-${name}-netlist DEPENDS ${netlist}) - set(chipdb_target chipdb-${device}-bin) + # Logical Netlist YAML + set(netlist_yaml ${CMAKE_CURRENT_BINARY_DIR}/${name}.netlist.yaml) + add_custom_command( + OUTPUT ${netlist_yaml} + COMMAND + ${PYTHON_EXECUTABLE} -mfpga_interchange.convert + --schema_dir ${INTERCHANGE_SCHEMA_PATH} + --schema logical + --input_format capnp + --output_format yaml + ${netlist} + ${netlist_yaml} + DEPENDS + ${netlist} + ) + + add_custom_target(test-${family}-${name}-netlist-yaml DEPENDS ${netlist_yaml}) # Physical Netlist + get_property(chipdb_bin_target TARGET device-${device} PROPERTY CHIPDB_BIN_TARGET) + get_property(chipdb_bin_loc TARGET device-${device} PROPERTY CHIPDB_BIN_LOC) + set(phys ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys) add_custom_command( OUTPUT ${phys} COMMAND nextpnr-fpga_interchange - --chipdb ${chipdb_dir}/chipdb-${device}.bin + --chipdb ${chipdb_bin_loc} --xdc ${xdc} --netlist ${netlist} --phys ${phys} --package ${package} DEPENDS ${netlist} - ${chipdb_target} - ${chipdb_dir}/chipdb-${device}.bin + ${chipdb_bin_target} + ${chipdb_bin_loc} ) add_custom_target(test-${family}-${name}-phys DEPENDS ${phys}) + # Physical Netlist YAML + set(phys_yaml ${CMAKE_CURRENT_BINARY_DIR}/${name}.phys.yaml) + add_custom_command( + OUTPUT ${phys_yaml} + COMMAND + ${PYTHON_EXECUTABLE} -mfpga_interchange.convert + --schema_dir ${INTERCHANGE_SCHEMA_PATH} + --schema physical + --input_format capnp + --output_format yaml + ${phys} + ${phys_yaml} + DEPENDS + ${phys} + ) + + add_custom_target(test-${family}-${name}-phys-yaml DEPENDS ${phys_yaml}) + set(dcp ${CMAKE_CURRENT_BINARY_DIR}/${name}.dcp) add_custom_command( OUTPUT ${dcp} -- cgit v1.2.3 From f6583f7ecc807c3c2a08d0121ef20fab3616c1e7 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Tue, 16 Mar 2021 22:40:15 +0100 Subject: fpga_interchange: minor fixes and comments addition Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/tests.cmake | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'fpga_interchange/examples/tests.cmake') diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index 194a3f21..7598d25c 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -7,13 +7,27 @@ function(add_interchange_test) # package # tcl # xdc - # top # sources + # [top ] # [techmap ] # ) # # Generates targets to run desired tests # + # Arguments: + # - name: test name. This must be unique and no other tests with the same + # name should exist + # - family: nextpnr architecture family (e.g. fpga_interchange) + # - device: common device name of a set of parts. E.g. xc7a35tcsg324-1 and xc7a35tcpg236-1 + # share the same xc7a35t device prefix + # - package: package among the ones available for the device + # - tcl: tcl script used for synthesis + # - xdc: constraints file used in the physical netlist generation step + # - sources: list of HDL sources + # - top (optional): name of the top level module. + # If not provided, "top" is assigned as top level module + # - techmap (optional): techmap file used during synthesis + # # Targets generated: # - test-fpga_interchange--json : synthesis output # - test-fpga_interchange--netlist : interchange logical netlist @@ -121,6 +135,7 @@ function(add_interchange_test) --package ${package} DEPENDS ${netlist} + ${xdc} ${chipdb_bin_target} ${chipdb_bin_loc} ) -- cgit v1.2.3