| #ifndef PRJXRAY_LIB_XILINX_XCUPSERIES_FRAME_ADDRESS_H_ |
| #define PRJXRAY_LIB_XILINX_XCUPSERIES_FRAME_ADDRESS_H_ |
| |
| #include <cstdint> |
| #include <ostream> |
| |
| #include <prjxray/xilinx/xcupseries/block_type.h> |
| #include <yaml-cpp/yaml.h> |
| |
| #ifdef _GNU_SOURCE |
| #undef minor |
| #endif |
| |
| namespace prjxray { |
| namespace xilinx { |
| namespace xcupseries { |
| |
| enum Ranges { |
| BLOCK_TYPE_HIGH = 26, |
| BLOCK_TYPE_LOW = 24, |
| ROW_HIGH = 23, |
| ROW_LOW = 18, |
| COLUMN_HIGH = 17, |
| COLUMN_LOW = 8, |
| MINOR_HIGH = 7, |
| MINOR_LOW = 0 |
| }; |
| |
| class FrameAddress { |
| public: |
| FrameAddress() : address_(0) {} |
| |
| FrameAddress(uint32_t address) : address_(address){}; |
| |
| FrameAddress(BlockType block_type, |
| 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() const; |
| uint16_t column() const; |
| uint8_t minor() const; |
| |
| private: |
| uint32_t address_; |
| }; |
| |
| std::ostream& operator<<(std::ostream& o, const FrameAddress& addr); |
| |
| } // namespace xcupseries |
| } // namespace xilinx |
| } // namespace prjxray |
| |
| namespace YAML { |
| template <> |
| struct convert<prjxray::xilinx::xcupseries::FrameAddress> { |
| static Node encode(const prjxray::xilinx::xcupseries::FrameAddress& rhs); |
| static bool decode(const Node& node, |
| prjxray::xilinx::xcupseries::FrameAddress& lhs); |
| }; |
| |
| } // namespace YAML |
| |
| #endif // PRJXRAY_LIB_XILINX_XCUPSERIES_FRAME_ADDRESS_H_ |