From a4858be23ac6a51cfb863502aadca1feb3d20569 Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Thu, 4 Jan 2018 11:15:25 -0800 Subject: [PATCH 1/5] lib: accessor to get contents of a memory-mapped file as bytes MemoryMappedFile's data() method returns a void* as it has no idea what type the contents are. Viewing it as bytes is a very common operation so add a convience method that wraps the pointer in a Span. Signed-off-by: Rick Altherr --- lib/include/prjxray/memory_mapped_file.h | 6 ++++++ lib/include/prjxray/xilinx/xc7series/bitstream_reader.h | 4 ++-- tools/bitread.cc | 6 ++---- tools/bittool.cc | 6 ++---- tools/gen_part_base_yaml.cc | 6 ++---- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/include/prjxray/memory_mapped_file.h b/lib/include/prjxray/memory_mapped_file.h index 6ed4e4ec..c2fd955d 100644 --- a/lib/include/prjxray/memory_mapped_file.h +++ b/lib/include/prjxray/memory_mapped_file.h @@ -4,6 +4,8 @@ #include #include +#include + namespace prjxray { class MemoryMappedFile { @@ -16,6 +18,10 @@ class MemoryMappedFile { void* const data() const { return data_; } const size_t size() const { return size_; } + absl::Span as_bytes() const { + return {static_cast(data_), size_}; + } + private: MemoryMappedFile(void *data, size_t size) : data_(data), size_(size) {}; diff --git a/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h b/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h index 7b6ad034..fad41bde 100644 --- a/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h +++ b/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h @@ -47,7 +47,7 @@ class BitstreamReader { // Construct a `BitstreamReader` from a Container of bytes. // Any bytes preceding an initial sync word are ignored. template - static absl::optional InitWithBytes(T &bitstream); + static absl::optional InitWithBytes(T bitstream); const std::vector &words() { return words_; }; @@ -62,7 +62,7 @@ class BitstreamReader { }; template -absl::optional BitstreamReader::InitWithBytes(T &bitstream) { +absl::optional BitstreamReader::InitWithBytes(T bitstream) { // If this is really a Xilinx 7-Series bitstream, there will be a sync // word somewhere toward the beginning. auto sync_pos = std::search(bitstream.begin(), bitstream.end(), diff --git a/tools/bitread.cc b/tools/bitread.cc index 3b81b57c..e00b4b24 100644 --- a/tools/bitread.cc +++ b/tools/bitread.cc @@ -78,10 +78,8 @@ int main(int argc, char **argv) { std::cout << "Bitstream size: " << in_file->size() << " bytes" << std::endl; - auto in_bytes = absl::Span( - static_cast(in_file->data()), - in_file->size()); - reader = xc7series::BitstreamReader::InitWithBytes(in_bytes); + reader = xc7series::BitstreamReader::InitWithBytes( + in_file->as_bytes()); } else { std::vector bitdata; while (1) { diff --git a/tools/bittool.cc b/tools/bittool.cc index 9bcd039c..38fb8800 100644 --- a/tools/bittool.cc +++ b/tools/bittool.cc @@ -31,10 +31,8 @@ int ListConfigPackets(int argc, char *argv[]) { return 1; } - auto in_bytes = absl::Span( - static_cast(in_file->data()), - in_file->size()); - auto reader = xc7series::BitstreamReader::InitWithBytes(in_bytes); + auto reader = xc7series::BitstreamReader::InitWithBytes( + in_file->as_bytes()); if (!reader) { std::cerr << "Input doesn't look like a bitstream" << std::endl; diff --git a/tools/gen_part_base_yaml.cc b/tools/gen_part_base_yaml.cc index 41cfef07..ca77995d 100644 --- a/tools/gen_part_base_yaml.cc +++ b/tools/gen_part_base_yaml.cc @@ -31,10 +31,8 @@ int main(int argc, char *argv[]) { return 1; } - auto in_bytes = absl::Span( - static_cast(in_file->data()), - in_file->size()); - auto reader = xc7series::BitstreamReader::InitWithBytes(in_bytes); + auto reader = xc7series::BitstreamReader::InitWithBytes( + in_file->as_bytes()); if (!reader) { std::cerr << "Input doesn't look like a bitstream" << std::endl; From 0d2c33bf0fdfecee79622f9723f0cd813671614b Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Thu, 4 Jan 2018 14:58:57 -0800 Subject: [PATCH 2/5] lib: xc7series: ostream operator for ConfigurationFrameAddress Writes a decoded version of the address to the stream. Handy for logging. Signed-off-by: Rick Altherr --- .../xc7series/configuration_frame_address.h | 4 ++++ .../xc7series/configuration_frame_address.cc | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h b/lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h index fe5cb89c..82c8ef9a 100644 --- a/lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h +++ b/lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h @@ -2,6 +2,7 @@ #define PRJXRAY_LIB_XILINX_XC7SERIES_CONFIGURATION_FRAME_ADDRESS_H_ #include +#include #include #include @@ -34,6 +35,9 @@ class ConfigurationFrameAddress { uint32_t address_; }; +std::ostream &operator<<( + std::ostream &o, const ConfigurationFrameAddress& addr); + } // namespace xc7series } // namespace xilinx } // namespace prjxray diff --git a/lib/xilinx/xc7series/configuration_frame_address.cc b/lib/xilinx/xc7series/configuration_frame_address.cc index 5bcf48af..826e1209 100644 --- a/lib/xilinx/xc7series/configuration_frame_address.cc +++ b/lib/xilinx/xc7series/configuration_frame_address.cc @@ -1,5 +1,7 @@ #include +#include + #include namespace prjxray { @@ -37,6 +39,27 @@ uint8_t ConfigurationFrameAddress::minor_address() const { return bit_field_get(address_, 6, 0); } +std::ostream &operator<<( + std::ostream &o, const ConfigurationFrameAddress& addr) { + o << "[" + << std::hex << std::showbase << std::setw(10) + << static_cast(addr) + << "] " + << (addr.is_bottom_half_rows() ? "BOTTOM" : "TOP") + << " Row=" + << std::setw(2) << std::dec + << static_cast(addr.row_address()) + << " Column=" + << std::setw(2) << std::dec + << addr.column_address() + << " Minor=" + << std::setw(2) << std::dec + << static_cast(addr.minor_address()) + << " Type=" + << addr.block_type(); + return o; +} + } // namespace xc7series } // namespace xilinx } // namespace prjxray From 6ba411294ed8e8976f1dd2a652df04ea5defd9e0 Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Thu, 4 Jan 2018 15:11:00 -0800 Subject: [PATCH 3/5] lib: xc7series: verify bitstream variants parse to same configurations Normal, debug, and per-frame CRC bitstreams differ in the commands used to write the frame data but should generate equivalent configurations. Note that this currently fails as something is wrong with normal bitstream parsing. Signed-off-by: Rick Altherr --- lib/CMakeLists.txt | 3 +- lib/test_data/configuration_test.bit | Bin 0 -> 2192111 bytes lib/test_data/configuration_test.debug.bit | Bin 0 -> 2257007 bytes .../configuration_test.perframecrc.bit | Bin 0 -> 2298099 bytes lib/test_data/configuration_test.yaml | 1680 +++++++++++++++++ lib/xilinx/xc7series/configuration_test.cc | 105 +- 6 files changed, 1785 insertions(+), 3 deletions(-) create mode 100644 lib/test_data/configuration_test.bit create mode 100644 lib/test_data/configuration_test.debug.bit create mode 100644 lib/test_data/configuration_test.perframecrc.bit create mode 100644 lib/test_data/configuration_test.yaml 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 0000000000000000000000000000000000000000..6ef4f5effd0c2204ccfd4e6d18993a376ff84bee GIT binary patch literal 2192111 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWWo{ z_I;tdVh05No+3G!acQ5VQn!3AI^DI|f-TT#9-aOkzfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjYOOW@A0=ej+EK}44R-G1qKuA5x07e#q7*XYDW zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk zc?lfo<`vHyMbmntiKY=CK!CtR1)NVN%5UWa2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyFkyi^e|y3K+{o$&H!_oX2oNAZfB*pk1PBnA zc7Y@RVG6dOnt~X|7~+A>7%SWDs`|UV0`(IhK!5-N0t9wXz;)N|*{XSV1nejIwWT)6 zuT4ahpTM3^?P5&r@z(vVpBQg_Y9l~^009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!Ct( z39J@H>)mg<{E0F)EB#w7s#avZO~ZTAuz&d&4BKd~X``~W=j*B6E=Rk~wN{JuVP3R; g|BL7U`KaB7%iJ+4%kybZZJ{l^2fPQS;XUyG0gk7izyJUM literal 0 HcmV?d00001 diff --git a/lib/test_data/configuration_test.debug.bit b/lib/test_data/configuration_test.debug.bit new file mode 100644 index 0000000000000000000000000000000000000000..3dfd7482726fae3143cfd595c1a8cc518e6904fc GIT binary patch literal 2257007 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 zjVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT z_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt( z4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T z_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj# zjVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT z_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt(4Xz_T_)mj#jVdQT_)nt( z4X(4`^FI8i!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{6 z5g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g z!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR42 z6CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDi zQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{6 z5g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g z!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR42 z6CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDi zQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{6 z5g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g z!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR426CeDiQGo{65g+`g!MR42 z6CeDiQGo{6S@5}v|1>z)sB+?i|1>Jl;5y=i|1>z)sB+?i|1>Jl;5y=i|1>z)sB+?i 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 literal 0 HcmV?d00001 diff --git a/lib/test_data/configuration_test.perframecrc.bit b/lib/test_data/configuration_test.perframecrc.bit new file mode 100644 index 0000000000000000000000000000000000000000..7179e2d32cb29210a1d084aa4e4d676424494316 GIT binary patch literal 2298099 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 +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"; + } + } } From 6222be77d33d3b92bb8b7f272ff456750d81dbdf Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Thu, 4 Jan 2018 15:14:08 -0800 Subject: [PATCH 4/5] lib: xc7series: Account for padding between rows in bitstreams There seem to be 2 frames of padding between rows in a bitstream. For single-frame writes, these are parsed as type 0 packets and ignored. Normal bitstreams use a single FDRI write that apparently includes this padding and needs to be ignored in the auto-increment handling. Signed-off-by: Rick Altherr --- .../prjxray/xilinx/xc7series/configuration.h | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/include/prjxray/xilinx/xc7series/configuration.h b/lib/include/prjxray/xilinx/xc7series/configuration.h index 8d9984a5..2ed63e38 100644 --- a/lib/include/prjxray/xilinx/xc7series/configuration.h +++ b/lib/include/prjxray/xilinx/xc7series/configuration.h @@ -112,20 +112,25 @@ absl::optional Configuration::InitWithPackets( // 7-series frames are 101-words long. Writes to this // register can be multiples of that to do // auto-incrementing block writes. - int frames_written = packet.data().size() / - kWordsPerFrame; - - for (int ii = 0; ii < frames_written; ++ii) { + for (size_t ii = 0; + ii < packet.data().size(); + ii += kWordsPerFrame) { frames[current_frame_address] = packet.data().subspan( - ii * kWordsPerFrame, - kWordsPerFrame); + ii, kWordsPerFrame); + auto next_address = part.GetNextConfigurationFrameAddress( current_frame_address); - if (next_address) { - current_frame_address = *next_address; + if (!next_address) break; + + // Bitstreams appear to have 2 frames of + // padding between rows. + if (next_address->row_address() != + current_frame_address.row_address()) { + ii += 2 * kWordsPerFrame; } + current_frame_address = *next_address; } break; } From 5a664c04ec92b83d63d89cce9c89edce9b2ae039 Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Thu, 4 Jan 2018 15:33:15 -0800 Subject: [PATCH 5/5] lib: xc7series: shorten ConfigurationFrameAddress to FrameAddress Frame addresses are only used in the context of configuration frames. Remove the prefix to reduce typing that does not improve clarity. Signed-off-by: Rick Altherr --- lib/CMakeLists.txt | 12 ++--- .../prjxray/xilinx/xc7series/configuration.h | 9 ++-- .../xc7series/configuration_frame_address.h | 53 ------------------- .../xc7series/configuration_frame_range.h | 15 +++--- .../prjxray/xilinx/xc7series/frame_address.h | 50 +++++++++++++++++ lib/include/prjxray/xilinx/xc7series/part.h | 7 ++- .../xc7series/configuration_frame_range.cc | 7 ++- ...tion_frame_address.cc => frame_address.cc} | 36 ++++++------- ..._address_test.cc => frame_address_test.cc} | 19 ++++--- lib/xilinx/xc7series/part.cc | 8 +-- lib/xilinx/xc7series/part_test.cc | 6 +-- tools/frame_address_decoder.cc | 4 +- tools/gen_part_base_yaml.cc | 1 - 13 files changed, 108 insertions(+), 119 deletions(-) delete mode 100644 lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h create mode 100644 lib/include/prjxray/xilinx/xc7series/frame_address.h rename lib/xilinx/xc7series/{configuration_frame_address.cc => frame_address.cc} (67%) rename lib/xilinx/xc7series/{configuration_frame_address_test.cc => frame_address_test.cc} (60%) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1102dbdc..4a01fbec 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -4,7 +4,7 @@ add_library(libprjxray segbits_file_reader.cc xilinx/xc7series/bitstream_reader.cc xilinx/xc7series/block_type.cc - xilinx/xc7series/configuration_frame_address.cc + xilinx/xc7series/frame_address.cc xilinx/xc7series/configuration_frame_range.cc xilinx/xc7series/configuration_packet.cc xilinx/xc7series/configuration_register.cc @@ -50,12 +50,12 @@ if (PRJXRAY_BUILD_TESTING) add_test(NAME xilinx_xc7series_block_type_test COMMAND xilinx_xc7series_block_type_test) - add_executable(xilinx_xc7series_configuration_frame_address_test - xilinx/xc7series/configuration_frame_address_test.cc) - target_link_libraries(xilinx_xc7series_configuration_frame_address_test + add_executable(xilinx_xc7series_frame_address_test + xilinx/xc7series/frame_address_test.cc) + target_link_libraries(xilinx_xc7series_frame_address_test libprjxray gtest_main absl::span) - add_test(NAME xilinx_xc7series_configuration_frame_address_test - COMMAND xilinx_xc7series_configuration_frame_address_test) + add_test(NAME xilinx_xc7series_frame_address_test + COMMAND xilinx_xc7series_frame_address_test) add_executable(xilinx_xc7series_configuration_test xilinx/xc7series/configuration_test.cc) diff --git a/lib/include/prjxray/xilinx/xc7series/configuration.h b/lib/include/prjxray/xilinx/xc7series/configuration.h index 2ed63e38..7fa643ab 100644 --- a/lib/include/prjxray/xilinx/xc7series/configuration.h +++ b/lib/include/prjxray/xilinx/xc7series/configuration.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include namespace prjxray { @@ -15,7 +15,7 @@ namespace xc7series { class Configuration { public: - using FrameMap = std::map>; template @@ -46,7 +46,7 @@ absl::optional Configuration::InitWithPackets( // Internal state machine for writes. bool start_new_write = false; - ConfigurationFrameAddress current_frame_address = 0; + FrameAddress current_frame_address = 0; Configuration::FrameMap frames; for (auto packet : packets) { @@ -119,8 +119,7 @@ absl::optional Configuration::InitWithPackets( packet.data().subspan( ii, kWordsPerFrame); - auto next_address = - part.GetNextConfigurationFrameAddress( + auto next_address = part.GetNextFrameAddress( current_frame_address); if (!next_address) break; diff --git a/lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h b/lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h deleted file mode 100644 index 82c8ef9a..00000000 --- a/lib/include/prjxray/xilinx/xc7series/configuration_frame_address.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef PRJXRAY_LIB_XILINX_XC7SERIES_CONFIGURATION_FRAME_ADDRESS_H_ -#define PRJXRAY_LIB_XILINX_XC7SERIES_CONFIGURATION_FRAME_ADDRESS_H_ - -#include -#include - -#include -#include - -namespace prjxray { -namespace xilinx { -namespace xc7series { - -class ConfigurationFrameAddress { - public: - ConfigurationFrameAddress() - : address_(0) {} - - ConfigurationFrameAddress(uint32_t address) - : address_(address) {}; - - ConfigurationFrameAddress( - BlockType block_type, bool is_bottom_half_rows, - uint8_t row, uint16_t column, uint8_t minor); - - operator uint32_t() const { return address_; } - - BlockType block_type() const; - bool is_bottom_half_rows() const; - uint8_t row_address() const; - uint16_t column_address() const; - uint8_t minor_address() const; - - private: - uint32_t address_; -}; - -std::ostream &operator<<( - std::ostream &o, const ConfigurationFrameAddress& addr); - -} // namespace xc7series -} // namespace xilinx -} // namespace prjxray - -namespace YAML { -template<> -struct convert { - static Node encode(const prjxray::xilinx::xc7series::ConfigurationFrameAddress &rhs); - static bool decode(const Node& node, - prjxray::xilinx::xc7series::ConfigurationFrameAddress &lhs); -}; -} // namespace YAML -#endif // PRJXRAY_LIB_XILINX_XC7SERIES_CONFIGURATION_FRAME_ADDRESS_H_ diff --git a/lib/include/prjxray/xilinx/xc7series/configuration_frame_range.h b/lib/include/prjxray/xilinx/xc7series/configuration_frame_range.h index 97690d69..4445871b 100644 --- a/lib/include/prjxray/xilinx/xc7series/configuration_frame_range.h +++ b/lib/include/prjxray/xilinx/xc7series/configuration_frame_range.h @@ -3,7 +3,7 @@ #include -#include +#include #include namespace prjxray { @@ -14,21 +14,20 @@ class ConfigurationFrameRange { public: ConfigurationFrameRange() : begin_(0), end_(0) {} - ConfigurationFrameRange(ConfigurationFrameAddress begin, - ConfigurationFrameAddress end) + ConfigurationFrameRange(FrameAddress begin, FrameAddress end) : begin_(begin), end_(end) {}; - ConfigurationFrameAddress begin() const { return begin_; } - ConfigurationFrameAddress end() const { return end_; } + FrameAddress begin() const { return begin_; } + FrameAddress end() const { return end_; } size_t size() const { return end_ - begin_; } bool empty() const { return size() == 0; } - bool Contains(ConfigurationFrameAddress address) const; + bool Contains(FrameAddress address) const; private: - ConfigurationFrameAddress begin_; - ConfigurationFrameAddress end_; + FrameAddress begin_; + FrameAddress end_; }; } // namespace xc7series diff --git a/lib/include/prjxray/xilinx/xc7series/frame_address.h b/lib/include/prjxray/xilinx/xc7series/frame_address.h new file mode 100644 index 00000000..88ef7e82 --- /dev/null +++ b/lib/include/prjxray/xilinx/xc7series/frame_address.h @@ -0,0 +1,50 @@ +#ifndef PRJXRAY_LIB_XILINX_XC7SERIES_FRAME_ADDRESS_H_ +#define PRJXRAY_LIB_XILINX_XC7SERIES_FRAME_ADDRESS_H_ + +#include +#include + +#include +#include + +namespace prjxray { +namespace xilinx { +namespace xc7series { + +class FrameAddress { + public: + FrameAddress() : address_(0) {} + + FrameAddress(uint32_t address) + : address_(address) {}; + + FrameAddress(BlockType block_type, bool is_bottom_half_rows, + uint8_t row, uint16_t column, uint8_t minor); + + operator uint32_t() const { return address_; } + + BlockType block_type() const; + bool is_bottom_half_rows() const; + uint8_t row_address() const; + uint16_t column_address() const; + uint8_t minor_address() const; + + private: + uint32_t address_; +}; + +std::ostream &operator<<(std::ostream &o, const FrameAddress& addr); + +} // namespace xc7series +} // namespace xilinx +} // namespace prjxray + +namespace YAML { +template<> +struct convert { + static Node encode(const prjxray::xilinx::xc7series::FrameAddress &rhs); + static bool decode(const Node& node, + prjxray::xilinx::xc7series::FrameAddress &lhs); +}; +} // namespace YAML +#endif // PRJXRAY_LIB_XILINX_XC7SERIES_FRAME_ADDRESS_H_ diff --git a/lib/include/prjxray/xilinx/xc7series/part.h b/lib/include/prjxray/xilinx/xc7series/part.h index 7d674f33..5ffe891d 100644 --- a/lib/include/prjxray/xilinx/xc7series/part.h +++ b/lib/include/prjxray/xilinx/xc7series/part.h @@ -4,7 +4,7 @@ #include #include -#include +#include #include namespace prjxray { @@ -28,9 +28,8 @@ class Part { const std::vector& configuration_frame_ranges() const { return frame_ranges_; } - absl::optional - GetNextConfigurationFrameAddress( - ConfigurationFrameAddress address) const; + absl::optional + GetNextFrameAddress(FrameAddress address) const; private: uint32_t idcode_; diff --git a/lib/xilinx/xc7series/configuration_frame_range.cc b/lib/xilinx/xc7series/configuration_frame_range.cc index 9113005d..b4f73a5f 100644 --- a/lib/xilinx/xc7series/configuration_frame_range.cc +++ b/lib/xilinx/xc7series/configuration_frame_range.cc @@ -4,8 +4,7 @@ namespace prjxray { namespace xilinx { namespace xc7series { -bool ConfigurationFrameRange::Contains( - ConfigurationFrameAddress address) const { +bool ConfigurationFrameRange::Contains(FrameAddress address) const { return address >= begin_ && address < end_; } @@ -34,8 +33,8 @@ bool convert::decode( !node["end"]) return false; lhs = xc7series::ConfigurationFrameRange( - node["begin"].as(), - node["end"].as()); + node["begin"].as(), + node["end"].as()); return true; } diff --git a/lib/xilinx/xc7series/configuration_frame_address.cc b/lib/xilinx/xc7series/frame_address.cc similarity index 67% rename from lib/xilinx/xc7series/configuration_frame_address.cc rename to lib/xilinx/xc7series/frame_address.cc index 826e1209..4f885816 100644 --- a/lib/xilinx/xc7series/configuration_frame_address.cc +++ b/lib/xilinx/xc7series/frame_address.cc @@ -1,4 +1,4 @@ -#include +#include #include @@ -8,10 +8,8 @@ namespace prjxray { namespace xilinx { namespace xc7series { - -ConfigurationFrameAddress::ConfigurationFrameAddress( - BlockType block_type, bool is_bottom_half_rows, - uint8_t row, uint16_t column, uint8_t minor) { +FrameAddress::FrameAddress(BlockType block_type, bool is_bottom_half_rows, + uint8_t row, uint16_t column, uint8_t minor) { address_ = bit_field_set(0, 25, 23, block_type); address_ = bit_field_set(address_, 22, 22, is_bottom_half_rows); address_ = bit_field_set(address_, 21, 17, row); @@ -19,28 +17,27 @@ ConfigurationFrameAddress::ConfigurationFrameAddress( address_ = bit_field_set(address_, 6, 0, minor); } -BlockType ConfigurationFrameAddress::block_type() const { +BlockType FrameAddress::block_type() const { return static_cast(bit_field_get(address_, 25, 23)); } -bool ConfigurationFrameAddress::is_bottom_half_rows() const { +bool FrameAddress::is_bottom_half_rows() const { return bit_field_get(address_, 22, 22); } -uint8_t ConfigurationFrameAddress::row_address() const { +uint8_t FrameAddress::row_address() const { return bit_field_get(address_, 21, 17); } -uint16_t ConfigurationFrameAddress::column_address() const { +uint16_t FrameAddress::column_address() const { return bit_field_get(address_, 16, 7); } -uint8_t ConfigurationFrameAddress::minor_address() const { +uint8_t FrameAddress::minor_address() const { return bit_field_get(address_, 6, 0); } -std::ostream &operator<<( - std::ostream &o, const ConfigurationFrameAddress& addr) { +std::ostream &operator<<(std::ostream &o, const FrameAddress& addr) { o << "[" << std::hex << std::showbase << std::setw(10) << static_cast(addr) @@ -68,10 +65,10 @@ namespace YAML { namespace xc7series = prjxray::xilinx::xc7series; -Node convert::encode( - const xc7series::ConfigurationFrameAddress &rhs) { +Node convert::encode( + const xc7series::FrameAddress &rhs) { Node node; - node.SetTag("xilinx/xc7series/configuration_frame_address"); + node.SetTag("xilinx/xc7series/frame_address"); node["block_type"] = rhs.block_type(); node["row_half"] = (rhs.is_bottom_half_rows() ? "bottom" : "top"); node["row"] = static_cast(rhs.row_address()); @@ -80,9 +77,10 @@ Node convert::encode( return node; } -bool convert::decode( - const Node &node, xc7series::ConfigurationFrameAddress &lhs) { - if (node.Tag() != "xilinx/xc7series/configuration_frame_address" || +bool convert::decode( + const Node &node, xc7series::FrameAddress &lhs) { + if (!(node.Tag() == "xilinx/xc7series/frame_address" || + node.Tag() == "xilinx/xc7series/configuration_frame_address") || !node["block_type"] || !node["row_half"] || !node["row"] || @@ -98,7 +96,7 @@ bool convert::decode( return false; } - lhs = prjxray::xilinx::xc7series::ConfigurationFrameAddress( + lhs = prjxray::xilinx::xc7series::FrameAddress( node["block_type"].as(), row_half, node["row"].as(), diff --git a/lib/xilinx/xc7series/configuration_frame_address_test.cc b/lib/xilinx/xc7series/frame_address_test.cc similarity index 60% rename from lib/xilinx/xc7series/configuration_frame_address_test.cc rename to lib/xilinx/xc7series/frame_address_test.cc index 3574b488..b44f5736 100644 --- a/lib/xilinx/xc7series/configuration_frame_address_test.cc +++ b/lib/xilinx/xc7series/frame_address_test.cc @@ -1,17 +1,16 @@ -#include +#include #include namespace xc7series = prjxray::xilinx::xc7series; -TEST(ConfigurationFrameAddressTest, YamlEncode) { - xc7series::ConfigurationFrameAddress address( - xc7series::BlockType::BLOCK_RAM, - false, 10, 0, 5); +TEST(FrameAddressTest, YamlEncode) { + xc7series::FrameAddress address(xc7series::BlockType::BLOCK_RAM, + false, 10, 0, 5); YAML::Node node(address); - EXPECT_EQ(node.Tag(), "xilinx/xc7series/configuration_frame_address"); + EXPECT_EQ(node.Tag(), "xilinx/xc7series/frame_address"); EXPECT_EQ(node["block_type"].as(), "BLOCK_RAM"); EXPECT_EQ(node["row_half"].as(), "top"); EXPECT_EQ(node["row"].as(), "10"); @@ -19,17 +18,17 @@ TEST(ConfigurationFrameAddressTest, YamlEncode) { EXPECT_EQ(node["minor"].as(), "5"); } -TEST(ConfigurationFrameAddressTest, YamlDecode) { +TEST(FrameAddressTest, YamlDecode) { YAML::Node node; - node.SetTag("xilinx/xc7series/configuration_frame_address"); + node.SetTag("xilinx/xc7series/frame_address"); node["block_type"] = "BLOCK_RAM"; node["row_half"] = "bottom"; node["row"] = "0"; node["column"] = "5"; node["minor"] = "11"; - xc7series::ConfigurationFrameAddress address = - node.as(); + xc7series::FrameAddress address = + node.as(); EXPECT_EQ(address.block_type(), xc7series::BlockType::BLOCK_RAM); EXPECT_TRUE(address.is_bottom_half_rows()); EXPECT_EQ(address.row_address(), 0); diff --git a/lib/xilinx/xc7series/part.cc b/lib/xilinx/xc7series/part.cc index 456565af..448b6cc6 100644 --- a/lib/xilinx/xc7series/part.cc +++ b/lib/xilinx/xc7series/part.cc @@ -16,16 +16,16 @@ absl::optional Part::FromFile(const std::string &path) { } } -absl::optional -Part::GetNextConfigurationFrameAddress(ConfigurationFrameAddress address) const { +absl::optional +Part::GetNextFrameAddress(FrameAddress address) const { // Start with the next linear address. - ConfigurationFrameAddress target_address(address + 1); + FrameAddress target_address(address + 1); // The address space is non-continguous. If the next linear address // happens to fall in a valid range, that's the next address. // Otherwise, find the closest valid range and use it's beginning // address. - absl::optional closest_address; + absl::optional closest_address; int32_t closest_distance; for (auto iter = frame_ranges_.begin(); iter != frame_ranges_.end(); diff --git a/lib/xilinx/xc7series/part_test.cc b/lib/xilinx/xc7series/part_test.cc index 0c65d7de..45c8c701 100644 --- a/lib/xilinx/xc7series/part_test.cc +++ b/lib/xilinx/xc7series/part_test.cc @@ -11,7 +11,7 @@ TEST(PartTest, GetNextAddressWhereNextIsInValidRange) { xc7series::Part part(0x1234, ranges); - auto next_address = part.GetNextConfigurationFrameAddress(0x4); + auto next_address = part.GetNextFrameAddress(0x4); EXPECT_TRUE(next_address); EXPECT_EQ(static_cast(0x5), *next_address); } @@ -23,7 +23,7 @@ TEST(PartTest, GetNextAddressWhereNextIsBetweenRanges) { xc7series::Part part(0x1234, ranges); - auto next_address = part.GetNextConfigurationFrameAddress(0xF); + auto next_address = part.GetNextFrameAddress(0xF); EXPECT_TRUE(next_address); EXPECT_EQ(static_cast(0x20), *next_address); } @@ -35,6 +35,6 @@ TEST(PartTest, GetNextAddressWhereNextWouldBePastLastRange) { xc7series::Part part(0x1234, ranges); - auto next_address = part.GetNextConfigurationFrameAddress(0x2F); + auto next_address = part.GetNextFrameAddress(0x2F); EXPECT_FALSE(next_address); } diff --git a/tools/frame_address_decoder.cc b/tools/frame_address_decoder.cc index 858c7232..c4a64618 100644 --- a/tools/frame_address_decoder.cc +++ b/tools/frame_address_decoder.cc @@ -2,7 +2,7 @@ #include #include -#include +#include namespace xc7series = prjxray::xilinx::xc7series; @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) { for (uint32_t frame_address_raw; (*input_stream) >> std::setbase(0) >> frame_address_raw; ) { - xc7series::ConfigurationFrameAddress frame_address(frame_address_raw); + xc7series::FrameAddress frame_address(frame_address_raw); std::cout << "[" << std::hex << std::showbase << std::setw(10) << frame_address_raw diff --git a/tools/gen_part_base_yaml.cc b/tools/gen_part_base_yaml.cc index ca77995d..79fe183b 100644 --- a/tools/gen_part_base_yaml.cc +++ b/tools/gen_part_base_yaml.cc @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include