From 5a664c04ec92b83d63d89cce9c89edce9b2ae039 Mon Sep 17 00:00:00 2001 From: Rick Altherr Date: Thu, 4 Jan 2018 15:33:15 -0800 Subject: [PATCH] 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