From 15e945aa1c83d5408f93e6375b38ec81deb4f874 Mon Sep 17 00:00:00 2001 From: Alessandro Comodi Date: Tue, 23 Mar 2021 20:35:53 +0100 Subject: interchange: added boards and group testing across multiple boards Signed-off-by: Alessandro Comodi --- fpga_interchange/examples/boards.cmake | 45 ++++++++++++++ fpga_interchange/examples/boards/CMakeLists.txt | 29 +++++++++ fpga_interchange/examples/tests.cmake | 71 ++++++++++++++++++++++ .../examples/tests/wire/CMakeLists.txt | 48 +-------------- fpga_interchange/examples/tests/wire/arty100t.xdc | 5 ++ fpga_interchange/examples/tests/wire/arty35t.xdc | 5 ++ fpga_interchange/examples/tests/wire/basys3.xdc | 5 ++ .../examples/tests/wire/nexys_video.xdc | 5 ++ fpga_interchange/examples/tests/wire/wire_arty.xdc | 5 -- .../examples/tests/wire/wire_basys3.xdc | 5 -- .../examples/tests/wire/wire_nexys_video.xdc | 5 -- fpga_interchange/examples/tests/wire/wire_zybo.xdc | 5 -- fpga_interchange/examples/tests/wire/zybo.xdc | 5 ++ fpga_interchange/family.cmake | 2 + 14 files changed, 175 insertions(+), 65 deletions(-) create mode 100644 fpga_interchange/examples/boards.cmake create mode 100644 fpga_interchange/examples/boards/CMakeLists.txt create mode 100644 fpga_interchange/examples/tests/wire/arty100t.xdc create mode 100644 fpga_interchange/examples/tests/wire/arty35t.xdc create mode 100644 fpga_interchange/examples/tests/wire/basys3.xdc create mode 100644 fpga_interchange/examples/tests/wire/nexys_video.xdc delete mode 100644 fpga_interchange/examples/tests/wire/wire_arty.xdc delete mode 100644 fpga_interchange/examples/tests/wire/wire_basys3.xdc delete mode 100644 fpga_interchange/examples/tests/wire/wire_nexys_video.xdc delete mode 100644 fpga_interchange/examples/tests/wire/wire_zybo.xdc create mode 100644 fpga_interchange/examples/tests/wire/zybo.xdc diff --git a/fpga_interchange/examples/boards.cmake b/fpga_interchange/examples/boards.cmake new file mode 100644 index 00000000..c44ab930 --- /dev/null +++ b/fpga_interchange/examples/boards.cmake @@ -0,0 +1,45 @@ +function(add_board) + # ~~~ + # add_board( + # name + # device + # package + # ) + # ~~~ + # + # Generates a board target containing information on the common device and package + # of the board. + # + # Arguments: + # - name: name of the board. E.g. arty + # - device: common device name of a set of parts. E.g. xc7a35tcsg324-1 and xc7a35tcpg236-1 + # share the same xc7a35t device prefix + # - package: one of the packages available for a given device. E.g. cpg236 + # + # Targets generated: + # - board- + + set(options) + set(oneValueArgs name device package) + set(multiValueArgs) + + cmake_parse_arguments( + add_board + "${options}" + "${oneValueArgs}" + "${multiValueArgs}" + ${ARGN} + ) + + set(name ${add_board_name}) + set(device ${add_board_device}) + set(package ${add_board_package}) + + add_custom_target(board-${name} DEPENDS device-${device}) + set_target_properties( + board-${name} + PROPERTIES + DEVICE ${device} + PACKAGE ${package} + ) +endfunction() diff --git a/fpga_interchange/examples/boards/CMakeLists.txt b/fpga_interchange/examples/boards/CMakeLists.txt new file mode 100644 index 00000000..18c8f96b --- /dev/null +++ b/fpga_interchange/examples/boards/CMakeLists.txt @@ -0,0 +1,29 @@ +add_board( + name arty35t + device xc7a35t + package csg324 +) + +add_board( + name arty100t + device xc7a100t + package csg324 +) + +add_board( + name nexys_video + device xc7a200t + package sbg484 +) + +add_board( + name basys3 + device xc7a35t + package cpg236 +) + +add_board( + name zybo + device xc7z010 + package clg400 +) diff --git a/fpga_interchange/examples/tests.cmake b/fpga_interchange/examples/tests.cmake index 5b776dc7..34d7f3f1 100644 --- a/fpga_interchange/examples/tests.cmake +++ b/fpga_interchange/examples/tests.cmake @@ -263,3 +263,74 @@ function(add_interchange_test) add_custom_target(test-${family}-${name}-dcp DEPENDS ${dcp}) add_dependencies(all-${family}-tests test-${family}-${name}-dcp) endfunction() + +function(add_interchange_group_test) + # ~~~ + # add_interchange_group_test( + # name + # family + # board_list + # xdc_list + # tcl + # sources + # [top ] + # [techmap ] + # ) + # + # Generates targets to run desired tests over multiple devices. + # + # Arguments: + # - name: base test name. The real test name will be _ + # - family: nextpnr architecture family (e.g. fpga_interchange) + # - board_list: list of boards, one for each test + # - tcl: tcl script used for synthesis + # - 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 + # + # This function internally calls add_interchange_test to generate the various tests. + # + # Note: it is assumed that there exists an XDC file for each board, with the following naming + # convention: .xdc + + set(options) + set(oneValueArgs name family tcl top techmap) + set(multiValueArgs sources board_list) + + cmake_parse_arguments( + add_interchange_group_test + "${options}" + "${oneValueArgs}" + "${multiValueArgs}" + ${ARGN} + ) + + set(name ${add_interchange_group_test_name}) + set(family ${add_interchange_group_test_family}) + set(top ${add_interchange_group_test_top}) + set(tcl ${add_interchange_group_test_tcl}) + set(techmap ${add_interchange_group_test_techmap}) + set(sources ${add_interchange_group_test_sources}) + + if (NOT DEFINED top) + # Setting default top value + set(top "top") + endif() + + foreach(board ${add_interchange_group_test_board_list}) + get_property(device TARGET board-${board} PROPERTY DEVICE) + get_property(package TARGET board-${board} PROPERTY PACKAGE) + + add_interchange_test( + name ${name}_${board} + family ${family} + device ${device} + package ${package} + tcl ${tcl} + xdc ${board}.xdc + sources ${sources} + top ${top} + ) + endforeach() +endfunction() diff --git a/fpga_interchange/examples/tests/wire/CMakeLists.txt b/fpga_interchange/examples/tests/wire/CMakeLists.txt index c7199475..7b6567ae 100644 --- a/fpga_interchange/examples/tests/wire/CMakeLists.txt +++ b/fpga_interchange/examples/tests/wire/CMakeLists.txt @@ -1,49 +1,7 @@ -add_interchange_test( - name wire_basys3 +add_interchange_group_test( + name wire family ${family} - device xc7a35t - package cpg236 + board_list basys3 arty35t zybo arty100t nexys_video tcl run.tcl - xdc wire_basys3.xdc - sources wire.v -) - -add_interchange_test( - name wire_arty_35t - family ${family} - device xc7a35t - package csg324 - tcl run.tcl - xdc wire_arty.xdc - sources wire.v -) - -add_interchange_test( - name wire_arty_100t - family ${family} - device xc7a100t - package csg324 - tcl run.tcl - xdc wire_arty.xdc - sources wire.v -) - -add_interchange_test( - name wire_nexys_video - family ${family} - device xc7a200t - package sbg484 - tcl run.tcl - xdc wire_nexys_video.xdc - sources wire.v -) - -add_interchange_test( - name wire_zybo - family ${family} - device xc7z010 - package clg400 - tcl run.tcl - xdc wire_zybo.xdc sources wire.v ) diff --git a/fpga_interchange/examples/tests/wire/arty100t.xdc b/fpga_interchange/examples/tests/wire/arty100t.xdc new file mode 100644 index 00000000..54c661c9 --- /dev/null +++ b/fpga_interchange/examples/tests/wire/arty100t.xdc @@ -0,0 +1,5 @@ +set_property PACKAGE_PIN A8 [get_ports i] +set_property PACKAGE_PIN H5 [get_ports o] + +set_property IOSTANDARD LVCMOS33 [get_ports i] +set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/arty35t.xdc b/fpga_interchange/examples/tests/wire/arty35t.xdc new file mode 100644 index 00000000..54c661c9 --- /dev/null +++ b/fpga_interchange/examples/tests/wire/arty35t.xdc @@ -0,0 +1,5 @@ +set_property PACKAGE_PIN A8 [get_ports i] +set_property PACKAGE_PIN H5 [get_ports o] + +set_property IOSTANDARD LVCMOS33 [get_ports i] +set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/basys3.xdc b/fpga_interchange/examples/tests/wire/basys3.xdc new file mode 100644 index 00000000..317d5acc --- /dev/null +++ b/fpga_interchange/examples/tests/wire/basys3.xdc @@ -0,0 +1,5 @@ +set_property PACKAGE_PIN V17 [get_ports i] +set_property PACKAGE_PIN U16 [get_ports o] + +set_property IOSTANDARD LVCMOS33 [get_ports i] +set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/nexys_video.xdc b/fpga_interchange/examples/tests/wire/nexys_video.xdc new file mode 100644 index 00000000..326f77cb --- /dev/null +++ b/fpga_interchange/examples/tests/wire/nexys_video.xdc @@ -0,0 +1,5 @@ +set_property PACKAGE_PIN E22 [get_ports i] +set_property PACKAGE_PIN T14 [get_ports o] + +set_property IOSTANDARD LVCMOS33 [get_ports i] +set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/wire_arty.xdc b/fpga_interchange/examples/tests/wire/wire_arty.xdc deleted file mode 100644 index 54c661c9..00000000 --- a/fpga_interchange/examples/tests/wire/wire_arty.xdc +++ /dev/null @@ -1,5 +0,0 @@ -set_property PACKAGE_PIN A8 [get_ports i] -set_property PACKAGE_PIN H5 [get_ports o] - -set_property IOSTANDARD LVCMOS33 [get_ports i] -set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/wire_basys3.xdc b/fpga_interchange/examples/tests/wire/wire_basys3.xdc deleted file mode 100644 index 317d5acc..00000000 --- a/fpga_interchange/examples/tests/wire/wire_basys3.xdc +++ /dev/null @@ -1,5 +0,0 @@ -set_property PACKAGE_PIN V17 [get_ports i] -set_property PACKAGE_PIN U16 [get_ports o] - -set_property IOSTANDARD LVCMOS33 [get_ports i] -set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/wire_nexys_video.xdc b/fpga_interchange/examples/tests/wire/wire_nexys_video.xdc deleted file mode 100644 index 326f77cb..00000000 --- a/fpga_interchange/examples/tests/wire/wire_nexys_video.xdc +++ /dev/null @@ -1,5 +0,0 @@ -set_property PACKAGE_PIN E22 [get_ports i] -set_property PACKAGE_PIN T14 [get_ports o] - -set_property IOSTANDARD LVCMOS33 [get_ports i] -set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/wire_zybo.xdc b/fpga_interchange/examples/tests/wire/wire_zybo.xdc deleted file mode 100644 index 072c19d2..00000000 --- a/fpga_interchange/examples/tests/wire/wire_zybo.xdc +++ /dev/null @@ -1,5 +0,0 @@ -set_property PACKAGE_PIN G15 [get_ports i] -set_property PACKAGE_PIN M14 [get_ports o] - -set_property IOSTANDARD LVCMOS33 [get_ports i] -set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/examples/tests/wire/zybo.xdc b/fpga_interchange/examples/tests/wire/zybo.xdc new file mode 100644 index 00000000..072c19d2 --- /dev/null +++ b/fpga_interchange/examples/tests/wire/zybo.xdc @@ -0,0 +1,5 @@ +set_property PACKAGE_PIN G15 [get_ports i] +set_property PACKAGE_PIN M14 [get_ports o] + +set_property IOSTANDARD LVCMOS33 [get_ports i] +set_property IOSTANDARD LVCMOS33 [get_ports o] diff --git a/fpga_interchange/family.cmake b/fpga_interchange/family.cmake index 32cf7169..139914ef 100644 --- a/fpga_interchange/family.cmake +++ b/fpga_interchange/family.cmake @@ -15,6 +15,7 @@ set(INTERCHANGE_SCHEMA_PATH ${PROJECT_SOURCE_DIR}/3rdparty/fpga-interchange-sche add_subdirectory(3rdparty/fpga-interchange-schema/cmake/cxx_static) include(${family}/examples/chipdb.cmake) +include(${family}/examples/boards.cmake) include(${family}/examples/tests.cmake) set(chipdb_dir ${CMAKE_CURRENT_BINARY_DIR}/${family}/chipdb) @@ -23,6 +24,7 @@ file(MAKE_DIRECTORY ${chipdb_dir}) add_custom_target(all-${family}-tests) add_custom_target(all-${family}-archcheck-tests) add_subdirectory(${family}/examples/devices) +add_subdirectory(${family}/examples/boards) add_subdirectory(${family}/examples/tests) set(PROTOS lookahead.capnp) -- cgit v1.2.3