HALDLS
perftest.h
Go to the documentation of this file.
1 #pragma once
2 #include <array>
3 #include <iosfwd>
4 
5 #include "fisch/vx/word_access/type/reset.h"
6 #include "halco/common/geometry.h"
7 #include "halco/hicann-dls/vx/highspeed_link.h"
8 #include "haldls/cerealization.h"
9 #include "haldls/vx/genpybind.h"
10 #include "haldls/vx/traits.h"
11 #include "hate/visibility.h"
12 
13 namespace halco::hicann_dls::vx {
14 class OmnibusAddress;
15 } // namespace halco::hicann_dls::vx
16 
17 namespace haldls {
18 namespace vx GENPYBIND_TAG_HALDLS_VX {
19 
27 class GENPYBIND(visible) PerfTest
28 {
29 public:
30  typedef halco::hicann_dls::vx::PerfTestOnFPGA coordinate_type;
31  typedef std::true_type is_leaf_node;
32 
37  explicit PerfTest(bool value = false) SYMBOL_VISIBLE;
38 
43  GENPYBIND(setter_for(enable))
44  void set_enable(bool value) SYMBOL_VISIBLE;
45 
50  GENPYBIND(getter_for(enable))
51  bool get_enable() const SYMBOL_VISIBLE;
52 
53  bool operator==(PerfTest const& other) const SYMBOL_VISIBLE;
54  bool operator!=(PerfTest const& other) const SYMBOL_VISIBLE;
55 
56  GENPYBIND(stringstream)
57  friend std::ostream& operator<<(std::ostream& os, PerfTest const& config) SYMBOL_VISIBLE;
58 
59  static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1;
60  static std::array<halco::hicann_dls::vx::OmnibusAddress, config_size_in_words> addresses(
61  coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
62  std::array<fisch::vx::word_access_type::Omnibus, config_size_in_words> encode() const
63  SYMBOL_VISIBLE GENPYBIND(hidden);
64  void decode(std::array<fisch::vx::word_access_type::Omnibus, config_size_in_words> const& data)
65  SYMBOL_VISIBLE GENPYBIND(hidden);
66 
67 private:
68  friend class cereal::access;
69  template <typename Archive>
70  void serialize(Archive& ar, std::uint32_t const version);
71 
72  bool m_enable;
73 };
74 
76 
77 namespace detail {
78 
79 template <>
81  : public BackendContainerBase<PerfTest, fisch::vx::word_access_type::Omnibus>
82 {};
83 
84 } // namespace detail
85 
86 
90 class GENPYBIND(visible) PerfTestStatus
91 {
92 public:
93  typedef halco::hicann_dls::vx::PerfTestStatusOnFPGA coordinate_type;
94  typedef std::true_type is_leaf_node;
95 
97  struct GENPYBIND(inline_base("*")) Sent
98  : public halco::common::detail::RantWrapper<Sent, uint_fast32_t, 0xffffffff, 0>
99  {
100  constexpr explicit Sent(uintmax_t const val = 0) : rant_t(val) {}
101  };
102 
104  struct GENPYBIND(inline_base("*")) Received
105  : public halco::common::detail::RantWrapper<Received, uint_fast32_t, 0xffffffff, 0>
106  {
107  constexpr explicit Received(uintmax_t const val = 0) : rant_t(val) {}
108  };
109 
111  struct GENPYBIND(inline_base("*")) InOrder
112  : public halco::common::detail::RantWrapper<InOrder, uint_fast32_t, 0xffffffff, 0>
113  {
114  constexpr explicit InOrder(uintmax_t const val = 0) : rant_t(val) {}
115  };
116 
118  struct GENPYBIND(inline_base("*")) ErrorWord
119  : public halco::common::detail::RantWrapper<ErrorWord, uint_fast32_t, 0xffffffff, 0>
120  {
121  constexpr explicit ErrorWord(uintmax_t const val = 0) : rant_t(val) {}
122  };
123 
125  PerfTestStatus() SYMBOL_VISIBLE;
126 
131  GENPYBIND(setter_for(sent))
132  void set_sent(Sent value) SYMBOL_VISIBLE;
133 
138  GENPYBIND(getter_for(sent))
139  Sent get_sent() const SYMBOL_VISIBLE;
140 
145  GENPYBIND(setter_for(received))
146  void set_received(Received value) SYMBOL_VISIBLE;
147 
152  GENPYBIND(getter_for(received))
153  Received get_received() const SYMBOL_VISIBLE;
154 
159  GENPYBIND(setter_for(in_order))
160  void set_in_order(InOrder value) SYMBOL_VISIBLE;
161 
166  GENPYBIND(getter_for(in_order))
167  InOrder get_in_order() const SYMBOL_VISIBLE;
168 
173  GENPYBIND(setter_for(error_word))
174  void set_error_word(ErrorWord value) SYMBOL_VISIBLE;
175 
180  GENPYBIND(getter_for(error_word))
181  ErrorWord get_error_word() const SYMBOL_VISIBLE;
182 
183  bool operator==(PerfTestStatus const& other) const SYMBOL_VISIBLE;
184  bool operator!=(PerfTestStatus const& other) const SYMBOL_VISIBLE;
185 
186  GENPYBIND(stringstream)
187  friend std::ostream& operator<<(std::ostream& os, PerfTestStatus const& config) SYMBOL_VISIBLE;
188 
189  static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 4;
190  static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 0;
191  static std::array<halco::hicann_dls::vx::OmnibusAddress, read_config_size_in_words>
192  read_addresses(coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
193  static std::array<halco::hicann_dls::vx::OmnibusAddress, write_config_size_in_words>
194  write_addresses(coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
195  std::array<fisch::vx::word_access_type::Omnibus, write_config_size_in_words> encode() const
196  SYMBOL_VISIBLE GENPYBIND(hidden);
197  void decode(std::array<fisch::vx::word_access_type::Omnibus, read_config_size_in_words> const&
198  data) SYMBOL_VISIBLE GENPYBIND(hidden);
199 
200 private:
201  friend class cereal::access;
202  template <typename Archive>
203  void serialize(Archive& ar, std::uint32_t const version);
204 
205  Sent m_sent;
206  Received m_received;
207  InOrder m_in_order;
208  ErrorWord m_error_word;
209 };
210 
211 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(PerfTestStatus)
212 
213 namespace detail {
214 
215 template <>
216 struct BackendContainerTrait<PerfTestStatus>
217  : public BackendContainerBase<PerfTestStatus, fisch::vx::word_access_type::Omnibus>
218 {};
219 
220 } // namespace detail
221 
222 } // namespace vx
223 } // namespace haldls
224 
225 namespace std {
226 
227 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::PerfTestStatus::Sent)
228 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::PerfTestStatus::Received)
229 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::PerfTestStatus::InOrder)
230 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::PerfTestStatus::ErrorWord)
231 
232 } // namespace std
#define EXTERN_INSTANTIATE_CEREAL_SERIALIZE(CLASS_NAME)
Definition: cerealization.h:75
Container for enabling highspeed perf test.
Definition: perftest.h:28
PerfTest(bool value=false) SYMBOL_VISIBLE
Construct perf test with enable value.
std::true_type is_leaf_node
Definition: perftest.h:31
halco::hicann_dls::vx::PerfTestOnFPGA coordinate_type
Definition: perftest.h:30
Container for perf test result readout.
Definition: perftest.h:91
std::true_type is_leaf_node
Definition: perftest.h:94
halco::hicann_dls::vx::PerfTestStatusOnFPGA coordinate_type
Definition: perftest.h:93
#define GENPYBIND_TAG_HALDLS_VX
Definition: genpybind.h:4
Definition: arq.h:13
Backend container trait base.
Definition: traits.h:77