8 #include "halco/common/geometry.h"
9 #include "halco/common/iter_all.h"
10 #include "halco/common/typed_heap_array.h"
11 #include "halco/hicann-dls/vx/capmem.h"
16 #include "hate/join.h"
17 #include "hate/visibility.h"
20 #include "hxcomm/vx/target.h"
24 class OmnibusChipOverJTAG;
31 template <
typename Coordinates>
34 template <
typename Coordinates>
41 struct GENPYBIND(inline_base("*
")) Value
42 : public halco::common::detail::RantWrapper<Value, uint_fast16_t, 1022, 0>
44 typedef typename halco::common::detail::RantWrapper<Value, uint_fast16_t, 1022, 0>::rant_t
46 // default constructor needed because std::variant checks std::is_default_constructible
47 // which is false for constructors with default arguments
48 constexpr explicit Value() : rant_t(0) {}
49 constexpr explicit Value(uintmax_t const val) GENPYBIND(implicit_conversion) : rant_t(val)
53 struct GENPYBIND(inline_base("*
")) DisableRefresh
54 : public halco::common::detail::RantWrapper<DisableRefresh, uint_fast16_t, 1023, 1023>
56 typedef typename halco::common::detail::
57 RantWrapper<DisableRefresh, uint_fast16_t, 1023, 1023>::rant_t rant_t;
58 constexpr explicit DisableRefresh() : rant_t(1023) {}
59 constexpr explicit DisableRefresh(uintmax_t const val) : rant_t(val) {}
62 typedef std::variant<Value, DisableRefresh> value_type;
64 explicit CapMemCell(value_type const& value = Value()) : m_value(value) {}
66 GENPYBIND(getter_for(value))
67 value_type get_value() const;
68 GENPYBIND(setter_for(value))
69 void set_value(value_type const& value);
71 static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1;
72 template <typename AddressT>
73 static std::array<AddressT, config_size_in_words> addresses(coordinate_type const& cell)
75 template <typename WordT>
76 std::array<WordT, config_size_in_words> encode() const GENPYBIND(hidden);
77 template <typename WordT>
78 void decode(std::array<WordT, config_size_in_words> const& data) GENPYBIND(hidden);
80 GENPYBIND(stringstream)
81 friend std::ostream& operator<<(std::ostream& os, CapMemCell const& cell)
84 std::visit([&](auto const& v) { os << v; }, cell.m_value);
89 bool operator==(CapMemCell const& other) const;
90 bool operator!=(CapMemCell const& other) const;
93 friend class cereal::access;
94 template <class Archive>
95 void serialize(Archive& ar, std::uint32_t const version);
100 template <typename Coordinates>
103 template <typename Coordinates>
104 class SYMBOL_VISIBLE CapMemBlock : public DifferentialWriteTrait
107 typedef typename Coordinates::CapMemBlockOnDLS coordinate_type;
108 typedef std::false_type has_local_data;
112 typename CapMemCell<Coordinates>::value_type get_cell(
113 typename Coordinates::CapMemCellOnCapMemBlock const& cell) const;
115 typename Coordinates::CapMemCellOnCapMemBlock const& cell,
116 typename CapMemCell<Coordinates>::value_type const& value);
118 GENPYBIND(stringstream)
119 friend std::ostream& operator<<(std::ostream& os, CapMemBlock<Coordinates> const& block)
122 for (auto const coord :
123 halco::common::iter_all<typename Coordinates::CapMemCellOnCapMemBlock>()) {
124 os << "\t
" << coord << ":
" << block.m_capmem_cells[coord] << "\n
";
126 os << ")
" << std::flush;
130 bool operator==(CapMemBlock const& other) const;
131 bool operator!=(CapMemBlock const& other) const;
134 friend detail::VisitPreorderImpl<CapMemBlock>;
135 friend class cereal::access;
136 template <class Archive>
137 void serialize(Archive& ar, std::uint32_t const version);
140 typed_heap_array<CapMemCell<Coordinates>, typename Coordinates::CapMemCellOnCapMemBlock>
145 template <typename Coordinates>
146 class CapMemBlockConfig;
149 enum class GENPYBIND(expose_as(_CapMemBlockConfigVRefSelect))
150 CapMemBlockConfigVRefSelect : uint_fast8_t
157 std::ostream& operator<<(std::ostream& os, CapMemBlockConfigVRefSelect const& config)
161 enum class GENPYBIND(expose_as(_CapMemBlockConfigIOutSelect))
162 CapMemBlockConfigIOutSelect : uint_fast8_t
169 std::ostream& operator<<(std::ostream& os, CapMemBlockConfigIOutSelect const& config)
172 template <typename Coordinates>
173 class SYMBOL_VISIBLE CapMemBlockConfig : public DifferentialWriteTrait
176 typedef typename Coordinates::CapMemBlockConfigOnDLS coordinate_type;
177 typedef std::true_type is_leaf_node;
179 constexpr static auto unsupported_read_targets GENPYBIND(hidden) = {
180 hxcomm::vx::Target::hardware};
183 struct GENPYBIND(inline_base("*
")) OutAmpBias
184 : public halco::common::detail::RantWrapper<OutAmpBias, uint_fast16_t, 15, 0>
187 typename halco::common::detail::RantWrapper<OutAmpBias, uint_fast16_t, 15, 0>::rant_t
189 constexpr explicit OutAmpBias() : rant_t(0) {}
190 constexpr explicit OutAmpBias(uintmax_t const val) GENPYBIND(implicit_conversion) :
194 struct GENPYBIND(inline_base("*
")) SourceFollowerBias
195 : public halco::common::detail::RantWrapper<SourceFollowerBias, uint_fast16_t, 15, 0>
197 typedef typename halco::common::detail::
198 RantWrapper<SourceFollowerBias, uint_fast16_t, 15, 0>::rant_t rant_t;
199 constexpr explicit SourceFollowerBias() : rant_t(0) {}
200 constexpr explicit SourceFollowerBias(uintmax_t const val) GENPYBIND(implicit_conversion) :
204 struct GENPYBIND(inline_base("*
")) LevelShifterBias
205 : public halco::common::detail::RantWrapper<LevelShifterBias, uint_fast16_t, 15, 0>
207 typedef typename halco::common::detail::
208 RantWrapper<LevelShifterBias, uint_fast16_t, 15, 0>::rant_t rant_t;
209 constexpr explicit LevelShifterBias() : rant_t(0) {}
210 constexpr explicit LevelShifterBias(uintmax_t const val) GENPYBIND(implicit_conversion) :
215 struct GENPYBIND(inline_base("*
")) VGlobalBias
216 : public halco::common::detail::RantWrapper<VGlobalBias, uint_fast16_t, 15, 0>
219 typename halco::common::detail::RantWrapper<VGlobalBias, uint_fast16_t, 15, 0>::rant_t
221 constexpr explicit VGlobalBias() : rant_t(0) {}
222 constexpr explicit VGlobalBias(uintmax_t const val) GENPYBIND(implicit_conversion) :
226 struct GENPYBIND(inline_base("*
")) CurrentCellRes
227 : public halco::common::detail::RantWrapper<CurrentCellRes, uint_fast16_t, 63, 0>
229 typedef typename halco::common::detail::RantWrapper<CurrentCellRes, uint_fast16_t, 63, 0>::
231 constexpr explicit CurrentCellRes() : rant_t(0) {}
232 constexpr explicit CurrentCellRes(uintmax_t const val) GENPYBIND(implicit_conversion) :
236 struct GENPYBIND(inline_base("*
")) BoostFactor
237 : public halco::common::detail::RantWrapper<BoostFactor, uint_fast16_t, 15, 0>
240 typename halco::common::detail::RantWrapper<BoostFactor, uint_fast16_t, 15, 0>::rant_t
242 constexpr explicit BoostFactor() : rant_t(0) {}
243 constexpr explicit BoostFactor(uintmax_t const val) GENPYBIND(implicit_conversion) :
247 struct GENPYBIND(inline_base("*
")) PrescalePause
248 : public halco::common::detail::RantWrapper<PrescalePause, uint_fast16_t, 6, 0>
251 typename halco::common::detail::RantWrapper<PrescalePause, uint_fast16_t, 6, 0>::rant_t
253 constexpr explicit PrescalePause() : rant_t(0) {}
254 constexpr explicit PrescalePause(uintmax_t const val) GENPYBIND(implicit_conversion) :
258 struct GENPYBIND(inline_base("*
")) PrescaleRamp
259 : public halco::common::detail::RantWrapper<PrescaleRamp, uint_fast16_t, 6, 0>
262 typename halco::common::detail::RantWrapper<PrescaleRamp, uint_fast16_t, 6, 0>::rant_t
264 constexpr explicit PrescaleRamp() : rant_t(0) {}
265 constexpr explicit PrescaleRamp(uintmax_t const val) GENPYBIND(implicit_conversion) :
269 struct GENPYBIND(inline_base("*
")) SubCounter
270 : public halco::common::detail::
271 RantWrapper<SubCounter, uint_fast16_t, 65535 /* 2^16*-1 */, 0>
273 typedef typename halco::common::detail::
274 RantWrapper<SubCounter, uint_fast16_t, 65535 /* 2^16*-1 */, 0>::rant_t rant_t;
275 constexpr explicit SubCounter() : rant_t(0) {}
276 constexpr explicit SubCounter(uintmax_t const val) GENPYBIND(implicit_conversion) :
280 struct GENPYBIND(inline_base("*
")) PauseCounter
281 : public halco::common::detail::
282 RantWrapper<PauseCounter, uint_fast32_t, 4294967295 /* 2^32-1 */, 0>
284 typedef typename halco::common::detail::
285 RantWrapper<PauseCounter, uint_fast32_t, 4294967295 /* 2^32-1 */, 0>::rant_t rant_t;
286 constexpr explicit PauseCounter() : rant_t(0) {}
287 constexpr explicit PauseCounter(uintmax_t const val) GENPYBIND(implicit_conversion) :
291 struct GENPYBIND(inline_base("*
")) PulseA
292 : public halco::common::detail::RantWrapper<PulseA, uint_fast16_t, 65535, 0>
294 typedef typename halco::common::detail::RantWrapper<PulseA, uint_fast16_t, 65535, 0>::rant_t
296 constexpr explicit PulseA() : rant_t(0) {}
297 constexpr explicit PulseA(uintmax_t const val) GENPYBIND(implicit_conversion) : rant_t(val)
300 struct GENPYBIND(inline_base("*
")) PulseB
301 : public halco::common::detail::RantWrapper<PulseB, uint_fast16_t, 65535, 0>
303 typedef typename halco::common::detail::RantWrapper<PulseB, uint_fast16_t, 65535, 0>::rant_t
305 constexpr explicit PulseB() : rant_t(0) {}
306 constexpr explicit PulseB(uintmax_t const val) GENPYBIND(implicit_conversion) : rant_t(val)
309 struct GENPYBIND(inline_base("*
")) BoostA
310 : public halco::common::detail::RantWrapper<BoostA, uint_fast16_t, 65535, 0>
312 typedef typename halco::common::detail::RantWrapper<BoostA, uint_fast16_t, 65535, 0>::rant_t
314 constexpr explicit BoostA() : rant_t(0) {}
315 constexpr explicit BoostA(uintmax_t const val) GENPYBIND(implicit_conversion) : rant_t(val)
318 struct GENPYBIND(inline_base("*
")) BoostB
319 : public halco::common::detail::RantWrapper<BoostB, uint_fast16_t, 65535, 0>
321 typedef typename halco::common::detail::RantWrapper<BoostB, uint_fast16_t, 65535, 0>::rant_t
323 constexpr explicit BoostB() : rant_t(0) {}
324 constexpr explicit BoostB(uintmax_t const val) GENPYBIND(implicit_conversion) : rant_t(val)
328 typedef CapMemBlockConfigVRefSelect VRefSelect GENPYBIND(visible);
329 typedef CapMemBlockConfigIOutSelect IOutSelect GENPYBIND(visible);
333 GENPYBIND(getter_for(enable_capmem))
334 bool get_enable_capmem() const;
335 GENPYBIND(setter_for(enable_capmem))
336 void set_enable_capmem(bool const value);
338 GENPYBIND(getter_for(debug_readout_enable))
339 bool get_debug_readout_enable() const;
340 GENPYBIND(setter_for(debug_readout_enable))
341 void set_debug_readout_enable(bool const value);
343 GENPYBIND(getter_for(debug_capmem_coord))
344 typename Coordinates::CapMemCellOnCapMemBlock get_debug_capmem_coord() const;
345 GENPYBIND(setter_for(debug_capmem_coord))
346 void set_debug_capmem_coord(typename Coordinates::CapMemCellOnCapMemBlock const& value);
348 GENPYBIND(getter_for(debug_v_ref_select))
349 VRefSelect get_debug_v_ref_select() const;
350 GENPYBIND(setter_for(debug_v_ref_select))
351 void set_debug_v_ref_select(VRefSelect const& value);
353 GENPYBIND(getter_for(debug_i_out_select))
354 IOutSelect get_debug_i_out_select() const;
355 GENPYBIND(setter_for(debug_i_out_select))
356 void set_debug_i_out_select(IOutSelect const& value);
358 GENPYBIND(getter_for(debug_out_amp_bias))
359 OutAmpBias get_debug_out_amp_bias() const;
360 GENPYBIND(setter_for(debug_out_amp_bias))
361 void set_debug_out_amp_bias(OutAmpBias const& value);
363 GENPYBIND(getter_for(debug_source_follower_bias))
364 SourceFollowerBias get_debug_source_follower_bias() const;
365 GENPYBIND(setter_for(debug_source_follower_bias))
366 void set_debug_source_follower_bias(SourceFollowerBias const& value);
368 GENPYBIND(getter_for(debug_level_shifter_bias))
369 LevelShifterBias get_debug_level_shifter_bias() const;
370 GENPYBIND(setter_for(debug_level_shifter_bias))
371 void set_debug_level_shifter_bias(LevelShifterBias const& value);
373 GENPYBIND(getter_for(v_global_bias))
374 VGlobalBias get_v_global_bias() const;
375 GENPYBIND(setter_for(v_global_bias))
376 void set_v_global_bias(VGlobalBias const& value);
378 GENPYBIND(getter_for(current_cell_res))
379 CurrentCellRes get_current_cell_res() const;
380 GENPYBIND(setter_for(current_cell_res))
381 void set_current_cell_res(CurrentCellRes const& value);
383 GENPYBIND(getter_for(boost_factor))
384 BoostFactor get_boost_factor() const;
385 GENPYBIND(setter_for(boost_factor))
386 void set_boost_factor(BoostFactor const& value);
388 GENPYBIND(getter_for(enable_boost))
389 bool get_enable_boost() const;
390 GENPYBIND(setter_for(enable_boost))
391 void set_enable_boost(bool const value);
393 GENPYBIND(getter_for(enable_autoboost))
394 bool get_enable_autoboost() const;
395 GENPYBIND(setter_for(enable_autoboost))
396 void set_enable_autoboost(bool const value);
398 GENPYBIND(getter_for(prescale_pause))
399 PrescalePause get_prescale_pause() const;
400 GENPYBIND(setter_for(prescale_pause))
401 void set_prescale_pause(PrescalePause const& value);
403 GENPYBIND(getter_for(prescale_ramp))
404 PrescaleRamp get_prescale_ramp() const;
405 GENPYBIND(setter_for(prescale_ramp))
406 void set_prescale_ramp(PrescaleRamp const& value);
408 GENPYBIND(getter_for(sub_counter))
409 SubCounter get_sub_counter() const;
410 GENPYBIND(setter_for(sub_counter))
411 void set_sub_counter(SubCounter const& value);
413 GENPYBIND(getter_for(pause_counter))
414 PauseCounter get_pause_counter() const;
415 GENPYBIND(setter_for(pause_counter))
416 void set_pause_counter(PauseCounter const& value);
418 GENPYBIND(getter_for(pulse_a))
419 PulseA get_pulse_a() const;
420 GENPYBIND(setter_for(pulse_a))
421 void set_pulse_a(PulseA const& value);
423 GENPYBIND(getter_for(pulse_b))
424 PulseB get_pulse_b() const;
425 GENPYBIND(setter_for(pulse_b))
426 void set_pulse_b(PulseB const& value);
428 GENPYBIND(getter_for(boost_a))
429 BoostA get_boost_a() const;
430 GENPYBIND(setter_for(boost_a))
431 void set_boost_a(BoostA const& value);
433 GENPYBIND(getter_for(boost_b))
434 BoostB get_boost_b() const;
435 GENPYBIND(setter_for(boost_b))
436 void set_boost_b(BoostB const& value);
438 static size_t constexpr config_size_in_words GENPYBIND(hidden) = 10;
439 template <typename AddressT>
440 static std::array<AddressT, config_size_in_words> addresses(coordinate_type const& coord)
442 template <typename WordT>
443 std::array<WordT, config_size_in_words> encode() const GENPYBIND(hidden);
444 template <typename WordT>
445 void decode(std::array<WordT, config_size_in_words> const& data) GENPYBIND(hidden);
447 bool operator==(CapMemBlockConfig const& other) const;
448 bool operator!=(CapMemBlockConfig const& other) const;
450 GENPYBIND(stringstream)
451 friend std::ostream& operator<<(std::ostream& os, CapMemBlockConfig<Coordinates> const& config)
453 std::stringstream ss;
455 ss << std::boolalpha;
456 ss << "\tenable_capmem: \t
" << config.m_enable_capmem << "\n
";
457 ss << "\tdebug_readout_enable: \t
" << config.m_debug_readout_enable << "\n
";
458 ss << "\tdebug_capmem_coord: \t
" << config.m_debug_capmem_coord << "\n
";
459 ss << "\tdebug_v_ref_select: \t
" << config.m_debug_v_ref_select << "\n
";
460 ss << "\tdebug_i_out_select: \t
" << config.m_debug_i_out_select << "\n
";
461 ss << "\tdebug_out_amp_bias: \t
" << config.m_debug_out_amp_bias << "\n
";
462 ss << "\tdebug_source_follower_bias: \t
" << config.m_debug_source_follower_bias << "\n
";
463 ss << "\tdebug_level_shifter_bias: \t
" << config.m_debug_level_shifter_bias << "\n
";
464 ss << "\tv_global_bias: \t
" << config.m_v_global_bias << "\n
";
465 ss << "\tcurrent_cell_res: \t
" << config.m_current_cell_res << "\n
";
466 ss << "\tenable_boost: \t
" << config.m_enable_boost << "\n
";
467 ss << "\tboost_factor: \t
" << config.m_boost_factor << "\n
";
468 ss << "\tenable_autoboost: \t
" << config.m_enable_autoboost << "\n
";
469 ss << "\tprescale_pause: \t
" << config.m_prescale_pause << "\n
";
470 ss << "\tprescale_ramp: \t
" << config.m_prescale_ramp << "\n
";
471 ss << "\tsub_counter: \t
" << config.m_sub_counter << "\n
";
472 ss << "\tpause_counter: \t
" << config.m_pause_counter << "\n
";
473 ss << "\tpulse_a: \t
" << config.m_pulse_a << "\n
";
474 ss << "\tpulse_b: \t
" << config.m_pulse_b << "\n
";
475 ss << "\tboost_a: \t
" << config.m_boost_a << "\n
";
476 ss << "\tboost_b: \t
" << config.m_boost_b << "\n
";
477 ss << ")
" << std::flush;
478 return (os << ss.str());
482 friend class cereal::access;
483 template <class Archive>
484 void serialize(Archive& ar, std::uint32_t const version);
486 bool m_enable_capmem;
487 bool m_debug_readout_enable;
488 typename Coordinates::CapMemCellOnCapMemBlock m_debug_capmem_coord;
489 VRefSelect m_debug_v_ref_select;
490 IOutSelect m_debug_i_out_select;
491 OutAmpBias m_debug_out_amp_bias;
492 SourceFollowerBias m_debug_source_follower_bias;
493 LevelShifterBias m_debug_level_shifter_bias;
494 VGlobalBias m_v_global_bias;
495 CurrentCellRes m_current_cell_res;
497 BoostFactor m_boost_factor;
498 bool m_enable_autoboost;
499 PrescalePause m_prescale_pause;
500 PrescaleRamp m_prescale_ramp;
501 SubCounter m_sub_counter;
502 PauseCounter m_pause_counter;
511 template <typename Coordinates>
512 struct BackendContainerTrait<CapMemBlockConfig<Coordinates>>
513 : public BackendContainerBase<
514 CapMemBlockConfig<Coordinates>,
515 fisch::vx::word_access_type::Omnibus,
516 fisch::vx::word_access_type::OmnibusChipOverJTAG>
519 template <typename Coordinates>
520 struct BackendContainerTrait<CapMemBlock<Coordinates>>
521 : public BackendContainerBase<
522 CapMemBlock<Coordinates>,
523 fisch::vx::word_access_type::Omnibus,
524 fisch::vx::word_access_type::OmnibusChipOverJTAG>
527 template <typename Coordinates>
528 struct BackendContainerTrait<CapMemCell<Coordinates>>
529 : public BackendContainerBase<
530 CapMemCell<Coordinates>,
531 fisch::vx::word_access_type::Omnibus,
532 fisch::vx::word_access_type::OmnibusChipOverJTAG>
535 template <typename Coordinates>
536 struct VisitPreorderImpl<CapMemBlock<Coordinates>>
538 template <typename ContainerT, typename VisitorT>
541 typename CapMemBlock<Coordinates>::coordinate_type const& coord,
544 using halco::common::iter_all;
546 visitor(coord, config);
548 for (auto const cell : iter_all<typename Coordinates::CapMemCellOnCapMemBlock>()) {
549 // No std::forward for visitor argument, as we want to pass a reference to the
550 // nested visitor in any case, even if it was passed as an rvalue to this function.
552 config.m_capmem_cells[cell], typename Coordinates::CapMemCellOnDLS(cell, coord),
558 } // namespace detail
560 #define CAPMEM_EXTERN_TEMPLATE(Coordinates) \
561 extern template class SYMBOL_VISIBLE CapMemCell<Coordinates>; \
562 extern template class SYMBOL_VISIBLE CapMemBlock<Coordinates>; \
563 extern template class SYMBOL_VISIBLE CapMemBlockConfig<Coordinates>; \
564 std::ostream& operator<<( \
565 std::ostream& os, typename CapMemCell<Coordinates>::value_type const& value) \
566 SYMBOL_VISIBLE GENPYBIND(hidden); \
568 extern template SYMBOL_VISIBLE std::array< \
569 halco::hicann_dls::vx::OmnibusAddress, CapMemCell<Coordinates>::config_size_in_words> \
570 CapMemCell<Coordinates>::addresses<halco::hicann_dls::vx::OmnibusAddress>( \
571 coordinate_type const& cell); \
572 extern template SYMBOL_VISIBLE std::array< \
573 fisch::vx::word_access_type::OmnibusChipOverJTAG, \
574 CapMemCell<Coordinates>::config_size_in_words> \
575 CapMemCell<Coordinates>::encode<fisch::vx::word_access_type::OmnibusChipOverJTAG>() const; \
576 extern template SYMBOL_VISIBLE std::array< \
577 fisch::vx::word_access_type::Omnibus, CapMemCell<Coordinates>::config_size_in_words> \
578 CapMemCell<Coordinates>::encode<fisch::vx::word_access_type::Omnibus>() const; \
579 extern template SYMBOL_VISIBLE void \
580 CapMemCell<Coordinates>::decode<fisch::vx::word_access_type::OmnibusChipOverJTAG>( \
582 fisch::vx::word_access_type::OmnibusChipOverJTAG, \
583 CapMemCell<Coordinates>::config_size_in_words> const& data); \
584 extern template SYMBOL_VISIBLE void \
585 CapMemCell<Coordinates>::decode<fisch::vx::word_access_type::Omnibus>( \
587 fisch::vx::word_access_type::Omnibus, \
588 CapMemCell<Coordinates>::config_size_in_words> const& data); \
590 extern template SYMBOL_VISIBLE std::array< \
591 halco::hicann_dls::vx::OmnibusChipOverJTAGAddress, \
592 CapMemCell<Coordinates>::config_size_in_words> \
593 CapMemCell<Coordinates>::addresses<halco::hicann_dls::vx::OmnibusChipOverJTAGAddress>( \
594 coordinate_type const& cell); \
596 extern template SYMBOL_VISIBLE std::array< \
597 halco::hicann_dls::vx::OmnibusChipOverJTAGAddress, \
598 CapMemBlockConfig<Coordinates>::config_size_in_words> \
599 CapMemBlockConfig<Coordinates>::addresses(coordinate_type const& coord); \
600 extern template SYMBOL_VISIBLE std::array< \
601 halco::hicann_dls::vx::OmnibusAddress, \
602 CapMemBlockConfig<Coordinates>::config_size_in_words> \
603 CapMemBlockConfig<Coordinates>::addresses(coordinate_type const& coord); \
604 extern template SYMBOL_VISIBLE std::array< \
605 fisch::vx::word_access_type::OmnibusChipOverJTAG, \
606 CapMemBlockConfig<Coordinates>::config_size_in_words> \
607 CapMemBlockConfig<Coordinates>::encode() const; \
608 extern template SYMBOL_VISIBLE std::array< \
609 fisch::vx::word_access_type::Omnibus, \
610 CapMemBlockConfig<Coordinates>::config_size_in_words> \
611 CapMemBlockConfig<Coordinates>::encode() const; \
612 extern template SYMBOL_VISIBLE void CapMemBlockConfig<Coordinates>::decode( \
614 fisch::vx::word_access_type::OmnibusChipOverJTAG, \
615 CapMemBlockConfig<Coordinates>::config_size_in_words> const& data); \
616 extern template SYMBOL_VISIBLE void CapMemBlockConfig<Coordinates>::decode( \
618 fisch::vx::word_access_type::Omnibus, \
619 CapMemBlockConfig<Coordinates>::config_size_in_words> const& data);
622 } // namespace haldls
626 #define CAPMEM_HALCO_GEOMETRY_HASH(Coordinates) \
627 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemCell<Coordinates>::Value) \
628 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemCell<Coordinates>::DisableRefresh) \
629 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::OutAmpBias) \
630 HALCO_GEOMETRY_HASH_CLASS( \
631 typename haldls::vx::CapMemBlockConfig<Coordinates>::SourceFollowerBias) \
632 HALCO_GEOMETRY_HASH_CLASS( \
633 typename haldls::vx::CapMemBlockConfig<Coordinates>::LevelShifterBias) \
634 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::VGlobalBias) \
635 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::CurrentCellRes) \
636 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::BoostFactor) \
637 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::PrescalePause) \
638 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::PrescaleRamp) \
639 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::SubCounter) \
640 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::PauseCounter) \
641 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::PulseA) \
642 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::PulseB) \
643 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::BoostA) \
644 HALCO_GEOMETRY_HASH_CLASS(typename haldls::vx::CapMemBlockConfig<Coordinates>::BoostB)
Coordinates::CapMemCellOnDLS coordinate_type
std::true_type is_leaf_node
Trait signalling derived-from container type support differential write operation.
#define GENPYBIND_TAG_HALDLS_VX
haldls::vx::CapMemCell< halco::hicann_dls::vx::v3::Coordinates > CapMemCell
haldls::vx::CapMemBlockConfig< halco::hicann_dls::vx::v2::Coordinates > CapMemBlockConfig
haldls::vx::CapMemBlock< halco::hicann_dls::vx::v2::Coordinates > CapMemBlock