diff --git a/ethosu/vela/ethos_u55_regs/ethos_u55_regs.py b/ethosu/vela/ethos_u55_regs/ethos_u55_regs.py
new file mode 100644
index 0000000..37f7a67
--- /dev/null
+++ b/ethosu/vela/ethos_u55_regs/ethos_u55_regs.py
@@ -0,0 +1,3138 @@
+# Copyright (C) 2020 Arm Limited or its affiliates. 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.
+
+from ctypes import *
+from enum import Enum
+
+ARCH_VER = '0.154.0'
+
+
+class DEBUG_INTERNAL(Enum):
+    SHARED_BUFFER0 = 0x0400
+    SHARED_BUFFER1 = 0x0404
+    SHARED_BUFFER2 = 0x0408
+    SHARED_BUFFER3 = 0x040C
+    SHARED_BUFFER4 = 0x0410
+    SHARED_BUFFER5 = 0x0414
+    SHARED_BUFFER6 = 0x0418
+    SHARED_BUFFER7 = 0x041C
+    SHARED_BUFFER8 = 0x0420
+    SHARED_BUFFER9 = 0x0424
+    SHARED_BUFFER10 = 0x0428
+    SHARED_BUFFER11 = 0x042C
+    SHARED_BUFFER12 = 0x0430
+    SHARED_BUFFER13 = 0x0434
+    SHARED_BUFFER14 = 0x0438
+    SHARED_BUFFER15 = 0x043C
+    SHARED_BUFFER16 = 0x0440
+    SHARED_BUFFER17 = 0x0444
+    SHARED_BUFFER18 = 0x0448
+    SHARED_BUFFER19 = 0x044C
+    SHARED_BUFFER20 = 0x0450
+    SHARED_BUFFER21 = 0x0454
+    SHARED_BUFFER22 = 0x0458
+    SHARED_BUFFER23 = 0x045C
+    SHARED_BUFFER24 = 0x0460
+    SHARED_BUFFER25 = 0x0464
+    SHARED_BUFFER26 = 0x0468
+    SHARED_BUFFER27 = 0x046C
+    SHARED_BUFFER28 = 0x0470
+    SHARED_BUFFER29 = 0x0474
+    SHARED_BUFFER30 = 0x0478
+    SHARED_BUFFER31 = 0x047C
+    SHARED_BUFFER32 = 0x0480
+    SHARED_BUFFER33 = 0x0484
+    SHARED_BUFFER34 = 0x0488
+    SHARED_BUFFER35 = 0x048C
+    SHARED_BUFFER36 = 0x0490
+    SHARED_BUFFER37 = 0x0494
+    SHARED_BUFFER38 = 0x0498
+    SHARED_BUFFER39 = 0x049C
+    SHARED_BUFFER40 = 0x04A0
+    SHARED_BUFFER41 = 0x04A4
+    SHARED_BUFFER42 = 0x04A8
+    SHARED_BUFFER43 = 0x04AC
+    SHARED_BUFFER44 = 0x04B0
+    SHARED_BUFFER45 = 0x04B4
+    SHARED_BUFFER46 = 0x04B8
+    SHARED_BUFFER47 = 0x04BC
+    SHARED_BUFFER48 = 0x04C0
+    SHARED_BUFFER49 = 0x04C4
+    SHARED_BUFFER50 = 0x04C8
+    SHARED_BUFFER51 = 0x04CC
+    SHARED_BUFFER52 = 0x04D0
+    SHARED_BUFFER53 = 0x04D4
+    SHARED_BUFFER54 = 0x04D8
+    SHARED_BUFFER55 = 0x04DC
+    SHARED_BUFFER56 = 0x04E0
+    SHARED_BUFFER57 = 0x04E4
+    SHARED_BUFFER58 = 0x04E8
+    SHARED_BUFFER59 = 0x04EC
+    SHARED_BUFFER60 = 0x04F0
+    SHARED_BUFFER61 = 0x04F4
+    SHARED_BUFFER62 = 0x04F8
+    SHARED_BUFFER63 = 0x04FC
+    SHARED_BUFFER64 = 0x0500
+    SHARED_BUFFER65 = 0x0504
+    SHARED_BUFFER66 = 0x0508
+    SHARED_BUFFER67 = 0x050C
+    SHARED_BUFFER68 = 0x0510
+    SHARED_BUFFER69 = 0x0514
+    SHARED_BUFFER70 = 0x0518
+    SHARED_BUFFER71 = 0x051C
+    SHARED_BUFFER72 = 0x0520
+    SHARED_BUFFER73 = 0x0524
+    SHARED_BUFFER74 = 0x0528
+    SHARED_BUFFER75 = 0x052C
+    SHARED_BUFFER76 = 0x0530
+    SHARED_BUFFER77 = 0x0534
+    SHARED_BUFFER78 = 0x0538
+    SHARED_BUFFER79 = 0x053C
+    SHARED_BUFFER80 = 0x0540
+    SHARED_BUFFER81 = 0x0544
+    SHARED_BUFFER82 = 0x0548
+    SHARED_BUFFER83 = 0x054C
+    SHARED_BUFFER84 = 0x0550
+    SHARED_BUFFER85 = 0x0554
+    SHARED_BUFFER86 = 0x0558
+    SHARED_BUFFER87 = 0x055C
+    SHARED_BUFFER88 = 0x0560
+    SHARED_BUFFER89 = 0x0564
+    SHARED_BUFFER90 = 0x0568
+    SHARED_BUFFER91 = 0x056C
+    SHARED_BUFFER92 = 0x0570
+    SHARED_BUFFER93 = 0x0574
+    SHARED_BUFFER94 = 0x0578
+    SHARED_BUFFER95 = 0x057C
+    SHARED_BUFFER96 = 0x0580
+    SHARED_BUFFER97 = 0x0584
+    SHARED_BUFFER98 = 0x0588
+    SHARED_BUFFER99 = 0x058C
+    SHARED_BUFFER100 = 0x0590
+    SHARED_BUFFER101 = 0x0594
+    SHARED_BUFFER102 = 0x0598
+    SHARED_BUFFER103 = 0x059C
+    SHARED_BUFFER104 = 0x05A0
+    SHARED_BUFFER105 = 0x05A4
+    SHARED_BUFFER106 = 0x05A8
+    SHARED_BUFFER107 = 0x05AC
+    SHARED_BUFFER108 = 0x05B0
+    SHARED_BUFFER109 = 0x05B4
+    SHARED_BUFFER110 = 0x05B8
+    SHARED_BUFFER111 = 0x05BC
+    SHARED_BUFFER112 = 0x05C0
+    SHARED_BUFFER113 = 0x05C4
+    SHARED_BUFFER114 = 0x05C8
+    SHARED_BUFFER115 = 0x05CC
+    SHARED_BUFFER116 = 0x05D0
+    SHARED_BUFFER117 = 0x05D4
+    SHARED_BUFFER118 = 0x05D8
+    SHARED_BUFFER119 = 0x05DC
+    SHARED_BUFFER120 = 0x05E0
+    SHARED_BUFFER121 = 0x05E4
+    SHARED_BUFFER122 = 0x05E8
+    SHARED_BUFFER123 = 0x05EC
+    SHARED_BUFFER124 = 0x05F0
+    SHARED_BUFFER125 = 0x05F4
+    SHARED_BUFFER126 = 0x05F8
+    SHARED_BUFFER127 = 0x05FC
+    SHARED_BUFFER128 = 0x0600
+    SHARED_BUFFER129 = 0x0604
+    SHARED_BUFFER130 = 0x0608
+    SHARED_BUFFER131 = 0x060C
+    SHARED_BUFFER132 = 0x0610
+    SHARED_BUFFER133 = 0x0614
+    SHARED_BUFFER134 = 0x0618
+    SHARED_BUFFER135 = 0x061C
+    SHARED_BUFFER136 = 0x0620
+    SHARED_BUFFER137 = 0x0624
+    SHARED_BUFFER138 = 0x0628
+    SHARED_BUFFER139 = 0x062C
+    SHARED_BUFFER140 = 0x0630
+    SHARED_BUFFER141 = 0x0634
+    SHARED_BUFFER142 = 0x0638
+    SHARED_BUFFER143 = 0x063C
+    SHARED_BUFFER144 = 0x0640
+    SHARED_BUFFER145 = 0x0644
+    SHARED_BUFFER146 = 0x0648
+    SHARED_BUFFER147 = 0x064C
+    SHARED_BUFFER148 = 0x0650
+    SHARED_BUFFER149 = 0x0654
+    SHARED_BUFFER150 = 0x0658
+    SHARED_BUFFER151 = 0x065C
+    SHARED_BUFFER152 = 0x0660
+    SHARED_BUFFER153 = 0x0664
+    SHARED_BUFFER154 = 0x0668
+    SHARED_BUFFER155 = 0x066C
+    SHARED_BUFFER156 = 0x0670
+    SHARED_BUFFER157 = 0x0674
+    SHARED_BUFFER158 = 0x0678
+    SHARED_BUFFER159 = 0x067C
+    SHARED_BUFFER160 = 0x0680
+    SHARED_BUFFER161 = 0x0684
+    SHARED_BUFFER162 = 0x0688
+    SHARED_BUFFER163 = 0x068C
+    SHARED_BUFFER164 = 0x0690
+    SHARED_BUFFER165 = 0x0694
+    SHARED_BUFFER166 = 0x0698
+    SHARED_BUFFER167 = 0x069C
+    SHARED_BUFFER168 = 0x06A0
+    SHARED_BUFFER169 = 0x06A4
+    SHARED_BUFFER170 = 0x06A8
+    SHARED_BUFFER171 = 0x06AC
+    SHARED_BUFFER172 = 0x06B0
+    SHARED_BUFFER173 = 0x06B4
+    SHARED_BUFFER174 = 0x06B8
+    SHARED_BUFFER175 = 0x06BC
+    SHARED_BUFFER176 = 0x06C0
+    SHARED_BUFFER177 = 0x06C4
+    SHARED_BUFFER178 = 0x06C8
+    SHARED_BUFFER179 = 0x06CC
+    SHARED_BUFFER180 = 0x06D0
+    SHARED_BUFFER181 = 0x06D4
+    SHARED_BUFFER182 = 0x06D8
+    SHARED_BUFFER183 = 0x06DC
+    SHARED_BUFFER184 = 0x06E0
+    SHARED_BUFFER185 = 0x06E4
+    SHARED_BUFFER186 = 0x06E8
+    SHARED_BUFFER187 = 0x06EC
+    SHARED_BUFFER188 = 0x06F0
+    SHARED_BUFFER189 = 0x06F4
+    SHARED_BUFFER190 = 0x06F8
+    SHARED_BUFFER191 = 0x06FC
+    SHARED_BUFFER192 = 0x0700
+    SHARED_BUFFER193 = 0x0704
+    SHARED_BUFFER194 = 0x0708
+    SHARED_BUFFER195 = 0x070C
+    SHARED_BUFFER196 = 0x0710
+    SHARED_BUFFER197 = 0x0714
+    SHARED_BUFFER198 = 0x0718
+    SHARED_BUFFER199 = 0x071C
+    SHARED_BUFFER200 = 0x0720
+    SHARED_BUFFER201 = 0x0724
+    SHARED_BUFFER202 = 0x0728
+    SHARED_BUFFER203 = 0x072C
+    SHARED_BUFFER204 = 0x0730
+    SHARED_BUFFER205 = 0x0734
+    SHARED_BUFFER206 = 0x0738
+    SHARED_BUFFER207 = 0x073C
+    SHARED_BUFFER208 = 0x0740
+    SHARED_BUFFER209 = 0x0744
+    SHARED_BUFFER210 = 0x0748
+    SHARED_BUFFER211 = 0x074C
+    SHARED_BUFFER212 = 0x0750
+    SHARED_BUFFER213 = 0x0754
+    SHARED_BUFFER214 = 0x0758
+    SHARED_BUFFER215 = 0x075C
+    SHARED_BUFFER216 = 0x0760
+    SHARED_BUFFER217 = 0x0764
+    SHARED_BUFFER218 = 0x0768
+    SHARED_BUFFER219 = 0x076C
+    SHARED_BUFFER220 = 0x0770
+    SHARED_BUFFER221 = 0x0774
+    SHARED_BUFFER222 = 0x0778
+    SHARED_BUFFER223 = 0x077C
+    SHARED_BUFFER224 = 0x0780
+    SHARED_BUFFER225 = 0x0784
+    SHARED_BUFFER226 = 0x0788
+    SHARED_BUFFER227 = 0x078C
+    SHARED_BUFFER228 = 0x0790
+    SHARED_BUFFER229 = 0x0794
+    SHARED_BUFFER230 = 0x0798
+    SHARED_BUFFER231 = 0x079C
+    SHARED_BUFFER232 = 0x07A0
+    SHARED_BUFFER233 = 0x07A4
+    SHARED_BUFFER234 = 0x07A8
+    SHARED_BUFFER235 = 0x07AC
+    SHARED_BUFFER236 = 0x07B0
+    SHARED_BUFFER237 = 0x07B4
+    SHARED_BUFFER238 = 0x07B8
+    SHARED_BUFFER239 = 0x07BC
+    SHARED_BUFFER240 = 0x07C0
+    SHARED_BUFFER241 = 0x07C4
+    SHARED_BUFFER242 = 0x07C8
+    SHARED_BUFFER243 = 0x07CC
+    SHARED_BUFFER244 = 0x07D0
+    SHARED_BUFFER245 = 0x07D4
+    SHARED_BUFFER246 = 0x07D8
+    SHARED_BUFFER247 = 0x07DC
+    SHARED_BUFFER248 = 0x07E0
+    SHARED_BUFFER249 = 0x07E4
+    SHARED_BUFFER250 = 0x07E8
+    SHARED_BUFFER251 = 0x07EC
+    SHARED_BUFFER252 = 0x07F0
+    SHARED_BUFFER253 = 0x07F4
+    SHARED_BUFFER254 = 0x07F8
+    SHARED_BUFFER255 = 0x07FC
+    SIZE = 0x0800
+
+class HW_DEBUG_INTERNAL(Enum):
+    CLKFORCE = 0x0140
+    DEBUG = 0x0144
+    DEBUG2 = 0x0148
+    DEBUGCORE = 0x014C
+    SIZE = 0x0150
+
+class NPU_BP(Enum):
+    BASEP0 = 0x0080
+    BASEP1 = 0x0084
+    BASEP2 = 0x0088
+    BASEP3 = 0x008C
+    BASEP4 = 0x0090
+    BASEP5 = 0x0094
+    BASEP6 = 0x0098
+    BASEP7 = 0x009C
+    BASEP8 = 0x00A0
+    BASEP9 = 0x00A4
+    BASEP10 = 0x00A8
+    BASEP11 = 0x00AC
+    BASEP12 = 0x00B0
+    BASEP13 = 0x00B4
+    BASEP14 = 0x00B8
+    BASEP15 = 0x00BC
+    SIZE = 0x00C0
+
+class NPU_IDS(Enum):
+    REVISION = 0x0FC0
+    PID4 = 0x0FD0
+    PID5 = 0x0FD4
+    PID6 = 0x0FD8
+    PID7 = 0x0FDC
+    PID0 = 0x0FE0
+    PID1 = 0x0FE4
+    PID2 = 0x0FE8
+    PID3 = 0x0FEC
+    CID0 = 0x0FF0
+    CID1 = 0x0FF4
+    CID2 = 0x0FF8
+    CID3 = 0x0FFC
+    SIZE = 0x1000
+
+class NPU_REG(Enum):
+    ID = 0x0000
+    STATUS = 0x0004
+    CMD = 0x0008
+    RESET = 0x000C
+    QBASE0 = 0x0010
+    QBASE1 = 0x0014
+    QREAD = 0x0018
+    QCONFIG = 0x001C
+    QSIZE = 0x0020
+    PROT = 0x0024
+    CONFIG = 0x0028
+    LOCK = 0x002C
+    REGIONCFG = 0x003C
+    AXI_LIMIT0 = 0x0040
+    AXI_LIMIT1 = 0x0044
+    AXI_LIMIT2 = 0x0048
+    AXI_LIMIT3 = 0x004C
+    SIZE = 0x0050
+
+class PMU_INTERNAL(Enum):
+    PMCR = 0x0180
+    PMCNTENSET = 0x0184
+    PMCNTENCLR = 0x0188
+    PMOVSSET = 0x018C
+    PMOVSCLR = 0x0190
+    PMINTSET = 0x0194
+    PMINTCLR = 0x0198
+    PMCCNTR_LO = 0x01A0
+    PMCCNTR_HI = 0x01A4
+    PMCCNTR_CFG = 0x01A8
+    PMCAXI_CHAN = 0x01AC
+    PMEVCNTR0 = 0x0300
+    PMEVCNTR1 = 0x0304
+    PMEVCNTR2 = 0x0308
+    PMEVCNTR3 = 0x030C
+    PMEVTYPER0 = 0x0380
+    PMEVTYPER1 = 0x0384
+    PMEVTYPER2 = 0x0388
+    PMEVTYPER3 = 0x038C
+    SIZE = 0x0390
+
+class TSU_DEBUG_INTERNAL(Enum):
+    IFM_PAD_TOP = 0x0800
+    IFM_PAD_LEFT = 0x0804
+    IFM_PAD_RIGHT = 0x0808
+    IFM_PAD_BOTTOM = 0x080C
+    IFM_DEPTH_M1 = 0x0810
+    IFM_PRECISION = 0x0814
+    IFM_UPSCALE = 0x081C
+    IFM_ZERO_POINT = 0x0824
+    IFM_WIDTH0_M1 = 0x0828
+    IFM_HEIGHT0_M1 = 0x082C
+    IFM_HEIGHT1_M1 = 0x0830
+    IFM_IB_END = 0x0834
+    IFM_REGION = 0x083C
+    OFM_WIDTH_M1 = 0x0844
+    OFM_HEIGHT_M1 = 0x0848
+    OFM_DEPTH_M1 = 0x084C
+    OFM_PRECISION = 0x0850
+    OFM_BLK_WIDTH_M1 = 0x0854
+    OFM_BLK_HEIGHT_M1 = 0x0858
+    OFM_BLK_DEPTH_M1 = 0x085C
+    OFM_ZERO_POINT = 0x0860
+    OFM_WIDTH0_M1 = 0x0868
+    OFM_HEIGHT0_M1 = 0x086C
+    OFM_HEIGHT1_M1 = 0x0870
+    OFM_REGION = 0x087C
+    KERNEL_WIDTH_M1 = 0x0880
+    KERNEL_HEIGHT_M1 = 0x0884
+    KERNEL_STRIDE = 0x0888
+    PARALLEL_MODE = 0x088C
+    ACC_FORMAT = 0x0890
+    ACTIVATION = 0x0894
+    ACTIVATION_MIN = 0x0898
+    ACTIVATION_MAX = 0x089C
+    WEIGHT_REGION = 0x08A0
+    SCALE_REGION = 0x08A4
+    AB_START = 0x08B4
+    BLOCKDEP = 0x08BC
+    DMA0_SRC_REGION = 0x08C0
+    DMA0_DST_REGION = 0x08C4
+    DMA0_SIZE0 = 0x08C8
+    DMA0_SIZE1 = 0x08CC
+    IFM2_BROADCAST = 0x0900
+    IFM2_SCALAR = 0x0904
+    IFM2_PRECISION = 0x0914
+    IFM2_ZERO_POINT = 0x0924
+    IFM2_WIDTH0_M1 = 0x0928
+    IFM2_HEIGHT0_M1 = 0x092C
+    IFM2_HEIGHT1_M1 = 0x0930
+    IFM2_IB_START = 0x0934
+    IFM2_REGION = 0x093C
+    IFM_BASE0 = 0x0A00
+    IFM_BASE0_HI = 0x0A04
+    IFM_BASE1 = 0x0A08
+    IFM_BASE1_HI = 0x0A0C
+    IFM_BASE2 = 0x0A10
+    IFM_BASE2_HI = 0x0A14
+    IFM_BASE3 = 0x0A18
+    IFM_BASE3_HI = 0x0A1C
+    IFM_STRIDE_X = 0x0A20
+    IFM_STRIDE_X_HI = 0x0A24
+    IFM_STRIDE_Y = 0x0A28
+    IFM_STRIDE_Y_HI = 0x0A2C
+    IFM_STRIDE_C = 0x0A30
+    IFM_STRIDE_C_HI = 0x0A34
+    OFM_BASE0 = 0x0A40
+    OFM_BASE0_HI = 0x0A44
+    OFM_BASE1 = 0x0A48
+    OFM_BASE1_HI = 0x0A4C
+    OFM_BASE2 = 0x0A50
+    OFM_BASE2_HI = 0x0A54
+    OFM_BASE3 = 0x0A58
+    OFM_BASE3_HI = 0x0A5C
+    OFM_STRIDE_X = 0x0A60
+    OFM_STRIDE_X_HI = 0x0A64
+    OFM_STRIDE_Y = 0x0A68
+    OFM_STRIDE_Y_HI = 0x0A6C
+    OFM_STRIDE_C = 0x0A70
+    OFM_STRIDE_C_HI = 0x0A74
+    WEIGHT_BASE = 0x0A80
+    WEIGHT_BASE_HI = 0x0A84
+    WEIGHT_LENGTH = 0x0A88
+    WEIGHT_LENGTH_HI = 0x0A8C
+    SCALE_BASE = 0x0A90
+    SCALE_BASE_HI = 0x0A94
+    SCALE_LENGTH = 0x0A98
+    OFM_SCALE = 0x0AA0
+    OFM_SCALE_SHIFT = 0x0AA4
+    OPA_SCALE = 0x0AA8
+    OPA_SCALE_SHIFT = 0x0AAC
+    OPB_SCALE = 0x0AB0
+    DMA0_SRC = 0x0AC0
+    DMA0_SRC_HI = 0x0AC4
+    DMA0_DST = 0x0AC8
+    DMA0_DST_HI = 0x0ACC
+    DMA0_LEN = 0x0AD0
+    DMA0_LEN_HI = 0x0AD4
+    DMA0_SKIP0 = 0x0AD8
+    DMA0_SKIP0_HI = 0x0ADC
+    DMA0_SKIP1 = 0x0AE0
+    DMA0_SKIP1_HI = 0x0AE4
+    IFM2_BASE0 = 0x0B00
+    IFM2_BASE0_HI = 0x0B04
+    IFM2_BASE1 = 0x0B08
+    IFM2_BASE1_HI = 0x0B0C
+    IFM2_BASE2 = 0x0B10
+    IFM2_BASE2_HI = 0x0B14
+    IFM2_BASE3 = 0x0B18
+    IFM2_BASE3_HI = 0x0B1C
+    IFM2_STRIDE_X = 0x0B20
+    IFM2_STRIDE_X_HI = 0x0B24
+    IFM2_STRIDE_Y = 0x0B28
+    IFM2_STRIDE_Y_HI = 0x0B2C
+    IFM2_STRIDE_C = 0x0B30
+    IFM2_STRIDE_C_HI = 0x0B34
+    WEIGHT1_BASE = 0x0B40
+    WEIGHT1_BASE_HI = 0x0B44
+    WEIGHT1_LENGTH = 0x0B48
+    WEIGHT1_LENGTH_HI = 0x0B4C
+    SCALE1_BASE = 0x0B50
+    SCALE1_BASE_HI = 0x0B54
+    SCALE1_LENGTH = 0x0B58
+    SIZE = 0x0B5C
+
+class TSU_DEBUG_RO_INTERNAL(Enum):
+    KERNEL_X = 0x0200
+    KERNEL_Y = 0x0204
+    KERNEL_W_M1 = 0x0208
+    KERNEL_H_M1 = 0x020C
+    OFM_CBLK_WIDTH_M1 = 0x0210
+    OFM_CBLK_HEIGHT_M1 = 0x0214
+    OFM_CBLK_DEPTH_M1 = 0x0218
+    IFM_CBLK_DEPTH_M1 = 0x021C
+    OFM_X = 0x0220
+    OFM_Y = 0x0224
+    OFM_Z = 0x0228
+    IFM_Z = 0x022C
+    PAD_TOP = 0x0230
+    PAD_LEFT = 0x0234
+    IFM_CBLK_WIDTH = 0x0238
+    IFM_CBLK_HEIGHT = 0x023C
+    DMA_IFM_SRC = 0x0240
+    DMA_IFM_SRC_HI = 0x0244
+    DMA_IFM_DST = 0x0248
+    DMA_OFM_SRC = 0x024C
+    DMA_OFM_DST = 0x0250
+    DMA_OFM_DST_HI = 0x0254
+    DMA_WEIGHT_SRC = 0x0258
+    DMA_WEIGHT_SRC_HI = 0x025C
+    DMA_CMD_SRC = 0x0260
+    DMA_CMD_SRC_HI = 0x0264
+    DMA_CMD_SIZE = 0x0268
+    DMA_M2M_SRC = 0x026C
+    DMA_M2M_SRC_HI = 0x0270
+    DMA_M2M_DST = 0x0274
+    DMA_M2M_DST_HI = 0x0278
+    CURRENT_QREAD = 0x027C
+    DMA_SCALE_SRC = 0x0280
+    DMA_SCALE_SRC_HI = 0x0284
+    CURRENT_CMD = 0x02BC
+    SIZE = 0x02C0
+
+
+
+class acc_format(Enum):
+    INT_32BIT = 0
+    INT_40BIT = 1
+    FP_S5_10 = 2
+
+class activation(Enum):
+    NONE = 0
+    TANH = 3
+    SIGMOID = 4
+    LUT_START = 16
+    LUT_END = 23
+
+class clip_range(Enum):
+    OFM_PRECISION = 0
+    FORCE_UINT8 = 2
+    FORCE_INT8 = 3
+    FORCE_INT16 = 5
+
+class cmd0(Enum):
+    NPU_OP_STOP = 0x000
+    NPU_OP_IRQ = 0x001
+    NPU_OP_CONV = 0x002
+    NPU_OP_DEPTHWISE = 0x003
+    NPU_OP_POOL = 0x005
+    NPU_OP_ELEMENTWISE = 0x006
+    NPU_OP_DMA_START = 0x010
+    NPU_OP_DMA_WAIT = 0x011
+    NPU_OP_KERNEL_WAIT = 0x012
+    NPU_OP_PMU_MASK = 0x013
+    NPU_SET_IFM_PAD_TOP = 0x100
+    NPU_SET_IFM_PAD_LEFT = 0x101
+    NPU_SET_IFM_PAD_RIGHT = 0x102
+    NPU_SET_IFM_PAD_BOTTOM = 0x103
+    NPU_SET_IFM_DEPTH_M1 = 0x104
+    NPU_SET_IFM_PRECISION = 0x105
+    NPU_SET_IFM_UPSCALE = 0x107
+    NPU_SET_IFM_ZERO_POINT = 0x109
+    NPU_SET_IFM_WIDTH0_M1 = 0x10A
+    NPU_SET_IFM_HEIGHT0_M1 = 0x10B
+    NPU_SET_IFM_HEIGHT1_M1 = 0x10C
+    NPU_SET_IFM_IB_END = 0x10D
+    NPU_SET_IFM_REGION = 0x10F
+    NPU_SET_OFM_WIDTH_M1 = 0x111
+    NPU_SET_OFM_HEIGHT_M1 = 0x112
+    NPU_SET_OFM_DEPTH_M1 = 0x113
+    NPU_SET_OFM_PRECISION = 0x114
+    NPU_SET_OFM_BLK_WIDTH_M1 = 0x115
+    NPU_SET_OFM_BLK_HEIGHT_M1 = 0x116
+    NPU_SET_OFM_BLK_DEPTH_M1 = 0x117
+    NPU_SET_OFM_ZERO_POINT = 0x118
+    NPU_SET_OFM_WIDTH0_M1 = 0x11A
+    NPU_SET_OFM_HEIGHT0_M1 = 0x11B
+    NPU_SET_OFM_HEIGHT1_M1 = 0x11C
+    NPU_SET_OFM_REGION = 0x11F
+    NPU_SET_KERNEL_WIDTH_M1 = 0x120
+    NPU_SET_KERNEL_HEIGHT_M1 = 0x121
+    NPU_SET_KERNEL_STRIDE = 0x122
+    NPU_SET_PARALLEL_MODE = 0x123
+    NPU_SET_ACC_FORMAT = 0x124
+    NPU_SET_ACTIVATION = 0x125
+    NPU_SET_ACTIVATION_MIN = 0x126
+    NPU_SET_ACTIVATION_MAX = 0x127
+    NPU_SET_WEIGHT_REGION = 0x128
+    NPU_SET_SCALE_REGION = 0x129
+    NPU_SET_AB_START = 0x12D
+    NPU_SET_BLOCKDEP = 0x12F
+    NPU_SET_DMA0_SRC_REGION = 0x130
+    NPU_SET_DMA0_DST_REGION = 0x131
+    NPU_SET_DMA0_SIZE0 = 0x132
+    NPU_SET_DMA0_SIZE1 = 0x133
+    NPU_SET_IFM2_BROADCAST = 0x180
+    NPU_SET_IFM2_SCALAR = 0x181
+    NPU_SET_IFM2_PRECISION = 0x185
+    NPU_SET_IFM2_ZERO_POINT = 0x189
+    NPU_SET_IFM2_WIDTH0_M1 = 0x18A
+    NPU_SET_IFM2_HEIGHT0_M1 = 0x18B
+    NPU_SET_IFM2_HEIGHT1_M1 = 0x18C
+    NPU_SET_IFM2_IB_START = 0x18D
+    NPU_SET_IFM2_REGION = 0x18F
+
+class cmd1(Enum):
+    NPU_SET_IFM_BASE0 = 0x000
+    NPU_SET_IFM_BASE1 = 0x001
+    NPU_SET_IFM_BASE2 = 0x002
+    NPU_SET_IFM_BASE3 = 0x003
+    NPU_SET_IFM_STRIDE_X = 0x004
+    NPU_SET_IFM_STRIDE_Y = 0x005
+    NPU_SET_IFM_STRIDE_C = 0x006
+    NPU_SET_OFM_BASE0 = 0x010
+    NPU_SET_OFM_BASE1 = 0x011
+    NPU_SET_OFM_BASE2 = 0x012
+    NPU_SET_OFM_BASE3 = 0x013
+    NPU_SET_OFM_STRIDE_X = 0x014
+    NPU_SET_OFM_STRIDE_Y = 0x015
+    NPU_SET_OFM_STRIDE_C = 0x016
+    NPU_SET_WEIGHT_BASE = 0x020
+    NPU_SET_WEIGHT_LENGTH = 0x021
+    NPU_SET_SCALE_BASE = 0x022
+    NPU_SET_SCALE_LENGTH = 0x023
+    NPU_SET_OFM_SCALE = 0x024
+    NPU_SET_OPA_SCALE = 0x025
+    NPU_SET_OPB_SCALE = 0x026
+    NPU_SET_DMA0_SRC = 0x030
+    NPU_SET_DMA0_DST = 0x031
+    NPU_SET_DMA0_LEN = 0x032
+    NPU_SET_DMA0_SKIP0 = 0x033
+    NPU_SET_DMA0_SKIP1 = 0x034
+    NPU_SET_IFM2_BASE0 = 0x080
+    NPU_SET_IFM2_BASE1 = 0x081
+    NPU_SET_IFM2_BASE2 = 0x082
+    NPU_SET_IFM2_BASE3 = 0x083
+    NPU_SET_IFM2_STRIDE_X = 0x084
+    NPU_SET_IFM2_STRIDE_Y = 0x085
+    NPU_SET_IFM2_STRIDE_C = 0x086
+    NPU_SET_WEIGHT1_BASE = 0x090
+    NPU_SET_WEIGHT1_LENGTH = 0x091
+    NPU_SET_SCALE1_BASE = 0x092
+    NPU_SET_SCALE1_LENGTH = 0x093
+
+class data_format(Enum):
+    NHWC = 0
+    NHCWB16 = 1
+
+class elementwise_mode(Enum):
+    MUL = 0
+    ADD = 1
+    SUB = 2
+    MIN = 3
+    MAX = 4
+    LRELU = 5
+    ABS = 6
+    CLZ = 7
+    SHR = 8
+    SHL = 9
+
+class ifm_precision(Enum):
+    W8_U8 = 0
+    W8_S8 = 1
+    W8_U16 = 4
+    W8_S16 = 5
+    W8_S32 = 9
+
+class ifm_scale_mode(Enum):
+    SCALE_16BIT = 0
+    SCALE_OPA_32BIT = 1
+    SCALE_OPB_32BIT = 2
+
+class memory_type(Enum):
+    AXI0_OUTSTANDING_COUNTER0 = 0
+    AXI0_OUTSTANDING_COUNTER1 = 1
+    AXI1_OUTSTANDING_COUNTER2 = 2
+    AXI1_OUTSTANDING_COUNTER3 = 3
+
+class ofm_precision(Enum):
+    U8 = 0
+    S8 = 1
+    U16 = 2
+    S16 = 3
+    S32 = 5
+
+class pmu_event_type(Enum):
+    CYCLE = 0x11
+    NPU_IDLE = 0x20
+    MAC_ACTIVE = 0x30
+    MAC_ACTIVE_8BIT = 0x31
+    MAC_ACTIVE_16BIT = 0x32
+    MAC_DPU_ACTIVE = 0x33
+    MAC_STALLED_BY_WD_ACC = 0x34
+    MAC_STALLED_BY_WD = 0x35
+    MAC_STALLED_BY_ACC = 0x36
+    MAC_STALLED_BY_IB = 0x37
+    AO_ACTIVE = 0x40
+    AO_ACTIVE_8BIT = 0x41
+    AO_ACTIVE_16BIT = 0x42
+    AO_STALLED_BY_OFMP_OB = 0x43
+    AO_STALLED_BY_OFMP = 0x44
+    AO_STALLED_BY_OB = 0x45
+    AO_STALLED_BY_ACC_IB = 0x46
+    AO_STALLED_BY_ACC = 0x47
+    AO_STALLED_BY_IB = 0x48
+    WD_ACTIVE = 0x50
+    WD_STALLED = 0x51
+    WD_STALLED_BY_WS = 0x52
+    WD_STALLED_BY_WD_BUF = 0x53
+    WD_PARSE_ACTIVE = 0x54
+    WD_PARSE_STALLED = 0x55
+    WD_PARSE_STALLED_IN = 0x56
+    WD_PARSE_STALLED_OUT = 0x57
+    AXI0_RD_TRANS_ACCEPTED = 0x80
+    AXI0_RD_TRANS_COMPLETED = 0x81
+    AXI0_RD_DATA_BEAT_RECEIVED = 0x82
+    AXI0_RD_TRAN_REQ_STALLED = 0x83
+    AXI0_WR_TRANS_ACCEPTED = 0x84
+    AXI0_WR_TRANS_COMPLETED_M = 0x85
+    AXI0_WR_TRANS_COMPLETED_S = 0x86
+    AXI0_WR_DATA_BEAT_WRITTEN = 0x87
+    AXI0_WR_TRAN_REQ_STALLED = 0x88
+    AXI0_WR_DATA_BEAT_STALLED = 0x89
+    AXI0_ENABLED_CYCLES = 0x8c
+    AXI0_RD_STALL_LIMIT = 0x8e
+    AXI0_WR_STALL_LIMIT = 0x8f
+    AXI1_RD_TRANS_ACCEPTED = 0x180
+    AXI1_RD_TRANS_COMPLETED = 0x181
+    AXI1_RD_DATA_BEAT_RECEIVED = 0x182
+    AXI1_RD_TRAN_REQ_STALLED = 0x183
+    AXI1_WR_TRANS_ACCEPTED = 0x184
+    AXI1_WR_TRANS_COMPLETED_M = 0x185
+    AXI1_WR_TRANS_COMPLETED_S = 0x186
+    AXI1_WR_DATA_BEAT_WRITTEN = 0x187
+    AXI1_WR_TRAN_REQ_STALLED = 0x188
+    AXI1_WR_DATA_BEAT_STALLED = 0x189
+    AXI1_ENABLED_CYCLES = 0x18c
+    AXI1_RD_STALL_LIMIT = 0x18e
+    AXI1_WR_STALL_LIMIT = 0x18f
+    AXI_LATENCY_ANY = 0xa0
+    AXI_LATENCY_32 = 0xa1
+    AXI_LATENCY_64 = 0xa2
+    AXI_LATENCY_128 = 0xa3
+    AXI_LATENCY_256 = 0xa4
+    AXI_LATENCY_512 = 0xa5
+    AXI_LATENCY_1024 = 0xa6
+
+class pooling_mode(Enum):
+    MAX = 0
+    AVERAGE = 1
+    REDUCE_SUM = 2
+
+class privilege_level(Enum):
+    USER = 0
+    PRIVILEGED = 1
+
+class product(Enum):
+    ETHOS_U55 = 0
+
+class resampling_mode(Enum):
+    NONE = 0
+    NEAREST = 1
+    TRANSPOSE = 2
+
+class rounding(Enum):
+    TFL = 0
+    TRUNCATE = 1
+    NATURAL = 2
+
+class security_level(Enum):
+    SECURE = 0
+    NON_SECURE = 1
+
+class state(Enum):
+    STOPPED = 0
+    RUNNING = 1
+
+class stride_mode(Enum):
+    STRIDE_MODE_1D = 0
+    STRIDE_MODE_2D = 1
+    STRIDE_MODE_3D = 2
+
+
+class clkforce_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("top_level_clk", c_uint32, 1),
+            ("cc_clk", c_uint32, 1),
+            ("dma_clk", c_uint32, 1),
+            ("mac_clk", c_uint32, 1),
+            ("ao_clk", c_uint32, 1),
+            ("wd_clk", c_uint32, 1),
+            ("reserved0", c_uint32, 26),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_top_level_clk(self, value): self.bits.top_level_clk = value
+    def get_top_level_clk(self): value = self.bits.top_level_clk; return value
+    def set_cc_clk(self, value): self.bits.cc_clk = value
+    def get_cc_clk(self): value = self.bits.cc_clk; return value
+    def set_dma_clk(self, value): self.bits.dma_clk = value
+    def get_dma_clk(self): value = self.bits.dma_clk; return value
+    def set_mac_clk(self, value): self.bits.mac_clk = value
+    def get_mac_clk(self): value = self.bits.mac_clk; return value
+    def set_ao_clk(self, value): self.bits.ao_clk = value
+    def get_ao_clk(self): value = self.bits.ao_clk; return value
+    def set_wd_clk(self, value): self.bits.wd_clk = value
+    def get_wd_clk(self): value = self.bits.wd_clk; return value
+
+
+class basep0_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep1_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep2_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep3_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep4_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep5_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep6_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep7_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep8_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep9_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep10_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep11_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep12_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep13_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep14_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class basep15_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("addr_word", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_addr_word(self, value): self.bits.addr_word = value
+    def get_addr_word(self): value = self.bits.addr_word; return value
+
+
+class pid4_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid4", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid4(self, value): self.bits.pid4 = value
+    def get_pid4(self): value = self.bits.pid4; return value
+
+
+class pid5_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid5", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid5(self, value): self.bits.pid5 = value
+    def get_pid5(self): value = self.bits.pid5; return value
+
+
+class pid6_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid6", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid6(self, value): self.bits.pid6 = value
+    def get_pid6(self): value = self.bits.pid6; return value
+
+
+class pid7_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid7", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid7(self, value): self.bits.pid7 = value
+    def get_pid7(self): value = self.bits.pid7; return value
+
+
+class pid0_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid0", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid0(self, value): self.bits.pid0 = value
+    def get_pid0(self): value = self.bits.pid0; return value
+
+
+class pid1_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid1", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid1(self, value): self.bits.pid1 = value
+    def get_pid1(self): value = self.bits.pid1; return value
+
+
+class pid2_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid2", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid2(self, value): self.bits.pid2 = value
+    def get_pid2(self): value = self.bits.pid2; return value
+
+
+class pid3_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pid3", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pid3(self, value): self.bits.pid3 = value
+    def get_pid3(self): value = self.bits.pid3; return value
+
+
+class cid0_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cid0", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cid0(self, value): self.bits.cid0 = value
+    def get_cid0(self): value = self.bits.cid0; return value
+
+
+class cid1_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cid1", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cid1(self, value): self.bits.cid1 = value
+    def get_cid1(self): value = self.bits.cid1; return value
+
+
+class cid2_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cid2", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cid2(self, value): self.bits.cid2 = value
+    def get_cid2(self): value = self.bits.cid2; return value
+
+
+class cid3_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cid3", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cid3(self, value): self.bits.cid3 = value
+    def get_cid3(self): value = self.bits.cid3; return value
+
+
+class id_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("version_status", c_uint32, 4),
+            ("version_minor", c_uint32, 4),
+            ("version_major", c_uint32, 4),
+            ("product_major", c_uint32, 4),
+            ("arch_patch_rev", c_uint32, 4),
+            ("arch_minor_rev", c_uint32, 8),
+            ("arch_major_rev", c_uint32, 4),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_version_status(self, value): self.bits.version_status = value
+    def get_version_status(self): value = self.bits.version_status; return value
+    def set_version_minor(self, value): self.bits.version_minor = value
+    def get_version_minor(self): value = self.bits.version_minor; return value
+    def set_version_major(self, value): self.bits.version_major = value
+    def get_version_major(self): value = self.bits.version_major; return value
+    def set_product_major(self, value): self.bits.product_major = value
+    def get_product_major(self): value = self.bits.product_major; return value
+    def set_arch_patch_rev(self, value): self.bits.arch_patch_rev = value
+    def get_arch_patch_rev(self): value = self.bits.arch_patch_rev; return value
+    def set_arch_minor_rev(self, value): self.bits.arch_minor_rev = value
+    def get_arch_minor_rev(self): value = self.bits.arch_minor_rev; return value
+    def set_arch_major_rev(self, value): self.bits.arch_major_rev = value
+    def get_arch_major_rev(self): value = self.bits.arch_major_rev; return value
+
+
+class status_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("state", c_uint32, 1),
+            ("irq_raised", c_uint32, 1),
+            ("bus_status", c_uint32, 1),
+            ("reset_status", c_uint32, 1),
+            ("cmd_parse_error", c_uint32, 1),
+            ("cmd_end_reached", c_uint32, 1),
+            ("pmu_irq_raised", c_uint32, 1),
+            ("wd_fault", c_uint32, 1),
+            ("reserved0", c_uint32, 3),
+            ("faulting_interface", c_uint32, 1),
+            ("faulting_channel", c_uint32, 4),
+            ("irq_history_mask", c_uint32, 16),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_state(self, value): self.bits.state = value
+    def get_state(self): value = self.bits.state; return value
+    def set_irq_raised(self, value): self.bits.irq_raised = value
+    def get_irq_raised(self): value = self.bits.irq_raised; return value
+    def set_bus_status(self, value): self.bits.bus_status = value
+    def get_bus_status(self): value = self.bits.bus_status; return value
+    def set_reset_status(self, value): self.bits.reset_status = value
+    def get_reset_status(self): value = self.bits.reset_status; return value
+    def set_cmd_parse_error(self, value): self.bits.cmd_parse_error = value
+    def get_cmd_parse_error(self): value = self.bits.cmd_parse_error; return value
+    def set_cmd_end_reached(self, value): self.bits.cmd_end_reached = value
+    def get_cmd_end_reached(self): value = self.bits.cmd_end_reached; return value
+    def set_pmu_irq_raised(self, value): self.bits.pmu_irq_raised = value
+    def get_pmu_irq_raised(self): value = self.bits.pmu_irq_raised; return value
+    def set_wd_fault(self, value): self.bits.wd_fault = value
+    def get_wd_fault(self): value = self.bits.wd_fault; return value
+    def set_faulting_interface(self, value): self.bits.faulting_interface = value
+    def get_faulting_interface(self): value = self.bits.faulting_interface; return value
+    def set_faulting_channel(self, value): self.bits.faulting_channel = value
+    def get_faulting_channel(self): value = self.bits.faulting_channel; return value
+    def set_irq_history_mask(self, value): self.bits.irq_history_mask = value
+    def get_irq_history_mask(self): value = self.bits.irq_history_mask; return value
+
+
+class cmd_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("transition_to_running_state", c_uint32, 1),
+            ("clear_irq", c_uint32, 1),
+            ("clock_q_enable", c_uint32, 1),
+            ("power_q_enable", c_uint32, 1),
+            ("stop_request", c_uint32, 1),
+            ("reserved0", c_uint32, 11),
+            ("clear_irq_history", c_uint32, 16),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_transition_to_running_state(self, value): self.bits.transition_to_running_state = value
+    def get_transition_to_running_state(self): value = self.bits.transition_to_running_state; return value
+    def set_clear_irq(self, value): self.bits.clear_irq = value
+    def get_clear_irq(self): value = self.bits.clear_irq; return value
+    def set_clock_q_enable(self, value): self.bits.clock_q_enable = value
+    def get_clock_q_enable(self): value = self.bits.clock_q_enable; return value
+    def set_power_q_enable(self, value): self.bits.power_q_enable = value
+    def get_power_q_enable(self): value = self.bits.power_q_enable; return value
+    def set_stop_request(self, value): self.bits.stop_request = value
+    def get_stop_request(self): value = self.bits.stop_request; return value
+    def set_clear_irq_history(self, value): self.bits.clear_irq_history = value
+    def get_clear_irq_history(self): value = self.bits.clear_irq_history; return value
+
+
+class reset_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("pending_cpl", c_uint32, 1),
+            ("pending_csl", c_uint32, 1),
+            ("reserved0", c_uint32, 30),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_pending_cpl(self, value): self.bits.pending_cpl = value
+    def get_pending_cpl(self): value = self.bits.pending_cpl; return value
+    def set_pending_csl(self, value): self.bits.pending_csl = value
+    def get_pending_csl(self): value = self.bits.pending_csl; return value
+
+
+class qbase0_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("qbase0", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_qbase0(self, value): self.bits.qbase0 = value
+    def get_qbase0(self): value = self.bits.qbase0; return value
+
+
+class qbase1_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("qbase1", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_qbase1(self, value): self.bits.qbase1 = value
+    def get_qbase1(self): value = self.bits.qbase1; return value
+
+
+class qread_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("qread", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_qread(self, value): self.bits.qread = value
+    def get_qread(self): value = self.bits.qread; return value
+
+
+class qconfig_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("qconfig", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_qconfig(self, value): self.bits.qconfig = value
+    def get_qconfig(self): value = self.bits.qconfig; return value
+
+
+class qsize_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("qsize", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_qsize(self, value): self.bits.qsize = value
+    def get_qsize(self): value = self.bits.qsize; return value
+
+
+class prot_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("active_cpl", c_uint32, 1),
+            ("active_csl", c_uint32, 1),
+            ("reserved0", c_uint32, 30),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_active_cpl(self, value): self.bits.active_cpl = value
+    def get_active_cpl(self): value = self.bits.active_cpl; return value
+    def set_active_csl(self, value): self.bits.active_csl = value
+    def get_active_csl(self): value = self.bits.active_csl; return value
+
+
+class config_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("macs_per_cc", c_uint32, 4),
+            ("cmd_stream_version", c_uint32, 4),
+            ("shram_size", c_uint32, 8),
+            ("reserved0", c_uint32, 12),
+            ("product", c_uint32, 4),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_macs_per_cc(self, value): self.bits.macs_per_cc = value
+    def get_macs_per_cc(self): value = self.bits.macs_per_cc; return value
+    def set_cmd_stream_version(self, value): self.bits.cmd_stream_version = value
+    def get_cmd_stream_version(self): value = self.bits.cmd_stream_version; return value
+    def set_shram_size(self, value): self.bits.shram_size = value
+    def get_shram_size(self): value = self.bits.shram_size; return value
+    def set_product(self, value): self.bits.product = value
+    def get_product(self): value = self.bits.product; return value
+
+
+class lock_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("lock", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_lock(self, value): self.bits.lock = value
+    def get_lock(self): value = self.bits.lock; return value
+
+
+class regioncfg_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("region0", c_uint32, 2),
+            ("region1", c_uint32, 2),
+            ("region2", c_uint32, 2),
+            ("region3", c_uint32, 2),
+            ("region4", c_uint32, 2),
+            ("region5", c_uint32, 2),
+            ("region6", c_uint32, 2),
+            ("region7", c_uint32, 2),
+            ("reserved0", c_uint32, 16),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_region0(self, value): self.bits.region0 = value
+    def get_region0(self): value = self.bits.region0; return value
+    def set_region1(self, value): self.bits.region1 = value
+    def get_region1(self): value = self.bits.region1; return value
+    def set_region2(self, value): self.bits.region2 = value
+    def get_region2(self): value = self.bits.region2; return value
+    def set_region3(self, value): self.bits.region3 = value
+    def get_region3(self): value = self.bits.region3; return value
+    def set_region4(self, value): self.bits.region4 = value
+    def get_region4(self): value = self.bits.region4; return value
+    def set_region5(self, value): self.bits.region5 = value
+    def get_region5(self): value = self.bits.region5; return value
+    def set_region6(self, value): self.bits.region6 = value
+    def get_region6(self): value = self.bits.region6; return value
+    def set_region7(self, value): self.bits.region7 = value
+    def get_region7(self): value = self.bits.region7; return value
+
+
+class axi_limit0_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("max_beats", c_uint32, 2),
+            ("reserved0", c_uint32, 2),
+            ("memtype", c_uint32, 4),
+            ("reserved1", c_uint32, 8),
+            ("max_outstanding_read_m1", c_uint32, 8),
+            ("max_outstanding_write_m1", c_uint32, 8),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_max_beats(self, value): self.bits.max_beats = value
+    def get_max_beats(self): value = self.bits.max_beats; return value
+    def set_memtype(self, value): self.bits.memtype = value
+    def get_memtype(self): value = self.bits.memtype; return value
+    def set_max_outstanding_read_m1(self, value): self.bits.max_outstanding_read_m1 = value
+    def get_max_outstanding_read_m1(self): value = self.bits.max_outstanding_read_m1; return value
+    def set_max_outstanding_write_m1(self, value): self.bits.max_outstanding_write_m1 = value
+    def get_max_outstanding_write_m1(self): value = self.bits.max_outstanding_write_m1; return value
+
+
+class axi_limit1_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("max_beats", c_uint32, 2),
+            ("reserved0", c_uint32, 2),
+            ("memtype", c_uint32, 4),
+            ("reserved1", c_uint32, 8),
+            ("max_outstanding_read_m1", c_uint32, 8),
+            ("max_outstanding_write_m1", c_uint32, 8),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_max_beats(self, value): self.bits.max_beats = value
+    def get_max_beats(self): value = self.bits.max_beats; return value
+    def set_memtype(self, value): self.bits.memtype = value
+    def get_memtype(self): value = self.bits.memtype; return value
+    def set_max_outstanding_read_m1(self, value): self.bits.max_outstanding_read_m1 = value
+    def get_max_outstanding_read_m1(self): value = self.bits.max_outstanding_read_m1; return value
+    def set_max_outstanding_write_m1(self, value): self.bits.max_outstanding_write_m1 = value
+    def get_max_outstanding_write_m1(self): value = self.bits.max_outstanding_write_m1; return value
+
+
+class axi_limit2_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("max_beats", c_uint32, 2),
+            ("reserved0", c_uint32, 2),
+            ("memtype", c_uint32, 4),
+            ("reserved1", c_uint32, 8),
+            ("max_outstanding_read_m1", c_uint32, 8),
+            ("max_outstanding_write_m1", c_uint32, 8),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_max_beats(self, value): self.bits.max_beats = value
+    def get_max_beats(self): value = self.bits.max_beats; return value
+    def set_memtype(self, value): self.bits.memtype = value
+    def get_memtype(self): value = self.bits.memtype; return value
+    def set_max_outstanding_read_m1(self, value): self.bits.max_outstanding_read_m1 = value
+    def get_max_outstanding_read_m1(self): value = self.bits.max_outstanding_read_m1; return value
+    def set_max_outstanding_write_m1(self, value): self.bits.max_outstanding_write_m1 = value
+    def get_max_outstanding_write_m1(self): value = self.bits.max_outstanding_write_m1; return value
+
+
+class axi_limit3_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("max_beats", c_uint32, 2),
+            ("reserved0", c_uint32, 2),
+            ("memtype", c_uint32, 4),
+            ("reserved1", c_uint32, 8),
+            ("max_outstanding_read_m1", c_uint32, 8),
+            ("max_outstanding_write_m1", c_uint32, 8),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_max_beats(self, value): self.bits.max_beats = value
+    def get_max_beats(self): value = self.bits.max_beats; return value
+    def set_memtype(self, value): self.bits.memtype = value
+    def get_memtype(self): value = self.bits.memtype; return value
+    def set_max_outstanding_read_m1(self, value): self.bits.max_outstanding_read_m1 = value
+    def get_max_outstanding_read_m1(self): value = self.bits.max_outstanding_read_m1; return value
+    def set_max_outstanding_write_m1(self, value): self.bits.max_outstanding_write_m1 = value
+    def get_max_outstanding_write_m1(self): value = self.bits.max_outstanding_write_m1; return value
+
+
+class pmcr_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cnt_en", c_uint32, 1),
+            ("event_cnt_rst", c_uint32, 1),
+            ("cycle_cnt_rst", c_uint32, 1),
+            ("mask_en", c_uint32, 1),
+            ("reserved0", c_uint32, 7),
+            ("num_event_cnt", c_uint32, 5),
+            ("reserved1", c_uint32, 16),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cnt_en(self, value): self.bits.cnt_en = value
+    def get_cnt_en(self): value = self.bits.cnt_en; return value
+    def set_event_cnt_rst(self, value): self.bits.event_cnt_rst = value
+    def get_event_cnt_rst(self): value = self.bits.event_cnt_rst; return value
+    def set_cycle_cnt_rst(self, value): self.bits.cycle_cnt_rst = value
+    def get_cycle_cnt_rst(self): value = self.bits.cycle_cnt_rst; return value
+    def set_mask_en(self, value): self.bits.mask_en = value
+    def get_mask_en(self): value = self.bits.mask_en; return value
+    def set_num_event_cnt(self, value): self.bits.num_event_cnt = value
+    def get_num_event_cnt(self): value = self.bits.num_event_cnt; return value
+
+
+class pmcntenset_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("event_cnt_0", c_uint32, 1),
+            ("event_cnt_1", c_uint32, 1),
+            ("event_cnt_2", c_uint32, 1),
+            ("event_cnt_3", c_uint32, 1),
+            ("reserved0", c_uint32, 27),
+            ("cycle_cnt", c_uint32, 1),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_event_cnt_0(self, value): self.bits.event_cnt_0 = value
+    def get_event_cnt_0(self): value = self.bits.event_cnt_0; return value
+    def set_event_cnt_1(self, value): self.bits.event_cnt_1 = value
+    def get_event_cnt_1(self): value = self.bits.event_cnt_1; return value
+    def set_event_cnt_2(self, value): self.bits.event_cnt_2 = value
+    def get_event_cnt_2(self): value = self.bits.event_cnt_2; return value
+    def set_event_cnt_3(self, value): self.bits.event_cnt_3 = value
+    def get_event_cnt_3(self): value = self.bits.event_cnt_3; return value
+    def set_cycle_cnt(self, value): self.bits.cycle_cnt = value
+    def get_cycle_cnt(self): value = self.bits.cycle_cnt; return value
+
+
+class pmcntenclr_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("event_cnt_0", c_uint32, 1),
+            ("event_cnt_1", c_uint32, 1),
+            ("event_cnt_2", c_uint32, 1),
+            ("event_cnt_3", c_uint32, 1),
+            ("reserved0", c_uint32, 27),
+            ("cycle_cnt", c_uint32, 1),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_event_cnt_0(self, value): self.bits.event_cnt_0 = value
+    def get_event_cnt_0(self): value = self.bits.event_cnt_0; return value
+    def set_event_cnt_1(self, value): self.bits.event_cnt_1 = value
+    def get_event_cnt_1(self): value = self.bits.event_cnt_1; return value
+    def set_event_cnt_2(self, value): self.bits.event_cnt_2 = value
+    def get_event_cnt_2(self): value = self.bits.event_cnt_2; return value
+    def set_event_cnt_3(self, value): self.bits.event_cnt_3 = value
+    def get_event_cnt_3(self): value = self.bits.event_cnt_3; return value
+    def set_cycle_cnt(self, value): self.bits.cycle_cnt = value
+    def get_cycle_cnt(self): value = self.bits.cycle_cnt; return value
+
+
+class pmovsset_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("event_cnt_0_ovf", c_uint32, 1),
+            ("event_cnt_1_ovf", c_uint32, 1),
+            ("event_cnt_2_ovf", c_uint32, 1),
+            ("event_cnt_3_ovf", c_uint32, 1),
+            ("reserved0", c_uint32, 27),
+            ("cycle_cnt_ovf", c_uint32, 1),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_event_cnt_0_ovf(self, value): self.bits.event_cnt_0_ovf = value
+    def get_event_cnt_0_ovf(self): value = self.bits.event_cnt_0_ovf; return value
+    def set_event_cnt_1_ovf(self, value): self.bits.event_cnt_1_ovf = value
+    def get_event_cnt_1_ovf(self): value = self.bits.event_cnt_1_ovf; return value
+    def set_event_cnt_2_ovf(self, value): self.bits.event_cnt_2_ovf = value
+    def get_event_cnt_2_ovf(self): value = self.bits.event_cnt_2_ovf; return value
+    def set_event_cnt_3_ovf(self, value): self.bits.event_cnt_3_ovf = value
+    def get_event_cnt_3_ovf(self): value = self.bits.event_cnt_3_ovf; return value
+    def set_cycle_cnt_ovf(self, value): self.bits.cycle_cnt_ovf = value
+    def get_cycle_cnt_ovf(self): value = self.bits.cycle_cnt_ovf; return value
+
+
+class pmovsclr_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("event_cnt_0_ovf", c_uint32, 1),
+            ("event_cnt_1_ovf", c_uint32, 1),
+            ("event_cnt_2_ovf", c_uint32, 1),
+            ("event_cnt_3_ovf", c_uint32, 1),
+            ("reserved0", c_uint32, 27),
+            ("cycle_cnt_ovf", c_uint32, 1),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_event_cnt_0_ovf(self, value): self.bits.event_cnt_0_ovf = value
+    def get_event_cnt_0_ovf(self): value = self.bits.event_cnt_0_ovf; return value
+    def set_event_cnt_1_ovf(self, value): self.bits.event_cnt_1_ovf = value
+    def get_event_cnt_1_ovf(self): value = self.bits.event_cnt_1_ovf; return value
+    def set_event_cnt_2_ovf(self, value): self.bits.event_cnt_2_ovf = value
+    def get_event_cnt_2_ovf(self): value = self.bits.event_cnt_2_ovf; return value
+    def set_event_cnt_3_ovf(self, value): self.bits.event_cnt_3_ovf = value
+    def get_event_cnt_3_ovf(self): value = self.bits.event_cnt_3_ovf; return value
+    def set_cycle_cnt_ovf(self, value): self.bits.cycle_cnt_ovf = value
+    def get_cycle_cnt_ovf(self): value = self.bits.cycle_cnt_ovf; return value
+
+
+class pmintset_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("event_cnt_0_int", c_uint32, 1),
+            ("event_cnt_1_int", c_uint32, 1),
+            ("event_cnt_2_int", c_uint32, 1),
+            ("event_cnt_3_int", c_uint32, 1),
+            ("reserved0", c_uint32, 27),
+            ("cycle_cnt_int", c_uint32, 1),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_event_cnt_0_int(self, value): self.bits.event_cnt_0_int = value
+    def get_event_cnt_0_int(self): value = self.bits.event_cnt_0_int; return value
+    def set_event_cnt_1_int(self, value): self.bits.event_cnt_1_int = value
+    def get_event_cnt_1_int(self): value = self.bits.event_cnt_1_int; return value
+    def set_event_cnt_2_int(self, value): self.bits.event_cnt_2_int = value
+    def get_event_cnt_2_int(self): value = self.bits.event_cnt_2_int; return value
+    def set_event_cnt_3_int(self, value): self.bits.event_cnt_3_int = value
+    def get_event_cnt_3_int(self): value = self.bits.event_cnt_3_int; return value
+    def set_cycle_cnt_int(self, value): self.bits.cycle_cnt_int = value
+    def get_cycle_cnt_int(self): value = self.bits.cycle_cnt_int; return value
+
+
+class pmintclr_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("event_cnt_0_int", c_uint32, 1),
+            ("event_cnt_1_int", c_uint32, 1),
+            ("event_cnt_2_int", c_uint32, 1),
+            ("event_cnt_3_int", c_uint32, 1),
+            ("reserved0", c_uint32, 27),
+            ("cycle_cnt_int", c_uint32, 1),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_event_cnt_0_int(self, value): self.bits.event_cnt_0_int = value
+    def get_event_cnt_0_int(self): value = self.bits.event_cnt_0_int; return value
+    def set_event_cnt_1_int(self, value): self.bits.event_cnt_1_int = value
+    def get_event_cnt_1_int(self): value = self.bits.event_cnt_1_int; return value
+    def set_event_cnt_2_int(self, value): self.bits.event_cnt_2_int = value
+    def get_event_cnt_2_int(self): value = self.bits.event_cnt_2_int; return value
+    def set_event_cnt_3_int(self, value): self.bits.event_cnt_3_int = value
+    def get_event_cnt_3_int(self): value = self.bits.event_cnt_3_int; return value
+    def set_cycle_cnt_int(self, value): self.bits.cycle_cnt_int = value
+    def get_cycle_cnt_int(self): value = self.bits.cycle_cnt_int; return value
+
+
+class pmccntr_lo_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cycle_cnt_lo", c_uint32, 32),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cycle_cnt_lo(self, value): self.bits.cycle_cnt_lo = value
+    def get_cycle_cnt_lo(self): value = self.bits.cycle_cnt_lo; return value
+
+
+class pmccntr_hi_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cycle_cnt_hi", c_uint32, 16),
+            ("reserved0", c_uint32, 16),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cycle_cnt_hi(self, value): self.bits.cycle_cnt_hi = value
+    def get_cycle_cnt_hi(self): value = self.bits.cycle_cnt_hi; return value
+
+
+class pmccntr_cfg_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("cycle_cnt_cfg_start", c_uint32, 10),
+            ("reserved0", c_uint32, 6),
+            ("cycle_cnt_cfg_stop", c_uint32, 10),
+            ("reserved1", c_uint32, 6),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_cycle_cnt_cfg_start(self, value): self.bits.cycle_cnt_cfg_start = value
+    def get_cycle_cnt_cfg_start(self): value = self.bits.cycle_cnt_cfg_start; return value
+    def set_cycle_cnt_cfg_stop(self, value): self.bits.cycle_cnt_cfg_stop = value
+    def get_cycle_cnt_cfg_stop(self): value = self.bits.cycle_cnt_cfg_stop; return value
+
+
+class pmcaxi_chan_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("axi_chan", c_uint32, 4),
+            ("reserved0", c_uint32, 3),
+            ("rw", c_uint32, 1),
+            ("axi_cnt", c_uint32, 2),
+            ("reserved1", c_uint32, 22),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_axi_chan(self, value): self.bits.axi_chan = value
+    def get_axi_chan(self): value = self.bits.axi_chan; return value
+    def set_rw(self, value): self.bits.rw = value
+    def get_rw(self): value = self.bits.rw; return value
+    def set_axi_cnt(self, value): self.bits.axi_cnt = value
+    def get_axi_cnt(self): value = self.bits.axi_cnt; return value
+
+
+class pmevtyper0_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("ev_type", c_uint32, 10),
+            ("reserved0", c_uint32, 22),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_ev_type(self, value): self.bits.ev_type = value
+    def get_ev_type(self): value = self.bits.ev_type; return value
+
+
+class pmevtyper1_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("ev_type", c_uint32, 10),
+            ("reserved0", c_uint32, 22),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_ev_type(self, value): self.bits.ev_type = value
+    def get_ev_type(self): value = self.bits.ev_type; return value
+
+
+class pmevtyper2_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("ev_type", c_uint32, 10),
+            ("reserved0", c_uint32, 22),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_ev_type(self, value): self.bits.ev_type = value
+    def get_ev_type(self): value = self.bits.ev_type; return value
+
+
+class pmevtyper3_r(Union):
+    class _bitfield(Structure):
+        _fields_ = [
+            ("ev_type", c_uint32, 10),
+            ("reserved0", c_uint32, 22),
+        ]
+    _fields_ = [("bits", _bitfield),
+                ("word", c_uint32)]
+    def set_ev_type(self, value): self.bits.ev_type = value
+    def get_ev_type(self): value = self.bits.ev_type; return value
+
+class command_no_payload_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class command_with_payload_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("param", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_op_stop_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("mask", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_STOP and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_mask(self): return mask
+    def set_mask(self, value): mask = value
+
+class npu_op_irq_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("mask", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_IRQ and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_mask(self): return mask
+    def set_mask(self, value): mask = value
+
+class npu_op_conv_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("reserved0", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_CONV and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+
+class npu_op_depthwise_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("reserved0", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_DEPTHWISE and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+
+class npu_op_pool_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("mode", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_POOL and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_mode(self): return mode
+    def set_mode(self, value): mode = value
+
+class npu_op_elementwise_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("mode", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_ELEMENTWISE and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_mode(self): return mode
+    def set_mode(self, value): mode = value
+
+class npu_op_dma_start_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("channel_mode", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_DMA_START and must_be_zero0==0;
+    def get_channel_mode(self): return channel_mode
+    def set_channel_mode(self, value): channel_mode = value
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+
+class npu_op_dma_wait_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("reserved0", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_DMA_WAIT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+
+class npu_op_kernel_wait_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_KERNEL_WAIT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_op_pmu_mask_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_OP_PMU_MASK and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_pad_top_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_PAD_TOP and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_pad_left_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_PAD_LEFT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_pad_right_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_PAD_RIGHT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_pad_bottom_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_PAD_BOTTOM and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_depth_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_DEPTH_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_precision_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 4),
+        ("reserved0", c_uint32, 2),
+        ("format", c_uint32, 2),
+        ("scale_mode", c_uint32, 2),
+        ("reserved1", c_uint32, 4),
+        ("round_mode", c_uint32, 2),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_PRECISION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_format(self): return format
+    def set_format(self, value): format = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+    def get_round_mode(self): return round_mode
+    def set_round_mode(self, value): round_mode = value
+    def get_scale_mode(self): return scale_mode
+    def set_scale_mode(self, value): scale_mode = value
+
+class npu_set_ifm_upscale_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("mode", c_uint32, 2),
+        ("reserved0", c_uint32, 14),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_UPSCALE and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_mode(self): return mode
+    def set_mode(self, value): mode = value
+
+class npu_set_ifm_zero_point_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_ZERO_POINT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_width0_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_WIDTH0_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_height0_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_HEIGHT0_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_height1_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_HEIGHT1_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_ib_end_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_IB_END and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_region_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM_REGION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_width_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_WIDTH_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_height_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_HEIGHT_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_depth_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_DEPTH_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_precision_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("precision", c_uint32, 3),
+        ("reserved0", c_uint32, 3),
+        ("format", c_uint32, 2),
+        ("scaling", c_uint32, 1),
+        ("reserved1", c_uint32, 5),
+        ("rounding", c_uint32, 2),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_PRECISION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_format(self): return format
+    def set_format(self, value): format = value
+    def get_precision(self): return precision
+    def set_precision(self, value): precision = value
+    def get_rounding(self): return rounding
+    def set_rounding(self, value): rounding = value
+    def get_scaling(self): return scaling
+    def set_scaling(self, value): scaling = value
+
+class npu_set_ofm_blk_width_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_BLK_WIDTH_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_blk_height_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_BLK_HEIGHT_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_blk_depth_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_BLK_DEPTH_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_zero_point_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_ZERO_POINT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_width0_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_WIDTH0_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_height0_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_HEIGHT0_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_height1_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_HEIGHT1_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ofm_region_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_OFM_REGION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_kernel_width_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_KERNEL_WIDTH_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_kernel_height_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_KERNEL_HEIGHT_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_kernel_stride_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_KERNEL_STRIDE and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_parallel_mode_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_PARALLEL_MODE and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_acc_format_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_ACC_FORMAT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_activation_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("type", c_uint32, 12),
+        ("act_clip_range", c_uint32, 4),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_ACTIVATION and must_be_zero0==0;
+    def get_act_clip_range(self): return act_clip_range
+    def set_act_clip_range(self, value): act_clip_range = value
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_type(self): return type
+    def set_type(self, value): type = value
+
+class npu_set_activation_min_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_ACTIVATION_MIN and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_activation_max_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_ACTIVATION_MAX and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_weight_region_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_WEIGHT_REGION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_scale_region_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_SCALE_REGION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ab_start_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_AB_START and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_blockdep_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_BLOCKDEP and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_dma0_src_region_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("region", c_uint32, 8),
+        ("internal", c_uint32, 1),
+        ("stride_mode", c_uint32, 2),
+        ("reserved0", c_uint32, 5),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_DMA0_SRC_REGION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_internal(self): return internal
+    def set_internal(self, value): internal = value
+    def get_region(self): return region
+    def set_region(self, value): region = value
+    def get_stride_mode(self): return stride_mode
+    def set_stride_mode(self, value): stride_mode = value
+
+class npu_set_dma0_dst_region_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("region", c_uint32, 8),
+        ("internal", c_uint32, 1),
+        ("stride_mode", c_uint32, 2),
+        ("reserved0", c_uint32, 5),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_DMA0_DST_REGION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_internal(self): return internal
+    def set_internal(self, value): internal = value
+    def get_region(self): return region
+    def set_region(self, value): region = value
+    def get_stride_mode(self): return stride_mode
+    def set_stride_mode(self, value): stride_mode = value
+
+class npu_set_dma0_size0_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_DMA0_SIZE0 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_dma0_size1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_DMA0_SIZE1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_broadcast_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("broadcast_height", c_uint32, 1),
+        ("broadcast_width", c_uint32, 1),
+        ("broadcast_depth", c_uint32, 1),
+        ("reserved0", c_uint32, 3),
+        ("operand_order", c_uint32, 1),
+        ("broadcast_scalar", c_uint32, 1),
+        ("reserved1", c_uint32, 8),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_BROADCAST and must_be_zero0==0;
+    def get_broadcast_depth(self): return broadcast_depth
+    def set_broadcast_depth(self, value): broadcast_depth = value
+    def get_broadcast_height(self): return broadcast_height
+    def set_broadcast_height(self, value): broadcast_height = value
+    def get_broadcast_scalar(self): return broadcast_scalar
+    def set_broadcast_scalar(self, value): broadcast_scalar = value
+    def get_broadcast_width(self): return broadcast_width
+    def set_broadcast_width(self, value): broadcast_width = value
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_operand_order(self): return operand_order
+    def set_operand_order(self, value): operand_order = value
+
+class npu_set_ifm2_scalar_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_SCALAR and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_precision_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 4),
+        ("reserved0", c_uint32, 2),
+        ("format", c_uint32, 2),
+        ("reserved1", c_uint32, 8),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_PRECISION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_format(self): return format
+    def set_format(self, value): format = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_zero_point_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_ZERO_POINT and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_width0_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_WIDTH0_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_height0_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_HEIGHT0_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_height1_m1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_HEIGHT1_M1 and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_ib_start_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_IB_START and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm2_region_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero0", c_uint32, 6),
+        ("param", c_uint32, 16),
+    ]
+    def valid(self): return cmd_code==cmd0.NPU_SET_IFM2_REGION and must_be_zero0==0;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+
+class npu_set_ifm_base0_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM_BASE0 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm_base1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM_BASE1 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm_base2_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM_BASE2 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm_base3_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM_BASE3 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm_stride_x_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM_STRIDE_X and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm_stride_y_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM_STRIDE_Y and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm_stride_c_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM_STRIDE_C and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_base0_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_BASE0 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_base1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_BASE1 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_base2_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_BASE2 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_base3_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_BASE3 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_stride_x_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_STRIDE_X and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_stride_y_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_STRIDE_Y and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_stride_c_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_STRIDE_C and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_weight_base_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_WEIGHT_BASE and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_weight_length_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_WEIGHT_LENGTH and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_scale_base_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_SCALE_BASE and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_scale_length_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_SCALE_LENGTH and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ofm_scale_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("shift", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OFM_SCALE and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+    def get_shift(self): return shift
+    def set_shift(self, value): shift = value
+
+class npu_set_opa_scale_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("shift", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OPA_SCALE and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+    def get_shift(self): return shift
+    def set_shift(self, value): shift = value
+
+class npu_set_opb_scale_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_OPB_SCALE and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_dma0_src_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_DMA0_SRC and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_dma0_dst_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_DMA0_DST and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_dma0_len_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_DMA0_LEN and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_dma0_skip0_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("param", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_DMA0_SKIP0 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_dma0_skip1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("param", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_DMA0_SKIP1 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm2_base0_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM2_BASE0 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm2_base1_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM2_BASE1 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm2_base2_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM2_BASE2 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm2_base3_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM2_BASE3 and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm2_stride_x_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM2_STRIDE_X and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm2_stride_y_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM2_STRIDE_Y and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_ifm2_stride_c_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_IFM2_STRIDE_C and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_weight1_base_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("param", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_WEIGHT1_BASE and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_weight1_length_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_WEIGHT1_LENGTH and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_scale1_base_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("param", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_SCALE1_BASE and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_param(self): return param
+    def set_param(self, value): param = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
+
+class npu_set_scale1_length_t(Structure):
+    _fields_ = [
+        ("cmd_code", c_uint32, 10),
+        ("must_be_zero", c_uint32, 4),
+        ("payload_size", c_uint32, 2),
+        ("reserved0", c_uint32, 16),
+        ("data", c_uint32, 32),
+    ]
+    def valid(self): return cmd_code==cmd1.NPU_SET_SCALE1_LENGTH and must_be_zero==0 and payload_size>=1 and payload_size<=2;
+    def get_cmd_code(self): return cmd_code
+    def set_cmd_code(self, value): cmd_code = value
+    def get_data(self): return data
+    def set_data(self, value): data = value
+    def get_payload_size(self): return payload_size
+    def set_payload_size(self, value): payload_size = value
