HALDLS
arq.h
Go to the documentation of this file.
1 #pragma once
2 #include <array>
3 #include <iosfwd>
4 
5 #include "halco/common/geometry.h"
6 #include "halco/hicann-dls/vx/highspeed_link.h"
7 
8 #include "haldls/cerealization.h"
9 #include "haldls/vx/genpybind.h"
10 #include "haldls/vx/traits.h"
11 #include "hate/visibility.h"
12 
14 class OmnibusAddress;
15 } // namespace halco::hicann_dls::vx
16 
17 namespace haldls {
18 namespace vx GENPYBIND_TAG_HALDLS_VX {
19 
20 class GENPYBIND(visible) HicannARQStatus
21 {
22 public:
23  typedef halco::hicann_dls::vx::HicannARQStatusOnFPGA coordinate_type;
24  typedef std::true_type is_leaf_node;
25 
29  struct GENPYBIND(inline_base("*")) ReadCount
30  : public halco::common::detail::BaseType<ReadCount, uint32_t>
31  {
32  constexpr explicit ReadCount(uintmax_t const val = 0)
33  GENPYBIND(implicit_conversion) : base_t(val)
34  {}
35  };
36 
40  struct GENPYBIND(inline_base("*")) WriteCount
41  : public halco::common::detail::BaseType<WriteCount, uint32_t>
42  {
43  constexpr explicit WriteCount(uintmax_t const val = 0)
44  GENPYBIND(implicit_conversion) : base_t(val)
45  {}
46  };
47 
51  struct GENPYBIND(inline_base("*")) RxCount
52  : public halco::common::detail::BaseType<RxCount, uint32_t>
53  {
54  constexpr explicit RxCount(uintmax_t const val = 0)
55  GENPYBIND(implicit_conversion) : base_t(val)
56  {}
57  };
58 
62  struct GENPYBIND(inline_base("*")) TxCount
63  : public halco::common::detail::BaseType<TxCount, uint32_t>
64  {
65  constexpr explicit TxCount(uintmax_t const val = 0)
66  GENPYBIND(implicit_conversion) : base_t(val)
67  {}
68  };
69 
70  HicannARQStatus() SYMBOL_VISIBLE;
71 
72  GENPYBIND(getter_for(read_count))
73  ReadCount get_read_count() const SYMBOL_VISIBLE;
74  GENPYBIND(setter_for(read_count))
75  void set_read_count(ReadCount value) SYMBOL_VISIBLE;
76 
77  GENPYBIND(getter_for(write_count))
78  WriteCount get_write_count() const SYMBOL_VISIBLE;
79  GENPYBIND(setter_for(write_count))
80  void set_write_count(WriteCount value) SYMBOL_VISIBLE;
81 
82  GENPYBIND(getter_for(rx_count))
83  RxCount get_rx_count() const SYMBOL_VISIBLE;
84  GENPYBIND(setter_for(rx_count))
85  void set_rx_count(RxCount value) SYMBOL_VISIBLE;
86 
87  GENPYBIND(getter_for(tx_count))
88  TxCount get_tx_count() const SYMBOL_VISIBLE;
89  GENPYBIND(setter_for(tx_count))
90  void set_tx_count(TxCount value) SYMBOL_VISIBLE;
91 
92  bool operator==(HicannARQStatus const& other) const SYMBOL_VISIBLE;
93  bool operator!=(HicannARQStatus const& other) const SYMBOL_VISIBLE;
94 
95  static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 4;
96  static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 0;
97  static std::array<halco::hicann_dls::vx::OmnibusAddress, read_config_size_in_words>
98  read_addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden);
99  static std::array<halco::hicann_dls::vx::OmnibusAddress, write_config_size_in_words>
100  write_addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden);
101  std::array<fisch::vx::word_access_type::Omnibus, write_config_size_in_words> encode() const
102  SYMBOL_VISIBLE GENPYBIND(hidden);
103  void decode(std::array<fisch::vx::word_access_type::Omnibus, read_config_size_in_words> const&
104  data) SYMBOL_VISIBLE GENPYBIND(hidden);
105 
106  GENPYBIND(stringstream)
107  friend std::ostream& operator<<(std::ostream& os, HicannARQStatus const& config) SYMBOL_VISIBLE;
108 
109 private:
110  friend class cereal::access;
111  template <class Archive>
112  void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
113 
114  ReadCount m_read_count;
115  WriteCount m_write_count;
116  RxCount m_rx_count;
117  TxCount m_tx_count;
118 };
119 
120 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(HicannARQStatus)
121 
122 namespace detail {
123 
124 template <>
125 struct BackendContainerTrait<HicannARQStatus>
126  : public BackendContainerBase<HicannARQStatus, fisch::vx::word_access_type::Omnibus>
127 {};
128 
129 } // namespace detail
130 
131 } // namespace vx
132 } // namespace haldls
133 
134 namespace std {
135 
136 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::HicannARQStatus::ReadCount)
137 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::HicannARQStatus::WriteCount)
138 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::HicannARQStatus::RxCount)
139 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::HicannARQStatus::TxCount)
140 
141 } // namespace std
halco::hicann_dls::vx::HicannARQStatusOnFPGA coordinate_type
Definition: arq.h:23
std::true_type is_leaf_node
Definition: arq.h:24
#define GENPYBIND_TAG_HALDLS_VX
Definition: genpybind.h:4