HALDLS
madc.h
Go to the documentation of this file.
1 #pragma once
2 #include <array>
3 #include <iosfwd>
4 
5 #include "halco/common/typed_array.h"
6 #include "halco/hicann-dls/vx/chip.h"
7 #include "halco/hicann-dls/vx/madc.h"
8 #include "halco/hicann-dls/vx/readout.h"
9 #include "halco/hicann-dls/vx/synapse.h"
10 #include "haldls/cerealization.h"
11 #include "haldls/vx/genpybind.h"
12 #include "haldls/vx/pll.h"
13 #include "haldls/vx/traits.h"
14 #include "hate/visibility.h"
15 
16 namespace fisch::vx {
17 class OmnibusChipOverJTAG;
18 class Omnibus;
19 } // namespace fisch::vx
20 
21 namespace haldls {
22 namespace vx GENPYBIND_TAG_HALDLS_VX {
23 
30 class GENPYBIND(visible) MADCControl
31 {
32 public:
33  typedef halco::hicann_dls::vx::MADCControlOnDLS coordinate_type;
34  typedef std::true_type is_leaf_node;
35 
36  MADCControl() SYMBOL_VISIBLE;
37 
38  // accessors
39 
41  GENPYBIND(getter_for(enable_iconv_amplifier))
42  bool get_enable_iconv_amplifier() const SYMBOL_VISIBLE;
43  GENPYBIND(setter_for(enable_iconv_amplifier))
44  void set_enable_iconv_amplifier(bool const value) SYMBOL_VISIBLE;
45 
47  GENPYBIND(getter_for(enable_pre_amplifier))
48  bool get_enable_pre_amplifier() const SYMBOL_VISIBLE;
49  GENPYBIND(setter_for(enable_pre_amplifier))
50  void set_enable_pre_amplifier(bool const value) SYMBOL_VISIBLE;
51 
53  GENPYBIND(getter_for(enable_continuous_sampling))
54  bool get_enable_continuous_sampling() const SYMBOL_VISIBLE;
55  GENPYBIND(setter_for(enable_continuous_sampling))
56  void set_enable_continuous_sampling(bool const value) SYMBOL_VISIBLE;
57 
59  GENPYBIND(getter_for(enable_power_down_after_sampling))
60  bool get_enable_power_down_after_sampling() const SYMBOL_VISIBLE;
61  GENPYBIND(setter_for(enable_power_down_after_sampling))
62  void set_enable_power_down_after_sampling(bool const value) SYMBOL_VISIBLE;
63 
65  GENPYBIND(getter_for(stop_recording))
66  bool get_stop_recording() const SYMBOL_VISIBLE;
67  GENPYBIND(setter_for(stop_recording))
68  void set_stop_recording(bool const value) SYMBOL_VISIBLE;
69 
71  GENPYBIND(getter_for(start_recording))
72  bool get_start_recording() const SYMBOL_VISIBLE;
73  GENPYBIND(setter_for(start_recording))
74  void set_start_recording(bool const value) SYMBOL_VISIBLE;
75 
77  GENPYBIND(getter_for(wake_up))
78  bool get_wake_up() const SYMBOL_VISIBLE;
79  GENPYBIND(setter_for(wake_up))
80  void set_wake_up(bool const value) SYMBOL_VISIBLE;
81 
82  bool operator==(MADCControl const& other) const SYMBOL_VISIBLE;
83  bool operator!=(MADCControl const& other) const SYMBOL_VISIBLE;
84 
85  static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 1;
86  static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 0;
87  template <typename AddressT>
88  static std::array<AddressT, read_config_size_in_words> read_addresses(
89  coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden);
90  template <typename AddressT>
91  static std::array<AddressT, write_config_size_in_words> write_addresses(
92  coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden);
93  template <typename WordT>
94  std::array<WordT, write_config_size_in_words> encode() const SYMBOL_VISIBLE GENPYBIND(hidden);
95  template <typename WordT>
96  void decode(std::array<WordT, read_config_size_in_words> const& data) SYMBOL_VISIBLE
97  GENPYBIND(hidden);
98 
99  GENPYBIND(stringstream)
100  friend std::ostream& operator<<(std::ostream& os, MADCControl const& event) SYMBOL_VISIBLE;
101 
102 private:
103  friend class cereal::access;
104  template <class Archive>
105  void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
106 
107  bool m_enable_iconv_amplifier;
108  bool m_enable_pre_amplifier;
109  bool m_enable_continuous_sampling;
110  bool m_enable_power_down_after_sampling;
111  bool m_stop_recording;
112  bool m_start_recording;
113  bool m_wake_up;
114 };
115 
117 
118 namespace detail {
119 
120 template <>
122  : public BackendContainerBase<
123  MADCControl,
124  fisch::vx::word_access_type::Omnibus,
125  fisch::vx::word_access_type::OmnibusChipOverJTAG>
126 {};
127 
128 } // namespace detail
129 
130 
134 class GENPYBIND(visible) MADCConfig
135 {
136 public:
137  typedef halco::hicann_dls::vx::MADCConfigOnDLS coordinate_type;
138  typedef halco::hicann_dls::vx::SourceMultiplexerOnReadoutSourceSelection input_selection_type;
139  typedef std::true_type is_leaf_node;
140 
141  struct GENPYBIND(inline_base("*")) ActiveMuxInputSelectLength
142  : public halco::common::detail::RantWrapper<ActiveMuxInputSelectLength, uint_fast8_t, 15, 0>
143  {
144  constexpr explicit ActiveMuxInputSelectLength(uintmax_t const val = 0)
145  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
146  {}
147  };
148 
149  struct GENPYBIND(inline_base("*")) SampleDurationAdjust
150  : public halco::common::detail::RantWrapper<SampleDurationAdjust, uint_fast8_t, 7, 0>
151  {
152  constexpr explicit SampleDurationAdjust(uintmax_t const val = 5)
153  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
154  {}
155  };
156 
157  struct GENPYBIND(inline_base("*")) SARResetWait
158  : public halco::common::detail::RantWrapper<SARResetWait, uint_fast8_t, 3, 0>
159  {
160  constexpr explicit SARResetWait(uintmax_t const val = 3)
161  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
162  {}
163  };
164 
165  struct GENPYBIND(inline_base("*")) SARResetLength
166  : public halco::common::detail::RantWrapper<SARResetLength, uint_fast8_t, 3, 0>
167  {
168  constexpr explicit SARResetLength(uintmax_t const val = 0)
169  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
170  {}
171  };
172 
173  struct GENPYBIND(inline_base("*")) PowerupWaitValue
174  : public halco::common::detail::RantWrapper<PowerupWaitValue, uint_fast16_t, 1023, 0>
175  {
176  constexpr explicit PowerupWaitValue(uintmax_t const val = 96)
177  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
178  {}
179  };
180 
181  struct GENPYBIND(inline_base("*")) ConversionCyclesOffset
182  : public halco::common::detail::RantWrapper<ConversionCyclesOffset, uint_fast8_t, 15, 0>
183  {
184  constexpr explicit ConversionCyclesOffset(uintmax_t const val = 12)
185  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
186  {}
187  };
188 
189  struct GENPYBIND(inline_base("*")) CalibrationWaitValue
190  : public halco::common::detail::RantWrapper<CalibrationWaitValue, uint_fast16_t, 1023, 0>
191  {
192  constexpr explicit CalibrationWaitValue(uintmax_t const val = 0)
193  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
194  {}
195  };
196 
197  struct GENPYBIND(inline_base("*")) NumberOfSamples
198  : public halco::common::detail::RantWrapper<NumberOfSamples, uint_fast16_t, 65535, 0>
199  {
200  constexpr explicit NumberOfSamples(uintmax_t const val = 0)
201  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
202  {}
203  };
204 
205  struct GENPYBIND(inline_base("*")) SamplingWindowTiming
206  : public halco::common::detail::RantWrapper<SamplingWindowTiming, uint_fast8_t, 31, 0>
207  {
208  constexpr explicit SamplingWindowTiming(uintmax_t const val = 0)
209  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
210  {}
211  };
212 
213  struct GENPYBIND(inline_base("*")) PreampGainCapacitorSize
214  : public halco::common::detail::RantWrapper<PreampGainCapacitorSize, uint_fast8_t, 31, 0>
215  {
216  constexpr explicit PreampGainCapacitorSize(uintmax_t const val = 31)
217  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
218  {}
219  };
220 
221  struct GENPYBIND(inline_base("*")) MADCClockScaleValue
222  : public halco::common::detail::RantWrapper<MADCClockScaleValue, uint_fast16_t, 4095, 0>
223  {
224  constexpr explicit MADCClockScaleValue(uintmax_t const val = 0)
225  GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
226  {}
227  };
228 
229  typedef halco::common::typed_array<bool, halco::hicann_dls::vx::HemisphereOnDLS> hemisphere_type
230  GENPYBIND(opaque(false));
231 
232  typedef halco::common::typed_array<bool, halco::hicann_dls::vx::SynapticInputOnNeuron>
233  synapse_target_type GENPYBIND(opaque(false));
234 
241  MADCConfig() SYMBOL_VISIBLE;
242 
243  // accessors
244 
250  GENPYBIND(getter_for(active_mux_initially_selected_input))
251  input_selection_type get_active_mux_initially_selected_input() const SYMBOL_VISIBLE;
252  GENPYBIND(setter_for(active_mux_initially_selected_input))
253  void set_active_mux_initially_selected_input(input_selection_type const& value) SYMBOL_VISIBLE;
254 
265  GENPYBIND(getter_for(active_mux_input_select_length))
266  ActiveMuxInputSelectLength get_active_mux_input_select_length() const SYMBOL_VISIBLE;
267  GENPYBIND(setter_for(active_mux_input_select_length))
268  void set_active_mux_input_select_length(ActiveMuxInputSelectLength const& value) SYMBOL_VISIBLE;
269 
278  GENPYBIND(getter_for(sample_duration_adjust))
279  SampleDurationAdjust get_sample_duration_adjust() const SYMBOL_VISIBLE;
280  GENPYBIND(setter_for(sample_duration_adjust))
281  void set_sample_duration_adjust(SampleDurationAdjust const& value) SYMBOL_VISIBLE;
282 
286  GENPYBIND(getter_for(enable_sar_reset_on_fall))
287  bool get_enable_sar_reset_on_fall() const SYMBOL_VISIBLE;
288  GENPYBIND(setter_for(enable_sar_reset_on_fall))
289  void set_enable_sar_reset_on_fall(bool const value) SYMBOL_VISIBLE;
290 
291  GENPYBIND(getter_for(sar_reset_wait))
292  SARResetWait get_sar_reset_wait() const SYMBOL_VISIBLE;
293  GENPYBIND(setter_for(sar_reset_wait))
294  void set_sar_reset_wait(SARResetWait const& value) SYMBOL_VISIBLE;
295 
296  GENPYBIND(getter_for(sar_reset_length))
297  SARResetLength get_sar_reset_length() const SYMBOL_VISIBLE;
298  GENPYBIND(setter_for(sar_reset_length))
299  void set_sar_reset_length(SARResetLength const& value) SYMBOL_VISIBLE;
300 
306  GENPYBIND(getter_for(powerup_wait_value))
307  PowerupWaitValue get_powerup_wait_value() const SYMBOL_VISIBLE;
308  GENPYBIND(setter_for(powerup_wait_value))
309  void set_powerup_wait_value(PowerupWaitValue const& value) SYMBOL_VISIBLE;
310 
318  GENPYBIND(getter_for(conversion_cycles_offset))
319  ConversionCyclesOffset get_conversion_cycles_offset() const SYMBOL_VISIBLE;
320  GENPYBIND(setter_for(conversion_cycles_offset))
321  void set_conversion_cycles_offset(ConversionCyclesOffset const& value) SYMBOL_VISIBLE;
322 
326  GENPYBIND(getter_for(calibration_wait_value))
327  CalibrationWaitValue get_calibration_wait_value() const SYMBOL_VISIBLE;
328  GENPYBIND(setter_for(calibration_wait_value))
329  void set_calibration_wait_value(CalibrationWaitValue const& value) SYMBOL_VISIBLE;
330 
334  GENPYBIND(getter_for(enable_calibration))
335  bool get_enable_calibration() const SYMBOL_VISIBLE;
336  GENPYBIND(setter_for(enable_calibration))
337  void set_enable_calibration(bool const value) SYMBOL_VISIBLE;
338 
346  GENPYBIND(getter_for(number_of_samples))
347  NumberOfSamples get_number_of_samples() const SYMBOL_VISIBLE;
348  GENPYBIND(setter_for(number_of_samples))
349  void set_number_of_samples(NumberOfSamples const& value) SYMBOL_VISIBLE;
350 
362  GENPYBIND(getter_for(preamp_sampling_window_start))
363  SamplingWindowTiming get_preamp_sampling_window_start() const SYMBOL_VISIBLE;
364  GENPYBIND(setter_for(preamp_sampling_window_start))
365  void set_preamp_sampling_window_start(SamplingWindowTiming const& value) SYMBOL_VISIBLE;
366 
367  GENPYBIND(getter_for(preamp_sampling_window_end))
368  SamplingWindowTiming get_preamp_sampling_window_end() const SYMBOL_VISIBLE;
369  GENPYBIND(setter_for(preamp_sampling_window_end))
370  void set_preamp_sampling_window_end(SamplingWindowTiming const& value) SYMBOL_VISIBLE;
371 
372  GENPYBIND(getter_for(iconv_sampling_window_start))
373  SamplingWindowTiming get_iconv_sampling_window_start() const SYMBOL_VISIBLE;
374  GENPYBIND(setter_for(iconv_sampling_window_start))
375  void set_iconv_sampling_window_start(SamplingWindowTiming const& value) SYMBOL_VISIBLE;
376 
377  GENPYBIND(getter_for(iconv_sampling_window_end))
378  SamplingWindowTiming get_iconv_sampling_window_end() const SYMBOL_VISIBLE;
379  GENPYBIND(setter_for(iconv_sampling_window_end))
380  void set_iconv_sampling_window_end(SamplingWindowTiming const& value) SYMBOL_VISIBLE;
381 
382  /*
383  * Let the MADC sample on the positive clock edge.
384  *
385  * Caution: this property is called `sample_pos_edge` in the RTL description.
386  */
387  GENPYBIND(getter_for(sample_on_positive_edge))
388  bool get_sample_on_positive_edge() const SYMBOL_VISIBLE;
389  GENPYBIND(setter_for(sample_on_positive_edge))
390  void set_sample_on_positive_edge(bool const value) SYMBOL_VISIBLE;
391 
392  /*
393  * Accessor for enabling dummy data generation.
394  * If enabled, the MADC will stream out the last 10 bit of the sample
395  * counter value as a test pattern (sawtooth).
396  */
397  GENPYBIND(getter_for(enable_dummy_data))
398  bool get_enable_dummy_data() const SYMBOL_VISIBLE;
399  GENPYBIND(setter_for(enable_dummy_data))
400  void set_enable_dummy_data(bool const value) SYMBOL_VISIBLE;
401 
402  /*
403  * Accessors for configuration of the MADC input multiplexer.
404  * This multiplexer allows to patch any combination of the MADC's
405  * differential inputs, the preamp, and the two analog I/Os of the
406  * chip.
407  * In the vast majority of use cases, the MADC is set to record from
408  * the preamp.
409  * Connecting the preamp's outputs or the MADC's inputs to the pads
410  * allows to characterize the two circuits in isolation.
411  *
412  * Caution: the corresponding properties are called
413  * `en_amp_to_adc`, `en_adc_to_pad`, and `en_amp_to_pad` in the RTL
414  * description, where the two latter properties further seem to be
415  * reversed.
416  */
417  GENPYBIND(getter_for(connect_preamp_to_madc))
418  bool get_connect_preamp_to_madc() const SYMBOL_VISIBLE;
419  GENPYBIND(setter_for(connect_preamp_to_madc))
420  void set_connect_preamp_to_madc(bool const value) SYMBOL_VISIBLE;
421 
422  GENPYBIND(getter_for(connect_pads_to_madc))
423  bool get_connect_pads_to_madc() const SYMBOL_VISIBLE;
424  GENPYBIND(setter_for(connect_pads_to_madc))
425  void set_connect_pads_to_madc(bool const value) SYMBOL_VISIBLE;
426 
427  GENPYBIND(getter_for(connect_preamp_to_pads))
428  bool get_connect_preamp_to_pads() const SYMBOL_VISIBLE;
429  GENPYBIND(setter_for(connect_preamp_to_pads))
430  void set_connect_preamp_to_pads(bool const value) SYMBOL_VISIBLE;
431 
435  GENPYBIND(getter_for(preamp_gain_capacitor_size))
436  PreampGainCapacitorSize get_preamp_gain_capacitor_size() const SYMBOL_VISIBLE;
437  GENPYBIND(setter_for(preamp_gain_capacitor_size))
438  void set_preamp_gain_capacitor_size(PreampGainCapacitorSize const& value) SYMBOL_VISIBLE;
439 
444  GENPYBIND(getter_for(enable_madc_clock_scaling))
445  bool get_enable_madc_clock_scaling() const SYMBOL_VISIBLE;
446  GENPYBIND(setter_for(enable_madc_clock_scaling))
447  void set_enable_madc_clock_scaling(bool const value) SYMBOL_VISIBLE;
448 
449  GENPYBIND(getter_for(madc_clock_scale_value))
450  MADCClockScaleValue get_madc_clock_scale_value() const SYMBOL_VISIBLE;
451  GENPYBIND(setter_for(madc_clock_scale_value))
452  void set_madc_clock_scale_value(MADCClockScaleValue const& value) SYMBOL_VISIBLE;
453 
454  /*
455  * Accessors for the enabledness of the active mux amplifiers.
456  *
457  * Caution: the corresponding property is called `act_mux_en_amps` in the
458  * RTL description.
459  */
460  GENPYBIND(getter_for(enable_active_mux_amplifiers))
461  bool get_enable_active_mux_amplifiers() const SYMBOL_VISIBLE;
462  GENPYBIND(setter_for(enable_active_mux_amplifiers))
463  void set_enable_active_mux_amplifiers(bool const value) SYMBOL_VISIBLE;
464 
468  GENPYBIND(
469  getter_for(enable_pseudo_differential_reference), return_value_policy(reference_internal))
470  hemisphere_type const& get_enable_pseudo_differential_reference() const SYMBOL_VISIBLE;
471  GENPYBIND(setter_for(enable_pseudo_differential_reference))
472  void set_enable_pseudo_differential_reference(hemisphere_type const& value) SYMBOL_VISIBLE;
473 
486  GENPYBIND(getter_for(signal_selection_connect_current_meter))
487  bool get_signal_selection_connect_current_meter() const SYMBOL_VISIBLE;
488  GENPYBIND(setter_for(signal_selection_connect_current_meter))
489  void set_signal_selection_connect_current_meter(bool const value) SYMBOL_VISIBLE;
490 
491  GENPYBIND(getter_for(signal_selection_connect_active_mux))
492  bool get_signal_selection_connect_active_mux() const SYMBOL_VISIBLE;
493  GENPYBIND(setter_for(signal_selection_connect_active_mux))
494  void set_signal_selection_connect_active_mux(bool const value) SYMBOL_VISIBLE;
495 
496  GENPYBIND(getter_for(signal_selection_connect_debug))
497  bool get_signal_selection_connect_debug() const SYMBOL_VISIBLE;
498  GENPYBIND(setter_for(signal_selection_connect_debug))
499  void set_signal_selection_connect_debug(bool const value) SYMBOL_VISIBLE;
500 
501  GENPYBIND(getter_for(signal_selection_connect_preamp))
502  bool get_signal_selection_connect_preamp() const SYMBOL_VISIBLE;
503  GENPYBIND(setter_for(signal_selection_connect_preamp))
504  void set_signal_selection_connect_preamp(bool const value) SYMBOL_VISIBLE;
505 
513  GENPYBIND(getter_for(enable_iconv_amplifier))
514  bool get_enable_iconv_amplifier() const SYMBOL_VISIBLE;
515  GENPYBIND(setter_for(enable_iconv_amplifier))
516  void set_enable_iconv_amplifier(bool const value) SYMBOL_VISIBLE;
517 
518  GENPYBIND(getter_for(connect_iconv_neuron), return_value_policy(reference_internal))
519  hemisphere_type const& get_connect_iconv_neuron() const SYMBOL_VISIBLE;
520  GENPYBIND(setter_for(connect_iconv_neuron))
521  void set_connect_iconv_neuron(hemisphere_type const& value) SYMBOL_VISIBLE;
522 
523  GENPYBIND(getter_for(connect_iconv_synapse), return_value_policy(reference_internal))
524  synapse_target_type const& get_connect_iconv_synapse() const SYMBOL_VISIBLE;
525  GENPYBIND(setter_for(connect_iconv_synapse))
526  void set_connect_iconv_synapse(synapse_target_type const& value) SYMBOL_VISIBLE;
527 
539  double calculate_sample_rate(double const& madc_base_frequency) const SYMBOL_VISIBLE;
540 
541  bool operator==(MADCConfig const& other) const SYMBOL_VISIBLE;
542  bool operator!=(MADCConfig const& other) const SYMBOL_VISIBLE;
543 
544  static size_t constexpr config_size_in_words GENPYBIND(hidden) = 10;
545  template <typename AddressT>
546  std::array<AddressT, config_size_in_words> addresses(coordinate_type const& coord) const
547  GENPYBIND(hidden);
548  template <typename WordT>
549  std::array<WordT, config_size_in_words> encode() const GENPYBIND(hidden);
550  template <typename WordT>
551  void decode(std::array<WordT, config_size_in_words> const& data) GENPYBIND(hidden);
552 
553  GENPYBIND(stringstream)
554  friend std::ostream& operator<<(std::ostream& os, MADCConfig const& config) SYMBOL_VISIBLE;
555 
556 private:
557  friend class cereal::access;
558  template <class Archive>
559  void serialize(Archive& ar, std::uint32_t const);
560 
561  input_selection_type m_active_mux_initially_selected_input;
562  ActiveMuxInputSelectLength m_active_mux_input_select_length;
563  SampleDurationAdjust m_sample_duration_adjust;
564  bool m_enable_sar_reset_on_fall;
565  SARResetWait m_sar_reset_wait;
566  SARResetLength m_sar_reset_length;
567  PowerupWaitValue m_powerup_wait_value;
568  ConversionCyclesOffset m_conversion_cycles_offset;
569  CalibrationWaitValue m_calibration_wait_value;
570  bool m_enable_calibration;
571  NumberOfSamples m_number_of_samples;
572  SamplingWindowTiming m_preamp_sampling_window_start;
573  SamplingWindowTiming m_preamp_sampling_window_end;
574  SamplingWindowTiming m_iconv_sampling_window_start;
575  SamplingWindowTiming m_iconv_sampling_window_end;
576  bool m_sample_on_positive_edge;
577  bool m_enable_dummy_data;
578  bool m_connect_preamp_to_madc;
579  bool m_connect_pads_to_madc;
580  bool m_connect_preamp_to_pads;
581  PreampGainCapacitorSize m_preamp_gain_capacitor_size;
582  bool m_enable_madc_clock_scaling;
583  MADCClockScaleValue m_madc_clock_scale_value;
584  bool m_enable_active_mux_amplifiers;
585  hemisphere_type m_enable_pseudo_differential_reference;
586  bool m_signal_selection_connect_current_meter;
587  bool m_signal_selection_connect_active_mux;
588  bool m_signal_selection_connect_debug;
589  bool m_signal_selection_connect_preamp;
590  bool m_enable_iconv_amplifier;
591  hemisphere_type m_connect_iconv_neuron;
592  synapse_target_type m_connect_iconv_synapse;
593 };
594 
595 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(MADCConfig)
596 
597 namespace detail {
598 
599 template <>
600 struct BackendContainerTrait<MADCConfig>
601  : public BackendContainerBase<
602  MADCConfig,
603  fisch::vx::word_access_type::Omnibus,
604  fisch::vx::word_access_type::OmnibusChipOverJTAG>
605 {};
606 
607 } // namespace detail
608 
609 } // namespace vx
610 } // namespace haldls
#define EXTERN_INSTANTIATE_CEREAL_SERIALIZE(CLASS_NAME)
Definition: cerealization.h:75
Configuration container for MADC and related circuitry.
Definition: madc.h:135
halco::hicann_dls::vx::SourceMultiplexerOnReadoutSourceSelection input_selection_type
Definition: madc.h:138
halco::hicann_dls::vx::MADCConfigOnDLS coordinate_type
Definition: madc.h:137
std::true_type is_leaf_node
Definition: madc.h:139
Container for MADC control state machine.
Definition: madc.h:31
halco::hicann_dls::vx::MADCControlOnDLS coordinate_type
Definition: madc.h:33
std::true_type is_leaf_node
Definition: madc.h:34
MADCControl() SYMBOL_VISIBLE
#define GENPYBIND_TAG_HALDLS_VX
Definition: genpybind.h:4
Backend container trait base.
Definition: traits.h:77