diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 8000b610..1102dbdc 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -62,7 +62,8 @@ if (PRJXRAY_BUILD_TESTING) target_link_libraries(xilinx_xc7series_configuration_test libprjxray gtest_main absl::span) add_test(NAME xilinx_xc7series_configuration_test - COMMAND xilinx_xc7series_configuration_test) + COMMAND xilinx_xc7series_configuration_test + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test_data) add_executable(xilinx_xc7series_configuration_packet_test xilinx/xc7series/configuration_packet_test.cc) diff --git a/lib/test_data/configuration_test.bit b/lib/test_data/configuration_test.bit new file mode 100644 index 00000000..6ef4f5ef Binary files /dev/null and b/lib/test_data/configuration_test.bit differ diff --git a/lib/test_data/configuration_test.debug.bit b/lib/test_data/configuration_test.debug.bit new file mode 100644 index 00000000..3dfd7482 Binary files /dev/null and b/lib/test_data/configuration_test.debug.bit differ diff --git a/lib/test_data/configuration_test.perframecrc.bit b/lib/test_data/configuration_test.perframecrc.bit new file mode 100644 index 00000000..7179e2d3 Binary files /dev/null and b/lib/test_data/configuration_test.perframecrc.bit differ diff --git a/lib/test_data/configuration_test.yaml b/lib/test_data/configuration_test.yaml new file mode 100644 index 00000000..2666355e --- /dev/null +++ b/lib/test_data/configuration_test.yaml @@ -0,0 +1,1680 @@ +! +idcode: 0x362c093 +configuration_ranges: + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 0 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 0 + minor: 42 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 1 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 1 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 2 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 2 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 3 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 3 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 4 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 4 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 5 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 5 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 6 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 6 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 7 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 7 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 8 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 8 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 9 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 9 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 10 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 10 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 11 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 11 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 12 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 12 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 13 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 13 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 14 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 14 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 15 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 15 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 16 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 16 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 17 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 17 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 18 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 18 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 19 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 19 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 20 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 20 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 21 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 21 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 22 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 22 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 23 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 23 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 24 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 24 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 25 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 25 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 26 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 26 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 27 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 27 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 28 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 28 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 29 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 29 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 30 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 30 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 31 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 31 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 32 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 32 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 33 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 33 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 34 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 34 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 35 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 35 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 36 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 36 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 37 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 37 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 38 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 38 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 39 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 39 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 40 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 40 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 41 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 41 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 42 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 42 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 43 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 0 + column: 43 + minor: 42 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 0 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 0 + minor: 42 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 1 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 1 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 2 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 2 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 3 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 3 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 4 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 4 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 5 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 5 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 6 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 6 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 7 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 7 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 8 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 8 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 9 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 9 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 10 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 10 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 11 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 11 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 12 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 12 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 13 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 13 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 14 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 14 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 15 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 15 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 16 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 16 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 17 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 17 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 18 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 18 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 19 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 19 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 20 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 20 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 21 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 21 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 22 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 22 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 23 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 23 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 24 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 24 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 25 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 25 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 26 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 26 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 27 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 27 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 28 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 28 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 29 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 29 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 30 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 30 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 31 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 31 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 32 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 32 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 33 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 33 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 34 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 34 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 35 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 35 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 36 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 36 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 37 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: top + row: 1 + column: 37 + minor: 32 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 0 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 0 + minor: 42 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 1 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 1 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 2 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 2 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 3 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 3 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 4 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 4 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 5 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 5 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 6 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 6 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 7 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 7 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 8 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 8 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 9 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 9 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 10 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 10 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 11 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 11 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 12 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 12 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 13 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 13 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 14 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 14 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 15 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 15 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 16 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 16 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 17 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 17 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 18 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 18 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 19 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 19 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 20 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 20 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 21 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 21 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 22 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 22 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 23 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 23 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 24 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 24 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 25 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 25 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 26 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 26 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 27 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 27 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 28 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 28 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 29 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 29 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 30 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 30 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 31 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 31 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 32 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 32 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 33 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 33 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 34 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 34 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 35 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 35 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 36 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 36 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 37 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 37 + minor: 28 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 38 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 38 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 39 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 39 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 40 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 40 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 41 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 41 + minor: 36 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 42 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 42 + minor: 30 + - ! + begin: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 43 + minor: 0 + end: ! + block_type: CLB_IO_CLK + row_half: bottom + row: 0 + column: 43 + minor: 42 + - ! + begin: ! + block_type: BLOCK_RAM + row_half: top + row: 0 + column: 0 + minor: 0 + end: ! + block_type: BLOCK_RAM + row_half: top + row: 0 + column: 3 + minor: 0 + - ! + begin: ! + block_type: BLOCK_RAM + row_half: top + row: 1 + column: 0 + minor: 0 + end: ! + block_type: BLOCK_RAM + row_half: top + row: 1 + column: 2 + minor: 0 + - ! + begin: ! + block_type: BLOCK_RAM + row_half: bottom + row: 0 + column: 0 + minor: 0 + end: ! + block_type: BLOCK_RAM + row_half: bottom + row: 0 + column: 3 + minor: 0 diff --git a/lib/xilinx/xc7series/configuration_test.cc b/lib/xilinx/xc7series/configuration_test.cc index a1f2a623..62d8facc 100644 --- a/lib/xilinx/xc7series/configuration_test.cc +++ b/lib/xilinx/xc7series/configuration_test.cc @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -106,6 +107,106 @@ TEST(ConfigurationTest, ConstructFromPacketsWithAutoincrement) { absl::Span frame_span(frame); EXPECT_EQ(test_config->part().idcode(), static_cast(0x1234)); EXPECT_EQ(test_config->frames().size(), static_cast(2)); - EXPECT_EQ(test_config->frames().at(0x456F), frame_span.subspan(0, 101)); - EXPECT_EQ(test_config->frames().at(0x4580), frame_span.subspan(101)); + EXPECT_EQ(test_config->frames().at(0x456F), std::vector(101, 0xAA)); + EXPECT_EQ(test_config->frames().at(0x4580), std::vector(101, 0xBB)); +} + +TEST(ConfigurationTest, DebugAndPerFrameCrcBitstreamsProduceEqualConfigurations) { + auto part = xc7series::Part::FromFile("configuration_test.yaml"); + ASSERT_TRUE(part); + + auto debug_bitstream = prjxray::MemoryMappedFile::InitWithFile( + "configuration_test.debug.bit"); + ASSERT_TRUE(debug_bitstream); + + auto debug_reader = xc7series::BitstreamReader::InitWithBytes( + debug_bitstream->as_bytes()); + ASSERT_TRUE(debug_reader); + + auto debug_configuration = xc7series::Configuration::InitWithPackets( + *part, *debug_reader); + ASSERT_TRUE(debug_configuration); + + auto perframecrc_bitstream = prjxray::MemoryMappedFile::InitWithFile( + "configuration_test.perframecrc.bit"); + ASSERT_TRUE(perframecrc_bitstream); + + auto perframecrc_reader = xc7series::BitstreamReader::InitWithBytes( + perframecrc_bitstream->as_bytes()); + ASSERT_TRUE(perframecrc_reader); + + auto perframecrc_configuration = xc7series::Configuration::InitWithPackets( + *part, *perframecrc_reader); + ASSERT_TRUE(perframecrc_configuration); + + for (auto debug_frame : debug_configuration->frames()) { + auto perframecrc_frame = perframecrc_configuration->frames().find(debug_frame.first); + if (perframecrc_frame == perframecrc_configuration->frames().end()) { + ADD_FAILURE() << debug_frame.first << ": missing in perframecrc bitstream"; + continue; + } + + for (int ii = 0; ii < 101; ++ii) { + EXPECT_EQ(perframecrc_frame->second[ii], debug_frame.second[ii]) + << debug_frame.first << ": word " << ii; + } + } + + for (auto perframecrc_frame : perframecrc_configuration->frames()) { + auto debug_frame = debug_configuration->frames().find(perframecrc_frame.first); + if (debug_frame == debug_configuration->frames().end()) { + ADD_FAILURE() << perframecrc_frame.first + << ": unexpectedly present in perframecrc bitstream"; + } + } +} + +TEST(ConfigurationTest, DebugAndNormalBitstreamsProduceEqualConfigurations) { + auto part = xc7series::Part::FromFile("configuration_test.yaml"); + ASSERT_TRUE(part); + + auto debug_bitstream = prjxray::MemoryMappedFile::InitWithFile( + "configuration_test.debug.bit"); + ASSERT_TRUE(debug_bitstream); + + auto debug_reader = xc7series::BitstreamReader::InitWithBytes( + debug_bitstream->as_bytes()); + ASSERT_TRUE(debug_reader); + + auto debug_configuration = xc7series::Configuration::InitWithPackets( + *part, *debug_reader); + ASSERT_TRUE(debug_configuration); + + auto normal_bitstream = prjxray::MemoryMappedFile::InitWithFile( + "configuration_test.bit"); + ASSERT_TRUE(normal_bitstream); + + auto normal_reader = xc7series::BitstreamReader::InitWithBytes( + normal_bitstream->as_bytes()); + ASSERT_TRUE(normal_reader); + + auto normal_configuration = xc7series::Configuration::InitWithPackets( + *part, *normal_reader); + ASSERT_TRUE(normal_configuration); + + for (auto debug_frame : debug_configuration->frames()) { + auto normal_frame = normal_configuration->frames().find(debug_frame.first); + if (normal_frame == normal_configuration->frames().end()) { + ADD_FAILURE() << debug_frame.first << ": missing in normal bitstream"; + continue; + } + + for (int ii = 0; ii < 101; ++ii) { + EXPECT_EQ(normal_frame->second[ii], debug_frame.second[ii]) + << debug_frame.first << ": word " << ii; + } + } + + for (auto normal_frame : normal_configuration->frames()) { + auto debug_frame = debug_configuration->frames().find(normal_frame.first); + if (debug_frame == debug_configuration->frames().end()) { + ADD_FAILURE() << normal_frame.first + << ": unexpectedly present in normal bitstream"; + } + } }