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/archcheck/Makefile | 23 -------- fpga_interchange/examples/archcheck/test_data.yaml | 36 ------------ fpga_interchange/examples/chipdb.cmake | 64 ++++++++++++++++++++-- fpga_interchange/examples/devices/CMakeLists.txt | 12 +--- .../examples/devices/xc7a35t/CMakeLists.txt | 12 ++++ .../examples/devices/xc7a35t/test_data.yaml | 36 ++++++++++++ fpga_interchange/examples/tests.cmake | 6 +- fpga_interchange/family.cmake | 2 + 8 files changed, 114 insertions(+), 77 deletions(-) delete mode 100644 fpga_interchange/examples/archcheck/Makefile delete mode 100644 fpga_interchange/examples/archcheck/test_data.yaml create mode 100644 fpga_interchange/examples/devices/xc7a35t/CMakeLists.txt create mode 100644 fpga_interchange/examples/devices/xc7a35t/test_data.yaml diff --git a/fpga_interchange/examples/archcheck/Makefile b/fpga_interchange/examples/archcheck/Makefile deleted file mode 100644 index 02e1c08e..00000000 --- a/fpga_interchange/examples/archcheck/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -include ../common.mk - -PACKAGE := csg324 - -.PHONY: check check_test_data - -check: check_test_data - $(NEXTPNR_BIN) \ - --chipdb $(BBA_PATH) \ - --package $(PACKAGE) \ - --test - -check_test_data: - $(NEXTPNR_BIN) \ - --chipdb $(BBA_PATH) \ - --package $(PACKAGE) \ - --run $(NEXTPNR_PATH)/python/check_arch_api.py - -debug_check_test_data: - gdb --args $(NEXTPNR_BIN) \ - --chipdb $(BBA_PATH) \ - --package $(PACKAGE) \ - --run $(NEXTPNR_PATH)/python/check_arch_api.py diff --git a/fpga_interchange/examples/archcheck/test_data.yaml b/fpga_interchange/examples/archcheck/test_data.yaml deleted file mode 100644 index 268d180a..00000000 --- a/fpga_interchange/examples/archcheck/test_data.yaml +++ /dev/null @@ -1,36 +0,0 @@ -pip_test: - - src_wire: CLBLM_R_X11Y93/CLBLM_L_D3 - dst_wire: SLICE_X15Y93.SLICEL/D3 -pip_chain_test: - - wires: - - $CONSTANTS_X0Y0.$CONSTANTS/$GND_SOURCE - - $CONSTANTS_X0Y0/$GND_NODE - - TIEOFF_X3Y145.TIEOFF/$GND_SITE_WIRE - - TIEOFF_X3Y145.TIEOFF/HARD0GND_HARD0 - - INT_R_X3Y145/GND_WIRE - - wires: - - $CONSTANTS_X0Y0.$CONSTANTS/$VCC_SOURCE - - $CONSTANTS_X0Y0/$VCC_NODE - - TIEOFF_X3Y145.TIEOFF/$VCC_SITE_WIRE - - TIEOFF_X3Y145.TIEOFF/HARD1VCC_HARD1 - - INT_R_X3Y145/VCC_WIRE - - wires: - - $CONSTANTS_X0Y0.$CONSTANTS/$VCC_SOURCE - - $CONSTANTS_X0Y0/$VCC_NODE - - SLICE_X3Y145.SLICEL/$VCC_SITE_WIRE - - SLICE_X3Y145.SLICEL/CEUSEDVCC_HARD1 - - wires: - - $CONSTANTS_X0Y0.$CONSTANTS/$GND_SOURCE - - $CONSTANTS_X0Y0/$GND_NODE - - SLICE_X3Y145.SLICEL/$GND_SITE_WIRE - - SLICE_X3Y145.SLICEL/SRUSEDGND_HARD0 -bel_pin_test: - - bel: SLICE_X15Y93.SLICEL/D6LUT - pin: A3 - wire: SLICE_X15Y93.SLICEL/D3 - - bel: $CONSTANTS_X0Y0.$CONSTANTS/GND - pin: G - wire: $CONSTANTS_X0Y0.$CONSTANTS/$GND_SOURCE - - bel: $CONSTANTS_X0Y0.$CONSTANTS/VCC - pin: P - wire: $CONSTANTS_X0Y0.$CONSTANTS/$VCC_SOURCE diff --git a/fpga_interchange/examples/chipdb.cmake b/fpga_interchange/examples/chipdb.cmake index ed6f173f..21ec3e7b 100644 --- a/fpga_interchange/examples/chipdb.cmake +++ b/fpga_interchange/examples/chipdb.cmake @@ -184,18 +184,24 @@ function(generate_chipdb) # generate_chipdb( # device # part + # device_target + # bel_bucket_seeds + # package # ) # ~~~ # # Generates a chipdb BBA file, starting from a device database. # - # The chipdb file is moved to the /build/fpga_interchange/chipdb/ directory + # The chipdb binary file is directly generated to the + # /build/fpga_interchange/chipdb/ directory. + # + # The package argument is only used to run the architecture check target. # # Targets generated: # - chipdb--bba set(options) - set(oneValueArgs device part device_target bel_bucket_seeds) + set(oneValueArgs device part device_target bel_bucket_seeds package) set(multiValueArgs) cmake_parse_arguments( @@ -210,13 +216,14 @@ function(generate_chipdb) set(part ${generate_chipdb_part}) set(device_target ${generate_chipdb_device_target}) set(bel_bucket_seeds ${generate_chipdb_bel_bucket_seeds}) + set(package ${generate_chipdb_package}) get_target_property(device_loc ${device_target} LOCATION) - set(chipdb_bba ${chipdb_dir}/chipdb-${device}.bba) + set(chipdb_bba ${CMAKE_CURRENT_BINARY_DIR}/chipdb-${device}.bba) add_custom_command( OUTPUT ${chipdb_bba} COMMAND - ${PYTHON_EXECUTABLE} -mfpga_interchange.nextpnr_emit + ${PYTHON_EXECUTABLE} -mfpga_interchange.nextpnr_emit --schema_dir ${INTERCHANGE_SCHEMA_PATH} --output_dir ${CMAKE_CURRENT_BINARY_DIR} --bel_bucket_seeds ${bel_bucket_seeds} @@ -230,5 +237,54 @@ function(generate_chipdb) ) add_custom_target(chipdb-${device}-bba DEPENDS ${chipdb_bba}) + + set(chipdb_bin ${chipdb_dir}/chipdb-${device}.bin) + add_custom_command( + OUTPUT ${chipdb_bin} + COMMAND + bbasm -l ${chipdb_bba} ${chipdb_bin} + DEPENDS + chipdb-${device}-bba + ${chipdb_bba} + bbasm + ) + + add_custom_target(chipdb-${device}-bin DEPENDS ${chipdb_bin}) + + # Generate architecture check target + set(test_data_source ${CMAKE_CURRENT_SOURCE_DIR}/test_data.yaml) + set(test_data_binary ${CMAKE_CURRENT_BINARY_DIR}/test_data.yaml) + add_custom_command( + OUTPUT ${test_data_binary} + COMMAND + ${CMAKE_COMMAND} -E create_symlink + ${test_data_source} + ${test_data_binary} + DEPENDS + ${test_data_source} + ) + + add_custom_target( + chipdb-${device}-bin-check + COMMAND + nextpnr-fpga_interchange + --chipdb ${chipdb_bin} + --package ${package} + --test + DEPENDS + ${chipdb_bin} + ) + + add_custom_target( + chipdb-${device}-bin-check-test-data + COMMAND + nextpnr-fpga_interchange + --chipdb ${chipdb_bin} + --package ${package} + --run ${root_dir}/python/check_arch_api.py + DEPENDS + ${chipdb_bin} + ${test_data_binary} + ) endfunction() diff --git a/fpga_interchange/examples/devices/CMakeLists.txt b/fpga_interchange/examples/devices/CMakeLists.txt index 6a60d4f8..5b96ac80 100644 --- a/fpga_interchange/examples/devices/CMakeLists.txt +++ b/fpga_interchange/examples/devices/CMakeLists.txt @@ -1,11 +1 @@ -generate_xc7_device_db( - device xc7a35t - part xc7a35tcsg324-1 -) - -generate_chipdb( - device xc7a35t - part xc7a35tcsg324-1 - device_target ${device_target} - bel_bucket_seeds ${PYTHON_INTERCHANGE_PATH}/test_data/series7_bel_buckets.yaml -) +add_subdirectory(xc7a35t) diff --git a/fpga_interchange/examples/devices/xc7a35t/CMakeLists.txt b/fpga_interchange/examples/devices/xc7a35t/CMakeLists.txt new file mode 100644 index 00000000..a7a49751 --- /dev/null +++ b/fpga_interchange/examples/devices/xc7a35t/CMakeLists.txt @@ -0,0 +1,12 @@ +generate_xc7_device_db( + device xc7a35t + part xc7a35tcsg324-1 +) + +generate_chipdb( + device xc7a35t + part xc7a35tcsg324-1 + device_target ${device_target} + bel_bucket_seeds ${PYTHON_INTERCHANGE_PATH}/test_data/series7_bel_buckets.yaml + package csg324 +) diff --git a/fpga_interchange/examples/devices/xc7a35t/test_data.yaml b/fpga_interchange/examples/devices/xc7a35t/test_data.yaml new file mode 100644 index 00000000..268d180a --- /dev/null +++ b/fpga_interchange/examples/devices/xc7a35t/test_data.yaml @@ -0,0 +1,36 @@ +pip_test: + - src_wire: CLBLM_R_X11Y93/CLBLM_L_D3 + dst_wire: SLICE_X15Y93.SLICEL/D3 +pip_chain_test: + - wires: + - $CONSTANTS_X0Y0.$CONSTANTS/$GND_SOURCE + - $CONSTANTS_X0Y0/$GND_NODE + - TIEOFF_X3Y145.TIEOFF/$GND_SITE_WIRE + - TIEOFF_X3Y145.TIEOFF/HARD0GND_HARD0 + - INT_R_X3Y145/GND_WIRE + - wires: + - $CONSTANTS_X0Y0.$CONSTANTS/$VCC_SOURCE + - $CONSTANTS_X0Y0/$VCC_NODE + - TIEOFF_X3Y145.TIEOFF/$VCC_SITE_WIRE + - TIEOFF_X3Y145.TIEOFF/HARD1VCC_HARD1 + - INT_R_X3Y145/VCC_WIRE + - wires: + - $CONSTANTS_X0Y0.$CONSTANTS/$VCC_SOURCE + - $CONSTANTS_X0Y0/$VCC_NODE + - SLICE_X3Y145.SLICEL/$VCC_SITE_WIRE + - SLICE_X3Y145.SLICEL/CEUSEDVCC_HARD1 + - wires: + - $CONSTANTS_X0Y0.$CONSTANTS/$GND_SOURCE + - $CONSTANTS_X0Y0/$GND_NODE + - SLICE_X3Y145.SLICEL/$GND_SITE_WIRE + - SLICE_X3Y145.SLICEL/SRUSEDGND_HARD0 +bel_pin_test: + - bel: SLICE_X15Y93.SLICEL/D6LUT + pin: A3 + wire: SLICE_X15Y93.SLICEL/D3 + - bel: $CONSTANTS_X0Y0.$CONSTANTS/GND + pin: G + wire: $CONSTANTS_X0Y0.$CONSTANTS/$GND_SOURCE + - bel: $CONSTANTS_X0Y0.$CONSTANTS/VCC + pin: P + wire: $CONSTANTS_X0Y0.$CONSTANTS/$VCC_SOURCE 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}) diff --git a/fpga_interchange/family.cmake b/fpga_interchange/family.cmake index cf92ef2e..ec5cdb59 100644 --- a/fpga_interchange/family.cmake +++ b/fpga_interchange/family.cmake @@ -19,6 +19,8 @@ include(${family}/examples/tests.cmake) set(chipdb_dir ${CMAKE_CURRENT_BINARY_DIR}/${family}/chipdb) file(MAKE_DIRECTORY ${chipdb_dir}) +set(root_dir ${CMAKE_CURRENT_SOURCE_DIR}) + add_custom_target(all-${family}-tests) add_subdirectory(${family}/examples/devices) add_subdirectory(${family}/examples/tests) -- cgit v1.2.3