2 #include "haldls/vx/v2/capmem.h"
3 #include "haldls/vx/v2/neuron.h"
4 #include "hate/visibility.h"
16 typedef haldls::vx::v2::CapMemCell::Value
AnalogValue GENPYBIND(visible);
49 bool enable_small_capacitor;
52 bool enable_high_resistance;
57 GENPYBIND(stringstream)
58 friend std::ostream& operator<<(std::ostream& os,
SynapticInput const& config)
62 struct GENPYBIND(visible)
Leak
76 bool enable_degeneration;
82 bool enable_multiplication;
84 bool operator==(
Leak const& other) const SYMBOL_VISIBLE;
85 bool operator!=(
Leak const& other) const SYMBOL_VISIBLE;
87 GENPYBIND(stringstream)
88 friend std::ostream& operator<<(std::ostream& os,
Leak const& config) SYMBOL_VISIBLE;
105 bool enable_degeneration;
108 bool enable_division;
111 bool enable_multiplication;
113 bool operator==(
Reset const& other) const SYMBOL_VISIBLE;
114 bool operator!=(
Reset const& other) const SYMBOL_VISIBLE;
116 GENPYBIND(stringstream)
117 friend std::ostream& operator<<(std::ostream& os,
Reset const& config) SYMBOL_VISIBLE;
130 bool operator==(
Threshold const& other) const SYMBOL_VISIBLE;
131 bool operator!=(
Threshold const& other) const SYMBOL_VISIBLE;
133 GENPYBIND(stringstream)
134 friend std::ostream& operator<<(std::ostream& os,
Threshold const& config) SYMBOL_VISIBLE;
149 bool connect_soma_right;
155 bool connect_vertical;
158 bool enable_conductance;
161 bool enable_conductance_division;
164 bool enable_conductance_multiplication;
172 GENPYBIND(stringstream)
197 GENPYBIND(stringstream)
215 GENPYBIND(stringstream)
254 bool operator==(
Adaptation const& other) const SYMBOL_VISIBLE;
255 bool operator!=(
Adaptation const& other) const SYMBOL_VISIBLE;
257 GENPYBIND(stringstream)
258 friend std::ostream& operator<<(std::ostream& os,
Adaptation const& config) SYMBOL_VISIBLE;
277 GENPYBIND(stringstream)
278 friend std::ostream& operator<<(std::ostream& os,
Exponential const& config) SYMBOL_VISIBLE;
285 typedef
haldls::vx::v2::NeuronBackendConfig::AddressOut
Address GENPYBIND(visible);
321 bool enable_bypass_excitatory,
322 bool enable_bypass_inhibitory,
324 bool enable_post_overwrite) SYMBOL_VISIBLE;
334 GENPYBIND(stringstream)
335 friend std::ostream& operator<<(std::ostream& os,
EventRouting const& config)
341 typedef haldls::vx::v2::NeuronConfig::ReadoutSource
Source GENPYBIND(visible);
378 bool operator==(
Readout const& other) const SYMBOL_VISIBLE;
379 bool operator!=(
Readout const& other) const SYMBOL_VISIBLE;
381 GENPYBIND(stringstream)
382 friend std::ostream& operator<<(std::ostream& os,
Readout const& config) SYMBOL_VISIBLE;
387 typedef haldls::vx::v2::NeuronBackendConfig::InputClock
InputClock GENPYBIND(visible);
388 typedef haldls::vx::v2::NeuronBackendConfig::ResetHoldoff
ResetHoldoff GENPYBIND(visible);
425 GENPYBIND(stringstream)
435 bool connect_fire_vertical;
436 bool connect_fire_to_right;
437 bool connect_fire_from_right;
449 bool operator==(
Bayesian const& other) const SYMBOL_VISIBLE;
450 bool operator!=(
Bayesian const& other) const SYMBOL_VISIBLE;
452 GENPYBIND(stringstream)
453 friend std::ostream& operator<<(std::ostream& os,
Bayesian const& config) SYMBOL_VISIBLE;
478 explicit operator
haldls::vx::v2::NeuronConfig() const SYMBOL_VISIBLE;
480 parent.def(
"asNeuronConfig", [](GENPYBIND_PARENT_TYPE
const&
self) {
481 return static_cast<haldls::vx::v2::NeuronConfig
>(
self);
485 void set_from(haldls::vx::v2::NeuronConfig
const& neuron_config) SYMBOL_VISIBLE;
488 explicit operator haldls::vx::v2::NeuronBackendConfig() const SYMBOL_VISIBLE;
490 parent.def(
"asNeuronBackendConfig", [](GENPYBIND_PARENT_TYPE
const&
self) {
491 return static_cast<haldls::vx::v2::NeuronBackendConfig
>(
self);
495 void set_from(haldls::vx::v2::NeuronBackendConfig
const& neuron_backend_config) SYMBOL_VISIBLE;
500 GENPYBIND(stringstream)
501 friend std::ostream& operator<<(std::ostream& os,
AtomicNeuron const& config) SYMBOL_VISIBLE;
511 class GENPYBIND(visible) NeuronBlock
514 typedef haldls::vx::v2::CapMemCell::Value
AnalogValue GENPYBIND(visible);
521 NeuronBlock() =
default;
523 typedef halco::common::
524 typed_heap_array<AtomicNeuron, halco::hicann_dls::vx::v2::AtomicNeuronOnDLS>
525 AtomicNeurons GENPYBIND(opaque(
false));
529 AtomicNeurons atomic_neurons{};
531 typedef halco::common::typed_array<
532 haldls::vx::v2::CommonNeuronBackendConfig,
533 halco::hicann_dls::vx::v2::CommonNeuronBackendConfigOnDLS>
534 Backends GENPYBIND(opaque(
false));
541 typedef halco::common::typed_array<
543 halco::hicann_dls::vx::v2::ColumnCurrentRowOnDLS>
544 CurrentRows GENPYBIND(opaque(
false));
549 CurrentRows current_rows{};
551 typedef halco::common::
552 typed_array<AnalogValueVariant, halco::hicann_dls::vx::v2::CapMemBlockOnDLS>
557 AnalogValues v_bias_casc_n{
563 AnalogValues i_bias_readout_amp{
569 AnalogValues i_bias_leak_source_follower{
575 AnalogValues i_bias_threshold_comparator{
578 bool operator==(NeuronBlock
const& other)
const SYMBOL_VISIBLE;
579 bool operator!=(NeuronBlock
const& other)
const SYMBOL_VISIBLE;
581 GENPYBIND(stringstream)
582 friend std::ostream&
operator<<(std::ostream& os, NeuronBlock
const& config) SYMBOL_VISIBLE;
587 auto av = parent->py::template class_<::lola::vx::v2::NeuronBlock::AnalogValues>(
588 parent,
"AnalogValues");
590 "fill", &::lola::vx::v2::NeuronBlock::AnalogValues::fill,
"", parent->py::arg(
"val"));
592 typedef ::lola::vx::v2::NeuronBlock::AnalogValues::reference (
593 ::lola::vx::v2::NeuronBlock::AnalogValues::*genpybind_at_type)(
594 const ::lola::vx::v2::NeuronBlock::AnalogValues::key_type&);
596 "at", (genpybind_at_type) & ::lola::vx::v2::NeuronBlock::AnalogValues::at,
"",
597 parent->py::arg(
"key"));
600 typedef ::lola::vx::v2::NeuronBlock::AnalogValues::const_reference (
601 ::lola::vx::v2::NeuronBlock::AnalogValues::*genpybind_at_type)(
602 const ::lola::vx::v2::NeuronBlock::AnalogValues::key_type&)
const;
604 "at", (genpybind_at_type) & ::lola::vx::v2::NeuronBlock::AnalogValues::at,
"",
605 parent->py::arg(
"key"));
608 typedef ::lola::vx::v2::NeuronBlock::AnalogValues::reference (
609 ::lola::vx::v2::NeuronBlock::AnalogValues::*genpybind_front_type)();
611 "front", (genpybind_front_type) & ::lola::vx::v2::NeuronBlock::AnalogValues::front,
615 typedef ::lola::vx::v2::NeuronBlock::AnalogValues::const_reference (
616 ::lola::vx::v2::NeuronBlock::AnalogValues::*genpybind_front_type)()
const;
618 "front", (genpybind_front_type) & ::lola::vx::v2::NeuronBlock::AnalogValues::front,
622 typedef ::lola::vx::v2::NeuronBlock::AnalogValues::reference (
623 ::lola::vx::v2::NeuronBlock::AnalogValues::*genpybind_back_type)();
625 "back", (genpybind_back_type) & ::lola::vx::v2::NeuronBlock::AnalogValues::back,
629 typedef ::lola::vx::v2::NeuronBlock::AnalogValues::const_reference (
630 ::lola::vx::v2::NeuronBlock::AnalogValues::*genpybind_back_type)()
const;
632 "back", (genpybind_back_type) & ::lola::vx::v2::NeuronBlock::AnalogValues::back,
636 "__getitem__", &::lola::vx::v2::NeuronBlock::AnalogValues::get,
"",
637 parent->py::arg(
"key"), parent->py::return_value_policy::reference);
639 "__setitem__", &::lola::vx::v2::NeuronBlock::AnalogValues::set,
"",
640 parent->py::arg(
"key"), parent->py::arg(
"value"));
643 [av](::lola::vx::v2::NeuronBlock::AnalogValues&
self) {
644 return pybind11::make_iterator(
self);
646 parent->py::template keep_alive<0, 1>());
648 av.def(
"to_numpy", [](::lola::vx::v2::NeuronBlock::AnalogValues
const&
self) {
649 return ::halco::common::detail::to_numpy(
self);
653 [](::lola::vx::v2::NeuronBlock::AnalogValues&
self, pybind11::array
const& array) {
654 ::halco::common::detail::from_numpy(
self, array);
656 av.def(parent->py::template init<const ::lola::vx::v2::NeuronBlock::AnalogValues&>(),
"");
657 av.def(parent->py::template init<>(),
"");
658 av.def_property_readonly(
659 "size", parent->py::cpp_function(&::lola::vx::v2::NeuronBlock::AnalogValues::size));
660 av.def_property_readonly(
662 parent->py::cpp_function(&::lola::vx::v2::NeuronBlock::AnalogValues::max_size));
663 av.def_property_readonly(
664 "empty", parent->py::cpp_function(&::lola::vx::v2::NeuronBlock::AnalogValues::empty));
667 friend class haldls::vx::detail::VisitPreorderImpl<NeuronBlock>;
672 #include "lola/vx/v2/neuron.tcc"
Configuration of digital and analog parameters for a single-denmem neuron.
haldls::vx::v2::CapMemCell::Value AnalogValue
haldls::vx::v2::CapMemCell::DisableRefresh AnalogDisableRefresh
halco::hicann_dls::vx::v2::AtomicNeuronOnDLS coordinate_type
haldls::vx::v2::CapMemCell::value_type AnalogValueVariant
std::false_type has_local_data
#define GENPYBIND_TAG_LOLA_VX_V2
lola::vx::ColumnCurrentRow ColumnCurrentRow
class lola::vx::v2::AtomicNeuron set_from(haldls::vx::v2::NeuronConfig const &neuron_config) SYMBOL_VISIBLE
haldls::vx::v2::NeuronBackendConfig::AddressOut Address
Multicompartment configuration of connectivity to adjacent neurons.
Adaptation() SYMBOL_VISIBLE
Bayesian() SYMBOL_VISIBLE
bool operator==(ConstantCurrent const &other) const SYMBOL_VISIBLE
ConstantCurrent() SYMBOL_VISIBLE
Type
Sink/source offset current on membrane.
static const EventRouting enabled SYMBOL_VISIBLE
Address address
Lower 8 bit of address sent on event output.
bool enable_bypass_inhibitory
Enable inhibitory bypass circuit.
bool operator!=(EventRouting const &other) const SYMBOL_VISIBLE
EventRouting(AnalogOutputMode analog_output, bool enable_digital, bool enable_bypass_excitatory, bool enable_bypass_inhibitory, Address address, bool enable_post_overwrite) SYMBOL_VISIBLE
bool enable_bypass_excitatory
Enable excitatory bypass circuit.
static const EventRouting bypass_exc SYMBOL_VISIBLE
bool operator==(EventRouting const &other) const SYMBOL_VISIBLE
AnalogOutputMode
Analog output (off/normal/strong) settings.
static const EventRouting bypass_inh SYMBOL_VISIBLE
bool enable_digital
Enable sending a spike packet out of the digital backend.
haldls::vx::v2::NeuronBackendConfig::AddressOut Address
bool enable_post_overwrite
Enable usage of external post pulses reaching the synapses exclusively.
Exponential() SYMBOL_VISIBLE
bool enable
Enable exponential term.
AnalogValueVariant v_exp
Threshold voltage for the exponential term.
haldls::vx::v2::NeuronConfig::MembraneCapacitorSize CapacitorSize
Multicompartment configuration of connectivity to adjacent neurons.
bool enable_buffered_access
Connect the readout amplifier's output to the shared readout lines.
haldls::vx::v2::NeuronConfig::ReadoutSource Source
bool enable_amplifier
Enable readout amplifier.
bool enable_unbuffered_access
Enable direct, unbuffered access.
haldls::vx::v2::NeuronBackendConfig::InputClock InputClock
RefractoryTime refractory_time
Counter value to control refractory time.
InputClock input_clock
Select between the two input clocks specified in the common neuron backend.
bool enable_pause
Enable gating of synaptic inputs and exponential term during reset periods.
haldls::vx::v2::NeuronBackendConfig::ResetHoldoff ResetHoldoff
haldls::vx::v2::NeuronBackendConfig::RefractoryTime RefractoryTime
ResetHoldoff reset_holdoff
Release the reset potential before the refractory time ends.
Threshold() SYMBOL_VISIBLE
bool operator!=(AtomicNeuron const &other) const SYMBOL_VISIBLE
bool operator==(AtomicNeuron const &other) const SYMBOL_VISIBLE
SynapticInput inhibitory_input
MembraneCapacitance membrane_capacitance
friend std::ostream & operator<<(std::ostream &os, AtomicNeuron const &config) SYMBOL_VISIBLE
ConstantCurrent constant_current
EventRouting event_routing
haldls::vx::v2::CapMemCell::DisableRefresh AnalogDisableRefresh
halco::hicann_dls::vx::v2::AtomicNeuronOnDLS coordinate_type
Multicompartment multicompartment
std::false_type has_local_data
haldls::vx::v2::CapMemCell::Value AnalogValue
SynapticInput excitatory_input
RefractoryPeriod refractory_period
haldls::vx::v2::CapMemCell::value_type AnalogValueVariant
AtomicNeuron() SYMBOL_VISIBLE