5 #include "halco/common/geometry.h"
6 #include "halco/common/typed_array.h"
7 #include "halco/hicann-dls/vx/fpga.h"
8 #include "halco/hicann-dls/vx/quad.h"
14 #include "hate/visibility.h"
22 struct ExternalPPUMemory;
38 struct GENPYBIND(inline_base("*
")) Value
39 : public halco::common::detail::RantWrapper<Value, uint64_t, 0x1ff'ffff'ffff'ffffull, 0>
41 constexpr explicit Value(uintmax_t const val = 0) GENPYBIND(implicit_conversion) :
50 explicit FPGADeviceDNA(Value value = Value()) SYMBOL_VISIBLE;
56 GENPYBIND(getter_for(value))
57 Value get_value() const SYMBOL_VISIBLE;
63 GENPYBIND(setter_for(value))
64 void set_value(Value value) SYMBOL_VISIBLE;
66 bool operator==(FPGADeviceDNA const& other) const SYMBOL_VISIBLE;
67 bool operator!=(FPGADeviceDNA const& other) const SYMBOL_VISIBLE;
69 GENPYBIND(stringstream)
70 friend std::ostream& operator<<(std::ostream& os, FPGADeviceDNA const& config) SYMBOL_VISIBLE;
72 static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 2;
73 static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 0;
74 static std::array<halco::hicann_dls::vx::OmnibusAddress, read_config_size_in_words>
75 read_addresses(coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
76 static std::array<halco::hicann_dls::vx::OmnibusAddress, write_config_size_in_words>
77 write_addresses(coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
78 std::array<fisch::vx::word_access_type::Omnibus, write_config_size_in_words> encode() const
79 SYMBOL_VISIBLE GENPYBIND(hidden);
80 void decode(std::array<fisch::vx::word_access_type::Omnibus, read_config_size_in_words> const&
81 data) SYMBOL_VISIBLE GENPYBIND(hidden);
84 friend class cereal::access;
85 template <class Archive>
86 void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
91 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(FPGADeviceDNA)
96 class GENPYBIND(visible) EventRecordingConfig
99 typedef halco::hicann_dls::vx::EventRecordingConfigOnFPGA coordinate_type;
100 typedef std::true_type is_leaf_node;
102 explicit EventRecordingConfig() SYMBOL_VISIBLE;
108 GENPYBIND(getter_for(enable_event_recording))
109 bool get_enable_event_recording() const SYMBOL_VISIBLE;
115 GENPYBIND(setter_for(enable_event_recording))
116 void set_enable_event_recording(bool value) SYMBOL_VISIBLE;
118 bool operator==(EventRecordingConfig const& other) const SYMBOL_VISIBLE;
119 bool operator!=(EventRecordingConfig const& other) const SYMBOL_VISIBLE;
121 GENPYBIND(stringstream)
122 friend std::ostream& operator<<(std::ostream& os, EventRecordingConfig const& config) SYMBOL_VISIBLE;
124 static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 1;
125 static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 1;
126 std::array<halco::hicann_dls::vx::OmnibusAddress, read_config_size_in_words> read_addresses(
127 coordinate_type const& word) const SYMBOL_VISIBLE GENPYBIND(hidden);
128 std::array<halco::hicann_dls::vx::OmnibusAddress, write_config_size_in_words> write_addresses(
129 coordinate_type const& word) const SYMBOL_VISIBLE GENPYBIND(hidden);
130 std::array<fisch::vx::word_access_type::Omnibus, write_config_size_in_words> encode() const
131 SYMBOL_VISIBLE GENPYBIND(hidden);
132 void decode(std::array<fisch::vx::word_access_type::Omnibus, read_config_size_in_words> const&
133 data) SYMBOL_VISIBLE GENPYBIND(hidden);
136 friend class cereal::access;
137 template <class Archive>
138 void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
140 bool m_enable_event_recording;
143 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(EventRecordingConfig)
148 class GENPYBIND(visible) InstructionTimeoutConfig
151 typedef halco::hicann_dls::vx::InstructionTimeoutConfigOnFPGA coordinate_type;
152 typedef std::true_type is_leaf_node;
154 typedef Timer::Value Value GENPYBIND(visible);
156 explicit InstructionTimeoutConfig() SYMBOL_VISIBLE;
162 GENPYBIND(getter_for(value))
163 Value get_value() const SYMBOL_VISIBLE;
169 GENPYBIND(setter_for(value))
170 void set_value(Value value) SYMBOL_VISIBLE;
172 bool operator==(InstructionTimeoutConfig const& other) const SYMBOL_VISIBLE;
173 bool operator!=(InstructionTimeoutConfig const& other) const SYMBOL_VISIBLE;
175 GENPYBIND(stringstream)
176 friend std::ostream& operator<<(std::ostream& os, InstructionTimeoutConfig const& config)
179 static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 1;
180 static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 1;
181 std::array<halco::hicann_dls::vx::OmnibusAddress, read_config_size_in_words> read_addresses(
182 coordinate_type const& word) const SYMBOL_VISIBLE GENPYBIND(hidden);
183 std::array<halco::hicann_dls::vx::OmnibusAddress, write_config_size_in_words> write_addresses(
184 coordinate_type const& word) const SYMBOL_VISIBLE GENPYBIND(hidden);
185 std::array<fisch::vx::word_access_type::Omnibus, write_config_size_in_words> encode() const
186 SYMBOL_VISIBLE GENPYBIND(hidden);
187 void decode(std::array<fisch::vx::word_access_type::Omnibus, read_config_size_in_words> const&
188 data) SYMBOL_VISIBLE GENPYBIND(hidden);
191 friend class cereal::access;
192 template <class Archive>
193 void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
198 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(InstructionTimeoutConfig)
200 class GENPYBIND(visible) ExternalPPUMemoryByte
203 typedef halco::hicann_dls::vx::ExternalPPUMemoryByteOnFPGA coordinate_type;
204 typedef std::true_type is_leaf_node;
206 struct GENPYBIND(inline_base("*
")) Value
207 : public halco::common::detail::BaseType<Value, uint8_t>
209 constexpr explicit Value(uintmax_t const val = 0) : base_t(val) {}
212 typedef uint8_t raw_type;
213 // verify that the underlying word size matches the value type size
215 static_cast<raw_type>(-1) == Value::max, "raw_type size does not match
Value type.
");
217 explicit ExternalPPUMemoryByte(Value value = Value()) : m_value(value) {}
219 GENPYBIND(getter_for(value))
220 Value get_value() const SYMBOL_VISIBLE;
221 GENPYBIND(setter_for(value))
222 void set_value(Value const& value) SYMBOL_VISIBLE;
224 bool operator==(ExternalPPUMemoryByte const& other) const SYMBOL_VISIBLE;
225 bool operator!=(ExternalPPUMemoryByte const& other) const SYMBOL_VISIBLE;
227 GENPYBIND(stringstream)
228 friend std::ostream& operator<<(std::ostream& os, ExternalPPUMemoryByte const& config)
231 static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1;
232 static std::array<halco::hicann_dls::vx::OmnibusAddress, config_size_in_words> addresses(
233 coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
234 std::array<fisch::vx::word_access_type::Omnibus, config_size_in_words> encode(
235 coordinate_type const& coord) const SYMBOL_VISIBLE GENPYBIND(hidden);
237 coordinate_type const& coord,
238 std::array<fisch::vx::word_access_type::Omnibus, config_size_in_words> const& data)
239 SYMBOL_VISIBLE GENPYBIND(hidden);
242 friend class cereal::access;
243 template <typename Archive>
244 void serialize(Archive& ar, std::uint32_t);
246 friend haldls::vx::detail::VisitPreorderImpl<lola::vx::ExternalPPUMemoryBlock>;
247 friend haldls::vx::detail::VisitPreorderImpl<lola::vx::ExternalPPUMemory>;
251 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(ExternalPPUMemoryByte)
253 class GENPYBIND(visible) ExternalPPUMemoryQuad
256 typedef halco::hicann_dls::vx::ExternalPPUMemoryQuadOnFPGA coordinate_type;
257 typedef std::true_type is_leaf_node;
259 typedef ExternalPPUMemoryByte::Value Value GENPYBIND(visible);
261 typedef halco::common::typed_array<Value, halco::hicann_dls::vx::EntryOnQuad> Quad
262 GENPYBIND(opaque(false));
263 typedef halco::common::typed_array<bool, halco::hicann_dls::vx::EntryOnQuad> Enables
264 GENPYBIND(opaque(false));
266 ExternalPPUMemoryQuad() SYMBOL_VISIBLE;
268 GENPYBIND(getter_for(quad))
269 Quad const& get_quad() const SYMBOL_VISIBLE;
270 GENPYBIND(setter_for(quad))
271 void set_quad(Quad const& quad) SYMBOL_VISIBLE;
273 GENPYBIND(getter_for(enables))
274 Enables const& get_enables() const SYMBOL_VISIBLE;
275 GENPYBIND(setter_for(enables))
276 void set_enables(Enables const& enables) SYMBOL_VISIBLE;
278 bool operator==(ExternalPPUMemoryQuad const& other) const SYMBOL_VISIBLE;
279 bool operator!=(ExternalPPUMemoryQuad const& other) const SYMBOL_VISIBLE;
281 GENPYBIND(stringstream)
282 friend std::ostream& operator<<(std::ostream& os, ExternalPPUMemoryQuad const& config)
285 static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1;
286 static std::array<halco::hicann_dls::vx::OmnibusAddress, config_size_in_words> addresses(
287 coordinate_type const& word) SYMBOL_VISIBLE GENPYBIND(hidden);
288 std::array<fisch::vx::word_access_type::Omnibus, config_size_in_words> encode() const
289 SYMBOL_VISIBLE GENPYBIND(hidden);
290 void decode(std::array<fisch::vx::word_access_type::Omnibus, config_size_in_words> const& data)
291 SYMBOL_VISIBLE GENPYBIND(hidden);
294 friend class cereal::access;
295 template <typename Archive>
296 void serialize(Archive& ar, std::uint32_t);
298 friend haldls::vx::detail::VisitPreorderImpl<lola::vx::ExternalPPUMemoryBlock>;
299 friend haldls::vx::detail::VisitPreorderImpl<lola::vx::ExternalPPUMemory>;
304 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(ExternalPPUMemoryQuad)
309 struct BackendContainerTrait<FPGADeviceDNA>
310 : public BackendContainerBase<FPGADeviceDNA, fisch::vx::word_access_type::Omnibus>
314 struct BackendContainerTrait<EventRecordingConfig>
315 : public BackendContainerBase<EventRecordingConfig, fisch::vx::word_access_type::Omnibus>
319 struct BackendContainerTrait<InstructionTimeoutConfig>
320 : public BackendContainerBase<InstructionTimeoutConfig, fisch::vx::word_access_type::Omnibus>
324 struct BackendContainerTrait<ExternalPPUMemoryByte>
325 : public BackendContainerBase<ExternalPPUMemoryByte, fisch::vx::word_access_type::Omnibus>
329 struct BackendContainerTrait<ExternalPPUMemoryQuad>
330 : public BackendContainerBase<ExternalPPUMemoryQuad, fisch::vx::word_access_type::Omnibus>
333 } // namespace detail
336 } // namespace haldls
340 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::FPGADeviceDNA::Value)
341 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::ExternalPPUMemoryByte::Value)
Container for reading out the unique identifier of the FPGA.
std::true_type is_leaf_node
halco::hicann_dls::vx::FPGADeviceDNAOnFPGA coordinate_type
#define GENPYBIND_TAG_HALDLS_VX
lola::vx::ExternalPPUMemoryBlock ExternalPPUMemoryBlock