diff --git a/include/halco/hicann-dls/vx/cadc.h b/include/halco/hicann-dls/vx/cadc.h
index 727d5b738f918fd213856445b57c2d09c5a6e7f6..6e11c238ade0cd458ca109250da6c8163f9fcb54 100644
--- a/include/halco/hicann-dls/vx/cadc.h
+++ b/include/halco/hicann-dls/vx/cadc.h
@@ -114,6 +114,121 @@ struct GENPYBIND(inline_base("*")) CADCSamplesOnDLS
constexpr explicit CADCSamplesOnDLS(uintmax_t const val = 0) : rant_t(val) {}
};
+
+struct SynapseQuadOnDLS;
+struct SynapseWeightQuadOnDLS;
+struct SynapseLabelQuadOnDLS;
+struct SynapseCorrelationCalibQuadOnDLS;
+
+
+HALCO_COORDINATE_MIXIN(CADCChannelTypeMixin, CADCChannelType, cadc_channel_type)
+
+struct GENPYBIND(inline_base("*CADCChannelTypeMixin*")) CADCSampleQuadUnspecifiedReadoutOnSynram
+ : public CADCChannelTypeMixin<CADCSampleQuadUnspecifiedReadoutOnSynram, SynapseQuadOnSynram>
+{
+ CADCSampleQuadUnspecifiedReadoutOnSynram() = default;
+
+ explicit CADCSampleQuadUnspecifiedReadoutOnSynram(
+ SynapseQuadOnSynram const& quad, CADCChannelType const& cadc_channel_type) :
+ mixin_t(quad, cadc_channel_type)
+ {}
+
+ explicit CADCSampleQuadUnspecifiedReadoutOnSynram(enum_type const& e) : mixin_t(e) {}
+
+ SynapseQuadOnSynram toSynapseQuadOnSynram() const
+ {
+ return This();
+ }
+};
+
+
+HALCO_COORDINATE_MIXIN(CADCReadoutTypeMixin, CADCReadoutType, cadc_readout_type)
+
+struct GENPYBIND(inline_base("*CADCReadoutTypeMixin*")) CADCSampleQuadOnSynram
+ : public CADCReadoutTypeMixin<CADCSampleQuadOnSynram, CADCSampleQuadUnspecifiedReadoutOnSynram>
+{
+ CADCSampleQuadOnSynram() = default;
+
+ explicit CADCSampleQuadOnSynram(
+ SynapseQuadOnSynram const& quad,
+ CADCChannelType const& cadc_channel_type,
+ CADCReadoutType const& cadc_readout_type = CADCReadoutType()) :
+ mixin_t(
+ CADCSampleQuadUnspecifiedReadoutOnSynram(quad, cadc_channel_type), cadc_readout_type)
+ {}
+
+ explicit CADCSampleQuadOnSynram(enum_type const& e) : mixin_t(e) {}
+
+ CADCSampleQuadUnspecifiedReadoutOnSynram toCADCSampleQuadUnspecifiedReadoutOnSynram() const
+ {
+ return This();
+ }
+};
+
+struct GENPYBIND(inline_base("*SynramMixin*")) CADCSampleQuadOnDLS
+ : public SynramMixin<CADCSampleQuadOnDLS, CADCSampleQuadOnSynram>
+{
+ CADCSampleQuadOnDLS() = default;
+
+ explicit CADCSampleQuadOnDLS(CADCSampleQuadOnSynram const& block, SynramOnDLS const& synram) :
+ mixin_t(block, synram)
+ {}
+
+ explicit CADCSampleQuadOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ CADCSampleQuadOnSynram toCADCSampleQuadOnSynram() const
+ {
+ return This();
+ }
+
+ SynapseQuadOnDLS toSynapseQuadOnDLS() const;
+ SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
+ SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
+ SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
+};
+
+struct GENPYBIND(inline_base("*CADCChannelTypeMixin*")) CADCChannelConfigOnSynram
+ : public CADCChannelTypeMixin<CADCChannelConfigOnSynram, CADCChannelColumnOnSynram>
+{
+ CADCChannelConfigOnSynram() = default;
+
+ explicit CADCChannelConfigOnSynram(
+ CADCChannelColumnOnSynram const& quad, CADCChannelType const& cadc_channel_type) :
+ mixin_t(quad, cadc_channel_type)
+ {}
+
+ explicit CADCChannelConfigOnSynram(enum_type const& e) : mixin_t(e) {}
+
+ CADCChannelColumnOnSynram toCADCChannelColumnOnSynram() const
+ {
+ return This();
+ }
+ SynapseOnSynapseRow toSynapseOnSynapseRow() const
+ {
+ return SynapseOnSynapseRow(int(toCADCChannelColumnOnSynram().toEnum()));
+ }
+};
+
+
+struct GENPYBIND(inline_base("*SynramMixin*")) CADCChannelConfigOnDLS
+ : public SynramMixin<CADCChannelConfigOnDLS, CADCChannelConfigOnSynram>
+{
+ CADCChannelConfigOnDLS() = default;
+
+ explicit CADCChannelConfigOnDLS(
+ CADCChannelConfigOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(block, synram)
+ {}
+
+ explicit CADCChannelConfigOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ CADCChannelConfigOnSynram toCADCChannelConfigOnSynram() const
+ {
+ return This();
+ }
+ NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
+};
+
} // namespace halco::hicann_dls::vx
namespace std {
@@ -125,5 +240,10 @@ HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCChannelColumnOnSynram)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCSampleRowOnDLS)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCOffsetSRAMTimingConfigOnDLS)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCSamplesOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCSampleQuadOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCChannelConfigOnSynram)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCChannelConfigOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCSampleQuadUnspecifiedReadoutOnSynram)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CADCSampleQuadOnSynram)
} // namespace std
diff --git a/include/halco/hicann-dls/vx/cadc_ns_includes.h b/include/halco/hicann-dls/vx/cadc_ns_includes.h
deleted file mode 100644
index 476016dcc03f8ac0f8ba8f14c70a3ddde1e91261..0000000000000000000000000000000000000000
--- a/include/halco/hicann-dls/vx/cadc_ns_includes.h
+++ /dev/null
@@ -1,123 +0,0 @@
-struct SynapseQuadOnDLS;
-struct SynapseWeightQuadOnDLS;
-struct SynapseLabelQuadOnDLS;
-struct SynapseCorrelationCalibQuadOnDLS;
-
-using CADCOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCOnDLS;
-using CADCConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCConfigOnDLS;
-using CADCChannelType GENPYBIND(visible) = halco::hicann_dls::vx::CADCChannelType;
-using CADCReadoutType GENPYBIND(visible) = halco::hicann_dls::vx::CADCReadoutType;
-using CADCChannelColumnOnSynram GENPYBIND(visible) =
- halco::hicann_dls::vx::CADCChannelColumnOnSynram;
-using CADCSampleRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSampleRowOnDLS;
-using CADCOffsetSRAMTimingConfigOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::CADCOffsetSRAMTimingConfigOnDLS;
-using CADCSamplesOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSamplesOnDLS;
-
-HALCO_COORDINATE_MIXIN(CADCChannelTypeMixin, CADCChannelType, cadc_channel_type)
-
-struct GENPYBIND(inline_base("*CADCChannelTypeMixin*")) CADCSampleQuadUnspecifiedReadoutOnSynram
- : public CADCChannelTypeMixin<CADCSampleQuadUnspecifiedReadoutOnSynram, SynapseQuadOnSynram>
-{
- CADCSampleQuadUnspecifiedReadoutOnSynram() = default;
-
- explicit CADCSampleQuadUnspecifiedReadoutOnSynram(
- SynapseQuadOnSynram const& quad, CADCChannelType const& cadc_channel_type) :
- mixin_t(quad, cadc_channel_type)
- {}
-
- explicit CADCSampleQuadUnspecifiedReadoutOnSynram(enum_type const& e) : mixin_t(e) {}
-
- SynapseQuadOnSynram toSynapseQuadOnSynram() const
- {
- return This();
- }
-};
-
-
-HALCO_COORDINATE_MIXIN(CADCReadoutTypeMixin, CADCReadoutType, cadc_readout_type)
-
-struct GENPYBIND(inline_base("*CADCReadoutTypeMixin*")) CADCSampleQuadOnSynram
- : public CADCReadoutTypeMixin<CADCSampleQuadOnSynram, CADCSampleQuadUnspecifiedReadoutOnSynram>
-{
- CADCSampleQuadOnSynram() = default;
-
- explicit CADCSampleQuadOnSynram(
- SynapseQuadOnSynram const& quad,
- CADCChannelType const& cadc_channel_type,
- CADCReadoutType const& cadc_readout_type = CADCReadoutType()) :
- mixin_t(
- CADCSampleQuadUnspecifiedReadoutOnSynram(quad, cadc_channel_type), cadc_readout_type)
- {}
-
- explicit CADCSampleQuadOnSynram(enum_type const& e) : mixin_t(e) {}
-
- CADCSampleQuadUnspecifiedReadoutOnSynram toCADCSampleQuadUnspecifiedReadoutOnSynram() const
- {
- return This();
- }
-};
-
-struct GENPYBIND(inline_base("*SynramMixin*")) CADCSampleQuadOnDLS
- : public SynramMixin<CADCSampleQuadOnDLS, CADCSampleQuadOnSynram>
-{
- CADCSampleQuadOnDLS() = default;
-
- explicit CADCSampleQuadOnDLS(CADCSampleQuadOnSynram const& block, SynramOnDLS const& synram) :
- mixin_t(block, synram)
- {}
-
- explicit CADCSampleQuadOnDLS(enum_type const& e) : mixin_t(e) {}
-
- CADCSampleQuadOnSynram toCADCSampleQuadOnSynram() const
- {
- return This();
- }
-
- SynapseQuadOnDLS toSynapseQuadOnDLS() const;
- SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
- SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
- SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
-};
-
-struct GENPYBIND(inline_base("*CADCChannelTypeMixin*")) CADCChannelConfigOnSynram
- : public CADCChannelTypeMixin<CADCChannelConfigOnSynram, CADCChannelColumnOnSynram>
-{
- CADCChannelConfigOnSynram() = default;
-
- explicit CADCChannelConfigOnSynram(
- CADCChannelColumnOnSynram const& quad, CADCChannelType const& cadc_channel_type) :
- mixin_t(quad, cadc_channel_type)
- {}
-
- explicit CADCChannelConfigOnSynram(enum_type const& e) : mixin_t(e) {}
-
- CADCChannelColumnOnSynram toCADCChannelColumnOnSynram() const
- {
- return This();
- }
- SynapseOnSynapseRow toSynapseOnSynapseRow() const
- {
- return SynapseOnSynapseRow(int(toCADCChannelColumnOnSynram().toEnum()));
- }
-};
-
-
-struct GENPYBIND(inline_base("*SynramMixin*")) CADCChannelConfigOnDLS
- : public SynramMixin<CADCChannelConfigOnDLS, CADCChannelConfigOnSynram>
-{
- CADCChannelConfigOnDLS() = default;
-
- explicit CADCChannelConfigOnDLS(
- CADCChannelConfigOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(block, synram)
- {}
-
- explicit CADCChannelConfigOnDLS(enum_type const& e) : mixin_t(e) {}
-
- CADCChannelConfigOnSynram toCADCChannelConfigOnSynram() const
- {
- return This();
- }
- NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
-};
diff --git a/include/halco/hicann-dls/vx/cadc_ns_includes_impl.h b/include/halco/hicann-dls/vx/cadc_ns_includes_impl.h
deleted file mode 100644
index c23af82be37814901b2118d6bbfce02c86af0e6e..0000000000000000000000000000000000000000
--- a/include/halco/hicann-dls/vx/cadc_ns_includes_impl.h
+++ /dev/null
@@ -1,31 +0,0 @@
-SynapseQuadOnDLS CADCSampleQuadOnDLS::toSynapseQuadOnDLS() const
-{
- return SynapseQuadOnDLS(
- toCADCSampleQuadOnSynram()
- .toCADCSampleQuadUnspecifiedReadoutOnSynram()
- .toSynapseQuadOnSynram(),
- toSynramOnDLS());
-}
-
-SynapseWeightQuadOnDLS CADCSampleQuadOnDLS::toSynapseWeightQuadOnDLS() const
-{
- return toSynapseQuadOnDLS().toSynapseWeightQuadOnDLS();
-}
-
-SynapseLabelQuadOnDLS CADCSampleQuadOnDLS::toSynapseLabelQuadOnDLS() const
-{
- return toSynapseQuadOnDLS().toSynapseLabelQuadOnDLS();
-}
-
-SynapseCorrelationCalibQuadOnDLS CADCSampleQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
-{
- return toSynapseQuadOnDLS().toSynapseCorrelationCalibQuadOnDLS();
-}
-
-
-NeuronConfigBlockOnDLS CADCChannelConfigOnDLS::toNeuronConfigBlockOnDLS() const
-{
- return NeuronConfigBlockOnDLS(
- (2 * toSynramOnDLS().toEnum()) +
- (toSynapseOnSynapseRow() / NeuronConfigOnNeuronConfigBlock::size));
-}
diff --git a/include/halco/hicann-dls/vx/neuron.h b/include/halco/hicann-dls/vx/neuron.h
index 5017042c914792cbaf1bfe379eee31b79fc1dca1..dc0157a2b59e54903ef3eeaa9bbfa324881dbbe2 100644
--- a/include/halco/hicann-dls/vx/neuron.h
+++ b/include/halco/hicann-dls/vx/neuron.h
@@ -6,7 +6,13 @@
#include "halco/common/mixin.h"
#include "halco/common/typed_array.h"
+#include "halco/hicann-dls/vx/quad.h"
#include "halco/hicann-dls/vx/synapse.h"
+#include "halco/hicann-dls/vx/synram.h"
+
+namespace cereal {
+class access;
+} // namespace cereal
namespace halco::hicann_dls::vx GENPYBIND_TAG_HALCO_HICANN_DLS_VX {
@@ -19,6 +25,7 @@ struct SpikeCounterReadBlockOnDLS;
struct SpikeCounterReadOnDLS;
struct SpikeCounterResetBlockOnDLS;
struct SpikeCounterResetOnDLS;
+struct SynapseOnSynapseRow;
struct NeuronEventOutputOnNeuronBackendBlock;
struct NeuronEventOutputOnDLS;
struct CrossbarInputOnDLS;
@@ -26,6 +33,8 @@ struct NeuronBackendConfigBlockOnDLS;
struct BlockPostPulseOnDLS;
struct ColumnCorrelationQuadOnDLS;
struct ColumnCurrentQuadOnDLS;
+struct NeuronConfigOnDLS;
+struct NeuronBackendConfigOnDLS;
/**********\
Neuron
@@ -323,6 +332,323 @@ struct GENPYBIND(inline_base("*")) NeuronBlockOnDLS
{}
};
+
+/**
+ * Horizontal neuron location on the two dimensional neuron grid.
+ */
+struct GENPYBIND(inline_base("*")) NeuronColumnOnDLS
+ : public common::detail::RantWrapper<NeuronColumnOnDLS, uint_fast16_t, 255, 0>
+ , public common::detail::XRangedTrait
+{
+ constexpr explicit NeuronColumnOnDLS(uintmax_t const val = 0) GENPYBIND(implicit_conversion) :
+ rant_t(val)
+ {}
+
+ SynapseOnSynapseRow toSynapseOnSynapseRow() const;
+ CapMemColumnOnCapMemBlock toCapMemColumnOnCapMemBlock() const;
+ NeuronEventOutputOnDLS toNeuronEventOutputOnDLS() const;
+};
+
+/**
+ * DLS-global neuron location on the two dimensional neuron grid.
+ */
+struct GENPYBIND(inline_base("*")) AtomicNeuronOnDLS
+ : public common::detail::GridCoordinate<AtomicNeuronOnDLS, NeuronColumnOnDLS, NeuronRowOnDLS>
+{
+ GRID_COMMON_CONSTRUCTORS(AtomicNeuronOnDLS)
+
+ NeuronColumnOnDLS toNeuronColumnOnDLS() const
+ {
+ return x();
+ }
+ NeuronRowOnDLS toNeuronRowOnDLS() const
+ {
+ return y();
+ }
+
+ NeuronResetOnDLS toNeuronResetOnDLS() const;
+ SpikeCounterReadOnDLS toSpikeCounterReadOnDLS() const;
+ SpikeCounterResetOnDLS toSpikeCounterResetOnDLS() const;
+ NeuronConfigOnDLS toNeuronConfigOnDLS() const;
+ NeuronBackendConfigOnDLS toNeuronBackendConfigOnDLS() const;
+
+ CapMemBlockOnDLS toCapMemBlockOnDLS() const;
+ CapMemColumnOnCapMemBlock toCapMemColumnOnCapMemBlock() const;
+ SynramOnDLS toSynramOnDLS() const;
+ SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const;
+ ColumnCorrelationQuadOnDLS toColumnCorrelationQuadOnDLS() const;
+ ColumnCurrentQuadOnDLS toColumnCurrentQuadOnDLS() const;
+};
+
+
+/**
+ * Horizontal neuron location on a logical neuron.
+ */
+struct GENPYBIND(inline_base("*")) NeuronColumnOnLogicalNeuron
+ : public common::detail::RantWrapper<
+ NeuronColumnOnLogicalNeuron,
+ uint_fast16_t,
+ (NeuronColumnOnDLS::size / NeuronBackendConfigBlockOnDLS::size) - 1,
+ 0>
+ , public common::detail::XRangedTrait
+{
+ constexpr explicit NeuronColumnOnLogicalNeuron(uintmax_t const val = 0)
+ GENPYBIND(implicit_conversion) :
+ rant_t(val)
+ {}
+};
+
+
+/**
+ * Local neuron location on a logical neuron.
+ */
+struct GENPYBIND(inline_base("*")) AtomicNeuronOnLogicalNeuron
+ : public common::detail::GridCoordinate<
+ AtomicNeuronOnLogicalNeuron,
+ NeuronColumnOnLogicalNeuron,
+ NeuronRowOnLogicalNeuron>
+{
+ GRID_COMMON_CONSTRUCTORS(AtomicNeuronOnLogicalNeuron)
+
+ NeuronColumnOnLogicalNeuron toNeuronColumnOnLogicalNeuron() const
+ {
+ return x();
+ }
+ NeuronRowOnLogicalNeuron toNeuronRowOnLogicalNeuron() const
+ {
+ return y();
+ }
+
+ enum class Direction
+ {
+ left,
+ right,
+ opposite_row
+ };
+
+ /**
+ * Get neighbor if it exists on the chip.
+ * @throws OverflowError if neighbor does not exist
+ * @return AtomicNeuronOnLogicalNeuron
+ */
+ AtomicNeuronOnLogicalNeuron get_neighbor(Direction const& direction) const;
+};
+
+
+/**
+ * Compartment index.
+ * Its range is chosen such that the maximally possible number of compartments in a neuron backend
+ * block can be created. This is size-2, because one compartment has to connect top and bottom row
+ * and therefore consists of two atomic neuron circuits.
+ */
+struct GENPYBIND(inline_base("*")) CompartmentOnLogicalNeuron
+ : public common::detail::RantWrapper<
+ CompartmentOnLogicalNeuron,
+ uint_fast16_t,
+ (AtomicNeuronOnDLS::size / NeuronBackendConfigBlockOnDLS::size) - 2,
+ 0>
+{
+ constexpr explicit CompartmentOnLogicalNeuron(uintmax_t const val = 0)
+ GENPYBIND(implicit_conversion) :
+ rant_t(val)
+ {}
+};
+
+
+/**
+ * Logical neuron compartments.
+ */
+struct GENPYBIND(visible) LogicalNeuronCompartments
+{
+ typedef std::vector<AtomicNeuronOnLogicalNeuron> Compartment;
+ typedef std::map<CompartmentOnLogicalNeuron, Compartment> Compartments;
+
+ LogicalNeuronCompartments() = default;
+ /**
+ * Construct logical neuron compartments from compartments.
+ * The compartment members are to be unique.
+ * @param compartments Compartments to construct neuron from
+ */
+ explicit LogicalNeuronCompartments(Compartments const& compartments);
+
+ Compartments const& get_compartments() const;
+
+ /**
+ * Flip locations in the x dimension.
+ * 1 2 3 4 becomes 4 3 2 1
+ * 5 6 6 5
+ * @return Flipped compartments
+ */
+ LogicalNeuronCompartments flip_x() const;
+
+ /**
+ * Flip locations in the y dimension.
+ * 1 2 3 4 becomes 5 6
+ * 5 6 1 2 3 4
+ * @return Flipped compartments
+ */
+ LogicalNeuronCompartments flip_y() const;
+
+ NeuronColumnOnLogicalNeuron get_left_most_column() const;
+ NeuronColumnOnLogicalNeuron get_right_most_column() const;
+
+ NeuronRowOnLogicalNeuron get_top_most_row() const;
+ NeuronRowOnLogicalNeuron get_bottom_most_row() const;
+
+ bool operator==(LogicalNeuronCompartments const& other) const;
+ bool operator!=(LogicalNeuronCompartments const& other) const;
+
+ bool operator<(LogicalNeuronCompartments const& other) const;
+ bool operator>(LogicalNeuronCompartments const& other) const;
+ bool operator<=(LogicalNeuronCompartments const& other) const;
+ bool operator>=(LogicalNeuronCompartments const& other) const;
+
+ GENPYBIND(stringstream)
+ friend std::ostream& operator<<(std::ostream& os, LogicalNeuronCompartments const& config);
+
+private:
+ friend class cereal::access;
+ template <typename Archive>
+ void serialize(Archive& ar, uint32_t);
+
+ Compartments m_compartments;
+};
+
+
+/**
+ * Logical neuron location on the neuron grid.
+ */
+struct GENPYBIND(visible) LogicalNeuronOnDLS
+{
+ typedef std::map<CompartmentOnLogicalNeuron, std::vector<AtomicNeuronOnDLS>> PlacedCompartments;
+
+ LogicalNeuronOnDLS() = default;
+
+ /**
+ * Construct logical neuron location from compartments and global anchor.
+ * The compartments' relative coordinates are anchored at the left top corner.
+ * @param compartments Compartments to construct neuron from
+ * @param anchor Anchor to construct neuron from
+ */
+ LogicalNeuronOnDLS(
+ LogicalNeuronCompartments const& compartments, AtomicNeuronOnDLS const& anchor);
+
+ /**
+ * Get compartments placed by anchor.
+ * @return Placed compartments
+ */
+ PlacedCompartments get_placed_compartments() const;
+
+ bool operator==(LogicalNeuronOnDLS const& other) const;
+ bool operator!=(LogicalNeuronOnDLS const& other) const;
+
+ GENPYBIND(stringstream)
+ friend std::ostream& operator<<(std::ostream& os, LogicalNeuronOnDLS const& config);
+
+ bool operator<(LogicalNeuronOnDLS const& other) const;
+ bool operator>(LogicalNeuronOnDLS const& other) const;
+ bool operator<=(LogicalNeuronOnDLS const& other) const;
+ bool operator>=(LogicalNeuronOnDLS const& other) const;
+
+private:
+ friend class cereal::access;
+ template <typename Archive>
+ void serialize(Archive& ar, uint32_t);
+
+ PlacedCompartments m_compartments;
+};
+
+
+HALCO_COORDINATE_MIXIN(NeuronConfigMixin, NeuronConfigBlockOnDLS, neuron)
+
+struct GENPYBIND(inline_base("*NeuronConfigMixin*")) NeuronConfigOnDLS
+ : public NeuronConfigMixin<NeuronConfigOnDLS, NeuronConfigOnNeuronConfigBlock>
+{
+ NeuronConfigOnDLS() = default;
+
+ explicit NeuronConfigOnDLS(
+ NeuronConfigOnNeuronConfigBlock const& neuron,
+ NeuronConfigBlockOnDLS const& block = NeuronConfigBlockOnDLS()) :
+ mixin_t(neuron, block)
+ {}
+
+ explicit NeuronConfigOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ NeuronConfigOnNeuronConfigBlock toNeuronConfigOnNeuronConfigBlock() const
+ {
+ return This();
+ }
+ NeuronResetOnDLS toNeuronResetOnDLS() const;
+ SpikeCounterReadOnDLS toSpikeCounterReadOnDLS() const;
+ SpikeCounterResetOnDLS toSpikeCounterResetOnDLS() const;
+ AtomicNeuronOnDLS toAtomicNeuronOnDLS() const;
+ SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const;
+ EntryOnQuad toEntryOnQuad() const;
+ NeuronRowOnDLS toNeuronRowOnDLS() const;
+ SynapseOnSynapseRow toSynapseOnSynapseRow() const;
+ NeuronBackendConfigBlockOnDLS toNeuronBackendConfigBlockOnDLS() const;
+ NeuronBackendConfigOnNeuronBackendConfigBlock toNeuronBackendConfigOnNeuronBackendConfigBlock()
+ const;
+ CommonNeuronBackendConfigOnDLS toCommonNeuronBackendConfigOnDLS() const;
+ NeuronBackendConfigOnDLS toNeuronBackendConfigOnDLS() const;
+ SynramOnDLS toSynramOnDLS() const;
+ ColumnCorrelationQuadOnDLS toColumnCorrelationQuadOnDLS() const;
+ ColumnCurrentQuadOnDLS toColumnCurrentQuadOnDLS() const;
+};
+
+struct GENPYBIND(inline_base("*NeuronBackendConfigMixin*")) NeuronBackendConfigOnDLS
+ : public NeuronBackendConfigMixin<
+ NeuronBackendConfigOnDLS,
+ NeuronBackendConfigOnNeuronBackendConfigBlock>
+{
+ NeuronBackendConfigOnDLS() = default;
+
+ explicit NeuronBackendConfigOnDLS(
+ NeuronBackendConfigOnNeuronBackendConfigBlock const& neuron,
+ NeuronBackendConfigBlockOnDLS const& block = NeuronBackendConfigBlockOnDLS()) :
+ mixin_t(neuron, block)
+ {}
+
+ explicit NeuronBackendConfigOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ NeuronBackendConfigOnNeuronBackendConfigBlock toNeuronBackendConfigOnNeuronBackendConfigBlock()
+ const
+ {
+ return This();
+ }
+
+ NeuronColumnOnDLS toNeuronColumnOnDLS() const;
+ NeuronRowOnDLS toNeuronRowOnDLS() const;
+ CommonNeuronBackendConfigOnDLS toCommonNeuronBackendConfigOnDLS() const;
+ SpikeCounterReadOnDLS toSpikeCounterReadOnDLS() const;
+ SpikeCounterResetOnDLS toSpikeCounterResetOnDLS() const;
+ NeuronConfigOnDLS toNeuronConfigOnDLS() const;
+ AtomicNeuronOnDLS toAtomicNeuronOnDLS() const;
+ SynramOnDLS toSynramOnDLS() const;
+ NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
+};
+
+struct GENPYBIND(inline_base("*SynramMixin*")) NeuronResetQuadOnDLS
+ : public SynramMixin<NeuronResetQuadOnDLS, SynapseQuadColumnOnDLS>
+{
+ NeuronResetQuadOnDLS() = default;
+
+ explicit NeuronResetQuadOnDLS(
+ SynapseQuadColumnOnDLS const& quad, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(quad, synram)
+ {}
+
+ explicit NeuronResetQuadOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const
+ {
+ return This();
+ }
+ typedef common::typed_array<NeuronResetOnDLS, EntryOnQuad> neuron_reset_type
+ GENPYBIND(opaque(false));
+ neuron_reset_type toNeuronResetOnDLS() const;
+};
+
} // namespace halco::hicann_dls::vx
namespace std {
@@ -349,5 +675,13 @@ HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronSRAMTimingConfigOnDLS)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronBackendSRAMTimingConfigOnDLS)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronRowOnLogicalNeuron)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronBlockOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronColumnOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::AtomicNeuronOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronColumnOnLogicalNeuron)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::AtomicNeuronOnLogicalNeuron)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CompartmentOnLogicalNeuron)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronConfigOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronBackendConfigOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::NeuronResetQuadOnDLS)
} // namespace std
diff --git a/include/halco/hicann-dls/vx/neuron_ns_includes.h b/include/halco/hicann-dls/vx/neuron_ns_includes.h
deleted file mode 100644
index d3f5091bad9e36979c6685c9e8584a7c4b2e1e82..0000000000000000000000000000000000000000
--- a/include/halco/hicann-dls/vx/neuron_ns_includes.h
+++ /dev/null
@@ -1,354 +0,0 @@
-struct NeuronConfigOnDLS;
-struct NeuronBackendConfigOnDLS;
-
-using NeuronRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronRowOnDLS;
-using NeuronConfigOnNeuronConfigBlock GENPYBIND(visible) =
- halco::hicann_dls::vx::NeuronConfigOnNeuronConfigBlock;
-using NeuronConfigBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronConfigBlockOnDLS;
-using NeuronBackendConfigOnNeuronBackendConfigBlock GENPYBIND(visible) =
- halco::hicann_dls::vx::NeuronBackendConfigOnNeuronBackendConfigBlock;
-using NeuronBackendConfigBlockOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::NeuronBackendConfigBlockOnDLS;
-using CommonNeuronBackendConfigOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::CommonNeuronBackendConfigOnDLS;
-using NeuronResetOnNeuronResetBlock GENPYBIND(visible) =
- halco::hicann_dls::vx::NeuronResetOnNeuronResetBlock;
-using NeuronResetBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetBlockOnDLS;
-using NeuronResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetOnDLS;
-using BlockPostPulseOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::BlockPostPulseOnDLS;
-using SpikeCounterReadOnSpikeCounterReadBlock GENPYBIND(visible) =
- halco::hicann_dls::vx::SpikeCounterReadOnSpikeCounterReadBlock;
-using SpikeCounterReadBlockOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::SpikeCounterReadBlockOnDLS;
-using SpikeCounterReadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SpikeCounterReadOnDLS;
-using SpikeCounterResetOnSpikeCounterResetBlock GENPYBIND(visible) =
- halco::hicann_dls::vx::SpikeCounterResetOnSpikeCounterResetBlock;
-using SpikeCounterResetBlockOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::SpikeCounterResetBlockOnDLS;
-using SpikeCounterResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SpikeCounterResetOnDLS;
-using NeuronEventOutputOnNeuronBackendBlock GENPYBIND(visible) =
- halco::hicann_dls::vx::NeuronEventOutputOnNeuronBackendBlock;
-using NeuronEventOutputOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronEventOutputOnDLS;
-using NeuronSRAMTimingConfigOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::NeuronSRAMTimingConfigOnDLS;
-using NeuronBackendSRAMTimingConfigOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::NeuronBackendSRAMTimingConfigOnDLS;
-using NeuronRowOnLogicalNeuron = halco::hicann_dls::vx::NeuronRowOnLogicalNeuron;
-using NeuronBlockOnDLS = halco::hicann_dls::vx::NeuronBlockOnDLS;
-
-
-/**
- * Horizontal neuron location on the two dimensional neuron grid.
- */
-struct GENPYBIND(inline_base("*")) NeuronColumnOnDLS
- : public common::detail::RantWrapper<NeuronColumnOnDLS, uint_fast16_t, 255, 0>
- , public common::detail::XRangedTrait
-{
- constexpr explicit NeuronColumnOnDLS(uintmax_t const val = 0) GENPYBIND(implicit_conversion) :
- rant_t(val)
- {}
-
- SynapseOnSynapseRow toSynapseOnSynapseRow() const;
- CapMemColumnOnCapMemBlock toCapMemColumnOnCapMemBlock() const;
- NeuronEventOutputOnDLS toNeuronEventOutputOnDLS() const;
-};
-
-/**
- * DLS-global neuron location on the two dimensional neuron grid.
- */
-struct GENPYBIND(inline_base("*")) AtomicNeuronOnDLS
- : public common::detail::GridCoordinate<AtomicNeuronOnDLS, NeuronColumnOnDLS, NeuronRowOnDLS>
-{
- GRID_COMMON_CONSTRUCTORS(AtomicNeuronOnDLS)
-
- NeuronColumnOnDLS toNeuronColumnOnDLS() const
- {
- return x();
- }
- NeuronRowOnDLS toNeuronRowOnDLS() const
- {
- return y();
- }
-
- NeuronResetOnDLS toNeuronResetOnDLS() const;
- SpikeCounterReadOnDLS toSpikeCounterReadOnDLS() const;
- SpikeCounterResetOnDLS toSpikeCounterResetOnDLS() const;
- NeuronConfigOnDLS toNeuronConfigOnDLS() const;
- NeuronBackendConfigOnDLS toNeuronBackendConfigOnDLS() const;
-
- CapMemBlockOnDLS toCapMemBlockOnDLS() const;
- CapMemColumnOnCapMemBlock toCapMemColumnOnCapMemBlock() const;
- SynramOnDLS toSynramOnDLS() const;
- SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const;
- ColumnCorrelationQuadOnDLS toColumnCorrelationQuadOnDLS() const;
- ColumnCurrentQuadOnDLS toColumnCurrentQuadOnDLS() const;
-};
-
-
-/**
- * Horizontal neuron location on a logical neuron.
- */
-struct GENPYBIND(inline_base("*")) NeuronColumnOnLogicalNeuron
- : public common::detail::RantWrapper<
- NeuronColumnOnLogicalNeuron,
- uint_fast16_t,
- (NeuronColumnOnDLS::size / NeuronBackendConfigBlockOnDLS::size) - 1,
- 0>
- , public common::detail::XRangedTrait
-{
- constexpr explicit NeuronColumnOnLogicalNeuron(uintmax_t const val = 0)
- GENPYBIND(implicit_conversion) :
- rant_t(val)
- {}
-};
-
-
-/**
- * Local neuron location on a logical neuron.
- */
-struct GENPYBIND(inline_base("*")) AtomicNeuronOnLogicalNeuron
- : public common::detail::GridCoordinate<
- AtomicNeuronOnLogicalNeuron,
- NeuronColumnOnLogicalNeuron,
- NeuronRowOnLogicalNeuron>
-{
- GRID_COMMON_CONSTRUCTORS(AtomicNeuronOnLogicalNeuron)
-
- NeuronColumnOnLogicalNeuron toNeuronColumnOnLogicalNeuron() const
- {
- return x();
- }
- NeuronRowOnLogicalNeuron toNeuronRowOnLogicalNeuron() const
- {
- return y();
- }
-
- enum class Direction
- {
- left,
- right,
- opposite_row
- };
-
- /**
- * Get neighbor if it exists on the chip.
- * @throws OverflowError if neighbor does not exist
- * @return AtomicNeuronOnLogicalNeuron
- */
- AtomicNeuronOnLogicalNeuron get_neighbor(Direction const& direction) const;
-};
-
-
-/**
- * Compartment index.
- * Its range is chosen such that the maximally possible number of compartments in a neuron backend
- * block can be created. This is size-2, because one compartment has to connect top and bottom row
- * and therefore consists of two atomic neuron circuits.
- */
-struct GENPYBIND(inline_base("*")) CompartmentOnLogicalNeuron
- : public common::detail::RantWrapper<
- CompartmentOnLogicalNeuron,
- uint_fast16_t,
- (AtomicNeuronOnDLS::size / NeuronBackendConfigBlockOnDLS::size) - 2,
- 0>
-{
- constexpr explicit CompartmentOnLogicalNeuron(uintmax_t const val = 0)
- GENPYBIND(implicit_conversion) :
- rant_t(val)
- {}
-};
-
-
-/**
- * Logical neuron compartments.
- */
-struct GENPYBIND(visible) LogicalNeuronCompartments
-{
- typedef std::vector<AtomicNeuronOnLogicalNeuron> Compartment;
- typedef std::map<CompartmentOnLogicalNeuron, Compartment> Compartments;
-
- LogicalNeuronCompartments() = default;
- /**
- * Construct logical neuron compartments from compartments.
- * The compartment members are to be unique.
- * @param compartments Compartments to construct neuron from
- */
- explicit LogicalNeuronCompartments(Compartments const& compartments);
-
- Compartments const& get_compartments() const;
-
- /**
- * Flip locations in the x dimension.
- * 1 2 3 4 becomes 4 3 2 1
- * 5 6 6 5
- * @return Flipped compartments
- */
- LogicalNeuronCompartments flip_x() const;
-
- /**
- * Flip locations in the y dimension.
- * 1 2 3 4 becomes 5 6
- * 5 6 1 2 3 4
- * @return Flipped compartments
- */
- LogicalNeuronCompartments flip_y() const;
-
- NeuronColumnOnLogicalNeuron get_left_most_column() const;
- NeuronColumnOnLogicalNeuron get_right_most_column() const;
-
- NeuronRowOnLogicalNeuron get_top_most_row() const;
- NeuronRowOnLogicalNeuron get_bottom_most_row() const;
-
- bool operator==(LogicalNeuronCompartments const& other) const;
- bool operator!=(LogicalNeuronCompartments const& other) const;
-
- bool operator<(LogicalNeuronCompartments const& other) const;
- bool operator>(LogicalNeuronCompartments const& other) const;
- bool operator<=(LogicalNeuronCompartments const& other) const;
- bool operator>=(LogicalNeuronCompartments const& other) const;
-
- GENPYBIND(stringstream)
- friend std::ostream& operator<<(std::ostream& os, LogicalNeuronCompartments const& config);
-
-private:
- friend class cereal::access;
- template <typename Archive>
- void serialize(Archive& ar, uint32_t);
-
- Compartments m_compartments;
-};
-
-
-/**
- * Logical neuron location on the neuron grid.
- */
-struct GENPYBIND(visible) LogicalNeuronOnDLS
-{
- typedef std::map<CompartmentOnLogicalNeuron, std::vector<AtomicNeuronOnDLS>> PlacedCompartments;
-
- LogicalNeuronOnDLS() = default;
-
- /**
- * Construct logical neuron location from compartments and global anchor.
- * The compartments' relative coordinates are anchored at the left top corner.
- * @param compartments Compartments to construct neuron from
- * @param anchor Anchor to construct neuron from
- */
- LogicalNeuronOnDLS(
- LogicalNeuronCompartments const& compartments, AtomicNeuronOnDLS const& anchor);
-
- /**
- * Get compartments placed by anchor.
- * @return Placed compartments
- */
- PlacedCompartments get_placed_compartments() const;
-
- bool operator==(LogicalNeuronOnDLS const& other) const;
- bool operator!=(LogicalNeuronOnDLS const& other) const;
-
- GENPYBIND(stringstream)
- friend std::ostream& operator<<(std::ostream& os, LogicalNeuronOnDLS const& config);
-
- bool operator<(LogicalNeuronOnDLS const& other) const;
- bool operator>(LogicalNeuronOnDLS const& other) const;
- bool operator<=(LogicalNeuronOnDLS const& other) const;
- bool operator>=(LogicalNeuronOnDLS const& other) const;
-
-private:
- friend class cereal::access;
- template <typename Archive>
- void serialize(Archive& ar, uint32_t);
-
- PlacedCompartments m_compartments;
-};
-
-
-HALCO_COORDINATE_MIXIN(NeuronConfigMixin, NeuronConfigBlockOnDLS, neuron)
-
-struct GENPYBIND(inline_base("*NeuronConfigMixin*")) NeuronConfigOnDLS
- : public NeuronConfigMixin<NeuronConfigOnDLS, NeuronConfigOnNeuronConfigBlock>
-{
- NeuronConfigOnDLS() = default;
-
- explicit NeuronConfigOnDLS(
- NeuronConfigOnNeuronConfigBlock const& neuron,
- NeuronConfigBlockOnDLS const& block = NeuronConfigBlockOnDLS()) :
- mixin_t(neuron, block)
- {}
-
- explicit NeuronConfigOnDLS(enum_type const& e) : mixin_t(e) {}
-
- NeuronConfigOnNeuronConfigBlock toNeuronConfigOnNeuronConfigBlock() const
- {
- return This();
- }
- NeuronResetOnDLS toNeuronResetOnDLS() const;
- SpikeCounterReadOnDLS toSpikeCounterReadOnDLS() const;
- SpikeCounterResetOnDLS toSpikeCounterResetOnDLS() const;
- AtomicNeuronOnDLS toAtomicNeuronOnDLS() const;
- SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const;
- EntryOnQuad toEntryOnQuad() const;
- NeuronRowOnDLS toNeuronRowOnDLS() const;
- SynapseOnSynapseRow toSynapseOnSynapseRow() const;
- NeuronBackendConfigBlockOnDLS toNeuronBackendConfigBlockOnDLS() const;
- NeuronBackendConfigOnNeuronBackendConfigBlock toNeuronBackendConfigOnNeuronBackendConfigBlock()
- const;
- CommonNeuronBackendConfigOnDLS toCommonNeuronBackendConfigOnDLS() const;
- NeuronBackendConfigOnDLS toNeuronBackendConfigOnDLS() const;
- SynramOnDLS toSynramOnDLS() const;
- ColumnCorrelationQuadOnDLS toColumnCorrelationQuadOnDLS() const;
- ColumnCurrentQuadOnDLS toColumnCurrentQuadOnDLS() const;
-};
-
-struct GENPYBIND(inline_base("*NeuronBackendConfigMixin*")) NeuronBackendConfigOnDLS
- : public NeuronBackendConfigMixin<
- NeuronBackendConfigOnDLS,
- NeuronBackendConfigOnNeuronBackendConfigBlock>
-{
- NeuronBackendConfigOnDLS() = default;
-
- explicit NeuronBackendConfigOnDLS(
- NeuronBackendConfigOnNeuronBackendConfigBlock const& neuron,
- NeuronBackendConfigBlockOnDLS const& block = NeuronBackendConfigBlockOnDLS()) :
- mixin_t(neuron, block)
- {}
-
- explicit NeuronBackendConfigOnDLS(enum_type const& e) : mixin_t(e) {}
-
- NeuronBackendConfigOnNeuronBackendConfigBlock toNeuronBackendConfigOnNeuronBackendConfigBlock()
- const
- {
- return This();
- }
-
- NeuronColumnOnDLS toNeuronColumnOnDLS() const;
- NeuronRowOnDLS toNeuronRowOnDLS() const;
- CommonNeuronBackendConfigOnDLS toCommonNeuronBackendConfigOnDLS() const;
- SpikeCounterReadOnDLS toSpikeCounterReadOnDLS() const;
- SpikeCounterResetOnDLS toSpikeCounterResetOnDLS() const;
- NeuronConfigOnDLS toNeuronConfigOnDLS() const;
- AtomicNeuronOnDLS toAtomicNeuronOnDLS() const;
- SynramOnDLS toSynramOnDLS() const;
- NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
-};
-
-struct GENPYBIND(inline_base("*SynramMixin*")) NeuronResetQuadOnDLS
- : public SynramMixin<NeuronResetQuadOnDLS, SynapseQuadColumnOnDLS>
-{
- NeuronResetQuadOnDLS() = default;
-
- explicit NeuronResetQuadOnDLS(
- SynapseQuadColumnOnDLS const& quad, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(quad, synram)
- {}
-
- explicit NeuronResetQuadOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const
- {
- return This();
- }
- typedef common::typed_array<NeuronResetOnDLS, EntryOnQuad> neuron_reset_type
- GENPYBIND(opaque(false));
- neuron_reset_type toNeuronResetOnDLS() const;
-};
diff --git a/include/halco/hicann-dls/vx/neuron_ns_includes_impl.h b/include/halco/hicann-dls/vx/neuron_ns_includes_impl.h
deleted file mode 100644
index 6626737e9435980c055f027e1d82c4ebf8199710..0000000000000000000000000000000000000000
--- a/include/halco/hicann-dls/vx/neuron_ns_includes_impl.h
+++ /dev/null
@@ -1,515 +0,0 @@
-NeuronResetOnDLS NeuronConfigOnDLS::toNeuronResetOnDLS() const
-{
- auto block = toNeuronConfigBlockOnDLS().toNeuronResetBlockOnDLS();
- return NeuronResetOnDLS(
- NeuronResetOnNeuronResetBlock(
- toNeuronConfigOnNeuronConfigBlock() +
- ((toNeuronConfigBlockOnDLS() / NeuronResetBlockOnDLS::size)
- ? NeuronConfigOnNeuronConfigBlock::size
- : 0)),
- block);
-}
-
-SpikeCounterReadOnDLS NeuronConfigOnDLS::toSpikeCounterReadOnDLS() const
-{
- return SpikeCounterReadOnDLS(toNeuronResetOnDLS().toEnum());
-}
-
-SpikeCounterResetOnDLS NeuronConfigOnDLS::toSpikeCounterResetOnDLS() const
-{
- return SpikeCounterResetOnDLS(toNeuronResetOnDLS().toEnum());
-}
-
-SynapseOnSynapseRow NeuronColumnOnDLS::toSynapseOnSynapseRow() const
-{
- return SynapseOnSynapseRow(toEnum());
-}
-
-CapMemColumnOnCapMemBlock NeuronColumnOnDLS::toCapMemColumnOnCapMemBlock() const
-{
- return CapMemColumnOnCapMemBlock(toEnum() % NeuronConfigOnNeuronConfigBlock::size);
-}
-
-NeuronEventOutputOnDLS NeuronColumnOnDLS::toNeuronEventOutputOnDLS() const
-{
- return NeuronEventOutputOnDLS(common::Enum(toEnum() / (size / NeuronEventOutputOnDLS::size)));
-}
-
-NeuronConfigOnDLS AtomicNeuronOnDLS::toNeuronConfigOnDLS() const
-{
- return NeuronConfigOnDLS(toEnum());
-}
-
-NeuronResetOnDLS AtomicNeuronOnDLS::toNeuronResetOnDLS() const
-{
- return toNeuronConfigOnDLS().toNeuronResetOnDLS();
-}
-
-SpikeCounterReadOnDLS AtomicNeuronOnDLS::toSpikeCounterReadOnDLS() const
-{
- return toNeuronConfigOnDLS().toSpikeCounterReadOnDLS();
-}
-
-SpikeCounterResetOnDLS AtomicNeuronOnDLS::toSpikeCounterResetOnDLS() const
-{
- return toNeuronConfigOnDLS().toSpikeCounterResetOnDLS();
-}
-
-NeuronBackendConfigOnDLS AtomicNeuronOnDLS::toNeuronBackendConfigOnDLS() const
-{
- return NeuronBackendConfigOnDLS(toNeuronResetOnDLS().toEnum());
-}
-
-CapMemColumnOnCapMemBlock AtomicNeuronOnDLS::toCapMemColumnOnCapMemBlock() const
-{
- return toNeuronColumnOnDLS().toCapMemColumnOnCapMemBlock();
-}
-
-CapMemBlockOnDLS AtomicNeuronOnDLS::toCapMemBlockOnDLS() const
-{
- return toNeuronConfigOnDLS().toNeuronConfigBlockOnDLS().toCapMemBlockOnDLS();
-}
-
-NeuronRowOnDLS NeuronConfigOnDLS::toNeuronRowOnDLS() const
-{
- return NeuronRowOnDLS(toEnum() / SynapseOnSynapseRow::size);
-}
-
-SynapseOnSynapseRow NeuronConfigOnDLS::toSynapseOnSynapseRow() const
-{
- return SynapseOnSynapseRow(toEnum() % SynapseOnSynapseRow::size);
-}
-
-AtomicNeuronOnDLS NeuronConfigOnDLS::toAtomicNeuronOnDLS() const
-{
- return AtomicNeuronOnDLS(toSynapseOnSynapseRow().toNeuronColumnOnDLS(), toNeuronRowOnDLS());
-}
-
-SynapseQuadColumnOnDLS NeuronConfigOnDLS::toSynapseQuadColumnOnDLS() const
-{
- return toSynapseOnSynapseRow().toSynapseQuadColumnOnDLS();
-}
-
-EntryOnQuad NeuronConfigOnDLS::toEntryOnQuad() const
-{
- return toSynapseOnSynapseRow().toEntryOnQuad();
-}
-
-NeuronBackendConfigBlockOnDLS NeuronConfigOnDLS::toNeuronBackendConfigBlockOnDLS() const
-{
- return toAtomicNeuronOnDLS().toNeuronBackendConfigOnDLS().toNeuronBackendConfigBlockOnDLS();
-}
-
-NeuronBackendConfigOnNeuronBackendConfigBlock
-NeuronConfigOnDLS::toNeuronBackendConfigOnNeuronBackendConfigBlock() const
-{
- return toAtomicNeuronOnDLS()
- .toNeuronBackendConfigOnDLS()
- .toNeuronBackendConfigOnNeuronBackendConfigBlock();
-}
-
-NeuronBackendConfigOnDLS NeuronConfigOnDLS::toNeuronBackendConfigOnDLS() const
-{
- return toAtomicNeuronOnDLS().toNeuronBackendConfigOnDLS();
-}
-
-CommonNeuronBackendConfigOnDLS NeuronConfigOnDLS::toCommonNeuronBackendConfigOnDLS() const
-{
- return toNeuronBackendConfigBlockOnDLS().toCommonNeuronBackendConfigOnDLS();
-}
-
-NeuronColumnOnDLS NeuronBackendConfigOnDLS::toNeuronColumnOnDLS() const
-{
- return NeuronColumnOnDLS(
- (toNeuronBackendConfigOnNeuronBackendConfigBlock() %
- NeuronConfigOnNeuronConfigBlock::size) +
- (toNeuronBackendConfigBlockOnDLS() * NeuronConfigOnNeuronConfigBlock::size));
-}
-
-NeuronRowOnDLS NeuronBackendConfigOnDLS::toNeuronRowOnDLS() const
-{
- return NeuronRowOnDLS(
- toNeuronBackendConfigOnNeuronBackendConfigBlock() / NeuronConfigOnNeuronConfigBlock::size);
-}
-
-AtomicNeuronOnDLS NeuronBackendConfigOnDLS::toAtomicNeuronOnDLS() const
-{
- return AtomicNeuronOnDLS(toNeuronColumnOnDLS(), toNeuronRowOnDLS());
-}
-
-NeuronConfigOnDLS NeuronBackendConfigOnDLS::toNeuronConfigOnDLS() const
-{
- return toAtomicNeuronOnDLS().toNeuronConfigOnDLS();
-}
-
-SpikeCounterReadOnDLS NeuronBackendConfigOnDLS::toSpikeCounterReadOnDLS() const
-{
- return toNeuronConfigOnDLS().toSpikeCounterReadOnDLS();
-}
-
-SpikeCounterResetOnDLS NeuronBackendConfigOnDLS::toSpikeCounterResetOnDLS() const
-{
- return toNeuronConfigOnDLS().toSpikeCounterResetOnDLS();
-}
-
-CommonNeuronBackendConfigOnDLS NeuronBackendConfigOnDLS::toCommonNeuronBackendConfigOnDLS() const
-{
- return toNeuronBackendConfigBlockOnDLS().toCommonNeuronBackendConfigOnDLS();
-}
-
-SynramOnDLS AtomicNeuronOnDLS::toSynramOnDLS() const
-{
- return toNeuronRowOnDLS().toSynramOnDLS();
-}
-
-SynramOnDLS NeuronConfigOnDLS::toSynramOnDLS() const
-{
- return toAtomicNeuronOnDLS().toSynramOnDLS();
-}
-
-SynramOnDLS NeuronBackendConfigOnDLS::toSynramOnDLS() const
-{
- return toAtomicNeuronOnDLS().toSynramOnDLS();
-}
-
-NeuronConfigBlockOnDLS NeuronBackendConfigOnDLS::toNeuronConfigBlockOnDLS() const
-{
- return toNeuronConfigOnDLS().toNeuronConfigBlockOnDLS();
-}
-
-SynapseQuadColumnOnDLS AtomicNeuronOnDLS::toSynapseQuadColumnOnDLS() const
-{
- return toNeuronConfigOnDLS().toSynapseQuadColumnOnDLS();
-}
-
-ColumnCorrelationQuadOnDLS AtomicNeuronOnDLS::toColumnCorrelationQuadOnDLS() const
-{
- return ColumnCorrelationQuadOnDLS(
- toSynapseQuadColumnOnDLS().toColumnCorrelationQuadOnSynram(), toSynramOnDLS());
-}
-
-ColumnCurrentQuadOnDLS AtomicNeuronOnDLS::toColumnCurrentQuadOnDLS() const
-{
- return ColumnCurrentQuadOnDLS(
- toSynapseQuadColumnOnDLS().toColumnCurrentQuadOnSynram(), toSynramOnDLS());
-}
-
-ColumnCorrelationQuadOnDLS NeuronConfigOnDLS::toColumnCorrelationQuadOnDLS() const
-{
- return toAtomicNeuronOnDLS().toColumnCorrelationQuadOnDLS();
-}
-
-ColumnCurrentQuadOnDLS NeuronConfigOnDLS::toColumnCurrentQuadOnDLS() const
-{
- return toAtomicNeuronOnDLS().toColumnCurrentQuadOnDLS();
-}
-
-common::typed_array<NeuronResetOnDLS, EntryOnQuad> NeuronResetQuadOnDLS::toNeuronResetOnDLS() const
-{
- common::typed_array<NeuronResetOnDLS, EntryOnQuad> ret;
- auto const columns = toSynapseQuadColumnOnDLS().toNeuronColumnOnDLS();
- for (auto const e : common::iter_all<EntryOnQuad>()) {
- ret[e] =
- AtomicNeuronOnDLS(columns[e], toSynramOnDLS().toNeuronRowOnDLS()).toNeuronResetOnDLS();
- }
- return ret;
-}
-
-AtomicNeuronOnLogicalNeuron AtomicNeuronOnLogicalNeuron::get_neighbor(
- Direction const& direction) const
-{
- switch (direction) {
- case Direction::left: {
- AtomicNeuronOnLogicalNeuron neighbor(NeuronColumnOnLogicalNeuron(x().value() - 1), y());
- return neighbor;
- }
- case Direction::right: {
- AtomicNeuronOnLogicalNeuron neighbor(NeuronColumnOnLogicalNeuron(x().value() + 1), y());
- return neighbor;
- }
- case Direction::opposite_row: {
- AtomicNeuronOnLogicalNeuron neighbor(
- x(), NeuronRowOnLogicalNeuron((y().value() + 1) % NeuronRowOnLogicalNeuron::size));
- return neighbor;
- }
- default: {
-#ifndef __ppu__
- throw std::logic_error(
- "Unsupported direction for neighbor for AtomicNeuronOnLogicalNeuron was chosen.");
-#else
- exit(1);
-#endif
- }
- }
-}
-
-LogicalNeuronCompartments::LogicalNeuronCompartments(Compartments const& compartments)
-{
- std::set<AtomicNeuronOnLogicalNeuron> unique;
- size_t n = 0;
- for (auto const& [_, compartment] : compartments) {
- unique.insert(compartment.begin(), compartment.end());
- n += compartment.size();
- }
- if (unique.size() != n) {
-#ifndef __ppu__
- throw std::runtime_error("Multiple compartments contain the same neuron(s).");
-#else
- exit(1);
-#endif
- }
- m_compartments = compartments;
-}
-
-LogicalNeuronCompartments::Compartments const& LogicalNeuronCompartments::get_compartments() const
-{
- return m_compartments;
-}
-
-NeuronColumnOnLogicalNeuron LogicalNeuronCompartments::get_left_most_column() const
-{
- NeuronColumnOnLogicalNeuron lmost(NeuronColumnOnLogicalNeuron::max);
- for (auto const& [_, compartment] : m_compartments) {
- auto const lm =
- std::min_element(
- compartment.begin(), compartment.end(),
- [](auto const& a, auto const& b) {
- return a.toNeuronColumnOnLogicalNeuron() < b.toNeuronColumnOnLogicalNeuron();
- })
- ->toNeuronColumnOnLogicalNeuron();
- lmost = std::min(lm, lmost);
- }
- return lmost;
-}
-
-NeuronColumnOnLogicalNeuron LogicalNeuronCompartments::get_right_most_column() const
-{
- NeuronColumnOnLogicalNeuron rmost(NeuronColumnOnLogicalNeuron::min);
- for (auto const& [_, compartment] : m_compartments) {
- auto const rm =
- std::max_element(
- compartment.begin(), compartment.end(),
- [](auto const& a, auto const& b) {
- return a.toNeuronColumnOnLogicalNeuron() < b.toNeuronColumnOnLogicalNeuron();
- })
- ->toNeuronColumnOnLogicalNeuron();
- rmost = std::max(rm, rmost);
- }
- return rmost;
-}
-
-NeuronRowOnLogicalNeuron LogicalNeuronCompartments::get_top_most_row() const
-{
- NeuronRowOnLogicalNeuron tmost(NeuronRowOnLogicalNeuron::max);
- for (auto const& [_, compartment] : m_compartments) {
- auto const tm =
- std::min_element(
- compartment.begin(), compartment.end(),
- [](auto const& a, auto const& b) {
- return a.toNeuronRowOnLogicalNeuron() < b.toNeuronRowOnLogicalNeuron();
- })
- ->toNeuronRowOnLogicalNeuron();
- tmost = std::min(tm, tmost);
- }
- return tmost;
-}
-
-NeuronRowOnLogicalNeuron LogicalNeuronCompartments::get_bottom_most_row() const
-{
- NeuronRowOnLogicalNeuron bmost(NeuronRowOnLogicalNeuron::min);
- for (auto const& [_, compartment] : m_compartments) {
- auto const bm =
- std::max_element(
- compartment.begin(), compartment.end(),
- [](auto const& a, auto const& b) {
- return a.toNeuronRowOnLogicalNeuron() < b.toNeuronRowOnLogicalNeuron();
- })
- ->toNeuronRowOnLogicalNeuron();
- bmost = std::max(bm, bmost);
- }
- return bmost;
-}
-
-LogicalNeuronCompartments LogicalNeuronCompartments::flip_x() const
-{
- Compartments flipped_compartments;
- auto const lmost = get_left_most_column();
- auto const rmost = get_right_most_column();
- for (auto const& [index, compartment] : m_compartments) {
- Compartment& flipped_compartment = flipped_compartments[index];
- for (auto const& neuron : compartment) {
- flipped_compartment.push_back(AtomicNeuronOnLogicalNeuron(
- NeuronColumnOnLogicalNeuron(
- lmost.value() + rmost.value() - neuron.toNeuronColumnOnLogicalNeuron().value()),
- neuron.toNeuronRowOnLogicalNeuron()));
- }
- }
- return LogicalNeuronCompartments(flipped_compartments);
-}
-
-LogicalNeuronCompartments LogicalNeuronCompartments::flip_y() const
-{
- Compartments flipped_compartments;
- auto const tmost = get_top_most_row();
- auto const bmost = get_bottom_most_row();
- for (auto const& [index, compartment] : m_compartments) {
- Compartment& flipped_compartment = flipped_compartments[index];
- for (auto const& neuron : compartment) {
- flipped_compartment.push_back(AtomicNeuronOnLogicalNeuron(
- neuron.toNeuronColumnOnLogicalNeuron(),
- NeuronRowOnLogicalNeuron(
- tmost.value() + bmost.value() - neuron.toNeuronRowOnLogicalNeuron().value())));
- }
- }
- return LogicalNeuronCompartments(flipped_compartments);
-}
-
-bool LogicalNeuronCompartments::operator==(LogicalNeuronCompartments const& other) const
-{
- return m_compartments == other.m_compartments;
-}
-
-bool LogicalNeuronCompartments::operator!=(LogicalNeuronCompartments const& other) const
-{
- return !(*this == other);
-}
-
-bool LogicalNeuronCompartments::operator<(LogicalNeuronCompartments const& other) const
-{
- return m_compartments < other.m_compartments;
-}
-
-bool LogicalNeuronCompartments::operator>(LogicalNeuronCompartments const& other) const
-{
- return m_compartments > other.m_compartments;
-}
-
-bool LogicalNeuronCompartments::operator<=(LogicalNeuronCompartments const& other) const
-{
- return m_compartments <= other.m_compartments;
-}
-
-bool LogicalNeuronCompartments::operator>=(LogicalNeuronCompartments const& other) const
-{
- return m_compartments >= other.m_compartments;
-}
-
-#ifndef __ppu__
-std::ostream& operator<<(std::ostream& os, LogicalNeuronCompartments const& config)
-{
- os << "LogicalNeuronCompartments(\n";
- for (auto const& [index, compartment] : config.m_compartments) {
- os << index << "\n";
- for (auto const& neuron : compartment) {
- os << "\t" << neuron << "\n";
- }
- }
- os << ")";
- return os;
-}
-
-template <typename Archive>
-void LogicalNeuronCompartments::serialize(Archive& ar, uint32_t const)
-{
- ar(m_compartments);
-}
-#endif
-
-LogicalNeuronOnDLS::LogicalNeuronOnDLS(
- LogicalNeuronCompartments const& compartments, AtomicNeuronOnDLS const& anchor)
-{
- auto const lmost = compartments.get_left_most_column();
- auto const rmost = compartments.get_right_most_column();
- auto const bmost = compartments.get_bottom_most_row();
- auto const tmost = compartments.get_top_most_row();
- auto const height = bmost.value() - tmost.value();
- auto const width = rmost.value() - lmost.value();
-
- if ((anchor.toNeuronRowOnDLS().value() + height) > NeuronRowOnDLS::max) {
-#ifndef __ppu__
- throw std::runtime_error(
- "LogicalNeuron anchor results in placement of compartments outside of neuron grid.");
-#else
- exit(1);
-#endif
- }
- if ((((anchor.toNeuronColumnOnDLS().value()) < NeuronColumnOnLogicalNeuron::max) &&
- ((anchor.toNeuronColumnOnDLS().value() + width) > NeuronColumnOnLogicalNeuron::max)) ||
- (((anchor.toNeuronColumnOnDLS().value()) > NeuronColumnOnLogicalNeuron::max) &&
- ((anchor.toNeuronColumnOnDLS().value() + width) > NeuronColumnOnDLS::max))) {
-#ifndef __ppu__
- throw std::runtime_error(
- "LogicalNeuron anchor results in placement of compartments outside of neuron grid.");
-#else
- exit(1);
-#endif
- }
- for (auto const& [index, compartment] : compartments.get_compartments()) {
- auto& placed_compartment = m_compartments[index];
- for (auto const& neuron : compartment) {
- placed_compartment.push_back(AtomicNeuronOnDLS(
- NeuronColumnOnDLS(
- anchor.toNeuronColumnOnDLS().value() +
- neuron.toNeuronColumnOnLogicalNeuron().value() - lmost.value()),
- NeuronRowOnDLS(
- anchor.toNeuronRowOnDLS().value() +
- neuron.toNeuronRowOnLogicalNeuron().value() - tmost.value())));
- }
- }
-}
-
-LogicalNeuronOnDLS::PlacedCompartments LogicalNeuronOnDLS::get_placed_compartments() const
-{
- return m_compartments;
-}
-
-bool LogicalNeuronOnDLS::operator==(LogicalNeuronOnDLS const& other) const
-{
- return (m_compartments == other.m_compartments);
-}
-
-bool LogicalNeuronOnDLS::operator!=(LogicalNeuronOnDLS const& other) const
-{
- return !(*this == other);
-}
-
-bool LogicalNeuronOnDLS::operator<(LogicalNeuronOnDLS const& other) const
-{
- return m_compartments < other.m_compartments;
-}
-
-bool LogicalNeuronOnDLS::operator>(LogicalNeuronOnDLS const& other) const
-{
- return m_compartments > other.m_compartments;
-}
-
-bool LogicalNeuronOnDLS::operator<=(LogicalNeuronOnDLS const& other) const
-{
- return m_compartments <= other.m_compartments;
-}
-
-bool LogicalNeuronOnDLS::operator>=(LogicalNeuronOnDLS const& other) const
-{
- return m_compartments >= other.m_compartments;
-}
-
-#ifndef __ppu__
-std::ostream& operator<<(std::ostream& os, LogicalNeuronOnDLS const& config)
-{
- os << "LogicalNeuronOnDLS(\n";
- for (auto const& [index, compartment] : config.m_compartments) {
- os << index << "\n";
- for (auto const& neuron : compartment) {
- os << "\t" << neuron << "\n";
- }
- }
- os << ")";
- return os;
-}
-
-template <typename Archive>
-void LogicalNeuronOnDLS::serialize(Archive& ar, uint32_t const)
-{
- ar(m_compartments);
-}
-#endif
diff --git a/include/halco/hicann-dls/vx/switch_rows_ns_includes.h b/include/halco/hicann-dls/vx/switch_rows.h
similarity index 85%
rename from include/halco/hicann-dls/vx/switch_rows_ns_includes.h
rename to include/halco/hicann-dls/vx/switch_rows.h
index 093a2e5e11c71d762051bf7b7014e69b3e90ec65..05f5f164b7c1dc1aacaa24158dff55c1801ee15b 100644
--- a/include/halco/hicann-dls/vx/switch_rows_ns_includes.h
+++ b/include/halco/hicann-dls/vx/switch_rows.h
@@ -1,10 +1,11 @@
-#include <stdint.h>
-
+#pragma once
#include "halco/common/genpybind.h"
#include "halco/common/geometry.h"
-
#include "halco/hicann-dls/vx/synapse.h"
#include "halco/hicann-dls/vx/synram.h"
+#include <stdint.h>
+
+namespace halco::hicann_dls::vx GENPYBIND_TAG_HALCO_HICANN_DLS_VX {
/************************\
ColumnCorrelationQuad
@@ -100,3 +101,14 @@ struct GENPYBIND(inline_base("*SynramMixin*")) ColumnCurrentQuadOnDLS
return This();
}
};
+
+} // namespace halco::hicann_dls::vx::v3
+
+namespace std {
+
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::ColumnCorrelationQuadOnSynram)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::ColumnCurrentQuadOnSynram)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::ColumnCorrelationQuadOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::ColumnCurrentQuadOnDLS)
+
+} // namespace std
diff --git a/include/halco/hicann-dls/vx/synapse.h b/include/halco/hicann-dls/vx/synapse.h
index dbfc335516d689a780c4e2fa963c75fceec70e5f..96c00f6f28fa017d2b7bdad05b8e94b0deaab9a0 100644
--- a/include/halco/hicann-dls/vx/synapse.h
+++ b/include/halco/hicann-dls/vx/synapse.h
@@ -17,6 +17,15 @@ struct SynapseRowOnDLS;
struct SynapseWeightRowOnDLS;
struct SynapseLabelRowOnDLS;
struct SynapseCorrelationCalibRowOnDLS;
+struct ColumnCorrelationQuadOnSynram;
+struct ColumnCurrentQuadOnSynram;
+struct NeuronColumnOnDLS;
+struct SynapseQuadOnDLS;
+struct SynapseWeightQuadOnDLS;
+struct SynapseLabelQuadOnDLS;
+struct SynapseCorrelationCalibQuadOnDLS;
+struct SynapseRowOnSynram;
+struct CADCChannelColumnOnSynram;
/***********\
Synapse
@@ -259,6 +268,209 @@ struct GENPYBIND(inline_base("*")) SynapseBlockOnDLS
static const SynapseBlockOnDLS bottom;
};
+
+struct GENPYBIND(inline_base("*")) SynapseQuadColumnOnDLS
+ : public common::detail::RantWrapper<SynapseQuadColumnOnDLS, uint_fast16_t, 63, 0>
+ , public common::detail::XRangedTrait
+{
+ constexpr explicit SynapseQuadColumnOnDLS(uintmax_t const val = 0)
+ GENPYBIND(implicit_conversion) :
+ rant_t(val)
+ {}
+
+ constexpr explicit SynapseQuadColumnOnDLS(common::X const& x) GENPYBIND(implicit_conversion) :
+ rant_t(x)
+ {}
+
+ ColumnCorrelationQuadOnSynram toColumnCorrelationQuadOnSynram() const;
+ ColumnCurrentQuadOnSynram toColumnCurrentQuadOnSynram() const;
+ typedef common::typed_array<NeuronColumnOnDLS, EntryOnQuad> neuron_column_type
+ GENPYBIND(opaque(false));
+ neuron_column_type toNeuronColumnOnDLS() const;
+};
+
+struct GENPYBIND(inline_base("*")) SynapseQuadOnSynram
+ : public common::detail::
+ GridCoordinate<SynapseQuadOnSynram, SynapseQuadColumnOnDLS, SynapseRowOnSynram>
+{
+ GRID_COMMON_CONSTRUCTORS(SynapseQuadOnSynram)
+
+ SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const
+ {
+ return x();
+ }
+ SynapseRowOnSynram toSynapseRowOnSynram() const
+ {
+ return y();
+ }
+};
+
+struct GENPYBIND(inline_base("*SynramMixin*")) SynapseQuadOnDLS
+ : public SynramMixin<SynapseQuadOnDLS, SynapseQuadOnSynram>
+{
+ SynapseQuadOnDLS() = default;
+
+ explicit SynapseQuadOnDLS(
+ SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(block, synram)
+ {}
+
+ explicit SynapseQuadOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ SynapseQuadOnSynram toSynapseQuadOnSynram() const
+ {
+ return This();
+ }
+
+ NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
+ SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
+ SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
+ SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
+};
+
+struct GENPYBIND(inline_base("*SynramMixin*")) CorrelationResetOnDLS
+ : public SynramMixin<CorrelationResetOnDLS, SynapseQuadOnSynram>
+{
+ CorrelationResetOnDLS() = default;
+
+ explicit CorrelationResetOnDLS(
+ SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(block, synram)
+ {}
+
+ explicit CorrelationResetOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ SynapseQuadOnSynram toSynapseQuadOnSynram() const
+ {
+ return This();
+ }
+};
+
+struct GENPYBIND(inline_base("*SynramMixin*")) SynapseWeightQuadOnDLS
+ : public SynramMixin<SynapseWeightQuadOnDLS, SynapseQuadOnSynram>
+{
+ SynapseWeightQuadOnDLS() = default;
+
+ explicit SynapseWeightQuadOnDLS(
+ SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(block, synram)
+ {}
+
+ explicit SynapseWeightQuadOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ SynapseQuadOnSynram toSynapseQuadOnSynram() const
+ {
+ return This();
+ }
+
+ NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
+ SynapseQuadOnDLS toSynapseQuadOnDLS() const;
+ SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
+ SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
+};
+
+
+struct GENPYBIND(inline_base("*SynramMixin*")) SynapseLabelQuadOnDLS
+ : public SynramMixin<SynapseLabelQuadOnDLS, SynapseQuadOnSynram>
+{
+ SynapseLabelQuadOnDLS() = default;
+
+ explicit SynapseLabelQuadOnDLS(
+ SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(block, synram)
+ {}
+
+ explicit SynapseLabelQuadOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ SynapseQuadOnSynram toSynapseQuadOnSynram() const
+ {
+ return This();
+ }
+
+ NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
+ SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
+ SynapseQuadOnDLS toSynapseQuadOnDLS() const;
+ SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
+};
+
+
+struct GENPYBIND(inline_base("*SynramMixin*")) SynapseCorrelationCalibQuadOnDLS
+ : public SynramMixin<SynapseCorrelationCalibQuadOnDLS, SynapseQuadOnSynram>
+{
+ SynapseCorrelationCalibQuadOnDLS() = default;
+
+ explicit SynapseCorrelationCalibQuadOnDLS(
+ SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(block, synram)
+ {}
+
+ explicit SynapseCorrelationCalibQuadOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ SynapseQuadOnSynram toSynapseQuadOnSynram() const
+ {
+ return This();
+ }
+
+ NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
+ SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
+ SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
+ SynapseQuadOnDLS toSynapseQuadOnDLS() const;
+};
+
+
+struct GENPYBIND(inline_base("*")) SynapseOnSynapseRow
+ : public common::detail::RantWrapper<SynapseOnSynapseRow, uint_fast16_t, 255, 0>
+ , public common::detail::XRangedTrait
+{
+ constexpr explicit SynapseOnSynapseRow(uintmax_t const value = 0)
+ GENPYBIND(implicit_conversion) :
+ rant_t(value)
+ {}
+
+ explicit SynapseOnSynapseRow(
+ EntryOnQuad const& syn_on_quad, SynapseQuadColumnOnDLS const& quad);
+
+ EntryOnQuad toEntryOnQuad() const;
+ SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const;
+ NeuronColumnOnDLS toNeuronColumnOnDLS() const;
+ CADCChannelColumnOnSynram toCADCChannelColumnOnSynram() const;
+};
+
+struct GENPYBIND(inline_base("*")) SynapseOnSynram
+ : public common::detail::
+ GridCoordinate<SynapseOnSynram, SynapseOnSynapseRow, SynapseRowOnSynram>
+{
+ GRID_COMMON_CONSTRUCTORS(SynapseOnSynram)
+
+ SynapseOnSynapseRow toSynapseOnSynapseRow() const
+ {
+ return x();
+ }
+
+ SynapseRowOnSynram toSynapseRowOnSynram() const
+ {
+ return y();
+ }
+};
+
+struct GENPYBIND(inline_base("*SynramMixin*")) SynapseOnDLS
+ : public SynramMixin<SynapseOnDLS, SynapseOnSynram>
+{
+ SynapseOnDLS() = default;
+
+ explicit SynapseOnDLS(
+ SynapseOnSynram const& synapse, SynramOnDLS const& synram = SynramOnDLS()) :
+ mixin_t(synapse, synram)
+ {}
+
+ explicit SynapseOnDLS(enum_type const& e) : mixin_t(e) {}
+
+ SynapseOnSynram toSynapseOnSynram() const
+ {
+ return This();
+ }
+};
+
} // namespace halco::hicann_dls::vx
namespace std {
@@ -277,5 +489,15 @@ HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseWeightMatrixOnDLS)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseLabelMatrixOnDLS)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseCorrelationCalibMatrixOnDLS)
HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseBlockOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseQuadColumnOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseQuadOnSynram)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseOnSynapseRow)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseOnSynram)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseQuadOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseWeightQuadOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseLabelQuadOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::SynapseCorrelationCalibQuadOnDLS)
+HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::CorrelationResetOnDLS)
} // namespace std
diff --git a/include/halco/hicann-dls/vx/synapse_ns_includes.h b/include/halco/hicann-dls/vx/synapse_ns_includes.h
deleted file mode 100644
index 888c576238ea9a64cdfc6ea9f613350c48aa4dd1..0000000000000000000000000000000000000000
--- a/include/halco/hicann-dls/vx/synapse_ns_includes.h
+++ /dev/null
@@ -1,176 +0,0 @@
-struct ColumnCorrelationQuadOnSynram;
-struct ColumnCurrentQuadOnSynram;
-struct NeuronColumnOnDLS;
-struct SynapseQuadOnDLS;
-struct SynapseWeightQuadOnDLS;
-struct SynapseLabelQuadOnDLS;
-struct SynapseCorrelationCalibQuadOnDLS;
-
-using SynapseRowOnSynapseDriver GENPYBIND(visible) =
- halco::hicann_dls::vx::SynapseRowOnSynapseDriver;
-using SynapseRowOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::SynapseRowOnSynram;
-using SynapseRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseRowOnDLS;
-using SynapseWeightRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightRowOnDLS;
-using SynapseLabelRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelRowOnDLS;
-using SynapseCorrelationCalibRowOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::SynapseCorrelationCalibRowOnDLS;
-using CorrelationResetRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CorrelationResetRowOnDLS;
-using ColumnCorrelationRowOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::ColumnCorrelationRowOnDLS;
-using ColumnCurrentRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::ColumnCurrentRowOnDLS;
-using SynapticInputOnNeuron GENPYBIND(visible) = halco::hicann_dls::vx::SynapticInputOnNeuron;
-using SynapseBiasSelectionOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::SynapseBiasSelectionOnDLS;
-using SynapseWeightMatrixOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightMatrixOnDLS;
-using SynapseLabelMatrixOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelMatrixOnDLS;
-using SynapseCorrelationCalibMatrixOnDLS GENPYBIND(visible) =
- halco::hicann_dls::vx::SynapseCorrelationCalibMatrixOnDLS;
-using SynapseBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseBlockOnDLS;
-
-struct GENPYBIND(inline_base("*")) SynapseQuadColumnOnDLS
- : public common::detail::RantWrapper<SynapseQuadColumnOnDLS, uint_fast16_t, 63, 0>
- , public common::detail::XRangedTrait
-{
- constexpr explicit SynapseQuadColumnOnDLS(uintmax_t const val = 0)
- GENPYBIND(implicit_conversion) :
- rant_t(val)
- {}
-
- constexpr explicit SynapseQuadColumnOnDLS(common::X const& x) GENPYBIND(implicit_conversion) :
- rant_t(x)
- {}
-
- ColumnCorrelationQuadOnSynram toColumnCorrelationQuadOnSynram() const;
- ColumnCurrentQuadOnSynram toColumnCurrentQuadOnSynram() const;
- typedef common::typed_array<NeuronColumnOnDLS, EntryOnQuad> neuron_column_type
- GENPYBIND(opaque(false));
- neuron_column_type toNeuronColumnOnDLS() const;
-};
-
-struct GENPYBIND(inline_base("*")) SynapseQuadOnSynram
- : public common::detail::
- GridCoordinate<SynapseQuadOnSynram, SynapseQuadColumnOnDLS, SynapseRowOnSynram>
-{
- GRID_COMMON_CONSTRUCTORS(SynapseQuadOnSynram)
-
- SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const
- {
- return x();
- }
- SynapseRowOnSynram toSynapseRowOnSynram() const
- {
- return y();
- }
-};
-
-struct GENPYBIND(inline_base("*SynramMixin*")) SynapseQuadOnDLS
- : public SynramMixin<SynapseQuadOnDLS, SynapseQuadOnSynram>
-{
- SynapseQuadOnDLS() = default;
-
- explicit SynapseQuadOnDLS(
- SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(block, synram)
- {}
-
- explicit SynapseQuadOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseQuadOnSynram toSynapseQuadOnSynram() const
- {
- return This();
- }
-
- NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
- SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
- SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
- SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
-};
-
-struct GENPYBIND(inline_base("*SynramMixin*")) CorrelationResetOnDLS
- : public SynramMixin<CorrelationResetOnDLS, SynapseQuadOnSynram>
-{
- CorrelationResetOnDLS() = default;
-
- explicit CorrelationResetOnDLS(
- SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(block, synram)
- {}
-
- explicit CorrelationResetOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseQuadOnSynram toSynapseQuadOnSynram() const
- {
- return This();
- }
-};
-
-struct GENPYBIND(inline_base("*SynramMixin*")) SynapseWeightQuadOnDLS
- : public SynramMixin<SynapseWeightQuadOnDLS, SynapseQuadOnSynram>
-{
- SynapseWeightQuadOnDLS() = default;
-
- explicit SynapseWeightQuadOnDLS(
- SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(block, synram)
- {}
-
- explicit SynapseWeightQuadOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseQuadOnSynram toSynapseQuadOnSynram() const
- {
- return This();
- }
-
- NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
- SynapseQuadOnDLS toSynapseQuadOnDLS() const;
- SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
- SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
-};
-
-
-struct GENPYBIND(inline_base("*SynramMixin*")) SynapseLabelQuadOnDLS
- : public SynramMixin<SynapseLabelQuadOnDLS, SynapseQuadOnSynram>
-{
- SynapseLabelQuadOnDLS() = default;
-
- explicit SynapseLabelQuadOnDLS(
- SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(block, synram)
- {}
-
- explicit SynapseLabelQuadOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseQuadOnSynram toSynapseQuadOnSynram() const
- {
- return This();
- }
-
- NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
- SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
- SynapseQuadOnDLS toSynapseQuadOnDLS() const;
- SynapseCorrelationCalibQuadOnDLS toSynapseCorrelationCalibQuadOnDLS() const;
-};
-
-
-struct GENPYBIND(inline_base("*SynramMixin*")) SynapseCorrelationCalibQuadOnDLS
- : public SynramMixin<SynapseCorrelationCalibQuadOnDLS, SynapseQuadOnSynram>
-{
- SynapseCorrelationCalibQuadOnDLS() = default;
-
- explicit SynapseCorrelationCalibQuadOnDLS(
- SynapseQuadOnSynram const& block, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(block, synram)
- {}
-
- explicit SynapseCorrelationCalibQuadOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseQuadOnSynram toSynapseQuadOnSynram() const
- {
- return This();
- }
-
- NeuronConfigBlockOnDLS toNeuronConfigBlockOnDLS() const;
- SynapseWeightQuadOnDLS toSynapseWeightQuadOnDLS() const;
- SynapseLabelQuadOnDLS toSynapseLabelQuadOnDLS() const;
- SynapseQuadOnDLS toSynapseQuadOnDLS() const;
-};
diff --git a/include/halco/hicann-dls/vx/synapse_ns_includes_impl.h b/include/halco/hicann-dls/vx/synapse_ns_includes_impl.h
deleted file mode 100644
index 877354ff727b1e4b1c32779c2b8e0c1ee1768683..0000000000000000000000000000000000000000
--- a/include/halco/hicann-dls/vx/synapse_ns_includes_impl.h
+++ /dev/null
@@ -1,94 +0,0 @@
-ColumnCorrelationQuadOnSynram SynapseQuadColumnOnDLS::toColumnCorrelationQuadOnSynram() const
-{
- return ColumnCorrelationQuadOnSynram(toEnum());
-}
-
-ColumnCurrentQuadOnSynram SynapseQuadColumnOnDLS::toColumnCurrentQuadOnSynram() const
-{
- return ColumnCurrentQuadOnSynram(toEnum());
-}
-
-SynapseWeightQuadOnDLS SynapseQuadOnDLS::toSynapseWeightQuadOnDLS() const
-{
- return SynapseWeightQuadOnDLS(toEnum());
-}
-
-SynapseLabelQuadOnDLS SynapseQuadOnDLS::toSynapseLabelQuadOnDLS() const
-{
- return SynapseLabelQuadOnDLS(toEnum());
-}
-
-SynapseCorrelationCalibQuadOnDLS SynapseQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
-{
- return SynapseCorrelationCalibQuadOnDLS(toEnum());
-}
-
-NeuronConfigBlockOnDLS SynapseWeightQuadOnDLS::toNeuronConfigBlockOnDLS() const
-{
- return toSynapseQuadOnDLS().toNeuronConfigBlockOnDLS();
-}
-
-SynapseQuadOnDLS SynapseWeightQuadOnDLS::toSynapseQuadOnDLS() const
-{
- return SynapseQuadOnDLS(toEnum());
-}
-
-SynapseLabelQuadOnDLS SynapseWeightQuadOnDLS::toSynapseLabelQuadOnDLS() const
-{
- return SynapseLabelQuadOnDLS(toEnum());
-}
-
-SynapseCorrelationCalibQuadOnDLS SynapseWeightQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
-{
- return SynapseCorrelationCalibQuadOnDLS(toEnum());
-}
-
-NeuronConfigBlockOnDLS SynapseLabelQuadOnDLS::toNeuronConfigBlockOnDLS() const
-{
- return toSynapseQuadOnDLS().toNeuronConfigBlockOnDLS();
-}
-
-SynapseWeightQuadOnDLS SynapseLabelQuadOnDLS::toSynapseWeightQuadOnDLS() const
-{
- return SynapseWeightQuadOnDLS(toEnum());
-}
-
-SynapseQuadOnDLS SynapseLabelQuadOnDLS::toSynapseQuadOnDLS() const
-{
- return SynapseQuadOnDLS(toEnum());
-}
-
-SynapseCorrelationCalibQuadOnDLS SynapseLabelQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
-{
- return SynapseCorrelationCalibQuadOnDLS(toEnum());
-}
-
-NeuronConfigBlockOnDLS SynapseCorrelationCalibQuadOnDLS::toNeuronConfigBlockOnDLS() const
-{
- return toSynapseQuadOnDLS().toNeuronConfigBlockOnDLS();
-}
-
-SynapseWeightQuadOnDLS SynapseCorrelationCalibQuadOnDLS::toSynapseWeightQuadOnDLS() const
-{
- return SynapseWeightQuadOnDLS(toEnum());
-}
-
-SynapseLabelQuadOnDLS SynapseCorrelationCalibQuadOnDLS::toSynapseLabelQuadOnDLS() const
-{
- return SynapseLabelQuadOnDLS(toEnum());
-}
-
-SynapseQuadOnDLS SynapseCorrelationCalibQuadOnDLS::toSynapseQuadOnDLS() const
-{
- return SynapseQuadOnDLS(toEnum());
-}
-
-NeuronColumnOnDLS SynapseOnSynapseRow::toNeuronColumnOnDLS() const
-{
- return NeuronColumnOnDLS(toEnum());
-}
-
-CADCChannelColumnOnSynram SynapseOnSynapseRow::toCADCChannelColumnOnSynram() const
-{
- return CADCChannelColumnOnSynram(toEnum());
-}
diff --git a/include/halco/hicann-dls/vx/v2/cadc.h b/include/halco/hicann-dls/vx/v2/cadc.h
index d09fe4cf8bcf0ebec4e532e7dd94fda1f12c17da..b6e6ee1c076569f6ad7dd6c387c4a4fa15146dd7 100644
--- a/include/halco/hicann-dls/vx/v2/cadc.h
+++ b/include/halco/hicann-dls/vx/v2/cadc.h
@@ -1,20 +1,25 @@
#pragma once
#include "halco/common/genpybind.h"
#include "halco/hicann-dls/vx/cadc.h"
-#include "halco/hicann-dls/vx/v2/synapse.h"
namespace halco::hicann_dls::vx::v2 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V2 {
-#include "halco/hicann-dls/vx/cadc_ns_includes.h"
+using CADCOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCOnDLS;
+using CADCConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCConfigOnDLS;
+using CADCChannelType GENPYBIND(visible) = halco::hicann_dls::vx::CADCChannelType;
+using CADCReadoutType GENPYBIND(visible) = halco::hicann_dls::vx::CADCReadoutType;
+using CADCChannelColumnOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCChannelColumnOnSynram;
+using CADCSampleRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSampleRowOnDLS;
+using CADCOffsetSRAMTimingConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCOffsetSRAMTimingConfigOnDLS;
+using CADCSamplesOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSamplesOnDLS;
+using CADCSampleQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSampleQuadOnDLS;
+using CADCChannelConfigOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCChannelConfigOnSynram;
+using CADCChannelConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCChannelConfigOnDLS;
+using CADCSampleQuadUnspecifiedReadoutOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCSampleQuadUnspecifiedReadoutOnSynram;
+using CADCSampleQuadOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::CADCSampleQuadOnSynram;
} // namespace halco::hicann_dls::vx::v2
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::CADCSampleQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::CADCChannelConfigOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::CADCChannelConfigOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::CADCSampleQuadUnspecifiedReadoutOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::CADCSampleQuadOnSynram)
-
-} // namespace std
diff --git a/include/halco/hicann-dls/vx/v2/neuron.h b/include/halco/hicann-dls/vx/v2/neuron.h
index 959972c127ab9a7440392550ecf743df62c4d6bd..e3c4c3a079bf6ccb687487487350f389a1a813a7 100644
--- a/include/halco/hicann-dls/vx/v2/neuron.h
+++ b/include/halco/hicann-dls/vx/v2/neuron.h
@@ -2,34 +2,56 @@
#include "halco/common/genpybind.h"
#include "halco/common/iter_all.h"
#include "halco/hicann-dls/vx/neuron.h"
-#include "halco/hicann-dls/vx/v2/cadc.h"
-#include "halco/hicann-dls/vx/v2/capmem.h"
-#include "halco/hicann-dls/vx/v2/chip.h"
-#include "halco/hicann-dls/vx/v2/correlation.h"
-#include "halco/hicann-dls/vx/v2/padi.h"
-#include "halco/hicann-dls/vx/v2/ppu.h"
-#include "halco/hicann-dls/vx/v2/routing_crossbar.h"
-#include "halco/hicann-dls/vx/v2/switch_rows.h"
-#include "halco/hicann-dls/vx/v2/synapse.h"
-#include "halco/hicann-dls/vx/v2/synapse_driver.h"
-#include "halco/hicann-dls/vx/v2/synram.h"
-
-namespace cereal {
-class access;
-} // namespace cereal
namespace halco::hicann_dls::vx::v2 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V2 {
-#include "halco/hicann-dls/vx/neuron_ns_includes.h"
+using NeuronRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronRowOnDLS;
+using NeuronConfigOnNeuronConfigBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronConfigOnNeuronConfigBlock;
+using NeuronConfigBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronConfigBlockOnDLS;
+using NeuronBackendConfigOnNeuronBackendConfigBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronBackendConfigOnNeuronBackendConfigBlock;
+using NeuronBackendConfigBlockOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronBackendConfigBlockOnDLS;
+using CommonNeuronBackendConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::CommonNeuronBackendConfigOnDLS;
+using NeuronResetOnNeuronResetBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronResetOnNeuronResetBlock;
+using NeuronResetBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetBlockOnDLS;
+using NeuronResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetOnDLS;
+using BlockPostPulseOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::BlockPostPulseOnDLS;
+using SpikeCounterReadOnSpikeCounterReadBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterReadOnSpikeCounterReadBlock;
+using SpikeCounterReadBlockOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterReadBlockOnDLS;
+using SpikeCounterReadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SpikeCounterReadOnDLS;
+using SpikeCounterResetOnSpikeCounterResetBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterResetOnSpikeCounterResetBlock;
+using SpikeCounterResetBlockOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterResetBlockOnDLS;
+using SpikeCounterResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SpikeCounterResetOnDLS;
+using NeuronEventOutputOnNeuronBackendBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronEventOutputOnNeuronBackendBlock;
+using NeuronEventOutputOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronEventOutputOnDLS;
+using NeuronSRAMTimingConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronSRAMTimingConfigOnDLS;
+using NeuronBackendSRAMTimingConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronBackendSRAMTimingConfigOnDLS;
+using NeuronRowOnLogicalNeuron = halco::hicann_dls::vx::NeuronRowOnLogicalNeuron;
+using NeuronBlockOnDLS = halco::hicann_dls::vx::NeuronBlockOnDLS;
+using NeuronColumnOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronColumnOnDLS;
+using AtomicNeuronOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::AtomicNeuronOnDLS;
+using NeuronConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronConfigOnDLS;
+using NeuronBackendConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronBackendConfigOnDLS;
+using NeuronResetQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetQuadOnDLS;
+using LogicalNeuronOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::LogicalNeuronOnDLS;
+using LogicalNeuronCompartments GENPYBIND(visible) =
+ halco::hicann_dls::vx::LogicalNeuronCompartments;
+using AtomicNeuronOnLogicalNeuron GENPYBIND(visible) =
+ halco::hicann_dls::vx::AtomicNeuronOnLogicalNeuron;
+using NeuronColumnOnLogicalNeuron GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronColumnOnLogicalNeuron;
+using CompartmentOnLogicalNeuron GENPYBIND(visible) =
+ halco::hicann_dls::vx::CompartmentOnLogicalNeuron;
} // namespace halco::hicann_dls::vx::v2
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::NeuronColumnOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::AtomicNeuronOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::NeuronConfigOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::NeuronBackendConfigOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::NeuronResetQuadOnDLS)
-
-} // namespace std
diff --git a/include/halco/hicann-dls/vx/v2/switch_rows.h b/include/halco/hicann-dls/vx/v2/switch_rows.h
index b732122d6e5d6369323a0d43051e6a0567bb3971..dc65b5b4f541e246835661a5a1b5e9a7cf205296 100644
--- a/include/halco/hicann-dls/vx/v2/switch_rows.h
+++ b/include/halco/hicann-dls/vx/v2/switch_rows.h
@@ -1,19 +1,15 @@
#pragma once
#include "halco/common/genpybind.h"
-#include "halco/hicann-dls/vx/v2/synapse.h"
-#include "halco/hicann-dls/vx/v2/synram.h"
+#include "halco/hicann-dls/vx/switch_rows.h"
namespace halco::hicann_dls::vx::v2 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V2 {
-#include "halco/hicann-dls/vx/switch_rows_ns_includes.h"
+using ColumnCorrelationQuadOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCorrelationQuadOnSynram;
+using ColumnCurrentQuadOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCurrentQuadOnSynram;
+using ColumnCorrelationQuadOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCorrelationQuadOnDLS;
+using ColumnCurrentQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::ColumnCurrentQuadOnDLS;
} // namespace halco::hicann_dls::vx::v2
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::ColumnCorrelationQuadOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::ColumnCurrentQuadOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::ColumnCorrelationQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::ColumnCurrentQuadOnDLS)
-
-} // namespace std
diff --git a/include/halco/hicann-dls/vx/v2/synapse.h b/include/halco/hicann-dls/vx/v2/synapse.h
index 16e763f8e32c23a36ae25f56a8382169df6b819e..0385a8cff750c78215f3696064922b9a5da6d603 100644
--- a/include/halco/hicann-dls/vx/v2/synapse.h
+++ b/include/halco/hicann-dls/vx/v2/synapse.h
@@ -2,79 +2,39 @@
#include "halco/common/genpybind.h"
#include "halco/hicann-dls/vx/cadc.h"
#include "halco/hicann-dls/vx/synapse.h"
-#include "halco/hicann-dls/vx/v2/quad.h"
-#include "halco/hicann-dls/vx/v2/synram.h"
namespace halco::hicann_dls::vx::v2 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V2 {
-#include "halco/hicann-dls/vx/synapse_ns_includes.h"
-
-struct GENPYBIND(inline_base("*")) SynapseOnSynapseRow
- : public common::detail::RantWrapper<SynapseOnSynapseRow, uint_fast16_t, 255, 0>
- , public common::detail::XRangedTrait
-{
- constexpr explicit SynapseOnSynapseRow(uintmax_t const value = 0)
- GENPYBIND(implicit_conversion) :
- rant_t(value)
- {}
-
- explicit SynapseOnSynapseRow(
- EntryOnQuad const& syn_on_quad, SynapseQuadColumnOnDLS const& quad);
-
- EntryOnQuad toEntryOnQuad() const;
- SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const;
- NeuronColumnOnDLS toNeuronColumnOnDLS() const;
- CADCChannelColumnOnSynram toCADCChannelColumnOnSynram() const;
-};
-
-struct GENPYBIND(inline_base("*")) SynapseOnSynram
- : public common::detail::
- GridCoordinate<SynapseOnSynram, SynapseOnSynapseRow, SynapseRowOnSynram>
-{
- GRID_COMMON_CONSTRUCTORS(SynapseOnSynram)
-
- SynapseOnSynapseRow toSynapseOnSynapseRow() const
- {
- return x();
- }
-
- SynapseRowOnSynram toSynapseRowOnSynram() const
- {
- return y();
- }
-};
-
-struct GENPYBIND(inline_base("*SynramMixin*")) SynapseOnDLS
- : public SynramMixin<SynapseOnDLS, SynapseOnSynram>
-{
- SynapseOnDLS() = default;
-
- explicit SynapseOnDLS(
- SynapseOnSynram const& synapse, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(synapse, synram)
- {}
-
- explicit SynapseOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseOnSynram toSynapseOnSynram() const
- {
- return This();
- }
-};
+using SynapseRowOnSynapseDriver GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseRowOnSynapseDriver;
+using SynapseRowOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::SynapseRowOnSynram;
+using SynapseRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseRowOnDLS;
+using SynapseWeightRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightRowOnDLS;
+using SynapseLabelRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelRowOnDLS;
+using SynapseCorrelationCalibRowOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseCorrelationCalibRowOnDLS;
+using CorrelationResetRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CorrelationResetRowOnDLS;
+using ColumnCorrelationRowOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCorrelationRowOnDLS;
+using ColumnCurrentRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::ColumnCurrentRowOnDLS;
+using SynapticInputOnNeuron GENPYBIND(visible) = halco::hicann_dls::vx::SynapticInputOnNeuron;
+using SynapseBiasSelectionOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseBiasSelectionOnDLS;
+using SynapseWeightMatrixOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightMatrixOnDLS;
+using SynapseLabelMatrixOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelMatrixOnDLS;
+using SynapseCorrelationCalibMatrixOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseCorrelationCalibMatrixOnDLS;
+using SynapseBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseBlockOnDLS;
+using SynapseQuadColumnOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseQuadColumnOnDLS;
+using SynapseQuadOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::SynapseQuadOnSynram;
+using SynapseOnSynapseRow GENPYBIND(visible) = halco::hicann_dls::vx::SynapseOnSynapseRow;
+using SynapseOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::SynapseOnSynram;
+using SynapseOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseOnDLS;
+using SynapseQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseQuadOnDLS;
+using SynapseWeightQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightQuadOnDLS;
+using SynapseLabelQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelQuadOnDLS;
+using SynapseCorrelationCalibQuadOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseCorrelationCalibQuadOnDLS;
+using CorrelationResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CorrelationResetOnDLS;
} // namespace halco::hicann_dls::vx::v2
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseQuadColumnOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseQuadOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseOnSynapseRow)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseWeightQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseLabelQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::SynapseCorrelationCalibQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v2::CorrelationResetOnDLS)
-
-} // namespace std
diff --git a/include/halco/hicann-dls/vx/v3/cadc.h b/include/halco/hicann-dls/vx/v3/cadc.h
index f22fbcfa64cd394cff45f94bc2e58b5380a180c0..24a46c384de40ed8cf124d60866010fd73d6b209 100644
--- a/include/halco/hicann-dls/vx/v3/cadc.h
+++ b/include/halco/hicann-dls/vx/v3/cadc.h
@@ -1,20 +1,25 @@
#pragma once
#include "halco/common/genpybind.h"
#include "halco/hicann-dls/vx/cadc.h"
-#include "halco/hicann-dls/vx/v3/synapse.h"
namespace halco::hicann_dls::vx::v3 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V3 {
-#include "halco/hicann-dls/vx/cadc_ns_includes.h"
+using CADCOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCOnDLS;
+using CADCConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCConfigOnDLS;
+using CADCChannelType GENPYBIND(visible) = halco::hicann_dls::vx::CADCChannelType;
+using CADCReadoutType GENPYBIND(visible) = halco::hicann_dls::vx::CADCReadoutType;
+using CADCChannelColumnOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCChannelColumnOnSynram;
+using CADCSampleRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSampleRowOnDLS;
+using CADCOffsetSRAMTimingConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCOffsetSRAMTimingConfigOnDLS;
+using CADCSamplesOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSamplesOnDLS;
+using CADCSampleQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCSampleQuadOnDLS;
+using CADCChannelConfigOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCChannelConfigOnSynram;
+using CADCChannelConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CADCChannelConfigOnDLS;
+using CADCSampleQuadUnspecifiedReadoutOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::CADCSampleQuadUnspecifiedReadoutOnSynram;
+using CADCSampleQuadOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::CADCSampleQuadOnSynram;
} // namespace halco::hicann_dls::vx::v3
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::CADCSampleQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::CADCChannelConfigOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::CADCChannelConfigOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::CADCSampleQuadUnspecifiedReadoutOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::CADCSampleQuadOnSynram)
-
-} // namespace std
diff --git a/include/halco/hicann-dls/vx/v3/neuron.h b/include/halco/hicann-dls/vx/v3/neuron.h
index 4a841482907d34dac0ac32da92a218aa8d41e795..08aee054879b3f5148e52398ca9f0220772e6ff5 100644
--- a/include/halco/hicann-dls/vx/v3/neuron.h
+++ b/include/halco/hicann-dls/vx/v3/neuron.h
@@ -2,34 +2,56 @@
#include "halco/common/genpybind.h"
#include "halco/common/iter_all.h"
#include "halco/hicann-dls/vx/neuron.h"
-#include "halco/hicann-dls/vx/v3/cadc.h"
-#include "halco/hicann-dls/vx/v3/capmem.h"
-#include "halco/hicann-dls/vx/v3/chip.h"
-#include "halco/hicann-dls/vx/v3/correlation.h"
-#include "halco/hicann-dls/vx/v3/padi.h"
-#include "halco/hicann-dls/vx/v3/ppu.h"
-#include "halco/hicann-dls/vx/v3/routing_crossbar.h"
-#include "halco/hicann-dls/vx/v3/switch_rows.h"
-#include "halco/hicann-dls/vx/v3/synapse.h"
-#include "halco/hicann-dls/vx/v3/synapse_driver.h"
-#include "halco/hicann-dls/vx/v3/synram.h"
-
-namespace cereal {
-class access;
-} // namespace cereal
namespace halco::hicann_dls::vx::v3 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V3 {
-#include "halco/hicann-dls/vx/neuron_ns_includes.h"
+using NeuronRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronRowOnDLS;
+using NeuronConfigOnNeuronConfigBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronConfigOnNeuronConfigBlock;
+using NeuronConfigBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronConfigBlockOnDLS;
+using NeuronBackendConfigOnNeuronBackendConfigBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronBackendConfigOnNeuronBackendConfigBlock;
+using NeuronBackendConfigBlockOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronBackendConfigBlockOnDLS;
+using CommonNeuronBackendConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::CommonNeuronBackendConfigOnDLS;
+using NeuronResetOnNeuronResetBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronResetOnNeuronResetBlock;
+using NeuronResetBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetBlockOnDLS;
+using NeuronResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetOnDLS;
+using BlockPostPulseOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::BlockPostPulseOnDLS;
+using SpikeCounterReadOnSpikeCounterReadBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterReadOnSpikeCounterReadBlock;
+using SpikeCounterReadBlockOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterReadBlockOnDLS;
+using SpikeCounterReadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SpikeCounterReadOnDLS;
+using SpikeCounterResetOnSpikeCounterResetBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterResetOnSpikeCounterResetBlock;
+using SpikeCounterResetBlockOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SpikeCounterResetBlockOnDLS;
+using SpikeCounterResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SpikeCounterResetOnDLS;
+using NeuronEventOutputOnNeuronBackendBlock GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronEventOutputOnNeuronBackendBlock;
+using NeuronEventOutputOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronEventOutputOnDLS;
+using NeuronSRAMTimingConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronSRAMTimingConfigOnDLS;
+using NeuronBackendSRAMTimingConfigOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronBackendSRAMTimingConfigOnDLS;
+using NeuronRowOnLogicalNeuron = halco::hicann_dls::vx::NeuronRowOnLogicalNeuron;
+using NeuronBlockOnDLS = halco::hicann_dls::vx::NeuronBlockOnDLS;
+using NeuronColumnOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronColumnOnDLS;
+using AtomicNeuronOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::AtomicNeuronOnDLS;
+using NeuronConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronConfigOnDLS;
+using NeuronBackendConfigOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronBackendConfigOnDLS;
+using NeuronResetQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::NeuronResetQuadOnDLS;
+using LogicalNeuronOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::LogicalNeuronOnDLS;
+using LogicalNeuronCompartments GENPYBIND(visible) =
+ halco::hicann_dls::vx::LogicalNeuronCompartments;
+using AtomicNeuronOnLogicalNeuron GENPYBIND(visible) =
+ halco::hicann_dls::vx::AtomicNeuronOnLogicalNeuron;
+using NeuronColumnOnLogicalNeuron GENPYBIND(visible) =
+ halco::hicann_dls::vx::NeuronColumnOnLogicalNeuron;
+using CompartmentOnLogicalNeuron GENPYBIND(visible) =
+ halco::hicann_dls::vx::CompartmentOnLogicalNeuron;
} // namespace halco::hicann_dls::vx::v3
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::NeuronColumnOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::AtomicNeuronOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::NeuronConfigOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::NeuronBackendConfigOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::NeuronResetQuadOnDLS)
-
-} // namespace std
diff --git a/include/halco/hicann-dls/vx/v3/switch_rows.h b/include/halco/hicann-dls/vx/v3/switch_rows.h
index f97feab5dedb9676da45b14de164d78ecde49d9e..8ebfc50269d4517e83570eb511ef2944c0c9dce8 100644
--- a/include/halco/hicann-dls/vx/v3/switch_rows.h
+++ b/include/halco/hicann-dls/vx/v3/switch_rows.h
@@ -1,19 +1,15 @@
#pragma once
#include "halco/common/genpybind.h"
-#include "halco/hicann-dls/vx/v3/synapse.h"
-#include "halco/hicann-dls/vx/v3/synram.h"
+#include "halco/hicann-dls/vx/switch_rows.h"
namespace halco::hicann_dls::vx::v3 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V3 {
-#include "halco/hicann-dls/vx/switch_rows_ns_includes.h"
+using ColumnCorrelationQuadOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCorrelationQuadOnSynram;
+using ColumnCurrentQuadOnSynram GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCurrentQuadOnSynram;
+using ColumnCorrelationQuadOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCorrelationQuadOnDLS;
+using ColumnCurrentQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::ColumnCurrentQuadOnDLS;
} // namespace halco::hicann_dls::vx::v3
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::ColumnCorrelationQuadOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::ColumnCurrentQuadOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::ColumnCorrelationQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::ColumnCurrentQuadOnDLS)
-
-} // namespace std
diff --git a/include/halco/hicann-dls/vx/v3/synapse.h b/include/halco/hicann-dls/vx/v3/synapse.h
index 634998dc3c61398b6996fac0b7ffabba5dab7fc7..51b86ed84afe85a92fc503b338f9ef22343c0a64 100644
--- a/include/halco/hicann-dls/vx/v3/synapse.h
+++ b/include/halco/hicann-dls/vx/v3/synapse.h
@@ -2,79 +2,39 @@
#include "halco/common/genpybind.h"
#include "halco/hicann-dls/vx/cadc.h"
#include "halco/hicann-dls/vx/synapse.h"
-#include "halco/hicann-dls/vx/v3/quad.h"
-#include "halco/hicann-dls/vx/v3/synram.h"
namespace halco::hicann_dls::vx::v3 GENPYBIND_TAG_HALCO_HICANN_DLS_VX_V3 {
-#include "halco/hicann-dls/vx/synapse_ns_includes.h"
-
-struct GENPYBIND(inline_base("*")) SynapseOnSynapseRow
- : public common::detail::RantWrapper<SynapseOnSynapseRow, uint_fast16_t, 255, 0>
- , public common::detail::XRangedTrait
-{
- constexpr explicit SynapseOnSynapseRow(uintmax_t const value = 0)
- GENPYBIND(implicit_conversion) :
- rant_t(value)
- {}
-
- explicit SynapseOnSynapseRow(
- EntryOnQuad const& syn_on_quad, SynapseQuadColumnOnDLS const& quad);
-
- EntryOnQuad toEntryOnQuad() const;
- SynapseQuadColumnOnDLS toSynapseQuadColumnOnDLS() const;
- NeuronColumnOnDLS toNeuronColumnOnDLS() const;
- CADCChannelColumnOnSynram toCADCChannelColumnOnSynram() const;
-};
-
-struct GENPYBIND(inline_base("*")) SynapseOnSynram
- : public common::detail::
- GridCoordinate<SynapseOnSynram, SynapseOnSynapseRow, SynapseRowOnSynram>
-{
- GRID_COMMON_CONSTRUCTORS(SynapseOnSynram)
-
- SynapseOnSynapseRow toSynapseOnSynapseRow() const
- {
- return x();
- }
-
- SynapseRowOnSynram toSynapseRowOnSynram() const
- {
- return y();
- }
-};
-
-struct GENPYBIND(inline_base("*SynramMixin*")) SynapseOnDLS
- : public SynramMixin<SynapseOnDLS, SynapseOnSynram>
-{
- SynapseOnDLS() = default;
-
- explicit SynapseOnDLS(
- SynapseOnSynram const& synapse, SynramOnDLS const& synram = SynramOnDLS()) :
- mixin_t(synapse, synram)
- {}
-
- explicit SynapseOnDLS(enum_type const& e) : mixin_t(e) {}
-
- SynapseOnSynram toSynapseOnSynram() const
- {
- return This();
- }
-};
+using SynapseRowOnSynapseDriver GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseRowOnSynapseDriver;
+using SynapseRowOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::SynapseRowOnSynram;
+using SynapseRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseRowOnDLS;
+using SynapseWeightRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightRowOnDLS;
+using SynapseLabelRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelRowOnDLS;
+using SynapseCorrelationCalibRowOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseCorrelationCalibRowOnDLS;
+using CorrelationResetRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CorrelationResetRowOnDLS;
+using ColumnCorrelationRowOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::ColumnCorrelationRowOnDLS;
+using ColumnCurrentRowOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::ColumnCurrentRowOnDLS;
+using SynapticInputOnNeuron GENPYBIND(visible) = halco::hicann_dls::vx::SynapticInputOnNeuron;
+using SynapseBiasSelectionOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseBiasSelectionOnDLS;
+using SynapseWeightMatrixOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightMatrixOnDLS;
+using SynapseLabelMatrixOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelMatrixOnDLS;
+using SynapseCorrelationCalibMatrixOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseCorrelationCalibMatrixOnDLS;
+using SynapseBlockOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseBlockOnDLS;
+using SynapseQuadColumnOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseQuadColumnOnDLS;
+using SynapseQuadOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::SynapseQuadOnSynram;
+using SynapseOnSynapseRow GENPYBIND(visible) = halco::hicann_dls::vx::SynapseOnSynapseRow;
+using SynapseOnSynram GENPYBIND(visible) = halco::hicann_dls::vx::SynapseOnSynram;
+using SynapseOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseOnDLS;
+using SynapseQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseQuadOnDLS;
+using SynapseWeightQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseWeightQuadOnDLS;
+using SynapseLabelQuadOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::SynapseLabelQuadOnDLS;
+using SynapseCorrelationCalibQuadOnDLS GENPYBIND(visible) =
+ halco::hicann_dls::vx::SynapseCorrelationCalibQuadOnDLS;
+using CorrelationResetOnDLS GENPYBIND(visible) = halco::hicann_dls::vx::CorrelationResetOnDLS;
} // namespace halco::hicann_dls::vx::v3
-
-namespace std {
-
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseQuadColumnOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseQuadOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseOnSynapseRow)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseOnSynram)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseWeightQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseLabelQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::SynapseCorrelationCalibQuadOnDLS)
-HALCO_GEOMETRY_HASH_CLASS(halco::hicann_dls::vx::v3::CorrelationResetOnDLS)
-
-} // namespace std
diff --git a/src/halco/hicann-dls/vx/cadc.cpp b/src/halco/hicann-dls/vx/cadc.cpp
index a75b9acb28abd28a8642eabdf1494006df644766..d8d41d58cc1e41b03119577ce6d125ccbe4a1c3e 100644
--- a/src/halco/hicann-dls/vx/cadc.cpp
+++ b/src/halco/hicann-dls/vx/cadc.cpp
@@ -42,4 +42,36 @@ SynapseCorrelationCalibRowOnDLS CADCSampleRowOnDLS::toSynapseCorrelationCalibRow
return SynapseCorrelationCalibRowOnDLS(toEnum());
}
+SynapseQuadOnDLS CADCSampleQuadOnDLS::toSynapseQuadOnDLS() const
+{
+ return SynapseQuadOnDLS(
+ toCADCSampleQuadOnSynram()
+ .toCADCSampleQuadUnspecifiedReadoutOnSynram()
+ .toSynapseQuadOnSynram(),
+ toSynramOnDLS());
+}
+
+SynapseWeightQuadOnDLS CADCSampleQuadOnDLS::toSynapseWeightQuadOnDLS() const
+{
+ return toSynapseQuadOnDLS().toSynapseWeightQuadOnDLS();
+}
+
+SynapseLabelQuadOnDLS CADCSampleQuadOnDLS::toSynapseLabelQuadOnDLS() const
+{
+ return toSynapseQuadOnDLS().toSynapseLabelQuadOnDLS();
+}
+
+SynapseCorrelationCalibQuadOnDLS CADCSampleQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
+{
+ return toSynapseQuadOnDLS().toSynapseCorrelationCalibQuadOnDLS();
+}
+
+
+NeuronConfigBlockOnDLS CADCChannelConfigOnDLS::toNeuronConfigBlockOnDLS() const
+{
+ return NeuronConfigBlockOnDLS(
+ (2 * toSynramOnDLS().toEnum()) +
+ (toSynapseOnSynapseRow() / NeuronConfigOnNeuronConfigBlock::size));
+}
+
} // namespace halco::hicann_dls::vx
diff --git a/src/halco/hicann-dls/vx/neuron.cpp b/src/halco/hicann-dls/vx/neuron.cpp
index 468573477e8bce1b926c568a8ecf9670dae5e881..bd88405fbb39aa796cff7102caa4979fb00ed10b 100644
--- a/src/halco/hicann-dls/vx/neuron.cpp
+++ b/src/halco/hicann-dls/vx/neuron.cpp
@@ -4,8 +4,18 @@
#include "halco/hicann-dls/vx/capmem.h"
#include "halco/hicann-dls/vx/hemisphere.h"
#include "halco/hicann-dls/vx/routing_crossbar.h"
+#include "halco/hicann-dls/vx/switch_rows.h"
#include "halco/hicann-dls/vx/synapse.h"
+#ifndef __ppu__
+#include "halco/common/cerealization_geometry.h"
+#include <cereal/archives/json.hpp>
+#include <cereal/archives/portable_binary.hpp>
+#include <cereal/cereal.hpp>
+#include <cereal/types/map.hpp>
+#include <cereal/types/vector.hpp>
+#endif
+
namespace halco::hicann_dls::vx {
#define HEMISPHERE_CLASS NeuronRowOnDLS
@@ -74,4 +84,534 @@ CrossbarInputOnDLS NeuronEventOutputOnDLS::toCrossbarInputOnDLS() const
return CrossbarInputOnDLS(toEnum());
}
+NeuronResetOnDLS NeuronConfigOnDLS::toNeuronResetOnDLS() const
+{
+ auto block = toNeuronConfigBlockOnDLS().toNeuronResetBlockOnDLS();
+ return NeuronResetOnDLS(
+ NeuronResetOnNeuronResetBlock(
+ toNeuronConfigOnNeuronConfigBlock() +
+ ((toNeuronConfigBlockOnDLS() / NeuronResetBlockOnDLS::size)
+ ? NeuronConfigOnNeuronConfigBlock::size
+ : 0)),
+ block);
+}
+
+SpikeCounterReadOnDLS NeuronConfigOnDLS::toSpikeCounterReadOnDLS() const
+{
+ return SpikeCounterReadOnDLS(toNeuronResetOnDLS().toEnum());
+}
+
+SpikeCounterResetOnDLS NeuronConfigOnDLS::toSpikeCounterResetOnDLS() const
+{
+ return SpikeCounterResetOnDLS(toNeuronResetOnDLS().toEnum());
+}
+
+SynapseOnSynapseRow NeuronColumnOnDLS::toSynapseOnSynapseRow() const
+{
+ return SynapseOnSynapseRow(toEnum());
+}
+
+CapMemColumnOnCapMemBlock NeuronColumnOnDLS::toCapMemColumnOnCapMemBlock() const
+{
+ return CapMemColumnOnCapMemBlock(toEnum() % NeuronConfigOnNeuronConfigBlock::size);
+}
+
+NeuronEventOutputOnDLS NeuronColumnOnDLS::toNeuronEventOutputOnDLS() const
+{
+ return NeuronEventOutputOnDLS(common::Enum(toEnum() / (size / NeuronEventOutputOnDLS::size)));
+}
+
+NeuronConfigOnDLS AtomicNeuronOnDLS::toNeuronConfigOnDLS() const
+{
+ return NeuronConfigOnDLS(toEnum());
+}
+
+NeuronResetOnDLS AtomicNeuronOnDLS::toNeuronResetOnDLS() const
+{
+ return toNeuronConfigOnDLS().toNeuronResetOnDLS();
+}
+
+SpikeCounterReadOnDLS AtomicNeuronOnDLS::toSpikeCounterReadOnDLS() const
+{
+ return toNeuronConfigOnDLS().toSpikeCounterReadOnDLS();
+}
+
+SpikeCounterResetOnDLS AtomicNeuronOnDLS::toSpikeCounterResetOnDLS() const
+{
+ return toNeuronConfigOnDLS().toSpikeCounterResetOnDLS();
+}
+
+NeuronBackendConfigOnDLS AtomicNeuronOnDLS::toNeuronBackendConfigOnDLS() const
+{
+ return NeuronBackendConfigOnDLS(toNeuronResetOnDLS().toEnum());
+}
+
+CapMemColumnOnCapMemBlock AtomicNeuronOnDLS::toCapMemColumnOnCapMemBlock() const
+{
+ return toNeuronColumnOnDLS().toCapMemColumnOnCapMemBlock();
+}
+
+CapMemBlockOnDLS AtomicNeuronOnDLS::toCapMemBlockOnDLS() const
+{
+ return toNeuronConfigOnDLS().toNeuronConfigBlockOnDLS().toCapMemBlockOnDLS();
+}
+
+NeuronRowOnDLS NeuronConfigOnDLS::toNeuronRowOnDLS() const
+{
+ return NeuronRowOnDLS(toEnum() / SynapseOnSynapseRow::size);
+}
+
+SynapseOnSynapseRow NeuronConfigOnDLS::toSynapseOnSynapseRow() const
+{
+ return SynapseOnSynapseRow(toEnum() % SynapseOnSynapseRow::size);
+}
+
+AtomicNeuronOnDLS NeuronConfigOnDLS::toAtomicNeuronOnDLS() const
+{
+ return AtomicNeuronOnDLS(toSynapseOnSynapseRow().toNeuronColumnOnDLS(), toNeuronRowOnDLS());
+}
+
+SynapseQuadColumnOnDLS NeuronConfigOnDLS::toSynapseQuadColumnOnDLS() const
+{
+ return toSynapseOnSynapseRow().toSynapseQuadColumnOnDLS();
+}
+
+EntryOnQuad NeuronConfigOnDLS::toEntryOnQuad() const
+{
+ return toSynapseOnSynapseRow().toEntryOnQuad();
+}
+
+NeuronBackendConfigBlockOnDLS NeuronConfigOnDLS::toNeuronBackendConfigBlockOnDLS() const
+{
+ return toAtomicNeuronOnDLS().toNeuronBackendConfigOnDLS().toNeuronBackendConfigBlockOnDLS();
+}
+
+NeuronBackendConfigOnNeuronBackendConfigBlock
+NeuronConfigOnDLS::toNeuronBackendConfigOnNeuronBackendConfigBlock() const
+{
+ return toAtomicNeuronOnDLS()
+ .toNeuronBackendConfigOnDLS()
+ .toNeuronBackendConfigOnNeuronBackendConfigBlock();
+}
+
+NeuronBackendConfigOnDLS NeuronConfigOnDLS::toNeuronBackendConfigOnDLS() const
+{
+ return toAtomicNeuronOnDLS().toNeuronBackendConfigOnDLS();
+}
+
+CommonNeuronBackendConfigOnDLS NeuronConfigOnDLS::toCommonNeuronBackendConfigOnDLS() const
+{
+ return toNeuronBackendConfigBlockOnDLS().toCommonNeuronBackendConfigOnDLS();
+}
+
+NeuronColumnOnDLS NeuronBackendConfigOnDLS::toNeuronColumnOnDLS() const
+{
+ return NeuronColumnOnDLS(
+ (toNeuronBackendConfigOnNeuronBackendConfigBlock() %
+ NeuronConfigOnNeuronConfigBlock::size) +
+ (toNeuronBackendConfigBlockOnDLS() * NeuronConfigOnNeuronConfigBlock::size));
+}
+
+NeuronRowOnDLS NeuronBackendConfigOnDLS::toNeuronRowOnDLS() const
+{
+ return NeuronRowOnDLS(
+ toNeuronBackendConfigOnNeuronBackendConfigBlock() / NeuronConfigOnNeuronConfigBlock::size);
+}
+
+AtomicNeuronOnDLS NeuronBackendConfigOnDLS::toAtomicNeuronOnDLS() const
+{
+ return AtomicNeuronOnDLS(toNeuronColumnOnDLS(), toNeuronRowOnDLS());
+}
+
+NeuronConfigOnDLS NeuronBackendConfigOnDLS::toNeuronConfigOnDLS() const
+{
+ return toAtomicNeuronOnDLS().toNeuronConfigOnDLS();
+}
+
+SpikeCounterReadOnDLS NeuronBackendConfigOnDLS::toSpikeCounterReadOnDLS() const
+{
+ return toNeuronConfigOnDLS().toSpikeCounterReadOnDLS();
+}
+
+SpikeCounterResetOnDLS NeuronBackendConfigOnDLS::toSpikeCounterResetOnDLS() const
+{
+ return toNeuronConfigOnDLS().toSpikeCounterResetOnDLS();
+}
+
+CommonNeuronBackendConfigOnDLS NeuronBackendConfigOnDLS::toCommonNeuronBackendConfigOnDLS() const
+{
+ return toNeuronBackendConfigBlockOnDLS().toCommonNeuronBackendConfigOnDLS();
+}
+
+SynramOnDLS AtomicNeuronOnDLS::toSynramOnDLS() const
+{
+ return toNeuronRowOnDLS().toSynramOnDLS();
+}
+
+SynramOnDLS NeuronConfigOnDLS::toSynramOnDLS() const
+{
+ return toAtomicNeuronOnDLS().toSynramOnDLS();
+}
+
+SynramOnDLS NeuronBackendConfigOnDLS::toSynramOnDLS() const
+{
+ return toAtomicNeuronOnDLS().toSynramOnDLS();
+}
+
+NeuronConfigBlockOnDLS NeuronBackendConfigOnDLS::toNeuronConfigBlockOnDLS() const
+{
+ return toNeuronConfigOnDLS().toNeuronConfigBlockOnDLS();
+}
+
+SynapseQuadColumnOnDLS AtomicNeuronOnDLS::toSynapseQuadColumnOnDLS() const
+{
+ return toNeuronConfigOnDLS().toSynapseQuadColumnOnDLS();
+}
+
+ColumnCorrelationQuadOnDLS AtomicNeuronOnDLS::toColumnCorrelationQuadOnDLS() const
+{
+ return ColumnCorrelationQuadOnDLS(
+ toSynapseQuadColumnOnDLS().toColumnCorrelationQuadOnSynram(), toSynramOnDLS());
+}
+
+ColumnCurrentQuadOnDLS AtomicNeuronOnDLS::toColumnCurrentQuadOnDLS() const
+{
+ return ColumnCurrentQuadOnDLS(
+ toSynapseQuadColumnOnDLS().toColumnCurrentQuadOnSynram(), toSynramOnDLS());
+}
+
+ColumnCorrelationQuadOnDLS NeuronConfigOnDLS::toColumnCorrelationQuadOnDLS() const
+{
+ return toAtomicNeuronOnDLS().toColumnCorrelationQuadOnDLS();
+}
+
+ColumnCurrentQuadOnDLS NeuronConfigOnDLS::toColumnCurrentQuadOnDLS() const
+{
+ return toAtomicNeuronOnDLS().toColumnCurrentQuadOnDLS();
+}
+
+common::typed_array<NeuronResetOnDLS, EntryOnQuad> NeuronResetQuadOnDLS::toNeuronResetOnDLS() const
+{
+ common::typed_array<NeuronResetOnDLS, EntryOnQuad> ret;
+ auto const columns = toSynapseQuadColumnOnDLS().toNeuronColumnOnDLS();
+ for (auto const e : common::iter_all<EntryOnQuad>()) {
+ ret[e] =
+ AtomicNeuronOnDLS(columns[e], toSynramOnDLS().toNeuronRowOnDLS()).toNeuronResetOnDLS();
+ }
+ return ret;
+}
+
+AtomicNeuronOnLogicalNeuron AtomicNeuronOnLogicalNeuron::get_neighbor(
+ Direction const& direction) const
+{
+ switch (direction) {
+ case Direction::left: {
+ AtomicNeuronOnLogicalNeuron neighbor(NeuronColumnOnLogicalNeuron(x().value() - 1), y());
+ return neighbor;
+ }
+ case Direction::right: {
+ AtomicNeuronOnLogicalNeuron neighbor(NeuronColumnOnLogicalNeuron(x().value() + 1), y());
+ return neighbor;
+ }
+ case Direction::opposite_row: {
+ AtomicNeuronOnLogicalNeuron neighbor(
+ x(), NeuronRowOnLogicalNeuron((y().value() + 1) % NeuronRowOnLogicalNeuron::size));
+ return neighbor;
+ }
+ default: {
+#ifndef __ppu__
+ throw std::logic_error(
+ "Unsupported direction for neighbor for AtomicNeuronOnLogicalNeuron was chosen.");
+#else
+ exit(1);
+#endif
+ }
+ }
+}
+
+LogicalNeuronCompartments::LogicalNeuronCompartments(Compartments const& compartments)
+{
+ std::set<AtomicNeuronOnLogicalNeuron> unique;
+ size_t n = 0;
+ for (auto const& [_, compartment] : compartments) {
+ unique.insert(compartment.begin(), compartment.end());
+ n += compartment.size();
+ }
+ if (unique.size() != n) {
+#ifndef __ppu__
+ throw std::runtime_error("Multiple compartments contain the same neuron(s).");
+#else
+ exit(1);
+#endif
+ }
+ m_compartments = compartments;
+}
+
+LogicalNeuronCompartments::Compartments const& LogicalNeuronCompartments::get_compartments() const
+{
+ return m_compartments;
+}
+
+NeuronColumnOnLogicalNeuron LogicalNeuronCompartments::get_left_most_column() const
+{
+ NeuronColumnOnLogicalNeuron lmost(NeuronColumnOnLogicalNeuron::max);
+ for (auto const& [_, compartment] : m_compartments) {
+ auto const lm =
+ std::min_element(
+ compartment.begin(), compartment.end(),
+ [](auto const& a, auto const& b) {
+ return a.toNeuronColumnOnLogicalNeuron() < b.toNeuronColumnOnLogicalNeuron();
+ })
+ ->toNeuronColumnOnLogicalNeuron();
+ lmost = std::min(lm, lmost);
+ }
+ return lmost;
+}
+
+NeuronColumnOnLogicalNeuron LogicalNeuronCompartments::get_right_most_column() const
+{
+ NeuronColumnOnLogicalNeuron rmost(NeuronColumnOnLogicalNeuron::min);
+ for (auto const& [_, compartment] : m_compartments) {
+ auto const rm =
+ std::max_element(
+ compartment.begin(), compartment.end(),
+ [](auto const& a, auto const& b) {
+ return a.toNeuronColumnOnLogicalNeuron() < b.toNeuronColumnOnLogicalNeuron();
+ })
+ ->toNeuronColumnOnLogicalNeuron();
+ rmost = std::max(rm, rmost);
+ }
+ return rmost;
+}
+
+NeuronRowOnLogicalNeuron LogicalNeuronCompartments::get_top_most_row() const
+{
+ NeuronRowOnLogicalNeuron tmost(NeuronRowOnLogicalNeuron::max);
+ for (auto const& [_, compartment] : m_compartments) {
+ auto const tm =
+ std::min_element(
+ compartment.begin(), compartment.end(),
+ [](auto const& a, auto const& b) {
+ return a.toNeuronRowOnLogicalNeuron() < b.toNeuronRowOnLogicalNeuron();
+ })
+ ->toNeuronRowOnLogicalNeuron();
+ tmost = std::min(tm, tmost);
+ }
+ return tmost;
+}
+
+NeuronRowOnLogicalNeuron LogicalNeuronCompartments::get_bottom_most_row() const
+{
+ NeuronRowOnLogicalNeuron bmost(NeuronRowOnLogicalNeuron::min);
+ for (auto const& [_, compartment] : m_compartments) {
+ auto const bm =
+ std::max_element(
+ compartment.begin(), compartment.end(),
+ [](auto const& a, auto const& b) {
+ return a.toNeuronRowOnLogicalNeuron() < b.toNeuronRowOnLogicalNeuron();
+ })
+ ->toNeuronRowOnLogicalNeuron();
+ bmost = std::max(bm, bmost);
+ }
+ return bmost;
+}
+
+LogicalNeuronCompartments LogicalNeuronCompartments::flip_x() const
+{
+ Compartments flipped_compartments;
+ auto const lmost = get_left_most_column();
+ auto const rmost = get_right_most_column();
+ for (auto const& [index, compartment] : m_compartments) {
+ Compartment& flipped_compartment = flipped_compartments[index];
+ for (auto const& neuron : compartment) {
+ flipped_compartment.push_back(AtomicNeuronOnLogicalNeuron(
+ NeuronColumnOnLogicalNeuron(
+ lmost.value() + rmost.value() - neuron.toNeuronColumnOnLogicalNeuron().value()),
+ neuron.toNeuronRowOnLogicalNeuron()));
+ }
+ }
+ return LogicalNeuronCompartments(flipped_compartments);
+}
+
+LogicalNeuronCompartments LogicalNeuronCompartments::flip_y() const
+{
+ Compartments flipped_compartments;
+ auto const tmost = get_top_most_row();
+ auto const bmost = get_bottom_most_row();
+ for (auto const& [index, compartment] : m_compartments) {
+ Compartment& flipped_compartment = flipped_compartments[index];
+ for (auto const& neuron : compartment) {
+ flipped_compartment.push_back(AtomicNeuronOnLogicalNeuron(
+ neuron.toNeuronColumnOnLogicalNeuron(),
+ NeuronRowOnLogicalNeuron(
+ tmost.value() + bmost.value() - neuron.toNeuronRowOnLogicalNeuron().value())));
+ }
+ }
+ return LogicalNeuronCompartments(flipped_compartments);
+}
+
+bool LogicalNeuronCompartments::operator==(LogicalNeuronCompartments const& other) const
+{
+ return m_compartments == other.m_compartments;
+}
+
+bool LogicalNeuronCompartments::operator!=(LogicalNeuronCompartments const& other) const
+{
+ return !(*this == other);
+}
+
+bool LogicalNeuronCompartments::operator<(LogicalNeuronCompartments const& other) const
+{
+ return m_compartments < other.m_compartments;
+}
+
+bool LogicalNeuronCompartments::operator>(LogicalNeuronCompartments const& other) const
+{
+ return m_compartments > other.m_compartments;
+}
+
+bool LogicalNeuronCompartments::operator<=(LogicalNeuronCompartments const& other) const
+{
+ return m_compartments <= other.m_compartments;
+}
+
+bool LogicalNeuronCompartments::operator>=(LogicalNeuronCompartments const& other) const
+{
+ return m_compartments >= other.m_compartments;
+}
+
+#ifndef __ppu__
+std::ostream& operator<<(std::ostream& os, LogicalNeuronCompartments const& config)
+{
+ os << "LogicalNeuronCompartments(\n";
+ for (auto const& [index, compartment] : config.m_compartments) {
+ os << index << "\n";
+ for (auto const& neuron : compartment) {
+ os << "\t" << neuron << "\n";
+ }
+ }
+ os << ")";
+ return os;
+}
+
+template <typename Archive>
+void LogicalNeuronCompartments::serialize(Archive& ar, uint32_t const)
+{
+ ar(m_compartments);
+}
+#endif
+
+LogicalNeuronOnDLS::LogicalNeuronOnDLS(
+ LogicalNeuronCompartments const& compartments, AtomicNeuronOnDLS const& anchor)
+{
+ auto const lmost = compartments.get_left_most_column();
+ auto const rmost = compartments.get_right_most_column();
+ auto const bmost = compartments.get_bottom_most_row();
+ auto const tmost = compartments.get_top_most_row();
+ auto const height = bmost.value() - tmost.value();
+ auto const width = rmost.value() - lmost.value();
+
+ if ((anchor.toNeuronRowOnDLS().value() + height) > NeuronRowOnDLS::max) {
+#ifndef __ppu__
+ throw std::runtime_error(
+ "LogicalNeuron anchor results in placement of compartments outside of neuron grid.");
+#else
+ exit(1);
+#endif
+ }
+ if ((((anchor.toNeuronColumnOnDLS().value()) < NeuronColumnOnLogicalNeuron::max) &&
+ ((anchor.toNeuronColumnOnDLS().value() + width) > NeuronColumnOnLogicalNeuron::max)) ||
+ (((anchor.toNeuronColumnOnDLS().value()) > NeuronColumnOnLogicalNeuron::max) &&
+ ((anchor.toNeuronColumnOnDLS().value() + width) > NeuronColumnOnDLS::max))) {
+#ifndef __ppu__
+ throw std::runtime_error(
+ "LogicalNeuron anchor results in placement of compartments outside of neuron grid.");
+#else
+ exit(1);
+#endif
+ }
+ for (auto const& [index, compartment] : compartments.get_compartments()) {
+ auto& placed_compartment = m_compartments[index];
+ for (auto const& neuron : compartment) {
+ placed_compartment.push_back(AtomicNeuronOnDLS(
+ NeuronColumnOnDLS(
+ anchor.toNeuronColumnOnDLS().value() +
+ neuron.toNeuronColumnOnLogicalNeuron().value() - lmost.value()),
+ NeuronRowOnDLS(
+ anchor.toNeuronRowOnDLS().value() +
+ neuron.toNeuronRowOnLogicalNeuron().value() - tmost.value())));
+ }
+ }
+}
+
+LogicalNeuronOnDLS::PlacedCompartments LogicalNeuronOnDLS::get_placed_compartments() const
+{
+ return m_compartments;
+}
+
+bool LogicalNeuronOnDLS::operator==(LogicalNeuronOnDLS const& other) const
+{
+ return (m_compartments == other.m_compartments);
+}
+
+bool LogicalNeuronOnDLS::operator!=(LogicalNeuronOnDLS const& other) const
+{
+ return !(*this == other);
+}
+
+bool LogicalNeuronOnDLS::operator<(LogicalNeuronOnDLS const& other) const
+{
+ return m_compartments < other.m_compartments;
+}
+
+bool LogicalNeuronOnDLS::operator>(LogicalNeuronOnDLS const& other) const
+{
+ return m_compartments > other.m_compartments;
+}
+
+bool LogicalNeuronOnDLS::operator<=(LogicalNeuronOnDLS const& other) const
+{
+ return m_compartments <= other.m_compartments;
+}
+
+bool LogicalNeuronOnDLS::operator>=(LogicalNeuronOnDLS const& other) const
+{
+ return m_compartments >= other.m_compartments;
+}
+
+#ifndef __ppu__
+std::ostream& operator<<(std::ostream& os, LogicalNeuronOnDLS const& config)
+{
+ os << "LogicalNeuronOnDLS(\n";
+ for (auto const& [index, compartment] : config.m_compartments) {
+ os << index << "\n";
+ for (auto const& neuron : compartment) {
+ os << "\t" << neuron << "\n";
+ }
+ }
+ os << ")";
+ return os;
+}
+
+template <typename Archive>
+void LogicalNeuronOnDLS::serialize(Archive& ar, uint32_t const)
+{
+ ar(m_compartments);
+}
+#endif
+
+#ifndef __ppu__
+#define EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(CLASS_NAME) \
+ template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
+ cereal::JSONOutputArchive&, std::uint32_t const); \
+ template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
+ cereal::JSONInputArchive&, std::uint32_t const); \
+ template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
+ cereal::PortableBinaryOutputArchive&, std::uint32_t const); \
+ template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
+ cereal::PortableBinaryInputArchive&, std::uint32_t const);
+
+EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(LogicalNeuronCompartments)
+EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(LogicalNeuronOnDLS)
+#endif
} // namespace halco::hicann_dls::vx
diff --git a/src/halco/hicann-dls/vx/synapse.cpp b/src/halco/hicann-dls/vx/synapse.cpp
index 9ce7691bafe9d61f0c1f59bd7b1a708bb29dc5d9..5a5bc83c91b141cab85e444a636640c77f3d4b38 100644
--- a/src/halco/hicann-dls/vx/synapse.cpp
+++ b/src/halco/hicann-dls/vx/synapse.cpp
@@ -5,6 +5,7 @@
#include "halco/hicann-dls/vx/neuron.h"
#include "halco/hicann-dls/vx/padi.h"
#include "halco/hicann-dls/vx/ppu.h"
+#include "halco/hicann-dls/vx/switch_rows.h"
#include "halco/hicann-dls/vx/synapse_driver.h"
@@ -124,4 +125,138 @@ SynapseCorrelationCalibMatrixOnDLS const SynapseCorrelationCalibMatrixOnDLS::bot
SynapseBlockOnDLS const SynapseBlockOnDLS::top{enum_vertical_top};
SynapseBlockOnDLS const SynapseBlockOnDLS::bottom{enum_vertical_bottom};
+ColumnCorrelationQuadOnSynram SynapseQuadColumnOnDLS::toColumnCorrelationQuadOnSynram() const
+{
+ return ColumnCorrelationQuadOnSynram(toEnum());
+}
+
+ColumnCurrentQuadOnSynram SynapseQuadColumnOnDLS::toColumnCurrentQuadOnSynram() const
+{
+ return ColumnCurrentQuadOnSynram(toEnum());
+}
+
+SynapseWeightQuadOnDLS SynapseQuadOnDLS::toSynapseWeightQuadOnDLS() const
+{
+ return SynapseWeightQuadOnDLS(toEnum());
+}
+
+SynapseLabelQuadOnDLS SynapseQuadOnDLS::toSynapseLabelQuadOnDLS() const
+{
+ return SynapseLabelQuadOnDLS(toEnum());
+}
+
+SynapseCorrelationCalibQuadOnDLS SynapseQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
+{
+ return SynapseCorrelationCalibQuadOnDLS(toEnum());
+}
+
+NeuronConfigBlockOnDLS SynapseWeightQuadOnDLS::toNeuronConfigBlockOnDLS() const
+{
+ return toSynapseQuadOnDLS().toNeuronConfigBlockOnDLS();
+}
+
+SynapseQuadOnDLS SynapseWeightQuadOnDLS::toSynapseQuadOnDLS() const
+{
+ return SynapseQuadOnDLS(toEnum());
+}
+
+SynapseLabelQuadOnDLS SynapseWeightQuadOnDLS::toSynapseLabelQuadOnDLS() const
+{
+ return SynapseLabelQuadOnDLS(toEnum());
+}
+
+SynapseCorrelationCalibQuadOnDLS SynapseWeightQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
+{
+ return SynapseCorrelationCalibQuadOnDLS(toEnum());
+}
+
+NeuronConfigBlockOnDLS SynapseLabelQuadOnDLS::toNeuronConfigBlockOnDLS() const
+{
+ return toSynapseQuadOnDLS().toNeuronConfigBlockOnDLS();
+}
+
+SynapseWeightQuadOnDLS SynapseLabelQuadOnDLS::toSynapseWeightQuadOnDLS() const
+{
+ return SynapseWeightQuadOnDLS(toEnum());
+}
+
+SynapseQuadOnDLS SynapseLabelQuadOnDLS::toSynapseQuadOnDLS() const
+{
+ return SynapseQuadOnDLS(toEnum());
+}
+
+SynapseCorrelationCalibQuadOnDLS SynapseLabelQuadOnDLS::toSynapseCorrelationCalibQuadOnDLS() const
+{
+ return SynapseCorrelationCalibQuadOnDLS(toEnum());
+}
+
+NeuronConfigBlockOnDLS SynapseCorrelationCalibQuadOnDLS::toNeuronConfigBlockOnDLS() const
+{
+ return toSynapseQuadOnDLS().toNeuronConfigBlockOnDLS();
+}
+
+SynapseWeightQuadOnDLS SynapseCorrelationCalibQuadOnDLS::toSynapseWeightQuadOnDLS() const
+{
+ return SynapseWeightQuadOnDLS(toEnum());
+}
+
+SynapseLabelQuadOnDLS SynapseCorrelationCalibQuadOnDLS::toSynapseLabelQuadOnDLS() const
+{
+ return SynapseLabelQuadOnDLS(toEnum());
+}
+
+SynapseQuadOnDLS SynapseCorrelationCalibQuadOnDLS::toSynapseQuadOnDLS() const
+{
+ return SynapseQuadOnDLS(toEnum());
+}
+
+NeuronColumnOnDLS SynapseOnSynapseRow::toNeuronColumnOnDLS() const
+{
+ return NeuronColumnOnDLS(toEnum());
+}
+
+CADCChannelColumnOnSynram SynapseOnSynapseRow::toCADCChannelColumnOnSynram() const
+{
+ return CADCChannelColumnOnSynram(toEnum());
+}
+
+
+common::typed_array<NeuronColumnOnDLS, EntryOnQuad> SynapseQuadColumnOnDLS::toNeuronColumnOnDLS()
+ const
+{
+ common::typed_array<NeuronColumnOnDLS, EntryOnQuad> ret;
+ for (auto const e : common::iter_all<EntryOnQuad>()) {
+ ret[e] = NeuronColumnOnDLS(
+ ((toEnum() % (size / 2)) * EntryOnQuad::size + e.toEnum()) * 2 +
+ (toEnum() / (size / 2)));
+ }
+ return ret;
+}
+
+NeuronConfigBlockOnDLS SynapseQuadOnDLS::toNeuronConfigBlockOnDLS() const
+{
+ bool east = toSynapseQuadColumnOnDLS() % (SynapseQuadColumnOnDLS::size / 2) >=
+ (SynapseQuadColumnOnDLS::size / 4);
+ return NeuronConfigBlockOnDLS(toSynramOnDLS().toEnum() * 2 + east);
+}
+
+SynapseOnSynapseRow::SynapseOnSynapseRow(
+ EntryOnQuad const& syn_on_quad, SynapseQuadColumnOnDLS const& quad) :
+ rant_t(
+ (3 - syn_on_quad.toEnum()) * 2 +
+ (quad.toEnum() % (SynapseQuadColumnOnDLS::size / 2)) * EntryOnQuad::size * 2 +
+ quad.toEnum() / (SynapseQuadColumnOnDLS::size / 2))
+{}
+
+EntryOnQuad SynapseOnSynapseRow::toEntryOnQuad() const
+{
+ return EntryOnQuad(3 - ((toEnum() / 2) % EntryOnQuad::size));
+}
+
+SynapseQuadColumnOnDLS SynapseOnSynapseRow::toSynapseQuadColumnOnDLS() const
+{
+ return SynapseQuadColumnOnDLS(
+ ((toEnum() % 2) * SynapseQuadColumnOnDLS::size / 2) + (toEnum() / (2 * EntryOnQuad::size)));
+}
+
} // namespace halco::hicann_dls::vx
diff --git a/src/halco/hicann-dls/vx/v2/cadc.cpp b/src/halco/hicann-dls/vx/v2/cadc.cpp
deleted file mode 100644
index 94917a38307b072e06d0d0cd9751f31509415467..0000000000000000000000000000000000000000
--- a/src/halco/hicann-dls/vx/v2/cadc.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "halco/hicann-dls/vx/v2/cadc.h"
-
-#include "halco/hicann-dls/vx/v2/neuron.h"
-#include "halco/hicann-dls/vx/v2/synapse.h"
-#include "halco/hicann-dls/vx/v2/synram.h"
-
-namespace halco::hicann_dls::vx::v2 {
-
-#include "halco/hicann-dls/vx/cadc_ns_includes_impl.h"
-
-} // namespace halco::hicann_dls::vx::v2
diff --git a/src/halco/hicann-dls/vx/v2/neuron.cpp b/src/halco/hicann-dls/vx/v2/neuron.cpp
deleted file mode 100644
index f31afc884726f1f2a98adb689e2e863720a67198..0000000000000000000000000000000000000000
--- a/src/halco/hicann-dls/vx/v2/neuron.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "halco/hicann-dls/vx/v2/neuron.h"
-
-#ifndef __ppu__
-#include "halco/common/cerealization_geometry.h"
-#include <cereal/archives/json.hpp>
-#include <cereal/archives/portable_binary.hpp>
-#include <cereal/cereal.hpp>
-#include <cereal/types/map.hpp>
-#include <cereal/types/vector.hpp>
-#endif
-
-namespace halco::hicann_dls::vx::v2 {
-
-#include "halco/hicann-dls/vx/neuron_ns_includes_impl.h"
-
-#ifndef __ppu__
-#define EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(CLASS_NAME) \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::JSONOutputArchive&, std::uint32_t const); \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::JSONInputArchive&, std::uint32_t const); \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::PortableBinaryOutputArchive&, std::uint32_t const); \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::PortableBinaryInputArchive&, std::uint32_t const);
-
-EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(LogicalNeuronCompartments)
-EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(LogicalNeuronOnDLS)
-#endif
-
-} // namespace halco::hicann_dls::vx::v2
diff --git a/src/halco/hicann-dls/vx/v2/synapse.cpp b/src/halco/hicann-dls/vx/v2/synapse.cpp
deleted file mode 100644
index 991cfad66f55f9f360379da907a3f5d4bccab9da..0000000000000000000000000000000000000000
--- a/src/halco/hicann-dls/vx/v2/synapse.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "halco/hicann-dls/vx/v2/synapse.h"
-
-#include "halco/common/iter_all.h"
-#include "halco/hicann-dls/vx/v2/cadc.h"
-#include "halco/hicann-dls/vx/v2/chip.h"
-#include "halco/hicann-dls/vx/v2/correlation.h"
-#include "halco/hicann-dls/vx/v2/neuron.h"
-#include "halco/hicann-dls/vx/v2/padi.h"
-#include "halco/hicann-dls/vx/v2/ppu.h"
-#include "halco/hicann-dls/vx/v2/switch_rows.h"
-#include "halco/hicann-dls/vx/v2/synapse_driver.h"
-
-
-namespace halco::hicann_dls::vx::v2 {
-
-#include "halco/hicann-dls/vx/synapse_ns_includes_impl.h"
-
-common::typed_array<NeuronColumnOnDLS, EntryOnQuad> SynapseQuadColumnOnDLS::toNeuronColumnOnDLS()
- const
-{
- common::typed_array<NeuronColumnOnDLS, EntryOnQuad> ret;
- for (auto const e : common::iter_all<EntryOnQuad>()) {
- ret[e] = NeuronColumnOnDLS(
- ((toEnum() % (size / 2)) * EntryOnQuad::size + e.toEnum()) * 2 +
- (toEnum() / (size / 2)));
- }
- return ret;
-}
-
-NeuronConfigBlockOnDLS SynapseQuadOnDLS::toNeuronConfigBlockOnDLS() const
-{
- bool east = toSynapseQuadColumnOnDLS() % (SynapseQuadColumnOnDLS::size / 2) >=
- (SynapseQuadColumnOnDLS::size / 4);
- return NeuronConfigBlockOnDLS(toSynramOnDLS().toEnum() * 2 + east);
-}
-
-SynapseOnSynapseRow::SynapseOnSynapseRow(
- EntryOnQuad const& syn_on_quad, SynapseQuadColumnOnDLS const& quad) :
- rant_t(
- (3 - syn_on_quad.toEnum()) * 2 +
- (quad.toEnum() % (SynapseQuadColumnOnDLS::size / 2)) * EntryOnQuad::size * 2 +
- quad.toEnum() / (SynapseQuadColumnOnDLS::size / 2))
-{}
-
-EntryOnQuad SynapseOnSynapseRow::toEntryOnQuad() const
-{
- return EntryOnQuad(3 - ((toEnum() / 2) % EntryOnQuad::size));
-}
-
-SynapseQuadColumnOnDLS SynapseOnSynapseRow::toSynapseQuadColumnOnDLS() const
-{
- return SynapseQuadColumnOnDLS(
- ((toEnum() % 2) * SynapseQuadColumnOnDLS::size / 2) + (toEnum() / (2 * EntryOnQuad::size)));
-}
-
-} // namespace halco::hicann_dls::vx
diff --git a/src/halco/hicann-dls/vx/v3/cadc.cpp b/src/halco/hicann-dls/vx/v3/cadc.cpp
deleted file mode 100644
index c7897e235f62c5d6efc6b531fcf2afa966f9d3c6..0000000000000000000000000000000000000000
--- a/src/halco/hicann-dls/vx/v3/cadc.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "halco/hicann-dls/vx/v3/cadc.h"
-
-#include "halco/hicann-dls/vx/v3/neuron.h"
-#include "halco/hicann-dls/vx/v3/synapse.h"
-#include "halco/hicann-dls/vx/v3/synram.h"
-
-namespace halco::hicann_dls::vx::v3 {
-
-#include "halco/hicann-dls/vx/cadc_ns_includes_impl.h"
-
-} // namespace halco::hicann_dls::vx::v3
diff --git a/src/halco/hicann-dls/vx/v3/neuron.cpp b/src/halco/hicann-dls/vx/v3/neuron.cpp
deleted file mode 100644
index a40066735bfeb75c50b7dd51ac5000db192ebc92..0000000000000000000000000000000000000000
--- a/src/halco/hicann-dls/vx/v3/neuron.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "halco/hicann-dls/vx/v3/neuron.h"
-
-#ifndef __ppu__
-#include "halco/common/cerealization_geometry.h"
-#include <cereal/archives/json.hpp>
-#include <cereal/archives/portable_binary.hpp>
-#include <cereal/cereal.hpp>
-#include <cereal/types/map.hpp>
-#include <cereal/types/vector.hpp>
-#endif
-
-namespace halco::hicann_dls::vx::v3 {
-
-#include "halco/hicann-dls/vx/neuron_ns_includes_impl.h"
-
-#ifndef __ppu__
-#define EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(CLASS_NAME) \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::JSONOutputArchive&, std::uint32_t const); \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::JSONInputArchive&, std::uint32_t const); \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::PortableBinaryOutputArchive&, std::uint32_t const); \
- template void CLASS_NAME ::CEREAL_SERIALIZE_FUNCTION_NAME( \
- cereal::PortableBinaryInputArchive&, std::uint32_t const);
-
-EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(LogicalNeuronCompartments)
-EXPLICIT_INSTANTIATE_CEREAL_SERIALIZE(LogicalNeuronOnDLS)
-#endif
-
-} // namespace halco::hicann_dls::vx::v3
diff --git a/src/halco/hicann-dls/vx/v3/synapse.cpp b/src/halco/hicann-dls/vx/v3/synapse.cpp
deleted file mode 100644
index 98c1f100db95eee625c4dff5e9bca7c847e99e44..0000000000000000000000000000000000000000
--- a/src/halco/hicann-dls/vx/v3/synapse.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "halco/hicann-dls/vx/v3/synapse.h"
-
-#include "halco/common/iter_all.h"
-#include "halco/hicann-dls/vx/v3/cadc.h"
-#include "halco/hicann-dls/vx/v3/chip.h"
-#include "halco/hicann-dls/vx/v3/correlation.h"
-#include "halco/hicann-dls/vx/v3/neuron.h"
-#include "halco/hicann-dls/vx/v3/padi.h"
-#include "halco/hicann-dls/vx/v3/ppu.h"
-#include "halco/hicann-dls/vx/v3/switch_rows.h"
-#include "halco/hicann-dls/vx/v3/synapse_driver.h"
-
-
-namespace halco::hicann_dls::vx::v3 {
-
-#include "halco/hicann-dls/vx/synapse_ns_includes_impl.h"
-
-common::typed_array<NeuronColumnOnDLS, EntryOnQuad> SynapseQuadColumnOnDLS::toNeuronColumnOnDLS()
- const
-{
- common::typed_array<NeuronColumnOnDLS, EntryOnQuad> ret;
- for (auto const e : common::iter_all<EntryOnQuad>()) {
- ret[e] = NeuronColumnOnDLS(
- ((toEnum() % (size / 2)) * EntryOnQuad::size + e.toEnum()) * 2 +
- (toEnum() / (size / 2)));
- }
- return ret;
-}
-
-NeuronConfigBlockOnDLS SynapseQuadOnDLS::toNeuronConfigBlockOnDLS() const
-{
- bool east = toSynapseQuadColumnOnDLS() % (SynapseQuadColumnOnDLS::size / 2) >=
- (SynapseQuadColumnOnDLS::size / 4);
- return NeuronConfigBlockOnDLS(toSynramOnDLS().toEnum() * 2 + east);
-}
-
-SynapseOnSynapseRow::SynapseOnSynapseRow(
- EntryOnQuad const& syn_on_quad, SynapseQuadColumnOnDLS const& quad) :
- rant_t(
- (3 - syn_on_quad.toEnum()) * 2 +
- (quad.toEnum() % (SynapseQuadColumnOnDLS::size / 2)) * EntryOnQuad::size * 2 +
- quad.toEnum() / (SynapseQuadColumnOnDLS::size / 2))
-{}
-
-EntryOnQuad SynapseOnSynapseRow::toEntryOnQuad() const
-{
- return EntryOnQuad(3 - ((toEnum() / 2) % EntryOnQuad::size));
-}
-
-SynapseQuadColumnOnDLS SynapseOnSynapseRow::toSynapseQuadColumnOnDLS() const
-{
- return SynapseQuadColumnOnDLS(
- ((toEnum() % 2) * SynapseQuadColumnOnDLS::size / 2) + (toEnum() / (2 * EntryOnQuad::size)));
-}
-
-} // namespace halco::hicann_dls::vx