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"
14 #include "hate/visibility.h"
17 class OmnibusChipOverJTAG;
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;
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;
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;
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;
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;
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;
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;
82 bool operator==(
MADCControl const& other) const SYMBOL_VISIBLE;
83 bool operator!=(
MADCControl const& other) const SYMBOL_VISIBLE;
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(
90 template <typename AddressT>
91 static std::array<AddressT, write_config_size_in_words> write_addresses(
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
99 GENPYBIND(stringstream)
100 friend std::ostream& operator<<(std::ostream& os,
MADCControl const& event) SYMBOL_VISIBLE;
104 template <class Archive>
105 void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
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;
124 fisch::vx::word_access_type::Omnibus,
125 fisch::vx::word_access_type::OmnibusChipOverJTAG>
141 struct GENPYBIND(inline_base("*
")) ActiveMuxInputSelectLength
142 : public halco::common::detail::RantWrapper<ActiveMuxInputSelectLength, uint_fast8_t, 15, 0>
144 constexpr explicit ActiveMuxInputSelectLength(uintmax_t const val = 0)
145 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
149 struct GENPYBIND(inline_base("*
")) SampleDurationAdjust
150 : public halco::common::detail::RantWrapper<SampleDurationAdjust, uint_fast8_t, 7, 0>
152 constexpr explicit SampleDurationAdjust(uintmax_t const val = 5)
153 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
157 struct GENPYBIND(inline_base("*
")) SARResetWait
158 : public halco::common::detail::RantWrapper<SARResetWait, uint_fast8_t, 3, 0>
160 constexpr explicit SARResetWait(uintmax_t const val = 3)
161 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
165 struct GENPYBIND(inline_base("*
")) SARResetLength
166 : public halco::common::detail::RantWrapper<SARResetLength, uint_fast8_t, 3, 0>
168 constexpr explicit SARResetLength(uintmax_t const val = 0)
169 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
173 struct GENPYBIND(inline_base("*
")) PowerupWaitValue
174 : public halco::common::detail::RantWrapper<PowerupWaitValue, uint_fast16_t, 1023, 0>
176 constexpr explicit PowerupWaitValue(uintmax_t const val = 96)
177 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
181 struct GENPYBIND(inline_base("*
")) ConversionCyclesOffset
182 : public halco::common::detail::RantWrapper<ConversionCyclesOffset, uint_fast8_t, 15, 0>
184 constexpr explicit ConversionCyclesOffset(uintmax_t const val = 12)
185 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
189 struct GENPYBIND(inline_base("*
")) CalibrationWaitValue
190 : public halco::common::detail::RantWrapper<CalibrationWaitValue, uint_fast16_t, 1023, 0>
192 constexpr explicit CalibrationWaitValue(uintmax_t const val = 0)
193 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
197 struct GENPYBIND(inline_base("*
")) NumberOfSamples
198 : public halco::common::detail::RantWrapper<NumberOfSamples, uint_fast16_t, 65535, 0>
200 constexpr explicit NumberOfSamples(uintmax_t const val = 0)
201 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
205 struct GENPYBIND(inline_base("*
")) SamplingWindowTiming
206 : public halco::common::detail::RantWrapper<SamplingWindowTiming, uint_fast8_t, 31, 0>
208 constexpr explicit SamplingWindowTiming(uintmax_t const val = 0)
209 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
213 struct GENPYBIND(inline_base("*
")) PreampGainCapacitorSize
214 : public halco::common::detail::RantWrapper<PreampGainCapacitorSize, uint_fast8_t, 31, 0>
216 constexpr explicit PreampGainCapacitorSize(uintmax_t const val = 31)
217 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
221 struct GENPYBIND(inline_base("*
")) MADCClockScaleValue
222 : public halco::common::detail::RantWrapper<MADCClockScaleValue, uint_fast16_t, 4095, 0>
224 constexpr explicit MADCClockScaleValue(uintmax_t const val = 0)
225 GENPYBIND(implicit_conversion) SYMBOL_VISIBLE : rant_t(val)
229 typedef halco::common::typed_array<bool, halco::hicann_dls::vx::HemisphereOnDLS> hemisphere_type
230 GENPYBIND(opaque(false));
232 typedef halco::common::typed_array<bool, halco::hicann_dls::vx::SynapticInputOnNeuron>
233 synapse_target_type GENPYBIND(opaque(false));
241 MADCConfig() SYMBOL_VISIBLE;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
383 * Let the MADC sample on the positive clock edge.
385 * Caution: this property is called `sample_pos_edge` in the RTL description.
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;
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).
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;
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
407 * In the vast majority of use cases, the MADC is set to record from
409 * Connecting the preamp's outputs or the MADC's inputs to the pads
410 * allows to characterize the two circuits in isolation.
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
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;
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;
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;
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;
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;
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;
455 * Accessors for the enabledness of the active mux amplifiers.
457 * Caution: the corresponding property is called `act_mux_en_amps` in the
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;
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;
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;
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;
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;
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;
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;
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;
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;
539 double calculate_sample_rate(double const& madc_base_frequency) const SYMBOL_VISIBLE;
541 bool operator==(MADCConfig const& other) const SYMBOL_VISIBLE;
542 bool operator!=(MADCConfig const& other) const SYMBOL_VISIBLE;
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
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);
553 GENPYBIND(stringstream)
554 friend std::ostream& operator<<(std::ostream& os, MADCConfig const& config) SYMBOL_VISIBLE;
557 friend class cereal::access;
558 template <class Archive>
559 void serialize(Archive& ar, std::uint32_t const);
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;
595 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(MADCConfig)
600 struct BackendContainerTrait<MADCConfig>
601 : public BackendContainerBase<
603 fisch::vx::word_access_type::Omnibus,
604 fisch::vx::word_access_type::OmnibusChipOverJTAG>
607 } // namespace detail
610 } // namespace haldls
#define EXTERN_INSTANTIATE_CEREAL_SERIALIZE(CLASS_NAME)
Configuration container for MADC and related circuitry.
halco::hicann_dls::vx::SourceMultiplexerOnReadoutSourceSelection input_selection_type
halco::hicann_dls::vx::MADCConfigOnDLS coordinate_type
std::true_type is_leaf_node
Container for MADC control state machine.
halco::hicann_dls::vx::MADCControlOnDLS coordinate_type
std::true_type is_leaf_node
MADCControl() SYMBOL_VISIBLE
#define GENPYBIND_TAG_HALDLS_VX
Backend container trait base.