HALDLS
cadc.h
Go to the documentation of this file.
1 #pragma once
2 #include "halco/common/geometry.h"
3 #include "halco/hicann-dls/vx/cadc.h"
4 #include "haldls/cerealization.h"
5 #include "haldls/vx/genpybind.h"
7 #include "haldls/vx/traits.h"
8 #include "hate/visibility.h"
9 
10 #ifndef __ppu__
11 #include "hxcomm/vx/target.h"
12 #endif
13 
14 namespace fisch::vx {
15 class Omnibus;
16 class OmnibusChipOverJTAG;
17 } // namespace fisch::vx
18 
19 namespace halco::hicann_dls::vx {
20 class OmnibusAddress;
21 } // namespace halco::hicann_dls::vx
22 
23 namespace haldls {
24 namespace vx GENPYBIND_TAG_HALDLS_VX {
25 
29 class GENPYBIND(visible) CADCConfig
30 {
31 public:
32  typedef std::true_type is_leaf_node;
33  typedef halco::hicann_dls::vx::CADCConfigOnDLS coordinate_type;
34 
40  struct GENPYBIND(inline_base("*")) ResetWait
41  : public halco::common::detail::RantWrapper<ResetWait, uint_fast16_t, 255, 0>
42  {
43  constexpr explicit ResetWait(uintmax_t const val = 100) GENPYBIND(implicit_conversion) :
44  rant_t(val)
45  {}
46  };
47 
52  struct GENPYBIND(inline_base("*")) DeadTime
53  : public halco::common::detail::RantWrapper<DeadTime, uint_fast16_t, 255, 0>
54  {
55  constexpr explicit DeadTime(uintmax_t const val = 20) GENPYBIND(implicit_conversion) :
56  rant_t(val)
57  {}
58  };
59 
61  CADCConfig() SYMBOL_VISIBLE;
62 
67  GENPYBIND(getter_for(enable))
68  bool get_enable() const SYMBOL_VISIBLE;
69 
74  GENPYBIND(setter_for(enable))
75  void set_enable(bool value) SYMBOL_VISIBLE;
76 
81  GENPYBIND(getter_for(reset_wait))
82  ResetWait get_reset_wait() const SYMBOL_VISIBLE;
83 
88  GENPYBIND(setter_for(reset_wait))
89  void set_reset_wait(ResetWait value) SYMBOL_VISIBLE;
90 
95  GENPYBIND(getter_for(dead_time))
96  DeadTime get_dead_time() const SYMBOL_VISIBLE;
97 
102  GENPYBIND(setter_for(dead_time))
103  void set_dead_time(DeadTime value) SYMBOL_VISIBLE;
104 
105  bool operator==(CADCConfig const& other) const SYMBOL_VISIBLE;
106  bool operator!=(CADCConfig const& other) const SYMBOL_VISIBLE;
107 
108  GENPYBIND(stringstream)
109  friend std::ostream& operator<<(std::ostream& os, CADCConfig const& config) SYMBOL_VISIBLE;
110 
111  static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1;
112  template <typename AddressT>
113  static std::array<AddressT, config_size_in_words> addresses(coordinate_type const& word)
114  SYMBOL_VISIBLE GENPYBIND(hidden);
115  template <typename WordT>
116  std::array<WordT, config_size_in_words> encode() const SYMBOL_VISIBLE GENPYBIND(hidden);
117  template <typename WordT>
118  void decode(std::array<WordT, config_size_in_words> const& data) SYMBOL_VISIBLE
119  GENPYBIND(hidden);
120 
121 protected:
122  friend class cereal::access;
123  template <typename Archive>
124  void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
125 
126  bool m_enable;
127  ResetWait m_reset_wait;
128  DeadTime m_dead_time;
129 };
130 
131 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(CADCConfig)
132 
133 namespace detail {
134 
135 template <>
136 struct BackendContainerTrait<CADCConfig>
137  : public BackendContainerBase<
138  CADCConfig,
139  fisch::vx::word_access_type::Omnibus,
140  fisch::vx::word_access_type::OmnibusChipOverJTAG>
141 {};
142 
143 } // namespace detail
144 
148 class SYMBOL_VISIBLE CADCChannelConfig
149 {
150 public:
151  typedef std::true_type is_leaf_node;
152  typedef typename halco::hicann_dls::vx::CADCChannelConfigOnDLS coordinate_type;
153 #ifndef __ppu__
154  constexpr static auto unsupported_read_targets GENPYBIND(hidden) = {
155  hxcomm::vx::Target::hardware};
156 #endif
157 
161  struct GENPYBIND(inline_base("*")) Offset
162  : public halco::common::detail::RantWrapper<Offset, int_fast16_t, 127, -128>
163  {
164  typedef halco::common::detail::RantWrapper<Offset, int_fast16_t, 127, -128> rant_t;
165  constexpr explicit Offset(intmax_t const val = 0) GENPYBIND(implicit_conversion) :
166  rant_t(val)
167  {}
168  };
169 
171  CADCChannelConfig();
172 
177  GENPYBIND(getter_for(offset))
178  Offset get_offset() const;
179 
184  GENPYBIND(setter_for(offset))
185  void set_offset(Offset value);
186 
187  bool operator==(CADCChannelConfig const& other) const;
188  bool operator!=(CADCChannelConfig const& other) const;
189 
190  GENPYBIND(stringstream)
191  friend std::ostream& operator<<(std::ostream& os, CADCChannelConfig const& config)
192  {
193  os << "CADCChannelConfig(" << config.m_offset << ")";
194  return os;
195  }
196 
197  static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1;
198  template <typename AddressT>
199  static std::array<AddressT, config_size_in_words> addresses(coordinate_type const& word)
200  GENPYBIND(hidden);
201  template <typename WordT>
202  std::array<WordT, config_size_in_words> encode() const GENPYBIND(hidden);
203  template <typename WordT>
204  void decode(std::array<WordT, config_size_in_words> const& data) GENPYBIND(hidden);
205 
206 protected:
207  friend class cereal::access;
208  template <typename Archive>
209  void serialize(Archive& ar, std::uint32_t const version);
210 
211  Offset m_offset;
212 };
213 
214 
215 namespace detail {
216 
217 template <>
218 struct BackendContainerTrait<CADCChannelConfig>
219  : public BackendContainerBase<
220  CADCChannelConfig,
221  fisch::vx::word_access_type::Omnibus,
222  fisch::vx::word_access_type::OmnibusChipOverJTAG>
223 {};
224 
225 } // namespace detail
226 
227 
228 // TODO: Switch to CRTP pattern when https://github.com/kljohann/genpybind/issues/28 is solved
229 class GENPYBIND(visible) CADCOffsetSRAMTimingConfig : public detail::SRAMTimingConfig
230 {
231 public:
232  typedef halco::hicann_dls::vx::CADCOffsetSRAMTimingConfigOnDLS coordinate_type;
233 
234  bool operator==(CADCOffsetSRAMTimingConfig const& other) const SYMBOL_VISIBLE;
235  bool operator!=(CADCOffsetSRAMTimingConfig const& other) const SYMBOL_VISIBLE;
236 
237  GENPYBIND(stringstream)
238  friend std::ostream& operator<<(std::ostream& os, CADCOffsetSRAMTimingConfig const& config)
239  SYMBOL_VISIBLE;
240 
241  template <typename AddressT>
242  std::array<AddressT, config_size_in_words> addresses(coordinate_type const& word) const
243  SYMBOL_VISIBLE GENPYBIND(hidden);
244 
245 private:
246  friend class cereal::access;
247  template <typename Archive>
248  void serialize(Archive& ar, std::uint32_t);
249 };
250 
251 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(CADCOffsetSRAMTimingConfig)
252 
253 namespace detail {
254 
255 template <>
256 struct BackendContainerTrait<CADCOffsetSRAMTimingConfig>
257  : public BackendContainerBase<
258  CADCOffsetSRAMTimingConfig,
259  fisch::vx::word_access_type::Omnibus,
260  fisch::vx::word_access_type::OmnibusChipOverJTAG>
261 {};
262 
263 } // namespace detail
264 
268 class GENPYBIND(visible) CADCSampleQuad
269 {
270 public:
271  typedef std::true_type is_leaf_node;
272  typedef halco::hicann_dls::vx::CADCSampleQuadOnDLS coordinate_type;
273 
277  struct GENPYBIND(inline_base("*")) Value
278  : public halco::common::detail::RantWrapper<Value, uint_fast16_t, 255, 0>
279  {
280  constexpr explicit Value(intmax_t const val = 0) GENPYBIND(implicit_conversion) :
281  rant_t(val)
282  {}
283  };
284 
286  CADCSampleQuad() SYMBOL_VISIBLE;
287 
293  Value get_sample(halco::hicann_dls::vx::EntryOnQuad const& coord) const SYMBOL_VISIBLE;
294 
300  void set_sample(halco::hicann_dls::vx::EntryOnQuad const& coord, Value value) SYMBOL_VISIBLE;
301 
302  bool operator==(CADCSampleQuad const& other) const SYMBOL_VISIBLE;
303  bool operator!=(CADCSampleQuad const& other) const SYMBOL_VISIBLE;
304 
305  GENPYBIND(stringstream)
306  friend std::ostream& operator<<(std::ostream& os, CADCSampleQuad const& config) SYMBOL_VISIBLE;
307 
308  static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 1;
309  static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 0;
310  static std::array<halco::hicann_dls::vx::OmnibusAddress, read_config_size_in_words>
311  read_addresses(coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
312  static std::array<halco::hicann_dls::vx::OmnibusAddress, write_config_size_in_words>
313  write_addresses(coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
314  std::array<fisch::vx::word_access_type::Omnibus, write_config_size_in_words> encode() const
315  SYMBOL_VISIBLE GENPYBIND(hidden);
316  void decode(std::array<fisch::vx::word_access_type::Omnibus, read_config_size_in_words> const&
317  data) SYMBOL_VISIBLE GENPYBIND(hidden);
318 
319 protected:
320  friend class cereal::access;
321  template <typename Archive>
322  void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
323 
324  halco::common::typed_array<Value, halco::hicann_dls::vx::EntryOnQuad> m_samples;
325 };
326 
327 namespace detail {
328 
329 template <>
330 struct BackendContainerTrait<CADCSampleQuad>
331  : public BackendContainerBase<CADCSampleQuad, fisch::vx::word_access_type::Omnibus>
332 {};
333 
334 } // namespace detail
335 
336 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(CADCSampleQuad)
337 
338 } // namespace vx
339 } // namespace haldls
CADC container with global digital config for a vertical half.
Definition: cadc.h:30
std::true_type is_leaf_node
Definition: cadc.h:32
halco::hicann_dls::vx::CADCConfigOnDLS coordinate_type
Definition: cadc.h:33
#define GENPYBIND_TAG_HALDLS_VX
Definition: genpybind.h:4
haldls::vx::CADCChannelConfig CADCChannelConfig
Definition: cadc.h:10