aboutsummaryrefslogtreecommitdiff
path: root/src/ethosu65_interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ethosu65_interface.h')
-rw-r--r--src/ethosu65_interface.h23797
1 files changed, 23797 insertions, 0 deletions
diff --git a/src/ethosu65_interface.h b/src/ethosu65_interface.h
new file mode 100644
index 0000000..33737b2
--- /dev/null
+++ b/src/ethosu65_interface.h
@@ -0,0 +1,23797 @@
+/*
+ * Copyright (c) 2020-2021 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ETHOSU65_INTERFACE_H
+#define ETHOSU65_INTERFACE_H
+
+#ifdef __KERNEL__
+#include <linux/types.h>
+#else
+#include <stdint.h>
+#endif
+
+#if !defined(__cplusplus) || __cplusplus < 201402L
+#define CONSTEXPR
+#else
+#define CONSTEXPR constexpr
+#endif
+
+#ifndef __cplusplus
+#define STRUCT struct
+#else
+#define STRUCT
+#endif
+
+#if defined(__cplusplus) && defined(NPU_DISASSEMBLE)
+#include <iomanip>
+#include <sstream>
+#include <vector>
+#endif
+
+#if defined(__cplusplus) && !defined(NPU_NAMESPACE)
+#define NPU_NAMESPACE npu
+#endif
+
+#ifdef __cplusplus
+#include <cstring>
+#include <limits>
+#endif
+
+#ifdef __cplusplus
+namespace NPU_NAMESPACE
+{
+#endif
+#define NNX_ARCH_VERSION_MAJOR 1
+#define NNX_ARCH_VERSION_MINOR 0
+#define NNX_ARCH_VERSION_PATCH 6
+
+// Register offsets
+//
+// Register subpage BASE
+//
+#define NPU_REG_ID 0x0000
+#define NPU_REG_STATUS 0x0004
+#define NPU_REG_CMD 0x0008
+#define NPU_REG_RESET 0x000C
+#define NPU_REG_QBASE 0x0010
+#define NPU_REG_QBASE_HI 0x0014
+#define NPU_REG_QREAD 0x0018
+#define NPU_REG_QCONFIG 0x001C
+#define NPU_REG_QSIZE 0x0020
+#define NPU_REG_PROT 0x0024
+#define NPU_REG_CONFIG 0x0028
+#define NPU_REG_LOCK 0x002C
+#define NPU_REG_REGIONCFG 0x003C
+#define NPU_REG_AXI_LIMIT0 0x0040
+#define NPU_REG_AXI_LIMIT1 0x0044
+#define NPU_REG_AXI_LIMIT2 0x0048
+#define NPU_REG_AXI_LIMIT3 0x004C
+#define BASE_REGISTERS_SIZE 0x0080
+
+//
+// Register subpage BASE_POINTERS
+//
+#define NPU_REG_BASEP_BASE 0x0080
+#define NPU_REG_BASEP_ARRLEN 0x0008
+#define BASE_POINTERS_REGISTERS_SIZE 0x0100
+
+//
+// Register subpage DEBUG
+//
+#define NPU_REG_WD_STATUS 0x0100
+#define NPU_REG_MAC_STATUS 0x0104
+#define NPU_REG_AO_STATUS 0x0108
+#define NPU_REG_DMA_STATUS0 0x0110
+#define NPU_REG_DMA_STATUS1 0x0114
+#define NPU_REG_CLKFORCE 0x0140
+#define NPU_REG_DEBUG_ADDRESS 0x0144
+#define NPU_REG_DEBUG_MISC 0x0148
+#define NPU_REG_DEBUGCORE 0x014C
+#define NPU_REG_DEBUG_BLOCK 0x0150
+#define DEBUG_REGISTERS_SIZE 0x0180
+
+//
+// Register subpage PMU
+//
+#define NPU_REG_PMCR 0x0180
+#define NPU_REG_PMCNTENSET 0x0184
+#define NPU_REG_PMCNTENCLR 0x0188
+#define NPU_REG_PMOVSSET 0x018C
+#define NPU_REG_PMOVSCLR 0x0190
+#define NPU_REG_PMINTSET 0x0194
+#define NPU_REG_PMINTCLR 0x0198
+#define NPU_REG_PMCCNTR 0x01A0
+#define NPU_REG_PMCCNTR_HI 0x01A4
+#define NPU_REG_PMCCNTR_CFG 0x01A8
+#define NPU_REG_PMCAXI_CHAN 0x01AC
+#define PMU_REGISTERS_SIZE 0x0200
+
+//
+// Register subpage TSU_DEBUG
+//
+#define NPU_REG_KERNEL_X 0x0200
+#define NPU_REG_KERNEL_Y 0x0204
+#define NPU_REG_KERNEL_W_M1 0x0208
+#define NPU_REG_KERNEL_H_M1 0x020C
+#define NPU_REG_OFM_CBLK_WIDTH_M1 0x0210
+#define NPU_REG_OFM_CBLK_HEIGHT_M1 0x0214
+#define NPU_REG_OFM_CBLK_DEPTH_M1 0x0218
+#define NPU_REG_IFM_CBLK_DEPTH_M1 0x021C
+#define NPU_REG_OFM_X 0x0220
+#define NPU_REG_OFM_Y 0x0224
+#define NPU_REG_OFM_Z 0x0228
+#define NPU_REG_IFM_Z 0x022C
+#define NPU_REG_PAD_TOP 0x0230
+#define NPU_REG_PAD_LEFT 0x0234
+#define NPU_REG_IFM_CBLK_WIDTH 0x0238
+#define NPU_REG_IFM_CBLK_HEIGHT 0x023C
+#define NPU_REG_DMA_IFM_SRC 0x0240
+#define NPU_REG_DMA_IFM_SRC_HI 0x0244
+#define NPU_REG_DMA_IFM_DST 0x0248
+#define NPU_REG_DMA_OFM_SRC 0x024C
+#define NPU_REG_DMA_OFM_DST 0x0250
+#define NPU_REG_DMA_OFM_DST_HI 0x0254
+#define NPU_REG_DMA_WEIGHT_SRC 0x0258
+#define NPU_REG_DMA_WEIGHT_SRC_HI 0x025C
+#define NPU_REG_DMA_CMD_SRC 0x0260
+#define NPU_REG_DMA_CMD_SRC_HI 0x0264
+#define NPU_REG_DMA_CMD_SIZE 0x0268
+#define NPU_REG_DMA_M2M_SRC 0x026C
+#define NPU_REG_DMA_M2M_SRC_HI 0x0270
+#define NPU_REG_DMA_M2M_DST 0x0274
+#define NPU_REG_DMA_M2M_DST_HI 0x0278
+#define NPU_REG_CURRENT_QREAD 0x027C
+#define NPU_REG_DMA_SCALE_SRC 0x0280
+#define NPU_REG_DMA_SCALE_SRC_HI 0x0284
+#define NPU_REG_CURRENT_BLOCK 0x02B4
+#define NPU_REG_CURRENT_OP 0x02B8
+#define NPU_REG_CURRENT_CMD 0x02BC
+#define TSU_DEBUG_REGISTERS_SIZE 0x02C0
+
+//
+// Register subpage PMU_COUNTERS
+//
+#define NPU_REG_PMEVCNTR_BASE 0x0300
+#define NPU_REG_PMEVCNTR_ARRLEN 0x0004
+#define NPU_REG_PMEVTYPER_BASE 0x0380
+#define NPU_REG_PMEVTYPER_ARRLEN 0x0004
+#define PMU_COUNTERS_REGISTERS_SIZE 0x0400
+
+//
+// Register subpage SHARED_BUFFER
+//
+#define NPU_REG_SHARED_BUFFER_BASE 0x0400
+#define NPU_REG_SHARED_BUFFER_ARRLEN 0x0100
+#define SHARED_BUFFER_REGISTERS_SIZE 0x0800
+
+//
+// Register subpage TSU_IFM
+//
+#define NPU_REG_IFM_PAD_TOP 0x0800
+#define NPU_REG_IFM_PAD_LEFT 0x0804
+#define NPU_REG_IFM_PAD_RIGHT 0x0808
+#define NPU_REG_IFM_PAD_BOTTOM 0x080C
+#define NPU_REG_IFM_DEPTH_M1 0x0810
+#define NPU_REG_IFM_PRECISION 0x0814
+#define NPU_REG_IFM_UPSCALE 0x081C
+#define NPU_REG_IFM_ZERO_POINT 0x0824
+#define NPU_REG_IFM_WIDTH0_M1 0x0828
+#define NPU_REG_IFM_HEIGHT0_M1 0x082C
+#define NPU_REG_IFM_HEIGHT1_M1 0x0830
+#define NPU_REG_IFM_IB_END 0x0834
+#define NPU_REG_IFM_REGION 0x083C
+#define TSU_IFM_REGISTERS_SIZE 0x0840
+
+//
+// Register subpage TSU_OFM
+//
+#define NPU_REG_OFM_WIDTH_M1 0x0844
+#define NPU_REG_OFM_HEIGHT_M1 0x0848
+#define NPU_REG_OFM_DEPTH_M1 0x084C
+#define NPU_REG_OFM_PRECISION 0x0850
+#define NPU_REG_OFM_BLK_WIDTH_M1 0x0854
+#define NPU_REG_OFM_BLK_HEIGHT_M1 0x0858
+#define NPU_REG_OFM_BLK_DEPTH_M1 0x085C
+#define NPU_REG_OFM_ZERO_POINT 0x0860
+#define NPU_REG_OFM_WIDTH0_M1 0x0868
+#define NPU_REG_OFM_HEIGHT0_M1 0x086C
+#define NPU_REG_OFM_HEIGHT1_M1 0x0870
+#define NPU_REG_OFM_REGION 0x087C
+#define TSU_OFM_REGISTERS_SIZE 0x0880
+
+//
+// Register subpage TSU_KERNEL
+//
+#define NPU_REG_KERNEL_WIDTH_M1 0x0880
+#define NPU_REG_KERNEL_HEIGHT_M1 0x0884
+#define NPU_REG_KERNEL_STRIDE 0x0888
+#define NPU_REG_PARALLEL_MODE 0x088C
+#define NPU_REG_ACC_FORMAT 0x0890
+#define NPU_REG_ACTIVATION 0x0894
+#define NPU_REG_ACTIVATION_MIN 0x0898
+#define NPU_REG_ACTIVATION_MAX 0x089C
+#define NPU_REG_WEIGHT_REGION 0x08A0
+#define NPU_REG_SCALE_REGION 0x08A4
+#define NPU_REG_AB_START 0x08B4
+#define NPU_REG_BLOCKDEP 0x08BC
+#define TSU_KERNEL_REGISTERS_SIZE 0x08C0
+
+//
+// Register subpage TSU_DMA
+//
+#define NPU_REG_DMA0_SRC_REGION 0x08C0
+#define NPU_REG_DMA0_DST_REGION 0x08C4
+#define NPU_REG_DMA0_SIZE0 0x08C8
+#define NPU_REG_DMA0_SIZE1 0x08CC
+#define TSU_DMA_REGISTERS_SIZE 0x0900
+
+//
+// Register subpage TSU_IFM2
+//
+#define NPU_REG_IFM2_BROADCAST 0x0900
+#define NPU_REG_IFM2_SCALAR 0x0904
+#define NPU_REG_IFM2_PRECISION 0x0914
+#define NPU_REG_IFM2_ZERO_POINT 0x0924
+#define NPU_REG_IFM2_WIDTH0_M1 0x0928
+#define NPU_REG_IFM2_HEIGHT0_M1 0x092C
+#define NPU_REG_IFM2_HEIGHT1_M1 0x0930
+#define NPU_REG_IFM2_IB_START 0x0934
+#define NPU_REG_IFM2_REGION 0x093C
+#define TSU_IFM2_REGISTERS_SIZE 0x0940
+
+//
+// Register subpage TSU_IFM_BASE
+//
+#define NPU_REG_IFM_BASE0 0x0A00
+#define NPU_REG_IFM_BASE0_HI 0x0A04
+#define NPU_REG_IFM_BASE1 0x0A08
+#define NPU_REG_IFM_BASE1_HI 0x0A0C
+#define NPU_REG_IFM_BASE2 0x0A10
+#define NPU_REG_IFM_BASE2_HI 0x0A14
+#define NPU_REG_IFM_BASE3 0x0A18
+#define NPU_REG_IFM_BASE3_HI 0x0A1C
+#define NPU_REG_IFM_STRIDE_X 0x0A20
+#define NPU_REG_IFM_STRIDE_X_HI 0x0A24
+#define NPU_REG_IFM_STRIDE_Y 0x0A28
+#define NPU_REG_IFM_STRIDE_Y_HI 0x0A2C
+#define NPU_REG_IFM_STRIDE_C 0x0A30
+#define NPU_REG_IFM_STRIDE_C_HI 0x0A34
+#define TSU_IFM_BASE_REGISTERS_SIZE 0x0A40
+
+//
+// Register subpage TSU_OFM_BASE
+//
+#define NPU_REG_OFM_BASE0 0x0A40
+#define NPU_REG_OFM_BASE0_HI 0x0A44
+#define NPU_REG_OFM_BASE1 0x0A48
+#define NPU_REG_OFM_BASE1_HI 0x0A4C
+#define NPU_REG_OFM_BASE2 0x0A50
+#define NPU_REG_OFM_BASE2_HI 0x0A54
+#define NPU_REG_OFM_BASE3 0x0A58
+#define NPU_REG_OFM_BASE3_HI 0x0A5C
+#define NPU_REG_OFM_STRIDE_X 0x0A60
+#define NPU_REG_OFM_STRIDE_X_HI 0x0A64
+#define NPU_REG_OFM_STRIDE_Y 0x0A68
+#define NPU_REG_OFM_STRIDE_Y_HI 0x0A6C
+#define NPU_REG_OFM_STRIDE_C 0x0A70
+#define NPU_REG_OFM_STRIDE_C_HI 0x0A74
+#define TSU_OFM_BASE_REGISTERS_SIZE 0x0A80
+
+//
+// Register subpage TSU_WS_BASE
+//
+#define NPU_REG_WEIGHT_BASE 0x0A80
+#define NPU_REG_WEIGHT_BASE_HI 0x0A84
+#define NPU_REG_WEIGHT_LENGTH 0x0A88
+#define NPU_REG_SCALE_BASE 0x0A90
+#define NPU_REG_SCALE_BASE_HI 0x0A94
+#define NPU_REG_SCALE_LENGTH 0x0A98
+#define NPU_REG_OFM_SCALE 0x0AA0
+#define NPU_REG_OFM_SCALE_SHIFT 0x0AA4
+#define NPU_REG_OPA_SCALE 0x0AA8
+#define NPU_REG_OPA_SCALE_SHIFT 0x0AAC
+#define NPU_REG_OPB_SCALE 0x0AB0
+#define TSU_WS_BASE_REGISTERS_SIZE 0x0AC0
+
+//
+// Register subpage TSU_DMA_BASE
+//
+#define NPU_REG_DMA0_SRC 0x0AC0
+#define NPU_REG_DMA0_SRC_HI 0x0AC4
+#define NPU_REG_DMA0_DST 0x0AC8
+#define NPU_REG_DMA0_DST_HI 0x0ACC
+#define NPU_REG_DMA0_LEN 0x0AD0
+#define NPU_REG_DMA0_LEN_HI 0x0AD4
+#define NPU_REG_DMA0_SKIP0 0x0AD8
+#define NPU_REG_DMA0_SKIP0_HI 0x0ADC
+#define NPU_REG_DMA0_SKIP1 0x0AE0
+#define NPU_REG_DMA0_SKIP1_HI 0x0AE4
+#define TSU_DMA_BASE_REGISTERS_SIZE 0x0B00
+
+//
+// Register subpage TSU_IFM2_BASE
+//
+#define NPU_REG_IFM2_BASE0 0x0B00
+#define NPU_REG_IFM2_BASE0_HI 0x0B04
+#define NPU_REG_IFM2_BASE1 0x0B08
+#define NPU_REG_IFM2_BASE1_HI 0x0B0C
+#define NPU_REG_IFM2_BASE2 0x0B10
+#define NPU_REG_IFM2_BASE2_HI 0x0B14
+#define NPU_REG_IFM2_BASE3 0x0B18
+#define NPU_REG_IFM2_BASE3_HI 0x0B1C
+#define NPU_REG_IFM2_STRIDE_X 0x0B20
+#define NPU_REG_IFM2_STRIDE_X_HI 0x0B24
+#define NPU_REG_IFM2_STRIDE_Y 0x0B28
+#define NPU_REG_IFM2_STRIDE_Y_HI 0x0B2C
+#define NPU_REG_IFM2_STRIDE_C 0x0B30
+#define NPU_REG_IFM2_STRIDE_C_HI 0x0B34
+#define TSU_IFM2_BASE_REGISTERS_SIZE 0x0B40
+
+//
+// Register subpage TSU_WS1_BASE
+//
+#define NPU_REG_WEIGHT1_BASE 0x0B40
+#define NPU_REG_WEIGHT1_BASE_HI 0x0B44
+#define NPU_REG_WEIGHT1_LENGTH 0x0B48
+#define NPU_REG_SCALE1_BASE 0x0B50
+#define NPU_REG_SCALE1_BASE_HI 0x0B54
+#define NPU_REG_SCALE1_LENGTH 0x0B58
+#define TSU_WS1_BASE_REGISTERS_SIZE 0x0B80
+
+//
+// Register subpage TSU_USER_BASE
+//
+#define TSU_USER_BASE_REGISTERS_SIZE 0x0BC0
+
+//
+// Register subpage TSU_DMA_EBASE
+//
+#define TSU_DMA_EBASE_REGISTERS_SIZE 0x0C00
+
+//
+// Register subpage ID
+//
+#define NPU_REG_REVISION 0x0FC0
+#define NPU_REG_PID4 0x0FD0
+#define NPU_REG_PID5 0x0FD4
+#define NPU_REG_PID6 0x0FD8
+#define NPU_REG_PID7 0x0FDC
+#define NPU_REG_PID0 0x0FE0
+#define NPU_REG_PID1 0x0FE4
+#define NPU_REG_PID2 0x0FE8
+#define NPU_REG_PID3 0x0FEC
+#define NPU_REG_CID0 0x0FF0
+#define NPU_REG_CID1 0x0FF4
+#define NPU_REG_CID2 0x0FF8
+#define NPU_REG_CID3 0x0FFC
+#define ID_REGISTERS_SIZE 0x1000
+
+#ifdef __cplusplus
+// Enum types
+enum class acc_format : uint8_t
+{
+ I32 = 0,
+ I40 = 1,
+ F16 = 2,
+};
+
+enum class activation_clip_range : uint8_t
+{
+ OFM_PRECISION = 0,
+ FORCE_UINT8 = 2,
+ FORCE_INT8 = 3,
+ FORCE_INT16 = 5,
+};
+
+enum class activation_format : uint8_t
+{
+ NHWC = 0,
+ NHCWB16 = 1,
+};
+
+enum class activation_function : uint8_t
+{
+ RELU = 0,
+ TANH = 3,
+ SIGMOID = 4,
+ TABLE_0 = 16,
+ TABLE_1 = 17,
+ TABLE_2 = 18,
+ TABLE_3 = 19,
+ TABLE_4 = 20,
+ TABLE_5 = 21,
+ TABLE_6 = 22,
+ TABLE_7 = 23,
+};
+
+enum class activation_precision : uint8_t
+{
+ B8 = 0,
+ B16 = 1,
+ B32 = 2,
+ B64 = 3,
+};
+
+enum class activation_type : uint8_t
+{
+ UNSIGNED = 0,
+ SIGNED = 1,
+};
+
+enum class axi_mem_encoding : uint8_t
+{
+ DEVICE_NON_BUFFERABLE = 0,
+ DEVICE_BUFFERABLE = 1,
+ NORMAL_NON_CACHEABLE_NON_BUFFERABLE = 2,
+ NORMAL_NON_CACHEABLE_BUFFERABLE = 3,
+ WRITE_THROUGH_NO_ALLOCATE = 4,
+ WRITE_THROUGH_READ_ALLOCATE = 5,
+ WRITE_THROUGH_WRITE_ALLOCATE = 6,
+ WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 7,
+ WRITE_BACK_NO_ALLOCATE = 8,
+ WRITE_BACK_READ_ALLOCATE = 9,
+ WRITE_BACK_WRITE_ALLOCATE = 10,
+ WRITE_BACK_READ_AND_WRITE_ALLOCATE = 11,
+};
+
+enum class broadcast_mode : uint8_t
+{
+ DISABLE = 0,
+ ENABLE = 1,
+};
+
+enum class cmd0_opcode : uint16_t
+{
+ NPU_OP_STOP = 0,
+ NPU_OP_IRQ = 1,
+ NPU_OP_CONV = 2,
+ NPU_OP_DEPTHWISE = 3,
+ NPU_OP_POOL = 5,
+ NPU_OP_ELEMENTWISE = 6,
+ NPU_OP_DMA_START = 16,
+ NPU_OP_DMA_WAIT = 17,
+ NPU_OP_KERNEL_WAIT = 18,
+ NPU_OP_PMU_MASK = 19,
+ NPU_SET_IFM_PAD_TOP = 256,
+ NPU_SET_IFM_PAD_LEFT = 257,
+ NPU_SET_IFM_PAD_RIGHT = 258,
+ NPU_SET_IFM_PAD_BOTTOM = 259,
+ NPU_SET_IFM_DEPTH_M1 = 260,
+ NPU_SET_IFM_PRECISION = 261,
+ NPU_SET_IFM_UPSCALE = 263,
+ NPU_SET_IFM_ZERO_POINT = 265,
+ NPU_SET_IFM_WIDTH0_M1 = 266,
+ NPU_SET_IFM_HEIGHT0_M1 = 267,
+ NPU_SET_IFM_HEIGHT1_M1 = 268,
+ NPU_SET_IFM_IB_END = 269,
+ NPU_SET_IFM_REGION = 271,
+ NPU_SET_OFM_WIDTH_M1 = 273,
+ NPU_SET_OFM_HEIGHT_M1 = 274,
+ NPU_SET_OFM_DEPTH_M1 = 275,
+ NPU_SET_OFM_PRECISION = 276,
+ NPU_SET_OFM_BLK_WIDTH_M1 = 277,
+ NPU_SET_OFM_BLK_HEIGHT_M1 = 278,
+ NPU_SET_OFM_BLK_DEPTH_M1 = 279,
+ NPU_SET_OFM_ZERO_POINT = 280,
+ NPU_SET_OFM_WIDTH0_M1 = 282,
+ NPU_SET_OFM_HEIGHT0_M1 = 283,
+ NPU_SET_OFM_HEIGHT1_M1 = 284,
+ NPU_SET_OFM_REGION = 287,
+ NPU_SET_KERNEL_WIDTH_M1 = 288,
+ NPU_SET_KERNEL_HEIGHT_M1 = 289,
+ NPU_SET_KERNEL_STRIDE = 290,
+ NPU_SET_PARALLEL_MODE = 291,
+ NPU_SET_ACC_FORMAT = 292,
+ NPU_SET_ACTIVATION = 293,
+ NPU_SET_ACTIVATION_MIN = 294,
+ NPU_SET_ACTIVATION_MAX = 295,
+ NPU_SET_WEIGHT_REGION = 296,
+ NPU_SET_SCALE_REGION = 297,
+ NPU_SET_AB_START = 301,
+ NPU_SET_BLOCKDEP = 303,
+ NPU_SET_DMA0_SRC_REGION = 304,
+ NPU_SET_DMA0_DST_REGION = 305,
+ NPU_SET_DMA0_SIZE0 = 306,
+ NPU_SET_DMA0_SIZE1 = 307,
+ NPU_SET_IFM2_BROADCAST = 384,
+ NPU_SET_IFM2_SCALAR = 385,
+ NPU_SET_IFM2_PRECISION = 389,
+ NPU_SET_IFM2_ZERO_POINT = 393,
+ NPU_SET_IFM2_WIDTH0_M1 = 394,
+ NPU_SET_IFM2_HEIGHT0_M1 = 395,
+ NPU_SET_IFM2_HEIGHT1_M1 = 396,
+ NPU_SET_IFM2_IB_START = 397,
+ NPU_SET_IFM2_REGION = 399,
+};
+
+enum class cmd1_opcode : uint16_t
+{
+ NPU_SET_IFM_BASE0 = 0,
+ NPU_SET_IFM_BASE1 = 1,
+ NPU_SET_IFM_BASE2 = 2,
+ NPU_SET_IFM_BASE3 = 3,
+ NPU_SET_IFM_STRIDE_X = 4,
+ NPU_SET_IFM_STRIDE_Y = 5,
+ NPU_SET_IFM_STRIDE_C = 6,
+ NPU_SET_OFM_BASE0 = 16,
+ NPU_SET_OFM_BASE1 = 17,
+ NPU_SET_OFM_BASE2 = 18,
+ NPU_SET_OFM_BASE3 = 19,
+ NPU_SET_OFM_STRIDE_X = 20,
+ NPU_SET_OFM_STRIDE_Y = 21,
+ NPU_SET_OFM_STRIDE_C = 22,
+ NPU_SET_WEIGHT_BASE = 32,
+ NPU_SET_WEIGHT_LENGTH = 33,
+ NPU_SET_SCALE_BASE = 34,
+ NPU_SET_SCALE_LENGTH = 35,
+ NPU_SET_OFM_SCALE = 36,
+ NPU_SET_OPA_SCALE = 37,
+ NPU_SET_OPB_SCALE = 38,
+ NPU_SET_DMA0_SRC = 48,
+ NPU_SET_DMA0_DST = 49,
+ NPU_SET_DMA0_LEN = 50,
+ NPU_SET_DMA0_SKIP0 = 51,
+ NPU_SET_DMA0_SKIP1 = 52,
+ NPU_SET_IFM2_BASE0 = 128,
+ NPU_SET_IFM2_BASE1 = 129,
+ NPU_SET_IFM2_BASE2 = 130,
+ NPU_SET_IFM2_BASE3 = 131,
+ NPU_SET_IFM2_STRIDE_X = 132,
+ NPU_SET_IFM2_STRIDE_Y = 133,
+ NPU_SET_IFM2_STRIDE_C = 134,
+ NPU_SET_WEIGHT1_BASE = 144,
+ NPU_SET_WEIGHT1_LENGTH = 145,
+ NPU_SET_SCALE1_BASE = 146,
+ NPU_SET_SCALE1_LENGTH = 147,
+};
+
+enum class cmd_ctrl : uint8_t
+{
+ CMD0_CTRL = 0,
+ CMD1_CTRL = 1,
+};
+
+enum class custom_dma : uint8_t
+{
+ NOT_IMPLEMENTED = 0,
+ IMPLEMENTED = 1,
+};
+
+enum class dma_fault_src : uint8_t
+{
+ AXI_M0 = 0,
+ AXI_M1 = 1,
+};
+
+enum class dma_region_mode : uint8_t
+{
+ EXTERNAL = 0,
+ INTERNAL = 1,
+};
+
+enum class dma_stride_mode : uint8_t
+{
+ D1 = 0,
+ D2 = 1,
+ D3 = 2,
+};
+
+enum class elementwise_mode : uint8_t
+{
+ MUL = 0,
+ ADD = 1,
+ SUB = 2,
+ MIN = 3,
+ MAX = 4,
+ LRELU = 5,
+ ABS = 6,
+ CLZ = 7,
+ SHR = 8,
+ SHL = 9,
+};
+
+enum class functional_safety : uint8_t
+{
+ NOT_IMPLEMENTED = 0,
+ IMPLEMENTED = 1,
+};
+
+enum class ifm2_operand_order : uint8_t
+{
+ ORDER_B = 0,
+ ORDER_A = 1,
+};
+
+enum class ifm_scale_mode : uint8_t
+{
+ OPA_OPB_16 = 0,
+ OPA_32 = 1,
+ OPB_32 = 2,
+};
+
+enum class ifm_upscale_mode : uint8_t
+{
+ NONE = 0,
+ NEAREST = 1,
+ ZEROS = 2,
+};
+
+enum class kernel_decomposition : uint8_t
+{
+ D8X8 = 0,
+ D4X4 = 1,
+};
+
+enum class kernel_dilation : uint8_t
+{
+ NONE = 0,
+ X2 = 1,
+};
+
+enum class max_beats : uint8_t
+{
+ B64 = 0,
+ B128 = 1,
+ B256 = 2,
+};
+
+enum class mem_attr : uint8_t
+{
+ AXI0_OUTSTANDING_COUNTER0 = 0,
+ AXI0_OUTSTANDING_COUNTER1 = 1,
+ AXI1_OUTSTANDING_COUNTER2 = 2,
+ AXI1_OUTSTANDING_COUNTER3 = 3,
+};
+
+enum class ofm_scale_mode : uint8_t
+{
+ PER_CHANNEL = 0,
+ GLOBAL = 1,
+};
+
+enum class parallel_mode : uint8_t
+{
+ SINGLE_CORE = 0,
+ DUAL_CORE_DEPTH = 1,
+};
+
+enum class pmu_axi_channel : uint8_t
+{
+ RD_CMD = 0,
+ RD_IFM = 1,
+ RD_WEIGHTS = 2,
+ RD_SCALE_BIAS = 3,
+ RD_MEM2MEM = 4,
+ WR_OFM = 8,
+ WR_MEM2MEM = 9,
+};
+
+enum class pmu_event : uint16_t
+{
+ NO_EVENT = 0,
+ CYCLE = 17,
+ NPU_IDLE = 32,
+ CC_STALLED_ON_BLOCKDEP = 33,
+ CC_STALLED_ON_SHRAM_RECONFIG = 34,
+ NPU_ACTIVE = 35,
+ MAC_ACTIVE = 48,
+ MAC_ACTIVE_8BIT = 49,
+ MAC_ACTIVE_16BIT = 50,
+ MAC_DPU_ACTIVE = 51,
+ MAC_STALLED_BY_WD_ACC = 52,
+ MAC_STALLED_BY_WD = 53,
+ MAC_STALLED_BY_ACC = 54,
+ MAC_STALLED_BY_IB = 55,
+ MAC_ACTIVE_32BIT = 56,
+ MAC_STALLED_BY_INT_W = 57,
+ MAC_STALLED_BY_INT_ACC = 58,
+ AO_ACTIVE = 64,
+ AO_ACTIVE_8BIT = 65,
+ AO_ACTIVE_16BIT = 66,
+ AO_STALLED_BY_OFMP_OB = 67,
+ AO_STALLED_BY_OFMP = 68,
+ AO_STALLED_BY_OB = 69,
+ AO_STALLED_BY_ACC_IB = 70,
+ AO_STALLED_BY_ACC = 71,
+ AO_STALLED_BY_IB = 72,
+ WD_ACTIVE = 80,
+ WD_STALLED = 81,
+ WD_STALLED_BY_WS = 82,
+ WD_STALLED_BY_WD_BUF = 83,
+ WD_PARSE_ACTIVE = 84,
+ WD_PARSE_STALLED = 85,
+ WD_PARSE_STALLED_IN = 86,
+ WD_PARSE_STALLED_OUT = 87,
+ WD_TRANS_WS = 88,
+ WD_TRANS_WB = 89,
+ WD_TRANS_DW0 = 90,
+ WD_TRANS_DW1 = 91,
+ AXI0_RD_TRANS_ACCEPTED = 128,
+ AXI0_RD_TRANS_COMPLETED = 129,
+ AXI0_RD_DATA_BEAT_RECEIVED = 130,
+ AXI0_RD_TRAN_REQ_STALLED = 131,
+ AXI0_WR_TRANS_ACCEPTED = 132,
+ AXI0_WR_TRANS_COMPLETED_M = 133,
+ AXI0_WR_TRANS_COMPLETED_S = 134,
+ AXI0_WR_DATA_BEAT_WRITTEN = 135,
+ AXI0_WR_TRAN_REQ_STALLED = 136,
+ AXI0_WR_DATA_BEAT_STALLED = 137,
+ AXI0_ENABLED_CYCLES = 140,
+ AXI0_RD_STALL_LIMIT = 142,
+ AXI0_WR_STALL_LIMIT = 143,
+ AXI_LATENCY_ANY = 160,
+ AXI_LATENCY_32 = 161,
+ AXI_LATENCY_64 = 162,
+ AXI_LATENCY_128 = 163,
+ AXI_LATENCY_256 = 164,
+ AXI_LATENCY_512 = 165,
+ AXI_LATENCY_1024 = 166,
+ ECC_DMA = 176,
+ ECC_SB0 = 177,
+ AXI1_RD_TRANS_ACCEPTED = 384,
+ AXI1_RD_TRANS_COMPLETED = 385,
+ AXI1_RD_DATA_BEAT_RECEIVED = 386,
+ AXI1_RD_TRAN_REQ_STALLED = 387,
+ AXI1_WR_TRANS_ACCEPTED = 388,
+ AXI1_WR_TRANS_COMPLETED_M = 389,
+ AXI1_WR_TRANS_COMPLETED_S = 390,
+ AXI1_WR_DATA_BEAT_WRITTEN = 391,
+ AXI1_WR_TRAN_REQ_STALLED = 392,
+ AXI1_WR_DATA_BEAT_STALLED = 393,
+ AXI1_ENABLED_CYCLES = 396,
+ AXI1_RD_STALL_LIMIT = 398,
+ AXI1_WR_STALL_LIMIT = 399,
+ ECC_SB1 = 433,
+};
+
+enum class pooling_mode : uint8_t
+{
+ MAX = 0,
+ AVERAGE = 1,
+ REDUCE_SUM = 2,
+};
+
+enum class privilege_level : uint8_t
+{
+ USER = 0,
+ PRIVILEGED = 1,
+};
+
+enum class round_mode : uint8_t
+{
+ DBL = 0,
+ TRUNCATE = 1,
+ NATURAL = 2,
+};
+
+enum class security_level : uint8_t
+{
+ SECURE = 0,
+ NON_SECURE = 1,
+};
+
+enum class state : uint8_t
+{
+ STOPPED = 0,
+ RUNNING = 1,
+};
+
+enum class wd_core_slice_state : uint8_t
+{
+ HEADER = 0,
+ PALETTE = 1,
+ WEIGHTS = 2,
+};
+
+enum class wd_ctrl_state : uint8_t
+{
+ IDLE = 0,
+ DRAIN = 1,
+ OFD_INIT = 2,
+ OFD_RUN = 3,
+};
+
+enum class weight_order : uint8_t
+{
+ DEPTH_FIRST = 0,
+ PART_KERNEL_FIRST = 1,
+};
+
+#else
+
+enum acc_format
+{
+ ACC_FORMAT_I32 = 0,
+ ACC_FORMAT_I40 = 1,
+ ACC_FORMAT_F16 = 2,
+};
+
+enum activation_clip_range
+{
+ ACTIVATION_CLIP_RANGE_OFM_PRECISION = 0,
+ ACTIVATION_CLIP_RANGE_FORCE_UINT8 = 2,
+ ACTIVATION_CLIP_RANGE_FORCE_INT8 = 3,
+ ACTIVATION_CLIP_RANGE_FORCE_INT16 = 5,
+};
+
+enum activation_format
+{
+ ACTIVATION_FORMAT_NHWC = 0,
+ ACTIVATION_FORMAT_NHCWB16 = 1,
+};
+
+enum activation_function
+{
+ ACTIVATION_FUNCTION_RELU = 0,
+ ACTIVATION_FUNCTION_TANH = 3,
+ ACTIVATION_FUNCTION_SIGMOID = 4,
+ ACTIVATION_FUNCTION_TABLE_0 = 16,
+ ACTIVATION_FUNCTION_TABLE_1 = 17,
+ ACTIVATION_FUNCTION_TABLE_2 = 18,
+ ACTIVATION_FUNCTION_TABLE_3 = 19,
+ ACTIVATION_FUNCTION_TABLE_4 = 20,
+ ACTIVATION_FUNCTION_TABLE_5 = 21,
+ ACTIVATION_FUNCTION_TABLE_6 = 22,
+ ACTIVATION_FUNCTION_TABLE_7 = 23,
+};
+
+enum activation_precision
+{
+ ACTIVATION_PRECISION_B8 = 0,
+ ACTIVATION_PRECISION_B16 = 1,
+ ACTIVATION_PRECISION_B32 = 2,
+ ACTIVATION_PRECISION_B64 = 3,
+};
+
+enum activation_type
+{
+ ACTIVATION_TYPE_UNSIGNED = 0,
+ ACTIVATION_TYPE_SIGNED = 1,
+};
+
+enum axi_mem_encoding
+{
+ AXI_MEM_ENCODING_DEVICE_NON_BUFFERABLE = 0,
+ AXI_MEM_ENCODING_DEVICE_BUFFERABLE = 1,
+ AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_NON_BUFFERABLE = 2,
+ AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_BUFFERABLE = 3,
+ AXI_MEM_ENCODING_WRITE_THROUGH_NO_ALLOCATE = 4,
+ AXI_MEM_ENCODING_WRITE_THROUGH_READ_ALLOCATE = 5,
+ AXI_MEM_ENCODING_WRITE_THROUGH_WRITE_ALLOCATE = 6,
+ AXI_MEM_ENCODING_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 7,
+ AXI_MEM_ENCODING_WRITE_BACK_NO_ALLOCATE = 8,
+ AXI_MEM_ENCODING_WRITE_BACK_READ_ALLOCATE = 9,
+ AXI_MEM_ENCODING_WRITE_BACK_WRITE_ALLOCATE = 10,
+ AXI_MEM_ENCODING_WRITE_BACK_READ_AND_WRITE_ALLOCATE = 11,
+};
+
+enum broadcast_mode
+{
+ BROADCAST_MODE_DISABLE = 0,
+ BROADCAST_MODE_ENABLE = 1,
+};
+
+enum cmd0_opcode
+{
+ CMD0_OPCODE_NPU_OP_STOP = 0,
+ CMD0_OPCODE_NPU_OP_IRQ = 1,
+ CMD0_OPCODE_NPU_OP_CONV = 2,
+ CMD0_OPCODE_NPU_OP_DEPTHWISE = 3,
+ CMD0_OPCODE_NPU_OP_POOL = 5,
+ CMD0_OPCODE_NPU_OP_ELEMENTWISE = 6,
+ CMD0_OPCODE_NPU_OP_DMA_START = 16,
+ CMD0_OPCODE_NPU_OP_DMA_WAIT = 17,
+ CMD0_OPCODE_NPU_OP_KERNEL_WAIT = 18,
+ CMD0_OPCODE_NPU_OP_PMU_MASK = 19,
+ CMD0_OPCODE_NPU_SET_IFM_PAD_TOP = 256,
+ CMD0_OPCODE_NPU_SET_IFM_PAD_LEFT = 257,
+ CMD0_OPCODE_NPU_SET_IFM_PAD_RIGHT = 258,
+ CMD0_OPCODE_NPU_SET_IFM_PAD_BOTTOM = 259,
+ CMD0_OPCODE_NPU_SET_IFM_DEPTH_M1 = 260,
+ CMD0_OPCODE_NPU_SET_IFM_PRECISION = 261,
+ CMD0_OPCODE_NPU_SET_IFM_UPSCALE = 263,
+ CMD0_OPCODE_NPU_SET_IFM_ZERO_POINT = 265,
+ CMD0_OPCODE_NPU_SET_IFM_WIDTH0_M1 = 266,
+ CMD0_OPCODE_NPU_SET_IFM_HEIGHT0_M1 = 267,
+ CMD0_OPCODE_NPU_SET_IFM_HEIGHT1_M1 = 268,
+ CMD0_OPCODE_NPU_SET_IFM_IB_END = 269,
+ CMD0_OPCODE_NPU_SET_IFM_REGION = 271,
+ CMD0_OPCODE_NPU_SET_OFM_WIDTH_M1 = 273,
+ CMD0_OPCODE_NPU_SET_OFM_HEIGHT_M1 = 274,
+ CMD0_OPCODE_NPU_SET_OFM_DEPTH_M1 = 275,
+ CMD0_OPCODE_NPU_SET_OFM_PRECISION = 276,
+ CMD0_OPCODE_NPU_SET_OFM_BLK_WIDTH_M1 = 277,
+ CMD0_OPCODE_NPU_SET_OFM_BLK_HEIGHT_M1 = 278,
+ CMD0_OPCODE_NPU_SET_OFM_BLK_DEPTH_M1 = 279,
+ CMD0_OPCODE_NPU_SET_OFM_ZERO_POINT = 280,
+ CMD0_OPCODE_NPU_SET_OFM_WIDTH0_M1 = 282,
+ CMD0_OPCODE_NPU_SET_OFM_HEIGHT0_M1 = 283,
+ CMD0_OPCODE_NPU_SET_OFM_HEIGHT1_M1 = 284,
+ CMD0_OPCODE_NPU_SET_OFM_REGION = 287,
+ CMD0_OPCODE_NPU_SET_KERNEL_WIDTH_M1 = 288,
+ CMD0_OPCODE_NPU_SET_KERNEL_HEIGHT_M1 = 289,
+ CMD0_OPCODE_NPU_SET_KERNEL_STRIDE = 290,
+ CMD0_OPCODE_NPU_SET_PARALLEL_MODE = 291,
+ CMD0_OPCODE_NPU_SET_ACC_FORMAT = 292,
+ CMD0_OPCODE_NPU_SET_ACTIVATION = 293,
+ CMD0_OPCODE_NPU_SET_ACTIVATION_MIN = 294,
+ CMD0_OPCODE_NPU_SET_ACTIVATION_MAX = 295,
+ CMD0_OPCODE_NPU_SET_WEIGHT_REGION = 296,
+ CMD0_OPCODE_NPU_SET_SCALE_REGION = 297,
+ CMD0_OPCODE_NPU_SET_AB_START = 301,
+ CMD0_OPCODE_NPU_SET_BLOCKDEP = 303,
+ CMD0_OPCODE_NPU_SET_DMA0_SRC_REGION = 304,
+ CMD0_OPCODE_NPU_SET_DMA0_DST_REGION = 305,
+ CMD0_OPCODE_NPU_SET_DMA0_SIZE0 = 306,
+ CMD0_OPCODE_NPU_SET_DMA0_SIZE1 = 307,
+ CMD0_OPCODE_NPU_SET_IFM2_BROADCAST = 384,
+ CMD0_OPCODE_NPU_SET_IFM2_SCALAR = 385,
+ CMD0_OPCODE_NPU_SET_IFM2_PRECISION = 389,
+ CMD0_OPCODE_NPU_SET_IFM2_ZERO_POINT = 393,
+ CMD0_OPCODE_NPU_SET_IFM2_WIDTH0_M1 = 394,
+ CMD0_OPCODE_NPU_SET_IFM2_HEIGHT0_M1 = 395,
+ CMD0_OPCODE_NPU_SET_IFM2_HEIGHT1_M1 = 396,
+ CMD0_OPCODE_NPU_SET_IFM2_IB_START = 397,
+ CMD0_OPCODE_NPU_SET_IFM2_REGION = 399,
+};
+
+enum cmd1_opcode
+{
+ CMD1_OPCODE_NPU_SET_IFM_BASE0 = 0,
+ CMD1_OPCODE_NPU_SET_IFM_BASE1 = 1,
+ CMD1_OPCODE_NPU_SET_IFM_BASE2 = 2,
+ CMD1_OPCODE_NPU_SET_IFM_BASE3 = 3,
+ CMD1_OPCODE_NPU_SET_IFM_STRIDE_X = 4,
+ CMD1_OPCODE_NPU_SET_IFM_STRIDE_Y = 5,
+ CMD1_OPCODE_NPU_SET_IFM_STRIDE_C = 6,
+ CMD1_OPCODE_NPU_SET_OFM_BASE0 = 16,
+ CMD1_OPCODE_NPU_SET_OFM_BASE1 = 17,
+ CMD1_OPCODE_NPU_SET_OFM_BASE2 = 18,
+ CMD1_OPCODE_NPU_SET_OFM_BASE3 = 19,
+ CMD1_OPCODE_NPU_SET_OFM_STRIDE_X = 20,
+ CMD1_OPCODE_NPU_SET_OFM_STRIDE_Y = 21,
+ CMD1_OPCODE_NPU_SET_OFM_STRIDE_C = 22,
+ CMD1_OPCODE_NPU_SET_WEIGHT_BASE = 32,
+ CMD1_OPCODE_NPU_SET_WEIGHT_LENGTH = 33,
+ CMD1_OPCODE_NPU_SET_SCALE_BASE = 34,
+ CMD1_OPCODE_NPU_SET_SCALE_LENGTH = 35,
+ CMD1_OPCODE_NPU_SET_OFM_SCALE = 36,
+ CMD1_OPCODE_NPU_SET_OPA_SCALE = 37,
+ CMD1_OPCODE_NPU_SET_OPB_SCALE = 38,
+ CMD1_OPCODE_NPU_SET_DMA0_SRC = 48,
+ CMD1_OPCODE_NPU_SET_DMA0_DST = 49,
+ CMD1_OPCODE_NPU_SET_DMA0_LEN = 50,
+ CMD1_OPCODE_NPU_SET_DMA0_SKIP0 = 51,
+ CMD1_OPCODE_NPU_SET_DMA0_SKIP1 = 52,
+ CMD1_OPCODE_NPU_SET_IFM2_BASE0 = 128,
+ CMD1_OPCODE_NPU_SET_IFM2_BASE1 = 129,
+ CMD1_OPCODE_NPU_SET_IFM2_BASE2 = 130,
+ CMD1_OPCODE_NPU_SET_IFM2_BASE3 = 131,
+ CMD1_OPCODE_NPU_SET_IFM2_STRIDE_X = 132,
+ CMD1_OPCODE_NPU_SET_IFM2_STRIDE_Y = 133,
+ CMD1_OPCODE_NPU_SET_IFM2_STRIDE_C = 134,
+ CMD1_OPCODE_NPU_SET_WEIGHT1_BASE = 144,
+ CMD1_OPCODE_NPU_SET_WEIGHT1_LENGTH = 145,
+ CMD1_OPCODE_NPU_SET_SCALE1_BASE = 146,
+ CMD1_OPCODE_NPU_SET_SCALE1_LENGTH = 147,
+};
+
+enum cmd_ctrl
+{
+ CMD_CTRL_CMD0_CTRL = 0,
+ CMD_CTRL_CMD1_CTRL = 1,
+};
+
+enum custom_dma
+{
+ CUSTOM_DMA_NOT_IMPLEMENTED = 0,
+ CUSTOM_DMA_IMPLEMENTED = 1,
+};
+
+enum dma_fault_src
+{
+ DMA_FAULT_SRC_AXI_M0 = 0,
+ DMA_FAULT_SRC_AXI_M1 = 1,
+};
+
+enum dma_region_mode
+{
+ DMA_REGION_MODE_EXTERNAL = 0,
+ DMA_REGION_MODE_INTERNAL = 1,
+};
+
+enum dma_stride_mode
+{
+ DMA_STRIDE_MODE_D1 = 0,
+ DMA_STRIDE_MODE_D2 = 1,
+ DMA_STRIDE_MODE_D3 = 2,
+};
+
+enum elementwise_mode
+{
+ ELEMENTWISE_MODE_MUL = 0,
+ ELEMENTWISE_MODE_ADD = 1,
+ ELEMENTWISE_MODE_SUB = 2,
+ ELEMENTWISE_MODE_MIN = 3,
+ ELEMENTWISE_MODE_MAX = 4,
+ ELEMENTWISE_MODE_LRELU = 5,
+ ELEMENTWISE_MODE_ABS = 6,
+ ELEMENTWISE_MODE_CLZ = 7,
+ ELEMENTWISE_MODE_SHR = 8,
+ ELEMENTWISE_MODE_SHL = 9,
+};
+
+enum functional_safety
+{
+ FUNCTIONAL_SAFETY_NOT_IMPLEMENTED = 0,
+ FUNCTIONAL_SAFETY_IMPLEMENTED = 1,
+};
+
+enum ifm2_operand_order
+{
+ IFM2_OPERAND_ORDER_ORDER_B = 0,
+ IFM2_OPERAND_ORDER_ORDER_A = 1,
+};
+
+enum ifm_scale_mode
+{
+ IFM_SCALE_MODE_OPA_OPB_16 = 0,
+ IFM_SCALE_MODE_OPA_32 = 1,
+ IFM_SCALE_MODE_OPB_32 = 2,
+};
+
+enum ifm_upscale_mode
+{
+ IFM_UPSCALE_MODE_NONE = 0,
+ IFM_UPSCALE_MODE_NEAREST = 1,
+ IFM_UPSCALE_MODE_ZEROS = 2,
+};
+
+enum kernel_decomposition
+{
+ KERNEL_DECOMPOSITION_D8X8 = 0,
+ KERNEL_DECOMPOSITION_D4X4 = 1,
+};
+
+enum kernel_dilation
+{
+ KERNEL_DILATION_NONE = 0,
+ KERNEL_DILATION_X2 = 1,
+};
+
+enum max_beats
+{
+ MAX_BEATS_B64 = 0,
+ MAX_BEATS_B128 = 1,
+ MAX_BEATS_B256 = 2,
+};
+
+enum mem_attr
+{
+ MEM_ATTR_AXI0_OUTSTANDING_COUNTER0 = 0,
+ MEM_ATTR_AXI0_OUTSTANDING_COUNTER1 = 1,
+ MEM_ATTR_AXI1_OUTSTANDING_COUNTER2 = 2,
+ MEM_ATTR_AXI1_OUTSTANDING_COUNTER3 = 3,
+};
+
+enum ofm_scale_mode
+{
+ OFM_SCALE_MODE_PER_CHANNEL = 0,
+ OFM_SCALE_MODE_GLOBAL = 1,
+};
+
+enum parallel_mode
+{
+ PARALLEL_MODE_SINGLE_CORE = 0,
+ PARALLEL_MODE_DUAL_CORE_DEPTH = 1,
+};
+
+enum pmu_axi_channel
+{
+ PMU_AXI_CHANNEL_RD_CMD = 0,
+ PMU_AXI_CHANNEL_RD_IFM = 1,
+ PMU_AXI_CHANNEL_RD_WEIGHTS = 2,
+ PMU_AXI_CHANNEL_RD_SCALE_BIAS = 3,
+ PMU_AXI_CHANNEL_RD_MEM2MEM = 4,
+ PMU_AXI_CHANNEL_WR_OFM = 8,
+ PMU_AXI_CHANNEL_WR_MEM2MEM = 9,
+};
+
+enum pmu_event
+{
+ PMU_EVENT_NO_EVENT = 0,
+ PMU_EVENT_CYCLE = 17,
+ PMU_EVENT_NPU_IDLE = 32,
+ PMU_EVENT_CC_STALLED_ON_BLOCKDEP = 33,
+ PMU_EVENT_CC_STALLED_ON_SHRAM_RECONFIG = 34,
+ PMU_EVENT_NPU_ACTIVE = 35,
+ PMU_EVENT_MAC_ACTIVE = 48,
+ PMU_EVENT_MAC_ACTIVE_8BIT = 49,
+ PMU_EVENT_MAC_ACTIVE_16BIT = 50,
+ PMU_EVENT_MAC_DPU_ACTIVE = 51,
+ PMU_EVENT_MAC_STALLED_BY_WD_ACC = 52,
+ PMU_EVENT_MAC_STALLED_BY_WD = 53,
+ PMU_EVENT_MAC_STALLED_BY_ACC = 54,
+ PMU_EVENT_MAC_STALLED_BY_IB = 55,
+ PMU_EVENT_MAC_ACTIVE_32BIT = 56,
+ PMU_EVENT_MAC_STALLED_BY_INT_W = 57,
+ PMU_EVENT_MAC_STALLED_BY_INT_ACC = 58,
+ PMU_EVENT_AO_ACTIVE = 64,
+ PMU_EVENT_AO_ACTIVE_8BIT = 65,
+ PMU_EVENT_AO_ACTIVE_16BIT = 66,
+ PMU_EVENT_AO_STALLED_BY_OFMP_OB = 67,
+ PMU_EVENT_AO_STALLED_BY_OFMP = 68,
+ PMU_EVENT_AO_STALLED_BY_OB = 69,
+ PMU_EVENT_AO_STALLED_BY_ACC_IB = 70,
+ PMU_EVENT_AO_STALLED_BY_ACC = 71,
+ PMU_EVENT_AO_STALLED_BY_IB = 72,
+ PMU_EVENT_WD_ACTIVE = 80,
+ PMU_EVENT_WD_STALLED = 81,
+ PMU_EVENT_WD_STALLED_BY_WS = 82,
+ PMU_EVENT_WD_STALLED_BY_WD_BUF = 83,
+ PMU_EVENT_WD_PARSE_ACTIVE = 84,
+ PMU_EVENT_WD_PARSE_STALLED = 85,
+ PMU_EVENT_WD_PARSE_STALLED_IN = 86,
+ PMU_EVENT_WD_PARSE_STALLED_OUT = 87,
+ PMU_EVENT_WD_TRANS_WS = 88,
+ PMU_EVENT_WD_TRANS_WB = 89,
+ PMU_EVENT_WD_TRANS_DW0 = 90,
+ PMU_EVENT_WD_TRANS_DW1 = 91,
+ PMU_EVENT_AXI0_RD_TRANS_ACCEPTED = 128,
+ PMU_EVENT_AXI0_RD_TRANS_COMPLETED = 129,
+ PMU_EVENT_AXI0_RD_DATA_BEAT_RECEIVED = 130,
+ PMU_EVENT_AXI0_RD_TRAN_REQ_STALLED = 131,
+ PMU_EVENT_AXI0_WR_TRANS_ACCEPTED = 132,
+ PMU_EVENT_AXI0_WR_TRANS_COMPLETED_M = 133,
+ PMU_EVENT_AXI0_WR_TRANS_COMPLETED_S = 134,
+ PMU_EVENT_AXI0_WR_DATA_BEAT_WRITTEN = 135,
+ PMU_EVENT_AXI0_WR_TRAN_REQ_STALLED = 136,
+ PMU_EVENT_AXI0_WR_DATA_BEAT_STALLED = 137,
+ PMU_EVENT_AXI0_ENABLED_CYCLES = 140,
+ PMU_EVENT_AXI0_RD_STALL_LIMIT = 142,
+ PMU_EVENT_AXI0_WR_STALL_LIMIT = 143,
+ PMU_EVENT_AXI_LATENCY_ANY = 160,
+ PMU_EVENT_AXI_LATENCY_32 = 161,
+ PMU_EVENT_AXI_LATENCY_64 = 162,
+ PMU_EVENT_AXI_LATENCY_128 = 163,
+ PMU_EVENT_AXI_LATENCY_256 = 164,
+ PMU_EVENT_AXI_LATENCY_512 = 165,
+ PMU_EVENT_AXI_LATENCY_1024 = 166,
+ PMU_EVENT_ECC_DMA = 176,
+ PMU_EVENT_ECC_SB0 = 177,
+ PMU_EVENT_AXI1_RD_TRANS_ACCEPTED = 384,
+ PMU_EVENT_AXI1_RD_TRANS_COMPLETED = 385,
+ PMU_EVENT_AXI1_RD_DATA_BEAT_RECEIVED = 386,
+ PMU_EVENT_AXI1_RD_TRAN_REQ_STALLED = 387,
+ PMU_EVENT_AXI1_WR_TRANS_ACCEPTED = 388,
+ PMU_EVENT_AXI1_WR_TRANS_COMPLETED_M = 389,
+ PMU_EVENT_AXI1_WR_TRANS_COMPLETED_S = 390,
+ PMU_EVENT_AXI1_WR_DATA_BEAT_WRITTEN = 391,
+ PMU_EVENT_AXI1_WR_TRAN_REQ_STALLED = 392,
+ PMU_EVENT_AXI1_WR_DATA_BEAT_STALLED = 393,
+ PMU_EVENT_AXI1_ENABLED_CYCLES = 396,
+ PMU_EVENT_AXI1_RD_STALL_LIMIT = 398,
+ PMU_EVENT_AXI1_WR_STALL_LIMIT = 399,
+ PMU_EVENT_ECC_SB1 = 433,
+};
+
+enum pooling_mode
+{
+ POOLING_MODE_MAX = 0,
+ POOLING_MODE_AVERAGE = 1,
+ POOLING_MODE_REDUCE_SUM = 2,
+};
+
+enum privilege_level
+{
+ PRIVILEGE_LEVEL_USER = 0,
+ PRIVILEGE_LEVEL_PRIVILEGED = 1,
+};
+
+enum round_mode
+{
+ ROUND_MODE_DBL = 0,
+ ROUND_MODE_TRUNCATE = 1,
+ ROUND_MODE_NATURAL = 2,
+};
+
+enum security_level
+{
+ SECURITY_LEVEL_SECURE = 0,
+ SECURITY_LEVEL_NON_SECURE = 1,
+};
+
+enum state
+{
+ STATE_STOPPED = 0,
+ STATE_RUNNING = 1,
+};
+
+enum wd_core_slice_state
+{
+ WD_CORE_SLICE_STATE_HEADER = 0,
+ WD_CORE_SLICE_STATE_PALETTE = 1,
+ WD_CORE_SLICE_STATE_WEIGHTS = 2,
+};
+
+enum wd_ctrl_state
+{
+ WD_CTRL_STATE_IDLE = 0,
+ WD_CTRL_STATE_DRAIN = 1,
+ WD_CTRL_STATE_OFD_INIT = 2,
+ WD_CTRL_STATE_OFD_RUN = 3,
+};
+
+enum weight_order
+{
+ WEIGHT_ORDER_DEPTH_FIRST = 0,
+ WEIGHT_ORDER_PART_KERNEL_FIRST = 1,
+};
+
+#endif
+
+#ifdef NPU_DISASSEMBLE
+
+static const char *acc_format_str[] = {
+ "ACC_FORMAT_I32",
+ "ACC_FORMAT_I40",
+ "ACC_FORMAT_F16",
+};
+
+static const char *activation_clip_range_str[] = {
+ "ACTIVATION_CLIP_RANGE_OFM_PRECISION",
+ "ACTIVATION_CLIP_RANGE_FORCE_UINT8",
+ "ACTIVATION_CLIP_RANGE_FORCE_INT8",
+ "ACTIVATION_CLIP_RANGE_FORCE_INT16",
+};
+
+static const char *activation_format_str[] = {
+ "ACTIVATION_FORMAT_NHWC",
+ "ACTIVATION_FORMAT_NHCWB16",
+};
+
+static const char *activation_function_str[] = {
+ "ACTIVATION_FUNCTION_RELU",
+ "ACTIVATION_FUNCTION_TANH",
+ "ACTIVATION_FUNCTION_SIGMOID",
+ "ACTIVATION_FUNCTION_TABLE_0",
+ "ACTIVATION_FUNCTION_TABLE_1",
+ "ACTIVATION_FUNCTION_TABLE_2",
+ "ACTIVATION_FUNCTION_TABLE_3",
+ "ACTIVATION_FUNCTION_TABLE_4",
+ "ACTIVATION_FUNCTION_TABLE_5",
+ "ACTIVATION_FUNCTION_TABLE_6",
+ "ACTIVATION_FUNCTION_TABLE_7",
+};
+
+static const char *activation_precision_str[] = {
+ "ACTIVATION_PRECISION_B8",
+ "ACTIVATION_PRECISION_B16",
+ "ACTIVATION_PRECISION_B32",
+ "ACTIVATION_PRECISION_B64",
+};
+
+static const char *activation_type_str[] = {
+ "ACTIVATION_TYPE_UNSIGNED",
+ "ACTIVATION_TYPE_SIGNED",
+};
+
+static const char *axi_mem_encoding_str[] = {
+ "AXI_MEM_ENCODING_DEVICE_NON_BUFFERABLE",
+ "AXI_MEM_ENCODING_DEVICE_BUFFERABLE",
+ "AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_NON_BUFFERABLE",
+ "AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_BUFFERABLE",
+ "AXI_MEM_ENCODING_WRITE_THROUGH_NO_ALLOCATE",
+ "AXI_MEM_ENCODING_WRITE_THROUGH_READ_ALLOCATE",
+ "AXI_MEM_ENCODING_WRITE_THROUGH_WRITE_ALLOCATE",
+ "AXI_MEM_ENCODING_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE",
+ "AXI_MEM_ENCODING_WRITE_BACK_NO_ALLOCATE",
+ "AXI_MEM_ENCODING_WRITE_BACK_READ_ALLOCATE",
+ "AXI_MEM_ENCODING_WRITE_BACK_WRITE_ALLOCATE",
+ "AXI_MEM_ENCODING_WRITE_BACK_READ_AND_WRITE_ALLOCATE",
+};
+
+static const char *broadcast_mode_str[] = {
+ "BROADCAST_MODE_DISABLE",
+ "BROADCAST_MODE_ENABLE",
+};
+
+static const char *cmd0_opcode_str[] = {
+ "CMD0_OPCODE_NPU_OP_STOP",
+ "CMD0_OPCODE_NPU_OP_IRQ",
+ "CMD0_OPCODE_NPU_OP_CONV",
+ "CMD0_OPCODE_NPU_OP_DEPTHWISE",
+ "CMD0_OPCODE_NPU_OP_POOL",
+ "CMD0_OPCODE_NPU_OP_ELEMENTWISE",
+ "CMD0_OPCODE_NPU_OP_DMA_START",
+ "CMD0_OPCODE_NPU_OP_DMA_WAIT",
+ "CMD0_OPCODE_NPU_OP_KERNEL_WAIT",
+ "CMD0_OPCODE_NPU_OP_PMU_MASK",
+ "CMD0_OPCODE_NPU_SET_IFM_PAD_TOP",
+ "CMD0_OPCODE_NPU_SET_IFM_PAD_LEFT",
+ "CMD0_OPCODE_NPU_SET_IFM_PAD_RIGHT",
+ "CMD0_OPCODE_NPU_SET_IFM_PAD_BOTTOM",
+ "CMD0_OPCODE_NPU_SET_IFM_DEPTH_M1",
+ "CMD0_OPCODE_NPU_SET_IFM_PRECISION",
+ "CMD0_OPCODE_NPU_SET_IFM_UPSCALE",
+ "CMD0_OPCODE_NPU_SET_IFM_ZERO_POINT",
+ "CMD0_OPCODE_NPU_SET_IFM_WIDTH0_M1",
+ "CMD0_OPCODE_NPU_SET_IFM_HEIGHT0_M1",
+ "CMD0_OPCODE_NPU_SET_IFM_HEIGHT1_M1",
+ "CMD0_OPCODE_NPU_SET_IFM_IB_END",
+ "CMD0_OPCODE_NPU_SET_IFM_REGION",
+ "CMD0_OPCODE_NPU_SET_OFM_WIDTH_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_HEIGHT_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_DEPTH_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_PRECISION",
+ "CMD0_OPCODE_NPU_SET_OFM_BLK_WIDTH_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_BLK_HEIGHT_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_BLK_DEPTH_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_ZERO_POINT",
+ "CMD0_OPCODE_NPU_SET_OFM_WIDTH0_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_HEIGHT0_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_HEIGHT1_M1",
+ "CMD0_OPCODE_NPU_SET_OFM_REGION",
+ "CMD0_OPCODE_NPU_SET_KERNEL_WIDTH_M1",
+ "CMD0_OPCODE_NPU_SET_KERNEL_HEIGHT_M1",
+ "CMD0_OPCODE_NPU_SET_KERNEL_STRIDE",
+ "CMD0_OPCODE_NPU_SET_PARALLEL_MODE",
+ "CMD0_OPCODE_NPU_SET_ACC_FORMAT",
+ "CMD0_OPCODE_NPU_SET_ACTIVATION",
+ "CMD0_OPCODE_NPU_SET_ACTIVATION_MIN",
+ "CMD0_OPCODE_NPU_SET_ACTIVATION_MAX",
+ "CMD0_OPCODE_NPU_SET_WEIGHT_REGION",
+ "CMD0_OPCODE_NPU_SET_SCALE_REGION",
+ "CMD0_OPCODE_NPU_SET_AB_START",
+ "CMD0_OPCODE_NPU_SET_BLOCKDEP",
+ "CMD0_OPCODE_NPU_SET_DMA0_SRC_REGION",
+ "CMD0_OPCODE_NPU_SET_DMA0_DST_REGION",
+ "CMD0_OPCODE_NPU_SET_DMA0_SIZE0",
+ "CMD0_OPCODE_NPU_SET_DMA0_SIZE1",
+ "CMD0_OPCODE_NPU_SET_IFM2_BROADCAST",
+ "CMD0_OPCODE_NPU_SET_IFM2_SCALAR",
+ "CMD0_OPCODE_NPU_SET_IFM2_PRECISION",
+ "CMD0_OPCODE_NPU_SET_IFM2_ZERO_POINT",
+ "CMD0_OPCODE_NPU_SET_IFM2_WIDTH0_M1",
+ "CMD0_OPCODE_NPU_SET_IFM2_HEIGHT0_M1",
+ "CMD0_OPCODE_NPU_SET_IFM2_HEIGHT1_M1",
+ "CMD0_OPCODE_NPU_SET_IFM2_IB_START",
+ "CMD0_OPCODE_NPU_SET_IFM2_REGION",
+};
+
+static const char *cmd1_opcode_str[] = {
+ "CMD1_OPCODE_NPU_SET_IFM_BASE0", "CMD1_OPCODE_NPU_SET_IFM_BASE1", "CMD1_OPCODE_NPU_SET_IFM_BASE2",
+ "CMD1_OPCODE_NPU_SET_IFM_BASE3", "CMD1_OPCODE_NPU_SET_IFM_STRIDE_X", "CMD1_OPCODE_NPU_SET_IFM_STRIDE_Y",
+ "CMD1_OPCODE_NPU_SET_IFM_STRIDE_C", "CMD1_OPCODE_NPU_SET_OFM_BASE0", "CMD1_OPCODE_NPU_SET_OFM_BASE1",
+ "CMD1_OPCODE_NPU_SET_OFM_BASE2", "CMD1_OPCODE_NPU_SET_OFM_BASE3", "CMD1_OPCODE_NPU_SET_OFM_STRIDE_X",
+ "CMD1_OPCODE_NPU_SET_OFM_STRIDE_Y", "CMD1_OPCODE_NPU_SET_OFM_STRIDE_C", "CMD1_OPCODE_NPU_SET_WEIGHT_BASE",
+ "CMD1_OPCODE_NPU_SET_WEIGHT_LENGTH", "CMD1_OPCODE_NPU_SET_SCALE_BASE", "CMD1_OPCODE_NPU_SET_SCALE_LENGTH",
+ "CMD1_OPCODE_NPU_SET_OFM_SCALE", "CMD1_OPCODE_NPU_SET_OPA_SCALE", "CMD1_OPCODE_NPU_SET_OPB_SCALE",
+ "CMD1_OPCODE_NPU_SET_DMA0_SRC", "CMD1_OPCODE_NPU_SET_DMA0_DST", "CMD1_OPCODE_NPU_SET_DMA0_LEN",
+ "CMD1_OPCODE_NPU_SET_DMA0_SKIP0", "CMD1_OPCODE_NPU_SET_DMA0_SKIP1", "CMD1_OPCODE_NPU_SET_IFM2_BASE0",
+ "CMD1_OPCODE_NPU_SET_IFM2_BASE1", "CMD1_OPCODE_NPU_SET_IFM2_BASE2", "CMD1_OPCODE_NPU_SET_IFM2_BASE3",
+ "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_X", "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_Y", "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_C",
+ "CMD1_OPCODE_NPU_SET_WEIGHT1_BASE", "CMD1_OPCODE_NPU_SET_WEIGHT1_LENGTH", "CMD1_OPCODE_NPU_SET_SCALE1_BASE",
+ "CMD1_OPCODE_NPU_SET_SCALE1_LENGTH",
+};
+
+static const char *cmd_ctrl_str[] = {
+ "CMD_CTRL_CMD0_CTRL",
+ "CMD_CTRL_CMD1_CTRL",
+};
+
+static const char *custom_dma_str[] = {
+ "CUSTOM_DMA_NOT_IMPLEMENTED",
+ "CUSTOM_DMA_IMPLEMENTED",
+};
+
+static const char *dma_fault_src_str[] = {
+ "DMA_FAULT_SRC_AXI_M0",
+ "DMA_FAULT_SRC_AXI_M1",
+};
+
+static const char *dma_region_mode_str[] = {
+ "DMA_REGION_MODE_EXTERNAL",
+ "DMA_REGION_MODE_INTERNAL",
+};
+
+static const char *dma_stride_mode_str[] = {
+ "DMA_STRIDE_MODE_D1",
+ "DMA_STRIDE_MODE_D2",
+ "DMA_STRIDE_MODE_D3",
+};
+
+static const char *elementwise_mode_str[] = {
+ "ELEMENTWISE_MODE_MUL",
+ "ELEMENTWISE_MODE_ADD",
+ "ELEMENTWISE_MODE_SUB",
+ "ELEMENTWISE_MODE_MIN",
+ "ELEMENTWISE_MODE_MAX",
+ "ELEMENTWISE_MODE_LRELU",
+ "ELEMENTWISE_MODE_ABS",
+ "ELEMENTWISE_MODE_CLZ",
+ "ELEMENTWISE_MODE_SHR",
+ "ELEMENTWISE_MODE_SHL",
+};
+
+static const char *functional_safety_str[] = {
+ "FUNCTIONAL_SAFETY_NOT_IMPLEMENTED",
+ "FUNCTIONAL_SAFETY_IMPLEMENTED",
+};
+
+static const char *ifm2_operand_order_str[] = {
+ "IFM2_OPERAND_ORDER_ORDER_B",
+ "IFM2_OPERAND_ORDER_ORDER_A",
+};
+
+static const char *ifm_scale_mode_str[] = {
+ "IFM_SCALE_MODE_OPA_OPB_16",
+ "IFM_SCALE_MODE_OPA_32",
+ "IFM_SCALE_MODE_OPB_32",
+};
+
+static const char *ifm_upscale_mode_str[] = {
+ "IFM_UPSCALE_MODE_NONE",
+ "IFM_UPSCALE_MODE_NEAREST",
+ "IFM_UPSCALE_MODE_ZEROS",
+};
+
+static const char *kernel_decomposition_str[] = {
+ "KERNEL_DECOMPOSITION_D8X8",
+ "KERNEL_DECOMPOSITION_D4X4",
+};
+
+static const char *kernel_dilation_str[] = {
+ "KERNEL_DILATION_NONE",
+ "KERNEL_DILATION_X2",
+};
+
+static const char *max_beats_str[] = {
+ "MAX_BEATS_B64",
+ "MAX_BEATS_B128",
+ "MAX_BEATS_B256",
+};
+
+static const char *mem_attr_str[] = {
+ "MEM_ATTR_AXI0_OUTSTANDING_COUNTER0",
+ "MEM_ATTR_AXI0_OUTSTANDING_COUNTER1",
+ "MEM_ATTR_AXI1_OUTSTANDING_COUNTER2",
+ "MEM_ATTR_AXI1_OUTSTANDING_COUNTER3",
+};
+
+static const char *ofm_scale_mode_str[] = {
+ "OFM_SCALE_MODE_PER_CHANNEL",
+ "OFM_SCALE_MODE_GLOBAL",
+};
+
+static const char *parallel_mode_str[] = {
+ "PARALLEL_MODE_SINGLE_CORE",
+ "PARALLEL_MODE_DUAL_CORE_DEPTH",
+};
+
+static const char *pmu_axi_channel_str[] = {
+ "PMU_AXI_CHANNEL_RD_CMD",
+ "PMU_AXI_CHANNEL_RD_IFM",
+ "PMU_AXI_CHANNEL_RD_WEIGHTS",
+ "PMU_AXI_CHANNEL_RD_SCALE_BIAS",
+ "PMU_AXI_CHANNEL_RD_MEM2MEM",
+ "PMU_AXI_CHANNEL_WR_OFM",
+ "PMU_AXI_CHANNEL_WR_MEM2MEM",
+};
+
+static const char *pmu_event_str[] = {
+ "PMU_EVENT_NO_EVENT",
+ "PMU_EVENT_CYCLE",
+ "PMU_EVENT_NPU_IDLE",
+ "PMU_EVENT_CC_STALLED_ON_BLOCKDEP",
+ "PMU_EVENT_CC_STALLED_ON_SHRAM_RECONFIG",
+ "PMU_EVENT_NPU_ACTIVE",
+ "PMU_EVENT_MAC_ACTIVE",
+ "PMU_EVENT_MAC_ACTIVE_8BIT",
+ "PMU_EVENT_MAC_ACTIVE_16BIT",
+ "PMU_EVENT_MAC_DPU_ACTIVE",
+ "PMU_EVENT_MAC_STALLED_BY_WD_ACC",
+ "PMU_EVENT_MAC_STALLED_BY_WD",
+ "PMU_EVENT_MAC_STALLED_BY_ACC",
+ "PMU_EVENT_MAC_STALLED_BY_IB",
+ "PMU_EVENT_MAC_ACTIVE_32BIT",
+ "PMU_EVENT_MAC_STALLED_BY_INT_W",
+ "PMU_EVENT_MAC_STALLED_BY_INT_ACC",
+ "PMU_EVENT_AO_ACTIVE",
+ "PMU_EVENT_AO_ACTIVE_8BIT",
+ "PMU_EVENT_AO_ACTIVE_16BIT",
+ "PMU_EVENT_AO_STALLED_BY_OFMP_OB",
+ "PMU_EVENT_AO_STALLED_BY_OFMP",
+ "PMU_EVENT_AO_STALLED_BY_OB",
+ "PMU_EVENT_AO_STALLED_BY_ACC_IB",
+ "PMU_EVENT_AO_STALLED_BY_ACC",
+ "PMU_EVENT_AO_STALLED_BY_IB",
+ "PMU_EVENT_WD_ACTIVE",
+ "PMU_EVENT_WD_STALLED",
+ "PMU_EVENT_WD_STALLED_BY_WS",
+ "PMU_EVENT_WD_STALLED_BY_WD_BUF",
+ "PMU_EVENT_WD_PARSE_ACTIVE",
+ "PMU_EVENT_WD_PARSE_STALLED",
+ "PMU_EVENT_WD_PARSE_STALLED_IN",
+ "PMU_EVENT_WD_PARSE_STALLED_OUT",
+ "PMU_EVENT_WD_TRANS_WS",
+ "PMU_EVENT_WD_TRANS_WB",
+ "PMU_EVENT_WD_TRANS_DW0",
+ "PMU_EVENT_WD_TRANS_DW1",
+ "PMU_EVENT_AXI0_RD_TRANS_ACCEPTED",
+ "PMU_EVENT_AXI0_RD_TRANS_COMPLETED",
+ "PMU_EVENT_AXI0_RD_DATA_BEAT_RECEIVED",
+ "PMU_EVENT_AXI0_RD_TRAN_REQ_STALLED",
+ "PMU_EVENT_AXI0_WR_TRANS_ACCEPTED",
+ "PMU_EVENT_AXI0_WR_TRANS_COMPLETED_M",
+ "PMU_EVENT_AXI0_WR_TRANS_COMPLETED_S",
+ "PMU_EVENT_AXI0_WR_DATA_BEAT_WRITTEN",
+ "PMU_EVENT_AXI0_WR_TRAN_REQ_STALLED",
+ "PMU_EVENT_AXI0_WR_DATA_BEAT_STALLED",
+ "PMU_EVENT_AXI0_ENABLED_CYCLES",
+ "PMU_EVENT_AXI0_RD_STALL_LIMIT",
+ "PMU_EVENT_AXI0_WR_STALL_LIMIT",
+ "PMU_EVENT_AXI_LATENCY_ANY",
+ "PMU_EVENT_AXI_LATENCY_32",
+ "PMU_EVENT_AXI_LATENCY_64",
+ "PMU_EVENT_AXI_LATENCY_128",
+ "PMU_EVENT_AXI_LATENCY_256",
+ "PMU_EVENT_AXI_LATENCY_512",
+ "PMU_EVENT_AXI_LATENCY_1024",
+ "PMU_EVENT_ECC_DMA",
+ "PMU_EVENT_ECC_SB0",
+ "PMU_EVENT_AXI1_RD_TRANS_ACCEPTED",
+ "PMU_EVENT_AXI1_RD_TRANS_COMPLETED",
+ "PMU_EVENT_AXI1_RD_DATA_BEAT_RECEIVED",
+ "PMU_EVENT_AXI1_RD_TRAN_REQ_STALLED",
+ "PMU_EVENT_AXI1_WR_TRANS_ACCEPTED",
+ "PMU_EVENT_AXI1_WR_TRANS_COMPLETED_M",
+ "PMU_EVENT_AXI1_WR_TRANS_COMPLETED_S",
+ "PMU_EVENT_AXI1_WR_DATA_BEAT_WRITTEN",
+ "PMU_EVENT_AXI1_WR_TRAN_REQ_STALLED",
+ "PMU_EVENT_AXI1_WR_DATA_BEAT_STALLED",
+ "PMU_EVENT_AXI1_ENABLED_CYCLES",
+ "PMU_EVENT_AXI1_RD_STALL_LIMIT",
+ "PMU_EVENT_AXI1_WR_STALL_LIMIT",
+ "PMU_EVENT_ECC_SB1",
+};
+
+static const char *pooling_mode_str[] = {
+ "POOLING_MODE_MAX",
+ "POOLING_MODE_AVERAGE",
+ "POOLING_MODE_REDUCE_SUM",
+};
+
+static const char *privilege_level_str[] = {
+ "PRIVILEGE_LEVEL_USER",
+ "PRIVILEGE_LEVEL_PRIVILEGED",
+};
+
+static const char *round_mode_str[] = {
+ "ROUND_MODE_DBL",
+ "ROUND_MODE_TRUNCATE",
+ "ROUND_MODE_NATURAL",
+};
+
+static const char *security_level_str[] = {
+ "SECURITY_LEVEL_SECURE",
+ "SECURITY_LEVEL_NON_SECURE",
+};
+
+static const char *state_str[] = {
+ "STATE_STOPPED",
+ "STATE_RUNNING",
+};
+
+static const char *wd_core_slice_state_str[] = {
+ "WD_CORE_SLICE_STATE_HEADER",
+ "WD_CORE_SLICE_STATE_PALETTE",
+ "WD_CORE_SLICE_STATE_WEIGHTS",
+};
+
+static const char *wd_ctrl_state_str[] = {
+ "WD_CTRL_STATE_IDLE",
+ "WD_CTRL_STATE_DRAIN",
+ "WD_CTRL_STATE_OFD_INIT",
+ "WD_CTRL_STATE_OFD_RUN",
+};
+
+static const char *weight_order_str[] = {
+ "WEIGHT_ORDER_DEPTH_FIRST",
+ "WEIGHT_ORDER_PART_KERNEL_FIRST",
+};
+
+#endif
+
+// Register type structs
+// id_r - ID register
+struct id_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t version_status : 4; // This is the version of the product
+ uint32_t version_minor : 4; // This is the n for the P part of an RnPn release number
+ uint32_t version_major : 4; // This is the n for the R part of an RnPn release number
+ uint32_t product_major : 4; // Product major ID number (unique per base product)
+ uint32_t arch_patch_rev : 4; // This is the patch number of the architecture version a.b
+ uint32_t
+ arch_minor_rev : 8; // This is the minor architecture version number, b in the architecture version a.b
+ uint32_t
+ arch_major_rev : 4; // This is the major architecture version number, a in the architecture version a.b
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR id_r() : word0(268853249) {}
+ CONSTEXPR id_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ id_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_version_status() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_version_status() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR id_r &set_version_status(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_version_minor() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_version_minor() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR id_r &set_version_minor(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_version_major() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 8));
+ return value;
+ }
+ uint32_t get_version_major() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR id_r &set_version_major(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 8) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_product_major() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 12));
+ return value;
+ }
+ uint32_t get_product_major() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 12));
+ return value;
+ }
+ CONSTEXPR id_r &set_product_major(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 12) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 12);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_arch_patch_rev() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_arch_patch_rev() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR id_r &set_arch_patch_rev(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 16) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_arch_minor_rev() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 8) - 1) & (word0 >> 20));
+ return value;
+ }
+ uint32_t get_arch_minor_rev() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 8) - 1) & (word0 >> 20));
+ return value;
+ }
+ CONSTEXPR id_r &set_arch_minor_rev(uint32_t value)
+ {
+ word0 = (((~((1U << 8) - 1)) << 20) & word0) | ((((1U << 8) - 1) & static_cast<uint32_t>(value)) << 20);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_arch_major_rev() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 28));
+ return value;
+ }
+ uint32_t get_arch_major_rev() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 28));
+ return value;
+ }
+ CONSTEXPR id_r &set_arch_major_rev(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 28) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 28);
+ return *this;
+ }
+#endif
+};
+
+// status_r - Register describes the current operating status of the NPU
+struct status_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t state : 1; // NPU state, 0 = Stopped, 1 = Running
+ uint32_t irq_raised : 1; // Raw IRQ status, 0 = IRQ not raised, 1 = IRQ raised. IRQ is cleared using command
+ // register bit 1
+ uint32_t
+ bus_status : 1; // 0=OK, 1=Bus abort detected and processing halted (NPU will reach IDLE state and not
+ // to start process any more commands/AXI transactions). Can only be cleared by a reset
+ uint32_t reset_status : 1; // Reset is ongoing and only this register can be read (other registers read as 0
+ // and writes are ignored.) A value of 0 means NPU is not being reset and can be
+ // accessed as normal
+ uint32_t
+ cmd_parse_error : 1; // 0=No error 1=Command stream parsing error detected. Can only be cleared by reset
+ uint32_t cmd_end_reached : 1; // 0=Not reached, 1=Reached. Cleared by writing QBASE or QSIZE when NPU is in
+ // stopped state
+ uint32_t pmu_irq_raised : 1; // 0=No PMU IRQ, 1=PMU IRQ raised. Cleared by using command register bit 1
+ uint32_t wd_fault : 1; // Weight decoder state: 0=no fault 1=weight decoder decompression fault. Can only be
+ // cleared by reset
+ uint32_t ecc_fault : 1; // ECC state for internal RAMs: 0=no fault 1=ECC fault signalled. Can only be
+ // cleared by reset
+ uint32_t reserved0 : 2;
+ uint32_t faulting_interface : 1; // Faulting interface on bus abort
+ uint32_t faulting_channel : 4; // Faulting channel on a bus abort. Read: 0=Cmd 1=IFM 2=Weights 3=Scale+Bias
+ // 4=Mem2Mem; Write: 8=OFM 9=Mem2Mem
+ uint32_t irq_history_mask : 16; // IRQ History mask
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR status_r() : word0(8) {}
+ CONSTEXPR status_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ status_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::state get_state() const
+ {
+ NPU_NAMESPACE::state value = static_cast<NPU_NAMESPACE::state>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::state get_state() const volatile
+ {
+ NPU_NAMESPACE::state value = static_cast<NPU_NAMESPACE::state>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR status_r &set_state(NPU_NAMESPACE::state value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_irq_raised() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_irq_raised() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR status_r &set_irq_raised(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_bus_status() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_bus_status() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR status_r &set_bus_status(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_reset_status() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_reset_status() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR status_r &set_reset_status(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_parse_error() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_cmd_parse_error() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR status_r &set_cmd_parse_error(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_end_reached() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ uint32_t get_cmd_end_reached() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ CONSTEXPR status_r &set_cmd_end_reached(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 5);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_pmu_irq_raised() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ uint32_t get_pmu_irq_raised() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ CONSTEXPR status_r &set_pmu_irq_raised(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 6);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wd_fault() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ uint32_t get_wd_fault() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ CONSTEXPR status_r &set_wd_fault(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 7);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ecc_fault() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ uint32_t get_ecc_fault() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR status_r &set_ecc_fault(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::dma_fault_src get_faulting_interface() const
+ {
+ NPU_NAMESPACE::dma_fault_src value = static_cast<NPU_NAMESPACE::dma_fault_src>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ NPU_NAMESPACE::dma_fault_src get_faulting_interface() const volatile
+ {
+ NPU_NAMESPACE::dma_fault_src value = static_cast<NPU_NAMESPACE::dma_fault_src>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ CONSTEXPR status_r &set_faulting_interface(NPU_NAMESPACE::dma_fault_src value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 11);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_faulting_channel() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 12));
+ return value;
+ }
+ uint32_t get_faulting_channel() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 12));
+ return value;
+ }
+ CONSTEXPR status_r &set_faulting_channel(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 12) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 12);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_irq_history_mask() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 16) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_irq_history_mask() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 16) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR status_r &set_irq_history_mask(uint32_t value)
+ {
+ word0 = (((~((1U << 16) - 1)) << 16) & word0) | ((((1U << 16) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+#endif
+};
+
+// cmd_r - Command register, reads as last written command
+struct cmd_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t transition_to_running_state : 1; // Write 1 to transition the NPU to running state. Writing 0 has
+ // no effect
+ uint32_t clear_irq : 1; // Write 1 to clear the IRQ status in the STATUS register. Writing 0 has no effect
+ uint32_t clock_q_enable : 1; // Write 1 to this bit to enable clock off using clock q-interface and enable
+ // the requester clock gate
+ uint32_t power_q_enable : 1; // Write 1 to this bit to enable power off using power q-interface
+ uint32_t
+ stop_request : 1; // Write 1 to this bit to request STOP after completing any already-started commands
+ uint32_t reserved0 : 11;
+ uint32_t clear_irq_history : 16; // Clears the IRQ history mask
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR cmd_r() : word0(12) {}
+ CONSTEXPR cmd_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ cmd_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_transition_to_running_state() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_transition_to_running_state() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR cmd_r &set_transition_to_running_state(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_clear_irq() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_clear_irq() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR cmd_r &set_clear_irq(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_clock_q_enable() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_clock_q_enable() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR cmd_r &set_clock_q_enable(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_power_q_enable() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_power_q_enable() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR cmd_r &set_power_q_enable(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_stop_request() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_stop_request() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR cmd_r &set_stop_request(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_clear_irq_history() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 16) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_clear_irq_history() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 16) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR cmd_r &set_clear_irq_history(uint32_t value)
+ {
+ word0 = (((~((1U << 16) - 1)) << 16) & word0) | ((((1U << 16) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+#endif
+};
+
+// reset_r - Request Reset and new security mode
+struct reset_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t pending_CPL : 1; // Current privilege level 0=User 1=Privileged
+ uint32_t pending_CSL : 1; // Current security level 0=Secure 1=Non secure
+ uint32_t reserved0 : 30;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR reset_r() : word0(0) {}
+ CONSTEXPR reset_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ reset_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::privilege_level get_pending_CPL() const
+ {
+ NPU_NAMESPACE::privilege_level value =
+ static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::privilege_level get_pending_CPL() const volatile
+ {
+ NPU_NAMESPACE::privilege_level value =
+ static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR reset_r &set_pending_CPL(NPU_NAMESPACE::privilege_level value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::security_level get_pending_CSL() const
+ {
+ NPU_NAMESPACE::security_level value =
+ static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ NPU_NAMESPACE::security_level get_pending_CSL() const volatile
+ {
+ NPU_NAMESPACE::security_level value =
+ static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR reset_r &set_pending_CSL(NPU_NAMESPACE::security_level value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+#endif
+};
+
+// qbase_r - Base address of command queue. The address is 4 byte aligned
+struct qbase_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR qbase_r() : word0(0), word1(0) {}
+ CONSTEXPR qbase_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ qbase_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// qread_r - Read offset in the command stream in bytes. Multiple of 4 in the range 0 to 16 MB
+struct qread_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t QREAD : 32; // The read offset of the current command under execution
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR qread_r() : word0(0) {}
+ CONSTEXPR qread_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ qread_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_QREAD() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_QREAD() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR qread_r &set_QREAD(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// qconfig_r - AXI configuration for the command stream in the range 0-3. Same encoding as for REGIONCFG
+struct qconfig_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t cmd_region0 : 2; // Command region configuration
+ uint32_t reserved0 : 30;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR qconfig_r() : word0(0) {}
+ CONSTEXPR qconfig_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ qconfig_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_cmd_region0() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_cmd_region0() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR qconfig_r &set_cmd_region0(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+#endif
+};
+
+// qsize_r - Size of the command stream in bytes. Multiple of 4 in the range 0 to 16 MB
+struct qsize_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t QSIZE : 32; // Size of the next command stream to be executed by the NPU
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR qsize_r() : word0(0) {}
+ CONSTEXPR qsize_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ qsize_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_QSIZE() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_QSIZE() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR qsize_r &set_QSIZE(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// prot_r - Protection level configured for the NPU when acting as an AXI requester
+struct prot_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t active_CPL : 1; // Current privilege level 0=User 1=Privileged
+ uint32_t active_CSL : 1; // Current security level 0=Secure 1=Non secure
+ uint32_t reserved0 : 30;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR prot_r() : word0(0) {}
+ CONSTEXPR prot_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ prot_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::privilege_level get_active_CPL() const
+ {
+ NPU_NAMESPACE::privilege_level value =
+ static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::privilege_level get_active_CPL() const volatile
+ {
+ NPU_NAMESPACE::privilege_level value =
+ static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR prot_r &set_active_CPL(NPU_NAMESPACE::privilege_level value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::security_level get_active_CSL() const
+ {
+ NPU_NAMESPACE::security_level value =
+ static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ NPU_NAMESPACE::security_level get_active_CSL() const volatile
+ {
+ NPU_NAMESPACE::security_level value =
+ static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR prot_r &set_active_CSL(NPU_NAMESPACE::security_level value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+#endif
+};
+
+// config_r - RTL configuration
+struct config_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t macs_per_cc : 4; // The log2(macs/clock cycle)
+ uint32_t cmd_stream_version : 4; // command stream version accepted by this NPU
+ uint32_t shram_size : 8; // Total size in KB of internal SHRAM
+ uint32_t reserved0 : 10;
+ uint32_t functional_safety : 1; // Functional safety configuration
+ uint32_t custom_dma : 1; // Custom DMA configuration
+ uint32_t product : 4; // Product configuration
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR config_r() : word0(268435456) {}
+ CONSTEXPR config_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ config_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_macs_per_cc() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_macs_per_cc() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR config_r &set_macs_per_cc(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_stream_version() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_cmd_stream_version() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR config_r &set_cmd_stream_version(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_shram_size() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 8) - 1) & (word0 >> 8));
+ return value;
+ }
+ uint32_t get_shram_size() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 8) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR config_r &set_shram_size(uint32_t value)
+ {
+ word0 = (((~((1U << 8) - 1)) << 8) & word0) | ((((1U << 8) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::functional_safety get_functional_safety() const
+ {
+ NPU_NAMESPACE::functional_safety value =
+ static_cast<NPU_NAMESPACE::functional_safety>(((1U << 1) - 1) & (word0 >> 26));
+ return value;
+ }
+ NPU_NAMESPACE::functional_safety get_functional_safety() const volatile
+ {
+ NPU_NAMESPACE::functional_safety value =
+ static_cast<NPU_NAMESPACE::functional_safety>(((1U << 1) - 1) & (word0 >> 26));
+ return value;
+ }
+ CONSTEXPR config_r &set_functional_safety(NPU_NAMESPACE::functional_safety value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 26) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 26);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::custom_dma get_custom_dma() const
+ {
+ NPU_NAMESPACE::custom_dma value = static_cast<NPU_NAMESPACE::custom_dma>(((1U << 1) - 1) & (word0 >> 27));
+ return value;
+ }
+ NPU_NAMESPACE::custom_dma get_custom_dma() const volatile
+ {
+ NPU_NAMESPACE::custom_dma value = static_cast<NPU_NAMESPACE::custom_dma>(((1U << 1) - 1) & (word0 >> 27));
+ return value;
+ }
+ CONSTEXPR config_r &set_custom_dma(NPU_NAMESPACE::custom_dma value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 27) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 27);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_product() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 28));
+ return value;
+ }
+ uint32_t get_product() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 4) - 1) & (word0 >> 28));
+ return value;
+ }
+ CONSTEXPR config_r &set_product(uint32_t value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 28) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 28);
+ return *this;
+ }
+#endif
+};
+
+// lock_r - Lock register. This register is designed for driver use and does not affect NPU functionality
+struct lock_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t LOCK : 32; // 32 bit value for LOCK configuration
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR lock_r() : word0(0) {}
+ CONSTEXPR lock_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ lock_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_LOCK() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_LOCK() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR lock_r &set_LOCK(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// regioncfg_r - Region memory type configuration. Bits[2*k+1:2*k] give the memory type for REGION[k]
+struct regioncfg_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t region0 : 2; // Bits for Region0 Configuration
+ uint32_t region1 : 2; // Bits for Region1 Configuration
+ uint32_t region2 : 2; // Bits for Region2 Configuration
+ uint32_t region3 : 2; // Bits for Region3 Configuration
+ uint32_t region4 : 2; // Bits for Region4 Configuration
+ uint32_t region5 : 2; // Bits for Region5 Configuration
+ uint32_t region6 : 2; // Bits for Region6 Configuration
+ uint32_t region7 : 2; // Bits for Region7 Configuration
+ uint32_t reserved0 : 16;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR regioncfg_r() : word0(0) {}
+ CONSTEXPR regioncfg_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ regioncfg_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region0() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region0() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region0(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region1() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 2));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region1() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region1(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 2) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region2() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 4));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region2() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region2(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 4) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region3() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 6));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region3() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 6));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region3(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 6) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 6);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region4() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 8));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region4() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region4(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 8) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region5() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 10));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region5() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 10));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region5(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 10) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 10);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region6() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 12));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region6() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 12));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region6(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 12) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 12);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::mem_attr get_region7() const
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 14));
+ return value;
+ }
+ NPU_NAMESPACE::mem_attr get_region7() const volatile
+ {
+ NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 14));
+ return value;
+ }
+ CONSTEXPR regioncfg_r &set_region7(NPU_NAMESPACE::mem_attr value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 14) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 14);
+ return *this;
+ }
+#endif
+};
+
+// axi_limit0_r - AXI limits for port 0 counter 0
+struct axi_limit0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t max_beats : 2; // Burst split alignment
+ uint32_t reserved0 : 2;
+ uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
+ uint32_t reserved1 : 8;
+ uint32_t
+ max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 63
+ uint32_t reserved2 : 2;
+ uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions - 1 in range
+ // 0 to 31
+ uint32_t reserved3 : 3;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR axi_limit0_r() : word0(0) {}
+ CONSTEXPR axi_limit0_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ axi_limit0_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::max_beats get_max_beats() const volatile
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR axi_limit0_r &set_max_beats(NPU_NAMESPACE::max_beats value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR axi_limit0_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_read_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_max_outstanding_read_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR axi_limit0_r &set_max_outstanding_read_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 6) - 1)) << 16) & word0) | ((((1U << 6) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_write_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ uint32_t get_max_outstanding_write_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ CONSTEXPR axi_limit0_r &set_max_outstanding_write_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 5) - 1)) << 24) & word0) | ((((1U << 5) - 1) & static_cast<uint32_t>(value)) << 24);
+ return *this;
+ }
+#endif
+};
+
+// axi_limit1_r - AXI limits for port 0 counter 1
+struct axi_limit1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t max_beats : 2; // Burst split alignment
+ uint32_t reserved0 : 2;
+ uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
+ uint32_t reserved1 : 8;
+ uint32_t
+ max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 63
+ uint32_t reserved2 : 2;
+ uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions - 1 in range
+ // 0 to 31
+ uint32_t reserved3 : 3;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR axi_limit1_r() : word0(0) {}
+ CONSTEXPR axi_limit1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ axi_limit1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::max_beats get_max_beats() const volatile
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR axi_limit1_r &set_max_beats(NPU_NAMESPACE::max_beats value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR axi_limit1_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_read_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_max_outstanding_read_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR axi_limit1_r &set_max_outstanding_read_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 6) - 1)) << 16) & word0) | ((((1U << 6) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_write_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ uint32_t get_max_outstanding_write_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ CONSTEXPR axi_limit1_r &set_max_outstanding_write_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 5) - 1)) << 24) & word0) | ((((1U << 5) - 1) & static_cast<uint32_t>(value)) << 24);
+ return *this;
+ }
+#endif
+};
+
+// axi_limit2_r - AXI limits for port 1 counter 2
+struct axi_limit2_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t max_beats : 2; // Burst split alignment
+ uint32_t reserved0 : 2;
+ uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
+ uint32_t reserved1 : 8;
+ uint32_t
+ max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 63
+ uint32_t reserved2 : 2;
+ uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions - 1 in range
+ // 0 to 31
+ uint32_t reserved3 : 3;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR axi_limit2_r() : word0(0) {}
+ CONSTEXPR axi_limit2_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ axi_limit2_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::max_beats get_max_beats() const volatile
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR axi_limit2_r &set_max_beats(NPU_NAMESPACE::max_beats value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR axi_limit2_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_read_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_max_outstanding_read_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR axi_limit2_r &set_max_outstanding_read_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 6) - 1)) << 16) & word0) | ((((1U << 6) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_write_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ uint32_t get_max_outstanding_write_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ CONSTEXPR axi_limit2_r &set_max_outstanding_write_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 5) - 1)) << 24) & word0) | ((((1U << 5) - 1) & static_cast<uint32_t>(value)) << 24);
+ return *this;
+ }
+#endif
+};
+
+// axi_limit3_r - AXI limits for port 1 counter 3
+struct axi_limit3_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t max_beats : 2; // Burst split alignment
+ uint32_t reserved0 : 2;
+ uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
+ uint32_t reserved1 : 8;
+ uint32_t
+ max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 63
+ uint32_t reserved2 : 2;
+ uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions - 1 in range
+ // 0 to 31
+ uint32_t reserved3 : 3;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR axi_limit3_r() : word0(0) {}
+ CONSTEXPR axi_limit3_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ axi_limit3_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::max_beats get_max_beats() const volatile
+ {
+ NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR axi_limit3_r &set_max_beats(NPU_NAMESPACE::max_beats value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
+ {
+ NPU_NAMESPACE::axi_mem_encoding value =
+ static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR axi_limit3_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_read_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_max_outstanding_read_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 6) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR axi_limit3_r &set_max_outstanding_read_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 6) - 1)) << 16) & word0) | ((((1U << 6) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_max_outstanding_write_m1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ uint32_t get_max_outstanding_write_m1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 24));
+ return value;
+ }
+ CONSTEXPR axi_limit3_r &set_max_outstanding_write_m1(uint32_t value)
+ {
+ word0 = (((~((1U << 5) - 1)) << 24) & word0) | ((((1U << 5) - 1) & static_cast<uint32_t>(value)) << 24);
+ return *this;
+ }
+#endif
+};
+
+// basep_r - The driver can use this address to relocate the command stream on region 0
+struct basep_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR basep_r() : word0(0), word1(0) {}
+ CONSTEXPR basep_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ basep_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// wd_status_r - WD_STATUS
+struct wd_status_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t core_slice_state : 2; // WD core slice parser state
+ uint32_t core_idle : 1; // Core idle
+ uint32_t ctrl_state : 2; // WD control state
+ uint32_t ctrl_idle : 1; // All stripe jobs idle (all weights consumed)
+ uint32_t write_buf_index0 : 3; // current write index for next data from core
+ uint32_t write_buf_valid0 : 1; // write buf valid (full)
+ uint32_t write_buf_idle0 : 1; // write buf idle (empty)
+ uint32_t write_buf_index1 : 3; // current write index for next data from core
+ uint32_t write_buf_valid1 : 1; // write buf valid (full)
+ uint32_t write_buf_idle1 : 1; // write buf idle (empty)
+ uint32_t events : 12; // WD events mapped as appendix A
+ uint32_t reserved0 : 4;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR wd_status_r() : word0(0) {}
+ CONSTEXPR wd_status_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ wd_status_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::wd_core_slice_state get_core_slice_state() const
+ {
+ NPU_NAMESPACE::wd_core_slice_state value =
+ static_cast<NPU_NAMESPACE::wd_core_slice_state>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::wd_core_slice_state get_core_slice_state() const volatile
+ {
+ NPU_NAMESPACE::wd_core_slice_state value =
+ static_cast<NPU_NAMESPACE::wd_core_slice_state>(((1U << 2) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_core_slice_state(NPU_NAMESPACE::wd_core_slice_state value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_core_idle() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_core_idle() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_core_idle(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::wd_ctrl_state get_ctrl_state() const
+ {
+ NPU_NAMESPACE::wd_ctrl_state value = static_cast<NPU_NAMESPACE::wd_ctrl_state>(((1U << 2) - 1) & (word0 >> 3));
+ return value;
+ }
+ NPU_NAMESPACE::wd_ctrl_state get_ctrl_state() const volatile
+ {
+ NPU_NAMESPACE::wd_ctrl_state value = static_cast<NPU_NAMESPACE::wd_ctrl_state>(((1U << 2) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_ctrl_state(NPU_NAMESPACE::wd_ctrl_state value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 3) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ctrl_idle() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ uint32_t get_ctrl_idle() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_ctrl_idle(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 5);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_write_buf_index0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 3) - 1) & (word0 >> 6));
+ return value;
+ }
+ uint32_t get_write_buf_index0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 3) - 1) & (word0 >> 6));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_write_buf_index0(uint32_t value)
+ {
+ word0 = (((~((1U << 3) - 1)) << 6) & word0) | ((((1U << 3) - 1) & static_cast<uint32_t>(value)) << 6);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_write_buf_valid0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ uint32_t get_write_buf_valid0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_write_buf_valid0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 9);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_write_buf_idle0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ uint32_t get_write_buf_idle0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_write_buf_idle0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 10);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_write_buf_index1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 3) - 1) & (word0 >> 11));
+ return value;
+ }
+ uint32_t get_write_buf_index1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 3) - 1) & (word0 >> 11));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_write_buf_index1(uint32_t value)
+ {
+ word0 = (((~((1U << 3) - 1)) << 11) & word0) | ((((1U << 3) - 1) & static_cast<uint32_t>(value)) << 11);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_write_buf_valid1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ uint32_t get_write_buf_valid1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_write_buf_valid1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 14);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_write_buf_idle1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 15));
+ return value;
+ }
+ uint32_t get_write_buf_idle1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 15));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_write_buf_idle1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 15);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_events() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 12) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_events() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 12) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR wd_status_r &set_events(uint32_t value)
+ {
+ word0 = (((~((1U << 12) - 1)) << 16) & word0) | ((((1U << 12) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+#endif
+};
+
+// mac_status_r - MAC_STATUS
+struct mac_status_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t block_cfg_valid : 1; // MAC has a valid block configuration
+ uint32_t trav_en : 1; // MAC is doing block traversal
+ uint32_t wait_for_ib : 1; // MAC is waiting for an Input Buffer to become available
+ uint32_t wait_for_acc_buf : 1; // MAC is waiting for an Accumulator Buffer to become available
+ uint32_t wait_for_weights : 1; // MAC is waiting for a Weight Block to become available
+ uint32_t stall_stripe : 1; // MAC is stalling between two stripes
+ uint32_t dw_sel : 1; // Currently used weight interface in MAC AI
+ uint32_t wait_for_dw0_ready : 1; // MAC AI is waiting for MAC DPU to send dw0_ready to WD
+ uint32_t wait_for_dw1_ready : 1; // MAC AI is waiting for MAC DPU to send dw1_ready to WD
+ uint32_t acc_buf_sel_ai : 1; // Currently used AccBuf interface in MAC AI
+ uint32_t wait_for_acc0_ready : 1; // MAC AI is waiting for acc0_ready from AO
+ uint32_t wait_for_acc1_ready : 1; // MAC AI is waiting for acc1_ready from AO
+ uint32_t acc_buf_sel_aa : 1; // Currently used AccBuf interface in MAC ADDER_ARRAY
+ uint32_t acc0_valid : 1; // MAC outgoing value of acc0_valid
+ uint32_t acc1_valid : 1; // MAC outgoing value of acc1_valid
+ uint32_t reserved0 : 1;
+ uint32_t events : 11; // Mapped to MAC events described in Appendix A
+ uint32_t reserved1 : 5;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR mac_status_r() : word0(0) {}
+ CONSTEXPR mac_status_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ mac_status_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_block_cfg_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_block_cfg_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_block_cfg_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_trav_en() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_trav_en() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_trav_en(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wait_for_ib() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_wait_for_ib() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_wait_for_ib(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wait_for_acc_buf() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_wait_for_acc_buf() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_wait_for_acc_buf(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wait_for_weights() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_wait_for_weights() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_wait_for_weights(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_stall_stripe() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ uint32_t get_stall_stripe() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_stall_stripe(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 5);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_dw_sel() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ uint32_t get_dw_sel() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_dw_sel(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 6);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wait_for_dw0_ready() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ uint32_t get_wait_for_dw0_ready() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_wait_for_dw0_ready(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 7);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wait_for_dw1_ready() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ uint32_t get_wait_for_dw1_ready() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_wait_for_dw1_ready(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_acc_buf_sel_ai() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ uint32_t get_acc_buf_sel_ai() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_acc_buf_sel_ai(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 9);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wait_for_acc0_ready() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ uint32_t get_wait_for_acc0_ready() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_wait_for_acc0_ready(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 10);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wait_for_acc1_ready() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ uint32_t get_wait_for_acc1_ready() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_wait_for_acc1_ready(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 11);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_acc_buf_sel_aa() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 12));
+ return value;
+ }
+ uint32_t get_acc_buf_sel_aa() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 12));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_acc_buf_sel_aa(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 12);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_acc0_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 13));
+ return value;
+ }
+ uint32_t get_acc0_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 13));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_acc0_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 13);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_acc1_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ uint32_t get_acc1_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_acc1_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 14);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_events() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 11) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_events() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 11) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR mac_status_r &set_events(uint32_t value)
+ {
+ word0 = (((~((1U << 11) - 1)) << 16) & word0) | ((((1U << 11) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+#endif
+};
+
+// ao_status_r - AO_STATUS
+struct ao_status_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t cmd_sbw_valid : 1; // Block command to shared buffer write module is valid
+ uint32_t cmd_act_valid : 1; // Block command to activation function module is valid
+ uint32_t cmd_ctl_valid : 1; // Block command to control module is valid
+ uint32_t cmd_scl_valid : 1; // Block command to scale module is valid
+ uint32_t cmd_sbr_valid : 1; // Block command to shared buffer read module is valid
+ uint32_t cmd_ofm_valid : 1; // Block command to ofm parameter module is valid
+ uint32_t blk_cmd_ready : 1; // Ready to accept block command
+ uint32_t blk_cmd_valid : 1; // Block command from CC is valid
+ uint32_t reserved0 : 8;
+ uint32_t events : 8; // Mapped to AO events described in Appendix A
+ uint32_t reserved1 : 8;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ao_status_r() : word0(0) {}
+ CONSTEXPR ao_status_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ao_status_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_sbw_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_cmd_sbw_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_cmd_sbw_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_act_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_cmd_act_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_cmd_act_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_ctl_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_cmd_ctl_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_cmd_ctl_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_scl_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_cmd_scl_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_cmd_scl_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_sbr_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_cmd_sbr_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_cmd_sbr_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_ofm_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ uint32_t get_cmd_ofm_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_cmd_ofm_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 5);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_blk_cmd_ready() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ uint32_t get_blk_cmd_ready() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_blk_cmd_ready(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 6);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_blk_cmd_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ uint32_t get_blk_cmd_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_blk_cmd_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 7);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_events() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 8) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_events() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 8) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR ao_status_r &set_events(uint32_t value)
+ {
+ word0 = (((~((1U << 8) - 1)) << 16) & word0) | ((((1U << 8) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+#endif
+};
+
+// dma_status0_r - DMA_STATUS0
+struct dma_status0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t cmd_idle : 1; // When this bit is high means that the CMD block is not busy in generating addresses
+ // for a CMD job
+ uint32_t ifm_idle : 1; // When this bit is high means that there are no ongoing IFM jobs
+ uint32_t wgt_idle_c0 : 1; // When this bit is high means that the WGT block is not busy in generating
+ // addresses for a WGT job
+ uint32_t bas_idle_c0 : 1; // When this bit is high means that the BAS block is not busy in generating
+ // addresses for a BAS job
+ uint32_t m2m_idle : 1; // When this bit is high means that there are no ongoing M2M jobs
+ uint32_t ofm_idle : 1; // When this bit is high means that there are no ongoing OFM jobs
+ uint32_t halt_req : 1; // CPM has requested to HALT AXI bus before soft reset
+ uint32_t halt_ack : 1; // DMA is in condition to halt the AXI bus since there are no pending transactions
+ uint32_t pause_req : 1; // CC has requested to pause the AXI
+ uint32_t pause_ack : 1; // DMA is in condition to pause the AXI bus since there are no pending transactions
+ uint32_t ib0_ai_valid_c0 : 1; // Data for AI to be read in IFM input buffer 0 - Core 0
+ uint32_t ib0_ai_ready_c0 : 1; // Data consumed from AI in IFM input buffer 0 - Core 0
+ uint32_t ib1_ai_valid_c0 : 1; // Data for AI to be read in IFM input buffer 1 - Core 0
+ uint32_t ib1_ai_ready_c0 : 1; // Data consumed from AI in IFM input buffer 1 - Core 0
+ uint32_t ib0_ao_valid_c0 : 1; // Data for AO to be read in IFM input buffer 0 - Core 0
+ uint32_t ib0_ao_ready_c0 : 1; // Data consumed from AO in IFM input buffer 0 - Core 0
+ uint32_t ib1_ao_valid_c0 : 1; // Data for AO to be read in IFM input buffer 0 - Core 0
+ uint32_t ib1_ao_ready_c0 : 1; // Data consumed from AO in IFM input buffer 1 - Core 0
+ uint32_t ob0_valid_c0 : 1; // Data for DMA ready to be consumed in OFM output buffer 0 - Core 0
+ uint32_t ob0_ready_c0 : 1; // Data consumed from DMA in OFM output buffer 0 - Core 0
+ uint32_t ob1_valid_c0 : 1; // Data for DMA ready to be consumed in OFM output buffer 1 - Core 0
+ uint32_t ob1_ready_c0 : 1; // Data consumed from DMA in OFM output buffer 1 - Core 0
+ uint32_t cmd_valid : 1; // New command word for CC to be consumed
+ uint32_t cmd_ready : 1; // command word consumed by CC
+ uint32_t wd_bitstream_valid_c0 : 1; // New weight word for WD to be consumed - Core 0
+ uint32_t wd_bitstream_ready_c0 : 1; // Weight word consumed by WD - Core 0
+ uint32_t bs_bitstream_valid_c0 : 1; // New BaS word for AO to be consumed - Core 0
+ uint32_t bs_bitstream_ready_c0 : 1; // BaS word consumed by AO - Core 0
+ uint32_t axi0_ar_stalled : 1; // Read transfer request stalled on arready low AXI0 (due to memory system)
+ uint32_t axi0_rd_limit_stall : 1; // Read stalled due to one AXI0 limit counter being reached
+ uint32_t axi0_aw_stalled : 1; // Write transfer request stalled on awready low AXI0 (due to memory system)
+ uint32_t axi0_w_stalled : 1; // Write transfer stalled on awready low AXI0 (due to memory system)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma_status0_r() : word0(0) {}
+ CONSTEXPR dma_status0_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma_status0_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_idle() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_cmd_idle() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_cmd_idle(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ifm_idle() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_ifm_idle() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ifm_idle(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wgt_idle_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_wgt_idle_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_wgt_idle_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_bas_idle_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_bas_idle_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_bas_idle_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_m2m_idle() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_m2m_idle() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_m2m_idle(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ofm_idle() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ uint32_t get_ofm_idle() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ofm_idle(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 5);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_halt_req() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ uint32_t get_halt_req() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_halt_req(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 6);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_halt_ack() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ uint32_t get_halt_ack() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_halt_ack(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 7);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_pause_req() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ uint32_t get_pause_req() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_pause_req(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_pause_ack() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ uint32_t get_pause_ack() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_pause_ack(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 9);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ai_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ uint32_t get_ib0_ai_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib0_ai_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 10);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ai_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ uint32_t get_ib0_ai_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib0_ai_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 11);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ai_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 12));
+ return value;
+ }
+ uint32_t get_ib1_ai_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 12));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib1_ai_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 12);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ai_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 13));
+ return value;
+ }
+ uint32_t get_ib1_ai_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 13));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib1_ai_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 13);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ao_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ uint32_t get_ib0_ao_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib0_ao_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 14);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ao_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 15));
+ return value;
+ }
+ uint32_t get_ib0_ao_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 15));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib0_ao_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 15);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ao_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_ib1_ao_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib1_ao_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 16) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ao_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 17));
+ return value;
+ }
+ uint32_t get_ib1_ao_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 17));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ib1_ao_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 17) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 17);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob0_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 18));
+ return value;
+ }
+ uint32_t get_ob0_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 18));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ob0_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 18) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 18);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob0_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 19));
+ return value;
+ }
+ uint32_t get_ob0_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 19));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ob0_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 19) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 19);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob1_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 20));
+ return value;
+ }
+ uint32_t get_ob1_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 20));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ob1_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 20) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 20);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob1_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 21));
+ return value;
+ }
+ uint32_t get_ob1_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 21));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_ob1_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 21) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 21);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_valid() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 22));
+ return value;
+ }
+ uint32_t get_cmd_valid() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 22));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_cmd_valid(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 22) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 22);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cmd_ready() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 23));
+ return value;
+ }
+ uint32_t get_cmd_ready() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 23));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_cmd_ready(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 23) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 23);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wd_bitstream_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 24));
+ return value;
+ }
+ uint32_t get_wd_bitstream_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 24));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_wd_bitstream_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 24) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 24);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wd_bitstream_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 25));
+ return value;
+ }
+ uint32_t get_wd_bitstream_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 25));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_wd_bitstream_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 25) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 25);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_bs_bitstream_valid_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 26));
+ return value;
+ }
+ uint32_t get_bs_bitstream_valid_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 26));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_bs_bitstream_valid_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 26) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 26);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_bs_bitstream_ready_c0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 27));
+ return value;
+ }
+ uint32_t get_bs_bitstream_ready_c0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 27));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_bs_bitstream_ready_c0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 27) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 27);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi0_ar_stalled() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 28));
+ return value;
+ }
+ uint32_t get_axi0_ar_stalled() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 28));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_axi0_ar_stalled(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 28) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 28);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi0_rd_limit_stall() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 29));
+ return value;
+ }
+ uint32_t get_axi0_rd_limit_stall() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 29));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_axi0_rd_limit_stall(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 29) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 29);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi0_aw_stalled() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 30));
+ return value;
+ }
+ uint32_t get_axi0_aw_stalled() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 30));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_axi0_aw_stalled(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 30) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 30);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi0_w_stalled() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ uint32_t get_axi0_w_stalled() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ CONSTEXPR dma_status0_r &set_axi0_w_stalled(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
+ return *this;
+ }
+#endif
+};
+
+// dma_status1_r - DMA_STATUS1
+struct dma_status1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t axi0_wr_limit_stall : 1; // Write stalled due to one AXI0 limit counter being reached
+ uint32_t axi1_ar_stalled : 1; // Read transfer request stalled on arready low AXI1 (due to memory system)
+ uint32_t axi1_rd_limit_stall : 1; // Read stalled due to one AXI1 limit counter being reached
+ uint32_t axi1_wr_stalled : 1; // Write transfer request stalled on awready low AXI1 (due to memory system)
+ uint32_t axi1_w_stalled : 1; // Write transfer stalled on wready low AXI1 (due to memory system)
+ uint32_t axi1_wr_limit_stall : 1; // Write stalled due to one AXI1 limit counter being reached
+ uint32_t wgt_idle_c1 : 1; // When this bit is high means that the WGT block is not busy in generating
+ // addresses for a WGT job
+ uint32_t bas_idle_c1 : 1; // When this bit is high means that the BAS block is not busy in generating
+ // addresses for a BAS job
+ uint32_t ib0_ai_valid_c1 : 1; // Data for AI to be read in IFM input buffer 0 - Core 1
+ uint32_t ib0_ai_ready_c1 : 1; // Data consumed from AI in IFM input buffer 0 - Core 1
+ uint32_t ib1_ai_valid_c1 : 1; // Data for AI to be read in IFM input buffer 1 - Core 1
+ uint32_t ib1_ai_ready_c1 : 1; // Data consumed from AI in IFM input buffer 1 - Core 1
+ uint32_t ib0_ao_valid_c1 : 1; // Data for AO to be read in IFM input buffer 0 - Core 1
+ uint32_t ib0_ao_ready_c1 : 1; // Data consumed from AO in IFM input buffer 0 - Core 1
+ uint32_t ib1_ao_valid_c1 : 1; // Data for AO to be read in IFM input buffer 0 - Core 1
+ uint32_t ib1_ao_ready_c1 : 1; // Data consumed from AO in IFM input buffer 1 - Core 1
+ uint32_t ob0_valid_c1 : 1; // Data for DMA ready to be consumed in OFM output buffer 0 - Core 1
+ uint32_t ob0_ready_c1 : 1; // Data consumed from DMA in OFM output buffer 0 - Core 1
+ uint32_t ob1_valid_c1 : 1; // Data for DMA ready to be consumed in OFM output buffer 1 - Core 1
+ uint32_t ob1_ready_c1 : 1; // Data consumed from DMA in OFM output buffer 1 - Core 1
+ uint32_t wd_bitstream_valid_c1 : 1; // New weight word for WD to be consumed - Core 1
+ uint32_t wd_bitstream_ready_c1 : 1; // Weight word consumed by WD - Core 1
+ uint32_t bs_bitstream_valid_c1 : 1; // New BaS word for AO to be consumed - Core 1
+ uint32_t bs_bitstream_ready_c1 : 1; // BaS word consumed by AO - Core 1
+ uint32_t reserved0 : 8;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma_status1_r() : word0(0) {}
+ CONSTEXPR dma_status1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma_status1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi0_wr_limit_stall() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_axi0_wr_limit_stall() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_axi0_wr_limit_stall(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi1_ar_stalled() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_axi1_ar_stalled() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_axi1_ar_stalled(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi1_rd_limit_stall() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_axi1_rd_limit_stall() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_axi1_rd_limit_stall(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi1_wr_stalled() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_axi1_wr_stalled() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_axi1_wr_stalled(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi1_w_stalled() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_axi1_w_stalled() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_axi1_w_stalled(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_axi1_wr_limit_stall() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ uint32_t get_axi1_wr_limit_stall() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_axi1_wr_limit_stall(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 5);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wgt_idle_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ uint32_t get_wgt_idle_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 6));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_wgt_idle_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 6);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_bas_idle_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ uint32_t get_bas_idle_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 7));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_bas_idle_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 7);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ai_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ uint32_t get_ib0_ai_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib0_ai_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ai_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ uint32_t get_ib0_ai_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 9));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib0_ai_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 9);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ai_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ uint32_t get_ib1_ai_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib1_ai_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 10);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ai_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ uint32_t get_ib1_ai_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 11));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib1_ai_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 11);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ao_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 12));
+ return value;
+ }
+ uint32_t get_ib0_ao_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 12));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib0_ao_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 12);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib0_ao_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 13));
+ return value;
+ }
+ uint32_t get_ib0_ao_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 13));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib0_ao_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 13);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ao_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ uint32_t get_ib1_ao_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 14));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib1_ao_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 14);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib1_ao_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 15));
+ return value;
+ }
+ uint32_t get_ib1_ao_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 15));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ib1_ao_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 15);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob0_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 16));
+ return value;
+ }
+ uint32_t get_ob0_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ob0_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 16) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob0_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 17));
+ return value;
+ }
+ uint32_t get_ob0_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 17));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ob0_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 17) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 17);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob1_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 18));
+ return value;
+ }
+ uint32_t get_ob1_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 18));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ob1_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 18) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 18);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ob1_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 19));
+ return value;
+ }
+ uint32_t get_ob1_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 19));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_ob1_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 19) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 19);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wd_bitstream_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 20));
+ return value;
+ }
+ uint32_t get_wd_bitstream_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 20));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_wd_bitstream_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 20) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 20);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wd_bitstream_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 21));
+ return value;
+ }
+ uint32_t get_wd_bitstream_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 21));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_wd_bitstream_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 21) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 21);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_bs_bitstream_valid_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 22));
+ return value;
+ }
+ uint32_t get_bs_bitstream_valid_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 22));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_bs_bitstream_valid_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 22) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 22);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_bs_bitstream_ready_c1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 23));
+ return value;
+ }
+ uint32_t get_bs_bitstream_ready_c1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 23));
+ return value;
+ }
+ CONSTEXPR dma_status1_r &set_bs_bitstream_ready_c1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 23) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 23);
+ return *this;
+ }
+#endif
+};
+
+// clkforce_r - Force clocks on for clock gating
+struct clkforce_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t top_level_clk : 1; // set to 1 to force on TOP level clock
+ uint32_t cc_clk : 1; // set to 1 to force on CC clock
+ uint32_t dma_clk : 1; // set to 1 to force on DMA clock
+ uint32_t mac_clk : 1; // set to 1 to force on MAC clock
+ uint32_t ao_clk : 1; // set to 1 to force on AO clock
+ uint32_t wd_clk : 1; // set to 1 to force on WD clock
+ uint32_t reserved0 : 26;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR clkforce_r() : word0(0) {}
+ CONSTEXPR clkforce_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ clkforce_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_top_level_clk() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_top_level_clk() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR clkforce_r &set_top_level_clk(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cc_clk() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_cc_clk() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR clkforce_r &set_cc_clk(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_dma_clk() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_dma_clk() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR clkforce_r &set_dma_clk(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_mac_clk() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_mac_clk() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR clkforce_r &set_mac_clk(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ao_clk() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ uint32_t get_ao_clk() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 4));
+ return value;
+ }
+ CONSTEXPR clkforce_r &set_ao_clk(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 4);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_wd_clk() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ uint32_t get_wd_clk() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 5));
+ return value;
+ }
+ CONSTEXPR clkforce_r &set_wd_clk(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 5);
+ return *this;
+ }
+#endif
+};
+
+// debug_address_r - Set debug address for register reads 0x400-0x7FF. The address must be 1KB aligned
+struct debug_address_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t addr : 32; // Register address
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR debug_address_r() : word0(0) {}
+ CONSTEXPR debug_address_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ debug_address_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_addr() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_addr() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR debug_address_r &set_addr(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// debug_misc_r - 32-bit read/write register for driver debug use. This does not affect NPU function
+struct debug_misc_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t misc : 32; // Debug misc
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR debug_misc_r() : word0(0) {}
+ CONSTEXPR debug_misc_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ debug_misc_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_misc() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_misc() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR debug_misc_r &set_misc(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// debugcore_r - Select core number for debug registers (0x200-0x2FF) and RAM reads (0x400-0x7FF). Value is 0 or 1
+struct debugcore_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t core : 32; // Debug core
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR debugcore_r() : word0(0) {}
+ CONSTEXPR debugcore_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ debugcore_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_core() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_core() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR debugcore_r &set_core(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// debug_block_r - Set from which of four block banks the TSU registers are read. 0 = read from the current bank 256+n =
+// force to read from bank n where n is in the range 0 to 3
+struct debug_block_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t block : 32; // Debug block
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR debug_block_r() : word0(0) {}
+ CONSTEXPR debug_block_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ debug_block_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_block() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_block() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR debug_block_r &set_block(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pmcr_r - PMU Register control
+struct pmcr_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t cnt_en : 1; // Enable counter
+ uint32_t event_cnt_rst : 1; // Reset event counter
+ uint32_t cycle_cnt_rst : 1; // Reset cycle counter
+ uint32_t mask_en : 1; // PMU can be enabled/disabled by command stream operation NPU_OP_PMU_MASK
+ uint32_t reserved0 : 7;
+ uint32_t num_event_cnt : 5; // Number of event counters
+ uint32_t reserved1 : 16;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmcr_r() : word0(8192) {}
+ CONSTEXPR pmcr_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmcr_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cnt_en() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_cnt_en() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmcr_r &set_cnt_en(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_event_cnt_rst() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_event_cnt_rst() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR pmcr_r &set_event_cnt_rst(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_cycle_cnt_rst() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_cycle_cnt_rst() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR pmcr_r &set_cycle_cnt_rst(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_mask_en() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_mask_en() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR pmcr_r &set_mask_en(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_num_event_cnt() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 11));
+ return value;
+ }
+ uint32_t get_num_event_cnt() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 5) - 1) & (word0 >> 11));
+ return value;
+ }
+ CONSTEXPR pmcr_r &set_num_event_cnt(uint32_t value)
+ {
+ word0 = (((~((1U << 5) - 1)) << 11) & word0) | ((((1U << 5) - 1) & static_cast<uint32_t>(value)) << 11);
+ return *this;
+ }
+#endif
+};
+
+// pmcntenset_r - Count enable set register
+struct pmcntenset_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t EVENT_CNT_0 : 1; // Event counter enable bit for PMEVCNTR0
+ uint32_t EVENT_CNT_1 : 1; // Event counter enable bit for PMEVCNTR1
+ uint32_t EVENT_CNT_2 : 1; // Event counter enable bit for PMEVCNTR2
+ uint32_t EVENT_CNT_3 : 1; // Event counter enable bit for PMEVCNTR3
+ uint32_t reserved0 : 27;
+ uint32_t CYCLE_CNT : 1; // PMCCNTR enable bit
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmcntenset_r() : word0(0) {}
+ CONSTEXPR pmcntenset_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmcntenset_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmcntenset_r &set_EVENT_CNT_0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR pmcntenset_r &set_EVENT_CNT_1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_2() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_2() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR pmcntenset_r &set_EVENT_CNT_2(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_3() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_3() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR pmcntenset_r &set_EVENT_CNT_3(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CYCLE_CNT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ uint32_t get_CYCLE_CNT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ CONSTEXPR pmcntenset_r &set_CYCLE_CNT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
+ return *this;
+ }
+#endif
+};
+
+// pmcntenclr_r - Count enable clear register
+struct pmcntenclr_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t EVENT_CNT_0 : 1; // Event counter disable bit for PMEVCNTR0
+ uint32_t EVENT_CNT_1 : 1; // Event counter disable bit for PMEVCNTR1
+ uint32_t EVENT_CNT_2 : 1; // Event counter disable bit for PMEVCNTR2
+ uint32_t EVENT_CNT_3 : 1; // Event counter disable bit for PMEVCNTR3
+ uint32_t reserved0 : 27;
+ uint32_t CYCLE_CNT : 1; // PMCCNTR disable bit
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmcntenclr_r() : word0(0) {}
+ CONSTEXPR pmcntenclr_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmcntenclr_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_0() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmcntenclr_r &set_EVENT_CNT_0(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_1() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR pmcntenclr_r &set_EVENT_CNT_1(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_2() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_2() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR pmcntenclr_r &set_EVENT_CNT_2(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_3() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_3() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR pmcntenclr_r &set_EVENT_CNT_3(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CYCLE_CNT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ uint32_t get_CYCLE_CNT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ CONSTEXPR pmcntenclr_r &set_CYCLE_CNT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
+ return *this;
+ }
+#endif
+};
+
+// pmovsset_r - Overflow flag status set register
+struct pmovsset_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t EVENT_CNT_0_OVF : 1; // Event counter overflow set bit for PMEVCNTR0
+ uint32_t EVENT_CNT_1_OVF : 1; // Event counter overflow set bit for PMEVCNTR1
+ uint32_t EVENT_CNT_2_OVF : 1; // Event counter overflow set bit for PMEVCNTR2
+ uint32_t EVENT_CNT_3_OVF : 1; // Event counter overflow set bit for PMEVCNTR3
+ uint32_t reserved0 : 27;
+ uint32_t CYCLE_CNT_OVF : 1; // PMCCNTR overflow set bit
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmovsset_r() : word0(0) {}
+ CONSTEXPR pmovsset_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmovsset_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_0_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_0_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmovsset_r &set_EVENT_CNT_0_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_1_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_1_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR pmovsset_r &set_EVENT_CNT_1_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_2_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_2_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR pmovsset_r &set_EVENT_CNT_2_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_3_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_3_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR pmovsset_r &set_EVENT_CNT_3_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CYCLE_CNT_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ uint32_t get_CYCLE_CNT_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ CONSTEXPR pmovsset_r &set_CYCLE_CNT_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
+ return *this;
+ }
+#endif
+};
+
+// pmovsclr_r - Overflow flag status clear register
+struct pmovsclr_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t EVENT_CNT_0_OVF : 1; // Event counter overflow clear bit for PMEVCNTR0
+ uint32_t EVENT_CNT_1_OVF : 1; // Event counter overflow clear bit for PMEVCNTR1
+ uint32_t EVENT_CNT_2_OVF : 1; // Event counter overflow clear bit for PMEVCNTR2
+ uint32_t EVENT_CNT_3_OVF : 1; // Event counter overflow clear bit for PMEVCNTR3
+ uint32_t reserved0 : 27;
+ uint32_t CYCLE_CNT_OVF : 1; // PMCCNTR overflow clear bit
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmovsclr_r() : word0(0) {}
+ CONSTEXPR pmovsclr_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmovsclr_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_0_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_0_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmovsclr_r &set_EVENT_CNT_0_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_1_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_1_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR pmovsclr_r &set_EVENT_CNT_1_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_2_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_2_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR pmovsclr_r &set_EVENT_CNT_2_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_3_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_3_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR pmovsclr_r &set_EVENT_CNT_3_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CYCLE_CNT_OVF() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ uint32_t get_CYCLE_CNT_OVF() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ CONSTEXPR pmovsclr_r &set_CYCLE_CNT_OVF(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
+ return *this;
+ }
+#endif
+};
+
+// pmintset_r - Interrupt enable set register
+struct pmintset_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t EVENT_CNT_0_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR0
+ uint32_t EVENT_CNT_1_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR1
+ uint32_t EVENT_CNT_2_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR2
+ uint32_t EVENT_CNT_3_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR3
+ uint32_t reserved0 : 27;
+ uint32_t CYCLE_CNT_INT : 1; // PMCCNTR overflow interrupt request enable bit
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmintset_r() : word0(0) {}
+ CONSTEXPR pmintset_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmintset_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_0_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_0_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmintset_r &set_EVENT_CNT_0_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_1_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_1_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR pmintset_r &set_EVENT_CNT_1_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_2_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_2_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR pmintset_r &set_EVENT_CNT_2_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_3_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_3_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR pmintset_r &set_EVENT_CNT_3_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CYCLE_CNT_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ uint32_t get_CYCLE_CNT_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ CONSTEXPR pmintset_r &set_CYCLE_CNT_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
+ return *this;
+ }
+#endif
+};
+
+// pmintclr_r - Interrupt enable clear register
+struct pmintclr_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t EVENT_CNT_0_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR0
+ uint32_t EVENT_CNT_1_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR1
+ uint32_t EVENT_CNT_2_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR2
+ uint32_t EVENT_CNT_3_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR3
+ uint32_t reserved0 : 27;
+ uint32_t CYCLE_CNT_INT : 1; // PMCCNTR overflow interrupt request disable bit
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmintclr_r() : word0(0) {}
+ CONSTEXPR pmintclr_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmintclr_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_0_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_0_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmintclr_r &set_EVENT_CNT_0_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_1_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_1_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 1));
+ return value;
+ }
+ CONSTEXPR pmintclr_r &set_EVENT_CNT_1_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_2_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_2_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 2));
+ return value;
+ }
+ CONSTEXPR pmintclr_r &set_EVENT_CNT_2_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_EVENT_CNT_3_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ uint32_t get_EVENT_CNT_3_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 3));
+ return value;
+ }
+ CONSTEXPR pmintclr_r &set_EVENT_CNT_3_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 3);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CYCLE_CNT_INT() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ uint32_t get_CYCLE_CNT_INT() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 31));
+ return value;
+ }
+ CONSTEXPR pmintclr_r &set_CYCLE_CNT_INT(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
+ return *this;
+ }
+#endif
+};
+
+// pmccntr_r - Performance monitor cycle count register
+struct pmccntr_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t CYCLE_CNT_LO : 32; // Cycle count - LSB
+ uint32_t CYCLE_CNT_HI : 16; // Cycle count - MSB
+ uint32_t reserved0 : 16;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR pmccntr_r() : word0(0), word1(0) {}
+ CONSTEXPR pmccntr_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ pmccntr_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// pmccntr_cfg_r - Set start/stop event on the cycle counter
+struct pmccntr_cfg_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t CYCLE_CNT_CFG_START : 10; // Cycle counter start event
+ uint32_t reserved0 : 6;
+ uint32_t CYCLE_CNT_CFG_STOP : 10; // Cycle counter stop event
+ uint32_t reserved1 : 6;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmccntr_cfg_r() : word0(0) {}
+ CONSTEXPR pmccntr_cfg_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmccntr_cfg_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_START() const
+ {
+ NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_START() const volatile
+ {
+ NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmccntr_cfg_r &set_CYCLE_CNT_CFG_START(NPU_NAMESPACE::pmu_event value)
+ {
+ word0 = (((~((1U << 10) - 1)) << 0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_STOP() const
+ {
+ NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 16));
+ return value;
+ }
+ NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_STOP() const volatile
+ {
+ NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 16));
+ return value;
+ }
+ CONSTEXPR pmccntr_cfg_r &set_CYCLE_CNT_CFG_STOP(NPU_NAMESPACE::pmu_event value)
+ {
+ word0 = (((~((1U << 10) - 1)) << 16) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 16);
+ return *this;
+ }
+#endif
+};
+
+// pmcaxi_chan_r - Set which AXI channel to monitor for latency measurements in PMU
+struct pmcaxi_chan_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t CH_SEL : 4; // Channel select for latency measurements
+ uint32_t reserved0 : 4;
+ uint32_t AXI_CNT_SEL : 2; // AXI counter to monitor for latency measurements
+ uint32_t BW_CH_SEL_EN : 1; // Bandwidth channel selector
+ uint32_t reserved1 : 21;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmcaxi_chan_r() : word0(0) {}
+ CONSTEXPR pmcaxi_chan_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmcaxi_chan_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::pmu_axi_channel get_CH_SEL() const
+ {
+ NPU_NAMESPACE::pmu_axi_channel value =
+ static_cast<NPU_NAMESPACE::pmu_axi_channel>(((1U << 4) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::pmu_axi_channel get_CH_SEL() const volatile
+ {
+ NPU_NAMESPACE::pmu_axi_channel value =
+ static_cast<NPU_NAMESPACE::pmu_axi_channel>(((1U << 4) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmcaxi_chan_r &set_CH_SEL(NPU_NAMESPACE::pmu_axi_channel value)
+ {
+ word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_AXI_CNT_SEL() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 2) - 1) & (word0 >> 8));
+ return value;
+ }
+ uint32_t get_AXI_CNT_SEL() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 2) - 1) & (word0 >> 8));
+ return value;
+ }
+ CONSTEXPR pmcaxi_chan_r &set_AXI_CNT_SEL(uint32_t value)
+ {
+ word0 = (((~((1U << 2) - 1)) << 8) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 8);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_BW_CH_SEL_EN() const
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ uint32_t get_BW_CH_SEL_EN() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(((1U << 1) - 1) & (word0 >> 10));
+ return value;
+ }
+ CONSTEXPR pmcaxi_chan_r &set_BW_CH_SEL_EN(uint32_t value)
+ {
+ word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 10);
+ return *this;
+ }
+#endif
+};
+
+// kernel_x_r - Kernel X offset of in kernel decomposition
+struct kernel_x_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR kernel_x_r() : word0(0) {}
+ CONSTEXPR kernel_x_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ kernel_x_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR kernel_x_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// kernel_y_r - Kernel Y offset of in kernel decomposition
+struct kernel_y_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR kernel_y_r() : word0(0) {}
+ CONSTEXPR kernel_y_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ kernel_y_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR kernel_y_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// kernel_w_m1_r - Kernel (width-1) of current block
+struct kernel_w_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR kernel_w_m1_r() : word0(0) {}
+ CONSTEXPR kernel_w_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ kernel_w_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR kernel_w_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// kernel_h_m1_r - Kernel (height-1) of current block
+struct kernel_h_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR kernel_h_m1_r() : word0(0) {}
+ CONSTEXPR kernel_h_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ kernel_h_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR kernel_h_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_cblk_width_m1_r - OFM current block (width-1)
+struct ofm_cblk_width_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_cblk_width_m1_r() : word0(0) {}
+ CONSTEXPR ofm_cblk_width_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_cblk_width_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_cblk_width_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_cblk_height_m1_r - OFM current block (height-1)
+struct ofm_cblk_height_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_cblk_height_m1_r() : word0(0) {}
+ CONSTEXPR ofm_cblk_height_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_cblk_height_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_cblk_height_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_cblk_depth_m1_r - OFM current block (depth-1)
+struct ofm_cblk_depth_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_cblk_depth_m1_r() : word0(0) {}
+ CONSTEXPR ofm_cblk_depth_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_cblk_depth_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_cblk_depth_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_cblk_depth_m1_r - IFM current block (depth-1)
+struct ifm_cblk_depth_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_cblk_depth_m1_r() : word0(0) {}
+ CONSTEXPR ifm_cblk_depth_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_cblk_depth_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_cblk_depth_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_x_r - Block X coordinate in OFM
+struct ofm_x_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_x_r() : word0(0) {}
+ CONSTEXPR ofm_x_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_x_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_x_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_y_r - Block Y coordinate in OFM
+struct ofm_y_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_y_r() : word0(0) {}
+ CONSTEXPR ofm_y_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_y_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_y_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_z_r - Block Z (channel) coordinate in OFM
+struct ofm_z_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_z_r() : word0(0) {}
+ CONSTEXPR ofm_z_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_z_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_z_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_z_r - Block Z (channel) coordinate in IFM
+struct ifm_z_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_z_r() : word0(0) {}
+ CONSTEXPR ifm_z_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_z_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_z_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pad_top_r - Block top pad
+struct pad_top_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pad_top_r() : word0(0) {}
+ CONSTEXPR pad_top_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pad_top_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pad_top_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pad_left_r - Block left pad
+struct pad_left_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pad_left_r() : word0(0) {}
+ CONSTEXPR pad_left_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pad_left_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pad_left_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_cblk_width_r - IFM current block derived width
+struct ifm_cblk_width_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_cblk_width_r() : word0(0) {}
+ CONSTEXPR ifm_cblk_width_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_cblk_width_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_cblk_width_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_cblk_height_r - IFM current block derived height
+struct ifm_cblk_height_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_cblk_height_r() : word0(0) {}
+ CONSTEXPR ifm_cblk_height_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_cblk_height_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_cblk_height_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma_ifm_src_r - DMA IFM channel source position on AXI
+struct dma_ifm_src_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma_ifm_src_r() : word0(0), word1(0) {}
+ CONSTEXPR dma_ifm_src_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma_ifm_src_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma_ifm_dst_r - DMA IFM channel destination position in SHRAM
+struct dma_ifm_dst_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma_ifm_dst_r() : word0(0) {}
+ CONSTEXPR dma_ifm_dst_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma_ifm_dst_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR dma_ifm_dst_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma_ofm_src_r - DMA OFM channel source position in SHRAM
+struct dma_ofm_src_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma_ofm_src_r() : word0(0) {}
+ CONSTEXPR dma_ofm_src_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma_ofm_src_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR dma_ofm_src_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma_ofm_dst_r - DMA OFM channel destination position on AXI
+struct dma_ofm_dst_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma_ofm_dst_r() : word0(0), word1(0) {}
+ CONSTEXPR dma_ofm_dst_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma_ofm_dst_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma_weight_src_r - DMA weight channel source position on AXI
+struct dma_weight_src_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma_weight_src_r() : word0(0), word1(0) {}
+ CONSTEXPR dma_weight_src_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma_weight_src_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma_cmd_src_r - DMA command channel source position on AXI
+struct dma_cmd_src_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma_cmd_src_r() : word0(0), word1(0) {}
+ CONSTEXPR dma_cmd_src_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma_cmd_src_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma_cmd_size_r - DMA command channel number of bytes buffered
+struct dma_cmd_size_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma_cmd_size_r() : word0(0) {}
+ CONSTEXPR dma_cmd_size_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma_cmd_size_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR dma_cmd_size_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma_m2m_src_r - DMA memory to memory source position on AXI
+struct dma_m2m_src_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma_m2m_src_r() : word0(0), word1(0) {}
+ CONSTEXPR dma_m2m_src_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma_m2m_src_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma_m2m_dst_r - DMA memory to memory destination position on AXI
+struct dma_m2m_dst_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma_m2m_dst_r() : word0(0), word1(0) {}
+ CONSTEXPR dma_m2m_dst_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma_m2m_dst_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// current_qread_r - QREAD position being issued (rather than completed)
+struct current_qread_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR current_qread_r() : word0(0) {}
+ CONSTEXPR current_qread_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ current_qread_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR current_qread_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma_scale_src_r - DMA scale and bias channel source position on AXI
+struct dma_scale_src_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t offset_LO : 32; // Offset - LSB
+ uint32_t offset_HI : 8; // Offset - MSB
+ uint32_t reserved0 : 24;
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma_scale_src_r() : word0(0), word1(0) {}
+ CONSTEXPR dma_scale_src_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma_scale_src_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// current_block_r - 0-3. Current block bank being executed by the TSU or last one executed if TSU is stopped
+struct current_block_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR current_block_r() : word0(0) {}
+ CONSTEXPR current_block_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ current_block_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR current_block_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// current_op_r - Current NPU OP command being executed by the TSU
+struct current_op_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR current_op_r() : word0(0) {}
+ CONSTEXPR current_op_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ current_op_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR current_op_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// current_cmd_r - Current 32-bit command being parsed by the command stream parser
+struct current_cmd_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR current_cmd_r() : word0(0) {}
+ CONSTEXPR current_cmd_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ current_cmd_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR current_cmd_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pmevcntr_r - Performance monitor event 0 count register
+struct pmevcntr_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t count : 32; // Count word
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmevcntr_r() : word0(0) {}
+ CONSTEXPR pmevcntr_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmevcntr_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_count() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_count() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pmevcntr_r &set_count(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pmevtyper_r - Performance monitor event type register 0
+struct pmevtyper_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t EV_TYPE : 10; // Event Type
+ uint32_t reserved0 : 22;
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pmevtyper_r() : word0(0) {}
+ CONSTEXPR pmevtyper_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pmevtyper_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::pmu_event get_EV_TYPE() const
+ {
+ NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
+ return value;
+ }
+ NPU_NAMESPACE::pmu_event get_EV_TYPE() const volatile
+ {
+ NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
+ return value;
+ }
+ CONSTEXPR pmevtyper_r &set_EV_TYPE(NPU_NAMESPACE::pmu_event value)
+ {
+ word0 = (((~((1U << 10) - 1)) << 0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
+ return *this;
+ }
+#endif
+};
+
+// shared_buffer_r - Shared buffer debug access. Only valid in STOPPED state
+struct shared_buffer_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t mem_word : 32; // Memory word
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR shared_buffer_r() : word0(0) {}
+ CONSTEXPR shared_buffer_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ shared_buffer_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_mem_word() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_mem_word() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR shared_buffer_r &set_mem_word(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_pad_top_r - None
+struct ifm_pad_top_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_pad_top_r() : word0(0) {}
+ CONSTEXPR ifm_pad_top_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_pad_top_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_pad_top_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_pad_left_r - None
+struct ifm_pad_left_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_pad_left_r() : word0(0) {}
+ CONSTEXPR ifm_pad_left_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_pad_left_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_pad_left_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_pad_right_r - None
+struct ifm_pad_right_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_pad_right_r() : word0(0) {}
+ CONSTEXPR ifm_pad_right_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_pad_right_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_pad_right_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_pad_bottom_r - None
+struct ifm_pad_bottom_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_pad_bottom_r() : word0(0) {}
+ CONSTEXPR ifm_pad_bottom_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_pad_bottom_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_pad_bottom_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_depth_m1_r - None
+struct ifm_depth_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_depth_m1_r() : word0(0) {}
+ CONSTEXPR ifm_depth_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_depth_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_depth_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_precision_r - None
+struct ifm_precision_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_precision_r() : word0(0) {}
+ CONSTEXPR ifm_precision_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_precision_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_precision_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_upscale_r - None
+struct ifm_upscale_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_upscale_r() : word0(0) {}
+ CONSTEXPR ifm_upscale_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_upscale_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_upscale_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_zero_point_r - None
+struct ifm_zero_point_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_zero_point_r() : word0(0) {}
+ CONSTEXPR ifm_zero_point_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_zero_point_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_zero_point_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_width0_m1_r - None
+struct ifm_width0_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_width0_m1_r() : word0(0) {}
+ CONSTEXPR ifm_width0_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_width0_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_width0_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_height0_m1_r - None
+struct ifm_height0_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_height0_m1_r() : word0(0) {}
+ CONSTEXPR ifm_height0_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_height0_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_height0_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_height1_m1_r - None
+struct ifm_height1_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_height1_m1_r() : word0(0) {}
+ CONSTEXPR ifm_height1_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_height1_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_height1_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_ib_end_r - None
+struct ifm_ib_end_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_ib_end_r() : word0(0) {}
+ CONSTEXPR ifm_ib_end_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_ib_end_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_ib_end_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_region_r - None
+struct ifm_region_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm_region_r() : word0(0) {}
+ CONSTEXPR ifm_region_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm_region_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm_region_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_width_m1_r - None
+struct ofm_width_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_width_m1_r() : word0(0) {}
+ CONSTEXPR ofm_width_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_width_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_width_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_height_m1_r - None
+struct ofm_height_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_height_m1_r() : word0(0) {}
+ CONSTEXPR ofm_height_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_height_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_height_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_depth_m1_r - None
+struct ofm_depth_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_depth_m1_r() : word0(0) {}
+ CONSTEXPR ofm_depth_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_depth_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_depth_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_precision_r - None
+struct ofm_precision_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_precision_r() : word0(0) {}
+ CONSTEXPR ofm_precision_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_precision_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_precision_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_blk_width_m1_r - None
+struct ofm_blk_width_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_blk_width_m1_r() : word0(0) {}
+ CONSTEXPR ofm_blk_width_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_blk_width_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_blk_width_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_blk_height_m1_r - None
+struct ofm_blk_height_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_blk_height_m1_r() : word0(0) {}
+ CONSTEXPR ofm_blk_height_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_blk_height_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_blk_height_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_blk_depth_m1_r - None
+struct ofm_blk_depth_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_blk_depth_m1_r() : word0(0) {}
+ CONSTEXPR ofm_blk_depth_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_blk_depth_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_blk_depth_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_zero_point_r - None
+struct ofm_zero_point_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_zero_point_r() : word0(0) {}
+ CONSTEXPR ofm_zero_point_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_zero_point_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_zero_point_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_width0_m1_r - None
+struct ofm_width0_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_width0_m1_r() : word0(0) {}
+ CONSTEXPR ofm_width0_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_width0_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_width0_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_height0_m1_r - None
+struct ofm_height0_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_height0_m1_r() : word0(0) {}
+ CONSTEXPR ofm_height0_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_height0_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_height0_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_height1_m1_r - None
+struct ofm_height1_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_height1_m1_r() : word0(0) {}
+ CONSTEXPR ofm_height1_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_height1_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_height1_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_region_r - None
+struct ofm_region_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_region_r() : word0(0) {}
+ CONSTEXPR ofm_region_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_region_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_region_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// kernel_width_m1_r - None
+struct kernel_width_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR kernel_width_m1_r() : word0(0) {}
+ CONSTEXPR kernel_width_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ kernel_width_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR kernel_width_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// kernel_height_m1_r - None
+struct kernel_height_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR kernel_height_m1_r() : word0(0) {}
+ CONSTEXPR kernel_height_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ kernel_height_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR kernel_height_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// kernel_stride_r - None
+struct kernel_stride_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR kernel_stride_r() : word0(0) {}
+ CONSTEXPR kernel_stride_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ kernel_stride_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR kernel_stride_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// parallel_mode_r - None
+struct parallel_mode_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR parallel_mode_r() : word0(0) {}
+ CONSTEXPR parallel_mode_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ parallel_mode_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR parallel_mode_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// acc_format_r - None
+struct acc_format_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR acc_format_r() : word0(0) {}
+ CONSTEXPR acc_format_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ acc_format_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR acc_format_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// activation_r - None
+struct activation_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR activation_r() : word0(0) {}
+ CONSTEXPR activation_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ activation_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR activation_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// activation_min_r - None
+struct activation_min_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR activation_min_r() : word0(0) {}
+ CONSTEXPR activation_min_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ activation_min_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR activation_min_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// activation_max_r - None
+struct activation_max_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR activation_max_r() : word0(0) {}
+ CONSTEXPR activation_max_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ activation_max_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR activation_max_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// weight_region_r - None
+struct weight_region_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR weight_region_r() : word0(0) {}
+ CONSTEXPR weight_region_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ weight_region_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR weight_region_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// scale_region_r - None
+struct scale_region_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR scale_region_r() : word0(0) {}
+ CONSTEXPR scale_region_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ scale_region_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR scale_region_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ab_start_r - None
+struct ab_start_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ab_start_r() : word0(0) {}
+ CONSTEXPR ab_start_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ab_start_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ab_start_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// blockdep_r - None
+struct blockdep_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR blockdep_r() : word0(0) {}
+ CONSTEXPR blockdep_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ blockdep_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR blockdep_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma0_src_region_r - None
+struct dma0_src_region_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma0_src_region_r() : word0(0) {}
+ CONSTEXPR dma0_src_region_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma0_src_region_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR dma0_src_region_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma0_dst_region_r - None
+struct dma0_dst_region_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma0_dst_region_r() : word0(0) {}
+ CONSTEXPR dma0_dst_region_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma0_dst_region_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR dma0_dst_region_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma0_size0_r - None
+struct dma0_size0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma0_size0_r() : word0(0) {}
+ CONSTEXPR dma0_size0_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma0_size0_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR dma0_size0_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma0_size1_r - None
+struct dma0_size1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR dma0_size1_r() : word0(0) {}
+ CONSTEXPR dma0_size1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ dma0_size1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR dma0_size1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_broadcast_r - None
+struct ifm2_broadcast_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_broadcast_r() : word0(0) {}
+ CONSTEXPR ifm2_broadcast_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_broadcast_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_broadcast_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_scalar_r - None
+struct ifm2_scalar_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_scalar_r() : word0(0) {}
+ CONSTEXPR ifm2_scalar_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_scalar_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_scalar_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_precision_r - None
+struct ifm2_precision_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_precision_r() : word0(0) {}
+ CONSTEXPR ifm2_precision_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_precision_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_precision_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_zero_point_r - None
+struct ifm2_zero_point_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_zero_point_r() : word0(0) {}
+ CONSTEXPR ifm2_zero_point_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_zero_point_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_zero_point_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_width0_m1_r - None
+struct ifm2_width0_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_width0_m1_r() : word0(0) {}
+ CONSTEXPR ifm2_width0_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_width0_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_width0_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_height0_m1_r - None
+struct ifm2_height0_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_height0_m1_r() : word0(0) {}
+ CONSTEXPR ifm2_height0_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_height0_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_height0_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_height1_m1_r - None
+struct ifm2_height1_m1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_height1_m1_r() : word0(0) {}
+ CONSTEXPR ifm2_height1_m1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_height1_m1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_height1_m1_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_ib_start_r - None
+struct ifm2_ib_start_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_ib_start_r() : word0(0) {}
+ CONSTEXPR ifm2_ib_start_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_ib_start_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_ib_start_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm2_region_r - None
+struct ifm2_region_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ifm2_region_r() : word0(0) {}
+ CONSTEXPR ifm2_region_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ifm2_region_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ifm2_region_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ifm_base0_r - None
+struct ifm_base0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm_base0_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm_base0_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm_base0_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm_base1_r - None
+struct ifm_base1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm_base1_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm_base1_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm_base1_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm_base2_r - None
+struct ifm_base2_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm_base2_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm_base2_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm_base2_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm_base3_r - None
+struct ifm_base3_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm_base3_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm_base3_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm_base3_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm_stride_x_r - None
+struct ifm_stride_x_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm_stride_x_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm_stride_x_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm_stride_x_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm_stride_y_r - None
+struct ifm_stride_y_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm_stride_y_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm_stride_y_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm_stride_y_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm_stride_c_r - None
+struct ifm_stride_c_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm_stride_c_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm_stride_c_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm_stride_c_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ofm_base0_r - None
+struct ofm_base0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ofm_base0_r() : word0(0), word1(0) {}
+ CONSTEXPR ofm_base0_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ofm_base0_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ofm_base1_r - None
+struct ofm_base1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ofm_base1_r() : word0(0), word1(0) {}
+ CONSTEXPR ofm_base1_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ofm_base1_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ofm_base2_r - None
+struct ofm_base2_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ofm_base2_r() : word0(0), word1(0) {}
+ CONSTEXPR ofm_base2_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ofm_base2_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ofm_base3_r - None
+struct ofm_base3_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ofm_base3_r() : word0(0), word1(0) {}
+ CONSTEXPR ofm_base3_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ofm_base3_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ofm_stride_x_r - None
+struct ofm_stride_x_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ofm_stride_x_r() : word0(0), word1(0) {}
+ CONSTEXPR ofm_stride_x_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ofm_stride_x_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ofm_stride_y_r - None
+struct ofm_stride_y_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ofm_stride_y_r() : word0(0), word1(0) {}
+ CONSTEXPR ofm_stride_y_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ofm_stride_y_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ofm_stride_c_r - None
+struct ofm_stride_c_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ofm_stride_c_r() : word0(0), word1(0) {}
+ CONSTEXPR ofm_stride_c_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ofm_stride_c_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// weight_base_r - None
+struct weight_base_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR weight_base_r() : word0(0), word1(0) {}
+ CONSTEXPR weight_base_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ weight_base_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// weight_length_r - None
+struct weight_length_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR weight_length_r() : word0(0) {}
+ CONSTEXPR weight_length_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ weight_length_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR weight_length_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// scale_base_r - None
+struct scale_base_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR scale_base_r() : word0(0), word1(0) {}
+ CONSTEXPR scale_base_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ scale_base_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// scale_length_r - None
+struct scale_length_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR scale_length_r() : word0(0) {}
+ CONSTEXPR scale_length_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ scale_length_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR scale_length_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_scale_r - None
+struct ofm_scale_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_scale_r() : word0(0) {}
+ CONSTEXPR ofm_scale_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_scale_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_scale_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// ofm_scale_shift_r - None
+struct ofm_scale_shift_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR ofm_scale_shift_r() : word0(0) {}
+ CONSTEXPR ofm_scale_shift_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ ofm_scale_shift_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR ofm_scale_shift_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// opa_scale_r - None
+struct opa_scale_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR opa_scale_r() : word0(0) {}
+ CONSTEXPR opa_scale_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ opa_scale_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR opa_scale_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// opa_scale_shift_r - None
+struct opa_scale_shift_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR opa_scale_shift_r() : word0(0) {}
+ CONSTEXPR opa_scale_shift_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ opa_scale_shift_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR opa_scale_shift_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// opb_scale_r - None
+struct opb_scale_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR opb_scale_r() : word0(0) {}
+ CONSTEXPR opb_scale_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ opb_scale_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR opb_scale_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// dma0_src_r - None
+struct dma0_src_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma0_src_r() : word0(0), word1(0) {}
+ CONSTEXPR dma0_src_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma0_src_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma0_dst_r - None
+struct dma0_dst_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma0_dst_r() : word0(0), word1(0) {}
+ CONSTEXPR dma0_dst_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma0_dst_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma0_len_r - None
+struct dma0_len_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma0_len_r() : word0(0), word1(0) {}
+ CONSTEXPR dma0_len_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma0_len_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma0_skip0_r - None
+struct dma0_skip0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma0_skip0_r() : word0(0), word1(0) {}
+ CONSTEXPR dma0_skip0_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma0_skip0_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// dma0_skip1_r - None
+struct dma0_skip1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR dma0_skip1_r() : word0(0), word1(0) {}
+ CONSTEXPR dma0_skip1_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ dma0_skip1_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm2_base0_r - None
+struct ifm2_base0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm2_base0_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm2_base0_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm2_base0_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm2_base1_r - None
+struct ifm2_base1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm2_base1_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm2_base1_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm2_base1_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm2_base2_r - None
+struct ifm2_base2_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm2_base2_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm2_base2_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm2_base2_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm2_base3_r - None
+struct ifm2_base3_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm2_base3_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm2_base3_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm2_base3_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm2_stride_x_r - None
+struct ifm2_stride_x_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm2_stride_x_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm2_stride_x_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm2_stride_x_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm2_stride_y_r - None
+struct ifm2_stride_y_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm2_stride_y_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm2_stride_y_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm2_stride_y_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// ifm2_stride_c_r - None
+struct ifm2_stride_c_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR ifm2_stride_c_r() : word0(0), word1(0) {}
+ CONSTEXPR ifm2_stride_c_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ ifm2_stride_c_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// weight1_base_r - None
+struct weight1_base_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR weight1_base_r() : word0(0), word1(0) {}
+ CONSTEXPR weight1_base_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ weight1_base_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// weight1_length_r - None
+struct weight1_length_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR weight1_length_r() : word0(0) {}
+ CONSTEXPR weight1_length_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ weight1_length_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR weight1_length_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// scale1_base_r - None
+struct scale1_base_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value_LO : 32; // 64-bit register value - LSB
+ uint32_t value_HI : 32; // 64-bit register value - MSB
+ };
+ uint32_t word[2];
+ };
+#else
+ private:
+ uint32_t word0;
+ uint32_t word1;
+
+ public:
+ CONSTEXPR scale1_base_r() : word0(0), word1(0) {}
+ CONSTEXPR scale1_base_r(uint64_t init) :
+ word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR void operator=(uint64_t value)
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ void operator=(uint64_t value) volatile
+ {
+ word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ }
+ CONSTEXPR operator uint64_t()
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ operator uint64_t() volatile
+ {
+ return (static_cast<uint64_t>(word1) << 32) | word0;
+ }
+ scale1_base_r copy() volatile
+ {
+ return *this;
+ }
+#endif
+};
+
+// scale1_length_r - None
+struct scale1_length_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR scale1_length_r() : word0(0) {}
+ CONSTEXPR scale1_length_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ scale1_length_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR scale1_length_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// revision_r - Internal FPGA build revision: first 32-bits of the Ultan Git hash used for the build
+struct revision_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t value : 32; // 32-bit register value
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR revision_r() : word0(0) {}
+ CONSTEXPR revision_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ revision_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_value() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_value() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR revision_r &set_value(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid4_r - Peripheral ID byte 4 (Arm=code 4)
+struct pid4_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID4 : 32; // Byte 4 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid4_r() : word0(4) {}
+ CONSTEXPR pid4_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid4_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID4() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID4() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid4_r &set_PID4(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid5_r - Peripheral ID byte 5 (reserved)
+struct pid5_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID5 : 32; // Byte 5 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid5_r() : word0(0) {}
+ CONSTEXPR pid5_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid5_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID5() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID5() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid5_r &set_PID5(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid6_r - Peripheral ID byte 6 (reserved)
+struct pid6_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID6 : 32; // Byte 6 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid6_r() : word0(0) {}
+ CONSTEXPR pid6_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid6_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID6() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID6() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid6_r &set_PID6(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid7_r - Peripheral ID byte 7 (reserved)
+struct pid7_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID7 : 32; // Byte 7 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid7_r() : word0(0) {}
+ CONSTEXPR pid7_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid7_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID7() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID7() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid7_r &set_PID7(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid0_r - Peripheral ID byte 0. This is bits[7:0] of the part number
+struct pid0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID0 : 32; // Byte 0 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid0_r() : word0(129) {}
+ CONSTEXPR pid0_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid0_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID0() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid0_r &set_PID0(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid1_r - Peripheral ID byte 1. This is bits[11:8] of the part number in bits[3:0], and bits[3:0] of the Arm ID in
+// bits[7:4]
+struct pid1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID1 : 32; // Byte 1 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid1_r() : word0(181) {}
+ CONSTEXPR pid1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID1() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid1_r &set_PID1(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid2_r - Peripheral ID byte 2. This is bits[6:4] of the Arm ID in bits[2:0], and bit 3 indicates format B
+struct pid2_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID2 : 32; // Byte 2 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid2_r() : word0(11) {}
+ CONSTEXPR pid2_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid2_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID2() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID2() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid2_r &set_PID2(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// pid3_r - Peripheral ID byte 3
+struct pid3_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t PID3 : 32; // Byte 1 of Peripheral ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR pid3_r() : word0(0) {}
+ CONSTEXPR pid3_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ pid3_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_PID3() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_PID3() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR pid3_r &set_PID3(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// cid0_r - Component ID byte 0
+struct cid0_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t CID0 : 32; // Byte 0 of Component ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR cid0_r() : word0(13) {}
+ CONSTEXPR cid0_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ cid0_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CID0() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_CID0() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR cid0_r &set_CID0(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// cid1_r - Component ID byte 1
+struct cid1_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t CID1 : 32; // Byte 1 of Component ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR cid1_r() : word0(240) {}
+ CONSTEXPR cid1_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ cid1_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CID1() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_CID1() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR cid1_r &set_CID1(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// cid2_r - Component ID byte 2
+struct cid2_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t CID2 : 32; // Byte 2 of Component ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR cid2_r() : word0(5) {}
+ CONSTEXPR cid2_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ cid2_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CID2() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_CID2() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR cid2_r &set_CID2(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+// cid3_r - Component ID byte 3
+struct cid3_r
+{
+#ifndef __cplusplus
+ union
+ {
+ struct
+ {
+ uint32_t CID3 : 32; // Byte 3 of Component ID (Lower 8 bits valid)
+ };
+ uint32_t word;
+ };
+#else
+ private:
+ uint32_t word0;
+
+ public:
+ CONSTEXPR cid3_r() : word0(177) {}
+ CONSTEXPR cid3_r(uint32_t init) : word0(init) {}
+ CONSTEXPR void operator=(uint32_t value)
+ {
+ word0 = value;
+ }
+ void operator=(uint32_t value) volatile
+ {
+ word0 = value;
+ }
+ CONSTEXPR operator uint32_t()
+ {
+ return word0;
+ }
+ operator uint32_t() volatile
+ {
+ return word0;
+ }
+ cid3_r copy() volatile
+ {
+ return *this;
+ }
+ CONSTEXPR uint32_t get_CID3() const
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ uint32_t get_CID3() const volatile
+ {
+ uint32_t value = static_cast<uint32_t>(word0);
+ return value;
+ }
+ CONSTEXPR cid3_r &set_CID3(uint32_t value)
+ {
+ word0 = static_cast<uint32_t>(value);
+ return *this;
+ }
+#endif
+};
+
+struct NPU_REG
+{
+ STRUCT id_r ID; // 0x0000
+ STRUCT status_r STATUS; // 0x0004
+ STRUCT cmd_r CMD; // 0x0008
+ STRUCT reset_r RESET; // 0x000C
+ STRUCT qbase_r QBASE; // 0x0010
+ STRUCT qread_r QREAD; // 0x0018
+ STRUCT qconfig_r QCONFIG; // 0x001C
+ STRUCT qsize_r QSIZE; // 0x0020
+ STRUCT prot_r PROT; // 0x0024
+ STRUCT config_r CONFIG; // 0x0028
+ STRUCT lock_r LOCK; // 0x002C
+ uint32_t unused0[3];
+ STRUCT regioncfg_r REGIONCFG; // 0x003C
+ STRUCT axi_limit0_r AXI_LIMIT0; // 0x0040
+ STRUCT axi_limit1_r AXI_LIMIT1; // 0x0044
+ STRUCT axi_limit2_r AXI_LIMIT2; // 0x0048
+ STRUCT axi_limit3_r AXI_LIMIT3; // 0x004C
+ uint32_t unused1[12];
+ STRUCT basep_r BASEP[8]; // 0x0080
+ uint32_t unused2[16];
+ STRUCT wd_status_r WD_STATUS; // 0x0100
+ STRUCT mac_status_r MAC_STATUS; // 0x0104
+ STRUCT ao_status_r AO_STATUS; // 0x0108
+ uint32_t unused3[1];
+ STRUCT dma_status0_r DMA_STATUS0; // 0x0110
+ STRUCT dma_status1_r DMA_STATUS1; // 0x0114
+ uint32_t unused4[10];
+ STRUCT clkforce_r CLKFORCE; // 0x0140
+ STRUCT debug_address_r DEBUG_ADDRESS; // 0x0144
+ STRUCT debug_misc_r DEBUG_MISC; // 0x0148
+ STRUCT debugcore_r DEBUGCORE; // 0x014C
+ STRUCT debug_block_r DEBUG_BLOCK; // 0x0150
+ uint32_t unused5[11];
+ STRUCT pmcr_r PMCR; // 0x0180
+ STRUCT pmcntenset_r PMCNTENSET; // 0x0184
+ STRUCT pmcntenclr_r PMCNTENCLR; // 0x0188
+ STRUCT pmovsset_r PMOVSSET; // 0x018C
+ STRUCT pmovsclr_r PMOVSCLR; // 0x0190
+ STRUCT pmintset_r PMINTSET; // 0x0194
+ STRUCT pmintclr_r PMINTCLR; // 0x0198
+ uint32_t unused6[1];
+ STRUCT pmccntr_r PMCCNTR; // 0x01A0
+ STRUCT pmccntr_cfg_r PMCCNTR_CFG; // 0x01A8
+ STRUCT pmcaxi_chan_r PMCAXI_CHAN; // 0x01AC
+ uint32_t unused7[20];
+ STRUCT kernel_x_r KERNEL_X; // 0x0200
+ STRUCT kernel_y_r KERNEL_Y; // 0x0204
+ STRUCT kernel_w_m1_r KERNEL_W_M1; // 0x0208
+ STRUCT kernel_h_m1_r KERNEL_H_M1; // 0x020C
+ STRUCT ofm_cblk_width_m1_r OFM_CBLK_WIDTH_M1; // 0x0210
+ STRUCT ofm_cblk_height_m1_r OFM_CBLK_HEIGHT_M1; // 0x0214
+ STRUCT ofm_cblk_depth_m1_r OFM_CBLK_DEPTH_M1; // 0x0218
+ STRUCT ifm_cblk_depth_m1_r IFM_CBLK_DEPTH_M1; // 0x021C
+ STRUCT ofm_x_r OFM_X; // 0x0220
+ STRUCT ofm_y_r OFM_Y; // 0x0224
+ STRUCT ofm_z_r OFM_Z; // 0x0228
+ STRUCT ifm_z_r IFM_Z; // 0x022C
+ STRUCT pad_top_r PAD_TOP; // 0x0230
+ STRUCT pad_left_r PAD_LEFT; // 0x0234
+ STRUCT ifm_cblk_width_r IFM_CBLK_WIDTH; // 0x0238
+ STRUCT ifm_cblk_height_r IFM_CBLK_HEIGHT; // 0x023C
+ STRUCT dma_ifm_src_r DMA_IFM_SRC; // 0x0240
+ STRUCT dma_ifm_dst_r DMA_IFM_DST; // 0x0248
+ STRUCT dma_ofm_src_r DMA_OFM_SRC; // 0x024C
+ STRUCT dma_ofm_dst_r DMA_OFM_DST; // 0x0250
+ STRUCT dma_weight_src_r DMA_WEIGHT_SRC; // 0x0258
+ STRUCT dma_cmd_src_r DMA_CMD_SRC; // 0x0260
+ STRUCT dma_cmd_size_r DMA_CMD_SIZE; // 0x0268
+ STRUCT dma_m2m_src_r DMA_M2M_SRC; // 0x026C
+ STRUCT dma_m2m_dst_r DMA_M2M_DST; // 0x0274
+ STRUCT current_qread_r CURRENT_QREAD; // 0x027C
+ STRUCT dma_scale_src_r DMA_SCALE_SRC; // 0x0280
+ uint32_t unused8[11];
+ STRUCT current_block_r CURRENT_BLOCK; // 0x02B4
+ STRUCT current_op_r CURRENT_OP; // 0x02B8
+ STRUCT current_cmd_r CURRENT_CMD; // 0x02BC
+ uint32_t unused9[16];
+ STRUCT pmevcntr_r PMEVCNTR[4]; // 0x0300
+ uint32_t unused10[28];
+ STRUCT pmevtyper_r PMEVTYPER[4]; // 0x0380
+ uint32_t unused11[28];
+ STRUCT shared_buffer_r SHARED_BUFFER[256]; // 0x0400
+ STRUCT ifm_pad_top_r IFM_PAD_TOP; // 0x0800
+ STRUCT ifm_pad_left_r IFM_PAD_LEFT; // 0x0804
+ STRUCT ifm_pad_right_r IFM_PAD_RIGHT; // 0x0808
+ STRUCT ifm_pad_bottom_r IFM_PAD_BOTTOM; // 0x080C
+ STRUCT ifm_depth_m1_r IFM_DEPTH_M1; // 0x0810
+ STRUCT ifm_precision_r IFM_PRECISION; // 0x0814
+ uint32_t unused12[1];
+ STRUCT ifm_upscale_r IFM_UPSCALE; // 0x081C
+ uint32_t unused13[1];
+ STRUCT ifm_zero_point_r IFM_ZERO_POINT; // 0x0824
+ STRUCT ifm_width0_m1_r IFM_WIDTH0_M1; // 0x0828
+ STRUCT ifm_height0_m1_r IFM_HEIGHT0_M1; // 0x082C
+ STRUCT ifm_height1_m1_r IFM_HEIGHT1_M1; // 0x0830
+ STRUCT ifm_ib_end_r IFM_IB_END; // 0x0834
+ uint32_t unused14[1];
+ STRUCT ifm_region_r IFM_REGION; // 0x083C
+ uint32_t unused15[1];
+ STRUCT ofm_width_m1_r OFM_WIDTH_M1; // 0x0844
+ STRUCT ofm_height_m1_r OFM_HEIGHT_M1; // 0x0848
+ STRUCT ofm_depth_m1_r OFM_DEPTH_M1; // 0x084C
+ STRUCT ofm_precision_r OFM_PRECISION; // 0x0850
+ STRUCT ofm_blk_width_m1_r OFM_BLK_WIDTH_M1; // 0x0854
+ STRUCT ofm_blk_height_m1_r OFM_BLK_HEIGHT_M1; // 0x0858
+ STRUCT ofm_blk_depth_m1_r OFM_BLK_DEPTH_M1; // 0x085C
+ STRUCT ofm_zero_point_r OFM_ZERO_POINT; // 0x0860
+ uint32_t unused16[1];
+ STRUCT ofm_width0_m1_r OFM_WIDTH0_M1; // 0x0868
+ STRUCT ofm_height0_m1_r OFM_HEIGHT0_M1; // 0x086C
+ STRUCT ofm_height1_m1_r OFM_HEIGHT1_M1; // 0x0870
+ uint32_t unused17[2];
+ STRUCT ofm_region_r OFM_REGION; // 0x087C
+ STRUCT kernel_width_m1_r KERNEL_WIDTH_M1; // 0x0880
+ STRUCT kernel_height_m1_r KERNEL_HEIGHT_M1; // 0x0884
+ STRUCT kernel_stride_r KERNEL_STRIDE; // 0x0888
+ STRUCT parallel_mode_r PARALLEL_MODE; // 0x088C
+ STRUCT acc_format_r ACC_FORMAT; // 0x0890
+ STRUCT activation_r ACTIVATION; // 0x0894
+ STRUCT activation_min_r ACTIVATION_MIN; // 0x0898
+ STRUCT activation_max_r ACTIVATION_MAX; // 0x089C
+ STRUCT weight_region_r WEIGHT_REGION; // 0x08A0
+ STRUCT scale_region_r SCALE_REGION; // 0x08A4
+ uint32_t unused18[3];
+ STRUCT ab_start_r AB_START; // 0x08B4
+ uint32_t unused19[1];
+ STRUCT blockdep_r BLOCKDEP; // 0x08BC
+ STRUCT dma0_src_region_r DMA0_SRC_REGION; // 0x08C0
+ STRUCT dma0_dst_region_r DMA0_DST_REGION; // 0x08C4
+ STRUCT dma0_size0_r DMA0_SIZE0; // 0x08C8
+ STRUCT dma0_size1_r DMA0_SIZE1; // 0x08CC
+ uint32_t unused20[12];
+ STRUCT ifm2_broadcast_r IFM2_BROADCAST; // 0x0900
+ STRUCT ifm2_scalar_r IFM2_SCALAR; // 0x0904
+ uint32_t unused21[3];
+ STRUCT ifm2_precision_r IFM2_PRECISION; // 0x0914
+ uint32_t unused22[3];
+ STRUCT ifm2_zero_point_r IFM2_ZERO_POINT; // 0x0924
+ STRUCT ifm2_width0_m1_r IFM2_WIDTH0_M1; // 0x0928
+ STRUCT ifm2_height0_m1_r IFM2_HEIGHT0_M1; // 0x092C
+ STRUCT ifm2_height1_m1_r IFM2_HEIGHT1_M1; // 0x0930
+ STRUCT ifm2_ib_start_r IFM2_IB_START; // 0x0934
+ uint32_t unused23[1];
+ STRUCT ifm2_region_r IFM2_REGION; // 0x093C
+ uint32_t unused24[48];
+ STRUCT ifm_base0_r IFM_BASE0; // 0x0A00
+ STRUCT ifm_base1_r IFM_BASE1; // 0x0A08
+ STRUCT ifm_base2_r IFM_BASE2; // 0x0A10
+ STRUCT ifm_base3_r IFM_BASE3; // 0x0A18
+ STRUCT ifm_stride_x_r IFM_STRIDE_X; // 0x0A20
+ STRUCT ifm_stride_y_r IFM_STRIDE_Y; // 0x0A28
+ STRUCT ifm_stride_c_r IFM_STRIDE_C; // 0x0A30
+ uint32_t unused25[2];
+ STRUCT ofm_base0_r OFM_BASE0; // 0x0A40
+ STRUCT ofm_base1_r OFM_BASE1; // 0x0A48
+ STRUCT ofm_base2_r OFM_BASE2; // 0x0A50
+ STRUCT ofm_base3_r OFM_BASE3; // 0x0A58
+ STRUCT ofm_stride_x_r OFM_STRIDE_X; // 0x0A60
+ STRUCT ofm_stride_y_r OFM_STRIDE_Y; // 0x0A68
+ STRUCT ofm_stride_c_r OFM_STRIDE_C; // 0x0A70
+ uint32_t unused26[2];
+ STRUCT weight_base_r WEIGHT_BASE; // 0x0A80
+ STRUCT weight_length_r WEIGHT_LENGTH; // 0x0A88
+ uint32_t unused27[1];
+ STRUCT scale_base_r SCALE_BASE; // 0x0A90
+ STRUCT scale_length_r SCALE_LENGTH; // 0x0A98
+ uint32_t unused28[1];
+ STRUCT ofm_scale_r OFM_SCALE; // 0x0AA0
+ STRUCT ofm_scale_shift_r OFM_SCALE_SHIFT; // 0x0AA4
+ STRUCT opa_scale_r OPA_SCALE; // 0x0AA8
+ STRUCT opa_scale_shift_r OPA_SCALE_SHIFT; // 0x0AAC
+ STRUCT opb_scale_r OPB_SCALE; // 0x0AB0
+ uint32_t unused29[3];
+ STRUCT dma0_src_r DMA0_SRC; // 0x0AC0
+ STRUCT dma0_dst_r DMA0_DST; // 0x0AC8
+ STRUCT dma0_len_r DMA0_LEN; // 0x0AD0
+ STRUCT dma0_skip0_r DMA0_SKIP0; // 0x0AD8
+ STRUCT dma0_skip1_r DMA0_SKIP1; // 0x0AE0
+ uint32_t unused30[6];
+ STRUCT ifm2_base0_r IFM2_BASE0; // 0x0B00
+ STRUCT ifm2_base1_r IFM2_BASE1; // 0x0B08
+ STRUCT ifm2_base2_r IFM2_BASE2; // 0x0B10
+ STRUCT ifm2_base3_r IFM2_BASE3; // 0x0B18
+ STRUCT ifm2_stride_x_r IFM2_STRIDE_X; // 0x0B20
+ STRUCT ifm2_stride_y_r IFM2_STRIDE_Y; // 0x0B28
+ STRUCT ifm2_stride_c_r IFM2_STRIDE_C; // 0x0B30
+ uint32_t unused31[2];
+ STRUCT weight1_base_r WEIGHT1_BASE; // 0x0B40
+ STRUCT weight1_length_r WEIGHT1_LENGTH; // 0x0B48
+ uint32_t unused32[1];
+ STRUCT scale1_base_r SCALE1_BASE; // 0x0B50
+ STRUCT scale1_length_r SCALE1_LENGTH; // 0x0B58
+ uint32_t unused33[281];
+ STRUCT revision_r REVISION; // 0x0FC0
+ uint32_t unused34[3];
+ STRUCT pid4_r PID4; // 0x0FD0
+ STRUCT pid5_r PID5; // 0x0FD4
+ STRUCT pid6_r PID6; // 0x0FD8
+ STRUCT pid7_r PID7; // 0x0FDC
+ STRUCT pid0_r PID0; // 0x0FE0
+ STRUCT pid1_r PID1; // 0x0FE4
+ STRUCT pid2_r PID2; // 0x0FE8
+ STRUCT pid3_r PID3; // 0x0FEC
+ STRUCT cid0_r CID0; // 0x0FF0
+ STRUCT cid1_r CID1; // 0x0FF4
+ STRUCT cid2_r CID2; // 0x0FF8
+ STRUCT cid3_r CID3; // 0x0FFC
+
+#ifdef __cplusplus
+ enum class access_type_t : uint8_t
+ {
+ RW,
+ RO,
+ WO
+ };
+ NPU_REG()
+ {
+ reset();
+ }
+ void reset()
+ {
+ ID = 268853249;
+ STATUS = 8;
+ CMD = 12;
+ RESET = 0;
+ QBASE = 0;
+ QREAD = 0;
+ QCONFIG = 0;
+ QSIZE = 0;
+ PROT = 0;
+ CONFIG = 268435456;
+ LOCK = 0;
+ REGIONCFG = 0;
+ AXI_LIMIT0 = 0;
+ AXI_LIMIT1 = 0;
+ AXI_LIMIT2 = 0;
+ AXI_LIMIT3 = 0;
+ for (size_t i = 0; i < (sizeof(BASEP) / sizeof(BASEP[0])); ++i)
+ BASEP[i] = 0;
+ WD_STATUS = 0;
+ MAC_STATUS = 0;
+ AO_STATUS = 0;
+ DMA_STATUS0 = 0;
+ DMA_STATUS1 = 0;
+ CLKFORCE = 0;
+ DEBUG_ADDRESS = 0;
+ DEBUG_MISC = 0;
+ DEBUGCORE = 0;
+ DEBUG_BLOCK = 0;
+ PMCR = 8192;
+ PMCNTENSET = 0;
+ PMCNTENCLR = 0;
+ PMOVSSET = 0;
+ PMOVSCLR = 0;
+ PMINTSET = 0;
+ PMINTCLR = 0;
+ PMCCNTR = 0;
+ PMCCNTR_CFG = 0;
+ PMCAXI_CHAN = 0;
+ KERNEL_X = 0;
+ KERNEL_Y = 0;
+ KERNEL_W_M1 = 0;
+ KERNEL_H_M1 = 0;
+ OFM_CBLK_WIDTH_M1 = 0;
+ OFM_CBLK_HEIGHT_M1 = 0;
+ OFM_CBLK_DEPTH_M1 = 0;
+ IFM_CBLK_DEPTH_M1 = 0;
+ OFM_X = 0;
+ OFM_Y = 0;
+ OFM_Z = 0;
+ IFM_Z = 0;
+ PAD_TOP = 0;
+ PAD_LEFT = 0;
+ IFM_CBLK_WIDTH = 0;
+ IFM_CBLK_HEIGHT = 0;
+ DMA_IFM_SRC = 0;
+ DMA_IFM_DST = 0;
+ DMA_OFM_SRC = 0;
+ DMA_OFM_DST = 0;
+ DMA_WEIGHT_SRC = 0;
+ DMA_CMD_SRC = 0;
+ DMA_CMD_SIZE = 0;
+ DMA_M2M_SRC = 0;
+ DMA_M2M_DST = 0;
+ CURRENT_QREAD = 0;
+ DMA_SCALE_SRC = 0;
+ CURRENT_BLOCK = 0;
+ CURRENT_OP = 0;
+ CURRENT_CMD = 0;
+ for (size_t i = 0; i < (sizeof(PMEVCNTR) / sizeof(PMEVCNTR[0])); ++i)
+ PMEVCNTR[i] = 0;
+ for (size_t i = 0; i < (sizeof(PMEVTYPER) / sizeof(PMEVTYPER[0])); ++i)
+ PMEVTYPER[i] = 0;
+ for (size_t i = 0; i < (sizeof(SHARED_BUFFER) / sizeof(SHARED_BUFFER[0])); ++i)
+ SHARED_BUFFER[i] = 0;
+ IFM_PAD_TOP = 0;
+ IFM_PAD_LEFT = 0;
+ IFM_PAD_RIGHT = 0;
+ IFM_PAD_BOTTOM = 0;
+ IFM_DEPTH_M1 = 0;
+ IFM_PRECISION = 0;
+ IFM_UPSCALE = 0;
+ IFM_ZERO_POINT = 0;
+ IFM_WIDTH0_M1 = 0;
+ IFM_HEIGHT0_M1 = 0;
+ IFM_HEIGHT1_M1 = 0;
+ IFM_IB_END = 0;
+ IFM_REGION = 0;
+ OFM_WIDTH_M1 = 0;
+ OFM_HEIGHT_M1 = 0;
+ OFM_DEPTH_M1 = 0;
+ OFM_PRECISION = 0;
+ OFM_BLK_WIDTH_M1 = 0;
+ OFM_BLK_HEIGHT_M1 = 0;
+ OFM_BLK_DEPTH_M1 = 0;
+ OFM_ZERO_POINT = 0;
+ OFM_WIDTH0_M1 = 0;
+ OFM_HEIGHT0_M1 = 0;
+ OFM_HEIGHT1_M1 = 0;
+ OFM_REGION = 0;
+ KERNEL_WIDTH_M1 = 0;
+ KERNEL_HEIGHT_M1 = 0;
+ KERNEL_STRIDE = 0;
+ PARALLEL_MODE = 0;
+ ACC_FORMAT = 0;
+ ACTIVATION = 0;
+ ACTIVATION_MIN = 0;
+ ACTIVATION_MAX = 0;
+ WEIGHT_REGION = 0;
+ SCALE_REGION = 0;
+ AB_START = 0;
+ BLOCKDEP = 0;
+ DMA0_SRC_REGION = 0;
+ DMA0_DST_REGION = 0;
+ DMA0_SIZE0 = 0;
+ DMA0_SIZE1 = 0;
+ IFM2_BROADCAST = 0;
+ IFM2_SCALAR = 0;
+ IFM2_PRECISION = 0;
+ IFM2_ZERO_POINT = 0;
+ IFM2_WIDTH0_M1 = 0;
+ IFM2_HEIGHT0_M1 = 0;
+ IFM2_HEIGHT1_M1 = 0;
+ IFM2_IB_START = 0;
+ IFM2_REGION = 0;
+ IFM_BASE0 = 0;
+ IFM_BASE1 = 0;
+ IFM_BASE2 = 0;
+ IFM_BASE3 = 0;
+ IFM_STRIDE_X = 0;
+ IFM_STRIDE_Y = 0;
+ IFM_STRIDE_C = 0;
+ OFM_BASE0 = 0;
+ OFM_BASE1 = 0;
+ OFM_BASE2 = 0;
+ OFM_BASE3 = 0;
+ OFM_STRIDE_X = 0;
+ OFM_STRIDE_Y = 0;
+ OFM_STRIDE_C = 0;
+ WEIGHT_BASE = 0;
+ WEIGHT_LENGTH = 0;
+ SCALE_BASE = 0;
+ SCALE_LENGTH = 0;
+ OFM_SCALE = 0;
+ OFM_SCALE_SHIFT = 0;
+ OPA_SCALE = 0;
+ OPA_SCALE_SHIFT = 0;
+ OPB_SCALE = 0;
+ DMA0_SRC = 0;
+ DMA0_DST = 0;
+ DMA0_LEN = 0;
+ DMA0_SKIP0 = 0;
+ DMA0_SKIP1 = 0;
+ IFM2_BASE0 = 0;
+ IFM2_BASE1 = 0;
+ IFM2_BASE2 = 0;
+ IFM2_BASE3 = 0;
+ IFM2_STRIDE_X = 0;
+ IFM2_STRIDE_Y = 0;
+ IFM2_STRIDE_C = 0;
+ WEIGHT1_BASE = 0;
+ WEIGHT1_LENGTH = 0;
+ SCALE1_BASE = 0;
+ SCALE1_LENGTH = 0;
+ REVISION = 0;
+ PID4 = 4;
+ PID5 = 0;
+ PID6 = 0;
+ PID7 = 0;
+ PID0 = 129;
+ PID1 = 181;
+ PID2 = 11;
+ PID3 = 0;
+ CID0 = 13;
+ CID1 = 240;
+ CID2 = 5;
+ CID3 = 177;
+ }
+ uint32_t &operator[](const int addr_offset)
+ {
+ return reinterpret_cast<uint32_t *>(this)[addr_offset / 4];
+ }
+ access_type_t get_access_type(uint32_t offset)
+ {
+ switch (offset)
+ {
+ case 0:
+ return access_type_t::RO;
+ case 4:
+ return access_type_t::RO;
+ case 8:
+ return access_type_t::RW;
+ case 12:
+ return access_type_t::RW;
+ case 16:
+ return access_type_t::RW;
+ case 24:
+ return access_type_t::RO;
+ case 28:
+ return access_type_t::RW;
+ case 32:
+ return access_type_t::RW;
+ case 36:
+ return access_type_t::RO;
+ case 40:
+ return access_type_t::RO;
+ case 44:
+ return access_type_t::RW;
+ case 60:
+ return access_type_t::RW;
+ case 64:
+ return access_type_t::RW;
+ case 68:
+ return access_type_t::RW;
+ case 72:
+ return access_type_t::RW;
+ case 76:
+ return access_type_t::RW;
+ case 128:
+ return access_type_t::RW;
+ case 136:
+ return access_type_t::RW;
+ case 144:
+ return access_type_t::RW;
+ case 152:
+ return access_type_t::RW;
+ case 160:
+ return access_type_t::RW;
+ case 168:
+ return access_type_t::RW;
+ case 176:
+ return access_type_t::RW;
+ case 184:
+ return access_type_t::RW;
+ case 256:
+ return access_type_t::RO;
+ case 260:
+ return access_type_t::RO;
+ case 264:
+ return access_type_t::RO;
+ case 272:
+ return access_type_t::RO;
+ case 276:
+ return access_type_t::RO;
+ case 320:
+ return access_type_t::RW;
+ case 324:
+ return access_type_t::RW;
+ case 328:
+ return access_type_t::RW;
+ case 332:
+ return access_type_t::RW;
+ case 336:
+ return access_type_t::RW;
+ case 384:
+ return access_type_t::RW;
+ case 388:
+ return access_type_t::RW;
+ case 392:
+ return access_type_t::RW;
+ case 396:
+ return access_type_t::RW;
+ case 400:
+ return access_type_t::RW;
+ case 404:
+ return access_type_t::RW;
+ case 408:
+ return access_type_t::RW;
+ case 416:
+ return access_type_t::RW;
+ case 424:
+ return access_type_t::RW;
+ case 428:
+ return access_type_t::RW;
+ case 512:
+ return access_type_t::RO;
+ case 516:
+ return access_type_t::RO;
+ case 520:
+ return access_type_t::RO;
+ case 524:
+ return access_type_t::RO;
+ case 528:
+ return access_type_t::RO;
+ case 532:
+ return access_type_t::RO;
+ case 536:
+ return access_type_t::RO;
+ case 540:
+ return access_type_t::RO;
+ case 544:
+ return access_type_t::RO;
+ case 548:
+ return access_type_t::RO;
+ case 552:
+ return access_type_t::RO;
+ case 556:
+ return access_type_t::RO;
+ case 560:
+ return access_type_t::RO;
+ case 564:
+ return access_type_t::RO;
+ case 568:
+ return access_type_t::RO;
+ case 572:
+ return access_type_t::RO;
+ case 576:
+ return access_type_t::RO;
+ case 584:
+ return access_type_t::RO;
+ case 588:
+ return access_type_t::RO;
+ case 592:
+ return access_type_t::RO;
+ case 600:
+ return access_type_t::RO;
+ case 608:
+ return access_type_t::RO;
+ case 616:
+ return access_type_t::RO;
+ case 620:
+ return access_type_t::RO;
+ case 628:
+ return access_type_t::RO;
+ case 636:
+ return access_type_t::RO;
+ case 640:
+ return access_type_t::RO;
+ case 692:
+ return access_type_t::RO;
+ case 696:
+ return access_type_t::RO;
+ case 700:
+ return access_type_t::RO;
+ case 768:
+ return access_type_t::RW;
+ case 772:
+ return access_type_t::RW;
+ case 776:
+ return access_type_t::RW;
+ case 780:
+ return access_type_t::RW;
+ case 896:
+ return access_type_t::RW;
+ case 900:
+ return access_type_t::RW;
+ case 904:
+ return access_type_t::RW;
+ case 908:
+ return access_type_t::RW;
+ case 1024:
+ return access_type_t::RW;
+ case 1028:
+ return access_type_t::RW;
+ case 1032:
+ return access_type_t::RW;
+ case 1036:
+ return access_type_t::RW;
+ case 1040:
+ return access_type_t::RW;
+ case 1044:
+ return access_type_t::RW;
+ case 1048:
+ return access_type_t::RW;
+ case 1052:
+ return access_type_t::RW;
+ case 1056:
+ return access_type_t::RW;
+ case 1060:
+ return access_type_t::RW;
+ case 1064:
+ return access_type_t::RW;
+ case 1068:
+ return access_type_t::RW;
+ case 1072:
+ return access_type_t::RW;
+ case 1076:
+ return access_type_t::RW;
+ case 1080:
+ return access_type_t::RW;
+ case 1084:
+ return access_type_t::RW;
+ case 1088:
+ return access_type_t::RW;
+ case 1092:
+ return access_type_t::RW;
+ case 1096:
+ return access_type_t::RW;
+ case 1100:
+ return access_type_t::RW;
+ case 1104:
+ return access_type_t::RW;
+ case 1108:
+ return access_type_t::RW;
+ case 1112:
+ return access_type_t::RW;
+ case 1116:
+ return access_type_t::RW;
+ case 1120:
+ return access_type_t::RW;
+ case 1124:
+ return access_type_t::RW;
+ case 1128:
+ return access_type_t::RW;
+ case 1132:
+ return access_type_t::RW;
+ case 1136:
+ return access_type_t::RW;
+ case 1140:
+ return access_type_t::RW;
+ case 1144:
+ return access_type_t::RW;
+ case 1148:
+ return access_type_t::RW;
+ case 1152:
+ return access_type_t::RW;
+ case 1156:
+ return access_type_t::RW;
+ case 1160:
+ return access_type_t::RW;
+ case 1164:
+ return access_type_t::RW;
+ case 1168:
+ return access_type_t::RW;
+ case 1172:
+ return access_type_t::RW;
+ case 1176:
+ return access_type_t::RW;
+ case 1180:
+ return access_type_t::RW;
+ case 1184:
+ return access_type_t::RW;
+ case 1188:
+ return access_type_t::RW;
+ case 1192:
+ return access_type_t::RW;
+ case 1196:
+ return access_type_t::RW;
+ case 1200:
+ return access_type_t::RW;
+ case 1204:
+ return access_type_t::RW;
+ case 1208:
+ return access_type_t::RW;
+ case 1212:
+ return access_type_t::RW;
+ case 1216:
+ return access_type_t::RW;
+ case 1220:
+ return access_type_t::RW;
+ case 1224:
+ return access_type_t::RW;
+ case 1228:
+ return access_type_t::RW;
+ case 1232:
+ return access_type_t::RW;
+ case 1236:
+ return access_type_t::RW;
+ case 1240:
+ return access_type_t::RW;
+ case 1244:
+ return access_type_t::RW;
+ case 1248:
+ return access_type_t::RW;
+ case 1252:
+ return access_type_t::RW;
+ case 1256:
+ return access_type_t::RW;
+ case 1260:
+ return access_type_t::RW;
+ case 1264:
+ return access_type_t::RW;
+ case 1268:
+ return access_type_t::RW;
+ case 1272:
+ return access_type_t::RW;
+ case 1276:
+ return access_type_t::RW;
+ case 1280:
+ return access_type_t::RW;
+ case 1284:
+ return access_type_t::RW;
+ case 1288:
+ return access_type_t::RW;
+ case 1292:
+ return access_type_t::RW;
+ case 1296:
+ return access_type_t::RW;
+ case 1300:
+ return access_type_t::RW;
+ case 1304:
+ return access_type_t::RW;
+ case 1308:
+ return access_type_t::RW;
+ case 1312:
+ return access_type_t::RW;
+ case 1316:
+ return access_type_t::RW;
+ case 1320:
+ return access_type_t::RW;
+ case 1324:
+ return access_type_t::RW;
+ case 1328:
+ return access_type_t::RW;
+ case 1332:
+ return access_type_t::RW;
+ case 1336:
+ return access_type_t::RW;
+ case 1340:
+ return access_type_t::RW;
+ case 1344:
+ return access_type_t::RW;
+ case 1348:
+ return access_type_t::RW;
+ case 1352:
+ return access_type_t::RW;
+ case 1356:
+ return access_type_t::RW;
+ case 1360:
+ return access_type_t::RW;
+ case 1364:
+ return access_type_t::RW;
+ case 1368:
+ return access_type_t::RW;
+ case 1372:
+ return access_type_t::RW;
+ case 1376:
+ return access_type_t::RW;
+ case 1380:
+ return access_type_t::RW;
+ case 1384:
+ return access_type_t::RW;
+ case 1388:
+ return access_type_t::RW;
+ case 1392:
+ return access_type_t::RW;
+ case 1396:
+ return access_type_t::RW;
+ case 1400:
+ return access_type_t::RW;
+ case 1404:
+ return access_type_t::RW;
+ case 1408:
+ return access_type_t::RW;
+ case 1412:
+ return access_type_t::RW;
+ case 1416:
+ return access_type_t::RW;
+ case 1420:
+ return access_type_t::RW;
+ case 1424:
+ return access_type_t::RW;
+ case 1428:
+ return access_type_t::RW;
+ case 1432:
+ return access_type_t::RW;
+ case 1436:
+ return access_type_t::RW;
+ case 1440:
+ return access_type_t::RW;
+ case 1444:
+ return access_type_t::RW;
+ case 1448:
+ return access_type_t::RW;
+ case 1452:
+ return access_type_t::RW;
+ case 1456:
+ return access_type_t::RW;
+ case 1460:
+ return access_type_t::RW;
+ case 1464:
+ return access_type_t::RW;
+ case 1468:
+ return access_type_t::RW;
+ case 1472:
+ return access_type_t::RW;
+ case 1476:
+ return access_type_t::RW;
+ case 1480:
+ return access_type_t::RW;
+ case 1484:
+ return access_type_t::RW;
+ case 1488:
+ return access_type_t::RW;
+ case 1492:
+ return access_type_t::RW;
+ case 1496:
+ return access_type_t::RW;
+ case 1500:
+ return access_type_t::RW;
+ case 1504:
+ return access_type_t::RW;
+ case 1508:
+ return access_type_t::RW;
+ case 1512:
+ return access_type_t::RW;
+ case 1516:
+ return access_type_t::RW;
+ case 1520:
+ return access_type_t::RW;
+ case 1524:
+ return access_type_t::RW;
+ case 1528:
+ return access_type_t::RW;
+ case 1532:
+ return access_type_t::RW;
+ case 1536:
+ return access_type_t::RW;
+ case 1540:
+ return access_type_t::RW;
+ case 1544:
+ return access_type_t::RW;
+ case 1548:
+ return access_type_t::RW;
+ case 1552:
+ return access_type_t::RW;
+ case 1556:
+ return access_type_t::RW;
+ case 1560:
+ return access_type_t::RW;
+ case 1564:
+ return access_type_t::RW;
+ case 1568:
+ return access_type_t::RW;
+ case 1572:
+ return access_type_t::RW;
+ case 1576:
+ return access_type_t::RW;
+ case 1580:
+ return access_type_t::RW;
+ case 1584:
+ return access_type_t::RW;
+ case 1588:
+ return access_type_t::RW;
+ case 1592:
+ return access_type_t::RW;
+ case 1596:
+ return access_type_t::RW;
+ case 1600:
+ return access_type_t::RW;
+ case 1604:
+ return access_type_t::RW;
+ case 1608:
+ return access_type_t::RW;
+ case 1612:
+ return access_type_t::RW;
+ case 1616:
+ return access_type_t::RW;
+ case 1620:
+ return access_type_t::RW;
+ case 1624:
+ return access_type_t::RW;
+ case 1628:
+ return access_type_t::RW;
+ case 1632:
+ return access_type_t::RW;
+ case 1636:
+ return access_type_t::RW;
+ case 1640:
+ return access_type_t::RW;
+ case 1644:
+ return access_type_t::RW;
+ case 1648:
+ return access_type_t::RW;
+ case 1652:
+ return access_type_t::RW;
+ case 1656:
+ return access_type_t::RW;
+ case 1660:
+ return access_type_t::RW;
+ case 1664:
+ return access_type_t::RW;
+ case 1668:
+ return access_type_t::RW;
+ case 1672:
+ return access_type_t::RW;
+ case 1676:
+ return access_type_t::RW;
+ case 1680:
+ return access_type_t::RW;
+ case 1684:
+ return access_type_t::RW;
+ case 1688:
+ return access_type_t::RW;
+ case 1692:
+ return access_type_t::RW;
+ case 1696:
+ return access_type_t::RW;
+ case 1700:
+ return access_type_t::RW;
+ case 1704:
+ return access_type_t::RW;
+ case 1708:
+ return access_type_t::RW;
+ case 1712:
+ return access_type_t::RW;
+ case 1716:
+ return access_type_t::RW;
+ case 1720:
+ return access_type_t::RW;
+ case 1724:
+ return access_type_t::RW;
+ case 1728:
+ return access_type_t::RW;
+ case 1732:
+ return access_type_t::RW;
+ case 1736:
+ return access_type_t::RW;
+ case 1740:
+ return access_type_t::RW;
+ case 1744:
+ return access_type_t::RW;
+ case 1748:
+ return access_type_t::RW;
+ case 1752:
+ return access_type_t::RW;
+ case 1756:
+ return access_type_t::RW;
+ case 1760:
+ return access_type_t::RW;
+ case 1764:
+ return access_type_t::RW;
+ case 1768:
+ return access_type_t::RW;
+ case 1772:
+ return access_type_t::RW;
+ case 1776:
+ return access_type_t::RW;
+ case 1780:
+ return access_type_t::RW;
+ case 1784:
+ return access_type_t::RW;
+ case 1788:
+ return access_type_t::RW;
+ case 1792:
+ return access_type_t::RW;
+ case 1796:
+ return access_type_t::RW;
+ case 1800:
+ return access_type_t::RW;
+ case 1804:
+ return access_type_t::RW;
+ case 1808:
+ return access_type_t::RW;
+ case 1812:
+ return access_type_t::RW;
+ case 1816:
+ return access_type_t::RW;
+ case 1820:
+ return access_type_t::RW;
+ case 1824:
+ return access_type_t::RW;
+ case 1828:
+ return access_type_t::RW;
+ case 1832:
+ return access_type_t::RW;
+ case 1836:
+ return access_type_t::RW;
+ case 1840:
+ return access_type_t::RW;
+ case 1844:
+ return access_type_t::RW;
+ case 1848:
+ return access_type_t::RW;
+ case 1852:
+ return access_type_t::RW;
+ case 1856:
+ return access_type_t::RW;
+ case 1860:
+ return access_type_t::RW;
+ case 1864:
+ return access_type_t::RW;
+ case 1868:
+ return access_type_t::RW;
+ case 1872:
+ return access_type_t::RW;
+ case 1876:
+ return access_type_t::RW;
+ case 1880:
+ return access_type_t::RW;
+ case 1884:
+ return access_type_t::RW;
+ case 1888:
+ return access_type_t::RW;
+ case 1892:
+ return access_type_t::RW;
+ case 1896:
+ return access_type_t::RW;
+ case 1900:
+ return access_type_t::RW;
+ case 1904:
+ return access_type_t::RW;
+ case 1908:
+ return access_type_t::RW;
+ case 1912:
+ return access_type_t::RW;
+ case 1916:
+ return access_type_t::RW;
+ case 1920:
+ return access_type_t::RW;
+ case 1924:
+ return access_type_t::RW;
+ case 1928:
+ return access_type_t::RW;
+ case 1932:
+ return access_type_t::RW;
+ case 1936:
+ return access_type_t::RW;
+ case 1940:
+ return access_type_t::RW;
+ case 1944:
+ return access_type_t::RW;
+ case 1948:
+ return access_type_t::RW;
+ case 1952:
+ return access_type_t::RW;
+ case 1956:
+ return access_type_t::RW;
+ case 1960:
+ return access_type_t::RW;
+ case 1964:
+ return access_type_t::RW;
+ case 1968:
+ return access_type_t::RW;
+ case 1972:
+ return access_type_t::RW;
+ case 1976:
+ return access_type_t::RW;
+ case 1980:
+ return access_type_t::RW;
+ case 1984:
+ return access_type_t::RW;
+ case 1988:
+ return access_type_t::RW;
+ case 1992:
+ return access_type_t::RW;
+ case 1996:
+ return access_type_t::RW;
+ case 2000:
+ return access_type_t::RW;
+ case 2004:
+ return access_type_t::RW;
+ case 2008:
+ return access_type_t::RW;
+ case 2012:
+ return access_type_t::RW;
+ case 2016:
+ return access_type_t::RW;
+ case 2020:
+ return access_type_t::RW;
+ case 2024:
+ return access_type_t::RW;
+ case 2028:
+ return access_type_t::RW;
+ case 2032:
+ return access_type_t::RW;
+ case 2036:
+ return access_type_t::RW;
+ case 2040:
+ return access_type_t::RW;
+ case 2044:
+ return access_type_t::RW;
+ case 2048:
+ return access_type_t::RW;
+ case 2052:
+ return access_type_t::RW;
+ case 2056:
+ return access_type_t::RW;
+ case 2060:
+ return access_type_t::RW;
+ case 2064:
+ return access_type_t::RW;
+ case 2068:
+ return access_type_t::RW;
+ case 2076:
+ return access_type_t::RW;
+ case 2084:
+ return access_type_t::RW;
+ case 2088:
+ return access_type_t::RW;
+ case 2092:
+ return access_type_t::RW;
+ case 2096:
+ return access_type_t::RW;
+ case 2100:
+ return access_type_t::RW;
+ case 2108:
+ return access_type_t::RW;
+ case 2116:
+ return access_type_t::RW;
+ case 2120:
+ return access_type_t::RW;
+ case 2124:
+ return access_type_t::RW;
+ case 2128:
+ return access_type_t::RW;
+ case 2132:
+ return access_type_t::RW;
+ case 2136:
+ return access_type_t::RW;
+ case 2140:
+ return access_type_t::RW;
+ case 2144:
+ return access_type_t::RW;
+ case 2152:
+ return access_type_t::RW;
+ case 2156:
+ return access_type_t::RW;
+ case 2160:
+ return access_type_t::RW;
+ case 2172:
+ return access_type_t::RW;
+ case 2176:
+ return access_type_t::RW;
+ case 2180:
+ return access_type_t::RW;
+ case 2184:
+ return access_type_t::RW;
+ case 2188:
+ return access_type_t::RW;
+ case 2192:
+ return access_type_t::RW;
+ case 2196:
+ return access_type_t::RW;
+ case 2200:
+ return access_type_t::RW;
+ case 2204:
+ return access_type_t::RW;
+ case 2208:
+ return access_type_t::RW;
+ case 2212:
+ return access_type_t::RW;
+ case 2228:
+ return access_type_t::RW;
+ case 2236:
+ return access_type_t::RW;
+ case 2240:
+ return access_type_t::RW;
+ case 2244:
+ return access_type_t::RW;
+ case 2248:
+ return access_type_t::RW;
+ case 2252:
+ return access_type_t::RW;
+ case 2304:
+ return access_type_t::RW;
+ case 2308:
+ return access_type_t::RW;
+ case 2324:
+ return access_type_t::RW;
+ case 2340:
+ return access_type_t::RW;
+ case 2344:
+ return access_type_t::RW;
+ case 2348:
+ return access_type_t::RW;
+ case 2352:
+ return access_type_t::RW;
+ case 2356:
+ return access_type_t::RW;
+ case 2364:
+ return access_type_t::RW;
+ case 2560:
+ return access_type_t::RW;
+ case 2568:
+ return access_type_t::RW;
+ case 2576:
+ return access_type_t::RW;
+ case 2584:
+ return access_type_t::RW;
+ case 2592:
+ return access_type_t::RW;
+ case 2600:
+ return access_type_t::RW;
+ case 2608:
+ return access_type_t::RW;
+ case 2624:
+ return access_type_t::RW;
+ case 2632:
+ return access_type_t::RW;
+ case 2640:
+ return access_type_t::RW;
+ case 2648:
+ return access_type_t::RW;
+ case 2656:
+ return access_type_t::RW;
+ case 2664:
+ return access_type_t::RW;
+ case 2672:
+ return access_type_t::RW;
+ case 2688:
+ return access_type_t::RW;
+ case 2696:
+ return access_type_t::RW;
+ case 2704:
+ return access_type_t::RW;
+ case 2712:
+ return access_type_t::RW;
+ case 2720:
+ return access_type_t::RW;
+ case 2724:
+ return access_type_t::RW;
+ case 2728:
+ return access_type_t::RW;
+ case 2732:
+ return access_type_t::RW;
+ case 2736:
+ return access_type_t::RW;
+ case 2752:
+ return access_type_t::RW;
+ case 2760:
+ return access_type_t::RW;
+ case 2768:
+ return access_type_t::RW;
+ case 2776:
+ return access_type_t::RW;
+ case 2784:
+ return access_type_t::RW;
+ case 2816:
+ return access_type_t::RW;
+ case 2824:
+ return access_type_t::RW;
+ case 2832:
+ return access_type_t::RW;
+ case 2840:
+ return access_type_t::RW;
+ case 2848:
+ return access_type_t::RW;
+ case 2856:
+ return access_type_t::RW;
+ case 2864:
+ return access_type_t::RW;
+ case 2880:
+ return access_type_t::RW;
+ case 2888:
+ return access_type_t::RW;
+ case 2896:
+ return access_type_t::RW;
+ case 2904:
+ return access_type_t::RW;
+ case 4032:
+ return access_type_t::RO;
+ case 4048:
+ return access_type_t::RO;
+ case 4052:
+ return access_type_t::RO;
+ case 4056:
+ return access_type_t::RO;
+ case 4060:
+ return access_type_t::RO;
+ case 4064:
+ return access_type_t::RO;
+ case 4068:
+ return access_type_t::RO;
+ case 4072:
+ return access_type_t::RO;
+ case 4076:
+ return access_type_t::RO;
+ case 4080:
+ return access_type_t::RO;
+ case 4084:
+ return access_type_t::RO;
+ case 4088:
+ return access_type_t::RO;
+ case 4092:
+ return access_type_t::RO;
+ default:
+ return access_type_t::RO;
+ }
+ }
+#endif
+};
+
+#ifdef __cplusplus
+struct isa
+{
+#ifdef NPU_DISASSEMBLE
+ static int disassemble(const uint32_t *in,
+ std::string &op,
+ std::vector<std::pair<std::string, std::string>> &fields)
+ {
+ switch (*in & 0xffff)
+ {
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP):
+ {
+ const npu_op_stop_t &v = *reinterpret_cast<const npu_op_stop_t *>(in);
+ op = "NPU_OP_STOP";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ):
+ {
+ const npu_op_irq_t &v = *reinterpret_cast<const npu_op_irq_t *>(in);
+ op = "NPU_OP_IRQ";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV):
+ {
+ const npu_op_conv_t &v = *reinterpret_cast<const npu_op_conv_t *>(in);
+ op = "NPU_OP_CONV";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE):
+ {
+ const npu_op_depthwise_t &v = *reinterpret_cast<const npu_op_depthwise_t *>(in);
+ op = "NPU_OP_DEPTHWISE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL):
+ {
+ const npu_op_pool_t &v = *reinterpret_cast<const npu_op_pool_t *>(in);
+ op = "NPU_OP_POOL";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE):
+ {
+ const npu_op_elementwise_t &v = *reinterpret_cast<const npu_op_elementwise_t *>(in);
+ op = "NPU_OP_ELEMENTWISE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START):
+ {
+ const npu_op_dma_start_t &v = *reinterpret_cast<const npu_op_dma_start_t *>(in);
+ op = "NPU_OP_DMA_START";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT):
+ {
+ const npu_op_dma_wait_t &v = *reinterpret_cast<const npu_op_dma_wait_t *>(in);
+ op = "NPU_OP_DMA_WAIT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT):
+ {
+ const npu_op_kernel_wait_t &v = *reinterpret_cast<const npu_op_kernel_wait_t *>(in);
+ op = "NPU_OP_KERNEL_WAIT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK):
+ {
+ const npu_op_pmu_mask_t &v = *reinterpret_cast<const npu_op_pmu_mask_t *>(in);
+ op = "NPU_OP_PMU_MASK";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP):
+ {
+ const npu_set_ifm_pad_top_t &v = *reinterpret_cast<const npu_set_ifm_pad_top_t *>(in);
+ op = "NPU_SET_IFM_PAD_TOP";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT):
+ {
+ const npu_set_ifm_pad_left_t &v = *reinterpret_cast<const npu_set_ifm_pad_left_t *>(in);
+ op = "NPU_SET_IFM_PAD_LEFT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT):
+ {
+ const npu_set_ifm_pad_right_t &v = *reinterpret_cast<const npu_set_ifm_pad_right_t *>(in);
+ op = "NPU_SET_IFM_PAD_RIGHT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM):
+ {
+ const npu_set_ifm_pad_bottom_t &v = *reinterpret_cast<const npu_set_ifm_pad_bottom_t *>(in);
+ op = "NPU_SET_IFM_PAD_BOTTOM";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1):
+ {
+ const npu_set_ifm_depth_m1_t &v = *reinterpret_cast<const npu_set_ifm_depth_m1_t *>(in);
+ op = "NPU_SET_IFM_DEPTH_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION):
+ {
+ const npu_set_ifm_precision_t &v = *reinterpret_cast<const npu_set_ifm_precision_t *>(in);
+ op = "NPU_SET_IFM_PRECISION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE):
+ {
+ const npu_set_ifm_upscale_t &v = *reinterpret_cast<const npu_set_ifm_upscale_t *>(in);
+ op = "NPU_SET_IFM_UPSCALE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT):
+ {
+ const npu_set_ifm_zero_point_t &v = *reinterpret_cast<const npu_set_ifm_zero_point_t *>(in);
+ op = "NPU_SET_IFM_ZERO_POINT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1):
+ {
+ const npu_set_ifm_width0_m1_t &v = *reinterpret_cast<const npu_set_ifm_width0_m1_t *>(in);
+ op = "NPU_SET_IFM_WIDTH0_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1):
+ {
+ const npu_set_ifm_height0_m1_t &v = *reinterpret_cast<const npu_set_ifm_height0_m1_t *>(in);
+ op = "NPU_SET_IFM_HEIGHT0_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1):
+ {
+ const npu_set_ifm_height1_m1_t &v = *reinterpret_cast<const npu_set_ifm_height1_m1_t *>(in);
+ op = "NPU_SET_IFM_HEIGHT1_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END):
+ {
+ const npu_set_ifm_ib_end_t &v = *reinterpret_cast<const npu_set_ifm_ib_end_t *>(in);
+ op = "NPU_SET_IFM_IB_END";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION):
+ {
+ const npu_set_ifm_region_t &v = *reinterpret_cast<const npu_set_ifm_region_t *>(in);
+ op = "NPU_SET_IFM_REGION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1):
+ {
+ const npu_set_ofm_width_m1_t &v = *reinterpret_cast<const npu_set_ofm_width_m1_t *>(in);
+ op = "NPU_SET_OFM_WIDTH_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1):
+ {
+ const npu_set_ofm_height_m1_t &v = *reinterpret_cast<const npu_set_ofm_height_m1_t *>(in);
+ op = "NPU_SET_OFM_HEIGHT_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1):
+ {
+ const npu_set_ofm_depth_m1_t &v = *reinterpret_cast<const npu_set_ofm_depth_m1_t *>(in);
+ op = "NPU_SET_OFM_DEPTH_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION):
+ {
+ const npu_set_ofm_precision_t &v = *reinterpret_cast<const npu_set_ofm_precision_t *>(in);
+ op = "NPU_SET_OFM_PRECISION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1):
+ {
+ const npu_set_ofm_blk_width_m1_t &v = *reinterpret_cast<const npu_set_ofm_blk_width_m1_t *>(in);
+ op = "NPU_SET_OFM_BLK_WIDTH_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1):
+ {
+ const npu_set_ofm_blk_height_m1_t &v = *reinterpret_cast<const npu_set_ofm_blk_height_m1_t *>(in);
+ op = "NPU_SET_OFM_BLK_HEIGHT_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1):
+ {
+ const npu_set_ofm_blk_depth_m1_t &v = *reinterpret_cast<const npu_set_ofm_blk_depth_m1_t *>(in);
+ op = "NPU_SET_OFM_BLK_DEPTH_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT):
+ {
+ const npu_set_ofm_zero_point_t &v = *reinterpret_cast<const npu_set_ofm_zero_point_t *>(in);
+ op = "NPU_SET_OFM_ZERO_POINT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1):
+ {
+ const npu_set_ofm_width0_m1_t &v = *reinterpret_cast<const npu_set_ofm_width0_m1_t *>(in);
+ op = "NPU_SET_OFM_WIDTH0_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1):
+ {
+ const npu_set_ofm_height0_m1_t &v = *reinterpret_cast<const npu_set_ofm_height0_m1_t *>(in);
+ op = "NPU_SET_OFM_HEIGHT0_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1):
+ {
+ const npu_set_ofm_height1_m1_t &v = *reinterpret_cast<const npu_set_ofm_height1_m1_t *>(in);
+ op = "NPU_SET_OFM_HEIGHT1_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION):
+ {
+ const npu_set_ofm_region_t &v = *reinterpret_cast<const npu_set_ofm_region_t *>(in);
+ op = "NPU_SET_OFM_REGION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1):
+ {
+ const npu_set_kernel_width_m1_t &v = *reinterpret_cast<const npu_set_kernel_width_m1_t *>(in);
+ op = "NPU_SET_KERNEL_WIDTH_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1):
+ {
+ const npu_set_kernel_height_m1_t &v = *reinterpret_cast<const npu_set_kernel_height_m1_t *>(in);
+ op = "NPU_SET_KERNEL_HEIGHT_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE):
+ {
+ const npu_set_kernel_stride_t &v = *reinterpret_cast<const npu_set_kernel_stride_t *>(in);
+ op = "NPU_SET_KERNEL_STRIDE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_PARALLEL_MODE):
+ {
+ const npu_set_parallel_mode_t &v = *reinterpret_cast<const npu_set_parallel_mode_t *>(in);
+ op = "NPU_SET_PARALLEL_MODE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT):
+ {
+ const npu_set_acc_format_t &v = *reinterpret_cast<const npu_set_acc_format_t *>(in);
+ op = "NPU_SET_ACC_FORMAT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION):
+ {
+ const npu_set_activation_t &v = *reinterpret_cast<const npu_set_activation_t *>(in);
+ op = "NPU_SET_ACTIVATION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN):
+ {
+ const npu_set_activation_min_t &v = *reinterpret_cast<const npu_set_activation_min_t *>(in);
+ op = "NPU_SET_ACTIVATION_MIN";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX):
+ {
+ const npu_set_activation_max_t &v = *reinterpret_cast<const npu_set_activation_max_t *>(in);
+ op = "NPU_SET_ACTIVATION_MAX";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION):
+ {
+ const npu_set_weight_region_t &v = *reinterpret_cast<const npu_set_weight_region_t *>(in);
+ op = "NPU_SET_WEIGHT_REGION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION):
+ {
+ const npu_set_scale_region_t &v = *reinterpret_cast<const npu_set_scale_region_t *>(in);
+ op = "NPU_SET_SCALE_REGION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START):
+ {
+ const npu_set_ab_start_t &v = *reinterpret_cast<const npu_set_ab_start_t *>(in);
+ op = "NPU_SET_AB_START";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP):
+ {
+ const npu_set_blockdep_t &v = *reinterpret_cast<const npu_set_blockdep_t *>(in);
+ op = "NPU_SET_BLOCKDEP";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION):
+ {
+ const npu_set_dma0_src_region_t &v = *reinterpret_cast<const npu_set_dma0_src_region_t *>(in);
+ op = "NPU_SET_DMA0_SRC_REGION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION):
+ {
+ const npu_set_dma0_dst_region_t &v = *reinterpret_cast<const npu_set_dma0_dst_region_t *>(in);
+ op = "NPU_SET_DMA0_DST_REGION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0):
+ {
+ const npu_set_dma0_size0_t &v = *reinterpret_cast<const npu_set_dma0_size0_t *>(in);
+ op = "NPU_SET_DMA0_SIZE0";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1):
+ {
+ const npu_set_dma0_size1_t &v = *reinterpret_cast<const npu_set_dma0_size1_t *>(in);
+ op = "NPU_SET_DMA0_SIZE1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST):
+ {
+ const npu_set_ifm2_broadcast_t &v = *reinterpret_cast<const npu_set_ifm2_broadcast_t *>(in);
+ op = "NPU_SET_IFM2_BROADCAST";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR):
+ {
+ const npu_set_ifm2_scalar_t &v = *reinterpret_cast<const npu_set_ifm2_scalar_t *>(in);
+ op = "NPU_SET_IFM2_SCALAR";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION):
+ {
+ const npu_set_ifm2_precision_t &v = *reinterpret_cast<const npu_set_ifm2_precision_t *>(in);
+ op = "NPU_SET_IFM2_PRECISION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT):
+ {
+ const npu_set_ifm2_zero_point_t &v = *reinterpret_cast<const npu_set_ifm2_zero_point_t *>(in);
+ op = "NPU_SET_IFM2_ZERO_POINT";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1):
+ {
+ const npu_set_ifm2_width0_m1_t &v = *reinterpret_cast<const npu_set_ifm2_width0_m1_t *>(in);
+ op = "NPU_SET_IFM2_WIDTH0_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1):
+ {
+ const npu_set_ifm2_height0_m1_t &v = *reinterpret_cast<const npu_set_ifm2_height0_m1_t *>(in);
+ op = "NPU_SET_IFM2_HEIGHT0_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1):
+ {
+ const npu_set_ifm2_height1_m1_t &v = *reinterpret_cast<const npu_set_ifm2_height1_m1_t *>(in);
+ op = "NPU_SET_IFM2_HEIGHT1_M1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START):
+ {
+ const npu_set_ifm2_ib_start_t &v = *reinterpret_cast<const npu_set_ifm2_ib_start_t *>(in);
+ op = "NPU_SET_IFM2_IB_START";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION):
+ {
+ const npu_set_ifm2_region_t &v = *reinterpret_cast<const npu_set_ifm2_region_t *>(in);
+ op = "NPU_SET_IFM2_REGION";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0):
+ {
+ const npu_set_ifm_base0_t &v = *reinterpret_cast<const npu_set_ifm_base0_t *>(in);
+ op = "NPU_SET_IFM_BASE0";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1):
+ {
+ const npu_set_ifm_base1_t &v = *reinterpret_cast<const npu_set_ifm_base1_t *>(in);
+ op = "NPU_SET_IFM_BASE1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2):
+ {
+ const npu_set_ifm_base2_t &v = *reinterpret_cast<const npu_set_ifm_base2_t *>(in);
+ op = "NPU_SET_IFM_BASE2";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3):
+ {
+ const npu_set_ifm_base3_t &v = *reinterpret_cast<const npu_set_ifm_base3_t *>(in);
+ op = "NPU_SET_IFM_BASE3";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X):
+ {
+ const npu_set_ifm_stride_x_t &v = *reinterpret_cast<const npu_set_ifm_stride_x_t *>(in);
+ op = "NPU_SET_IFM_STRIDE_X";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y):
+ {
+ const npu_set_ifm_stride_y_t &v = *reinterpret_cast<const npu_set_ifm_stride_y_t *>(in);
+ op = "NPU_SET_IFM_STRIDE_Y";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C):
+ {
+ const npu_set_ifm_stride_c_t &v = *reinterpret_cast<const npu_set_ifm_stride_c_t *>(in);
+ op = "NPU_SET_IFM_STRIDE_C";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0):
+ {
+ const npu_set_ofm_base0_t &v = *reinterpret_cast<const npu_set_ofm_base0_t *>(in);
+ op = "NPU_SET_OFM_BASE0";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1):
+ {
+ const npu_set_ofm_base1_t &v = *reinterpret_cast<const npu_set_ofm_base1_t *>(in);
+ op = "NPU_SET_OFM_BASE1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2):
+ {
+ const npu_set_ofm_base2_t &v = *reinterpret_cast<const npu_set_ofm_base2_t *>(in);
+ op = "NPU_SET_OFM_BASE2";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3):
+ {
+ const npu_set_ofm_base3_t &v = *reinterpret_cast<const npu_set_ofm_base3_t *>(in);
+ op = "NPU_SET_OFM_BASE3";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X):
+ {
+ const npu_set_ofm_stride_x_t &v = *reinterpret_cast<const npu_set_ofm_stride_x_t *>(in);
+ op = "NPU_SET_OFM_STRIDE_X";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y):
+ {
+ const npu_set_ofm_stride_y_t &v = *reinterpret_cast<const npu_set_ofm_stride_y_t *>(in);
+ op = "NPU_SET_OFM_STRIDE_Y";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C):
+ {
+ const npu_set_ofm_stride_c_t &v = *reinterpret_cast<const npu_set_ofm_stride_c_t *>(in);
+ op = "NPU_SET_OFM_STRIDE_C";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE):
+ {
+ const npu_set_weight_base_t &v = *reinterpret_cast<const npu_set_weight_base_t *>(in);
+ op = "NPU_SET_WEIGHT_BASE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH):
+ {
+ const npu_set_weight_length_t &v = *reinterpret_cast<const npu_set_weight_length_t *>(in);
+ op = "NPU_SET_WEIGHT_LENGTH";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE):
+ {
+ const npu_set_scale_base_t &v = *reinterpret_cast<const npu_set_scale_base_t *>(in);
+ op = "NPU_SET_SCALE_BASE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH):
+ {
+ const npu_set_scale_length_t &v = *reinterpret_cast<const npu_set_scale_length_t *>(in);
+ op = "NPU_SET_SCALE_LENGTH";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE):
+ {
+ const npu_set_ofm_scale_t &v = *reinterpret_cast<const npu_set_ofm_scale_t *>(in);
+ op = "NPU_SET_OFM_SCALE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE):
+ {
+ const npu_set_opa_scale_t &v = *reinterpret_cast<const npu_set_opa_scale_t *>(in);
+ op = "NPU_SET_OPA_SCALE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE):
+ {
+ const npu_set_opb_scale_t &v = *reinterpret_cast<const npu_set_opb_scale_t *>(in);
+ op = "NPU_SET_OPB_SCALE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC):
+ {
+ const npu_set_dma0_src_t &v = *reinterpret_cast<const npu_set_dma0_src_t *>(in);
+ op = "NPU_SET_DMA0_SRC";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST):
+ {
+ const npu_set_dma0_dst_t &v = *reinterpret_cast<const npu_set_dma0_dst_t *>(in);
+ op = "NPU_SET_DMA0_DST";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN):
+ {
+ const npu_set_dma0_len_t &v = *reinterpret_cast<const npu_set_dma0_len_t *>(in);
+ op = "NPU_SET_DMA0_LEN";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP0):
+ {
+ const npu_set_dma0_skip0_t &v = *reinterpret_cast<const npu_set_dma0_skip0_t *>(in);
+ op = "NPU_SET_DMA0_SKIP0";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP1):
+ {
+ const npu_set_dma0_skip1_t &v = *reinterpret_cast<const npu_set_dma0_skip1_t *>(in);
+ op = "NPU_SET_DMA0_SKIP1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0):
+ {
+ const npu_set_ifm2_base0_t &v = *reinterpret_cast<const npu_set_ifm2_base0_t *>(in);
+ op = "NPU_SET_IFM2_BASE0";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1):
+ {
+ const npu_set_ifm2_base1_t &v = *reinterpret_cast<const npu_set_ifm2_base1_t *>(in);
+ op = "NPU_SET_IFM2_BASE1";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2):
+ {
+ const npu_set_ifm2_base2_t &v = *reinterpret_cast<const npu_set_ifm2_base2_t *>(in);
+ op = "NPU_SET_IFM2_BASE2";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3):
+ {
+ const npu_set_ifm2_base3_t &v = *reinterpret_cast<const npu_set_ifm2_base3_t *>(in);
+ op = "NPU_SET_IFM2_BASE3";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X):
+ {
+ const npu_set_ifm2_stride_x_t &v = *reinterpret_cast<const npu_set_ifm2_stride_x_t *>(in);
+ op = "NPU_SET_IFM2_STRIDE_X";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y):
+ {
+ const npu_set_ifm2_stride_y_t &v = *reinterpret_cast<const npu_set_ifm2_stride_y_t *>(in);
+ op = "NPU_SET_IFM2_STRIDE_Y";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C):
+ {
+ const npu_set_ifm2_stride_c_t &v = *reinterpret_cast<const npu_set_ifm2_stride_c_t *>(in);
+ op = "NPU_SET_IFM2_STRIDE_C";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE):
+ {
+ const npu_set_weight1_base_t &v = *reinterpret_cast<const npu_set_weight1_base_t *>(in);
+ op = "NPU_SET_WEIGHT1_BASE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH):
+ {
+ const npu_set_weight1_length_t &v = *reinterpret_cast<const npu_set_weight1_length_t *>(in);
+ op = "NPU_SET_WEIGHT1_LENGTH";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_BASE):
+ {
+ const npu_set_scale1_base_t &v = *reinterpret_cast<const npu_set_scale1_base_t *>(in);
+ op = "NPU_SET_SCALE1_BASE";
+ v.disassemble(fields);
+ break;
+ }
+ case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
+ static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_LENGTH):
+ {
+ const npu_set_scale1_length_t &v = *reinterpret_cast<const npu_set_scale1_length_t *>(in);
+ op = "NPU_SET_SCALE1_LENGTH";
+ v.disassemble(fields);
+ break;
+ }
+ }
+ return (*in & (3 << 14)) != 0 ? 2 : 1;
+ }
+#endif
+#endif
+ // Signal the end of command stream
+ struct npu_op_stop_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t mask : 16; // Encoding for 16-bit mask value
+#ifdef __cplusplus
+ public:
+ npu_op_stop_t(uint32_t _mask) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ mask(static_cast<uint16_t>(_mask) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_op_stop_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mask(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_stop_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_stop_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_mask() const
+ {
+ return static_cast<uint32_t>(mask);
+ }
+ CONSTEXPR npu_op_stop_t &set_mask(uint32_t value)
+ {
+ mask = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("mask", std::to_string(mask)));
+ }
+#endif
+#endif
+ };
+ // Raises an IRQ to the host
+ struct npu_op_irq_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t mask : 16; // Encoding for 16-bit mask value
+#ifdef __cplusplus
+ public:
+ npu_op_irq_t(uint32_t _mask) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ mask(static_cast<uint16_t>(_mask) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_op_irq_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mask(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_irq_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_irq_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_mask() const
+ {
+ return static_cast<uint32_t>(mask);
+ }
+ CONSTEXPR npu_op_irq_t &set_mask(uint32_t value)
+ {
+ mask = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("mask", std::to_string(mask)));
+ }
+#endif
+#endif
+ };
+ // 2D convolution
+ struct npu_op_conv_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+#ifdef __cplusplus
+ public:
+ CONSTEXPR npu_op_conv_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_conv_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_conv_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const {}
+#endif
+#endif
+ };
+ // Depth-wise 2D convolution
+ struct npu_op_depthwise_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+#ifdef __cplusplus
+ public:
+ CONSTEXPR npu_op_depthwise_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_depthwise_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_depthwise_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const {}
+#endif
+#endif
+ };
+ // Pooling
+ struct npu_op_pool_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t pooling_mode : 3; // Pooling mode
+ uint32_t reserved1 : 13;
+#ifdef __cplusplus
+ public:
+ npu_op_pool_t(NPU_NAMESPACE::pooling_mode _pooling_mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ pooling_mode(static_cast<uint8_t>(_pooling_mode) & ((1U << 3) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_op_pool_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pooling_mode(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_pool_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_pool_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::pooling_mode get_pooling_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::pooling_mode>(pooling_mode);
+ }
+ CONSTEXPR npu_op_pool_t &set_pooling_mode(NPU_NAMESPACE::pooling_mode value)
+ {
+ pooling_mode = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "pooling_mode",
+ (pooling_mode < (sizeof(pooling_mode_str) / sizeof(pooling_mode_str[0])) ?
+ pooling_mode_str[pooling_mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // Elementwise operation
+ struct npu_op_elementwise_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t elementwise_mode : 6; // Elementwise mode
+ uint32_t reserved1 : 10;
+#ifdef __cplusplus
+ public:
+ npu_op_elementwise_t(NPU_NAMESPACE::elementwise_mode _elementwise_mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ elementwise_mode(static_cast<uint8_t>(_elementwise_mode) & ((1U << 6) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_op_elementwise_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), elementwise_mode(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_elementwise_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_elementwise_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::elementwise_mode get_elementwise_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::elementwise_mode>(elementwise_mode);
+ }
+ CONSTEXPR npu_op_elementwise_t &set_elementwise_mode(NPU_NAMESPACE::elementwise_mode value)
+ {
+ elementwise_mode = static_cast<uint8_t>(value) & ((1U << 6) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "elementwise_mode",
+ (elementwise_mode < (sizeof(elementwise_mode_str) / sizeof(elementwise_mode_str[0])) ?
+ elementwise_mode_str[elementwise_mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // Queue new DMA for the given channel
+ struct npu_op_dma_start_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+#ifdef __cplusplus
+ public:
+ CONSTEXPR npu_op_dma_start_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_dma_start_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_dma_start_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const {}
+#endif
+#endif
+ };
+ // Wait for the DMA channel to have k or fewer active descriptors outstanding
+ struct npu_op_dma_wait_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t k : 4; // Number of outstanding descriptors
+ uint32_t reserved1 : 12;
+#ifdef __cplusplus
+ public:
+ npu_op_dma_wait_t(uint32_t _k) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ k(static_cast<uint8_t>(_k) & ((1U << 4) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_op_dma_wait_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), k(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_dma_wait_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_dma_wait_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_k() const
+ {
+ return static_cast<uint32_t>(k);
+ }
+ CONSTEXPR npu_op_dma_wait_t &set_k(uint32_t value)
+ {
+ k = static_cast<uint8_t>(value) & ((1U << 4) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("k", std::to_string(k)));
+ }
+#endif
+#endif
+ };
+ // Wait for n or fewer kernel operations to be remaining
+ struct npu_op_kernel_wait_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t n : 2; // Number of kernel operations in range 0-3
+ uint32_t reserved1 : 14;
+#ifdef __cplusplus
+ public:
+ npu_op_kernel_wait_t(uint32_t _n) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ n(static_cast<uint8_t>(_n) & ((1U << 2) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_op_kernel_wait_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), n(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_kernel_wait_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_kernel_wait_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_n() const
+ {
+ return static_cast<uint32_t>(n);
+ }
+ CONSTEXPR npu_op_kernel_wait_t &set_n(uint32_t value)
+ {
+ n = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("n", std::to_string(n)));
+ }
+#endif
+#endif
+ };
+ // Enable or disable PMU counting (debug feature only)
+ struct npu_op_pmu_mask_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t enable : 1; // Enable or disable PMU mask
+ uint32_t reserved1 : 15;
+#ifdef __cplusplus
+ public:
+ npu_op_pmu_mask_t(uint32_t _enable) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ enable(static_cast<uint8_t>(_enable) & ((1U << 1) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_op_pmu_mask_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), enable(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_op_pmu_mask_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_op_pmu_mask_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_enable() const
+ {
+ return static_cast<uint32_t>(enable);
+ }
+ CONSTEXPR npu_op_pmu_mask_t &set_enable(uint32_t value)
+ {
+ enable = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("enable", std::to_string(enable)));
+ }
+#endif
+#endif
+ };
+ // IFM top pad
+ struct npu_set_ifm_pad_top_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t pad : 7; // IFM top pad
+ uint32_t reserved1 : 9;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_pad_top_t(uint32_t _pad) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ pad(static_cast<uint8_t>(_pad) & ((1U << 7) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm_pad_top_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_pad_top_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_pad_top_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_pad() const
+ {
+ return static_cast<uint32_t>(pad);
+ }
+ CONSTEXPR npu_set_ifm_pad_top_t &set_pad(uint32_t value)
+ {
+ pad = static_cast<uint8_t>(value) & ((1U << 7) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
+ }
+#endif
+#endif
+ };
+ // IFM left pad
+ struct npu_set_ifm_pad_left_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t pad : 7; // IFM left pad
+ uint32_t reserved1 : 9;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_pad_left_t(uint32_t _pad) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ pad(static_cast<uint8_t>(_pad) & ((1U << 7) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm_pad_left_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_pad_left_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_pad_left_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_pad() const
+ {
+ return static_cast<uint32_t>(pad);
+ }
+ CONSTEXPR npu_set_ifm_pad_left_t &set_pad(uint32_t value)
+ {
+ pad = static_cast<uint8_t>(value) & ((1U << 7) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
+ }
+#endif
+#endif
+ };
+ // IFM right pad
+ struct npu_set_ifm_pad_right_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t pad : 8; // IFM right pad. Max value is 128
+ uint32_t reserved1 : 8;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_pad_right_t(uint32_t _pad) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ pad(static_cast<uint8_t>(_pad) & ((1U << 8) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm_pad_right_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_pad_right_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_pad_right_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_pad() const
+ {
+ return static_cast<uint32_t>(pad);
+ }
+ CONSTEXPR npu_set_ifm_pad_right_t &set_pad(uint32_t value)
+ {
+ pad = static_cast<uint8_t>(value) & ((1U << 8) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
+ }
+#endif
+#endif
+ };
+ // IFM bottom pad
+ struct npu_set_ifm_pad_bottom_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t pad : 8; // IFM bottom pad. Max value is 128
+ uint32_t reserved1 : 8;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_pad_bottom_t(uint32_t _pad) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ pad(static_cast<uint8_t>(_pad) & ((1U << 8) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm_pad_bottom_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_pad_bottom_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_pad_bottom_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_pad() const
+ {
+ return static_cast<uint32_t>(pad);
+ }
+ CONSTEXPR npu_set_ifm_pad_bottom_t &set_pad(uint32_t value)
+ {
+ pad = static_cast<uint8_t>(value) & ((1U << 8) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
+ }
+#endif
+#endif
+ };
+ // Number of input channels for convolution
+ struct npu_set_ifm_depth_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t depth_m1 : 16; // Number of input channels for convolution
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_depth_m1_t(uint32_t _depth_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ depth_m1(static_cast<uint16_t>(_depth_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm_depth_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_depth_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_depth_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_depth_m1() const
+ {
+ return static_cast<uint32_t>(depth_m1);
+ }
+ CONSTEXPR npu_set_ifm_depth_m1_t &set_depth_m1(uint32_t value)
+ {
+ depth_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
+ }
+#endif
+#endif
+ };
+ // IFM Precision
+ struct npu_set_ifm_precision_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t activation_type : 1; // IFM type
+ uint32_t reserved1 : 1;
+ uint32_t activation_precision : 2; // IFM precision
+ uint32_t reserved2 : 2;
+ uint32_t activation_format : 2; // IFM format
+ uint32_t scale_mode : 2; // IFM scale mode
+ uint32_t reserved3 : 4;
+ uint32_t round_mode : 2; // IFM round mode
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_precision_t(NPU_NAMESPACE::activation_type _activation_type,
+ NPU_NAMESPACE::activation_precision _activation_precision,
+ NPU_NAMESPACE::activation_format _activation_format,
+ NPU_NAMESPACE::ifm_scale_mode _scale_mode,
+ NPU_NAMESPACE::round_mode _round_mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1) - 1)), reserved1(0),
+ activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2) - 1)), reserved2(0),
+ activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2) - 1)),
+ scale_mode(static_cast<uint8_t>(_scale_mode) & ((1U << 2) - 1)), reserved3(0),
+ round_mode(static_cast<uint8_t>(_round_mode) & ((1U << 2) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm_precision_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_type(0), reserved1(0),
+ activation_precision(0), reserved2(0), activation_format(0), scale_mode(0), reserved3(0), round_mode(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_precision_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_precision_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
+ }
+ CONSTEXPR npu_set_ifm_precision_t &set_activation_type(NPU_NAMESPACE::activation_type value)
+ {
+ activation_type = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
+ }
+ CONSTEXPR npu_set_ifm_precision_t &set_activation_precision(NPU_NAMESPACE::activation_precision value)
+ {
+ activation_precision = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
+ }
+ CONSTEXPR npu_set_ifm_precision_t &set_activation_format(NPU_NAMESPACE::activation_format value)
+ {
+ activation_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::ifm_scale_mode get_scale_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::ifm_scale_mode>(scale_mode);
+ }
+ CONSTEXPR npu_set_ifm_precision_t &set_scale_mode(NPU_NAMESPACE::ifm_scale_mode value)
+ {
+ scale_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::round_mode get_round_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::round_mode>(round_mode);
+ }
+ CONSTEXPR npu_set_ifm_precision_t &set_round_mode(NPU_NAMESPACE::round_mode value)
+ {
+ round_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_type",
+ (activation_type < (sizeof(activation_type_str) / sizeof(activation_type_str[0])) ?
+ activation_type_str[activation_type] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_precision",
+ (activation_precision < (sizeof(activation_precision_str) / sizeof(activation_precision_str[0])) ?
+ activation_precision_str[activation_precision] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_format",
+ (activation_format < (sizeof(activation_format_str) / sizeof(activation_format_str[0])) ?
+ activation_format_str[activation_format] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "scale_mode",
+ (scale_mode < (sizeof(ifm_scale_mode_str) / sizeof(ifm_scale_mode_str[0])) ?
+ ifm_scale_mode_str[scale_mode] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "round_mode",
+ (round_mode < (sizeof(round_mode_str) / sizeof(round_mode_str[0])) ? round_mode_str[round_mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // IFM upscale mode
+ struct npu_set_ifm_upscale_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t mode : 2; // IFM upscale mode
+ uint32_t reserved1 : 14;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_upscale_t(NPU_NAMESPACE::ifm_upscale_mode _mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ mode(static_cast<uint8_t>(_mode) & ((1U << 2) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm_upscale_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mode(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_upscale_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_upscale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::ifm_upscale_mode get_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::ifm_upscale_mode>(mode);
+ }
+ CONSTEXPR npu_set_ifm_upscale_t &set_mode(NPU_NAMESPACE::ifm_upscale_mode value)
+ {
+ mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "mode",
+ (mode < (sizeof(ifm_upscale_mode_str) / sizeof(ifm_upscale_mode_str[0])) ? ifm_upscale_mode_str[mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // IFM zero point
+ struct npu_set_ifm_zero_point_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t zero_point : 16; // Zero point offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_zero_point_t(uint32_t _zero_point) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ zero_point(static_cast<uint16_t>(_zero_point) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm_zero_point_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), zero_point(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_zero_point_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_zero_point_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_zero_point() const
+ {
+ return static_cast<uint32_t>(zero_point);
+ }
+ CONSTEXPR npu_set_ifm_zero_point_t &set_zero_point(uint32_t value)
+ {
+ zero_point = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
+ }
+#endif
+#endif
+ };
+ // IFM Tile 0 and tile 2 width
+ struct npu_set_ifm_width0_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t width_m1 : 16; // IFM Tile 0 and tile 2 width
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_width0_m1_t(uint32_t _width_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ width_m1(static_cast<uint16_t>(_width_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm_width0_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_width0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_width0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_width_m1() const
+ {
+ return static_cast<uint32_t>(width_m1);
+ }
+ CONSTEXPR npu_set_ifm_width0_m1_t &set_width_m1(uint32_t value)
+ {
+ width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
+ }
+#endif
+#endif
+ };
+ // IFM Tile 0 height
+ struct npu_set_ifm_height0_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // IFM Tile 0 height
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_height0_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm_height0_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_height0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_height0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ifm_height0_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // IFM Tile 1 height
+ struct npu_set_ifm_height1_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // IFM Tile 1 height
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_height1_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm_height1_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_height1_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_height1_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ifm_height1_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // End of IB0,IB1 buffers
+ struct npu_set_ifm_ib_end_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t ib_end : 6; // End of IB0,IB1 buffers in the SHRAM in KB units. Multiple of 2
+ uint32_t reserved1 : 10;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_ib_end_t(uint32_t _ib_end) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ ib_end(static_cast<uint8_t>(_ib_end) & ((1U << 6) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm_ib_end_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ib_end(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_ib_end_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_ib_end_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib_end() const
+ {
+ return static_cast<uint32_t>(ib_end);
+ }
+ CONSTEXPR npu_set_ifm_ib_end_t &set_ib_end(uint32_t value)
+ {
+ ib_end = static_cast<uint8_t>(value) & ((1U << 6) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("ib_end", std::to_string(ib_end)));
+ }
+#endif
+#endif
+ };
+ // Index n for IFM access
+ struct npu_set_ifm_region_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t region : 3; // Region number n
+ uint32_t reserved1 : 13;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_region_t(uint32_t _region) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ region(static_cast<uint8_t>(_region) & ((1U << 3) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm_region_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_region() const
+ {
+ return static_cast<uint32_t>(region);
+ }
+ CONSTEXPR npu_set_ifm_region_t &set_region(uint32_t value)
+ {
+ region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
+ }
+#endif
+#endif
+ };
+ // Output feature map width
+ struct npu_set_ofm_width_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t width_m1 : 16; // Output feature map width
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_width_m1_t(uint32_t _width_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ width_m1(static_cast<uint16_t>(_width_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_width_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_width_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_width_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_width_m1() const
+ {
+ return static_cast<uint32_t>(width_m1);
+ }
+ CONSTEXPR npu_set_ofm_width_m1_t &set_width_m1(uint32_t value)
+ {
+ width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
+ }
+#endif
+#endif
+ };
+ // Output feature map height
+ struct npu_set_ofm_height_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // Output feature map height
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_height_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_height_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_height_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_height_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ofm_height_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // Output feature map depth
+ struct npu_set_ofm_depth_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t depth_m1 : 16; // Output feature map depth
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_depth_m1_t(uint32_t _depth_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ depth_m1(static_cast<uint16_t>(_depth_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_depth_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_depth_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_depth_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_depth_m1() const
+ {
+ return static_cast<uint32_t>(depth_m1);
+ }
+ CONSTEXPR npu_set_ofm_depth_m1_t &set_depth_m1(uint32_t value)
+ {
+ depth_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
+ }
+#endif
+#endif
+ };
+ // OFM Precision
+ struct npu_set_ofm_precision_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t activation_type : 1; // OFM type
+ uint32_t activation_precision : 2; // OFM precision
+ uint32_t reserved1 : 3;
+ uint32_t activation_format : 2; // OFM format
+ uint32_t scale_mode : 1; // OFM scale mode
+ uint32_t reserved2 : 5;
+ uint32_t round_mode : 2; // OFM round mode
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_precision_t(NPU_NAMESPACE::activation_type _activation_type,
+ NPU_NAMESPACE::activation_precision _activation_precision,
+ NPU_NAMESPACE::activation_format _activation_format,
+ NPU_NAMESPACE::ofm_scale_mode _scale_mode,
+ NPU_NAMESPACE::round_mode _round_mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1) - 1)),
+ activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2) - 1)), reserved1(0),
+ activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2) - 1)),
+ scale_mode(static_cast<uint8_t>(_scale_mode) & ((1U << 1) - 1)), reserved2(0),
+ round_mode(static_cast<uint8_t>(_round_mode) & ((1U << 2) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_precision_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_type(0),
+ activation_precision(0), reserved1(0), activation_format(0), scale_mode(0), reserved2(0), round_mode(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_precision_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_precision_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
+ }
+ CONSTEXPR npu_set_ofm_precision_t &set_activation_type(NPU_NAMESPACE::activation_type value)
+ {
+ activation_type = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
+ }
+ CONSTEXPR npu_set_ofm_precision_t &set_activation_precision(NPU_NAMESPACE::activation_precision value)
+ {
+ activation_precision = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
+ }
+ CONSTEXPR npu_set_ofm_precision_t &set_activation_format(NPU_NAMESPACE::activation_format value)
+ {
+ activation_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::ofm_scale_mode get_scale_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::ofm_scale_mode>(scale_mode);
+ }
+ CONSTEXPR npu_set_ofm_precision_t &set_scale_mode(NPU_NAMESPACE::ofm_scale_mode value)
+ {
+ scale_mode = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::round_mode get_round_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::round_mode>(round_mode);
+ }
+ CONSTEXPR npu_set_ofm_precision_t &set_round_mode(NPU_NAMESPACE::round_mode value)
+ {
+ round_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_type",
+ (activation_type < (sizeof(activation_type_str) / sizeof(activation_type_str[0])) ?
+ activation_type_str[activation_type] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_precision",
+ (activation_precision < (sizeof(activation_precision_str) / sizeof(activation_precision_str[0])) ?
+ activation_precision_str[activation_precision] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_format",
+ (activation_format < (sizeof(activation_format_str) / sizeof(activation_format_str[0])) ?
+ activation_format_str[activation_format] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "scale_mode",
+ (scale_mode < (sizeof(ofm_scale_mode_str) / sizeof(ofm_scale_mode_str[0])) ?
+ ofm_scale_mode_str[scale_mode] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "round_mode",
+ (round_mode < (sizeof(round_mode_str) / sizeof(round_mode_str[0])) ? round_mode_str[round_mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // OFM block width
+ struct npu_set_ofm_blk_width_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t width_m1 : 6; // OFM block width
+ uint32_t reserved1 : 10;
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_blk_width_m1_t(uint32_t _width_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ width_m1(static_cast<uint8_t>(_width_m1) & ((1U << 6) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ofm_blk_width_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_blk_width_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_blk_width_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_width_m1() const
+ {
+ return static_cast<uint32_t>(width_m1);
+ }
+ CONSTEXPR npu_set_ofm_blk_width_m1_t &set_width_m1(uint32_t value)
+ {
+ width_m1 = static_cast<uint8_t>(value) & ((1U << 6) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
+ }
+#endif
+#endif
+ };
+ // OFM block height
+ struct npu_set_ofm_blk_height_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 5; // OFM block height
+ uint32_t reserved1 : 11;
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_blk_height_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint8_t>(_height_m1) & ((1U << 5) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ofm_blk_height_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_blk_height_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_blk_height_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ofm_blk_height_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint8_t>(value) & ((1U << 5) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // OFM block depth
+ struct npu_set_ofm_blk_depth_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t depth_m1 : 7; // OFM block depth
+ uint32_t reserved1 : 9;
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_blk_depth_m1_t(uint32_t _depth_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ depth_m1(static_cast<uint8_t>(_depth_m1) & ((1U << 7) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ofm_blk_depth_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_blk_depth_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_blk_depth_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_depth_m1() const
+ {
+ return static_cast<uint32_t>(depth_m1);
+ }
+ CONSTEXPR npu_set_ofm_blk_depth_m1_t &set_depth_m1(uint32_t value)
+ {
+ depth_m1 = static_cast<uint8_t>(value) & ((1U << 7) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
+ }
+#endif
+#endif
+ };
+ // OFM zero point
+ struct npu_set_ofm_zero_point_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t zero_point : 16; // Zero point offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_zero_point_t(uint32_t _zero_point) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ zero_point(static_cast<uint16_t>(_zero_point) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_zero_point_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), zero_point(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_zero_point_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_zero_point_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_zero_point() const
+ {
+ return static_cast<uint32_t>(zero_point);
+ }
+ CONSTEXPR npu_set_ofm_zero_point_t &set_zero_point(uint32_t value)
+ {
+ zero_point = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
+ }
+#endif
+#endif
+ };
+ // OFM Tile 0 and tile 2 width
+ struct npu_set_ofm_width0_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t width_m1 : 16; // OFM Tile 0 and tile 2 width
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_width0_m1_t(uint32_t _width_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ width_m1(static_cast<uint16_t>(_width_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_width0_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_width0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_width0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_width_m1() const
+ {
+ return static_cast<uint32_t>(width_m1);
+ }
+ CONSTEXPR npu_set_ofm_width0_m1_t &set_width_m1(uint32_t value)
+ {
+ width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
+ }
+#endif
+#endif
+ };
+ // OFM Tile 0 height
+ struct npu_set_ofm_height0_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // OFM Tile 0 height
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_height0_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_height0_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_height0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_height0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ofm_height0_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // OFM Tile 1 height
+ struct npu_set_ofm_height1_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // OFM Tile 1 height
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_height1_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ofm_height1_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_height1_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_height1_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ofm_height1_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // Index n for OFM access
+ struct npu_set_ofm_region_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t region : 3; // Index n for OFM access
+ uint32_t reserved1 : 13;
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_region_t(uint32_t _region) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ region(static_cast<uint8_t>(_region) & ((1U << 3) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ofm_region_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_region() const
+ {
+ return static_cast<uint32_t>(region);
+ }
+ CONSTEXPR npu_set_ofm_region_t &set_region(uint32_t value)
+ {
+ region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
+ }
+#endif
+#endif
+ };
+ // Kernel width
+ struct npu_set_kernel_width_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t width_m1 : 16; // Kernel width
+#ifdef __cplusplus
+ public:
+ npu_set_kernel_width_m1_t(uint32_t _width_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ width_m1(static_cast<uint16_t>(_width_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_kernel_width_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_kernel_width_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_kernel_width_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_width_m1() const
+ {
+ return static_cast<uint32_t>(width_m1);
+ }
+ CONSTEXPR npu_set_kernel_width_m1_t &set_width_m1(uint32_t value)
+ {
+ width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
+ }
+#endif
+#endif
+ };
+ // Kernel height
+ struct npu_set_kernel_height_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // Kernel height
+#ifdef __cplusplus
+ public:
+ npu_set_kernel_height_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_kernel_height_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_kernel_height_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_kernel_height_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_kernel_height_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // Kernel stride
+ struct npu_set_kernel_stride_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t stride_x_lsb : 1; // Stride x LSB. (kernel_x_stride - 1)[0]
+ uint32_t stride_y_lsb : 1; // Stride y LSB. (kernel_y_stride - 1)[0]
+ uint32_t weight_order : 1; // Weight ordering mode
+ uint32_t dilation_x : 1; // Kernel x dilation
+ uint32_t dilation_y : 1; // Kernel y dilation
+ uint32_t decomposition : 1; // Kernel decomposition
+ uint32_t stride_x_msb : 1; // Stride x MSB. (kernel_x_stride - 1) >> 1
+ uint32_t reserved1 : 2;
+ uint32_t stride_y_msb : 1; // Stride y MSB. (kernel_y_stride - 1) >> 1
+ uint32_t reserved2 : 6;
+#ifdef __cplusplus
+ public:
+ npu_set_kernel_stride_t(uint32_t _stride_x_lsb,
+ uint32_t _stride_y_lsb,
+ NPU_NAMESPACE::weight_order _weight_order,
+ NPU_NAMESPACE::kernel_dilation _dilation_x,
+ NPU_NAMESPACE::kernel_dilation _dilation_y,
+ NPU_NAMESPACE::kernel_decomposition _decomposition,
+ uint32_t _stride_x_msb,
+ uint32_t _stride_y_msb) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ stride_x_lsb(static_cast<uint8_t>(_stride_x_lsb) & ((1U << 1) - 1)),
+ stride_y_lsb(static_cast<uint8_t>(_stride_y_lsb) & ((1U << 1) - 1)),
+ weight_order(static_cast<uint8_t>(_weight_order) & ((1U << 1) - 1)),
+ dilation_x(static_cast<uint8_t>(_dilation_x) & ((1U << 1) - 1)),
+ dilation_y(static_cast<uint8_t>(_dilation_y) & ((1U << 1) - 1)),
+ decomposition(static_cast<uint8_t>(_decomposition) & ((1U << 1) - 1)),
+ stride_x_msb(static_cast<uint8_t>(_stride_x_msb) & ((1U << 1) - 1)), reserved1(0),
+ stride_y_msb(static_cast<uint8_t>(_stride_y_msb) & ((1U << 1) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_kernel_stride_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), stride_x_lsb(0), stride_y_lsb(0),
+ weight_order(0), dilation_x(0), dilation_y(0), decomposition(0), stride_x_msb(0), reserved1(0),
+ stride_y_msb(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_stride_x_lsb() const
+ {
+ return static_cast<uint32_t>(stride_x_lsb);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_stride_x_lsb(uint32_t value)
+ {
+ stride_x_lsb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_stride_y_lsb() const
+ {
+ return static_cast<uint32_t>(stride_y_lsb);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_stride_y_lsb(uint32_t value)
+ {
+ stride_y_lsb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::weight_order get_weight_order() const
+ {
+ return static_cast<NPU_NAMESPACE::weight_order>(weight_order);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_weight_order(NPU_NAMESPACE::weight_order value)
+ {
+ weight_order = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::kernel_dilation get_dilation_x() const
+ {
+ return static_cast<NPU_NAMESPACE::kernel_dilation>(dilation_x);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_dilation_x(NPU_NAMESPACE::kernel_dilation value)
+ {
+ dilation_x = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::kernel_dilation get_dilation_y() const
+ {
+ return static_cast<NPU_NAMESPACE::kernel_dilation>(dilation_y);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_dilation_y(NPU_NAMESPACE::kernel_dilation value)
+ {
+ dilation_y = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::kernel_decomposition get_decomposition() const
+ {
+ return static_cast<NPU_NAMESPACE::kernel_decomposition>(decomposition);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_decomposition(NPU_NAMESPACE::kernel_decomposition value)
+ {
+ decomposition = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_stride_x_msb() const
+ {
+ return static_cast<uint32_t>(stride_x_msb);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_stride_x_msb(uint32_t value)
+ {
+ stride_x_msb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_stride_y_msb() const
+ {
+ return static_cast<uint32_t>(stride_y_msb);
+ }
+ CONSTEXPR npu_set_kernel_stride_t &set_stride_y_msb(uint32_t value)
+ {
+ stride_y_msb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("stride_x_lsb", std::to_string(stride_x_lsb)));
+ fields.push_back(std::make_pair<std::string, std::string>("stride_y_lsb", std::to_string(stride_y_lsb)));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "weight_order",
+ (weight_order < (sizeof(weight_order_str) / sizeof(weight_order_str[0])) ?
+ weight_order_str[weight_order] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "dilation_x",
+ (dilation_x < (sizeof(kernel_dilation_str) / sizeof(kernel_dilation_str[0])) ?
+ kernel_dilation_str[dilation_x] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "dilation_y",
+ (dilation_y < (sizeof(kernel_dilation_str) / sizeof(kernel_dilation_str[0])) ?
+ kernel_dilation_str[dilation_y] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "decomposition",
+ (decomposition < (sizeof(kernel_decomposition_str) / sizeof(kernel_decomposition_str[0])) ?
+ kernel_decomposition_str[decomposition] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>("stride_x_msb", std::to_string(stride_x_msb)));
+ fields.push_back(std::make_pair<std::string, std::string>("stride_y_msb", std::to_string(stride_y_msb)));
+ }
+#endif
+#endif
+ };
+ // Multi-core parallel mode
+ struct npu_set_parallel_mode_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t parallel_mode : 1; // Multi-core parallel mode
+ uint32_t reserved1 : 15;
+#ifdef __cplusplus
+ public:
+ npu_set_parallel_mode_t(NPU_NAMESPACE::parallel_mode _parallel_mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_PARALLEL_MODE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ parallel_mode(static_cast<uint8_t>(_parallel_mode) & ((1U << 1) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_parallel_mode_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_PARALLEL_MODE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), parallel_mode(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_PARALLEL_MODE) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_PARALLEL_MODE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_parallel_mode_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_parallel_mode_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::parallel_mode get_parallel_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::parallel_mode>(parallel_mode);
+ }
+ CONSTEXPR npu_set_parallel_mode_t &set_parallel_mode(NPU_NAMESPACE::parallel_mode value)
+ {
+ parallel_mode = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "parallel_mode",
+ (parallel_mode < (sizeof(parallel_mode_str) / sizeof(parallel_mode_str[0])) ?
+ parallel_mode_str[parallel_mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // Accumulator format
+ struct npu_set_acc_format_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t acc_format : 2; // Accumulator format
+ uint32_t reserved1 : 14;
+#ifdef __cplusplus
+ public:
+ npu_set_acc_format_t(NPU_NAMESPACE::acc_format _acc_format) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ acc_format(static_cast<uint8_t>(_acc_format) & ((1U << 2) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_acc_format_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), acc_format(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_acc_format_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_acc_format_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::acc_format get_acc_format() const
+ {
+ return static_cast<NPU_NAMESPACE::acc_format>(acc_format);
+ }
+ CONSTEXPR npu_set_acc_format_t &set_acc_format(NPU_NAMESPACE::acc_format value)
+ {
+ acc_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "acc_format",
+ (acc_format < (sizeof(acc_format_str) / sizeof(acc_format_str[0])) ? acc_format_str[acc_format] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // Activation function and clip range
+ struct npu_set_activation_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t activation_function : 5; // Activation function (before table lookup)
+ uint32_t reserved1 : 7;
+ uint32_t activation_clip_range : 3; // Activation clip range. This must be set to 0 if table lookup is not used
+ uint32_t reserved2 : 1;
+#ifdef __cplusplus
+ public:
+ npu_set_activation_t(NPU_NAMESPACE::activation_function _activation_function,
+ NPU_NAMESPACE::activation_clip_range _activation_clip_range) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ activation_function(static_cast<uint8_t>(_activation_function) & ((1U << 5) - 1)), reserved1(0),
+ activation_clip_range(static_cast<uint8_t>(_activation_clip_range) & ((1U << 3) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_activation_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_function(0), reserved1(0),
+ activation_clip_range(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_activation_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_activation_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_function get_activation_function() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_function>(activation_function);
+ }
+ CONSTEXPR npu_set_activation_t &set_activation_function(NPU_NAMESPACE::activation_function value)
+ {
+ activation_function = static_cast<uint8_t>(value) & ((1U << 5) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_clip_range get_activation_clip_range() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_clip_range>(activation_clip_range);
+ }
+ CONSTEXPR npu_set_activation_t &set_activation_clip_range(NPU_NAMESPACE::activation_clip_range value)
+ {
+ activation_clip_range = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_function",
+ (activation_function < (sizeof(activation_function_str) / sizeof(activation_function_str[0])) ?
+ activation_function_str[activation_function] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_clip_range",
+ (activation_clip_range < (sizeof(activation_clip_range_str) / sizeof(activation_clip_range_str[0])) ?
+ activation_clip_range_str[activation_clip_range] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // Lower bound clip
+ struct npu_set_activation_min_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t clip_boundary : 16; // Clip boundary for OFM activations
+#ifdef __cplusplus
+ public:
+ npu_set_activation_min_t(uint32_t _clip_boundary) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ clip_boundary(static_cast<uint16_t>(_clip_boundary) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_activation_min_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), clip_boundary(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_activation_min_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_activation_min_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_clip_boundary() const
+ {
+ return static_cast<uint32_t>(clip_boundary);
+ }
+ CONSTEXPR npu_set_activation_min_t &set_clip_boundary(uint32_t value)
+ {
+ clip_boundary = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("clip_boundary", std::to_string(clip_boundary)));
+ }
+#endif
+#endif
+ };
+ // Upper bound clip
+ struct npu_set_activation_max_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t clip_boundary : 16; // Clip boundary for OFM activations
+#ifdef __cplusplus
+ public:
+ npu_set_activation_max_t(uint32_t _clip_boundary) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ clip_boundary(static_cast<uint16_t>(_clip_boundary) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_activation_max_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), clip_boundary(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_activation_max_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_activation_max_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_clip_boundary() const
+ {
+ return static_cast<uint32_t>(clip_boundary);
+ }
+ CONSTEXPR npu_set_activation_max_t &set_clip_boundary(uint32_t value)
+ {
+ clip_boundary = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("clip_boundary", std::to_string(clip_boundary)));
+ }
+#endif
+#endif
+ };
+ // Index n for weight stream access
+ struct npu_set_weight_region_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t region : 3; // Index n for weight stream access
+ uint32_t reserved1 : 13;
+#ifdef __cplusplus
+ public:
+ npu_set_weight_region_t(uint32_t _region) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ region(static_cast<uint8_t>(_region) & ((1U << 3) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_weight_region_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_weight_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_weight_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_region() const
+ {
+ return static_cast<uint32_t>(region);
+ }
+ CONSTEXPR npu_set_weight_region_t &set_region(uint32_t value)
+ {
+ region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
+ }
+#endif
+#endif
+ };
+ // Index n for scale stream access
+ struct npu_set_scale_region_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t region : 3; // Index n for scale stream access
+ uint32_t reserved1 : 13;
+#ifdef __cplusplus
+ public:
+ npu_set_scale_region_t(uint32_t _region) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ region(static_cast<uint8_t>(_region) & ((1U << 3) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_scale_region_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_scale_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_scale_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_region() const
+ {
+ return static_cast<uint32_t>(region);
+ }
+ CONSTEXPR npu_set_scale_region_t &set_region(uint32_t value)
+ {
+ region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
+ }
+#endif
+#endif
+ };
+ // Start of ACC0,ACC1 buffers
+ struct npu_set_ab_start_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t ab_start : 6; // Start of ACC0,ACC1 buffers in the SHRAM in KB units. Multiple of 2
+ uint32_t reserved1 : 10;
+#ifdef __cplusplus
+ public:
+ npu_set_ab_start_t(uint32_t _ab_start) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ ab_start(static_cast<uint8_t>(_ab_start) & ((1U << 6) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ab_start_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ab_start(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ab_start_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ab_start_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ab_start() const
+ {
+ return static_cast<uint32_t>(ab_start);
+ }
+ CONSTEXPR npu_set_ab_start_t &set_ab_start(uint32_t value)
+ {
+ ab_start = static_cast<uint8_t>(value) & ((1U << 6) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("ab_start", std::to_string(ab_start)));
+ }
+#endif
+#endif
+ };
+ // Block number of blocks dependency
+ struct npu_set_blockdep_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t blockdep : 2; // Block number of blocks dependency between kernel operations
+ uint32_t reserved1 : 14;
+#ifdef __cplusplus
+ public:
+ npu_set_blockdep_t(uint32_t _blockdep) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ blockdep(static_cast<uint8_t>(_blockdep) & ((1U << 2) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_blockdep_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), blockdep(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_blockdep_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_blockdep_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_blockdep() const
+ {
+ return static_cast<uint32_t>(blockdep);
+ }
+ CONSTEXPR npu_set_blockdep_t &set_blockdep(uint32_t value)
+ {
+ blockdep = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("blockdep", std::to_string(blockdep)));
+ }
+#endif
+#endif
+ };
+ // DMA0 source region
+ struct npu_set_dma0_src_region_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t region : 3; // Region number
+ uint32_t reserved1 : 5;
+ uint32_t region_mode : 1; // Region mode
+ uint32_t stride_mode : 2; // Stride mode
+ uint32_t reserved2 : 5;
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_src_region_t(uint32_t _region,
+ NPU_NAMESPACE::dma_region_mode _region_mode,
+ NPU_NAMESPACE::dma_stride_mode _stride_mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ region(static_cast<uint8_t>(_region) & ((1U << 3) - 1)), reserved1(0),
+ region_mode(static_cast<uint8_t>(_region_mode) & ((1U << 1) - 1)),
+ stride_mode(static_cast<uint8_t>(_stride_mode) & ((1U << 2) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_dma0_src_region_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), region_mode(0),
+ stride_mode(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_dma0_src_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_dma0_src_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_region() const
+ {
+ return static_cast<uint32_t>(region);
+ }
+ CONSTEXPR npu_set_dma0_src_region_t &set_region(uint32_t value)
+ {
+ region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::dma_region_mode get_region_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::dma_region_mode>(region_mode);
+ }
+ CONSTEXPR npu_set_dma0_src_region_t &set_region_mode(NPU_NAMESPACE::dma_region_mode value)
+ {
+ region_mode = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::dma_stride_mode get_stride_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::dma_stride_mode>(stride_mode);
+ }
+ CONSTEXPR npu_set_dma0_src_region_t &set_stride_mode(NPU_NAMESPACE::dma_stride_mode value)
+ {
+ stride_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "region_mode",
+ (region_mode < (sizeof(dma_region_mode_str) / sizeof(dma_region_mode_str[0])) ?
+ dma_region_mode_str[region_mode] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "stride_mode",
+ (stride_mode < (sizeof(dma_stride_mode_str) / sizeof(dma_stride_mode_str[0])) ?
+ dma_stride_mode_str[stride_mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // DMA0 destination region
+ struct npu_set_dma0_dst_region_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t region : 3; // Region number if region_mode is region_mode_external. Else core mask to write to (bit k
+ // set for core k=0,1)
+ uint32_t reserved1 : 5;
+ uint32_t region_mode : 1; // Region mode
+ uint32_t stride_mode : 2; // Stride mode
+ uint32_t reserved2 : 5;
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_dst_region_t(uint32_t _region,
+ NPU_NAMESPACE::dma_region_mode _region_mode,
+ NPU_NAMESPACE::dma_stride_mode _stride_mode) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ region(static_cast<uint8_t>(_region) & ((1U << 3) - 1)), reserved1(0),
+ region_mode(static_cast<uint8_t>(_region_mode) & ((1U << 1) - 1)),
+ stride_mode(static_cast<uint8_t>(_stride_mode) & ((1U << 2) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_dma0_dst_region_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), region_mode(0),
+ stride_mode(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_dma0_dst_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_dma0_dst_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_region() const
+ {
+ return static_cast<uint32_t>(region);
+ }
+ CONSTEXPR npu_set_dma0_dst_region_t &set_region(uint32_t value)
+ {
+ region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::dma_region_mode get_region_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::dma_region_mode>(region_mode);
+ }
+ CONSTEXPR npu_set_dma0_dst_region_t &set_region_mode(NPU_NAMESPACE::dma_region_mode value)
+ {
+ region_mode = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::dma_stride_mode get_stride_mode() const
+ {
+ return static_cast<NPU_NAMESPACE::dma_stride_mode>(stride_mode);
+ }
+ CONSTEXPR npu_set_dma0_dst_region_t &set_stride_mode(NPU_NAMESPACE::dma_stride_mode value)
+ {
+ stride_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "region_mode",
+ (region_mode < (sizeof(dma_region_mode_str) / sizeof(dma_region_mode_str[0])) ?
+ dma_region_mode_str[region_mode] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "stride_mode",
+ (stride_mode < (sizeof(dma_stride_mode_str) / sizeof(dma_stride_mode_str[0])) ?
+ dma_stride_mode_str[stride_mode] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // Size of second dimension for 2D/3D transfers
+ struct npu_set_dma0_size0_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t size : 16; // Size of second dimension for 2D/3D transfers
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_size0_t(uint32_t _size) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ size(static_cast<uint16_t>(_size) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_dma0_size0_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), size(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_dma0_size0_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_dma0_size0_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_size() const
+ {
+ return static_cast<uint32_t>(size);
+ }
+ CONSTEXPR npu_set_dma0_size0_t &set_size(uint32_t value)
+ {
+ size = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("size", std::to_string(size)));
+ }
+#endif
+#endif
+ };
+ // Size of third dimension for 3D transfers
+ struct npu_set_dma0_size1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t size : 16; // Size of third dimension for 3D transfers
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_size1_t(uint32_t _size) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ size(static_cast<uint16_t>(_size) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_dma0_size1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), size(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_dma0_size1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_dma0_size1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_size() const
+ {
+ return static_cast<uint32_t>(size);
+ }
+ CONSTEXPR npu_set_dma0_size1_t &set_size(uint32_t value)
+ {
+ size = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("size", std::to_string(size)));
+ }
+#endif
+#endif
+ };
+ // IFM2 broadcast configuration
+ struct npu_set_ifm2_broadcast_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t
+ broadcast_h : 1; // Broadcast H dimension (if set then any accesses to IFM2 sets y=0 and IFM2 height=1)
+ uint32_t broadcast_w : 1; // Broadcast W dimension (if set then any accesses to IFM2 sets x=0 and IFM2 width=1)
+ uint32_t broadcast_c : 1; // Broadcast C dimension (if set then any accesses to IFM2 sets c=0 and IFM2 depth=1)
+ uint32_t reserved1 : 3;
+ uint32_t operand_order : 1; // Operand order
+ uint32_t broadcast_constant : 1; // Broadcast constant given by NPU_SET_IFM2_SCALAR and so ignore BH, BW and BC
+ uint32_t reserved2 : 8;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_broadcast_t(NPU_NAMESPACE::broadcast_mode _broadcast_h,
+ NPU_NAMESPACE::broadcast_mode _broadcast_w,
+ NPU_NAMESPACE::broadcast_mode _broadcast_c,
+ NPU_NAMESPACE::ifm2_operand_order _operand_order,
+ NPU_NAMESPACE::broadcast_mode _broadcast_constant) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ broadcast_h(static_cast<uint8_t>(_broadcast_h) & ((1U << 1) - 1)),
+ broadcast_w(static_cast<uint8_t>(_broadcast_w) & ((1U << 1) - 1)),
+ broadcast_c(static_cast<uint8_t>(_broadcast_c) & ((1U << 1) - 1)), reserved1(0),
+ operand_order(static_cast<uint8_t>(_operand_order) & ((1U << 1) - 1)),
+ broadcast_constant(static_cast<uint8_t>(_broadcast_constant) & ((1U << 1) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), broadcast_h(0), broadcast_w(0),
+ broadcast_c(0), reserved1(0), operand_order(0), broadcast_constant(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_h() const
+ {
+ return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_h);
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_h(NPU_NAMESPACE::broadcast_mode value)
+ {
+ broadcast_h = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_w() const
+ {
+ return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_w);
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_w(NPU_NAMESPACE::broadcast_mode value)
+ {
+ broadcast_w = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_c() const
+ {
+ return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_c);
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_c(NPU_NAMESPACE::broadcast_mode value)
+ {
+ broadcast_c = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::ifm2_operand_order get_operand_order() const
+ {
+ return static_cast<NPU_NAMESPACE::ifm2_operand_order>(operand_order);
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t &set_operand_order(NPU_NAMESPACE::ifm2_operand_order value)
+ {
+ operand_order = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_constant() const
+ {
+ return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_constant);
+ }
+ CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_constant(NPU_NAMESPACE::broadcast_mode value)
+ {
+ broadcast_constant = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "broadcast_h",
+ (broadcast_h < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
+ broadcast_mode_str[broadcast_h] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "broadcast_w",
+ (broadcast_w < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
+ broadcast_mode_str[broadcast_w] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "broadcast_c",
+ (broadcast_c < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
+ broadcast_mode_str[broadcast_c] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "operand_order",
+ (operand_order < (sizeof(ifm2_operand_order_str) / sizeof(ifm2_operand_order_str[0])) ?
+ ifm2_operand_order_str[operand_order] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "broadcast_constant",
+ (broadcast_constant < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
+ broadcast_mode_str[broadcast_constant] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // IFM2 scalar value
+ struct npu_set_ifm2_scalar_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t scalar : 16; // int16 or uint16 depending on ifm2_precision.type
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_scalar_t(uint32_t _scalar) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ scalar(static_cast<uint16_t>(_scalar) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_scalar_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), scalar(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_scalar_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_scalar_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_scalar() const
+ {
+ return static_cast<uint32_t>(scalar);
+ }
+ CONSTEXPR npu_set_ifm2_scalar_t &set_scalar(uint32_t value)
+ {
+ scalar = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("scalar", std::to_string(scalar)));
+ }
+#endif
+#endif
+ };
+ // IFM2 Precision
+ struct npu_set_ifm2_precision_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t activation_type : 1; // IFM type - MUST MATCH IFM
+ uint32_t reserved1 : 1;
+ uint32_t activation_precision : 2; // IFM precision - MUST MATCH IFM
+ uint32_t reserved2 : 2;
+ uint32_t activation_format : 2; // IFM format
+ uint32_t reserved3 : 8;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_precision_t(NPU_NAMESPACE::activation_type _activation_type,
+ NPU_NAMESPACE::activation_precision _activation_precision,
+ NPU_NAMESPACE::activation_format _activation_format) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION)),
+ reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1) - 1)), reserved1(0),
+ activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2) - 1)), reserved2(0),
+ activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2) - 1)), reserved3(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm2_precision_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_type(0), reserved1(0),
+ activation_precision(0), reserved2(0), activation_format(0), reserved3(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_precision_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_precision_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
+ }
+ CONSTEXPR npu_set_ifm2_precision_t &set_activation_type(NPU_NAMESPACE::activation_type value)
+ {
+ activation_type = static_cast<uint8_t>(value) & ((1U << 1) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
+ }
+ CONSTEXPR npu_set_ifm2_precision_t &set_activation_precision(NPU_NAMESPACE::activation_precision value)
+ {
+ activation_precision = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
+ {
+ return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
+ }
+ CONSTEXPR npu_set_ifm2_precision_t &set_activation_format(NPU_NAMESPACE::activation_format value)
+ {
+ activation_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_type",
+ (activation_type < (sizeof(activation_type_str) / sizeof(activation_type_str[0])) ?
+ activation_type_str[activation_type] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_precision",
+ (activation_precision < (sizeof(activation_precision_str) / sizeof(activation_precision_str[0])) ?
+ activation_precision_str[activation_precision] :
+ "****")));
+ fields.push_back(std::make_pair<std::string, std::string>(
+ "activation_format",
+ (activation_format < (sizeof(activation_format_str) / sizeof(activation_format_str[0])) ?
+ activation_format_str[activation_format] :
+ "****")));
+ }
+#endif
+#endif
+ };
+ // IFM2 zero point
+ struct npu_set_ifm2_zero_point_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t zero_point : 16; // Zero point offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_zero_point_t(uint32_t _zero_point) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ zero_point(static_cast<uint16_t>(_zero_point) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_zero_point_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), zero_point(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_zero_point_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_zero_point_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_zero_point() const
+ {
+ return static_cast<uint32_t>(zero_point);
+ }
+ CONSTEXPR npu_set_ifm2_zero_point_t &set_zero_point(uint32_t value)
+ {
+ zero_point = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
+ }
+#endif
+#endif
+ };
+ // IFM2 Tile 0 and tile 2 width
+ struct npu_set_ifm2_width0_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t width_m1 : 16; // IFM2 Tile 0 and tile 2 width
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_width0_m1_t(uint32_t _width_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ width_m1(static_cast<uint16_t>(_width_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_width0_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_width0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_width0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_width_m1() const
+ {
+ return static_cast<uint32_t>(width_m1);
+ }
+ CONSTEXPR npu_set_ifm2_width0_m1_t &set_width_m1(uint32_t value)
+ {
+ width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
+ }
+#endif
+#endif
+ };
+ // IFM2 Tile 0 height
+ struct npu_set_ifm2_height0_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // IFM2 Tile 0 height
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_height0_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_height0_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_height0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_height0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ifm2_height0_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // IFM2 Tile 1 height
+ struct npu_set_ifm2_height1_m1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t height_m1 : 16; // IFM2 Tile 1 height
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_height1_m1_t(uint32_t _height_m1) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ height_m1(static_cast<uint16_t>(_height_m1) & ((1U << 16) - 1))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_height1_m1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_height1_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_height1_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_height_m1() const
+ {
+ return static_cast<uint32_t>(height_m1);
+ }
+ CONSTEXPR npu_set_ifm2_height1_m1_t &set_height_m1(uint32_t value)
+ {
+ height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
+ }
+#endif
+#endif
+ };
+ // Start of IB0,IB1 buffers for IFM2
+ struct npu_set_ifm2_ib_start_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t ib_start : 6; // Start of IB0,IB1 buffers for IFM2 in the SHRAM in KB units. Multiple of 2
+ uint32_t reserved1 : 10;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_ib_start_t(uint32_t _ib_start) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ ib_start(static_cast<uint8_t>(_ib_start) & ((1U << 6) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm2_ib_start_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ib_start(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_ib_start_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_ib_start_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_ib_start() const
+ {
+ return static_cast<uint32_t>(ib_start);
+ }
+ CONSTEXPR npu_set_ifm2_ib_start_t &set_ib_start(uint32_t value)
+ {
+ ib_start = static_cast<uint8_t>(value) & ((1U << 6) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("ib_start", std::to_string(ib_start)));
+ }
+#endif
+#endif
+ };
+ // Index n for IFM2 access
+ struct npu_set_ifm2_region_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t region : 3; // Index n for IFM2 access
+ uint32_t reserved1 : 13;
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_region_t(uint32_t _region) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
+ region(static_cast<uint8_t>(_region) & ((1U << 3) - 1)), reserved1(0)
+ {
+ }
+ CONSTEXPR npu_set_ifm2_region_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION) &&
+ control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
+ }
+ operator uint32_t()
+ {
+ uint32_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ifm2_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ifm2_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_region() const
+ {
+ return static_cast<uint32_t>(region);
+ }
+ CONSTEXPR npu_set_ifm2_region_t &set_region(uint32_t value)
+ {
+ region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
+ }
+#endif
+#endif
+ };
+ // IFM Tile 0 address
+ struct npu_set_ifm_base0_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_base0_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm_base0_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm_base0_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM Tile 1 address
+ struct npu_set_ifm_base1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_base1_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm_base1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm_base1_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM Tile 2 address
+ struct npu_set_ifm_base2_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_base2_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm_base2_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm_base2_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM Tile 3 address
+ struct npu_set_ifm_base3_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_base3_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm_base3_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm_base3_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM byte stride between horizontal values
+ struct npu_set_ifm_stride_x_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_stride_x_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm_stride_x_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm_stride_x_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM byte stride between vertical values
+ struct npu_set_ifm_stride_y_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_stride_y_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm_stride_y_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm_stride_y_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM byte stride between channel blocks (of 16 bytes each block)
+ struct npu_set_ifm_stride_c_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm_stride_c_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm_stride_c_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm_stride_c_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // OFM Tile 0 address
+ struct npu_set_ofm_base0_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_base0_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ofm_base0_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ofm_base0_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // OFM Tile 1 address
+ struct npu_set_ofm_base1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_base1_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ofm_base1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ofm_base1_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // OFM Tile 2 address
+ struct npu_set_ofm_base2_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_base2_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ofm_base2_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ofm_base2_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // OFM Tile 3 address
+ struct npu_set_ofm_base3_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_base3_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ofm_base3_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ofm_base3_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // OFM byte stride between horizontal values
+ struct npu_set_ofm_stride_x_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_stride_x_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ofm_stride_x_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ofm_stride_x_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // OFM byte stride between vertical values
+ struct npu_set_ofm_stride_y_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_stride_y_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ofm_stride_y_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ofm_stride_y_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // OFM byte stride between channel blocks (of 16 bytes each block)
+ struct npu_set_ofm_stride_c_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_stride_c_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ofm_stride_c_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ofm_stride_c_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // Weight stream byte offset in WEIGHT_REGION
+ struct npu_set_weight_base_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_weight_base_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_weight_base_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_weight_base_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // Weight stream byte length
+ struct npu_set_weight_length_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+ uint32_t length : 32; // Weight stream byte length
+#ifdef __cplusplus
+ public:
+ npu_set_weight_length_t(uint32_t _length) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0),
+ length(static_cast<uint32_t>(_length))
+ {
+ }
+ CONSTEXPR npu_set_weight_length_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), length(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_weight_length_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_weight_length_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_length() const
+ {
+ return static_cast<uint32_t>(length);
+ }
+ CONSTEXPR npu_set_weight_length_t &set_length(uint32_t value)
+ {
+ length = static_cast<uint32_t>(value);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
+ }
+#endif
+#endif
+ };
+ // Scale and bias stream input byte offset from SCALE_REGION
+ struct npu_set_scale_base_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_scale_base_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_scale_base_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_scale_base_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // Scale and bias stream input byte length
+ struct npu_set_scale_length_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+ uint32_t length : 20; // Scale and bias stream byte length
+ uint32_t reserved2 : 12;
+#ifdef __cplusplus
+ public:
+ npu_set_scale_length_t(uint32_t _length) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0),
+ length(static_cast<uint32_t>(_length) & ((1U << 20) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_scale_length_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), length(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_scale_length_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_scale_length_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_length() const
+ {
+ return static_cast<uint32_t>(length);
+ }
+ CONSTEXPR npu_set_scale_length_t &set_length(uint32_t value)
+ {
+ length = static_cast<uint32_t>(value) & ((1U << 20) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
+ }
+#endif
+#endif
+ };
+ // OFM scale
+ struct npu_set_ofm_scale_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t shift : 6; // Shift
+ uint32_t reserved1 : 10;
+ uint32_t scale : 32; // Scale. Not applied for 32-bit operations
+#ifdef __cplusplus
+ public:
+ npu_set_ofm_scale_t(uint32_t _shift, uint32_t _scale) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ shift(static_cast<uint8_t>(_shift) & ((1U << 6) - 1)), reserved1(0), scale(static_cast<uint32_t>(_scale))
+ {
+ }
+ CONSTEXPR npu_set_ofm_scale_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), shift(0), reserved1(0), scale(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_ofm_scale_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_ofm_scale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_shift() const
+ {
+ return static_cast<uint32_t>(shift);
+ }
+ CONSTEXPR npu_set_ofm_scale_t &set_shift(uint32_t value)
+ {
+ shift = static_cast<uint8_t>(value) & ((1U << 6) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_scale() const
+ {
+ return static_cast<uint32_t>(scale);
+ }
+ CONSTEXPR npu_set_ofm_scale_t &set_scale(uint32_t value)
+ {
+ scale = static_cast<uint32_t>(value);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("shift", std::to_string(shift)));
+ fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
+ }
+#endif
+#endif
+ };
+ // Input operand A scale
+ struct npu_set_opa_scale_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t shift : 6; // Shift. Ignored if IFM scale mode is 0
+ uint32_t reserved1 : 10;
+ uint32_t scale : 32; // Scale. 16-bit if IFM scale mode is 0
+#ifdef __cplusplus
+ public:
+ npu_set_opa_scale_t(uint32_t _shift, uint32_t _scale) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ shift(static_cast<uint8_t>(_shift) & ((1U << 6) - 1)), reserved1(0), scale(static_cast<uint32_t>(_scale))
+ {
+ }
+ CONSTEXPR npu_set_opa_scale_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), shift(0), reserved1(0), scale(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_opa_scale_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_opa_scale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_shift() const
+ {
+ return static_cast<uint32_t>(shift);
+ }
+ CONSTEXPR npu_set_opa_scale_t &set_shift(uint32_t value)
+ {
+ shift = static_cast<uint8_t>(value) & ((1U << 6) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_scale() const
+ {
+ return static_cast<uint32_t>(scale);
+ }
+ CONSTEXPR npu_set_opa_scale_t &set_scale(uint32_t value)
+ {
+ scale = static_cast<uint32_t>(value);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("shift", std::to_string(shift)));
+ fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
+ }
+#endif
+#endif
+ };
+ // Input operand B scale
+ struct npu_set_opb_scale_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+ uint32_t scale : 16; // Scale. Not used if IFM scale mode is 1 or 2
+ uint32_t reserved2 : 16;
+#ifdef __cplusplus
+ public:
+ npu_set_opb_scale_t(uint32_t _scale) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0),
+ scale(static_cast<uint16_t>(_scale) & ((1U << 16) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_opb_scale_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), scale(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_opb_scale_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_opb_scale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_scale() const
+ {
+ return static_cast<uint32_t>(scale);
+ }
+ CONSTEXPR npu_set_opb_scale_t &set_scale(uint32_t value)
+ {
+ scale = static_cast<uint16_t>(value) & ((1U << 16) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
+ }
+#endif
+#endif
+ };
+ // DMA user channel 0 source byte offset from DMA0_SRC_REGION
+ struct npu_set_dma0_src_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_src_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_dma0_src_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_dma0_src_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // DMA user channel 0 destination byte offset from DMA0_DST_REGION
+ struct npu_set_dma0_dst_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_dst_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_dma0_dst_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_dma0_dst_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // DMA user channel 0 transfer length in bytes for 1D mode
+ struct npu_set_dma0_len_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_len_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_dma0_len_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_dma0_len_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // byte distance to skip after each inner (1D) transfer (2D/3D mode) (any alignment)
+ struct npu_set_dma0_skip0_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_skip0_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_dma0_skip0_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP0) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP0);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_dma0_skip0_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // byte distance to skip after each 2D transfer (3D mode) (any alignment)
+ struct npu_set_dma0_skip1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_dma0_skip1_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_dma0_skip1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP1) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SKIP1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_dma0_skip1_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM2 Tile 0 address
+ struct npu_set_ifm2_base0_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_base0_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_base0_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm2_base0_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM2 Tile 1 address
+ struct npu_set_ifm2_base1_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_base1_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_base1_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm2_base1_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM2 Tile 2 address
+ struct npu_set_ifm2_base2_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_base2_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_base2_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm2_base2_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM2 Tile 3 address
+ struct npu_set_ifm2_base3_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_base3_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_base3_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm2_base3_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM2 byte stride between horizontal values
+ struct npu_set_ifm2_stride_x_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_stride_x_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_stride_x_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm2_stride_x_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM2 byte stride between vertical values
+ struct npu_set_ifm2_stride_y_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_stride_y_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_stride_y_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm2_stride_y_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // IFM2 byte stride between channel blocks (of 16 bytes each block)
+ struct npu_set_ifm2_stride_c_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_ifm2_stride_c_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_ifm2_stride_c_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_ifm2_stride_c_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // Weight stream byte offset in WEIGHT_REGION for core 1
+ struct npu_set_weight1_base_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_weight1_base_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_weight1_base_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_weight1_base_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // Weight stream byte length for core 1
+ struct npu_set_weight1_length_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+ uint32_t length : 32; // Weight stream byte length
+#ifdef __cplusplus
+ public:
+ npu_set_weight1_length_t(uint32_t _length) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0),
+ length(static_cast<uint32_t>(_length))
+ {
+ }
+ CONSTEXPR npu_set_weight1_length_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), length(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH) &&
+ control >= 1 && control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_weight1_length_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_weight1_length_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_length() const
+ {
+ return static_cast<uint32_t>(length);
+ }
+ CONSTEXPR npu_set_weight1_length_t &set_length(uint32_t value)
+ {
+ length = static_cast<uint32_t>(value);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
+ }
+#endif
+#endif
+ };
+ // Scale and bias stream input byte offset from SCALE_REGION for core 1
+ struct npu_set_scale1_base_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t addr_hi : 8; // address extension
+ uint32_t reserved1 : 8;
+ uint32_t addr_lo : 32; // address offset
+#ifdef __cplusplus
+ public:
+ npu_set_scale1_base_t(uint64_t _addr) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
+ addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()))),
+ reserved1(0),
+ addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max())))
+ {
+ }
+ CONSTEXPR npu_set_scale1_base_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_BASE)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), addr_hi(0), reserved1(0), addr_lo(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_BASE) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_BASE);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR uint64_t get_addr() const
+ {
+ return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
+ }
+ CONSTEXPR npu_set_scale1_base_t &set_addr(uint64_t value)
+ {
+ addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint64_t>::max()));
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ std::stringstream saddr;
+ saddr << std::hex << "0x" << get_addr();
+ fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
+ }
+#endif
+#endif
+ };
+ // Scale and bias stream input byte length for core 1
+ struct npu_set_scale1_length_t
+ {
+#ifdef __cplusplus
+ private:
+#endif
+ uint32_t opcode : 10; // opcode
+ uint32_t reserved0 : 4;
+ uint32_t control : 2; // control
+ uint32_t reserved1 : 16;
+ uint32_t length : 20; // Scale and bias stream byte length
+ uint32_t reserved2 : 12;
+#ifdef __cplusplus
+ public:
+ npu_set_scale1_length_t(uint32_t _length) :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0),
+ length(static_cast<uint32_t>(_length) & ((1U << 20) - 1)), reserved2(0)
+ {
+ }
+ CONSTEXPR npu_set_scale1_length_t() :
+ opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_LENGTH)), reserved0(0),
+ control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), length(0), reserved2(0)
+ {
+ }
+ CONSTEXPR bool valid() const
+ {
+ return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_LENGTH) && control >= 1 &&
+ control <= 2;
+ }
+ CONSTEXPR void init()
+ {
+ opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE1_LENGTH);
+ control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
+ }
+ operator uint64_t()
+ {
+ uint64_t word;
+ std::memcpy(&word, this, sizeof(word));
+ return word;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
+ }
+ CONSTEXPR npu_set_scale1_length_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
+ {
+ opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
+ return *this;
+ }
+ CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
+ {
+ return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
+ }
+ CONSTEXPR npu_set_scale1_length_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
+ {
+ control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
+ return *this;
+ }
+ CONSTEXPR uint32_t get_length() const
+ {
+ return static_cast<uint32_t>(length);
+ }
+ CONSTEXPR npu_set_scale1_length_t &set_length(uint32_t value)
+ {
+ length = static_cast<uint32_t>(value) & ((1U << 20) - 1);
+ return *this;
+ }
+#ifdef NPU_DISASSEMBLE
+ void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
+ {
+ fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
+ }
+#endif
+#endif
+ };
+#ifdef __cplusplus
+};
+#endif
+#define NPU_OP_STRUCTS \
+ NPU_OP_(stop) \
+ NPU_OP_(irq) \
+ NPU_OP_(conv) \
+ NPU_OP_(depthwise) \
+ NPU_OP_(pool) \
+ NPU_OP_(elementwise) \
+ NPU_OP_(dma_start) \
+ NPU_OP_(dma_wait) \
+ NPU_OP_(kernel_wait) \
+ NPU_OP_(pmu_mask)
+
+#define NPU_SET_STRUCTS \
+ NPU_SET_(ifm_pad_top) \
+ NPU_SET_(ifm_pad_left) \
+ NPU_SET_(ifm_pad_right) \
+ NPU_SET_(ifm_pad_bottom) \
+ NPU_SET_(ifm_depth_m1) \
+ NPU_SET_(ifm_precision) \
+ NPU_SET_(ifm_upscale) \
+ NPU_SET_(ifm_zero_point) \
+ NPU_SET_(ifm_width0_m1) \
+ NPU_SET_(ifm_height0_m1) \
+ NPU_SET_(ifm_height1_m1) \
+ NPU_SET_(ifm_ib_end) \
+ NPU_SET_(ifm_region) \
+ NPU_SET_(ofm_width_m1) \
+ NPU_SET_(ofm_height_m1) \
+ NPU_SET_(ofm_depth_m1) \
+ NPU_SET_(ofm_precision) \
+ NPU_SET_(ofm_blk_width_m1) \
+ NPU_SET_(ofm_blk_height_m1) \
+ NPU_SET_(ofm_blk_depth_m1) \
+ NPU_SET_(ofm_zero_point) \
+ NPU_SET_(ofm_width0_m1) \
+ NPU_SET_(ofm_height0_m1) \
+ NPU_SET_(ofm_height1_m1) \
+ NPU_SET_(ofm_region) \
+ NPU_SET_(kernel_width_m1) \
+ NPU_SET_(kernel_height_m1) \
+ NPU_SET_(kernel_stride) \
+ NPU_SET_(parallel_mode) \
+ NPU_SET_(acc_format) \
+ NPU_SET_(activation) \
+ NPU_SET_(activation_min) \
+ NPU_SET_(activation_max) \
+ NPU_SET_(weight_region) \
+ NPU_SET_(scale_region) \
+ NPU_SET_(ab_start) \
+ NPU_SET_(blockdep) \
+ NPU_SET_(dma0_src_region) \
+ NPU_SET_(dma0_dst_region) \
+ NPU_SET_(dma0_size0) \
+ NPU_SET_(dma0_size1) \
+ NPU_SET_(ifm2_broadcast) \
+ NPU_SET_(ifm2_scalar) \
+ NPU_SET_(ifm2_precision) \
+ NPU_SET_(ifm2_zero_point) \
+ NPU_SET_(ifm2_width0_m1) \
+ NPU_SET_(ifm2_height0_m1) \
+ NPU_SET_(ifm2_height1_m1) \
+ NPU_SET_(ifm2_ib_start) \
+ NPU_SET_(ifm2_region) \
+ NPU_SET_(ifm_base0) \
+ NPU_SET_(ifm_base1) \
+ NPU_SET_(ifm_base2) \
+ NPU_SET_(ifm_base3) \
+ NPU_SET_(ifm_stride_x) \
+ NPU_SET_(ifm_stride_y) \
+ NPU_SET_(ifm_stride_c) \
+ NPU_SET_(ofm_base0) \
+ NPU_SET_(ofm_base1) \
+ NPU_SET_(ofm_base2) \
+ NPU_SET_(ofm_base3) \
+ NPU_SET_(ofm_stride_x) \
+ NPU_SET_(ofm_stride_y) \
+ NPU_SET_(ofm_stride_c) \
+ NPU_SET_(weight_base) \
+ NPU_SET_(weight_length) \
+ NPU_SET_(scale_base) \
+ NPU_SET_(scale_length) \
+ NPU_SET_(ofm_scale) \
+ NPU_SET_(opa_scale) \
+ NPU_SET_(opb_scale) \
+ NPU_SET_(dma0_src) \
+ NPU_SET_(dma0_dst) \
+ NPU_SET_(dma0_len) \
+ NPU_SET_(dma0_skip0) \
+ NPU_SET_(dma0_skip1) \
+ NPU_SET_(ifm2_base0) \
+ NPU_SET_(ifm2_base1) \
+ NPU_SET_(ifm2_base2) \
+ NPU_SET_(ifm2_base3) \
+ NPU_SET_(ifm2_stride_x) \
+ NPU_SET_(ifm2_stride_y) \
+ NPU_SET_(ifm2_stride_c) \
+ NPU_SET_(weight1_base) \
+ NPU_SET_(weight1_length) \
+ NPU_SET_(scale1_base) \
+ NPU_SET_(scale1_length)
+
+#define EXPAND_ACC_FORMAT(FUNC, SEP) FUNC(acc_format, I32) SEP FUNC(acc_format, I40) SEP FUNC(acc_format, F16)
+
+#define EXPAND_ACTIVATION_CLIP_RANGE(FUNC, SEP) \
+ FUNC(activation_clip_range, OFM_PRECISION) \
+ SEP FUNC(activation_clip_range, FORCE_UINT8) SEP FUNC(activation_clip_range, FORCE_INT8) \
+ SEP FUNC(activation_clip_range, FORCE_INT16)
+
+#define EXPAND_ACTIVATION_FORMAT(FUNC, SEP) FUNC(activation_format, NHWC) SEP FUNC(activation_format, NHCWB16)
+
+#define EXPAND_ACTIVATION_FUNCTION(FUNC, SEP) \
+ FUNC(activation_function, RELU) \
+ SEP FUNC(activation_function, TANH) SEP FUNC(activation_function, SIGMOID) SEP FUNC(activation_function, TABLE_0) \
+ SEP FUNC(activation_function, TABLE_1) SEP FUNC(activation_function, TABLE_2) \
+ SEP FUNC(activation_function, TABLE_3) SEP FUNC(activation_function, TABLE_4) \
+ SEP FUNC(activation_function, TABLE_5) SEP FUNC(activation_function, TABLE_6) \
+ SEP FUNC(activation_function, TABLE_7)
+
+#define EXPAND_ACTIVATION_PRECISION(FUNC, SEP) \
+ FUNC(activation_precision, B8) \
+ SEP FUNC(activation_precision, B16) SEP FUNC(activation_precision, B32) SEP FUNC(activation_precision, B64)
+
+#define EXPAND_ACTIVATION_TYPE(FUNC, SEP) FUNC(activation_type, UNSIGNED) SEP FUNC(activation_type, SIGNED)
+
+#define EXPAND_AXI_MEM_ENCODING(FUNC, SEP) \
+ FUNC(axi_mem_encoding, DEVICE_NON_BUFFERABLE) \
+ SEP FUNC(axi_mem_encoding, DEVICE_BUFFERABLE) SEP FUNC(axi_mem_encoding, NORMAL_NON_CACHEABLE_NON_BUFFERABLE) \
+ SEP FUNC(axi_mem_encoding, NORMAL_NON_CACHEABLE_BUFFERABLE) \
+ SEP FUNC(axi_mem_encoding, WRITE_THROUGH_NO_ALLOCATE) \
+ SEP FUNC(axi_mem_encoding, WRITE_THROUGH_READ_ALLOCATE) \
+ SEP FUNC(axi_mem_encoding, WRITE_THROUGH_WRITE_ALLOCATE) \
+ SEP FUNC(axi_mem_encoding, WRITE_THROUGH_READ_AND_WRITE_ALLOCATE) \
+ SEP FUNC(axi_mem_encoding, WRITE_BACK_NO_ALLOCATE) \
+ SEP FUNC(axi_mem_encoding, WRITE_BACK_READ_ALLOCATE) \
+ SEP FUNC(axi_mem_encoding, WRITE_BACK_WRITE_ALLOCATE) \
+ SEP FUNC(axi_mem_encoding, WRITE_BACK_READ_AND_WRITE_ALLOCATE)
+
+#define EXPAND_BROADCAST_MODE(FUNC, SEP) FUNC(broadcast_mode, DISABLE) SEP FUNC(broadcast_mode, ENABLE)
+
+#define EXPAND_CMD0_OPCODE(FUNC, SEP) \
+ FUNC(cmd0_opcode, NPU_OP_STOP) \
+ SEP FUNC(cmd0_opcode, NPU_OP_IRQ) SEP FUNC(cmd0_opcode, NPU_OP_CONV) SEP FUNC( \
+ cmd0_opcode, NPU_OP_DEPTHWISE) SEP FUNC(cmd0_opcode, NPU_OP_POOL) SEP FUNC(cmd0_opcode, NPU_OP_ELEMENTWISE) \
+ SEP FUNC(cmd0_opcode, NPU_OP_DMA_START) SEP FUNC(cmd0_opcode, NPU_OP_DMA_WAIT) SEP FUNC( \
+ cmd0_opcode, NPU_OP_KERNEL_WAIT) SEP FUNC(cmd0_opcode, NPU_OP_PMU_MASK) SEP FUNC(cmd0_opcode, \
+ NPU_SET_IFM_PAD_TOP) \
+ SEP FUNC(cmd0_opcode, NPU_SET_IFM_PAD_LEFT) SEP FUNC(cmd0_opcode, NPU_SET_IFM_PAD_RIGHT) SEP FUNC( \
+ cmd0_opcode, NPU_SET_IFM_PAD_BOTTOM) SEP FUNC(cmd0_opcode, \
+ NPU_SET_IFM_DEPTH_M1) SEP FUNC(cmd0_opcode, \
+ NPU_SET_IFM_PRECISION) \
+ SEP FUNC(cmd0_opcode, NPU_SET_IFM_UPSCALE) SEP FUNC(cmd0_opcode, NPU_SET_IFM_ZERO_POINT) SEP FUNC( \
+ cmd0_opcode, NPU_SET_IFM_WIDTH0_M1) SEP FUNC(cmd0_opcode, NPU_SET_IFM_HEIGHT0_M1) \
+ SEP FUNC(cmd0_opcode, NPU_SET_IFM_HEIGHT1_M1) SEP FUNC(cmd0_opcode, NPU_SET_IFM_IB_END) SEP FUNC( \
+ cmd0_opcode, NPU_SET_IFM_REGION) SEP FUNC(cmd0_opcode, NPU_SET_OFM_WIDTH_M1) \
+ SEP FUNC(cmd0_opcode, NPU_SET_OFM_HEIGHT_M1) SEP FUNC(cmd0_opcode, NPU_SET_OFM_DEPTH_M1) \
+ SEP FUNC(cmd0_opcode, NPU_SET_OFM_PRECISION) SEP FUNC( \
+ cmd0_opcode, NPU_SET_OFM_BLK_WIDTH_M1) SEP FUNC(cmd0_opcode, \
+ NPU_SET_OFM_BLK_HEIGHT_M1) \
+ SEP FUNC(cmd0_opcode, NPU_SET_OFM_BLK_DEPTH_M1) SEP FUNC( \
+ cmd0_opcode, NPU_SET_OFM_ZERO_POINT) SEP FUNC(cmd0_opcode, NPU_SET_OFM_WIDTH0_M1) \
+ SEP FUNC(cmd0_opcode, NPU_SET_OFM_HEIGHT0_M1) SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_OFM_HEIGHT1_M1) SEP FUNC(cmd0_opcode, NPU_SET_OFM_REGION) \
+ SEP FUNC(cmd0_opcode, NPU_SET_KERNEL_WIDTH_M1) SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_KERNEL_HEIGHT_M1) SEP FUNC(cmd0_opcode, NPU_SET_KERNEL_STRIDE) \
+ SEP FUNC(cmd0_opcode, NPU_SET_PARALLEL_MODE) SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_ACC_FORMAT) SEP FUNC(cmd0_opcode, NPU_SET_ACTIVATION) \
+ SEP FUNC(cmd0_opcode, \
+ NPU_SET_ACTIVATION_MIN) SEP FUNC(cmd0_opcode, \
+ NPU_SET_ACTIVATION_MAX) \
+ SEP FUNC(cmd0_opcode, NPU_SET_WEIGHT_REGION) SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_SCALE_REGION) SEP FUNC(cmd0_opcode, NPU_SET_AB_START) \
+ SEP FUNC(cmd0_opcode, NPU_SET_BLOCKDEP) \
+ SEP FUNC(cmd0_opcode, NPU_SET_DMA0_SRC_REGION) SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_DMA0_DST_REGION) SEP FUNC(cmd0_opcode, \
+ NPU_SET_DMA0_SIZE0) \
+ SEP FUNC(cmd0_opcode, NPU_SET_DMA0_SIZE1) SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_IFM2_BROADCAST) SEP \
+ FUNC(cmd0_opcode, NPU_SET_IFM2_SCALAR) SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_IFM2_PRECISION) SEP \
+ FUNC(cmd0_opcode, NPU_SET_IFM2_ZERO_POINT) SEP \
+ FUNC(cmd0_opcode, \
+ NPU_SET_IFM2_WIDTH0_M1) SEP \
+ FUNC(cmd0_opcode, \
+ NPU_SET_IFM2_HEIGHT0_M1) SEP \
+ FUNC(cmd0_opcode, \
+ NPU_SET_IFM2_HEIGHT1_M1) \
+ SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_IFM2_IB_START) \
+ SEP FUNC( \
+ cmd0_opcode, \
+ NPU_SET_IFM2_REGION)
+
+#define EXPAND_CMD1_OPCODE(FUNC, SEP) \
+ FUNC(cmd1_opcode, NPU_SET_IFM_BASE0) \
+ SEP FUNC(cmd1_opcode, NPU_SET_IFM_BASE1) SEP FUNC(cmd1_opcode, NPU_SET_IFM_BASE2) \
+ SEP FUNC(cmd1_opcode, NPU_SET_IFM_BASE3) SEP FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_X) \
+ SEP FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_Y) SEP FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_C) SEP FUNC( \
+ cmd1_opcode, NPU_SET_OFM_BASE0) SEP FUNC(cmd1_opcode, NPU_SET_OFM_BASE1) \
+ SEP FUNC(cmd1_opcode, NPU_SET_OFM_BASE2) SEP FUNC(cmd1_opcode, NPU_SET_OFM_BASE3) SEP FUNC( \
+ cmd1_opcode, NPU_SET_OFM_STRIDE_X) SEP FUNC(cmd1_opcode, NPU_SET_OFM_STRIDE_Y) \
+ SEP FUNC(cmd1_opcode, NPU_SET_OFM_STRIDE_C) SEP FUNC(cmd1_opcode, NPU_SET_WEIGHT_BASE) SEP FUNC( \
+ cmd1_opcode, NPU_SET_WEIGHT_LENGTH) SEP FUNC(cmd1_opcode, NPU_SET_SCALE_BASE) \
+ SEP FUNC(cmd1_opcode, NPU_SET_SCALE_LENGTH) SEP FUNC(cmd1_opcode, NPU_SET_OFM_SCALE) \
+ SEP FUNC(cmd1_opcode, NPU_SET_OPA_SCALE) SEP FUNC(cmd1_opcode, NPU_SET_OPB_SCALE) \
+ SEP FUNC(cmd1_opcode, NPU_SET_DMA0_SRC) SEP FUNC(cmd1_opcode, NPU_SET_DMA0_DST) \
+ SEP FUNC(cmd1_opcode, NPU_SET_DMA0_LEN) SEP FUNC(cmd1_opcode, NPU_SET_DMA0_SKIP0) \
+ SEP FUNC(cmd1_opcode, NPU_SET_DMA0_SKIP1) SEP FUNC( \
+ cmd1_opcode, NPU_SET_IFM2_BASE0) SEP FUNC(cmd1_opcode, NPU_SET_IFM2_BASE1) \
+ SEP FUNC(cmd1_opcode, NPU_SET_IFM2_BASE2) SEP FUNC(cmd1_opcode, \
+ NPU_SET_IFM2_BASE3) \
+ SEP FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_X) \
+ SEP FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_Y) \
+ SEP FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_C) \
+ SEP FUNC(cmd1_opcode, NPU_SET_WEIGHT1_BASE) \
+ SEP FUNC(cmd1_opcode, NPU_SET_WEIGHT1_LENGTH) \
+ SEP FUNC(cmd1_opcode, NPU_SET_SCALE1_BASE) \
+ SEP FUNC(cmd1_opcode, NPU_SET_SCALE1_LENGTH)
+
+#define EXPAND_CMD_CTRL(FUNC, SEP) FUNC(cmd_ctrl, CMD0_CTRL) SEP FUNC(cmd_ctrl, CMD1_CTRL)
+
+#define EXPAND_CUSTOM_DMA(FUNC, SEP) FUNC(custom_dma, NOT_IMPLEMENTED) SEP FUNC(custom_dma, IMPLEMENTED)
+
+#define EXPAND_DMA_FAULT_SRC(FUNC, SEP) FUNC(dma_fault_src, AXI_M0) SEP FUNC(dma_fault_src, AXI_M1)
+
+#define EXPAND_DMA_REGION_MODE(FUNC, SEP) FUNC(dma_region_mode, EXTERNAL) SEP FUNC(dma_region_mode, INTERNAL)
+
+#define EXPAND_DMA_STRIDE_MODE(FUNC, SEP) \
+ FUNC(dma_stride_mode, D1) SEP FUNC(dma_stride_mode, D2) SEP FUNC(dma_stride_mode, D3)
+
+#define EXPAND_ELEMENTWISE_MODE(FUNC, SEP) \
+ FUNC(elementwise_mode, MUL) \
+ SEP FUNC(elementwise_mode, ADD) SEP FUNC(elementwise_mode, SUB) SEP FUNC(elementwise_mode, MIN) \
+ SEP FUNC(elementwise_mode, MAX) SEP FUNC(elementwise_mode, LRELU) SEP FUNC(elementwise_mode, ABS) \
+ SEP FUNC(elementwise_mode, CLZ) SEP FUNC(elementwise_mode, SHR) SEP FUNC(elementwise_mode, SHL)
+
+#define EXPAND_FUNCTIONAL_SAFETY(FUNC, SEP) \
+ FUNC(functional_safety, NOT_IMPLEMENTED) SEP FUNC(functional_safety, IMPLEMENTED)
+
+#define EXPAND_IFM2_OPERAND_ORDER(FUNC, SEP) FUNC(ifm2_operand_order, ORDER_B) SEP FUNC(ifm2_operand_order, ORDER_A)
+
+#define EXPAND_IFM_SCALE_MODE(FUNC, SEP) \
+ FUNC(ifm_scale_mode, OPA_OPB_16) SEP FUNC(ifm_scale_mode, OPA_32) SEP FUNC(ifm_scale_mode, OPB_32)
+
+#define EXPAND_IFM_UPSCALE_MODE(FUNC, SEP) \
+ FUNC(ifm_upscale_mode, NONE) SEP FUNC(ifm_upscale_mode, NEAREST) SEP FUNC(ifm_upscale_mode, ZEROS)
+
+#define EXPAND_KERNEL_DECOMPOSITION(FUNC, SEP) FUNC(kernel_decomposition, D8X8) SEP FUNC(kernel_decomposition, D4X4)
+
+#define EXPAND_KERNEL_DILATION(FUNC, SEP) FUNC(kernel_dilation, NONE) SEP FUNC(kernel_dilation, X2)
+
+#define EXPAND_MAX_BEATS(FUNC, SEP) FUNC(max_beats, B64) SEP FUNC(max_beats, B128) SEP FUNC(max_beats, B256)
+
+#define EXPAND_MEM_ATTR(FUNC, SEP) \
+ FUNC(mem_attr, AXI0_OUTSTANDING_COUNTER0) \
+ SEP FUNC(mem_attr, AXI0_OUTSTANDING_COUNTER1) SEP FUNC(mem_attr, AXI1_OUTSTANDING_COUNTER2) \
+ SEP FUNC(mem_attr, AXI1_OUTSTANDING_COUNTER3)
+
+#define EXPAND_OFM_SCALE_MODE(FUNC, SEP) FUNC(ofm_scale_mode, PER_CHANNEL) SEP FUNC(ofm_scale_mode, GLOBAL)
+
+#define EXPAND_PARALLEL_MODE(FUNC, SEP) FUNC(parallel_mode, SINGLE_CORE) SEP FUNC(parallel_mode, DUAL_CORE_DEPTH)
+
+#define EXPAND_PMU_AXI_CHANNEL(FUNC, SEP) \
+ FUNC(pmu_axi_channel, RD_CMD) \
+ SEP FUNC(pmu_axi_channel, RD_IFM) SEP FUNC(pmu_axi_channel, RD_WEIGHTS) SEP FUNC(pmu_axi_channel, RD_SCALE_BIAS) \
+ SEP FUNC(pmu_axi_channel, RD_MEM2MEM) SEP FUNC(pmu_axi_channel, WR_OFM) SEP FUNC(pmu_axi_channel, WR_MEM2MEM)
+
+#define EXPAND_PMU_EVENT(FUNC, SEP) \
+ FUNC(pmu_event, NO_EVENT) \
+ SEP FUNC(pmu_event, CYCLE) SEP FUNC(pmu_event, NPU_IDLE) SEP FUNC(pmu_event, CC_STALLED_ON_BLOCKDEP) SEP FUNC( \
+ pmu_event, CC_STALLED_ON_SHRAM_RECONFIG) SEP FUNC(pmu_event, NPU_ACTIVE) SEP FUNC(pmu_event, MAC_ACTIVE) \
+ SEP FUNC(pmu_event, MAC_ACTIVE_8BIT) SEP FUNC(pmu_event, MAC_ACTIVE_16BIT) SEP FUNC( \
+ pmu_event, MAC_DPU_ACTIVE) SEP FUNC(pmu_event, MAC_STALLED_BY_WD_ACC) SEP FUNC(pmu_event, \
+ MAC_STALLED_BY_WD) \
+ SEP FUNC(pmu_event, MAC_STALLED_BY_ACC) SEP FUNC(pmu_event, MAC_STALLED_BY_IB) SEP FUNC( \
+ pmu_event, \
+ MAC_ACTIVE_32BIT) SEP FUNC(pmu_event, \
+ MAC_STALLED_BY_INT_W) SEP FUNC(pmu_event, \
+ MAC_STALLED_BY_INT_ACC) SEP FUNC(pmu_event, \
+ AO_ACTIVE) \
+ SEP FUNC(pmu_event, AO_ACTIVE_8BIT) SEP FUNC(pmu_event, AO_ACTIVE_16BIT) SEP FUNC( \
+ pmu_event, AO_STALLED_BY_OFMP_OB) SEP FUNC(pmu_event, AO_STALLED_BY_OFMP) SEP \
+ FUNC(pmu_event, AO_STALLED_BY_OB) SEP FUNC(pmu_event, AO_STALLED_BY_ACC_IB) SEP FUNC( \
+ pmu_event, AO_STALLED_BY_ACC) SEP FUNC(pmu_event, AO_STALLED_BY_IB) SEP \
+ FUNC(pmu_event, WD_ACTIVE) SEP FUNC(pmu_event, WD_STALLED) SEP FUNC(pmu_event, WD_STALLED_BY_WS) SEP FUNC( \
+ pmu_event, WD_STALLED_BY_WD_BUF) SEP FUNC(pmu_event, \
+ WD_PARSE_ACTIVE) SEP \
+ FUNC(pmu_event, WD_PARSE_STALLED) SEP FUNC(pmu_event, WD_PARSE_STALLED_IN) SEP FUNC( \
+ pmu_event, WD_PARSE_STALLED_OUT) SEP FUNC(pmu_event, \
+ WD_TRANS_WS) SEP \
+ FUNC(pmu_event, WD_TRANS_WB) SEP FUNC(pmu_event, WD_TRANS_DW0) SEP FUNC( \
+ pmu_event, WD_TRANS_DW1) SEP FUNC(pmu_event, \
+ AXI0_RD_TRANS_ACCEPTED) SEP \
+ FUNC(pmu_event, AXI0_RD_TRANS_COMPLETED) SEP FUNC(pmu_event, AXI0_RD_DATA_BEAT_RECEIVED) SEP FUNC( \
+ pmu_event, AXI0_RD_TRAN_REQ_STALLED) SEP FUNC(pmu_event, \
+ AXI0_WR_TRANS_ACCEPTED) SEP \
+ FUNC(pmu_event, AXI0_WR_TRANS_COMPLETED_M) SEP FUNC( \
+ pmu_event, AXI0_WR_TRANS_COMPLETED_S) SEP \
+ FUNC(pmu_event, AXI0_WR_DATA_BEAT_WRITTEN) SEP FUNC( \
+ pmu_event, AXI0_WR_TRAN_REQ_STALLED) SEP \
+ FUNC(pmu_event, AXI0_WR_DATA_BEAT_STALLED) SEP FUNC( \
+ pmu_event, \
+ AXI0_ENABLED_CYCLES) SEP FUNC(pmu_event, \
+ AXI0_RD_STALL_LIMIT) SEP \
+ FUNC(pmu_event, AXI0_WR_STALL_LIMIT) SEP FUNC( \
+ pmu_event, \
+ AXI_LATENCY_ANY) SEP FUNC(pmu_event, \
+ AXI_LATENCY_32) SEP \
+ FUNC(pmu_event, \
+ AXI_LATENCY_64) SEP FUNC(pmu_event, \
+ AXI_LATENCY_128) SEP \
+ FUNC(pmu_event, AXI_LATENCY_256) SEP FUNC( \
+ pmu_event, \
+ AXI_LATENCY_512) SEP FUNC(pmu_event, \
+ AXI_LATENCY_1024) SEP \
+ FUNC(pmu_event, ECC_DMA) SEP FUNC( \
+ pmu_event, \
+ ECC_SB0) SEP FUNC(pmu_event, \
+ AXI1_RD_TRANS_ACCEPTED) SEP \
+ FUNC(pmu_event, AXI1_RD_TRANS_COMPLETED) SEP FUNC( \
+ pmu_event, AXI1_RD_DATA_BEAT_RECEIVED) SEP \
+ FUNC(pmu_event, AXI1_RD_TRAN_REQ_STALLED) SEP FUNC( \
+ pmu_event, AXI1_WR_TRANS_ACCEPTED) SEP \
+ FUNC(pmu_event, AXI1_WR_TRANS_COMPLETED_M) SEP FUNC( \
+ pmu_event, \
+ AXI1_WR_TRANS_COMPLETED_S) SEP \
+ FUNC(pmu_event, \
+ AXI1_WR_DATA_BEAT_WRITTEN) SEP \
+ FUNC(pmu_event, \
+ AXI1_WR_TRAN_REQ_STALLED) SEP \
+ FUNC( \
+ pmu_event, \
+ AXI1_WR_DATA_BEAT_STALLED) SEP \
+ FUNC( \
+ pmu_event, \
+ AXI1_ENABLED_CYCLES) SEP \
+ FUNC( \
+ pmu_event, \
+ AXI1_RD_STALL_LIMIT) SEP \
+ FUNC( \
+ pmu_event, \
+ AXI1_WR_STALL_LIMIT) \
+ SEP FUNC( \
+ pmu_event, \
+ ECC_SB1)
+
+#define EXPAND_POOLING_MODE(FUNC, SEP) \
+ FUNC(pooling_mode, MAX) SEP FUNC(pooling_mode, AVERAGE) SEP FUNC(pooling_mode, REDUCE_SUM)
+
+#define EXPAND_PRIVILEGE_LEVEL(FUNC, SEP) FUNC(privilege_level, USER) SEP FUNC(privilege_level, PRIVILEGED)
+
+#define EXPAND_ROUND_MODE(FUNC, SEP) FUNC(round_mode, DBL) SEP FUNC(round_mode, TRUNCATE) SEP FUNC(round_mode, NATURAL)
+
+#define EXPAND_SECURITY_LEVEL(FUNC, SEP) FUNC(security_level, SECURE) SEP FUNC(security_level, NON_SECURE)
+
+#define EXPAND_STATE(FUNC, SEP) FUNC(state, STOPPED) SEP FUNC(state, RUNNING)
+
+#define EXPAND_WD_CORE_SLICE_STATE(FUNC, SEP) \
+ FUNC(wd_core_slice_state, HEADER) SEP FUNC(wd_core_slice_state, PALETTE) SEP FUNC(wd_core_slice_state, WEIGHTS)
+
+#define EXPAND_WD_CTRL_STATE(FUNC, SEP) \
+ FUNC(wd_ctrl_state, IDLE) \
+ SEP FUNC(wd_ctrl_state, DRAIN) SEP FUNC(wd_ctrl_state, OFD_INIT) SEP FUNC(wd_ctrl_state, OFD_RUN)
+
+#define EXPAND_WEIGHT_ORDER(FUNC, SEP) FUNC(weight_order, DEPTH_FIRST) SEP FUNC(weight_order, PART_KERNEL_FIRST)
+
+#ifdef __cplusplus
+}
+#endif
+#endif