1 /*
2  * SPDX-FileCopyrightText: Copyright 2020-2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the License); you may
6  * not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
13  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 // clang-format off
19 
20 #ifndef ETHOSU85_INTERFACE_H
21 #define ETHOSU85_INTERFACE_H
22 
23 #ifdef __KERNEL__
24 #include <linux/types.h>
25 #else
26 #include <stdint.h>
27 #endif
28 
29 #if !defined(__cplusplus) || __cplusplus < 201402L
30 #define CONSTEXPR
31 #else
32 #define CONSTEXPR constexpr
33 #endif
34 
35 #ifndef __cplusplus
36 #define STRUCT struct
37 #else
38 #define STRUCT
39 #endif
40 
41 #if defined(__cplusplus) && defined(NPU_DISASSEMBLE)
42 #include <iomanip>
43 #include <vector>
44 #include <sstream>
45 #endif
46 
47 #if defined(__cplusplus) && !defined(NPU_NAMESPACE)
48 #define NPU_NAMESPACE npu
49 #endif
50 
51 #ifdef __cplusplus
52 #include <cassert>
53 #include <cstring>
54 #include <limits>
55 #endif
56 
57 #ifdef __cplusplus
58 namespace NPU_NAMESPACE
59 {
60 #endif
61 #define NNX_ARCH_VERSION_MAJOR 2
62 #define NNX_ARCH_VERSION_MINOR 0
63 #define NNX_ARCH_VERSION_PATCH 0
64 
65 // Register offsets
66 //
67 // Register subpage BASE
68 //
69 #define NPU_REG_ID 0x0000
70 #define NPU_REG_STATUS 0x0004
71 #define NPU_REG_CMD 0x0008
72 #define NPU_REG_RESET 0x000C
73 #define NPU_REG_QBASE 0x0010
74 #define NPU_REG_QBASE_HI 0x0014
75 #define NPU_REG_QREAD 0x0018
76 #define NPU_REG_QCONFIG 0x001C
77 #define NPU_REG_QSIZE 0x0020
78 #define NPU_REG_PROT 0x0024
79 #define NPU_REG_CONFIG 0x0028
80 #define NPU_REG_COND_STATUS 0x0030
81 #define NPU_REG_POWER_CTRL 0x0038
82 #define NPU_REG_REGIONCFG 0x003C
83 #define NPU_REG_MEM_ATTR_BASE 0x0040
84 #define NPU_REG_MEM_ATTR_ARRLEN 0x0004
85 #define NPU_REG_AXI_SRAM 0x0050
86 #define NPU_REG_AXI_EXT 0x0054
87 #define NPU_REG_CFG_SRAM_CAP 0x0060
88 #define NPU_REG_CFG_EXT_CAP 0x0064
89 #define NPU_REG_CFG_SRAM_HASH0 0x0068
90 #define NPU_REG_CFG_SRAM_HASH0_HI 0x006C
91 #define NPU_REG_CFG_SRAM_HASH1 0x0070
92 #define NPU_REG_CFG_SRAM_HASH1_HI 0x0074
93 #define NPU_REG_CFG_EXT_HASH0 0x0078
94 #define NPU_REG_CFG_EXT_HASH0_HI 0x007C
95 #define BASE_REGISTERS_SIZE 0x0080
96 
97 //
98 // Register subpage BASE_POINTERS
99 //
100 #define NPU_REG_BASEP_BASE 0x0080
101 #define NPU_REG_BASEP_ARRLEN 0x0008
102 #define BASE_POINTERS_REGISTERS_SIZE 0x0100
103 
104 //
105 // Register subpage DEBUG
106 //
107 #define NPU_REG_CLKFORCE 0x0140
108 #define NPU_REG_DEBUG_ADDRESS 0x0144
109 #define NPU_REG_DEBUG_MISC 0x0148
110 #define NPU_REG_FEATURE_DISABLE 0x0154
111 #define DEBUG_REGISTERS_SIZE 0x0180
112 
113 //
114 // Register subpage TSU_DEBUG
115 //
116 #define NPU_REG_DMA_IFM_SRC 0x0240
117 #define NPU_REG_DMA_IFM_SRC_HI 0x0244
118 #define NPU_REG_DMA_OFM_DST 0x0250
119 #define NPU_REG_DMA_OFM_DST_HI 0x0254
120 #define NPU_REG_DMA_WEIGHT_SRC 0x0258
121 #define NPU_REG_DMA_WEIGHT_SRC_HI 0x025C
122 #define NPU_REG_DMA_CMD_SRC 0x0260
123 #define NPU_REG_DMA_CMD_SRC_HI 0x0264
124 #define NPU_REG_DMA_CMD_SIZE 0x0268
125 #define NPU_REG_DMA_M2M_SRC 0x026C
126 #define NPU_REG_DMA_M2M_SRC_HI 0x0270
127 #define NPU_REG_DMA_M2M_DST 0x0274
128 #define NPU_REG_DMA_M2M_DST_HI 0x0278
129 #define NPU_REG_CURRENT_QREAD 0x027C
130 #define NPU_REG_DMA_SCALE_SRC 0x0280
131 #define NPU_REG_DMA_SCALE_SRC_HI 0x0284
132 #define NPU_REG_DMA_WEIGHT1_SRC 0x0288
133 #define NPU_REG_DMA_WEIGHT1_SRC_HI 0x028C
134 #define NPU_REG_DMA_WEIGHT2_SRC 0x0290
135 #define NPU_REG_DMA_WEIGHT2_SRC_HI 0x0294
136 #define NPU_REG_DMA_WEIGHT3_SRC 0x0298
137 #define NPU_REG_DMA_WEIGHT3_SRC_HI 0x029C
138 #define NPU_REG_CURRENT_OP 0x02B8
139 #define NPU_REG_CURRENT_CMD 0x02BC
140 #define TSU_DEBUG_REGISTERS_SIZE 0x0300
141 
142 //
143 // Register subpage INTERNAL_MEMORY
144 //
145 #define NPU_REG_INTERNAL_MEMORY_BASE 0x0400
146 #define NPU_REG_INTERNAL_MEMORY_ARRLEN 0x0100
147 #define INTERNAL_MEMORY_REGISTERS_SIZE 0x0800
148 
149 //
150 // Register subpage TSU_IFM
151 //
152 #define NPU_REG_IFM_PAD_TOP 0x0800
153 #define NPU_REG_IFM_PAD_LEFT 0x0804
154 #define NPU_REG_IFM_PAD_RIGHT 0x0808
155 #define NPU_REG_IFM_PAD_BOTTOM 0x080C
156 #define NPU_REG_IFM_DEPTH_M1 0x0810
157 #define NPU_REG_IFM_PRECISION 0x0814
158 #define NPU_REG_IFM_UPSCALE 0x081C
159 #define NPU_REG_IFM_BROADCAST 0x0820
160 #define NPU_REG_IFM_ZERO_POINT 0x0824
161 #define NPU_REG_IFM_WIDTH0_M1 0x0828
162 #define NPU_REG_IFM_HEIGHT0_M1 0x082C
163 #define NPU_REG_IFM_HEIGHT1_M1 0x0830
164 #define NPU_REG_IFM_REGION 0x083C
165 #define TSU_IFM_REGISTERS_SIZE 0x0840
166 
167 //
168 // Register subpage TSU_OFM
169 //
170 #define NPU_REG_OFM_WIDTH_M1 0x0844
171 #define NPU_REG_OFM_HEIGHT_M1 0x0848
172 #define NPU_REG_OFM_DEPTH_M1 0x084C
173 #define NPU_REG_OFM_PRECISION 0x0850
174 #define NPU_REG_OFM_BLK_WIDTH_M1 0x0854
175 #define NPU_REG_OFM_BLK_HEIGHT_M1 0x0858
176 #define NPU_REG_OFM_BLK_DEPTH_M1 0x085C
177 #define NPU_REG_OFM_ZERO_POINT 0x0860
178 #define NPU_REG_OFM_WIDTH0_M1 0x0868
179 #define NPU_REG_OFM_HEIGHT0_M1 0x086C
180 #define NPU_REG_OFM_HEIGHT1_M1 0x0870
181 #define NPU_REG_OFM_REGION 0x087C
182 #define TSU_OFM_REGISTERS_SIZE 0x0880
183 
184 //
185 // Register subpage TSU_KERNEL
186 //
187 #define NPU_REG_KERNEL_WIDTH_M1 0x0880
188 #define NPU_REG_KERNEL_HEIGHT_M1 0x0884
189 #define NPU_REG_KERNEL_STRIDE 0x0888
190 #define NPU_REG_ACC_FORMAT 0x0890
191 #define NPU_REG_ACTIVATION 0x0894
192 #define NPU_REG_ACTIVATION_MIN 0x0898
193 #define NPU_REG_ACTIVATION_MAX 0x089C
194 #define NPU_REG_WEIGHT_REGION 0x08A0
195 #define NPU_REG_SCALE_REGION 0x08A4
196 #define NPU_REG_RESIZE_X_SCALE_N_M1 0x08A8
197 #define NPU_REG_RESIZE_Y_SCALE_N_M1 0x08AC
198 #define NPU_REG_RESIZE_X_OFFSET 0x08B0
199 #define NPU_REG_RESIZE_Y_OFFSET 0x08B4
200 #define NPU_REG_WEIGHT_FORMAT 0x08B8
201 #define NPU_REG_BLOCKDEP 0x08BC
202 #define TSU_KERNEL_REGISTERS_SIZE 0x08C0
203 
204 //
205 // Register subpage TSU_DMA
206 //
207 #define NPU_REG_DMA0_SRC_REGION 0x08C0
208 #define NPU_REG_DMA0_DST_REGION 0x08C4
209 #define NPU_REG_DMA0_SIZE0 0x08C8
210 #define NPU_REG_DMA0_SIZE1 0x08CC
211 #define NPU_REG_DMA0_IDX_REGION 0x08D0
212 #define TSU_DMA_REGISTERS_SIZE 0x0900
213 
214 //
215 // Register subpage TSU_IFM2
216 //
217 #define NPU_REG_IFM2_BROADCAST 0x0900
218 #define NPU_REG_IFM2_PRECISION 0x0914
219 #define NPU_REG_IFM2_ZERO_POINT 0x0924
220 #define NPU_REG_IFM2_WIDTH0_M1 0x0928
221 #define NPU_REG_IFM2_HEIGHT0_M1 0x092C
222 #define NPU_REG_IFM2_HEIGHT1_M1 0x0930
223 #define NPU_REG_IFM2_REGION 0x093C
224 #define TSU_IFM2_REGISTERS_SIZE 0x0940
225 
226 //
227 // Register subpage TSU_IFM_BASE
228 //
229 #define NPU_REG_IFM_BASE0 0x0A00
230 #define NPU_REG_IFM_BASE0_HI 0x0A04
231 #define NPU_REG_IFM_BASE1 0x0A08
232 #define NPU_REG_IFM_BASE1_HI 0x0A0C
233 #define NPU_REG_IFM_BASE2 0x0A10
234 #define NPU_REG_IFM_BASE2_HI 0x0A14
235 #define NPU_REG_IFM_BASE3 0x0A18
236 #define NPU_REG_IFM_BASE3_HI 0x0A1C
237 #define NPU_REG_IFM_STRIDE_X 0x0A20
238 #define NPU_REG_IFM_STRIDE_X_HI 0x0A24
239 #define NPU_REG_IFM_STRIDE_Y 0x0A28
240 #define NPU_REG_IFM_STRIDE_Y_HI 0x0A2C
241 #define NPU_REG_IFM_STRIDE_C 0x0A30
242 #define NPU_REG_IFM_STRIDE_C_HI 0x0A34
243 #define TSU_IFM_BASE_REGISTERS_SIZE 0x0A40
244 
245 //
246 // Register subpage TSU_OFM_BASE
247 //
248 #define NPU_REG_OFM_BASE0 0x0A40
249 #define NPU_REG_OFM_BASE0_HI 0x0A44
250 #define NPU_REG_OFM_BASE1 0x0A48
251 #define NPU_REG_OFM_BASE1_HI 0x0A4C
252 #define NPU_REG_OFM_BASE2 0x0A50
253 #define NPU_REG_OFM_BASE2_HI 0x0A54
254 #define NPU_REG_OFM_BASE3 0x0A58
255 #define NPU_REG_OFM_BASE3_HI 0x0A5C
256 #define NPU_REG_OFM_STRIDE_X 0x0A60
257 #define NPU_REG_OFM_STRIDE_X_HI 0x0A64
258 #define NPU_REG_OFM_STRIDE_Y 0x0A68
259 #define NPU_REG_OFM_STRIDE_Y_HI 0x0A6C
260 #define NPU_REG_OFM_STRIDE_C 0x0A70
261 #define NPU_REG_OFM_STRIDE_C_HI 0x0A74
262 #define TSU_OFM_BASE_REGISTERS_SIZE 0x0A80
263 
264 //
265 // Register subpage TSU_WS_BASE
266 //
267 #define NPU_REG_WEIGHT_BASE 0x0A80
268 #define NPU_REG_WEIGHT_BASE_HI 0x0A84
269 #define NPU_REG_WEIGHT_LENGTH 0x0A88
270 #define NPU_REG_WEIGHT_LENGTH_HI 0x0A8C
271 #define NPU_REG_SCALE_BASE 0x0A90
272 #define NPU_REG_SCALE_BASE_HI 0x0A94
273 #define NPU_REG_SCALE_LENGTH 0x0A98
274 #define NPU_REG_SCALE_LENGTH_HI 0x0A9C
275 #define NPU_REG_OFM_SCALE 0x0AA0
276 #define NPU_REG_OFM_SCALE_HI 0x0AA4
277 #define NPU_REG_IFM_SCALE 0x0AA8
278 #define NPU_REG_IFM_SCALE_HI 0x0AAC
279 #define NPU_REG_IFM2_SCALE 0x0AB0
280 #define NPU_REG_IFM2_SCALE_HI 0x0AB4
281 #define NPU_REG_OP_SCALAR 0x0AB8
282 #define NPU_REG_OP_SCALAR_HI 0x0ABC
283 #define TSU_WS_BASE_REGISTERS_SIZE 0x0AC0
284 
285 //
286 // Register subpage TSU_DMA_BASE
287 //
288 #define NPU_REG_DMA0_SRC 0x0AC0
289 #define NPU_REG_DMA0_SRC_HI 0x0AC4
290 #define NPU_REG_DMA0_DST 0x0AC8
291 #define NPU_REG_DMA0_DST_HI 0x0ACC
292 #define NPU_REG_DMA0_LEN 0x0AD0
293 #define NPU_REG_DMA0_LEN_HI 0x0AD4
294 #define NPU_REG_DMA0_SRC_STRIDE0 0x0AD8
295 #define NPU_REG_DMA0_SRC_STRIDE0_HI 0x0ADC
296 #define NPU_REG_DMA0_SRC_STRIDE1 0x0AE0
297 #define NPU_REG_DMA0_SRC_STRIDE1_HI 0x0AE4
298 #define NPU_REG_DMA0_DST_STRIDE0 0x0AE8
299 #define NPU_REG_DMA0_DST_STRIDE0_HI 0x0AEC
300 #define NPU_REG_DMA0_DST_STRIDE1 0x0AF0
301 #define NPU_REG_DMA0_DST_STRIDE1_HI 0x0AF4
302 #define NPU_REG_DMA0_IDX 0x0AF8
303 #define NPU_REG_DMA0_IDX_HI 0x0AFC
304 #define TSU_DMA_BASE_REGISTERS_SIZE 0x0B00
305 
306 //
307 // Register subpage TSU_IFM2_BASE
308 //
309 #define NPU_REG_IFM2_BASE0 0x0B00
310 #define NPU_REG_IFM2_BASE0_HI 0x0B04
311 #define NPU_REG_IFM2_BASE1 0x0B08
312 #define NPU_REG_IFM2_BASE1_HI 0x0B0C
313 #define NPU_REG_IFM2_BASE2 0x0B10
314 #define NPU_REG_IFM2_BASE2_HI 0x0B14
315 #define NPU_REG_IFM2_BASE3 0x0B18
316 #define NPU_REG_IFM2_BASE3_HI 0x0B1C
317 #define NPU_REG_IFM2_STRIDE_X 0x0B20
318 #define NPU_REG_IFM2_STRIDE_X_HI 0x0B24
319 #define NPU_REG_IFM2_STRIDE_Y 0x0B28
320 #define NPU_REG_IFM2_STRIDE_Y_HI 0x0B2C
321 #define NPU_REG_IFM2_STRIDE_C 0x0B30
322 #define NPU_REG_IFM2_STRIDE_C_HI 0x0B34
323 #define TSU_IFM2_BASE_REGISTERS_SIZE 0x0B40
324 
325 //
326 // Register subpage TSU_WS1_BASE
327 //
328 #define NPU_REG_WEIGHT1_BASE 0x0B40
329 #define NPU_REG_WEIGHT1_BASE_HI 0x0B44
330 #define NPU_REG_WEIGHT1_LENGTH 0x0B48
331 #define NPU_REG_WEIGHT1_LENGTH_HI 0x0B4C
332 #define NPU_REG_WEIGHT2_BASE 0x0B50
333 #define NPU_REG_WEIGHT2_BASE_HI 0x0B54
334 #define NPU_REG_WEIGHT2_LENGTH 0x0B58
335 #define NPU_REG_WEIGHT2_LENGTH_HI 0x0B5C
336 #define NPU_REG_WEIGHT3_BASE 0x0B60
337 #define NPU_REG_WEIGHT3_BASE_HI 0x0B64
338 #define NPU_REG_WEIGHT3_LENGTH 0x0B68
339 #define NPU_REG_WEIGHT3_LENGTH_HI 0x0B6C
340 #define NPU_REG_RESIZE_X_STEP 0x0B70
341 #define NPU_REG_RESIZE_X_STEP_HI 0x0B74
342 #define NPU_REG_RESIZE_Y_STEP 0x0B78
343 #define NPU_REG_RESIZE_Y_STEP_HI 0x0B7C
344 #define TSU_WS1_BASE_REGISTERS_SIZE 0x0B80
345 
346 //
347 // Register subpage TSU_USER_BASE
348 //
349 #define TSU_USER_BASE_REGISTERS_SIZE 0x0BC0
350 
351 //
352 // Register subpage TSU_DMA_EBASE
353 //
354 #define NPU_REG_DMA0_IDX_MAX 0x0BC0
355 #define NPU_REG_DMA0_IDX_MAX_HI 0x0BC4
356 #define NPU_REG_DMA0_IDX_SKIP1 0x0BC8
357 #define NPU_REG_DMA0_IDX_SKIP1_HI 0x0BCC
358 #define TSU_DMA_EBASE_REGISTERS_SIZE 0x0C00
359 
360 //
361 // Register subpage ID
362 //
363 #define NPU_REG_REVISION 0x0FC0
364 #define NPU_REG_PID4 0x0FD0
365 #define NPU_REG_PID5 0x0FD4
366 #define NPU_REG_PID6 0x0FD8
367 #define NPU_REG_PID7 0x0FDC
368 #define NPU_REG_PID0 0x0FE0
369 #define NPU_REG_PID1 0x0FE4
370 #define NPU_REG_PID2 0x0FE8
371 #define NPU_REG_PID3 0x0FEC
372 #define NPU_REG_CID0 0x0FF0
373 #define NPU_REG_CID1 0x0FF4
374 #define NPU_REG_CID2 0x0FF8
375 #define NPU_REG_CID3 0x0FFC
376 #define ID_REGISTERS_SIZE 0x1000
377 
378 //
379 // Register subpage DEBUG_STATUS
380 //
381 #define NPU_REG_WD_STATUS 0x1100
382 #define NPU_REG_MAC_STATUS 0x1104
383 #define NPU_REG_AO_STATUS 0x1108
384 #define NPU_REG_DMA_STATUS0 0x1110
385 #define NPU_REG_DMA_STATUS1 0x1114
386 #define DEBUG_STATUS_REGISTERS_SIZE 0x1180
387 
388 //
389 // Register subpage PMU
390 //
391 #define NPU_REG_PMCR 0x1180
392 #define NPU_REG_PMCNTENSET 0x1184
393 #define NPU_REG_PMCNTENCLR 0x1188
394 #define NPU_REG_PMOVSSET 0x118C
395 #define NPU_REG_PMOVSCLR 0x1190
396 #define NPU_REG_PMINTSET 0x1194
397 #define NPU_REG_PMINTCLR 0x1198
398 #define NPU_REG_PMCCNTR 0x11A0
399 #define NPU_REG_PMCCNTR_HI 0x11A4
400 #define NPU_REG_PMCCNTR_CFG 0x11A8
401 #define NPU_REG_PMCAXI_CHAN 0x11AC
402 #define NPU_REG_PMCLUT 0x11B0
403 #define PMU_REGISTERS_SIZE 0x1200
404 
405 //
406 // Register subpage PMU_COUNTERS
407 //
408 #define NPU_REG_PMEVCNTR_BASE 0x1300
409 #define NPU_REG_PMEVCNTR_ARRLEN 0x0008
410 #define NPU_REG_PMEVTYPER_BASE 0x1380
411 #define NPU_REG_PMEVTYPER_ARRLEN 0x0008
412 #define PMU_COUNTERS_REGISTERS_SIZE 0x1400
413 
414 #ifdef __cplusplus
415 // Enum types
416 enum class acc_format : uint8_t
417 {
418     I32 = 0,
419     I48 = 1,
420 };
421 
422 enum class acc_input : uint8_t
423 {
424     RESET = 0,
425     KEEP = 1,
426     IFM2 = 2,
427 };
428 
429 enum class acc_output : uint8_t
430 {
431     ENABLE = 0,
432     DISABLE = 1,
433 };
434 
435 enum class activation_clip_range : uint8_t
436 {
437     B16 = 0,
438     NONE = 1,
439 };
440 
441 enum class activation_format : uint8_t
442 {
443     NHWC = 0,
444     NHCWB16 = 1,
445 };
446 
447 enum class activation_function : uint8_t
448 {
449     LUT_NONE = 0,
450     LUT_U8_U8 = 1,
451     LUT_S8_S8 = 4,
452     LUT_S8_S16 = 5,
453     LUT_S8_S32 = 7,
454     LUT_S16_S16 = 8,
455     LUT_S16_S32 = 9,
456     LUT_TANH = 10,
457     LUT_SIGMOID = 11,
458 };
459 
460 enum class activation_precision : uint8_t
461 {
462     B8 = 0,
463     B16 = 1,
464     B32 = 2,
465     B64 = 3,
466 };
467 
468 enum class activation_reverse : uint8_t
469 {
470     NONE = 0,
471     H = 1,
472     W = 2,
473     C = 3,
474 };
475 
476 enum class activation_storage : uint8_t
477 {
478     TILE2X2 = 0,
479     TILE3X1 = 1,
480     CHAINED = 2,
481     NONE = 3,
482 };
483 
484 enum class activation_transpose : uint8_t
485 {
486     HWC = 0,
487     WHC = 1,
488     HCW = 2,
489     WCH = 3,
490     CHW = 6,
491     CWH = 7,
492 };
493 
494 enum class activation_type : uint8_t
495 {
496     UNSIGNED = 0,
497     SIGNED = 1,
498 };
499 
500 enum class axi_mem_domain : uint8_t
501 {
502     NON_SHARABLE = 0,
503     INNER_SHARABLE = 1,
504     OUTER_SHARABLE = 2,
505     SYSTEM = 3,
506 };
507 
508 enum class axi_mem_encoding : uint8_t
509 {
510     DEVICE_NON_BUFFERABLE = 0,
511     DEVICE_BUFFERABLE = 1,
512     NORMAL_NON_CACHEABLE_NON_BUFFERABLE = 2,
513     NORMAL_NON_CACHEABLE_BUFFERABLE = 3,
514     WRITE_THROUGH_NO_ALLOCATE = 4,
515     WRITE_THROUGH_READ_ALLOCATE = 5,
516     WRITE_THROUGH_WRITE_ALLOCATE = 6,
517     WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 7,
518     WRITE_BACK_NO_ALLOCATE = 8,
519     WRITE_BACK_READ_ALLOCATE = 9,
520     WRITE_BACK_WRITE_ALLOCATE = 10,
521     WRITE_BACK_READ_AND_WRITE_ALLOCATE = 11,
522 };
523 
524 enum class axi_port : uint8_t
525 {
526     SRAM = 0,
527     EXT = 1,
528 };
529 
530 enum class branch_cond : uint8_t
531 {
532     ALWAYS = 0,
533     RF_TRUE = 1,
534 };
535 
536 enum class broadcast_mode : uint8_t
537 {
538     NONE = 0,
539     H = 1,
540     W = 2,
541     HW = 3,
542     C = 4,
543     CH = 5,
544     CW = 6,
545     CWH = 7,
546     SCALAR = 8,
547 };
548 
549 enum class cmd0_opcode : uint16_t
550 {
551     NPU_OP_STOP = 0,
552     NPU_OP_IRQ = 1,
553     NPU_OP_CONV = 2,
554     NPU_OP_DEPTHWISE = 3,
555     NPU_OP_POOL = 5,
556     NPU_OP_ELEMENTWISE = 6,
557     NPU_OP_RESIZE = 7,
558     NPU_OP_DMA_START = 16,
559     NPU_OP_DMA_WAIT = 17,
560     NPU_OP_KERNEL_WAIT = 18,
561     NPU_OP_PMU_MASK = 19,
562     NPU_SET_IFM_PAD_TOP = 256,
563     NPU_SET_IFM_PAD_LEFT = 257,
564     NPU_SET_IFM_PAD_RIGHT = 258,
565     NPU_SET_IFM_PAD_BOTTOM = 259,
566     NPU_SET_IFM_DEPTH_M1 = 260,
567     NPU_SET_IFM_PRECISION = 261,
568     NPU_SET_IFM_UPSCALE = 263,
569     NPU_SET_IFM_BROADCAST = 264,
570     NPU_SET_IFM_ZERO_POINT = 265,
571     NPU_SET_IFM_WIDTH0_M1 = 266,
572     NPU_SET_IFM_HEIGHT0_M1 = 267,
573     NPU_SET_IFM_HEIGHT1_M1 = 268,
574     NPU_SET_IFM_REGION = 271,
575     NPU_SET_OFM_WIDTH_M1 = 273,
576     NPU_SET_OFM_HEIGHT_M1 = 274,
577     NPU_SET_OFM_DEPTH_M1 = 275,
578     NPU_SET_OFM_PRECISION = 276,
579     NPU_SET_OFM_BLK_WIDTH_M1 = 277,
580     NPU_SET_OFM_BLK_HEIGHT_M1 = 278,
581     NPU_SET_OFM_BLK_DEPTH_M1 = 279,
582     NPU_SET_OFM_ZERO_POINT = 280,
583     NPU_SET_OFM_WIDTH0_M1 = 282,
584     NPU_SET_OFM_HEIGHT0_M1 = 283,
585     NPU_SET_OFM_HEIGHT1_M1 = 284,
586     NPU_SET_OFM_REGION = 287,
587     NPU_SET_KERNEL_WIDTH_M1 = 288,
588     NPU_SET_KERNEL_HEIGHT_M1 = 289,
589     NPU_SET_KERNEL_STRIDE = 290,
590     NPU_SET_ACC_FORMAT = 292,
591     NPU_SET_ACTIVATION = 293,
592     NPU_SET_ACTIVATION_MIN = 294,
593     NPU_SET_ACTIVATION_MAX = 295,
594     NPU_SET_WEIGHT_REGION = 296,
595     NPU_SET_SCALE_REGION = 297,
596     NPU_SET_RESIZE_X_SCALE_N_M1 = 298,
597     NPU_SET_RESIZE_Y_SCALE_N_M1 = 299,
598     NPU_SET_RESIZE_X_OFFSET = 300,
599     NPU_SET_RESIZE_Y_OFFSET = 301,
600     NPU_SET_WEIGHT_FORMAT = 302,
601     NPU_SET_BLOCKDEP = 303,
602     NPU_SET_DMA0_SRC_REGION = 304,
603     NPU_SET_DMA0_DST_REGION = 305,
604     NPU_SET_DMA0_SIZE0 = 306,
605     NPU_SET_DMA0_SIZE1 = 307,
606     NPU_SET_DMA0_IDX_REGION = 308,
607     NPU_SET_IFM2_BROADCAST = 384,
608     NPU_SET_IFM2_PRECISION = 389,
609     NPU_SET_IFM2_ZERO_POINT = 393,
610     NPU_SET_IFM2_WIDTH0_M1 = 394,
611     NPU_SET_IFM2_HEIGHT0_M1 = 395,
612     NPU_SET_IFM2_HEIGHT1_M1 = 396,
613     NPU_SET_IFM2_REGION = 399,
614 };
615 
616 enum class cmd1_opcode : uint16_t
617 {
618     NPU_SET_IFM_BASE0 = 0,
619     NPU_SET_IFM_BASE1 = 1,
620     NPU_SET_IFM_BASE2 = 2,
621     NPU_SET_IFM_BASE3 = 3,
622     NPU_SET_IFM_STRIDE_X = 4,
623     NPU_SET_IFM_STRIDE_Y = 5,
624     NPU_SET_IFM_STRIDE_C = 6,
625     NPU_SET_OFM_BASE0 = 16,
626     NPU_SET_OFM_BASE1 = 17,
627     NPU_SET_OFM_BASE2 = 18,
628     NPU_SET_OFM_BASE3 = 19,
629     NPU_SET_OFM_STRIDE_X = 20,
630     NPU_SET_OFM_STRIDE_Y = 21,
631     NPU_SET_OFM_STRIDE_C = 22,
632     NPU_SET_WEIGHT_BASE = 32,
633     NPU_SET_WEIGHT_LENGTH = 33,
634     NPU_SET_SCALE_BASE = 34,
635     NPU_SET_SCALE_LENGTH = 35,
636     NPU_SET_OFM_SCALE = 36,
637     NPU_SET_IFM_SCALE = 37,
638     NPU_SET_IFM2_SCALE = 38,
639     NPU_SET_OP_SCALAR = 39,
640     NPU_SET_DMA0_SRC = 48,
641     NPU_SET_DMA0_DST = 49,
642     NPU_SET_DMA0_LEN = 50,
643     NPU_SET_DMA0_SRC_STRIDE0 = 51,
644     NPU_SET_DMA0_SRC_STRIDE1 = 52,
645     NPU_SET_DMA0_DST_STRIDE0 = 53,
646     NPU_SET_DMA0_DST_STRIDE1 = 54,
647     NPU_SET_DMA0_IDX = 55,
648     NPU_SET_DMA0_IDX_MAX = 56,
649     NPU_SET_DMA0_IDX_SKIP1 = 57,
650     NPU_SET_IFM2_BASE0 = 128,
651     NPU_SET_IFM2_BASE1 = 129,
652     NPU_SET_IFM2_BASE2 = 130,
653     NPU_SET_IFM2_BASE3 = 131,
654     NPU_SET_IFM2_STRIDE_X = 132,
655     NPU_SET_IFM2_STRIDE_Y = 133,
656     NPU_SET_IFM2_STRIDE_C = 134,
657     NPU_SET_WEIGHT1_BASE = 144,
658     NPU_SET_WEIGHT1_LENGTH = 145,
659     NPU_SET_WEIGHT2_BASE = 146,
660     NPU_SET_WEIGHT2_LENGTH = 147,
661     NPU_SET_WEIGHT3_BASE = 148,
662     NPU_SET_WEIGHT3_LENGTH = 149,
663     NPU_SET_RESIZE_X = 150,
664     NPU_SET_RESIZE_Y = 151,
665     NPU_OP_BRANCH = 256,
666 };
667 
668 enum class cmd_ctrl : uint8_t
669 {
670     CMD0_CTRL = 0,
671     CMD1_CTRL = 1,
672 };
673 
674 enum class custom_dma : uint8_t
675 {
676     NOT_IMPLEMENTED = 0,
677     IMPLEMENTED = 1,
678 };
679 
680 enum class dma_fault_src : uint8_t
681 {
682     SRAM = 0,
683     EXT = 1,
684 };
685 
686 enum class dma_idx_mode : uint8_t
687 {
688     DISABLED = 0,
689     ENABLED = 1,
690 };
691 
692 enum class dma_region_mode : uint8_t
693 {
694     EXTERNAL = 0,
695     INTERNAL = 1,
696 };
697 
698 enum class dma_stride_mode : uint8_t
699 {
700     D1 = 0,
701     D2 = 1,
702     D3 = 2,
703 };
704 
705 enum class elementwise_mode : uint8_t
706 {
707     MUL = 0,
708     ADD = 1,
709     SUB = 2,
710     MIN = 3,
711     MAX = 4,
712     LRELU = 5,
713     ABS = 6,
714     CLZ = 7,
715     SHR = 8,
716     SHL = 9,
717     LSR = 10,
718     DIV = 11,
719     CMP_EQ = 16,
720     CMP_NE = 17,
721     CMP_GE = 18,
722     CMP_GT = 19,
723     AND = 33,
724     OR = 34,
725     XOR = 35,
726     NOT = 36,
727     AND_NOT = 42,
728 };
729 
730 enum class ifm_upscale_mode : uint8_t
731 {
732     NONE = 0,
733     NEAREST = 1,
734     ZEROS = 2,
735 };
736 
737 enum class kernel_decomposition : uint8_t
738 {
739     D8X8 = 0,
740     D4X4 = 1,
741 };
742 
743 enum class kernel_dilation : uint8_t
744 {
745     NONE = 0,
746     X2 = 1,
747 };
748 
749 enum class max_beats : uint8_t
750 {
751     B64 = 0,
752     B128 = 1,
753     B256 = 2,
754 };
755 
756 enum class microblock : uint8_t
757 {
758     U1X1 = 0,
759     U1X2 = 1,
760     U1X4 = 2,
761     U2X2 = 3,
762     U2X4 = 4,
763     U4X4 = 5,
764 };
765 
766 enum class ofm_scale_mode : uint8_t
767 {
768     PER_CHANNEL = 0,
769     GLOBAL = 1,
770 };
771 
772 enum class pmu_axi_channel : uint8_t
773 {
774     RD_CMD = 0,
775     RD_IFM = 1,
776     RD_WEIGHTS = 2,
777     RD_SCALE_BIAS = 3,
778     RD_MEM2MEM = 4,
779     RD_IFM_STREAM = 5,
780     RD_MEM2MEM_IDX = 6,
781     WR_OFM = 8,
782     WR_MEM2MEM = 9,
783 };
784 
785 enum class pmu_event : uint16_t
786 {
787     NO_EVENT = 0,
788     CYCLE = 17,
789     NPU_IDLE = 32,
790     CC_STALLED_ON_BLOCKDEP = 33,
791     NPU_ACTIVE = 35,
792     MAC_ACTIVE = 48,
793     MAC_DPU_ACTIVE = 51,
794     MAC_STALLED_BY_W_OR_ACC = 52,
795     MAC_STALLED_BY_W = 53,
796     MAC_STALLED_BY_ACC = 54,
797     MAC_STALLED_BY_IB = 55,
798     AO_ACTIVE = 64,
799     AO_STALLED_BY_BS_OR_OB = 67,
800     AO_STALLED_BY_BS = 68,
801     AO_STALLED_BY_OB = 69,
802     AO_STALLED_BY_AB_OR_CB = 70,
803     AO_STALLED_BY_AB = 71,
804     AO_STALLED_BY_CB = 72,
805     WD_ACTIVE = 80,
806     WD_STALLED = 81,
807     WD_STALLED_BY_WD_BUF = 83,
808     WD_STALLED_BY_WS_FC = 84,
809     WD_STALLED_BY_WS_TC = 85,
810     WD_TRANS_WBLK = 89,
811     WD_TRANS_WS_FC = 90,
812     WD_TRANS_WS_TC = 91,
813     WD_STALLED_BY_WS_SC0 = 96,
814     WD_STALLED_BY_WS_SC1 = 97,
815     WD_STALLED_BY_WS_SC2 = 98,
816     WD_STALLED_BY_WS_SC3 = 99,
817     WD_PARSE_ACTIVE_SC0 = 100,
818     WD_PARSE_ACTIVE_SC1 = 101,
819     WD_PARSE_ACTIVE_SC2 = 102,
820     WD_PARSE_ACTIVE_SC3 = 103,
821     WD_PARSE_STALL_SC0 = 104,
822     WD_PARSE_STALL_SC1 = 105,
823     WD_PARSE_STALL_SC2 = 106,
824     WD_PARSE_STALL_SC3 = 107,
825     WD_PARSE_STALL_IN_SC0 = 108,
826     WD_PARSE_STALL_IN_SC1 = 109,
827     WD_PARSE_STALL_IN_SC2 = 110,
828     WD_PARSE_STALL_IN_SC3 = 111,
829     WD_PARSE_STALL_OUT_SC0 = 112,
830     WD_PARSE_STALL_OUT_SC1 = 113,
831     WD_PARSE_STALL_OUT_SC2 = 114,
832     WD_PARSE_STALL_OUT_SC3 = 115,
833     WD_TRANS_WS_SC0 = 116,
834     WD_TRANS_WS_SC1 = 117,
835     WD_TRANS_WS_SC2 = 118,
836     WD_TRANS_WS_SC3 = 119,
837     WD_TRANS_WB0 = 120,
838     WD_TRANS_WB1 = 121,
839     WD_TRANS_WB2 = 122,
840     WD_TRANS_WB3 = 123,
841     SRAM_RD_TRANS_ACCEPTED = 128,
842     SRAM_RD_TRANS_COMPLETED = 129,
843     SRAM_RD_DATA_BEAT_RECEIVED = 130,
844     SRAM_RD_TRAN_REQ_STALLED = 131,
845     SRAM_WR_TRANS_ACCEPTED = 132,
846     SRAM_WR_TRANS_COMPLETED_M = 133,
847     SRAM_WR_TRANS_COMPLETED_S = 134,
848     SRAM_WR_DATA_BEAT_WRITTEN = 135,
849     SRAM_WR_TRAN_REQ_STALLED = 136,
850     SRAM_WR_DATA_BEAT_STALLED = 137,
851     SRAM_ENABLED_CYCLES = 140,
852     SRAM_RD_STALL_LIMIT = 142,
853     SRAM_WR_STALL_LIMIT = 143,
854     AXI_LATENCY_ANY = 160,
855     AXI_LATENCY_32 = 161,
856     AXI_LATENCY_64 = 162,
857     AXI_LATENCY_128 = 163,
858     AXI_LATENCY_256 = 164,
859     AXI_LATENCY_512 = 165,
860     AXI_LATENCY_1024 = 166,
861     ECC_DMA = 176,
862     ECC_MAC_IB = 177,
863     ECC_MAC_AB = 178,
864     ECC_AO_CB = 179,
865     ECC_AO_OB = 180,
866     ECC_AO_LUT = 181,
867     EXT_RD_TRANS_ACCEPTED = 384,
868     EXT_RD_TRANS_COMPLETED = 385,
869     EXT_RD_DATA_BEAT_RECEIVED = 386,
870     EXT_RD_TRAN_REQ_STALLED = 387,
871     EXT_WR_TRANS_ACCEPTED = 388,
872     EXT_WR_TRANS_COMPLETED_M = 389,
873     EXT_WR_TRANS_COMPLETED_S = 390,
874     EXT_WR_DATA_BEAT_WRITTEN = 391,
875     EXT_WR_TRAN_REQ_STALLED = 392,
876     EXT_WR_DATA_BEAT_STALLED = 393,
877     EXT_ENABLED_CYCLES = 396,
878     EXT_RD_STALL_LIMIT = 398,
879     EXT_WR_STALL_LIMIT = 399,
880     SRAM0_RD_TRANS_ACCEPTED = 512,
881     SRAM0_RD_TRANS_COMPLETED = 513,
882     SRAM0_RD_DATA_BEAT_RECEIVED = 514,
883     SRAM0_RD_TRAN_REQ_STALLED = 515,
884     SRAM0_WR_TRANS_ACCEPTED = 516,
885     SRAM0_WR_TRANS_COMPLETED_M = 517,
886     SRAM0_WR_TRANS_COMPLETED_S = 518,
887     SRAM0_WR_DATA_BEAT_WRITTEN = 519,
888     SRAM0_WR_TRAN_REQ_STALLED = 520,
889     SRAM0_WR_DATA_BEAT_STALLED = 521,
890     SRAM0_ENABLED_CYCLES = 524,
891     SRAM0_RD_STALL_LIMIT = 526,
892     SRAM0_WR_STALL_LIMIT = 527,
893     SRAM1_RD_TRANS_ACCEPTED = 528,
894     SRAM1_RD_TRANS_COMPLETED = 529,
895     SRAM1_RD_DATA_BEAT_RECEIVED = 530,
896     SRAM1_RD_TRAN_REQ_STALLED = 531,
897     SRAM1_WR_TRANS_ACCEPTED = 532,
898     SRAM1_WR_TRANS_COMPLETED_M = 533,
899     SRAM1_WR_TRANS_COMPLETED_S = 534,
900     SRAM1_WR_DATA_BEAT_WRITTEN = 535,
901     SRAM1_WR_TRAN_REQ_STALLED = 536,
902     SRAM1_WR_DATA_BEAT_STALLED = 537,
903     SRAM1_ENABLED_CYCLES = 540,
904     SRAM1_RD_STALL_LIMIT = 542,
905     SRAM1_WR_STALL_LIMIT = 543,
906     SRAM2_RD_TRANS_ACCEPTED = 544,
907     SRAM2_RD_TRANS_COMPLETED = 545,
908     SRAM2_RD_DATA_BEAT_RECEIVED = 546,
909     SRAM2_RD_TRAN_REQ_STALLED = 547,
910     SRAM2_WR_TRANS_ACCEPTED = 548,
911     SRAM2_WR_TRANS_COMPLETED_M = 549,
912     SRAM2_WR_TRANS_COMPLETED_S = 550,
913     SRAM2_WR_DATA_BEAT_WRITTEN = 551,
914     SRAM2_WR_TRAN_REQ_STALLED = 552,
915     SRAM2_WR_DATA_BEAT_STALLED = 553,
916     SRAM2_ENABLED_CYCLES = 556,
917     SRAM2_RD_STALL_LIMIT = 558,
918     SRAM2_WR_STALL_LIMIT = 559,
919     SRAM3_RD_TRANS_ACCEPTED = 560,
920     SRAM3_RD_TRANS_COMPLETED = 561,
921     SRAM3_RD_DATA_BEAT_RECEIVED = 562,
922     SRAM3_RD_TRAN_REQ_STALLED = 563,
923     SRAM3_WR_TRANS_ACCEPTED = 564,
924     SRAM3_WR_TRANS_COMPLETED_M = 565,
925     SRAM3_WR_TRANS_COMPLETED_S = 566,
926     SRAM3_WR_DATA_BEAT_WRITTEN = 567,
927     SRAM3_WR_TRAN_REQ_STALLED = 568,
928     SRAM3_WR_DATA_BEAT_STALLED = 569,
929     SRAM3_ENABLED_CYCLES = 572,
930     SRAM3_RD_STALL_LIMIT = 574,
931     SRAM3_WR_STALL_LIMIT = 575,
932     EXT0_RD_TRANS_ACCEPTED = 640,
933     EXT0_RD_TRANS_COMPLETED = 641,
934     EXT0_RD_DATA_BEAT_RECEIVED = 642,
935     EXT0_RD_TRAN_REQ_STALLED = 643,
936     EXT0_WR_TRANS_ACCEPTED = 644,
937     EXT0_WR_TRANS_COMPLETED_M = 645,
938     EXT0_WR_TRANS_COMPLETED_S = 646,
939     EXT0_WR_DATA_BEAT_WRITTEN = 647,
940     EXT0_WR_TRAN_REQ_STALLED = 648,
941     EXT0_WR_DATA_BEAT_STALLED = 649,
942     EXT0_ENABLED_CYCLES = 652,
943     EXT0_RD_STALL_LIMIT = 654,
944     EXT0_WR_STALL_LIMIT = 655,
945     EXT1_RD_TRANS_ACCEPTED = 656,
946     EXT1_RD_TRANS_COMPLETED = 657,
947     EXT1_RD_DATA_BEAT_RECEIVED = 658,
948     EXT1_RD_TRAN_REQ_STALLED = 659,
949     EXT1_WR_TRANS_ACCEPTED = 660,
950     EXT1_WR_TRANS_COMPLETED_M = 661,
951     EXT1_WR_TRANS_COMPLETED_S = 662,
952     EXT1_WR_DATA_BEAT_WRITTEN = 663,
953     EXT1_WR_TRAN_REQ_STALLED = 664,
954     EXT1_WR_DATA_BEAT_STALLED = 665,
955     EXT1_ENABLED_CYCLES = 668,
956     EXT1_RD_STALL_LIMIT = 670,
957     EXT1_WR_STALL_LIMIT = 671,
958 };
959 
960 enum class pmu_port_disable : uint8_t
961 {
962     ENABLE = 0,
963     DISABLE = 1,
964 };
965 
966 enum class pooling_mode : uint8_t
967 {
968     MAX = 0,
969     AVERAGE = 1,
970     REDUCE_SUM = 2,
971     SUM = 3,
972     NONE = 4,
973     MIN = 5,
974     ARGMAX_X = 6,
975     ARGMAX_Y = 7,
976 };
977 
978 enum class privilege_level : uint8_t
979 {
980     USER = 0,
981     PRIVILEGED = 1,
982 };
983 
984 enum class ram_id : uint8_t
985 {
986     LUT = 0,
987     IB = 1,
988     AB = 2,
989     CB = 3,
990     OB = 4,
991 };
992 
993 enum class resize_mode : uint8_t
994 {
995     BILINEAR = 0,
996     REPLICATE = 1,
997     NEAREST = 2,
998 };
999 
1000 enum class round_mode_ifm : uint8_t
1001 {
1002     DOUBLE_SYMMETRIC = 0,
1003     NATURAL = 1,
1004 };
1005 
1006 enum class round_mode_ofm : uint8_t
1007 {
1008     DOUBLE_SYMMETRIC = 0,
1009     NATURAL = 1,
1010     DOUBLE_ASYMMETRIC = 2,
1011     SYMMETRIC = 3,
1012     TRUNCATE_TO_ZERO = 4,
1013     TRUNCATE_TO_LOWER = 5,
1014 };
1015 
1016 enum class security_level : uint8_t
1017 {
1018     SECURE = 0,
1019     NON_SECURE = 1,
1020 };
1021 
1022 enum class state : uint8_t
1023 {
1024     STOPPED = 0,
1025     RUNNING = 1,
1026 };
1027 
1028 enum class wd_active_core : uint8_t
1029 {
1030     NONE = 0,
1031     STANDARD = 1,
1032     FAST = 2,
1033     TENSOR = 3,
1034 };
1035 
1036 enum class weight_format : uint8_t
1037 {
1038     SWD = 0,
1039     FWD = 1,
1040 };
1041 
1042 enum class weight_order : uint8_t
1043 {
1044     DEPTH_FIRST = 0,
1045     PART_KERNEL_FIRST = 1,
1046 };
1047 
1048 enum class weight_sparsity : uint8_t
1049 {
1050     NONE = 0,
1051     SPARSE_2_4 = 1,
1052 };
1053 
1054 #else
1055 
1056 enum acc_format
1057 {
1058     ACC_FORMAT_I32 = 0,
1059     ACC_FORMAT_I48 = 1,
1060 };
1061 
1062 enum acc_input
1063 {
1064     ACC_INPUT_RESET = 0,
1065     ACC_INPUT_KEEP = 1,
1066     ACC_INPUT_IFM2 = 2,
1067 };
1068 
1069 enum acc_output
1070 {
1071     ACC_OUTPUT_ENABLE = 0,
1072     ACC_OUTPUT_DISABLE = 1,
1073 };
1074 
1075 enum activation_clip_range
1076 {
1077     ACTIVATION_CLIP_RANGE_B16 = 0,
1078     ACTIVATION_CLIP_RANGE_NONE = 1,
1079 };
1080 
1081 enum activation_format
1082 {
1083     ACTIVATION_FORMAT_NHWC = 0,
1084     ACTIVATION_FORMAT_NHCWB16 = 1,
1085 };
1086 
1087 enum activation_function
1088 {
1089     ACTIVATION_FUNCTION_LUT_NONE = 0,
1090     ACTIVATION_FUNCTION_LUT_U8_U8 = 1,
1091     ACTIVATION_FUNCTION_LUT_S8_S8 = 4,
1092     ACTIVATION_FUNCTION_LUT_S8_S16 = 5,
1093     ACTIVATION_FUNCTION_LUT_S8_S32 = 7,
1094     ACTIVATION_FUNCTION_LUT_S16_S16 = 8,
1095     ACTIVATION_FUNCTION_LUT_S16_S32 = 9,
1096     ACTIVATION_FUNCTION_LUT_TANH = 10,
1097     ACTIVATION_FUNCTION_LUT_SIGMOID = 11,
1098 };
1099 
1100 enum activation_precision
1101 {
1102     ACTIVATION_PRECISION_B8 = 0,
1103     ACTIVATION_PRECISION_B16 = 1,
1104     ACTIVATION_PRECISION_B32 = 2,
1105     ACTIVATION_PRECISION_B64 = 3,
1106 };
1107 
1108 enum activation_reverse
1109 {
1110     ACTIVATION_REVERSE_NONE = 0,
1111     ACTIVATION_REVERSE_H = 1,
1112     ACTIVATION_REVERSE_W = 2,
1113     ACTIVATION_REVERSE_C = 3,
1114 };
1115 
1116 enum activation_storage
1117 {
1118     ACTIVATION_STORAGE_TILE2X2 = 0,
1119     ACTIVATION_STORAGE_TILE3X1 = 1,
1120     ACTIVATION_STORAGE_CHAINED = 2,
1121     ACTIVATION_STORAGE_NONE = 3,
1122 };
1123 
1124 enum activation_transpose
1125 {
1126     ACTIVATION_TRANSPOSE_HWC = 0,
1127     ACTIVATION_TRANSPOSE_WHC = 1,
1128     ACTIVATION_TRANSPOSE_HCW = 2,
1129     ACTIVATION_TRANSPOSE_WCH = 3,
1130     ACTIVATION_TRANSPOSE_CHW = 6,
1131     ACTIVATION_TRANSPOSE_CWH = 7,
1132 };
1133 
1134 enum activation_type
1135 {
1136     ACTIVATION_TYPE_UNSIGNED = 0,
1137     ACTIVATION_TYPE_SIGNED = 1,
1138 };
1139 
1140 enum axi_mem_domain
1141 {
1142     AXI_MEM_DOMAIN_NON_SHARABLE = 0,
1143     AXI_MEM_DOMAIN_INNER_SHARABLE = 1,
1144     AXI_MEM_DOMAIN_OUTER_SHARABLE = 2,
1145     AXI_MEM_DOMAIN_SYSTEM = 3,
1146 };
1147 
1148 enum axi_mem_encoding
1149 {
1150     AXI_MEM_ENCODING_DEVICE_NON_BUFFERABLE = 0,
1151     AXI_MEM_ENCODING_DEVICE_BUFFERABLE = 1,
1152     AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_NON_BUFFERABLE = 2,
1153     AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_BUFFERABLE = 3,
1154     AXI_MEM_ENCODING_WRITE_THROUGH_NO_ALLOCATE = 4,
1155     AXI_MEM_ENCODING_WRITE_THROUGH_READ_ALLOCATE = 5,
1156     AXI_MEM_ENCODING_WRITE_THROUGH_WRITE_ALLOCATE = 6,
1157     AXI_MEM_ENCODING_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 7,
1158     AXI_MEM_ENCODING_WRITE_BACK_NO_ALLOCATE = 8,
1159     AXI_MEM_ENCODING_WRITE_BACK_READ_ALLOCATE = 9,
1160     AXI_MEM_ENCODING_WRITE_BACK_WRITE_ALLOCATE = 10,
1161     AXI_MEM_ENCODING_WRITE_BACK_READ_AND_WRITE_ALLOCATE = 11,
1162 };
1163 
1164 enum axi_port
1165 {
1166     AXI_PORT_SRAM = 0,
1167     AXI_PORT_EXT = 1,
1168 };
1169 
1170 enum branch_cond
1171 {
1172     BRANCH_COND_ALWAYS = 0,
1173     BRANCH_COND_RF_TRUE = 1,
1174 };
1175 
1176 enum broadcast_mode
1177 {
1178     BROADCAST_MODE_NONE = 0,
1179     BROADCAST_MODE_H = 1,
1180     BROADCAST_MODE_W = 2,
1181     BROADCAST_MODE_HW = 3,
1182     BROADCAST_MODE_C = 4,
1183     BROADCAST_MODE_CH = 5,
1184     BROADCAST_MODE_CW = 6,
1185     BROADCAST_MODE_CWH = 7,
1186     BROADCAST_MODE_SCALAR = 8,
1187 };
1188 
1189 enum cmd0_opcode
1190 {
1191     CMD0_OPCODE_NPU_OP_STOP = 0,
1192     CMD0_OPCODE_NPU_OP_IRQ = 1,
1193     CMD0_OPCODE_NPU_OP_CONV = 2,
1194     CMD0_OPCODE_NPU_OP_DEPTHWISE = 3,
1195     CMD0_OPCODE_NPU_OP_POOL = 5,
1196     CMD0_OPCODE_NPU_OP_ELEMENTWISE = 6,
1197     CMD0_OPCODE_NPU_OP_RESIZE = 7,
1198     CMD0_OPCODE_NPU_OP_DMA_START = 16,
1199     CMD0_OPCODE_NPU_OP_DMA_WAIT = 17,
1200     CMD0_OPCODE_NPU_OP_KERNEL_WAIT = 18,
1201     CMD0_OPCODE_NPU_OP_PMU_MASK = 19,
1202     CMD0_OPCODE_NPU_SET_IFM_PAD_TOP = 256,
1203     CMD0_OPCODE_NPU_SET_IFM_PAD_LEFT = 257,
1204     CMD0_OPCODE_NPU_SET_IFM_PAD_RIGHT = 258,
1205     CMD0_OPCODE_NPU_SET_IFM_PAD_BOTTOM = 259,
1206     CMD0_OPCODE_NPU_SET_IFM_DEPTH_M1 = 260,
1207     CMD0_OPCODE_NPU_SET_IFM_PRECISION = 261,
1208     CMD0_OPCODE_NPU_SET_IFM_UPSCALE = 263,
1209     CMD0_OPCODE_NPU_SET_IFM_BROADCAST = 264,
1210     CMD0_OPCODE_NPU_SET_IFM_ZERO_POINT = 265,
1211     CMD0_OPCODE_NPU_SET_IFM_WIDTH0_M1 = 266,
1212     CMD0_OPCODE_NPU_SET_IFM_HEIGHT0_M1 = 267,
1213     CMD0_OPCODE_NPU_SET_IFM_HEIGHT1_M1 = 268,
1214     CMD0_OPCODE_NPU_SET_IFM_REGION = 271,
1215     CMD0_OPCODE_NPU_SET_OFM_WIDTH_M1 = 273,
1216     CMD0_OPCODE_NPU_SET_OFM_HEIGHT_M1 = 274,
1217     CMD0_OPCODE_NPU_SET_OFM_DEPTH_M1 = 275,
1218     CMD0_OPCODE_NPU_SET_OFM_PRECISION = 276,
1219     CMD0_OPCODE_NPU_SET_OFM_BLK_WIDTH_M1 = 277,
1220     CMD0_OPCODE_NPU_SET_OFM_BLK_HEIGHT_M1 = 278,
1221     CMD0_OPCODE_NPU_SET_OFM_BLK_DEPTH_M1 = 279,
1222     CMD0_OPCODE_NPU_SET_OFM_ZERO_POINT = 280,
1223     CMD0_OPCODE_NPU_SET_OFM_WIDTH0_M1 = 282,
1224     CMD0_OPCODE_NPU_SET_OFM_HEIGHT0_M1 = 283,
1225     CMD0_OPCODE_NPU_SET_OFM_HEIGHT1_M1 = 284,
1226     CMD0_OPCODE_NPU_SET_OFM_REGION = 287,
1227     CMD0_OPCODE_NPU_SET_KERNEL_WIDTH_M1 = 288,
1228     CMD0_OPCODE_NPU_SET_KERNEL_HEIGHT_M1 = 289,
1229     CMD0_OPCODE_NPU_SET_KERNEL_STRIDE = 290,
1230     CMD0_OPCODE_NPU_SET_ACC_FORMAT = 292,
1231     CMD0_OPCODE_NPU_SET_ACTIVATION = 293,
1232     CMD0_OPCODE_NPU_SET_ACTIVATION_MIN = 294,
1233     CMD0_OPCODE_NPU_SET_ACTIVATION_MAX = 295,
1234     CMD0_OPCODE_NPU_SET_WEIGHT_REGION = 296,
1235     CMD0_OPCODE_NPU_SET_SCALE_REGION = 297,
1236     CMD0_OPCODE_NPU_SET_RESIZE_X_SCALE_N_M1 = 298,
1237     CMD0_OPCODE_NPU_SET_RESIZE_Y_SCALE_N_M1 = 299,
1238     CMD0_OPCODE_NPU_SET_RESIZE_X_OFFSET = 300,
1239     CMD0_OPCODE_NPU_SET_RESIZE_Y_OFFSET = 301,
1240     CMD0_OPCODE_NPU_SET_WEIGHT_FORMAT = 302,
1241     CMD0_OPCODE_NPU_SET_BLOCKDEP = 303,
1242     CMD0_OPCODE_NPU_SET_DMA0_SRC_REGION = 304,
1243     CMD0_OPCODE_NPU_SET_DMA0_DST_REGION = 305,
1244     CMD0_OPCODE_NPU_SET_DMA0_SIZE0 = 306,
1245     CMD0_OPCODE_NPU_SET_DMA0_SIZE1 = 307,
1246     CMD0_OPCODE_NPU_SET_DMA0_IDX_REGION = 308,
1247     CMD0_OPCODE_NPU_SET_IFM2_BROADCAST = 384,
1248     CMD0_OPCODE_NPU_SET_IFM2_PRECISION = 389,
1249     CMD0_OPCODE_NPU_SET_IFM2_ZERO_POINT = 393,
1250     CMD0_OPCODE_NPU_SET_IFM2_WIDTH0_M1 = 394,
1251     CMD0_OPCODE_NPU_SET_IFM2_HEIGHT0_M1 = 395,
1252     CMD0_OPCODE_NPU_SET_IFM2_HEIGHT1_M1 = 396,
1253     CMD0_OPCODE_NPU_SET_IFM2_REGION = 399,
1254 };
1255 
1256 enum cmd1_opcode
1257 {
1258     CMD1_OPCODE_NPU_SET_IFM_BASE0 = 0,
1259     CMD1_OPCODE_NPU_SET_IFM_BASE1 = 1,
1260     CMD1_OPCODE_NPU_SET_IFM_BASE2 = 2,
1261     CMD1_OPCODE_NPU_SET_IFM_BASE3 = 3,
1262     CMD1_OPCODE_NPU_SET_IFM_STRIDE_X = 4,
1263     CMD1_OPCODE_NPU_SET_IFM_STRIDE_Y = 5,
1264     CMD1_OPCODE_NPU_SET_IFM_STRIDE_C = 6,
1265     CMD1_OPCODE_NPU_SET_OFM_BASE0 = 16,
1266     CMD1_OPCODE_NPU_SET_OFM_BASE1 = 17,
1267     CMD1_OPCODE_NPU_SET_OFM_BASE2 = 18,
1268     CMD1_OPCODE_NPU_SET_OFM_BASE3 = 19,
1269     CMD1_OPCODE_NPU_SET_OFM_STRIDE_X = 20,
1270     CMD1_OPCODE_NPU_SET_OFM_STRIDE_Y = 21,
1271     CMD1_OPCODE_NPU_SET_OFM_STRIDE_C = 22,
1272     CMD1_OPCODE_NPU_SET_WEIGHT_BASE = 32,
1273     CMD1_OPCODE_NPU_SET_WEIGHT_LENGTH = 33,
1274     CMD1_OPCODE_NPU_SET_SCALE_BASE = 34,
1275     CMD1_OPCODE_NPU_SET_SCALE_LENGTH = 35,
1276     CMD1_OPCODE_NPU_SET_OFM_SCALE = 36,
1277     CMD1_OPCODE_NPU_SET_IFM_SCALE = 37,
1278     CMD1_OPCODE_NPU_SET_IFM2_SCALE = 38,
1279     CMD1_OPCODE_NPU_SET_OP_SCALAR = 39,
1280     CMD1_OPCODE_NPU_SET_DMA0_SRC = 48,
1281     CMD1_OPCODE_NPU_SET_DMA0_DST = 49,
1282     CMD1_OPCODE_NPU_SET_DMA0_LEN = 50,
1283     CMD1_OPCODE_NPU_SET_DMA0_SRC_STRIDE0 = 51,
1284     CMD1_OPCODE_NPU_SET_DMA0_SRC_STRIDE1 = 52,
1285     CMD1_OPCODE_NPU_SET_DMA0_DST_STRIDE0 = 53,
1286     CMD1_OPCODE_NPU_SET_DMA0_DST_STRIDE1 = 54,
1287     CMD1_OPCODE_NPU_SET_DMA0_IDX = 55,
1288     CMD1_OPCODE_NPU_SET_DMA0_IDX_MAX = 56,
1289     CMD1_OPCODE_NPU_SET_DMA0_IDX_SKIP1 = 57,
1290     CMD1_OPCODE_NPU_SET_IFM2_BASE0 = 128,
1291     CMD1_OPCODE_NPU_SET_IFM2_BASE1 = 129,
1292     CMD1_OPCODE_NPU_SET_IFM2_BASE2 = 130,
1293     CMD1_OPCODE_NPU_SET_IFM2_BASE3 = 131,
1294     CMD1_OPCODE_NPU_SET_IFM2_STRIDE_X = 132,
1295     CMD1_OPCODE_NPU_SET_IFM2_STRIDE_Y = 133,
1296     CMD1_OPCODE_NPU_SET_IFM2_STRIDE_C = 134,
1297     CMD1_OPCODE_NPU_SET_WEIGHT1_BASE = 144,
1298     CMD1_OPCODE_NPU_SET_WEIGHT1_LENGTH = 145,
1299     CMD1_OPCODE_NPU_SET_WEIGHT2_BASE = 146,
1300     CMD1_OPCODE_NPU_SET_WEIGHT2_LENGTH = 147,
1301     CMD1_OPCODE_NPU_SET_WEIGHT3_BASE = 148,
1302     CMD1_OPCODE_NPU_SET_WEIGHT3_LENGTH = 149,
1303     CMD1_OPCODE_NPU_SET_RESIZE_X = 150,
1304     CMD1_OPCODE_NPU_SET_RESIZE_Y = 151,
1305     CMD1_OPCODE_NPU_OP_BRANCH = 256,
1306 };
1307 
1308 enum cmd_ctrl
1309 {
1310     CMD_CTRL_CMD0_CTRL = 0,
1311     CMD_CTRL_CMD1_CTRL = 1,
1312 };
1313 
1314 enum custom_dma
1315 {
1316     CUSTOM_DMA_NOT_IMPLEMENTED = 0,
1317     CUSTOM_DMA_IMPLEMENTED = 1,
1318 };
1319 
1320 enum dma_fault_src
1321 {
1322     DMA_FAULT_SRC_SRAM = 0,
1323     DMA_FAULT_SRC_EXT = 1,
1324 };
1325 
1326 enum dma_idx_mode
1327 {
1328     DMA_IDX_MODE_DISABLED = 0,
1329     DMA_IDX_MODE_ENABLED = 1,
1330 };
1331 
1332 enum dma_region_mode
1333 {
1334     DMA_REGION_MODE_EXTERNAL = 0,
1335     DMA_REGION_MODE_INTERNAL = 1,
1336 };
1337 
1338 enum dma_stride_mode
1339 {
1340     DMA_STRIDE_MODE_D1 = 0,
1341     DMA_STRIDE_MODE_D2 = 1,
1342     DMA_STRIDE_MODE_D3 = 2,
1343 };
1344 
1345 enum elementwise_mode
1346 {
1347     ELEMENTWISE_MODE_MUL = 0,
1348     ELEMENTWISE_MODE_ADD = 1,
1349     ELEMENTWISE_MODE_SUB = 2,
1350     ELEMENTWISE_MODE_MIN = 3,
1351     ELEMENTWISE_MODE_MAX = 4,
1352     ELEMENTWISE_MODE_LRELU = 5,
1353     ELEMENTWISE_MODE_ABS = 6,
1354     ELEMENTWISE_MODE_CLZ = 7,
1355     ELEMENTWISE_MODE_SHR = 8,
1356     ELEMENTWISE_MODE_SHL = 9,
1357     ELEMENTWISE_MODE_LSR = 10,
1358     ELEMENTWISE_MODE_DIV = 11,
1359     ELEMENTWISE_MODE_CMP_EQ = 16,
1360     ELEMENTWISE_MODE_CMP_NE = 17,
1361     ELEMENTWISE_MODE_CMP_GE = 18,
1362     ELEMENTWISE_MODE_CMP_GT = 19,
1363     ELEMENTWISE_MODE_AND = 33,
1364     ELEMENTWISE_MODE_OR = 34,
1365     ELEMENTWISE_MODE_XOR = 35,
1366     ELEMENTWISE_MODE_NOT = 36,
1367     ELEMENTWISE_MODE_AND_NOT = 42,
1368 };
1369 
1370 enum ifm_upscale_mode
1371 {
1372     IFM_UPSCALE_MODE_NONE = 0,
1373     IFM_UPSCALE_MODE_NEAREST = 1,
1374     IFM_UPSCALE_MODE_ZEROS = 2,
1375 };
1376 
1377 enum kernel_decomposition
1378 {
1379     KERNEL_DECOMPOSITION_D8X8 = 0,
1380     KERNEL_DECOMPOSITION_D4X4 = 1,
1381 };
1382 
1383 enum kernel_dilation
1384 {
1385     KERNEL_DILATION_NONE = 0,
1386     KERNEL_DILATION_X2 = 1,
1387 };
1388 
1389 enum max_beats
1390 {
1391     MAX_BEATS_B64 = 0,
1392     MAX_BEATS_B128 = 1,
1393     MAX_BEATS_B256 = 2,
1394 };
1395 
1396 enum microblock
1397 {
1398     MICROBLOCK_U1X1 = 0,
1399     MICROBLOCK_U1X2 = 1,
1400     MICROBLOCK_U1X4 = 2,
1401     MICROBLOCK_U2X2 = 3,
1402     MICROBLOCK_U2X4 = 4,
1403     MICROBLOCK_U4X4 = 5,
1404 };
1405 
1406 enum ofm_scale_mode
1407 {
1408     OFM_SCALE_MODE_PER_CHANNEL = 0,
1409     OFM_SCALE_MODE_GLOBAL = 1,
1410 };
1411 
1412 enum pmu_axi_channel
1413 {
1414     PMU_AXI_CHANNEL_RD_CMD = 0,
1415     PMU_AXI_CHANNEL_RD_IFM = 1,
1416     PMU_AXI_CHANNEL_RD_WEIGHTS = 2,
1417     PMU_AXI_CHANNEL_RD_SCALE_BIAS = 3,
1418     PMU_AXI_CHANNEL_RD_MEM2MEM = 4,
1419     PMU_AXI_CHANNEL_RD_IFM_STREAM = 5,
1420     PMU_AXI_CHANNEL_RD_MEM2MEM_IDX = 6,
1421     PMU_AXI_CHANNEL_WR_OFM = 8,
1422     PMU_AXI_CHANNEL_WR_MEM2MEM = 9,
1423 };
1424 
1425 enum pmu_event
1426 {
1427     PMU_EVENT_NO_EVENT = 0,
1428     PMU_EVENT_CYCLE = 17,
1429     PMU_EVENT_NPU_IDLE = 32,
1430     PMU_EVENT_CC_STALLED_ON_BLOCKDEP = 33,
1431     PMU_EVENT_NPU_ACTIVE = 35,
1432     PMU_EVENT_MAC_ACTIVE = 48,
1433     PMU_EVENT_MAC_DPU_ACTIVE = 51,
1434     PMU_EVENT_MAC_STALLED_BY_W_OR_ACC = 52,
1435     PMU_EVENT_MAC_STALLED_BY_W = 53,
1436     PMU_EVENT_MAC_STALLED_BY_ACC = 54,
1437     PMU_EVENT_MAC_STALLED_BY_IB = 55,
1438     PMU_EVENT_AO_ACTIVE = 64,
1439     PMU_EVENT_AO_STALLED_BY_BS_OR_OB = 67,
1440     PMU_EVENT_AO_STALLED_BY_BS = 68,
1441     PMU_EVENT_AO_STALLED_BY_OB = 69,
1442     PMU_EVENT_AO_STALLED_BY_AB_OR_CB = 70,
1443     PMU_EVENT_AO_STALLED_BY_AB = 71,
1444     PMU_EVENT_AO_STALLED_BY_CB = 72,
1445     PMU_EVENT_WD_ACTIVE = 80,
1446     PMU_EVENT_WD_STALLED = 81,
1447     PMU_EVENT_WD_STALLED_BY_WD_BUF = 83,
1448     PMU_EVENT_WD_STALLED_BY_WS_FC = 84,
1449     PMU_EVENT_WD_STALLED_BY_WS_TC = 85,
1450     PMU_EVENT_WD_TRANS_WBLK = 89,
1451     PMU_EVENT_WD_TRANS_WS_FC = 90,
1452     PMU_EVENT_WD_TRANS_WS_TC = 91,
1453     PMU_EVENT_WD_STALLED_BY_WS_SC0 = 96,
1454     PMU_EVENT_WD_STALLED_BY_WS_SC1 = 97,
1455     PMU_EVENT_WD_STALLED_BY_WS_SC2 = 98,
1456     PMU_EVENT_WD_STALLED_BY_WS_SC3 = 99,
1457     PMU_EVENT_WD_PARSE_ACTIVE_SC0 = 100,
1458     PMU_EVENT_WD_PARSE_ACTIVE_SC1 = 101,
1459     PMU_EVENT_WD_PARSE_ACTIVE_SC2 = 102,
1460     PMU_EVENT_WD_PARSE_ACTIVE_SC3 = 103,
1461     PMU_EVENT_WD_PARSE_STALL_SC0 = 104,
1462     PMU_EVENT_WD_PARSE_STALL_SC1 = 105,
1463     PMU_EVENT_WD_PARSE_STALL_SC2 = 106,
1464     PMU_EVENT_WD_PARSE_STALL_SC3 = 107,
1465     PMU_EVENT_WD_PARSE_STALL_IN_SC0 = 108,
1466     PMU_EVENT_WD_PARSE_STALL_IN_SC1 = 109,
1467     PMU_EVENT_WD_PARSE_STALL_IN_SC2 = 110,
1468     PMU_EVENT_WD_PARSE_STALL_IN_SC3 = 111,
1469     PMU_EVENT_WD_PARSE_STALL_OUT_SC0 = 112,
1470     PMU_EVENT_WD_PARSE_STALL_OUT_SC1 = 113,
1471     PMU_EVENT_WD_PARSE_STALL_OUT_SC2 = 114,
1472     PMU_EVENT_WD_PARSE_STALL_OUT_SC3 = 115,
1473     PMU_EVENT_WD_TRANS_WS_SC0 = 116,
1474     PMU_EVENT_WD_TRANS_WS_SC1 = 117,
1475     PMU_EVENT_WD_TRANS_WS_SC2 = 118,
1476     PMU_EVENT_WD_TRANS_WS_SC3 = 119,
1477     PMU_EVENT_WD_TRANS_WB0 = 120,
1478     PMU_EVENT_WD_TRANS_WB1 = 121,
1479     PMU_EVENT_WD_TRANS_WB2 = 122,
1480     PMU_EVENT_WD_TRANS_WB3 = 123,
1481     PMU_EVENT_SRAM_RD_TRANS_ACCEPTED = 128,
1482     PMU_EVENT_SRAM_RD_TRANS_COMPLETED = 129,
1483     PMU_EVENT_SRAM_RD_DATA_BEAT_RECEIVED = 130,
1484     PMU_EVENT_SRAM_RD_TRAN_REQ_STALLED = 131,
1485     PMU_EVENT_SRAM_WR_TRANS_ACCEPTED = 132,
1486     PMU_EVENT_SRAM_WR_TRANS_COMPLETED_M = 133,
1487     PMU_EVENT_SRAM_WR_TRANS_COMPLETED_S = 134,
1488     PMU_EVENT_SRAM_WR_DATA_BEAT_WRITTEN = 135,
1489     PMU_EVENT_SRAM_WR_TRAN_REQ_STALLED = 136,
1490     PMU_EVENT_SRAM_WR_DATA_BEAT_STALLED = 137,
1491     PMU_EVENT_SRAM_ENABLED_CYCLES = 140,
1492     PMU_EVENT_SRAM_RD_STALL_LIMIT = 142,
1493     PMU_EVENT_SRAM_WR_STALL_LIMIT = 143,
1494     PMU_EVENT_AXI_LATENCY_ANY = 160,
1495     PMU_EVENT_AXI_LATENCY_32 = 161,
1496     PMU_EVENT_AXI_LATENCY_64 = 162,
1497     PMU_EVENT_AXI_LATENCY_128 = 163,
1498     PMU_EVENT_AXI_LATENCY_256 = 164,
1499     PMU_EVENT_AXI_LATENCY_512 = 165,
1500     PMU_EVENT_AXI_LATENCY_1024 = 166,
1501     PMU_EVENT_ECC_DMA = 176,
1502     PMU_EVENT_ECC_MAC_IB = 177,
1503     PMU_EVENT_ECC_MAC_AB = 178,
1504     PMU_EVENT_ECC_AO_CB = 179,
1505     PMU_EVENT_ECC_AO_OB = 180,
1506     PMU_EVENT_ECC_AO_LUT = 181,
1507     PMU_EVENT_EXT_RD_TRANS_ACCEPTED = 384,
1508     PMU_EVENT_EXT_RD_TRANS_COMPLETED = 385,
1509     PMU_EVENT_EXT_RD_DATA_BEAT_RECEIVED = 386,
1510     PMU_EVENT_EXT_RD_TRAN_REQ_STALLED = 387,
1511     PMU_EVENT_EXT_WR_TRANS_ACCEPTED = 388,
1512     PMU_EVENT_EXT_WR_TRANS_COMPLETED_M = 389,
1513     PMU_EVENT_EXT_WR_TRANS_COMPLETED_S = 390,
1514     PMU_EVENT_EXT_WR_DATA_BEAT_WRITTEN = 391,
1515     PMU_EVENT_EXT_WR_TRAN_REQ_STALLED = 392,
1516     PMU_EVENT_EXT_WR_DATA_BEAT_STALLED = 393,
1517     PMU_EVENT_EXT_ENABLED_CYCLES = 396,
1518     PMU_EVENT_EXT_RD_STALL_LIMIT = 398,
1519     PMU_EVENT_EXT_WR_STALL_LIMIT = 399,
1520     PMU_EVENT_SRAM0_RD_TRANS_ACCEPTED = 512,
1521     PMU_EVENT_SRAM0_RD_TRANS_COMPLETED = 513,
1522     PMU_EVENT_SRAM0_RD_DATA_BEAT_RECEIVED = 514,
1523     PMU_EVENT_SRAM0_RD_TRAN_REQ_STALLED = 515,
1524     PMU_EVENT_SRAM0_WR_TRANS_ACCEPTED = 516,
1525     PMU_EVENT_SRAM0_WR_TRANS_COMPLETED_M = 517,
1526     PMU_EVENT_SRAM0_WR_TRANS_COMPLETED_S = 518,
1527     PMU_EVENT_SRAM0_WR_DATA_BEAT_WRITTEN = 519,
1528     PMU_EVENT_SRAM0_WR_TRAN_REQ_STALLED = 520,
1529     PMU_EVENT_SRAM0_WR_DATA_BEAT_STALLED = 521,
1530     PMU_EVENT_SRAM0_ENABLED_CYCLES = 524,
1531     PMU_EVENT_SRAM0_RD_STALL_LIMIT = 526,
1532     PMU_EVENT_SRAM0_WR_STALL_LIMIT = 527,
1533     PMU_EVENT_SRAM1_RD_TRANS_ACCEPTED = 528,
1534     PMU_EVENT_SRAM1_RD_TRANS_COMPLETED = 529,
1535     PMU_EVENT_SRAM1_RD_DATA_BEAT_RECEIVED = 530,
1536     PMU_EVENT_SRAM1_RD_TRAN_REQ_STALLED = 531,
1537     PMU_EVENT_SRAM1_WR_TRANS_ACCEPTED = 532,
1538     PMU_EVENT_SRAM1_WR_TRANS_COMPLETED_M = 533,
1539     PMU_EVENT_SRAM1_WR_TRANS_COMPLETED_S = 534,
1540     PMU_EVENT_SRAM1_WR_DATA_BEAT_WRITTEN = 535,
1541     PMU_EVENT_SRAM1_WR_TRAN_REQ_STALLED = 536,
1542     PMU_EVENT_SRAM1_WR_DATA_BEAT_STALLED = 537,
1543     PMU_EVENT_SRAM1_ENABLED_CYCLES = 540,
1544     PMU_EVENT_SRAM1_RD_STALL_LIMIT = 542,
1545     PMU_EVENT_SRAM1_WR_STALL_LIMIT = 543,
1546     PMU_EVENT_SRAM2_RD_TRANS_ACCEPTED = 544,
1547     PMU_EVENT_SRAM2_RD_TRANS_COMPLETED = 545,
1548     PMU_EVENT_SRAM2_RD_DATA_BEAT_RECEIVED = 546,
1549     PMU_EVENT_SRAM2_RD_TRAN_REQ_STALLED = 547,
1550     PMU_EVENT_SRAM2_WR_TRANS_ACCEPTED = 548,
1551     PMU_EVENT_SRAM2_WR_TRANS_COMPLETED_M = 549,
1552     PMU_EVENT_SRAM2_WR_TRANS_COMPLETED_S = 550,
1553     PMU_EVENT_SRAM2_WR_DATA_BEAT_WRITTEN = 551,
1554     PMU_EVENT_SRAM2_WR_TRAN_REQ_STALLED = 552,
1555     PMU_EVENT_SRAM2_WR_DATA_BEAT_STALLED = 553,
1556     PMU_EVENT_SRAM2_ENABLED_CYCLES = 556,
1557     PMU_EVENT_SRAM2_RD_STALL_LIMIT = 558,
1558     PMU_EVENT_SRAM2_WR_STALL_LIMIT = 559,
1559     PMU_EVENT_SRAM3_RD_TRANS_ACCEPTED = 560,
1560     PMU_EVENT_SRAM3_RD_TRANS_COMPLETED = 561,
1561     PMU_EVENT_SRAM3_RD_DATA_BEAT_RECEIVED = 562,
1562     PMU_EVENT_SRAM3_RD_TRAN_REQ_STALLED = 563,
1563     PMU_EVENT_SRAM3_WR_TRANS_ACCEPTED = 564,
1564     PMU_EVENT_SRAM3_WR_TRANS_COMPLETED_M = 565,
1565     PMU_EVENT_SRAM3_WR_TRANS_COMPLETED_S = 566,
1566     PMU_EVENT_SRAM3_WR_DATA_BEAT_WRITTEN = 567,
1567     PMU_EVENT_SRAM3_WR_TRAN_REQ_STALLED = 568,
1568     PMU_EVENT_SRAM3_WR_DATA_BEAT_STALLED = 569,
1569     PMU_EVENT_SRAM3_ENABLED_CYCLES = 572,
1570     PMU_EVENT_SRAM3_RD_STALL_LIMIT = 574,
1571     PMU_EVENT_SRAM3_WR_STALL_LIMIT = 575,
1572     PMU_EVENT_EXT0_RD_TRANS_ACCEPTED = 640,
1573     PMU_EVENT_EXT0_RD_TRANS_COMPLETED = 641,
1574     PMU_EVENT_EXT0_RD_DATA_BEAT_RECEIVED = 642,
1575     PMU_EVENT_EXT0_RD_TRAN_REQ_STALLED = 643,
1576     PMU_EVENT_EXT0_WR_TRANS_ACCEPTED = 644,
1577     PMU_EVENT_EXT0_WR_TRANS_COMPLETED_M = 645,
1578     PMU_EVENT_EXT0_WR_TRANS_COMPLETED_S = 646,
1579     PMU_EVENT_EXT0_WR_DATA_BEAT_WRITTEN = 647,
1580     PMU_EVENT_EXT0_WR_TRAN_REQ_STALLED = 648,
1581     PMU_EVENT_EXT0_WR_DATA_BEAT_STALLED = 649,
1582     PMU_EVENT_EXT0_ENABLED_CYCLES = 652,
1583     PMU_EVENT_EXT0_RD_STALL_LIMIT = 654,
1584     PMU_EVENT_EXT0_WR_STALL_LIMIT = 655,
1585     PMU_EVENT_EXT1_RD_TRANS_ACCEPTED = 656,
1586     PMU_EVENT_EXT1_RD_TRANS_COMPLETED = 657,
1587     PMU_EVENT_EXT1_RD_DATA_BEAT_RECEIVED = 658,
1588     PMU_EVENT_EXT1_RD_TRAN_REQ_STALLED = 659,
1589     PMU_EVENT_EXT1_WR_TRANS_ACCEPTED = 660,
1590     PMU_EVENT_EXT1_WR_TRANS_COMPLETED_M = 661,
1591     PMU_EVENT_EXT1_WR_TRANS_COMPLETED_S = 662,
1592     PMU_EVENT_EXT1_WR_DATA_BEAT_WRITTEN = 663,
1593     PMU_EVENT_EXT1_WR_TRAN_REQ_STALLED = 664,
1594     PMU_EVENT_EXT1_WR_DATA_BEAT_STALLED = 665,
1595     PMU_EVENT_EXT1_ENABLED_CYCLES = 668,
1596     PMU_EVENT_EXT1_RD_STALL_LIMIT = 670,
1597     PMU_EVENT_EXT1_WR_STALL_LIMIT = 671,
1598 };
1599 
1600 enum pmu_port_disable
1601 {
1602     PMU_PORT_DISABLE_ENABLE = 0,
1603     PMU_PORT_DISABLE_DISABLE = 1,
1604 };
1605 
1606 enum pooling_mode
1607 {
1608     POOLING_MODE_MAX = 0,
1609     POOLING_MODE_AVERAGE = 1,
1610     POOLING_MODE_REDUCE_SUM = 2,
1611     POOLING_MODE_SUM = 3,
1612     POOLING_MODE_NONE = 4,
1613     POOLING_MODE_MIN = 5,
1614     POOLING_MODE_ARGMAX_X = 6,
1615     POOLING_MODE_ARGMAX_Y = 7,
1616 };
1617 
1618 enum privilege_level
1619 {
1620     PRIVILEGE_LEVEL_USER = 0,
1621     PRIVILEGE_LEVEL_PRIVILEGED = 1,
1622 };
1623 
1624 enum ram_id
1625 {
1626     RAM_ID_LUT = 0,
1627     RAM_ID_IB = 1,
1628     RAM_ID_AB = 2,
1629     RAM_ID_CB = 3,
1630     RAM_ID_OB = 4,
1631 };
1632 
1633 enum resize_mode
1634 {
1635     RESIZE_MODE_BILINEAR = 0,
1636     RESIZE_MODE_REPLICATE = 1,
1637     RESIZE_MODE_NEAREST = 2,
1638 };
1639 
1640 enum round_mode_ifm
1641 {
1642     ROUND_MODE_IFM_DOUBLE_SYMMETRIC = 0,
1643     ROUND_MODE_IFM_NATURAL = 1,
1644 };
1645 
1646 enum round_mode_ofm
1647 {
1648     ROUND_MODE_OFM_DOUBLE_SYMMETRIC = 0,
1649     ROUND_MODE_OFM_NATURAL = 1,
1650     ROUND_MODE_OFM_DOUBLE_ASYMMETRIC = 2,
1651     ROUND_MODE_OFM_SYMMETRIC = 3,
1652     ROUND_MODE_OFM_TRUNCATE_TO_ZERO = 4,
1653     ROUND_MODE_OFM_TRUNCATE_TO_LOWER = 5,
1654 };
1655 
1656 enum security_level
1657 {
1658     SECURITY_LEVEL_SECURE = 0,
1659     SECURITY_LEVEL_NON_SECURE = 1,
1660 };
1661 
1662 enum state
1663 {
1664     STATE_STOPPED = 0,
1665     STATE_RUNNING = 1,
1666 };
1667 
1668 enum wd_active_core
1669 {
1670     WD_ACTIVE_CORE_NONE = 0,
1671     WD_ACTIVE_CORE_STANDARD = 1,
1672     WD_ACTIVE_CORE_FAST = 2,
1673     WD_ACTIVE_CORE_TENSOR = 3,
1674 };
1675 
1676 enum weight_format
1677 {
1678     WEIGHT_FORMAT_SWD = 0,
1679     WEIGHT_FORMAT_FWD = 1,
1680 };
1681 
1682 enum weight_order
1683 {
1684     WEIGHT_ORDER_DEPTH_FIRST = 0,
1685     WEIGHT_ORDER_PART_KERNEL_FIRST = 1,
1686 };
1687 
1688 enum weight_sparsity
1689 {
1690     WEIGHT_SPARSITY_NONE = 0,
1691     WEIGHT_SPARSITY_SPARSE_2_4 = 1,
1692 };
1693 
1694 #endif
1695 
1696 #ifdef NPU_DISASSEMBLE
1697 
1698 static const char* acc_format_str[] =
1699 {
1700     "ACC_FORMAT_I32",
1701     "ACC_FORMAT_I48",
1702 };
1703 
1704 static const char* acc_input_str[] =
1705 {
1706     "ACC_INPUT_RESET",
1707     "ACC_INPUT_KEEP",
1708     "ACC_INPUT_IFM2",
1709 };
1710 
1711 static const char* acc_output_str[] =
1712 {
1713     "ACC_OUTPUT_ENABLE",
1714     "ACC_OUTPUT_DISABLE",
1715 };
1716 
1717 static const char* activation_clip_range_str[] =
1718 {
1719     "ACTIVATION_CLIP_RANGE_B16",
1720     "ACTIVATION_CLIP_RANGE_NONE",
1721 };
1722 
1723 static const char* activation_format_str[] =
1724 {
1725     "ACTIVATION_FORMAT_NHWC",
1726     "ACTIVATION_FORMAT_NHCWB16",
1727 };
1728 
1729 static const char* activation_function_str[] =
1730 {
1731     "ACTIVATION_FUNCTION_LUT_NONE",
1732     "ACTIVATION_FUNCTION_LUT_U8_U8",
1733     "****",
1734     "****",
1735     "ACTIVATION_FUNCTION_LUT_S8_S8",
1736     "ACTIVATION_FUNCTION_LUT_S8_S16",
1737     "****",
1738     "ACTIVATION_FUNCTION_LUT_S8_S32",
1739     "ACTIVATION_FUNCTION_LUT_S16_S16",
1740     "ACTIVATION_FUNCTION_LUT_S16_S32",
1741     "ACTIVATION_FUNCTION_LUT_TANH",
1742     "ACTIVATION_FUNCTION_LUT_SIGMOID",
1743 };
1744 
1745 static const char* activation_precision_str[] =
1746 {
1747     "ACTIVATION_PRECISION_B8",
1748     "ACTIVATION_PRECISION_B16",
1749     "ACTIVATION_PRECISION_B32",
1750     "ACTIVATION_PRECISION_B64",
1751 };
1752 
1753 static const char* activation_reverse_str[] =
1754 {
1755     "ACTIVATION_REVERSE_NONE",
1756     "ACTIVATION_REVERSE_H",
1757     "ACTIVATION_REVERSE_W",
1758     "ACTIVATION_REVERSE_C",
1759 };
1760 
1761 static const char* activation_storage_str[] =
1762 {
1763     "ACTIVATION_STORAGE_TILE2X2",
1764     "ACTIVATION_STORAGE_TILE3X1",
1765     "ACTIVATION_STORAGE_CHAINED",
1766     "ACTIVATION_STORAGE_NONE",
1767 };
1768 
1769 static const char* activation_transpose_str[] =
1770 {
1771     "ACTIVATION_TRANSPOSE_HWC",
1772     "ACTIVATION_TRANSPOSE_WHC",
1773     "ACTIVATION_TRANSPOSE_HCW",
1774     "ACTIVATION_TRANSPOSE_WCH",
1775     "****",
1776     "****",
1777     "ACTIVATION_TRANSPOSE_CHW",
1778     "ACTIVATION_TRANSPOSE_CWH",
1779 };
1780 
1781 static const char* activation_type_str[] =
1782 {
1783     "ACTIVATION_TYPE_UNSIGNED",
1784     "ACTIVATION_TYPE_SIGNED",
1785 };
1786 
1787 static const char* axi_mem_domain_str[] =
1788 {
1789     "AXI_MEM_DOMAIN_NON_SHARABLE",
1790     "AXI_MEM_DOMAIN_INNER_SHARABLE",
1791     "AXI_MEM_DOMAIN_OUTER_SHARABLE",
1792     "AXI_MEM_DOMAIN_SYSTEM",
1793 };
1794 
1795 static const char* axi_mem_encoding_str[] =
1796 {
1797     "AXI_MEM_ENCODING_DEVICE_NON_BUFFERABLE",
1798     "AXI_MEM_ENCODING_DEVICE_BUFFERABLE",
1799     "AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_NON_BUFFERABLE",
1800     "AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_BUFFERABLE",
1801     "AXI_MEM_ENCODING_WRITE_THROUGH_NO_ALLOCATE",
1802     "AXI_MEM_ENCODING_WRITE_THROUGH_READ_ALLOCATE",
1803     "AXI_MEM_ENCODING_WRITE_THROUGH_WRITE_ALLOCATE",
1804     "AXI_MEM_ENCODING_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE",
1805     "AXI_MEM_ENCODING_WRITE_BACK_NO_ALLOCATE",
1806     "AXI_MEM_ENCODING_WRITE_BACK_READ_ALLOCATE",
1807     "AXI_MEM_ENCODING_WRITE_BACK_WRITE_ALLOCATE",
1808     "AXI_MEM_ENCODING_WRITE_BACK_READ_AND_WRITE_ALLOCATE",
1809 };
1810 
1811 static const char* axi_port_str[] =
1812 {
1813     "AXI_PORT_SRAM",
1814     "AXI_PORT_EXT",
1815 };
1816 
1817 static const char* branch_cond_str[] =
1818 {
1819     "BRANCH_COND_ALWAYS",
1820     "BRANCH_COND_RF_TRUE",
1821 };
1822 
1823 static const char* broadcast_mode_str[] =
1824 {
1825     "BROADCAST_MODE_NONE",
1826     "BROADCAST_MODE_H",
1827     "BROADCAST_MODE_W",
1828     "BROADCAST_MODE_HW",
1829     "BROADCAST_MODE_C",
1830     "BROADCAST_MODE_CH",
1831     "BROADCAST_MODE_CW",
1832     "BROADCAST_MODE_CWH",
1833     "BROADCAST_MODE_SCALAR",
1834 };
1835 
1836 static const char* cmd0_opcode_str[] =
1837 {
1838     "CMD0_OPCODE_NPU_OP_STOP",
1839     "CMD0_OPCODE_NPU_OP_IRQ",
1840     "CMD0_OPCODE_NPU_OP_CONV",
1841     "CMD0_OPCODE_NPU_OP_DEPTHWISE",
1842     "****",
1843     "CMD0_OPCODE_NPU_OP_POOL",
1844     "CMD0_OPCODE_NPU_OP_ELEMENTWISE",
1845     "CMD0_OPCODE_NPU_OP_RESIZE",
1846     "****",
1847     "****",
1848     "****",
1849     "****",
1850     "****",
1851     "****",
1852     "****",
1853     "****",
1854     "CMD0_OPCODE_NPU_OP_DMA_START",
1855     "CMD0_OPCODE_NPU_OP_DMA_WAIT",
1856     "CMD0_OPCODE_NPU_OP_KERNEL_WAIT",
1857     "CMD0_OPCODE_NPU_OP_PMU_MASK",
1858     "****",
1859     "****",
1860     "****",
1861     "****",
1862     "****",
1863     "****",
1864     "****",
1865     "****",
1866     "****",
1867     "****",
1868     "****",
1869     "****",
1870     "****",
1871     "****",
1872     "****",
1873     "****",
1874     "****",
1875     "****",
1876     "****",
1877     "****",
1878     "****",
1879     "****",
1880     "****",
1881     "****",
1882     "****",
1883     "****",
1884     "****",
1885     "****",
1886     "****",
1887     "****",
1888     "****",
1889     "****",
1890     "****",
1891     "****",
1892     "****",
1893     "****",
1894     "****",
1895     "****",
1896     "****",
1897     "****",
1898     "****",
1899     "****",
1900     "****",
1901     "****",
1902     "****",
1903     "****",
1904     "****",
1905     "****",
1906     "****",
1907     "****",
1908     "****",
1909     "****",
1910     "****",
1911     "****",
1912     "****",
1913     "****",
1914     "****",
1915     "****",
1916     "****",
1917     "****",
1918     "****",
1919     "****",
1920     "****",
1921     "****",
1922     "****",
1923     "****",
1924     "****",
1925     "****",
1926     "****",
1927     "****",
1928     "****",
1929     "****",
1930     "****",
1931     "****",
1932     "****",
1933     "****",
1934     "****",
1935     "****",
1936     "****",
1937     "****",
1938     "****",
1939     "****",
1940     "****",
1941     "****",
1942     "****",
1943     "****",
1944     "****",
1945     "****",
1946     "****",
1947     "****",
1948     "****",
1949     "****",
1950     "****",
1951     "****",
1952     "****",
1953     "****",
1954     "****",
1955     "****",
1956     "****",
1957     "****",
1958     "****",
1959     "****",
1960     "****",
1961     "****",
1962     "****",
1963     "****",
1964     "****",
1965     "****",
1966     "****",
1967     "****",
1968     "****",
1969     "****",
1970     "****",
1971     "****",
1972     "****",
1973     "****",
1974     "****",
1975     "****",
1976     "****",
1977     "****",
1978     "****",
1979     "****",
1980     "****",
1981     "****",
1982     "****",
1983     "****",
1984     "****",
1985     "****",
1986     "****",
1987     "****",
1988     "****",
1989     "****",
1990     "****",
1991     "****",
1992     "****",
1993     "****",
1994     "****",
1995     "****",
1996     "****",
1997     "****",
1998     "****",
1999     "****",
2000     "****",
2001     "****",
2002     "****",
2003     "****",
2004     "****",
2005     "****",
2006     "****",
2007     "****",
2008     "****",
2009     "****",
2010     "****",
2011     "****",
2012     "****",
2013     "****",
2014     "****",
2015     "****",
2016     "****",
2017     "****",
2018     "****",
2019     "****",
2020     "****",
2021     "****",
2022     "****",
2023     "****",
2024     "****",
2025     "****",
2026     "****",
2027     "****",
2028     "****",
2029     "****",
2030     "****",
2031     "****",
2032     "****",
2033     "****",
2034     "****",
2035     "****",
2036     "****",
2037     "****",
2038     "****",
2039     "****",
2040     "****",
2041     "****",
2042     "****",
2043     "****",
2044     "****",
2045     "****",
2046     "****",
2047     "****",
2048     "****",
2049     "****",
2050     "****",
2051     "****",
2052     "****",
2053     "****",
2054     "****",
2055     "****",
2056     "****",
2057     "****",
2058     "****",
2059     "****",
2060     "****",
2061     "****",
2062     "****",
2063     "****",
2064     "****",
2065     "****",
2066     "****",
2067     "****",
2068     "****",
2069     "****",
2070     "****",
2071     "****",
2072     "****",
2073     "****",
2074     "****",
2075     "****",
2076     "****",
2077     "****",
2078     "****",
2079     "****",
2080     "****",
2081     "****",
2082     "****",
2083     "****",
2084     "****",
2085     "****",
2086     "****",
2087     "****",
2088     "****",
2089     "****",
2090     "****",
2091     "****",
2092     "****",
2093     "****",
2094     "CMD0_OPCODE_NPU_SET_IFM_PAD_TOP",
2095     "CMD0_OPCODE_NPU_SET_IFM_PAD_LEFT",
2096     "CMD0_OPCODE_NPU_SET_IFM_PAD_RIGHT",
2097     "CMD0_OPCODE_NPU_SET_IFM_PAD_BOTTOM",
2098     "CMD0_OPCODE_NPU_SET_IFM_DEPTH_M1",
2099     "CMD0_OPCODE_NPU_SET_IFM_PRECISION",
2100     "****",
2101     "CMD0_OPCODE_NPU_SET_IFM_UPSCALE",
2102     "CMD0_OPCODE_NPU_SET_IFM_BROADCAST",
2103     "CMD0_OPCODE_NPU_SET_IFM_ZERO_POINT",
2104     "CMD0_OPCODE_NPU_SET_IFM_WIDTH0_M1",
2105     "CMD0_OPCODE_NPU_SET_IFM_HEIGHT0_M1",
2106     "CMD0_OPCODE_NPU_SET_IFM_HEIGHT1_M1",
2107     "****",
2108     "****",
2109     "CMD0_OPCODE_NPU_SET_IFM_REGION",
2110     "****",
2111     "CMD0_OPCODE_NPU_SET_OFM_WIDTH_M1",
2112     "CMD0_OPCODE_NPU_SET_OFM_HEIGHT_M1",
2113     "CMD0_OPCODE_NPU_SET_OFM_DEPTH_M1",
2114     "CMD0_OPCODE_NPU_SET_OFM_PRECISION",
2115     "CMD0_OPCODE_NPU_SET_OFM_BLK_WIDTH_M1",
2116     "CMD0_OPCODE_NPU_SET_OFM_BLK_HEIGHT_M1",
2117     "CMD0_OPCODE_NPU_SET_OFM_BLK_DEPTH_M1",
2118     "CMD0_OPCODE_NPU_SET_OFM_ZERO_POINT",
2119     "****",
2120     "CMD0_OPCODE_NPU_SET_OFM_WIDTH0_M1",
2121     "CMD0_OPCODE_NPU_SET_OFM_HEIGHT0_M1",
2122     "CMD0_OPCODE_NPU_SET_OFM_HEIGHT1_M1",
2123     "****",
2124     "****",
2125     "CMD0_OPCODE_NPU_SET_OFM_REGION",
2126     "CMD0_OPCODE_NPU_SET_KERNEL_WIDTH_M1",
2127     "CMD0_OPCODE_NPU_SET_KERNEL_HEIGHT_M1",
2128     "CMD0_OPCODE_NPU_SET_KERNEL_STRIDE",
2129     "****",
2130     "CMD0_OPCODE_NPU_SET_ACC_FORMAT",
2131     "CMD0_OPCODE_NPU_SET_ACTIVATION",
2132     "CMD0_OPCODE_NPU_SET_ACTIVATION_MIN",
2133     "CMD0_OPCODE_NPU_SET_ACTIVATION_MAX",
2134     "CMD0_OPCODE_NPU_SET_WEIGHT_REGION",
2135     "CMD0_OPCODE_NPU_SET_SCALE_REGION",
2136     "CMD0_OPCODE_NPU_SET_RESIZE_X_SCALE_N_M1",
2137     "CMD0_OPCODE_NPU_SET_RESIZE_Y_SCALE_N_M1",
2138     "CMD0_OPCODE_NPU_SET_RESIZE_X_OFFSET",
2139     "CMD0_OPCODE_NPU_SET_RESIZE_Y_OFFSET",
2140     "CMD0_OPCODE_NPU_SET_WEIGHT_FORMAT",
2141     "CMD0_OPCODE_NPU_SET_BLOCKDEP",
2142     "CMD0_OPCODE_NPU_SET_DMA0_SRC_REGION",
2143     "CMD0_OPCODE_NPU_SET_DMA0_DST_REGION",
2144     "CMD0_OPCODE_NPU_SET_DMA0_SIZE0",
2145     "CMD0_OPCODE_NPU_SET_DMA0_SIZE1",
2146     "CMD0_OPCODE_NPU_SET_DMA0_IDX_REGION",
2147     "****",
2148     "****",
2149     "****",
2150     "****",
2151     "****",
2152     "****",
2153     "****",
2154     "****",
2155     "****",
2156     "****",
2157     "****",
2158     "****",
2159     "****",
2160     "****",
2161     "****",
2162     "****",
2163     "****",
2164     "****",
2165     "****",
2166     "****",
2167     "****",
2168     "****",
2169     "****",
2170     "****",
2171     "****",
2172     "****",
2173     "****",
2174     "****",
2175     "****",
2176     "****",
2177     "****",
2178     "****",
2179     "****",
2180     "****",
2181     "****",
2182     "****",
2183     "****",
2184     "****",
2185     "****",
2186     "****",
2187     "****",
2188     "****",
2189     "****",
2190     "****",
2191     "****",
2192     "****",
2193     "****",
2194     "****",
2195     "****",
2196     "****",
2197     "****",
2198     "****",
2199     "****",
2200     "****",
2201     "****",
2202     "****",
2203     "****",
2204     "****",
2205     "****",
2206     "****",
2207     "****",
2208     "****",
2209     "****",
2210     "****",
2211     "****",
2212     "****",
2213     "****",
2214     "****",
2215     "****",
2216     "****",
2217     "****",
2218     "****",
2219     "****",
2220     "****",
2221     "****",
2222     "CMD0_OPCODE_NPU_SET_IFM2_BROADCAST",
2223     "****",
2224     "****",
2225     "****",
2226     "****",
2227     "CMD0_OPCODE_NPU_SET_IFM2_PRECISION",
2228     "****",
2229     "****",
2230     "****",
2231     "CMD0_OPCODE_NPU_SET_IFM2_ZERO_POINT",
2232     "CMD0_OPCODE_NPU_SET_IFM2_WIDTH0_M1",
2233     "CMD0_OPCODE_NPU_SET_IFM2_HEIGHT0_M1",
2234     "CMD0_OPCODE_NPU_SET_IFM2_HEIGHT1_M1",
2235     "****",
2236     "****",
2237     "CMD0_OPCODE_NPU_SET_IFM2_REGION",
2238 };
2239 
2240 static const char* cmd1_opcode_str[] =
2241 {
2242     "CMD1_OPCODE_NPU_SET_IFM_BASE0",
2243     "CMD1_OPCODE_NPU_SET_IFM_BASE1",
2244     "CMD1_OPCODE_NPU_SET_IFM_BASE2",
2245     "CMD1_OPCODE_NPU_SET_IFM_BASE3",
2246     "CMD1_OPCODE_NPU_SET_IFM_STRIDE_X",
2247     "CMD1_OPCODE_NPU_SET_IFM_STRIDE_Y",
2248     "CMD1_OPCODE_NPU_SET_IFM_STRIDE_C",
2249     "****",
2250     "****",
2251     "****",
2252     "****",
2253     "****",
2254     "****",
2255     "****",
2256     "****",
2257     "****",
2258     "CMD1_OPCODE_NPU_SET_OFM_BASE0",
2259     "CMD1_OPCODE_NPU_SET_OFM_BASE1",
2260     "CMD1_OPCODE_NPU_SET_OFM_BASE2",
2261     "CMD1_OPCODE_NPU_SET_OFM_BASE3",
2262     "CMD1_OPCODE_NPU_SET_OFM_STRIDE_X",
2263     "CMD1_OPCODE_NPU_SET_OFM_STRIDE_Y",
2264     "CMD1_OPCODE_NPU_SET_OFM_STRIDE_C",
2265     "****",
2266     "****",
2267     "****",
2268     "****",
2269     "****",
2270     "****",
2271     "****",
2272     "****",
2273     "****",
2274     "CMD1_OPCODE_NPU_SET_WEIGHT_BASE",
2275     "CMD1_OPCODE_NPU_SET_WEIGHT_LENGTH",
2276     "CMD1_OPCODE_NPU_SET_SCALE_BASE",
2277     "CMD1_OPCODE_NPU_SET_SCALE_LENGTH",
2278     "CMD1_OPCODE_NPU_SET_OFM_SCALE",
2279     "CMD1_OPCODE_NPU_SET_IFM_SCALE",
2280     "CMD1_OPCODE_NPU_SET_IFM2_SCALE",
2281     "CMD1_OPCODE_NPU_SET_OP_SCALAR",
2282     "****",
2283     "****",
2284     "****",
2285     "****",
2286     "****",
2287     "****",
2288     "****",
2289     "****",
2290     "CMD1_OPCODE_NPU_SET_DMA0_SRC",
2291     "CMD1_OPCODE_NPU_SET_DMA0_DST",
2292     "CMD1_OPCODE_NPU_SET_DMA0_LEN",
2293     "CMD1_OPCODE_NPU_SET_DMA0_SRC_STRIDE0",
2294     "CMD1_OPCODE_NPU_SET_DMA0_SRC_STRIDE1",
2295     "CMD1_OPCODE_NPU_SET_DMA0_DST_STRIDE0",
2296     "CMD1_OPCODE_NPU_SET_DMA0_DST_STRIDE1",
2297     "CMD1_OPCODE_NPU_SET_DMA0_IDX",
2298     "CMD1_OPCODE_NPU_SET_DMA0_IDX_MAX",
2299     "CMD1_OPCODE_NPU_SET_DMA0_IDX_SKIP1",
2300     "****",
2301     "****",
2302     "****",
2303     "****",
2304     "****",
2305     "****",
2306     "****",
2307     "****",
2308     "****",
2309     "****",
2310     "****",
2311     "****",
2312     "****",
2313     "****",
2314     "****",
2315     "****",
2316     "****",
2317     "****",
2318     "****",
2319     "****",
2320     "****",
2321     "****",
2322     "****",
2323     "****",
2324     "****",
2325     "****",
2326     "****",
2327     "****",
2328     "****",
2329     "****",
2330     "****",
2331     "****",
2332     "****",
2333     "****",
2334     "****",
2335     "****",
2336     "****",
2337     "****",
2338     "****",
2339     "****",
2340     "****",
2341     "****",
2342     "****",
2343     "****",
2344     "****",
2345     "****",
2346     "****",
2347     "****",
2348     "****",
2349     "****",
2350     "****",
2351     "****",
2352     "****",
2353     "****",
2354     "****",
2355     "****",
2356     "****",
2357     "****",
2358     "****",
2359     "****",
2360     "****",
2361     "****",
2362     "****",
2363     "****",
2364     "****",
2365     "****",
2366     "****",
2367     "****",
2368     "****",
2369     "****",
2370     "CMD1_OPCODE_NPU_SET_IFM2_BASE0",
2371     "CMD1_OPCODE_NPU_SET_IFM2_BASE1",
2372     "CMD1_OPCODE_NPU_SET_IFM2_BASE2",
2373     "CMD1_OPCODE_NPU_SET_IFM2_BASE3",
2374     "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_X",
2375     "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_Y",
2376     "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_C",
2377     "****",
2378     "****",
2379     "****",
2380     "****",
2381     "****",
2382     "****",
2383     "****",
2384     "****",
2385     "****",
2386     "CMD1_OPCODE_NPU_SET_WEIGHT1_BASE",
2387     "CMD1_OPCODE_NPU_SET_WEIGHT1_LENGTH",
2388     "CMD1_OPCODE_NPU_SET_WEIGHT2_BASE",
2389     "CMD1_OPCODE_NPU_SET_WEIGHT2_LENGTH",
2390     "CMD1_OPCODE_NPU_SET_WEIGHT3_BASE",
2391     "CMD1_OPCODE_NPU_SET_WEIGHT3_LENGTH",
2392     "CMD1_OPCODE_NPU_SET_RESIZE_X",
2393     "CMD1_OPCODE_NPU_SET_RESIZE_Y",
2394     "****",
2395     "****",
2396     "****",
2397     "****",
2398     "****",
2399     "****",
2400     "****",
2401     "****",
2402     "****",
2403     "****",
2404     "****",
2405     "****",
2406     "****",
2407     "****",
2408     "****",
2409     "****",
2410     "****",
2411     "****",
2412     "****",
2413     "****",
2414     "****",
2415     "****",
2416     "****",
2417     "****",
2418     "****",
2419     "****",
2420     "****",
2421     "****",
2422     "****",
2423     "****",
2424     "****",
2425     "****",
2426     "****",
2427     "****",
2428     "****",
2429     "****",
2430     "****",
2431     "****",
2432     "****",
2433     "****",
2434     "****",
2435     "****",
2436     "****",
2437     "****",
2438     "****",
2439     "****",
2440     "****",
2441     "****",
2442     "****",
2443     "****",
2444     "****",
2445     "****",
2446     "****",
2447     "****",
2448     "****",
2449     "****",
2450     "****",
2451     "****",
2452     "****",
2453     "****",
2454     "****",
2455     "****",
2456     "****",
2457     "****",
2458     "****",
2459     "****",
2460     "****",
2461     "****",
2462     "****",
2463     "****",
2464     "****",
2465     "****",
2466     "****",
2467     "****",
2468     "****",
2469     "****",
2470     "****",
2471     "****",
2472     "****",
2473     "****",
2474     "****",
2475     "****",
2476     "****",
2477     "****",
2478     "****",
2479     "****",
2480     "****",
2481     "****",
2482     "****",
2483     "****",
2484     "****",
2485     "****",
2486     "****",
2487     "****",
2488     "****",
2489     "****",
2490     "****",
2491     "****",
2492     "****",
2493     "****",
2494     "****",
2495     "****",
2496     "****",
2497     "****",
2498     "CMD1_OPCODE_NPU_OP_BRANCH",
2499 };
2500 
2501 static const char* cmd_ctrl_str[] =
2502 {
2503     "CMD_CTRL_CMD0_CTRL",
2504     "CMD_CTRL_CMD1_CTRL",
2505 };
2506 
2507 static const char* custom_dma_str[] =
2508 {
2509     "CUSTOM_DMA_NOT_IMPLEMENTED",
2510     "CUSTOM_DMA_IMPLEMENTED",
2511 };
2512 
2513 static const char* dma_fault_src_str[] =
2514 {
2515     "DMA_FAULT_SRC_SRAM",
2516     "DMA_FAULT_SRC_EXT",
2517 };
2518 
2519 static const char* dma_idx_mode_str[] =
2520 {
2521     "DMA_IDX_MODE_DISABLED",
2522     "DMA_IDX_MODE_ENABLED",
2523 };
2524 
2525 static const char* dma_region_mode_str[] =
2526 {
2527     "DMA_REGION_MODE_EXTERNAL",
2528     "DMA_REGION_MODE_INTERNAL",
2529 };
2530 
2531 static const char* dma_stride_mode_str[] =
2532 {
2533     "DMA_STRIDE_MODE_D1",
2534     "DMA_STRIDE_MODE_D2",
2535     "DMA_STRIDE_MODE_D3",
2536 };
2537 
2538 static const char* elementwise_mode_str[] =
2539 {
2540     "ELEMENTWISE_MODE_MUL",
2541     "ELEMENTWISE_MODE_ADD",
2542     "ELEMENTWISE_MODE_SUB",
2543     "ELEMENTWISE_MODE_MIN",
2544     "ELEMENTWISE_MODE_MAX",
2545     "ELEMENTWISE_MODE_LRELU",
2546     "ELEMENTWISE_MODE_ABS",
2547     "ELEMENTWISE_MODE_CLZ",
2548     "ELEMENTWISE_MODE_SHR",
2549     "ELEMENTWISE_MODE_SHL",
2550     "ELEMENTWISE_MODE_LSR",
2551     "ELEMENTWISE_MODE_DIV",
2552     "****",
2553     "****",
2554     "****",
2555     "****",
2556     "ELEMENTWISE_MODE_CMP_EQ",
2557     "ELEMENTWISE_MODE_CMP_NE",
2558     "ELEMENTWISE_MODE_CMP_GE",
2559     "ELEMENTWISE_MODE_CMP_GT",
2560     "****",
2561     "****",
2562     "****",
2563     "****",
2564     "****",
2565     "****",
2566     "****",
2567     "****",
2568     "****",
2569     "****",
2570     "****",
2571     "****",
2572     "****",
2573     "ELEMENTWISE_MODE_AND",
2574     "ELEMENTWISE_MODE_OR",
2575     "ELEMENTWISE_MODE_XOR",
2576     "ELEMENTWISE_MODE_NOT",
2577     "****",
2578     "****",
2579     "****",
2580     "****",
2581     "****",
2582     "ELEMENTWISE_MODE_AND_NOT",
2583 };
2584 
2585 static const char* ifm_upscale_mode_str[] =
2586 {
2587     "IFM_UPSCALE_MODE_NONE",
2588     "IFM_UPSCALE_MODE_NEAREST",
2589     "IFM_UPSCALE_MODE_ZEROS",
2590 };
2591 
2592 static const char* kernel_decomposition_str[] =
2593 {
2594     "KERNEL_DECOMPOSITION_D8X8",
2595     "KERNEL_DECOMPOSITION_D4X4",
2596 };
2597 
2598 static const char* kernel_dilation_str[] =
2599 {
2600     "KERNEL_DILATION_NONE",
2601     "KERNEL_DILATION_X2",
2602 };
2603 
2604 static const char* max_beats_str[] =
2605 {
2606     "MAX_BEATS_B64",
2607     "MAX_BEATS_B128",
2608     "MAX_BEATS_B256",
2609 };
2610 
2611 static const char* microblock_str[] =
2612 {
2613     "MICROBLOCK_U1X1",
2614     "MICROBLOCK_U1X2",
2615     "MICROBLOCK_U1X4",
2616     "MICROBLOCK_U2X2",
2617     "MICROBLOCK_U2X4",
2618     "MICROBLOCK_U4X4",
2619 };
2620 
2621 static const char* ofm_scale_mode_str[] =
2622 {
2623     "OFM_SCALE_MODE_PER_CHANNEL",
2624     "OFM_SCALE_MODE_GLOBAL",
2625 };
2626 
2627 static const char* pmu_axi_channel_str[] =
2628 {
2629     "PMU_AXI_CHANNEL_RD_CMD",
2630     "PMU_AXI_CHANNEL_RD_IFM",
2631     "PMU_AXI_CHANNEL_RD_WEIGHTS",
2632     "PMU_AXI_CHANNEL_RD_SCALE_BIAS",
2633     "PMU_AXI_CHANNEL_RD_MEM2MEM",
2634     "PMU_AXI_CHANNEL_RD_IFM_STREAM",
2635     "PMU_AXI_CHANNEL_RD_MEM2MEM_IDX",
2636     "****",
2637     "PMU_AXI_CHANNEL_WR_OFM",
2638     "PMU_AXI_CHANNEL_WR_MEM2MEM",
2639 };
2640 
2641 static const char* pmu_event_str[] =
2642 {
2643     "PMU_EVENT_NO_EVENT",
2644     "****",
2645     "****",
2646     "****",
2647     "****",
2648     "****",
2649     "****",
2650     "****",
2651     "****",
2652     "****",
2653     "****",
2654     "****",
2655     "****",
2656     "****",
2657     "****",
2658     "****",
2659     "****",
2660     "PMU_EVENT_CYCLE",
2661     "****",
2662     "****",
2663     "****",
2664     "****",
2665     "****",
2666     "****",
2667     "****",
2668     "****",
2669     "****",
2670     "****",
2671     "****",
2672     "****",
2673     "****",
2674     "****",
2675     "PMU_EVENT_NPU_IDLE",
2676     "PMU_EVENT_CC_STALLED_ON_BLOCKDEP",
2677     "****",
2678     "PMU_EVENT_NPU_ACTIVE",
2679     "****",
2680     "****",
2681     "****",
2682     "****",
2683     "****",
2684     "****",
2685     "****",
2686     "****",
2687     "****",
2688     "****",
2689     "****",
2690     "****",
2691     "PMU_EVENT_MAC_ACTIVE",
2692     "****",
2693     "****",
2694     "PMU_EVENT_MAC_DPU_ACTIVE",
2695     "PMU_EVENT_MAC_STALLED_BY_W_OR_ACC",
2696     "PMU_EVENT_MAC_STALLED_BY_W",
2697     "PMU_EVENT_MAC_STALLED_BY_ACC",
2698     "PMU_EVENT_MAC_STALLED_BY_IB",
2699     "****",
2700     "****",
2701     "****",
2702     "****",
2703     "****",
2704     "****",
2705     "****",
2706     "****",
2707     "PMU_EVENT_AO_ACTIVE",
2708     "****",
2709     "****",
2710     "PMU_EVENT_AO_STALLED_BY_BS_OR_OB",
2711     "PMU_EVENT_AO_STALLED_BY_BS",
2712     "PMU_EVENT_AO_STALLED_BY_OB",
2713     "PMU_EVENT_AO_STALLED_BY_AB_OR_CB",
2714     "PMU_EVENT_AO_STALLED_BY_AB",
2715     "PMU_EVENT_AO_STALLED_BY_CB",
2716     "****",
2717     "****",
2718     "****",
2719     "****",
2720     "****",
2721     "****",
2722     "****",
2723     "PMU_EVENT_WD_ACTIVE",
2724     "PMU_EVENT_WD_STALLED",
2725     "****",
2726     "PMU_EVENT_WD_STALLED_BY_WD_BUF",
2727     "PMU_EVENT_WD_STALLED_BY_WS_FC",
2728     "PMU_EVENT_WD_STALLED_BY_WS_TC",
2729     "****",
2730     "****",
2731     "****",
2732     "PMU_EVENT_WD_TRANS_WBLK",
2733     "PMU_EVENT_WD_TRANS_WS_FC",
2734     "PMU_EVENT_WD_TRANS_WS_TC",
2735     "****",
2736     "****",
2737     "****",
2738     "****",
2739     "PMU_EVENT_WD_STALLED_BY_WS_SC0",
2740     "PMU_EVENT_WD_STALLED_BY_WS_SC1",
2741     "PMU_EVENT_WD_STALLED_BY_WS_SC2",
2742     "PMU_EVENT_WD_STALLED_BY_WS_SC3",
2743     "PMU_EVENT_WD_PARSE_ACTIVE_SC0",
2744     "PMU_EVENT_WD_PARSE_ACTIVE_SC1",
2745     "PMU_EVENT_WD_PARSE_ACTIVE_SC2",
2746     "PMU_EVENT_WD_PARSE_ACTIVE_SC3",
2747     "PMU_EVENT_WD_PARSE_STALL_SC0",
2748     "PMU_EVENT_WD_PARSE_STALL_SC1",
2749     "PMU_EVENT_WD_PARSE_STALL_SC2",
2750     "PMU_EVENT_WD_PARSE_STALL_SC3",
2751     "PMU_EVENT_WD_PARSE_STALL_IN_SC0",
2752     "PMU_EVENT_WD_PARSE_STALL_IN_SC1",
2753     "PMU_EVENT_WD_PARSE_STALL_IN_SC2",
2754     "PMU_EVENT_WD_PARSE_STALL_IN_SC3",
2755     "PMU_EVENT_WD_PARSE_STALL_OUT_SC0",
2756     "PMU_EVENT_WD_PARSE_STALL_OUT_SC1",
2757     "PMU_EVENT_WD_PARSE_STALL_OUT_SC2",
2758     "PMU_EVENT_WD_PARSE_STALL_OUT_SC3",
2759     "PMU_EVENT_WD_TRANS_WS_SC0",
2760     "PMU_EVENT_WD_TRANS_WS_SC1",
2761     "PMU_EVENT_WD_TRANS_WS_SC2",
2762     "PMU_EVENT_WD_TRANS_WS_SC3",
2763     "PMU_EVENT_WD_TRANS_WB0",
2764     "PMU_EVENT_WD_TRANS_WB1",
2765     "PMU_EVENT_WD_TRANS_WB2",
2766     "PMU_EVENT_WD_TRANS_WB3",
2767     "****",
2768     "****",
2769     "****",
2770     "****",
2771     "PMU_EVENT_SRAM_RD_TRANS_ACCEPTED",
2772     "PMU_EVENT_SRAM_RD_TRANS_COMPLETED",
2773     "PMU_EVENT_SRAM_RD_DATA_BEAT_RECEIVED",
2774     "PMU_EVENT_SRAM_RD_TRAN_REQ_STALLED",
2775     "PMU_EVENT_SRAM_WR_TRANS_ACCEPTED",
2776     "PMU_EVENT_SRAM_WR_TRANS_COMPLETED_M",
2777     "PMU_EVENT_SRAM_WR_TRANS_COMPLETED_S",
2778     "PMU_EVENT_SRAM_WR_DATA_BEAT_WRITTEN",
2779     "PMU_EVENT_SRAM_WR_TRAN_REQ_STALLED",
2780     "PMU_EVENT_SRAM_WR_DATA_BEAT_STALLED",
2781     "****",
2782     "****",
2783     "PMU_EVENT_SRAM_ENABLED_CYCLES",
2784     "****",
2785     "PMU_EVENT_SRAM_RD_STALL_LIMIT",
2786     "PMU_EVENT_SRAM_WR_STALL_LIMIT",
2787     "****",
2788     "****",
2789     "****",
2790     "****",
2791     "****",
2792     "****",
2793     "****",
2794     "****",
2795     "****",
2796     "****",
2797     "****",
2798     "****",
2799     "****",
2800     "****",
2801     "****",
2802     "****",
2803     "PMU_EVENT_AXI_LATENCY_ANY",
2804     "PMU_EVENT_AXI_LATENCY_32",
2805     "PMU_EVENT_AXI_LATENCY_64",
2806     "PMU_EVENT_AXI_LATENCY_128",
2807     "PMU_EVENT_AXI_LATENCY_256",
2808     "PMU_EVENT_AXI_LATENCY_512",
2809     "PMU_EVENT_AXI_LATENCY_1024",
2810     "****",
2811     "****",
2812     "****",
2813     "****",
2814     "****",
2815     "****",
2816     "****",
2817     "****",
2818     "****",
2819     "PMU_EVENT_ECC_DMA",
2820     "PMU_EVENT_ECC_MAC_IB",
2821     "PMU_EVENT_ECC_MAC_AB",
2822     "PMU_EVENT_ECC_AO_CB",
2823     "PMU_EVENT_ECC_AO_OB",
2824     "PMU_EVENT_ECC_AO_LUT",
2825     "****",
2826     "****",
2827     "****",
2828     "****",
2829     "****",
2830     "****",
2831     "****",
2832     "****",
2833     "****",
2834     "****",
2835     "****",
2836     "****",
2837     "****",
2838     "****",
2839     "****",
2840     "****",
2841     "****",
2842     "****",
2843     "****",
2844     "****",
2845     "****",
2846     "****",
2847     "****",
2848     "****",
2849     "****",
2850     "****",
2851     "****",
2852     "****",
2853     "****",
2854     "****",
2855     "****",
2856     "****",
2857     "****",
2858     "****",
2859     "****",
2860     "****",
2861     "****",
2862     "****",
2863     "****",
2864     "****",
2865     "****",
2866     "****",
2867     "****",
2868     "****",
2869     "****",
2870     "****",
2871     "****",
2872     "****",
2873     "****",
2874     "****",
2875     "****",
2876     "****",
2877     "****",
2878     "****",
2879     "****",
2880     "****",
2881     "****",
2882     "****",
2883     "****",
2884     "****",
2885     "****",
2886     "****",
2887     "****",
2888     "****",
2889     "****",
2890     "****",
2891     "****",
2892     "****",
2893     "****",
2894     "****",
2895     "****",
2896     "****",
2897     "****",
2898     "****",
2899     "****",
2900     "****",
2901     "****",
2902     "****",
2903     "****",
2904     "****",
2905     "****",
2906     "****",
2907     "****",
2908     "****",
2909     "****",
2910     "****",
2911     "****",
2912     "****",
2913     "****",
2914     "****",
2915     "****",
2916     "****",
2917     "****",
2918     "****",
2919     "****",
2920     "****",
2921     "****",
2922     "****",
2923     "****",
2924     "****",
2925     "****",
2926     "****",
2927     "****",
2928     "****",
2929     "****",
2930     "****",
2931     "****",
2932     "****",
2933     "****",
2934     "****",
2935     "****",
2936     "****",
2937     "****",
2938     "****",
2939     "****",
2940     "****",
2941     "****",
2942     "****",
2943     "****",
2944     "****",
2945     "****",
2946     "****",
2947     "****",
2948     "****",
2949     "****",
2950     "****",
2951     "****",
2952     "****",
2953     "****",
2954     "****",
2955     "****",
2956     "****",
2957     "****",
2958     "****",
2959     "****",
2960     "****",
2961     "****",
2962     "****",
2963     "****",
2964     "****",
2965     "****",
2966     "****",
2967     "****",
2968     "****",
2969     "****",
2970     "****",
2971     "****",
2972     "****",
2973     "****",
2974     "****",
2975     "****",
2976     "****",
2977     "****",
2978     "****",
2979     "****",
2980     "****",
2981     "****",
2982     "****",
2983     "****",
2984     "****",
2985     "****",
2986     "****",
2987     "****",
2988     "****",
2989     "****",
2990     "****",
2991     "****",
2992     "****",
2993     "****",
2994     "****",
2995     "****",
2996     "****",
2997     "****",
2998     "****",
2999     "****",
3000     "****",
3001     "****",
3002     "****",
3003     "****",
3004     "****",
3005     "****",
3006     "****",
3007     "****",
3008     "****",
3009     "****",
3010     "****",
3011     "****",
3012     "****",
3013     "****",
3014     "****",
3015     "****",
3016     "****",
3017     "****",
3018     "****",
3019     "****",
3020     "****",
3021     "****",
3022     "****",
3023     "****",
3024     "****",
3025     "****",
3026     "****",
3027     "PMU_EVENT_EXT_RD_TRANS_ACCEPTED",
3028     "PMU_EVENT_EXT_RD_TRANS_COMPLETED",
3029     "PMU_EVENT_EXT_RD_DATA_BEAT_RECEIVED",
3030     "PMU_EVENT_EXT_RD_TRAN_REQ_STALLED",
3031     "PMU_EVENT_EXT_WR_TRANS_ACCEPTED",
3032     "PMU_EVENT_EXT_WR_TRANS_COMPLETED_M",
3033     "PMU_EVENT_EXT_WR_TRANS_COMPLETED_S",
3034     "PMU_EVENT_EXT_WR_DATA_BEAT_WRITTEN",
3035     "PMU_EVENT_EXT_WR_TRAN_REQ_STALLED",
3036     "PMU_EVENT_EXT_WR_DATA_BEAT_STALLED",
3037     "****",
3038     "****",
3039     "PMU_EVENT_EXT_ENABLED_CYCLES",
3040     "****",
3041     "PMU_EVENT_EXT_RD_STALL_LIMIT",
3042     "PMU_EVENT_EXT_WR_STALL_LIMIT",
3043     "****",
3044     "****",
3045     "****",
3046     "****",
3047     "****",
3048     "****",
3049     "****",
3050     "****",
3051     "****",
3052     "****",
3053     "****",
3054     "****",
3055     "****",
3056     "****",
3057     "****",
3058     "****",
3059     "****",
3060     "****",
3061     "****",
3062     "****",
3063     "****",
3064     "****",
3065     "****",
3066     "****",
3067     "****",
3068     "****",
3069     "****",
3070     "****",
3071     "****",
3072     "****",
3073     "****",
3074     "****",
3075     "****",
3076     "****",
3077     "****",
3078     "****",
3079     "****",
3080     "****",
3081     "****",
3082     "****",
3083     "****",
3084     "****",
3085     "****",
3086     "****",
3087     "****",
3088     "****",
3089     "****",
3090     "****",
3091     "****",
3092     "****",
3093     "****",
3094     "****",
3095     "****",
3096     "****",
3097     "****",
3098     "****",
3099     "****",
3100     "****",
3101     "****",
3102     "****",
3103     "****",
3104     "****",
3105     "****",
3106     "****",
3107     "****",
3108     "****",
3109     "****",
3110     "****",
3111     "****",
3112     "****",
3113     "****",
3114     "****",
3115     "****",
3116     "****",
3117     "****",
3118     "****",
3119     "****",
3120     "****",
3121     "****",
3122     "****",
3123     "****",
3124     "****",
3125     "****",
3126     "****",
3127     "****",
3128     "****",
3129     "****",
3130     "****",
3131     "****",
3132     "****",
3133     "****",
3134     "****",
3135     "****",
3136     "****",
3137     "****",
3138     "****",
3139     "****",
3140     "****",
3141     "****",
3142     "****",
3143     "****",
3144     "****",
3145     "****",
3146     "****",
3147     "****",
3148     "****",
3149     "****",
3150     "****",
3151     "****",
3152     "****",
3153     "****",
3154     "****",
3155     "PMU_EVENT_SRAM0_RD_TRANS_ACCEPTED",
3156     "PMU_EVENT_SRAM0_RD_TRANS_COMPLETED",
3157     "PMU_EVENT_SRAM0_RD_DATA_BEAT_RECEIVED",
3158     "PMU_EVENT_SRAM0_RD_TRAN_REQ_STALLED",
3159     "PMU_EVENT_SRAM0_WR_TRANS_ACCEPTED",
3160     "PMU_EVENT_SRAM0_WR_TRANS_COMPLETED_M",
3161     "PMU_EVENT_SRAM0_WR_TRANS_COMPLETED_S",
3162     "PMU_EVENT_SRAM0_WR_DATA_BEAT_WRITTEN",
3163     "PMU_EVENT_SRAM0_WR_TRAN_REQ_STALLED",
3164     "PMU_EVENT_SRAM0_WR_DATA_BEAT_STALLED",
3165     "****",
3166     "****",
3167     "PMU_EVENT_SRAM0_ENABLED_CYCLES",
3168     "****",
3169     "PMU_EVENT_SRAM0_RD_STALL_LIMIT",
3170     "PMU_EVENT_SRAM0_WR_STALL_LIMIT",
3171     "PMU_EVENT_SRAM1_RD_TRANS_ACCEPTED",
3172     "PMU_EVENT_SRAM1_RD_TRANS_COMPLETED",
3173     "PMU_EVENT_SRAM1_RD_DATA_BEAT_RECEIVED",
3174     "PMU_EVENT_SRAM1_RD_TRAN_REQ_STALLED",
3175     "PMU_EVENT_SRAM1_WR_TRANS_ACCEPTED",
3176     "PMU_EVENT_SRAM1_WR_TRANS_COMPLETED_M",
3177     "PMU_EVENT_SRAM1_WR_TRANS_COMPLETED_S",
3178     "PMU_EVENT_SRAM1_WR_DATA_BEAT_WRITTEN",
3179     "PMU_EVENT_SRAM1_WR_TRAN_REQ_STALLED",
3180     "PMU_EVENT_SRAM1_WR_DATA_BEAT_STALLED",
3181     "****",
3182     "****",
3183     "PMU_EVENT_SRAM1_ENABLED_CYCLES",
3184     "****",
3185     "PMU_EVENT_SRAM1_RD_STALL_LIMIT",
3186     "PMU_EVENT_SRAM1_WR_STALL_LIMIT",
3187     "PMU_EVENT_SRAM2_RD_TRANS_ACCEPTED",
3188     "PMU_EVENT_SRAM2_RD_TRANS_COMPLETED",
3189     "PMU_EVENT_SRAM2_RD_DATA_BEAT_RECEIVED",
3190     "PMU_EVENT_SRAM2_RD_TRAN_REQ_STALLED",
3191     "PMU_EVENT_SRAM2_WR_TRANS_ACCEPTED",
3192     "PMU_EVENT_SRAM2_WR_TRANS_COMPLETED_M",
3193     "PMU_EVENT_SRAM2_WR_TRANS_COMPLETED_S",
3194     "PMU_EVENT_SRAM2_WR_DATA_BEAT_WRITTEN",
3195     "PMU_EVENT_SRAM2_WR_TRAN_REQ_STALLED",
3196     "PMU_EVENT_SRAM2_WR_DATA_BEAT_STALLED",
3197     "****",
3198     "****",
3199     "PMU_EVENT_SRAM2_ENABLED_CYCLES",
3200     "****",
3201     "PMU_EVENT_SRAM2_RD_STALL_LIMIT",
3202     "PMU_EVENT_SRAM2_WR_STALL_LIMIT",
3203     "PMU_EVENT_SRAM3_RD_TRANS_ACCEPTED",
3204     "PMU_EVENT_SRAM3_RD_TRANS_COMPLETED",
3205     "PMU_EVENT_SRAM3_RD_DATA_BEAT_RECEIVED",
3206     "PMU_EVENT_SRAM3_RD_TRAN_REQ_STALLED",
3207     "PMU_EVENT_SRAM3_WR_TRANS_ACCEPTED",
3208     "PMU_EVENT_SRAM3_WR_TRANS_COMPLETED_M",
3209     "PMU_EVENT_SRAM3_WR_TRANS_COMPLETED_S",
3210     "PMU_EVENT_SRAM3_WR_DATA_BEAT_WRITTEN",
3211     "PMU_EVENT_SRAM3_WR_TRAN_REQ_STALLED",
3212     "PMU_EVENT_SRAM3_WR_DATA_BEAT_STALLED",
3213     "****",
3214     "****",
3215     "PMU_EVENT_SRAM3_ENABLED_CYCLES",
3216     "****",
3217     "PMU_EVENT_SRAM3_RD_STALL_LIMIT",
3218     "PMU_EVENT_SRAM3_WR_STALL_LIMIT",
3219     "****",
3220     "****",
3221     "****",
3222     "****",
3223     "****",
3224     "****",
3225     "****",
3226     "****",
3227     "****",
3228     "****",
3229     "****",
3230     "****",
3231     "****",
3232     "****",
3233     "****",
3234     "****",
3235     "****",
3236     "****",
3237     "****",
3238     "****",
3239     "****",
3240     "****",
3241     "****",
3242     "****",
3243     "****",
3244     "****",
3245     "****",
3246     "****",
3247     "****",
3248     "****",
3249     "****",
3250     "****",
3251     "****",
3252     "****",
3253     "****",
3254     "****",
3255     "****",
3256     "****",
3257     "****",
3258     "****",
3259     "****",
3260     "****",
3261     "****",
3262     "****",
3263     "****",
3264     "****",
3265     "****",
3266     "****",
3267     "****",
3268     "****",
3269     "****",
3270     "****",
3271     "****",
3272     "****",
3273     "****",
3274     "****",
3275     "****",
3276     "****",
3277     "****",
3278     "****",
3279     "****",
3280     "****",
3281     "****",
3282     "****",
3283     "PMU_EVENT_EXT0_RD_TRANS_ACCEPTED",
3284     "PMU_EVENT_EXT0_RD_TRANS_COMPLETED",
3285     "PMU_EVENT_EXT0_RD_DATA_BEAT_RECEIVED",
3286     "PMU_EVENT_EXT0_RD_TRAN_REQ_STALLED",
3287     "PMU_EVENT_EXT0_WR_TRANS_ACCEPTED",
3288     "PMU_EVENT_EXT0_WR_TRANS_COMPLETED_M",
3289     "PMU_EVENT_EXT0_WR_TRANS_COMPLETED_S",
3290     "PMU_EVENT_EXT0_WR_DATA_BEAT_WRITTEN",
3291     "PMU_EVENT_EXT0_WR_TRAN_REQ_STALLED",
3292     "PMU_EVENT_EXT0_WR_DATA_BEAT_STALLED",
3293     "****",
3294     "****",
3295     "PMU_EVENT_EXT0_ENABLED_CYCLES",
3296     "****",
3297     "PMU_EVENT_EXT0_RD_STALL_LIMIT",
3298     "PMU_EVENT_EXT0_WR_STALL_LIMIT",
3299     "PMU_EVENT_EXT1_RD_TRANS_ACCEPTED",
3300     "PMU_EVENT_EXT1_RD_TRANS_COMPLETED",
3301     "PMU_EVENT_EXT1_RD_DATA_BEAT_RECEIVED",
3302     "PMU_EVENT_EXT1_RD_TRAN_REQ_STALLED",
3303     "PMU_EVENT_EXT1_WR_TRANS_ACCEPTED",
3304     "PMU_EVENT_EXT1_WR_TRANS_COMPLETED_M",
3305     "PMU_EVENT_EXT1_WR_TRANS_COMPLETED_S",
3306     "PMU_EVENT_EXT1_WR_DATA_BEAT_WRITTEN",
3307     "PMU_EVENT_EXT1_WR_TRAN_REQ_STALLED",
3308     "PMU_EVENT_EXT1_WR_DATA_BEAT_STALLED",
3309     "****",
3310     "****",
3311     "PMU_EVENT_EXT1_ENABLED_CYCLES",
3312     "****",
3313     "PMU_EVENT_EXT1_RD_STALL_LIMIT",
3314     "PMU_EVENT_EXT1_WR_STALL_LIMIT",
3315 };
3316 
3317 static const char* pmu_port_disable_str[] =
3318 {
3319     "PMU_PORT_DISABLE_ENABLE",
3320     "PMU_PORT_DISABLE_DISABLE",
3321 };
3322 
3323 static const char* pooling_mode_str[] =
3324 {
3325     "POOLING_MODE_MAX",
3326     "POOLING_MODE_AVERAGE",
3327     "POOLING_MODE_REDUCE_SUM",
3328     "POOLING_MODE_SUM",
3329     "POOLING_MODE_NONE",
3330     "POOLING_MODE_MIN",
3331     "POOLING_MODE_ARGMAX_X",
3332     "POOLING_MODE_ARGMAX_Y",
3333 };
3334 
3335 static const char* privilege_level_str[] =
3336 {
3337     "PRIVILEGE_LEVEL_USER",
3338     "PRIVILEGE_LEVEL_PRIVILEGED",
3339 };
3340 
3341 static const char* ram_id_str[] =
3342 {
3343     "RAM_ID_LUT",
3344     "RAM_ID_IB",
3345     "RAM_ID_AB",
3346     "RAM_ID_CB",
3347     "RAM_ID_OB",
3348 };
3349 
3350 static const char* resize_mode_str[] =
3351 {
3352     "RESIZE_MODE_BILINEAR",
3353     "RESIZE_MODE_REPLICATE",
3354     "RESIZE_MODE_NEAREST",
3355 };
3356 
3357 static const char* round_mode_ifm_str[] =
3358 {
3359     "ROUND_MODE_IFM_DOUBLE_SYMMETRIC",
3360     "ROUND_MODE_IFM_NATURAL",
3361 };
3362 
3363 static const char* round_mode_ofm_str[] =
3364 {
3365     "ROUND_MODE_OFM_DOUBLE_SYMMETRIC",
3366     "ROUND_MODE_OFM_NATURAL",
3367     "ROUND_MODE_OFM_DOUBLE_ASYMMETRIC",
3368     "ROUND_MODE_OFM_SYMMETRIC",
3369     "ROUND_MODE_OFM_TRUNCATE_TO_ZERO",
3370     "ROUND_MODE_OFM_TRUNCATE_TO_LOWER",
3371 };
3372 
3373 static const char* security_level_str[] =
3374 {
3375     "SECURITY_LEVEL_SECURE",
3376     "SECURITY_LEVEL_NON_SECURE",
3377 };
3378 
3379 static const char* state_str[] =
3380 {
3381     "STATE_STOPPED",
3382     "STATE_RUNNING",
3383 };
3384 
3385 static const char* wd_active_core_str[] =
3386 {
3387     "WD_ACTIVE_CORE_NONE",
3388     "WD_ACTIVE_CORE_STANDARD",
3389     "WD_ACTIVE_CORE_FAST",
3390     "WD_ACTIVE_CORE_TENSOR",
3391 };
3392 
3393 static const char* weight_format_str[] =
3394 {
3395     "WEIGHT_FORMAT_SWD",
3396     "WEIGHT_FORMAT_FWD",
3397 };
3398 
3399 static const char* weight_order_str[] =
3400 {
3401     "WEIGHT_ORDER_DEPTH_FIRST",
3402     "WEIGHT_ORDER_PART_KERNEL_FIRST",
3403 };
3404 
3405 static const char* weight_sparsity_str[] =
3406 {
3407     "WEIGHT_SPARSITY_NONE",
3408     "WEIGHT_SPARSITY_SPARSE_2_4",
3409 };
3410 
3411 #endif
3412 
3413 // Register type structs
3414 // id_r - ID register
3415 struct id_r
3416 {
3417 #ifndef __cplusplus
3418     union
3419     {
3420         struct
3421         {
3422             uint32_t version_status : 4; // This value is the version of the product
3423             uint32_t version_minor : 4; // This value is the n for the P part of an RnPn release number
3424             uint32_t version_major : 4; // This value is the n for the R part of an RnPn release number
3425             uint32_t product_major : 4; // Product major ID number (unique per base product)
3426             uint32_t arch_patch_rev : 4; // This value is the patch number of the architecture version a.b
3427             uint32_t arch_minor_rev : 8; // This value is the minor architecture version number, b in the architecture version a.b
3428             uint32_t arch_major_rev : 4; // This value is the major architecture version number, a in the architecture version a.b
3429         };
3430         uint32_t word;
3431     };
3432 #else
3433 private:
3434     uint32_t word0;
3435 public:
3436     CONSTEXPR id_r() :
3437         word0(536899585)
3438     {}
3439     CONSTEXPR id_r(uint32_t init) :
3440         word0(init)
3441     {}
3442     CONSTEXPR void operator=(uint32_t value)
3443     {
3444         word0 = value;
3445     }
3446     CONSTEXPR operator uint32_t()
3447     {
3448         return word0;
3449     }
3450     id_r copy()
3451     {
3452         return *this;
3453     }
3454     CONSTEXPR uint32_t get_version_status() const
3455     {
3456         auto v = ((1U << 4) - 1) & (word0 >> 0);
3457         return v;
3458     }
3459     CONSTEXPR id_r& set_version_status(uint32_t value)
3460     {
3461         word0 = (~(((1U << 4) - 1)<<0) & word0) | ((((1U << 4) - 1) & value) << 0);
3462         return *this;
3463     }
3464     CONSTEXPR uint32_t get_version_minor() const
3465     {
3466         auto v = ((1U << 4) - 1) & (word0 >> 4);
3467         return v;
3468     }
3469     CONSTEXPR id_r& set_version_minor(uint32_t value)
3470     {
3471         word0 = (~(((1U << 4) - 1)<<4) & word0) | ((((1U << 4) - 1) & value) << 4);
3472         return *this;
3473     }
3474     CONSTEXPR uint32_t get_version_major() const
3475     {
3476         auto v = ((1U << 4) - 1) & (word0 >> 8);
3477         return v;
3478     }
3479     CONSTEXPR id_r& set_version_major(uint32_t value)
3480     {
3481         word0 = (~(((1U << 4) - 1)<<8) & word0) | ((((1U << 4) - 1) & value) << 8);
3482         return *this;
3483     }
3484     CONSTEXPR uint32_t get_product_major() const
3485     {
3486         auto v = ((1U << 4) - 1) & (word0 >> 12);
3487         return v;
3488     }
3489     CONSTEXPR id_r& set_product_major(uint32_t value)
3490     {
3491         word0 = (~(((1U << 4) - 1)<<12) & word0) | ((((1U << 4) - 1) & value) << 12);
3492         return *this;
3493     }
3494     CONSTEXPR uint32_t get_arch_patch_rev() const
3495     {
3496         auto v = ((1U << 4) - 1) & (word0 >> 16);
3497         return v;
3498     }
3499     CONSTEXPR id_r& set_arch_patch_rev(uint32_t value)
3500     {
3501         word0 = (~(((1U << 4) - 1)<<16) & word0) | ((((1U << 4) - 1) & value) << 16);
3502         return *this;
3503     }
3504     CONSTEXPR uint32_t get_arch_minor_rev() const
3505     {
3506         auto v = ((1U << 8) - 1) & (word0 >> 20);
3507         return v;
3508     }
3509     CONSTEXPR id_r& set_arch_minor_rev(uint32_t value)
3510     {
3511         word0 = (~(((1U << 8) - 1)<<20) & word0) | ((((1U << 8) - 1) & value) << 20);
3512         return *this;
3513     }
3514     CONSTEXPR uint32_t get_arch_major_rev() const
3515     {
3516         auto v = ((1U << 4) - 1) & (word0 >> 28);
3517         return v;
3518     }
3519     CONSTEXPR id_r& set_arch_major_rev(uint32_t value)
3520     {
3521         word0 = (~(((1U << 4) - 1)<<28) & word0) | ((((1U << 4) - 1) & value) << 28);
3522         return *this;
3523     }
3524 #endif
3525 };
3526 
3527 // status_r - Register describes the current operating status of the NPU
3528 struct status_r
3529 {
3530 #ifndef __cplusplus
3531     union
3532     {
3533         struct
3534         {
3535             uint32_t state : 1; // 0 = NPU is in stopped state. 1 = NPU is in running state
3536             uint32_t irq_raised : 1; // 0 = IRQ not raised. 1 = IRQ raised
3537             uint32_t bus_status : 1; // 0 = No bus fault. 1 = Bus abort detected and processing halted
3538             uint32_t reset_status : 1; // 0 = No reset in progress. 1 = Reset in progress
3539             uint32_t cmd_parse_error : 1; // 0 = No parsing error. 1 = Command stream parsing error detected
3540             uint32_t cmd_end_reached : 1; // 0 = Command stream end is not reached. 1 = Command stream end is reached
3541             uint32_t pmu_irq_raised : 1; // 0 = No PMU IRQ raised. 1 = PMU IRQ raised
3542             uint32_t reserved0 : 1;
3543             uint32_t ecc_fault : 1; // 0 = No ECC fault detected. 1 = ECC fault detected
3544             uint32_t branch_fault : 1; // 0 = No branch fault. 1 = Branch fault detected
3545             uint32_t reserved1 : 1;
3546             uint32_t faulting_interface : 1; // The faulting interface on bus abort
3547             uint32_t faulting_channel : 4; // The faulting channel on a bus abort
3548             uint32_t irq_history_mask : 16; // The IRQ History mask
3549         };
3550         uint32_t word;
3551     };
3552 #else
3553 private:
3554     uint32_t word0;
3555 public:
3556     CONSTEXPR status_r() :
3557         word0(8)
3558     {}
3559     CONSTEXPR status_r(uint32_t init) :
3560         word0(init)
3561     {}
3562     CONSTEXPR void operator=(uint32_t value)
3563     {
3564         word0 = value;
3565     }
3566     CONSTEXPR operator uint32_t()
3567     {
3568         return word0;
3569     }
3570     status_r copy()
3571     {
3572         return *this;
3573     }
3574     CONSTEXPR NPU_NAMESPACE::state get_state() const
3575     {
3576         auto v = ((1U << 1) - 1) & (word0 >> 0);
3577         assert(v <= 1);
3578         return static_cast<NPU_NAMESPACE::state>(v);
3579     }
3580     CONSTEXPR status_r& set_state(NPU_NAMESPACE::state value)
3581     {
3582         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
3583         return *this;
3584     }
3585     CONSTEXPR uint32_t get_irq_raised() const
3586     {
3587         auto v = ((1U << 1) - 1) & (word0 >> 1);
3588         return v;
3589     }
3590     CONSTEXPR status_r& set_irq_raised(uint32_t value)
3591     {
3592         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
3593         return *this;
3594     }
3595     CONSTEXPR uint32_t get_bus_status() const
3596     {
3597         auto v = ((1U << 1) - 1) & (word0 >> 2);
3598         return v;
3599     }
3600     CONSTEXPR status_r& set_bus_status(uint32_t value)
3601     {
3602         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
3603         return *this;
3604     }
3605     CONSTEXPR uint32_t get_reset_status() const
3606     {
3607         auto v = ((1U << 1) - 1) & (word0 >> 3);
3608         return v;
3609     }
3610     CONSTEXPR status_r& set_reset_status(uint32_t value)
3611     {
3612         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
3613         return *this;
3614     }
3615     CONSTEXPR uint32_t get_cmd_parse_error() const
3616     {
3617         auto v = ((1U << 1) - 1) & (word0 >> 4);
3618         return v;
3619     }
3620     CONSTEXPR status_r& set_cmd_parse_error(uint32_t value)
3621     {
3622         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
3623         return *this;
3624     }
3625     CONSTEXPR uint32_t get_cmd_end_reached() const
3626     {
3627         auto v = ((1U << 1) - 1) & (word0 >> 5);
3628         return v;
3629     }
3630     CONSTEXPR status_r& set_cmd_end_reached(uint32_t value)
3631     {
3632         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
3633         return *this;
3634     }
3635     CONSTEXPR uint32_t get_pmu_irq_raised() const
3636     {
3637         auto v = ((1U << 1) - 1) & (word0 >> 6);
3638         return v;
3639     }
3640     CONSTEXPR status_r& set_pmu_irq_raised(uint32_t value)
3641     {
3642         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
3643         return *this;
3644     }
3645     CONSTEXPR uint32_t get_ecc_fault() const
3646     {
3647         auto v = ((1U << 1) - 1) & (word0 >> 8);
3648         return v;
3649     }
3650     CONSTEXPR status_r& set_ecc_fault(uint32_t value)
3651     {
3652         word0 = (~(((1U << 1) - 1)<<8) & word0) | ((((1U << 1) - 1) & value) << 8);
3653         return *this;
3654     }
3655     CONSTEXPR uint32_t get_branch_fault() const
3656     {
3657         auto v = ((1U << 1) - 1) & (word0 >> 9);
3658         return v;
3659     }
3660     CONSTEXPR status_r& set_branch_fault(uint32_t value)
3661     {
3662         word0 = (~(((1U << 1) - 1)<<9) & word0) | ((((1U << 1) - 1) & value) << 9);
3663         return *this;
3664     }
3665     CONSTEXPR NPU_NAMESPACE::dma_fault_src get_faulting_interface() const
3666     {
3667         auto v = ((1U << 1) - 1) & (word0 >> 11);
3668         assert(v <= 1);
3669         return static_cast<NPU_NAMESPACE::dma_fault_src>(v);
3670     }
3671     CONSTEXPR status_r& set_faulting_interface(NPU_NAMESPACE::dma_fault_src value)
3672     {
3673         word0 = (~(((1U << 1) - 1)<<11) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 11);
3674         return *this;
3675     }
3676     CONSTEXPR NPU_NAMESPACE::pmu_axi_channel get_faulting_channel() const
3677     {
3678         auto v = ((1U << 4) - 1) & (word0 >> 12);
3679         assert(v <= 9);
3680         return static_cast<NPU_NAMESPACE::pmu_axi_channel>(v);
3681     }
3682     CONSTEXPR status_r& set_faulting_channel(NPU_NAMESPACE::pmu_axi_channel value)
3683     {
3684         word0 = (~(((1U << 4) - 1)<<12) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 12);
3685         return *this;
3686     }
3687     CONSTEXPR uint32_t get_irq_history_mask() const
3688     {
3689         auto v = ((1U << 16) - 1) & (word0 >> 16);
3690         return v;
3691     }
3692     CONSTEXPR status_r& set_irq_history_mask(uint32_t value)
3693     {
3694         word0 = (~(((1U << 16) - 1)<<16) & word0) | ((((1U << 16) - 1) & value) << 16);
3695         return *this;
3696     }
3697 #endif
3698 };
3699 
3700 // cmd_r - The command register. This register reads as last written command
3701 struct cmd_r
3702 {
3703 #ifndef __cplusplus
3704     union
3705     {
3706         struct
3707         {
3708             uint32_t transition_to_running_state : 1; // Write 1 to transition the NPU to running state. Writing 0 has no effect
3709             uint32_t clear_irq : 1; // Write 1 to clear the IRQ status in the STATUS register. Writing 0 has no effect
3710             uint32_t clock_q_enable : 1; // Write 1 to this bit to enable clock off using clock q-interface and enable the requester clock gate
3711             uint32_t power_q_enable : 1; // Write 1 to this bit to enable power off using power q-interface
3712             uint32_t stop_request : 1; // Write 1 to this bit to request STOP after completing any already-started commands
3713             uint32_t reserved0 : 11;
3714             uint32_t clear_irq_history : 16; // Clears the IRQ history mask
3715         };
3716         uint32_t word;
3717     };
3718 #else
3719 private:
3720     uint32_t word0;
3721 public:
3722     CONSTEXPR cmd_r() :
3723         word0(12)
3724     {}
3725     CONSTEXPR cmd_r(uint32_t init) :
3726         word0(init)
3727     {}
3728     CONSTEXPR void operator=(uint32_t value)
3729     {
3730         word0 = value;
3731     }
3732     CONSTEXPR operator uint32_t()
3733     {
3734         return word0;
3735     }
3736     cmd_r copy()
3737     {
3738         return *this;
3739     }
3740     CONSTEXPR uint32_t get_transition_to_running_state() const
3741     {
3742         auto v = ((1U << 1) - 1) & (word0 >> 0);
3743         return v;
3744     }
3745     CONSTEXPR cmd_r& set_transition_to_running_state(uint32_t value)
3746     {
3747         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
3748         return *this;
3749     }
3750     CONSTEXPR uint32_t get_clear_irq() const
3751     {
3752         auto v = ((1U << 1) - 1) & (word0 >> 1);
3753         return v;
3754     }
3755     CONSTEXPR cmd_r& set_clear_irq(uint32_t value)
3756     {
3757         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
3758         return *this;
3759     }
3760     CONSTEXPR uint32_t get_clock_q_enable() const
3761     {
3762         auto v = ((1U << 1) - 1) & (word0 >> 2);
3763         return v;
3764     }
3765     CONSTEXPR cmd_r& set_clock_q_enable(uint32_t value)
3766     {
3767         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
3768         return *this;
3769     }
3770     CONSTEXPR uint32_t get_power_q_enable() const
3771     {
3772         auto v = ((1U << 1) - 1) & (word0 >> 3);
3773         return v;
3774     }
3775     CONSTEXPR cmd_r& set_power_q_enable(uint32_t value)
3776     {
3777         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
3778         return *this;
3779     }
3780     CONSTEXPR uint32_t get_stop_request() const
3781     {
3782         auto v = ((1U << 1) - 1) & (word0 >> 4);
3783         return v;
3784     }
3785     CONSTEXPR cmd_r& set_stop_request(uint32_t value)
3786     {
3787         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
3788         return *this;
3789     }
3790     CONSTEXPR uint32_t get_clear_irq_history() const
3791     {
3792         auto v = ((1U << 16) - 1) & (word0 >> 16);
3793         return v;
3794     }
3795     CONSTEXPR cmd_r& set_clear_irq_history(uint32_t value)
3796     {
3797         word0 = (~(((1U << 16) - 1)<<16) & word0) | ((((1U << 16) - 1) & value) << 16);
3798         return *this;
3799     }
3800 #endif
3801 };
3802 
3803 // reset_r - Request reset and new security mode
3804 struct reset_r
3805 {
3806 #ifndef __cplusplus
3807     union
3808     {
3809         struct
3810         {
3811             uint32_t pending_CPL : 1; // Current privilege level. 0 = User and 1 = Privileged
3812             uint32_t pending_CSL : 1; // Current security level. 0 = Secure and 1 = Non-secure
3813             uint32_t reserved0 : 30;
3814         };
3815         uint32_t word;
3816     };
3817 #else
3818 private:
3819     uint32_t word0;
3820 public:
3821     CONSTEXPR reset_r() :
3822         word0(0)
3823     {}
3824     CONSTEXPR reset_r(uint32_t init) :
3825         word0(init)
3826     {}
3827     CONSTEXPR void operator=(uint32_t value)
3828     {
3829         word0 = value;
3830     }
3831     CONSTEXPR operator uint32_t()
3832     {
3833         return word0;
3834     }
3835     reset_r copy()
3836     {
3837         return *this;
3838     }
3839     CONSTEXPR NPU_NAMESPACE::privilege_level get_pending_CPL() const
3840     {
3841         auto v = ((1U << 1) - 1) & (word0 >> 0);
3842         assert(v <= 1);
3843         return static_cast<NPU_NAMESPACE::privilege_level>(v);
3844     }
3845     CONSTEXPR reset_r& set_pending_CPL(NPU_NAMESPACE::privilege_level value)
3846     {
3847         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
3848         return *this;
3849     }
3850     CONSTEXPR NPU_NAMESPACE::security_level get_pending_CSL() const
3851     {
3852         auto v = ((1U << 1) - 1) & (word0 >> 1);
3853         assert(v <= 1);
3854         return static_cast<NPU_NAMESPACE::security_level>(v);
3855     }
3856     CONSTEXPR reset_r& set_pending_CSL(NPU_NAMESPACE::security_level value)
3857     {
3858         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
3859         return *this;
3860     }
3861 #endif
3862 };
3863 
3864 // qbase_r - The base address of the command stream in bytes
3865 struct qbase_r
3866 {
3867 #ifndef __cplusplus
3868     union
3869     {
3870         struct
3871         {
3872             uint32_t offset_LO : 32; // Offset - LSB
3873             uint32_t offset_HI : 8; // Offset - MSB
3874             uint32_t reserved0 : 24;
3875         };
3876         uint32_t word[2];
3877     };
3878 #else
3879 private:
3880     uint32_t word0;
3881     uint32_t word1;
3882 public:
3883     CONSTEXPR qbase_r() :
3884         word0(0),
3885         word1(0)
3886     {}
3887     CONSTEXPR qbase_r(uint64_t init) :
3888         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
3889         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
3890     {}
3891     CONSTEXPR void operator=(uint64_t value)
3892     {
3893         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
3894     }
3895     CONSTEXPR operator uint64_t()
3896     {
3897         return (static_cast<uint64_t>(word1) << 32) | word0;
3898     }
3899     qbase_r copy()
3900     {
3901         return *this;
3902     }
3903 #endif
3904 };
3905 
3906 // qread_r - The read offset in the command stream in bytes. Multiple of four in the range 0-16MB
3907 struct qread_r
3908 {
3909 #ifndef __cplusplus
3910     union
3911     {
3912         struct
3913         {
3914             uint32_t QREAD : 32; // The read offset of the current command under execution
3915         };
3916         uint32_t word;
3917     };
3918 #else
3919 private:
3920     uint32_t word0;
3921 public:
3922     CONSTEXPR qread_r() :
3923         word0(0)
3924     {}
3925     CONSTEXPR qread_r(uint32_t init) :
3926         word0(init)
3927     {}
3928     CONSTEXPR void operator=(uint32_t value)
3929     {
3930         word0 = value;
3931     }
3932     CONSTEXPR operator uint32_t()
3933     {
3934         return word0;
3935     }
3936     qread_r copy()
3937     {
3938         return *this;
3939     }
3940     CONSTEXPR uint32_t get_QREAD() const
3941     {
3942         auto v = word0;
3943         return v;
3944     }
3945     CONSTEXPR qread_r& set_QREAD(uint32_t value)
3946     {
3947         word0 = value;
3948         return *this;
3949     }
3950 #endif
3951 };
3952 
3953 // qconfig_r - The AXI configuration for the command stream in the range 0-3. Same encoding as for REGIONCFG
3954 struct qconfig_r
3955 {
3956 #ifndef __cplusplus
3957     union
3958     {
3959         struct
3960         {
3961             uint32_t cmd_region0 : 2; // The command region configuration number
3962             uint32_t reserved0 : 30;
3963         };
3964         uint32_t word;
3965     };
3966 #else
3967 private:
3968     uint32_t word0;
3969 public:
3970     CONSTEXPR qconfig_r() :
3971         word0(0)
3972     {}
3973     CONSTEXPR qconfig_r(uint32_t init) :
3974         word0(init)
3975     {}
3976     CONSTEXPR void operator=(uint32_t value)
3977     {
3978         word0 = value;
3979     }
3980     CONSTEXPR operator uint32_t()
3981     {
3982         return word0;
3983     }
3984     qconfig_r copy()
3985     {
3986         return *this;
3987     }
3988     CONSTEXPR uint32_t get_cmd_region0() const
3989     {
3990         auto v = ((1U << 2) - 1) & (word0 >> 0);
3991         return v;
3992     }
3993     CONSTEXPR qconfig_r& set_cmd_region0(uint32_t value)
3994     {
3995         word0 = (~(((1U << 2) - 1)<<0) & word0) | ((((1U << 2) - 1) & value) << 0);
3996         return *this;
3997     }
3998 #endif
3999 };
4000 
4001 // qsize_r - The size of the command stream in bytes. Multiple of four in the range 0-16MB
4002 struct qsize_r
4003 {
4004 #ifndef __cplusplus
4005     union
4006     {
4007         struct
4008         {
4009             uint32_t QSIZE : 32; // The size of the next command stream to be executed by the NPU
4010         };
4011         uint32_t word;
4012     };
4013 #else
4014 private:
4015     uint32_t word0;
4016 public:
4017     CONSTEXPR qsize_r() :
4018         word0(0)
4019     {}
4020     CONSTEXPR qsize_r(uint32_t init) :
4021         word0(init)
4022     {}
4023     CONSTEXPR void operator=(uint32_t value)
4024     {
4025         word0 = value;
4026     }
4027     CONSTEXPR operator uint32_t()
4028     {
4029         return word0;
4030     }
4031     qsize_r copy()
4032     {
4033         return *this;
4034     }
4035     CONSTEXPR uint32_t get_QSIZE() const
4036     {
4037         auto v = word0;
4038         return v;
4039     }
4040     CONSTEXPR qsize_r& set_QSIZE(uint32_t value)
4041     {
4042         word0 = value;
4043         return *this;
4044     }
4045 #endif
4046 };
4047 
4048 // prot_r - The protection level configured for the NPU when acting as an AXI Requester
4049 struct prot_r
4050 {
4051 #ifndef __cplusplus
4052     union
4053     {
4054         struct
4055         {
4056             uint32_t active_CPL : 1; // The current privilege level. 0 = User and 1 = Privileged
4057             uint32_t active_CSL : 1; // The current security level 0=Secure 1=Non secure
4058             uint32_t reserved0 : 30;
4059         };
4060         uint32_t word;
4061     };
4062 #else
4063 private:
4064     uint32_t word0;
4065 public:
4066     CONSTEXPR prot_r() :
4067         word0(0)
4068     {}
4069     CONSTEXPR prot_r(uint32_t init) :
4070         word0(init)
4071     {}
4072     CONSTEXPR void operator=(uint32_t value)
4073     {
4074         word0 = value;
4075     }
4076     CONSTEXPR operator uint32_t()
4077     {
4078         return word0;
4079     }
4080     prot_r copy()
4081     {
4082         return *this;
4083     }
4084     CONSTEXPR NPU_NAMESPACE::privilege_level get_active_CPL() const
4085     {
4086         auto v = ((1U << 1) - 1) & (word0 >> 0);
4087         assert(v <= 1);
4088         return static_cast<NPU_NAMESPACE::privilege_level>(v);
4089     }
4090     CONSTEXPR prot_r& set_active_CPL(NPU_NAMESPACE::privilege_level value)
4091     {
4092         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
4093         return *this;
4094     }
4095     CONSTEXPR NPU_NAMESPACE::security_level get_active_CSL() const
4096     {
4097         auto v = ((1U << 1) - 1) & (word0 >> 1);
4098         assert(v <= 1);
4099         return static_cast<NPU_NAMESPACE::security_level>(v);
4100     }
4101     CONSTEXPR prot_r& set_active_CSL(NPU_NAMESPACE::security_level value)
4102     {
4103         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
4104         return *this;
4105     }
4106 #endif
4107 };
4108 
4109 // config_r - RTL configuration
4110 struct config_r
4111 {
4112 #ifndef __cplusplus
4113     union
4114     {
4115         struct
4116         {
4117             uint32_t macs_per_cc : 4; // The log2(macs/clock cycle)
4118             uint32_t cmd_stream_version : 4; // The command stream version accepted by this NPU
4119             uint32_t num_axi_sram : 2; // The log2 of the number of AXI SRAM interfaces
4120             uint32_t num_axi_ext : 1; // The log2 of the number of AXI External memory interfaces
4121             uint32_t reserved0 : 1;
4122             uint32_t num_wd : 2; // The log2 of the number of standard weight decoders
4123             uint32_t reserved1 : 13;
4124             uint32_t custom_dma : 1; // The custom DMA configuration
4125             uint32_t product : 4; // The product configuration
4126         };
4127         uint32_t word;
4128     };
4129 #else
4130 private:
4131     uint32_t word0;
4132 public:
4133     CONSTEXPR config_r() :
4134         word0(536870928)
4135     {}
4136     CONSTEXPR config_r(uint32_t init) :
4137         word0(init)
4138     {}
4139     CONSTEXPR void operator=(uint32_t value)
4140     {
4141         word0 = value;
4142     }
4143     CONSTEXPR operator uint32_t()
4144     {
4145         return word0;
4146     }
4147     config_r copy()
4148     {
4149         return *this;
4150     }
4151     CONSTEXPR uint32_t get_macs_per_cc() const
4152     {
4153         auto v = ((1U << 4) - 1) & (word0 >> 0);
4154         return v;
4155     }
4156     CONSTEXPR config_r& set_macs_per_cc(uint32_t value)
4157     {
4158         word0 = (~(((1U << 4) - 1)<<0) & word0) | ((((1U << 4) - 1) & value) << 0);
4159         return *this;
4160     }
4161     CONSTEXPR uint32_t get_cmd_stream_version() const
4162     {
4163         auto v = ((1U << 4) - 1) & (word0 >> 4);
4164         return v;
4165     }
4166     CONSTEXPR config_r& set_cmd_stream_version(uint32_t value)
4167     {
4168         word0 = (~(((1U << 4) - 1)<<4) & word0) | ((((1U << 4) - 1) & value) << 4);
4169         return *this;
4170     }
4171     CONSTEXPR uint32_t get_num_axi_sram() const
4172     {
4173         auto v = ((1U << 2) - 1) & (word0 >> 8);
4174         return v;
4175     }
4176     CONSTEXPR config_r& set_num_axi_sram(uint32_t value)
4177     {
4178         word0 = (~(((1U << 2) - 1)<<8) & word0) | ((((1U << 2) - 1) & value) << 8);
4179         return *this;
4180     }
4181     CONSTEXPR uint32_t get_num_axi_ext() const
4182     {
4183         auto v = ((1U << 1) - 1) & (word0 >> 10);
4184         return v;
4185     }
4186     CONSTEXPR config_r& set_num_axi_ext(uint32_t value)
4187     {
4188         word0 = (~(((1U << 1) - 1)<<10) & word0) | ((((1U << 1) - 1) & value) << 10);
4189         return *this;
4190     }
4191     CONSTEXPR uint32_t get_num_wd() const
4192     {
4193         auto v = ((1U << 2) - 1) & (word0 >> 12);
4194         return v;
4195     }
4196     CONSTEXPR config_r& set_num_wd(uint32_t value)
4197     {
4198         word0 = (~(((1U << 2) - 1)<<12) & word0) | ((((1U << 2) - 1) & value) << 12);
4199         return *this;
4200     }
4201     CONSTEXPR NPU_NAMESPACE::custom_dma get_custom_dma() const
4202     {
4203         auto v = ((1U << 1) - 1) & (word0 >> 27);
4204         assert(v <= 1);
4205         return static_cast<NPU_NAMESPACE::custom_dma>(v);
4206     }
4207     CONSTEXPR config_r& set_custom_dma(NPU_NAMESPACE::custom_dma value)
4208     {
4209         word0 = (~(((1U << 1) - 1)<<27) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 27);
4210         return *this;
4211     }
4212     CONSTEXPR uint32_t get_product() const
4213     {
4214         auto v = ((1U << 4) - 1) & (word0 >> 28);
4215         return v;
4216     }
4217     CONSTEXPR config_r& set_product(uint32_t value)
4218     {
4219         word0 = (~(((1U << 4) - 1)<<28) & word0) | ((((1U << 4) - 1) & value) << 28);
4220         return *this;
4221     }
4222 #endif
4223 };
4224 
4225 // cond_status_r - Condition status of the NPU
4226 struct cond_status_r
4227 {
4228 #ifndef __cplusplus
4229     union
4230     {
4231         struct
4232         {
4233             uint32_t result_flag : 1; // The tensor result flag. For OFM with a single element, this is bit 0 of the value. Otherwise UNPREDICTABLE
4234             uint32_t reserved0 : 31;
4235         };
4236         uint32_t word;
4237     };
4238 #else
4239 private:
4240     uint32_t word0;
4241 public:
4242     CONSTEXPR cond_status_r() :
4243         word0(0)
4244     {}
4245     CONSTEXPR cond_status_r(uint32_t init) :
4246         word0(init)
4247     {}
4248     CONSTEXPR void operator=(uint32_t value)
4249     {
4250         word0 = value;
4251     }
4252     CONSTEXPR operator uint32_t()
4253     {
4254         return word0;
4255     }
4256     cond_status_r copy()
4257     {
4258         return *this;
4259     }
4260     CONSTEXPR uint32_t get_result_flag() const
4261     {
4262         auto v = ((1U << 1) - 1) & (word0 >> 0);
4263         return v;
4264     }
4265     CONSTEXPR cond_status_r& set_result_flag(uint32_t value)
4266     {
4267         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
4268         return *this;
4269     }
4270 #endif
4271 };
4272 
4273 // power_ctrl_r - Power control register
4274 struct power_ctrl_r
4275 {
4276 #ifndef __cplusplus
4277     union
4278     {
4279         struct
4280         {
4281             uint32_t mac_step_cycles : 6; // MAC power ramping up/down control
4282             uint32_t reserved0 : 26;
4283         };
4284         uint32_t word;
4285     };
4286 #else
4287 private:
4288     uint32_t word0;
4289 public:
4290     CONSTEXPR power_ctrl_r() :
4291         word0(0)
4292     {}
4293     CONSTEXPR power_ctrl_r(uint32_t init) :
4294         word0(init)
4295     {}
4296     CONSTEXPR void operator=(uint32_t value)
4297     {
4298         word0 = value;
4299     }
4300     CONSTEXPR operator uint32_t()
4301     {
4302         return word0;
4303     }
4304     power_ctrl_r copy()
4305     {
4306         return *this;
4307     }
4308     CONSTEXPR uint32_t get_mac_step_cycles() const
4309     {
4310         auto v = ((1U << 6) - 1) & (word0 >> 0);
4311         return v;
4312     }
4313     CONSTEXPR power_ctrl_r& set_mac_step_cycles(uint32_t value)
4314     {
4315         word0 = (~(((1U << 6) - 1)<<0) & word0) | ((((1U << 6) - 1) & value) << 0);
4316         return *this;
4317     }
4318 #endif
4319 };
4320 
4321 // regioncfg_r - Specify which MEM_ATTR register applies to each region
4322 struct regioncfg_r
4323 {
4324 #ifndef __cplusplus
4325     union
4326     {
4327         struct
4328         {
4329             uint32_t region0 : 2; // Bits for Region0 Configuration
4330             uint32_t region1 : 2; // Bits for Region1 Configuration
4331             uint32_t region2 : 2; // Bits for Region2 Configuration
4332             uint32_t region3 : 2; // Bits for Region3 Configuration
4333             uint32_t region4 : 2; // Bits for Region4 Configuration
4334             uint32_t region5 : 2; // Bits for Region5 Configuration
4335             uint32_t region6 : 2; // Bits for Region6 Configuration
4336             uint32_t region7 : 2; // Bits for Region7 Configuration
4337             uint32_t reserved0 : 16;
4338         };
4339         uint32_t word;
4340     };
4341 #else
4342 private:
4343     uint32_t word0;
4344 public:
4345     CONSTEXPR regioncfg_r() :
4346         word0(0)
4347     {}
4348     CONSTEXPR regioncfg_r(uint32_t init) :
4349         word0(init)
4350     {}
4351     CONSTEXPR void operator=(uint32_t value)
4352     {
4353         word0 = value;
4354     }
4355     CONSTEXPR operator uint32_t()
4356     {
4357         return word0;
4358     }
4359     regioncfg_r copy()
4360     {
4361         return *this;
4362     }
4363     CONSTEXPR uint32_t get_region0() const
4364     {
4365         auto v = ((1U << 2) - 1) & (word0 >> 0);
4366         return v;
4367     }
4368     CONSTEXPR regioncfg_r& set_region0(uint32_t value)
4369     {
4370         word0 = (~(((1U << 2) - 1)<<0) & word0) | ((((1U << 2) - 1) & value) << 0);
4371         return *this;
4372     }
4373     CONSTEXPR uint32_t get_region1() const
4374     {
4375         auto v = ((1U << 2) - 1) & (word0 >> 2);
4376         return v;
4377     }
4378     CONSTEXPR regioncfg_r& set_region1(uint32_t value)
4379     {
4380         word0 = (~(((1U << 2) - 1)<<2) & word0) | ((((1U << 2) - 1) & value) << 2);
4381         return *this;
4382     }
4383     CONSTEXPR uint32_t get_region2() const
4384     {
4385         auto v = ((1U << 2) - 1) & (word0 >> 4);
4386         return v;
4387     }
4388     CONSTEXPR regioncfg_r& set_region2(uint32_t value)
4389     {
4390         word0 = (~(((1U << 2) - 1)<<4) & word0) | ((((1U << 2) - 1) & value) << 4);
4391         return *this;
4392     }
4393     CONSTEXPR uint32_t get_region3() const
4394     {
4395         auto v = ((1U << 2) - 1) & (word0 >> 6);
4396         return v;
4397     }
4398     CONSTEXPR regioncfg_r& set_region3(uint32_t value)
4399     {
4400         word0 = (~(((1U << 2) - 1)<<6) & word0) | ((((1U << 2) - 1) & value) << 6);
4401         return *this;
4402     }
4403     CONSTEXPR uint32_t get_region4() const
4404     {
4405         auto v = ((1U << 2) - 1) & (word0 >> 8);
4406         return v;
4407     }
4408     CONSTEXPR regioncfg_r& set_region4(uint32_t value)
4409     {
4410         word0 = (~(((1U << 2) - 1)<<8) & word0) | ((((1U << 2) - 1) & value) << 8);
4411         return *this;
4412     }
4413     CONSTEXPR uint32_t get_region5() const
4414     {
4415         auto v = ((1U << 2) - 1) & (word0 >> 10);
4416         return v;
4417     }
4418     CONSTEXPR regioncfg_r& set_region5(uint32_t value)
4419     {
4420         word0 = (~(((1U << 2) - 1)<<10) & word0) | ((((1U << 2) - 1) & value) << 10);
4421         return *this;
4422     }
4423     CONSTEXPR uint32_t get_region6() const
4424     {
4425         auto v = ((1U << 2) - 1) & (word0 >> 12);
4426         return v;
4427     }
4428     CONSTEXPR regioncfg_r& set_region6(uint32_t value)
4429     {
4430         word0 = (~(((1U << 2) - 1)<<12) & word0) | ((((1U << 2) - 1) & value) << 12);
4431         return *this;
4432     }
4433     CONSTEXPR uint32_t get_region7() const
4434     {
4435         auto v = ((1U << 2) - 1) & (word0 >> 14);
4436         return v;
4437     }
4438     CONSTEXPR regioncfg_r& set_region7(uint32_t value)
4439     {
4440         word0 = (~(((1U << 2) - 1)<<14) & word0) | ((((1U << 2) - 1) & value) << 14);
4441         return *this;
4442     }
4443 #endif
4444 };
4445 
4446 // mem_attr_r - Memory attributes 0
4447 struct mem_attr_r
4448 {
4449 #ifndef __cplusplus
4450     union
4451     {
4452         struct
4453         {
4454             uint32_t mem_domain : 2; // Memory domain
4455             uint32_t axi_port : 1; // AXI port select
4456             uint32_t reserved0 : 1;
4457             uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
4458             uint32_t reserved1 : 24;
4459         };
4460         uint32_t word;
4461     };
4462 #else
4463 private:
4464     uint32_t word0;
4465 public:
4466     CONSTEXPR mem_attr_r() :
4467         word0(0)
4468     {}
4469     CONSTEXPR mem_attr_r(uint32_t init) :
4470         word0(init)
4471     {}
4472     CONSTEXPR void operator=(uint32_t value)
4473     {
4474         word0 = value;
4475     }
4476     CONSTEXPR operator uint32_t()
4477     {
4478         return word0;
4479     }
4480     mem_attr_r copy()
4481     {
4482         return *this;
4483     }
4484     CONSTEXPR NPU_NAMESPACE::axi_mem_domain get_mem_domain() const
4485     {
4486         auto v = ((1U << 2) - 1) & (word0 >> 0);
4487         assert(v <= 3);
4488         return static_cast<NPU_NAMESPACE::axi_mem_domain>(v);
4489     }
4490     CONSTEXPR mem_attr_r& set_mem_domain(NPU_NAMESPACE::axi_mem_domain value)
4491     {
4492         word0 = (~(((1U << 2) - 1)<<0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
4493         return *this;
4494     }
4495     CONSTEXPR NPU_NAMESPACE::axi_port get_axi_port() const
4496     {
4497         auto v = ((1U << 1) - 1) & (word0 >> 2);
4498         assert(v <= 1);
4499         return static_cast<NPU_NAMESPACE::axi_port>(v);
4500     }
4501     CONSTEXPR mem_attr_r& set_axi_port(NPU_NAMESPACE::axi_port value)
4502     {
4503         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 2);
4504         return *this;
4505     }
4506     CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
4507     {
4508         auto v = ((1U << 4) - 1) & (word0 >> 4);
4509         assert(v <= 11);
4510         return static_cast<NPU_NAMESPACE::axi_mem_encoding>(v);
4511     }
4512     CONSTEXPR mem_attr_r& set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
4513     {
4514         word0 = (~(((1U << 4) - 1)<<4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
4515         return *this;
4516     }
4517 #endif
4518 };
4519 
4520 // axi_sram_r - The AXI configuration for SRAM ports
4521 struct axi_sram_r
4522 {
4523 #ifndef __cplusplus
4524     union
4525     {
4526         struct
4527         {
4528             uint32_t max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions per port - 1
4529             uint32_t reserved0 : 2;
4530             uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions per port - 1
4531             uint32_t reserved1 : 3;
4532             uint32_t max_beats : 2; // Burst split alignment
4533             uint32_t reserved2 : 14;
4534         };
4535         uint32_t word;
4536     };
4537 #else
4538 private:
4539     uint32_t word0;
4540 public:
4541     CONSTEXPR axi_sram_r() :
4542         word0(0)
4543     {}
4544     CONSTEXPR axi_sram_r(uint32_t init) :
4545         word0(init)
4546     {}
4547     CONSTEXPR void operator=(uint32_t value)
4548     {
4549         word0 = value;
4550     }
4551     CONSTEXPR operator uint32_t()
4552     {
4553         return word0;
4554     }
4555     axi_sram_r copy()
4556     {
4557         return *this;
4558     }
4559     CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4560     {
4561         auto v = ((1U << 6) - 1) & (word0 >> 0);
4562         return v;
4563     }
4564     CONSTEXPR axi_sram_r& set_max_outstanding_read_m1(uint32_t value)
4565     {
4566         word0 = (~(((1U << 6) - 1)<<0) & word0) | ((((1U << 6) - 1) & value) << 0);
4567         return *this;
4568     }
4569     CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4570     {
4571         auto v = ((1U << 5) - 1) & (word0 >> 8);
4572         return v;
4573     }
4574     CONSTEXPR axi_sram_r& set_max_outstanding_write_m1(uint32_t value)
4575     {
4576         word0 = (~(((1U << 5) - 1)<<8) & word0) | ((((1U << 5) - 1) & value) << 8);
4577         return *this;
4578     }
4579     CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
4580     {
4581         auto v = ((1U << 2) - 1) & (word0 >> 16);
4582         assert(v <= 2);
4583         return static_cast<NPU_NAMESPACE::max_beats>(v);
4584     }
4585     CONSTEXPR axi_sram_r& set_max_beats(NPU_NAMESPACE::max_beats value)
4586     {
4587         word0 = (~(((1U << 2) - 1)<<16) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 16);
4588         return *this;
4589     }
4590 #endif
4591 };
4592 
4593 // axi_ext_r - The AXI configuration for EXT ports
4594 struct axi_ext_r
4595 {
4596 #ifndef __cplusplus
4597     union
4598     {
4599         struct
4600         {
4601             uint32_t max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions per port - 1
4602             uint32_t reserved0 : 2;
4603             uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions per port - 1
4604             uint32_t reserved1 : 3;
4605             uint32_t max_beats : 2; // Burst split alignment
4606             uint32_t reserved2 : 14;
4607         };
4608         uint32_t word;
4609     };
4610 #else
4611 private:
4612     uint32_t word0;
4613 public:
4614     CONSTEXPR axi_ext_r() :
4615         word0(0)
4616     {}
4617     CONSTEXPR axi_ext_r(uint32_t init) :
4618         word0(init)
4619     {}
4620     CONSTEXPR void operator=(uint32_t value)
4621     {
4622         word0 = value;
4623     }
4624     CONSTEXPR operator uint32_t()
4625     {
4626         return word0;
4627     }
4628     axi_ext_r copy()
4629     {
4630         return *this;
4631     }
4632     CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4633     {
4634         auto v = ((1U << 6) - 1) & (word0 >> 0);
4635         return v;
4636     }
4637     CONSTEXPR axi_ext_r& set_max_outstanding_read_m1(uint32_t value)
4638     {
4639         word0 = (~(((1U << 6) - 1)<<0) & word0) | ((((1U << 6) - 1) & value) << 0);
4640         return *this;
4641     }
4642     CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4643     {
4644         auto v = ((1U << 5) - 1) & (word0 >> 8);
4645         return v;
4646     }
4647     CONSTEXPR axi_ext_r& set_max_outstanding_write_m1(uint32_t value)
4648     {
4649         word0 = (~(((1U << 5) - 1)<<8) & word0) | ((((1U << 5) - 1) & value) << 8);
4650         return *this;
4651     }
4652     CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
4653     {
4654         auto v = ((1U << 2) - 1) & (word0 >> 16);
4655         assert(v <= 2);
4656         return static_cast<NPU_NAMESPACE::max_beats>(v);
4657     }
4658     CONSTEXPR axi_ext_r& set_max_beats(NPU_NAMESPACE::max_beats value)
4659     {
4660         word0 = (~(((1U << 2) - 1)<<16) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 16);
4661         return *this;
4662     }
4663 #endif
4664 };
4665 
4666 // cfg_sram_cap_r - The value of the CFGSRAMCAP pins, SRAM AXI ports cap
4667 struct cfg_sram_cap_r
4668 {
4669 #ifndef __cplusplus
4670     union
4671     {
4672         struct
4673         {
4674             uint32_t max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions per port - 1
4675             uint32_t reserved0 : 2;
4676             uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions per port - 1
4677             uint32_t reserved1 : 3;
4678             uint32_t max_beats : 2; // Burst split alignment
4679             uint32_t reserved2 : 14;
4680         };
4681         uint32_t word;
4682     };
4683 #else
4684 private:
4685     uint32_t word0;
4686 public:
4687     CONSTEXPR cfg_sram_cap_r() :
4688         word0(0)
4689     {}
4690     CONSTEXPR cfg_sram_cap_r(uint32_t init) :
4691         word0(init)
4692     {}
4693     CONSTEXPR void operator=(uint32_t value)
4694     {
4695         word0 = value;
4696     }
4697     CONSTEXPR operator uint32_t()
4698     {
4699         return word0;
4700     }
4701     cfg_sram_cap_r copy()
4702     {
4703         return *this;
4704     }
4705     CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4706     {
4707         auto v = ((1U << 6) - 1) & (word0 >> 0);
4708         return v;
4709     }
4710     CONSTEXPR cfg_sram_cap_r& set_max_outstanding_read_m1(uint32_t value)
4711     {
4712         word0 = (~(((1U << 6) - 1)<<0) & word0) | ((((1U << 6) - 1) & value) << 0);
4713         return *this;
4714     }
4715     CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4716     {
4717         auto v = ((1U << 5) - 1) & (word0 >> 8);
4718         return v;
4719     }
4720     CONSTEXPR cfg_sram_cap_r& set_max_outstanding_write_m1(uint32_t value)
4721     {
4722         word0 = (~(((1U << 5) - 1)<<8) & word0) | ((((1U << 5) - 1) & value) << 8);
4723         return *this;
4724     }
4725     CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
4726     {
4727         auto v = ((1U << 2) - 1) & (word0 >> 16);
4728         assert(v <= 2);
4729         return static_cast<NPU_NAMESPACE::max_beats>(v);
4730     }
4731     CONSTEXPR cfg_sram_cap_r& set_max_beats(NPU_NAMESPACE::max_beats value)
4732     {
4733         word0 = (~(((1U << 2) - 1)<<16) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 16);
4734         return *this;
4735     }
4736 #endif
4737 };
4738 
4739 // cfg_ext_cap_r - The value of the CFGEXTCAP pins, EXT AXI ports cap
4740 struct cfg_ext_cap_r
4741 {
4742 #ifndef __cplusplus
4743     union
4744     {
4745         struct
4746         {
4747             uint32_t max_outstanding_read_m1 : 6; // Maximum number of outstanding AXI read transactions per port - 1
4748             uint32_t reserved0 : 2;
4749             uint32_t max_outstanding_write_m1 : 5; // Maximum number of outstanding AXI write transactions per port - 1
4750             uint32_t reserved1 : 3;
4751             uint32_t max_beats : 2; // Burst split alignment
4752             uint32_t reserved2 : 14;
4753         };
4754         uint32_t word;
4755     };
4756 #else
4757 private:
4758     uint32_t word0;
4759 public:
4760     CONSTEXPR cfg_ext_cap_r() :
4761         word0(0)
4762     {}
4763     CONSTEXPR cfg_ext_cap_r(uint32_t init) :
4764         word0(init)
4765     {}
4766     CONSTEXPR void operator=(uint32_t value)
4767     {
4768         word0 = value;
4769     }
4770     CONSTEXPR operator uint32_t()
4771     {
4772         return word0;
4773     }
4774     cfg_ext_cap_r copy()
4775     {
4776         return *this;
4777     }
4778     CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4779     {
4780         auto v = ((1U << 6) - 1) & (word0 >> 0);
4781         return v;
4782     }
4783     CONSTEXPR cfg_ext_cap_r& set_max_outstanding_read_m1(uint32_t value)
4784     {
4785         word0 = (~(((1U << 6) - 1)<<0) & word0) | ((((1U << 6) - 1) & value) << 0);
4786         return *this;
4787     }
4788     CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4789     {
4790         auto v = ((1U << 5) - 1) & (word0 >> 8);
4791         return v;
4792     }
4793     CONSTEXPR cfg_ext_cap_r& set_max_outstanding_write_m1(uint32_t value)
4794     {
4795         word0 = (~(((1U << 5) - 1)<<8) & word0) | ((((1U << 5) - 1) & value) << 8);
4796         return *this;
4797     }
4798     CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
4799     {
4800         auto v = ((1U << 2) - 1) & (word0 >> 16);
4801         assert(v <= 2);
4802         return static_cast<NPU_NAMESPACE::max_beats>(v);
4803     }
4804     CONSTEXPR cfg_ext_cap_r& set_max_beats(NPU_NAMESPACE::max_beats value)
4805     {
4806         word0 = (~(((1U << 2) - 1)<<16) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 16);
4807         return *this;
4808     }
4809 #endif
4810 };
4811 
4812 // cfg_sram_hash0_r - The value of the CFGSRAMHASH0 pins, SRAM AXI port select bit 0 hash
4813 struct cfg_sram_hash0_r
4814 {
4815 #ifndef __cplusplus
4816     union
4817     {
4818         struct
4819         {
4820             uint32_t zero : 6; // Must be zero
4821             uint32_t hash_LO : 26; // Hash function - LSB
4822             uint32_t hash_HI : 8; // Hash function - MSB
4823             uint32_t reserved0 : 24;
4824         };
4825         uint32_t word[2];
4826     };
4827 #else
4828 private:
4829     uint32_t word0;
4830     uint32_t word1;
4831 public:
4832     CONSTEXPR cfg_sram_hash0_r() :
4833         word0(0),
4834         word1(0)
4835     {}
4836     CONSTEXPR cfg_sram_hash0_r(uint64_t init) :
4837         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
4838         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
4839     {}
4840     CONSTEXPR void operator=(uint64_t value)
4841     {
4842         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
4843     }
4844     CONSTEXPR operator uint64_t()
4845     {
4846         return (static_cast<uint64_t>(word1) << 32) | word0;
4847     }
4848     cfg_sram_hash0_r copy()
4849     {
4850         return *this;
4851     }
4852 #endif
4853 };
4854 
4855 // cfg_sram_hash1_r - The value of the CFGSRAMHASH1 pins, SRAM AXI port select bit 1 hash
4856 struct cfg_sram_hash1_r
4857 {
4858 #ifndef __cplusplus
4859     union
4860     {
4861         struct
4862         {
4863             uint32_t zero : 6; // Must be zero
4864             uint32_t hash_LO : 26; // Hash function - LSB
4865             uint32_t hash_HI : 8; // Hash function - MSB
4866             uint32_t reserved0 : 24;
4867         };
4868         uint32_t word[2];
4869     };
4870 #else
4871 private:
4872     uint32_t word0;
4873     uint32_t word1;
4874 public:
4875     CONSTEXPR cfg_sram_hash1_r() :
4876         word0(0),
4877         word1(0)
4878     {}
4879     CONSTEXPR cfg_sram_hash1_r(uint64_t init) :
4880         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
4881         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
4882     {}
4883     CONSTEXPR void operator=(uint64_t value)
4884     {
4885         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
4886     }
4887     CONSTEXPR operator uint64_t()
4888     {
4889         return (static_cast<uint64_t>(word1) << 32) | word0;
4890     }
4891     cfg_sram_hash1_r copy()
4892     {
4893         return *this;
4894     }
4895 #endif
4896 };
4897 
4898 // cfg_ext_hash0_r - The value of the CFGEXTHASH0  pins, EXT AXI port select bit 0 hash
4899 struct cfg_ext_hash0_r
4900 {
4901 #ifndef __cplusplus
4902     union
4903     {
4904         struct
4905         {
4906             uint32_t zero : 6; // Must be zero
4907             uint32_t hash_LO : 26; // Hash function - LSB
4908             uint32_t hash_HI : 8; // Hash function - MSB
4909             uint32_t reserved0 : 24;
4910         };
4911         uint32_t word[2];
4912     };
4913 #else
4914 private:
4915     uint32_t word0;
4916     uint32_t word1;
4917 public:
4918     CONSTEXPR cfg_ext_hash0_r() :
4919         word0(0),
4920         word1(0)
4921     {}
4922     CONSTEXPR cfg_ext_hash0_r(uint64_t init) :
4923         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
4924         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
4925     {}
4926     CONSTEXPR void operator=(uint64_t value)
4927     {
4928         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
4929     }
4930     CONSTEXPR operator uint64_t()
4931     {
4932         return (static_cast<uint64_t>(word1) << 32) | word0;
4933     }
4934     cfg_ext_hash0_r copy()
4935     {
4936         return *this;
4937     }
4938 #endif
4939 };
4940 
4941 // basep_r - AXI base address of the respective region number 0 - 7
4942 struct basep_r
4943 {
4944 #ifndef __cplusplus
4945     union
4946     {
4947         struct
4948         {
4949             uint32_t offset_LO : 32; // Offset - LSB
4950             uint32_t offset_HI : 8; // Offset - MSB
4951             uint32_t reserved0 : 24;
4952         };
4953         uint32_t word[2];
4954     };
4955 #else
4956 private:
4957     uint32_t word0;
4958     uint32_t word1;
4959 public:
4960     CONSTEXPR basep_r() :
4961         word0(0),
4962         word1(0)
4963     {}
4964     CONSTEXPR basep_r(uint64_t init) :
4965         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
4966         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
4967     {}
4968     CONSTEXPR void operator=(uint64_t value)
4969     {
4970         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
4971     }
4972     CONSTEXPR operator uint64_t()
4973     {
4974         return (static_cast<uint64_t>(word1) << 32) | word0;
4975     }
4976     basep_r copy()
4977     {
4978         return *this;
4979     }
4980 #endif
4981 };
4982 
4983 // clkforce_r - Force clocks on for clock gating
4984 struct clkforce_r
4985 {
4986 #ifndef __cplusplus
4987     union
4988     {
4989         struct
4990         {
4991             uint32_t top_level_clk : 1; // set to 1 to force on TOP level clock
4992             uint32_t cc_clk : 1; // set to 1 to force on CC clock
4993             uint32_t dma_clk : 1; // set to 1 to force on DMA clock
4994             uint32_t mac_clk : 1; // set to 1 to force on MAC clock
4995             uint32_t ao_clk : 1; // set to 1 to force on AO clock
4996             uint32_t wd_clk : 1; // set to 1 to force on WD clock
4997             uint32_t reserved0 : 26;
4998         };
4999         uint32_t word;
5000     };
5001 #else
5002 private:
5003     uint32_t word0;
5004 public:
5005     CONSTEXPR clkforce_r() :
5006         word0(0)
5007     {}
5008     CONSTEXPR clkforce_r(uint32_t init) :
5009         word0(init)
5010     {}
5011     CONSTEXPR void operator=(uint32_t value)
5012     {
5013         word0 = value;
5014     }
5015     CONSTEXPR operator uint32_t()
5016     {
5017         return word0;
5018     }
5019     clkforce_r copy()
5020     {
5021         return *this;
5022     }
5023     CONSTEXPR uint32_t get_top_level_clk() const
5024     {
5025         auto v = ((1U << 1) - 1) & (word0 >> 0);
5026         return v;
5027     }
5028     CONSTEXPR clkforce_r& set_top_level_clk(uint32_t value)
5029     {
5030         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
5031         return *this;
5032     }
5033     CONSTEXPR uint32_t get_cc_clk() const
5034     {
5035         auto v = ((1U << 1) - 1) & (word0 >> 1);
5036         return v;
5037     }
5038     CONSTEXPR clkforce_r& set_cc_clk(uint32_t value)
5039     {
5040         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
5041         return *this;
5042     }
5043     CONSTEXPR uint32_t get_dma_clk() const
5044     {
5045         auto v = ((1U << 1) - 1) & (word0 >> 2);
5046         return v;
5047     }
5048     CONSTEXPR clkforce_r& set_dma_clk(uint32_t value)
5049     {
5050         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
5051         return *this;
5052     }
5053     CONSTEXPR uint32_t get_mac_clk() const
5054     {
5055         auto v = ((1U << 1) - 1) & (word0 >> 3);
5056         return v;
5057     }
5058     CONSTEXPR clkforce_r& set_mac_clk(uint32_t value)
5059     {
5060         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
5061         return *this;
5062     }
5063     CONSTEXPR uint32_t get_ao_clk() const
5064     {
5065         auto v = ((1U << 1) - 1) & (word0 >> 4);
5066         return v;
5067     }
5068     CONSTEXPR clkforce_r& set_ao_clk(uint32_t value)
5069     {
5070         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
5071         return *this;
5072     }
5073     CONSTEXPR uint32_t get_wd_clk() const
5074     {
5075         auto v = ((1U << 1) - 1) & (word0 >> 5);
5076         return v;
5077     }
5078     CONSTEXPR clkforce_r& set_wd_clk(uint32_t value)
5079     {
5080         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
5081         return *this;
5082     }
5083 #endif
5084 };
5085 
5086 // debug_address_r - Set debug address for register reads 0x400-0x7FF. The address must be 1KB aligned
5087 struct debug_address_r
5088 {
5089 #ifndef __cplusplus
5090     union
5091     {
5092         struct
5093         {
5094             uint32_t addr : 28; // Address in the RAM, 1KB aligned
5095             uint32_t ram_id : 4; // RAM to access
5096         };
5097         uint32_t word;
5098     };
5099 #else
5100 private:
5101     uint32_t word0;
5102 public:
5103     CONSTEXPR debug_address_r() :
5104         word0(0)
5105     {}
5106     CONSTEXPR debug_address_r(uint32_t init) :
5107         word0(init)
5108     {}
5109     CONSTEXPR void operator=(uint32_t value)
5110     {
5111         word0 = value;
5112     }
5113     CONSTEXPR operator uint32_t()
5114     {
5115         return word0;
5116     }
5117     debug_address_r copy()
5118     {
5119         return *this;
5120     }
5121     CONSTEXPR uint32_t get_addr() const
5122     {
5123         auto v = ((1U << 28) - 1) & (word0 >> 0);
5124         return v;
5125     }
5126     CONSTEXPR debug_address_r& set_addr(uint32_t value)
5127     {
5128         word0 = (~(((1U << 28) - 1)<<0) & word0) | ((((1U << 28) - 1) & value) << 0);
5129         return *this;
5130     }
5131     CONSTEXPR NPU_NAMESPACE::ram_id get_ram_id() const
5132     {
5133         auto v = ((1U << 4) - 1) & (word0 >> 28);
5134         assert(v <= 4);
5135         return static_cast<NPU_NAMESPACE::ram_id>(v);
5136     }
5137     CONSTEXPR debug_address_r& set_ram_id(NPU_NAMESPACE::ram_id value)
5138     {
5139         word0 = (~(((1U << 4) - 1)<<28) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 28);
5140         return *this;
5141     }
5142 #endif
5143 };
5144 
5145 // debug_misc_r - 32-bit read/write register for driver debug use. This does not affect NPU function
5146 struct debug_misc_r
5147 {
5148 #ifndef __cplusplus
5149     union
5150     {
5151         struct
5152         {
5153             uint32_t misc : 32; // Debug misc
5154         };
5155         uint32_t word;
5156     };
5157 #else
5158 private:
5159     uint32_t word0;
5160 public:
5161     CONSTEXPR debug_misc_r() :
5162         word0(0)
5163     {}
5164     CONSTEXPR debug_misc_r(uint32_t init) :
5165         word0(init)
5166     {}
5167     CONSTEXPR void operator=(uint32_t value)
5168     {
5169         word0 = value;
5170     }
5171     CONSTEXPR operator uint32_t()
5172     {
5173         return word0;
5174     }
5175     debug_misc_r copy()
5176     {
5177         return *this;
5178     }
5179     CONSTEXPR uint32_t get_misc() const
5180     {
5181         auto v = word0;
5182         return v;
5183     }
5184     CONSTEXPR debug_misc_r& set_misc(uint32_t value)
5185     {
5186         word0 = value;
5187         return *this;
5188     }
5189 #endif
5190 };
5191 
5192 // feature_disable_r - Disable micro-architectural features
5193 struct feature_disable_r
5194 {
5195 #ifndef __cplusplus
5196     union
5197     {
5198         struct
5199         {
5200             uint32_t ib_reuse_kd_disable : 1; // Setting to 1 will disable the optimization to reuse IFM data when using kernel decomposition for large kernels
5201             uint32_t ib_reuse_ifm_depth_disable : 1; // Setting to 1 will disable the optimization to reuse IFM data when performing convolution operations
5202             uint32_t reserved0 : 30;
5203         };
5204         uint32_t word;
5205     };
5206 #else
5207 private:
5208     uint32_t word0;
5209 public:
5210     CONSTEXPR feature_disable_r() :
5211         word0(0)
5212     {}
5213     CONSTEXPR feature_disable_r(uint32_t init) :
5214         word0(init)
5215     {}
5216     CONSTEXPR void operator=(uint32_t value)
5217     {
5218         word0 = value;
5219     }
5220     CONSTEXPR operator uint32_t()
5221     {
5222         return word0;
5223     }
5224     feature_disable_r copy()
5225     {
5226         return *this;
5227     }
5228     CONSTEXPR uint32_t get_ib_reuse_kd_disable() const
5229     {
5230         auto v = ((1U << 1) - 1) & (word0 >> 0);
5231         return v;
5232     }
5233     CONSTEXPR feature_disable_r& set_ib_reuse_kd_disable(uint32_t value)
5234     {
5235         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
5236         return *this;
5237     }
5238     CONSTEXPR uint32_t get_ib_reuse_ifm_depth_disable() const
5239     {
5240         auto v = ((1U << 1) - 1) & (word0 >> 1);
5241         return v;
5242     }
5243     CONSTEXPR feature_disable_r& set_ib_reuse_ifm_depth_disable(uint32_t value)
5244     {
5245         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
5246         return *this;
5247     }
5248 #endif
5249 };
5250 
5251 // dma_ifm_src_r - DMA IFM channel source position on AXI
5252 struct dma_ifm_src_r
5253 {
5254 #ifndef __cplusplus
5255     union
5256     {
5257         struct
5258         {
5259             uint32_t offset_LO : 32; // Offset - LSB
5260             uint32_t offset_HI : 8; // Offset - MSB
5261             uint32_t reserved0 : 24;
5262         };
5263         uint32_t word[2];
5264     };
5265 #else
5266 private:
5267     uint32_t word0;
5268     uint32_t word1;
5269 public:
5270     CONSTEXPR dma_ifm_src_r() :
5271         word0(0),
5272         word1(0)
5273     {}
5274     CONSTEXPR dma_ifm_src_r(uint64_t init) :
5275         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5276         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5277     {}
5278     CONSTEXPR void operator=(uint64_t value)
5279     {
5280         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5281     }
5282     CONSTEXPR operator uint64_t()
5283     {
5284         return (static_cast<uint64_t>(word1) << 32) | word0;
5285     }
5286     dma_ifm_src_r copy()
5287     {
5288         return *this;
5289     }
5290 #endif
5291 };
5292 
5293 // dma_ofm_dst_r - DMA OFM channel destination position on AXI
5294 struct dma_ofm_dst_r
5295 {
5296 #ifndef __cplusplus
5297     union
5298     {
5299         struct
5300         {
5301             uint32_t offset_LO : 32; // Offset - LSB
5302             uint32_t offset_HI : 8; // Offset - MSB
5303             uint32_t reserved0 : 24;
5304         };
5305         uint32_t word[2];
5306     };
5307 #else
5308 private:
5309     uint32_t word0;
5310     uint32_t word1;
5311 public:
5312     CONSTEXPR dma_ofm_dst_r() :
5313         word0(0),
5314         word1(0)
5315     {}
5316     CONSTEXPR dma_ofm_dst_r(uint64_t init) :
5317         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5318         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5319     {}
5320     CONSTEXPR void operator=(uint64_t value)
5321     {
5322         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5323     }
5324     CONSTEXPR operator uint64_t()
5325     {
5326         return (static_cast<uint64_t>(word1) << 32) | word0;
5327     }
5328     dma_ofm_dst_r copy()
5329     {
5330         return *this;
5331     }
5332 #endif
5333 };
5334 
5335 // dma_weight_src_r - DMA weight channel source position on AXI
5336 struct dma_weight_src_r
5337 {
5338 #ifndef __cplusplus
5339     union
5340     {
5341         struct
5342         {
5343             uint32_t offset_LO : 32; // Offset - LSB
5344             uint32_t offset_HI : 8; // Offset - MSB
5345             uint32_t reserved0 : 24;
5346         };
5347         uint32_t word[2];
5348     };
5349 #else
5350 private:
5351     uint32_t word0;
5352     uint32_t word1;
5353 public:
5354     CONSTEXPR dma_weight_src_r() :
5355         word0(0),
5356         word1(0)
5357     {}
5358     CONSTEXPR dma_weight_src_r(uint64_t init) :
5359         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5360         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5361     {}
5362     CONSTEXPR void operator=(uint64_t value)
5363     {
5364         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5365     }
5366     CONSTEXPR operator uint64_t()
5367     {
5368         return (static_cast<uint64_t>(word1) << 32) | word0;
5369     }
5370     dma_weight_src_r copy()
5371     {
5372         return *this;
5373     }
5374 #endif
5375 };
5376 
5377 // dma_cmd_src_r - DMA command channel source position on AXI
5378 struct dma_cmd_src_r
5379 {
5380 #ifndef __cplusplus
5381     union
5382     {
5383         struct
5384         {
5385             uint32_t offset_LO : 32; // Offset - LSB
5386             uint32_t offset_HI : 8; // Offset - MSB
5387             uint32_t reserved0 : 24;
5388         };
5389         uint32_t word[2];
5390     };
5391 #else
5392 private:
5393     uint32_t word0;
5394     uint32_t word1;
5395 public:
5396     CONSTEXPR dma_cmd_src_r() :
5397         word0(0),
5398         word1(0)
5399     {}
5400     CONSTEXPR dma_cmd_src_r(uint64_t init) :
5401         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5402         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5403     {}
5404     CONSTEXPR void operator=(uint64_t value)
5405     {
5406         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5407     }
5408     CONSTEXPR operator uint64_t()
5409     {
5410         return (static_cast<uint64_t>(word1) << 32) | word0;
5411     }
5412     dma_cmd_src_r copy()
5413     {
5414         return *this;
5415     }
5416 #endif
5417 };
5418 
5419 // dma_cmd_size_r - DMA command channel number of bytes buffered
5420 struct dma_cmd_size_r
5421 {
5422 #ifndef __cplusplus
5423     union
5424     {
5425         struct
5426         {
5427             uint32_t value : 32; // 32-bit register value
5428         };
5429         uint32_t word;
5430     };
5431 #else
5432 private:
5433     uint32_t word0;
5434 public:
5435     CONSTEXPR dma_cmd_size_r() :
5436         word0(0)
5437     {}
5438     CONSTEXPR dma_cmd_size_r(uint32_t init) :
5439         word0(init)
5440     {}
5441     CONSTEXPR void operator=(uint32_t value)
5442     {
5443         word0 = value;
5444     }
5445     CONSTEXPR operator uint32_t()
5446     {
5447         return word0;
5448     }
5449     dma_cmd_size_r copy()
5450     {
5451         return *this;
5452     }
5453     CONSTEXPR uint32_t get_value() const
5454     {
5455         auto v = word0;
5456         return v;
5457     }
5458     CONSTEXPR dma_cmd_size_r& set_value(uint32_t value)
5459     {
5460         word0 = value;
5461         return *this;
5462     }
5463 #endif
5464 };
5465 
5466 // dma_m2m_src_r - DMA memory to memory source position on AXI
5467 struct dma_m2m_src_r
5468 {
5469 #ifndef __cplusplus
5470     union
5471     {
5472         struct
5473         {
5474             uint32_t offset_LO : 32; // Offset - LSB
5475             uint32_t offset_HI : 8; // Offset - MSB
5476             uint32_t reserved0 : 24;
5477         };
5478         uint32_t word[2];
5479     };
5480 #else
5481 private:
5482     uint32_t word0;
5483     uint32_t word1;
5484 public:
5485     CONSTEXPR dma_m2m_src_r() :
5486         word0(0),
5487         word1(0)
5488     {}
5489     CONSTEXPR dma_m2m_src_r(uint64_t init) :
5490         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5491         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5492     {}
5493     CONSTEXPR void operator=(uint64_t value)
5494     {
5495         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5496     }
5497     CONSTEXPR operator uint64_t()
5498     {
5499         return (static_cast<uint64_t>(word1) << 32) | word0;
5500     }
5501     dma_m2m_src_r copy()
5502     {
5503         return *this;
5504     }
5505 #endif
5506 };
5507 
5508 // dma_m2m_dst_r - DMA memory to memory destination position on AXI
5509 struct dma_m2m_dst_r
5510 {
5511 #ifndef __cplusplus
5512     union
5513     {
5514         struct
5515         {
5516             uint32_t offset_LO : 32; // Offset - LSB
5517             uint32_t offset_HI : 8; // Offset - MSB
5518             uint32_t reserved0 : 24;
5519         };
5520         uint32_t word[2];
5521     };
5522 #else
5523 private:
5524     uint32_t word0;
5525     uint32_t word1;
5526 public:
5527     CONSTEXPR dma_m2m_dst_r() :
5528         word0(0),
5529         word1(0)
5530     {}
5531     CONSTEXPR dma_m2m_dst_r(uint64_t init) :
5532         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5533         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5534     {}
5535     CONSTEXPR void operator=(uint64_t value)
5536     {
5537         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5538     }
5539     CONSTEXPR operator uint64_t()
5540     {
5541         return (static_cast<uint64_t>(word1) << 32) | word0;
5542     }
5543     dma_m2m_dst_r copy()
5544     {
5545         return *this;
5546     }
5547 #endif
5548 };
5549 
5550 // current_qread_r - QREAD position being issued (rather than completed)
5551 struct current_qread_r
5552 {
5553 #ifndef __cplusplus
5554     union
5555     {
5556         struct
5557         {
5558             uint32_t value : 32; // 32-bit register value
5559         };
5560         uint32_t word;
5561     };
5562 #else
5563 private:
5564     uint32_t word0;
5565 public:
5566     CONSTEXPR current_qread_r() :
5567         word0(0)
5568     {}
5569     CONSTEXPR current_qread_r(uint32_t init) :
5570         word0(init)
5571     {}
5572     CONSTEXPR void operator=(uint32_t value)
5573     {
5574         word0 = value;
5575     }
5576     CONSTEXPR operator uint32_t()
5577     {
5578         return word0;
5579     }
5580     current_qread_r copy()
5581     {
5582         return *this;
5583     }
5584     CONSTEXPR uint32_t get_value() const
5585     {
5586         auto v = word0;
5587         return v;
5588     }
5589     CONSTEXPR current_qread_r& set_value(uint32_t value)
5590     {
5591         word0 = value;
5592         return *this;
5593     }
5594 #endif
5595 };
5596 
5597 // dma_scale_src_r - DMA scale and bias channel source position on AXI
5598 struct dma_scale_src_r
5599 {
5600 #ifndef __cplusplus
5601     union
5602     {
5603         struct
5604         {
5605             uint32_t offset_LO : 32; // Offset - LSB
5606             uint32_t offset_HI : 8; // Offset - MSB
5607             uint32_t reserved0 : 24;
5608         };
5609         uint32_t word[2];
5610     };
5611 #else
5612 private:
5613     uint32_t word0;
5614     uint32_t word1;
5615 public:
5616     CONSTEXPR dma_scale_src_r() :
5617         word0(0),
5618         word1(0)
5619     {}
5620     CONSTEXPR dma_scale_src_r(uint64_t init) :
5621         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5622         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5623     {}
5624     CONSTEXPR void operator=(uint64_t value)
5625     {
5626         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5627     }
5628     CONSTEXPR operator uint64_t()
5629     {
5630         return (static_cast<uint64_t>(word1) << 32) | word0;
5631     }
5632     dma_scale_src_r copy()
5633     {
5634         return *this;
5635     }
5636 #endif
5637 };
5638 
5639 // dma_weight1_src_r - DMA weight1 channel source position on AXI
5640 struct dma_weight1_src_r
5641 {
5642 #ifndef __cplusplus
5643     union
5644     {
5645         struct
5646         {
5647             uint32_t offset_LO : 32; // Offset - LSB
5648             uint32_t offset_HI : 8; // Offset - MSB
5649             uint32_t reserved0 : 24;
5650         };
5651         uint32_t word[2];
5652     };
5653 #else
5654 private:
5655     uint32_t word0;
5656     uint32_t word1;
5657 public:
5658     CONSTEXPR dma_weight1_src_r() :
5659         word0(0),
5660         word1(0)
5661     {}
5662     CONSTEXPR dma_weight1_src_r(uint64_t init) :
5663         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5664         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5665     {}
5666     CONSTEXPR void operator=(uint64_t value)
5667     {
5668         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5669     }
5670     CONSTEXPR operator uint64_t()
5671     {
5672         return (static_cast<uint64_t>(word1) << 32) | word0;
5673     }
5674     dma_weight1_src_r copy()
5675     {
5676         return *this;
5677     }
5678 #endif
5679 };
5680 
5681 // dma_weight2_src_r - DMA weight2 channel source position on AXI
5682 struct dma_weight2_src_r
5683 {
5684 #ifndef __cplusplus
5685     union
5686     {
5687         struct
5688         {
5689             uint32_t offset_LO : 32; // Offset - LSB
5690             uint32_t offset_HI : 8; // Offset - MSB
5691             uint32_t reserved0 : 24;
5692         };
5693         uint32_t word[2];
5694     };
5695 #else
5696 private:
5697     uint32_t word0;
5698     uint32_t word1;
5699 public:
5700     CONSTEXPR dma_weight2_src_r() :
5701         word0(0),
5702         word1(0)
5703     {}
5704     CONSTEXPR dma_weight2_src_r(uint64_t init) :
5705         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5706         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5707     {}
5708     CONSTEXPR void operator=(uint64_t value)
5709     {
5710         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5711     }
5712     CONSTEXPR operator uint64_t()
5713     {
5714         return (static_cast<uint64_t>(word1) << 32) | word0;
5715     }
5716     dma_weight2_src_r copy()
5717     {
5718         return *this;
5719     }
5720 #endif
5721 };
5722 
5723 // dma_weight3_src_r - DMA weight3 channel source position on AXI
5724 struct dma_weight3_src_r
5725 {
5726 #ifndef __cplusplus
5727     union
5728     {
5729         struct
5730         {
5731             uint32_t offset_LO : 32; // Offset - LSB
5732             uint32_t offset_HI : 8; // Offset - MSB
5733             uint32_t reserved0 : 24;
5734         };
5735         uint32_t word[2];
5736     };
5737 #else
5738 private:
5739     uint32_t word0;
5740     uint32_t word1;
5741 public:
5742     CONSTEXPR dma_weight3_src_r() :
5743         word0(0),
5744         word1(0)
5745     {}
5746     CONSTEXPR dma_weight3_src_r(uint64_t init) :
5747         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
5748         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
5749     {}
5750     CONSTEXPR void operator=(uint64_t value)
5751     {
5752         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
5753     }
5754     CONSTEXPR operator uint64_t()
5755     {
5756         return (static_cast<uint64_t>(word1) << 32) | word0;
5757     }
5758     dma_weight3_src_r copy()
5759     {
5760         return *this;
5761     }
5762 #endif
5763 };
5764 
5765 // current_op_r - Latest NPU OP command issued by the parser
5766 struct current_op_r
5767 {
5768 #ifndef __cplusplus
5769     union
5770     {
5771         struct
5772         {
5773             uint32_t value : 32; // 32-bit register value
5774         };
5775         uint32_t word;
5776     };
5777 #else
5778 private:
5779     uint32_t word0;
5780 public:
5781     CONSTEXPR current_op_r() :
5782         word0(0)
5783     {}
5784     CONSTEXPR current_op_r(uint32_t init) :
5785         word0(init)
5786     {}
5787     CONSTEXPR void operator=(uint32_t value)
5788     {
5789         word0 = value;
5790     }
5791     CONSTEXPR operator uint32_t()
5792     {
5793         return word0;
5794     }
5795     current_op_r copy()
5796     {
5797         return *this;
5798     }
5799     CONSTEXPR uint32_t get_value() const
5800     {
5801         auto v = word0;
5802         return v;
5803     }
5804     CONSTEXPR current_op_r& set_value(uint32_t value)
5805     {
5806         word0 = value;
5807         return *this;
5808     }
5809 #endif
5810 };
5811 
5812 // current_cmd_r - Current 32-bit command being parsed by the command stream parser
5813 struct current_cmd_r
5814 {
5815 #ifndef __cplusplus
5816     union
5817     {
5818         struct
5819         {
5820             uint32_t value : 32; // 32-bit register value
5821         };
5822         uint32_t word;
5823     };
5824 #else
5825 private:
5826     uint32_t word0;
5827 public:
5828     CONSTEXPR current_cmd_r() :
5829         word0(0)
5830     {}
5831     CONSTEXPR current_cmd_r(uint32_t init) :
5832         word0(init)
5833     {}
5834     CONSTEXPR void operator=(uint32_t value)
5835     {
5836         word0 = value;
5837     }
5838     CONSTEXPR operator uint32_t()
5839     {
5840         return word0;
5841     }
5842     current_cmd_r copy()
5843     {
5844         return *this;
5845     }
5846     CONSTEXPR uint32_t get_value() const
5847     {
5848         auto v = word0;
5849         return v;
5850     }
5851     CONSTEXPR current_cmd_r& set_value(uint32_t value)
5852     {
5853         word0 = value;
5854         return *this;
5855     }
5856 #endif
5857 };
5858 
5859 // internal_memory_r - 1KB window onto internal memory as set by DEBUG_ADDRESS
5860 struct internal_memory_r
5861 {
5862 #ifndef __cplusplus
5863     union
5864     {
5865         struct
5866         {
5867             uint32_t mem_word : 32; // Memory word
5868         };
5869         uint32_t word;
5870     };
5871 #else
5872 private:
5873     uint32_t word0;
5874 public:
5875     CONSTEXPR internal_memory_r() :
5876         word0(0)
5877     {}
5878     CONSTEXPR internal_memory_r(uint32_t init) :
5879         word0(init)
5880     {}
5881     CONSTEXPR void operator=(uint32_t value)
5882     {
5883         word0 = value;
5884     }
5885     CONSTEXPR operator uint32_t()
5886     {
5887         return word0;
5888     }
5889     internal_memory_r copy()
5890     {
5891         return *this;
5892     }
5893     CONSTEXPR uint32_t get_mem_word() const
5894     {
5895         auto v = word0;
5896         return v;
5897     }
5898     CONSTEXPR internal_memory_r& set_mem_word(uint32_t value)
5899     {
5900         word0 = value;
5901         return *this;
5902     }
5903 #endif
5904 };
5905 
5906 // ifm_pad_top_r - State managed by NPU_SET_IFM_PAD_TOP
5907 struct ifm_pad_top_r
5908 {
5909 #ifndef __cplusplus
5910     union
5911     {
5912         struct
5913         {
5914             uint32_t value : 32; // 32-bit register value
5915         };
5916         uint32_t word;
5917     };
5918 #else
5919 private:
5920     uint32_t word0;
5921 public:
5922     CONSTEXPR ifm_pad_top_r() :
5923         word0(0)
5924     {}
5925     CONSTEXPR ifm_pad_top_r(uint32_t init) :
5926         word0(init)
5927     {}
5928     CONSTEXPR void operator=(uint32_t value)
5929     {
5930         word0 = value;
5931     }
5932     CONSTEXPR operator uint32_t()
5933     {
5934         return word0;
5935     }
5936     ifm_pad_top_r copy()
5937     {
5938         return *this;
5939     }
5940     CONSTEXPR uint32_t get_value() const
5941     {
5942         auto v = word0;
5943         return v;
5944     }
5945     CONSTEXPR ifm_pad_top_r& set_value(uint32_t value)
5946     {
5947         word0 = value;
5948         return *this;
5949     }
5950 #endif
5951 };
5952 
5953 // ifm_pad_left_r - State managed by NPU_SET_IFM_PAD_LEFT
5954 struct ifm_pad_left_r
5955 {
5956 #ifndef __cplusplus
5957     union
5958     {
5959         struct
5960         {
5961             uint32_t value : 32; // 32-bit register value
5962         };
5963         uint32_t word;
5964     };
5965 #else
5966 private:
5967     uint32_t word0;
5968 public:
5969     CONSTEXPR ifm_pad_left_r() :
5970         word0(0)
5971     {}
5972     CONSTEXPR ifm_pad_left_r(uint32_t init) :
5973         word0(init)
5974     {}
5975     CONSTEXPR void operator=(uint32_t value)
5976     {
5977         word0 = value;
5978     }
5979     CONSTEXPR operator uint32_t()
5980     {
5981         return word0;
5982     }
5983     ifm_pad_left_r copy()
5984     {
5985         return *this;
5986     }
5987     CONSTEXPR uint32_t get_value() const
5988     {
5989         auto v = word0;
5990         return v;
5991     }
5992     CONSTEXPR ifm_pad_left_r& set_value(uint32_t value)
5993     {
5994         word0 = value;
5995         return *this;
5996     }
5997 #endif
5998 };
5999 
6000 // ifm_pad_right_r - State managed by NPU_SET_IFM_PAD_RIGHT
6001 struct ifm_pad_right_r
6002 {
6003 #ifndef __cplusplus
6004     union
6005     {
6006         struct
6007         {
6008             uint32_t value : 32; // 32-bit register value
6009         };
6010         uint32_t word;
6011     };
6012 #else
6013 private:
6014     uint32_t word0;
6015 public:
6016     CONSTEXPR ifm_pad_right_r() :
6017         word0(0)
6018     {}
6019     CONSTEXPR ifm_pad_right_r(uint32_t init) :
6020         word0(init)
6021     {}
6022     CONSTEXPR void operator=(uint32_t value)
6023     {
6024         word0 = value;
6025     }
6026     CONSTEXPR operator uint32_t()
6027     {
6028         return word0;
6029     }
6030     ifm_pad_right_r copy()
6031     {
6032         return *this;
6033     }
6034     CONSTEXPR uint32_t get_value() const
6035     {
6036         auto v = word0;
6037         return v;
6038     }
6039     CONSTEXPR ifm_pad_right_r& set_value(uint32_t value)
6040     {
6041         word0 = value;
6042         return *this;
6043     }
6044 #endif
6045 };
6046 
6047 // ifm_pad_bottom_r - State managed by NPU_SET_IFM_PAD_BOTTOM
6048 struct ifm_pad_bottom_r
6049 {
6050 #ifndef __cplusplus
6051     union
6052     {
6053         struct
6054         {
6055             uint32_t value : 32; // 32-bit register value
6056         };
6057         uint32_t word;
6058     };
6059 #else
6060 private:
6061     uint32_t word0;
6062 public:
6063     CONSTEXPR ifm_pad_bottom_r() :
6064         word0(0)
6065     {}
6066     CONSTEXPR ifm_pad_bottom_r(uint32_t init) :
6067         word0(init)
6068     {}
6069     CONSTEXPR void operator=(uint32_t value)
6070     {
6071         word0 = value;
6072     }
6073     CONSTEXPR operator uint32_t()
6074     {
6075         return word0;
6076     }
6077     ifm_pad_bottom_r copy()
6078     {
6079         return *this;
6080     }
6081     CONSTEXPR uint32_t get_value() const
6082     {
6083         auto v = word0;
6084         return v;
6085     }
6086     CONSTEXPR ifm_pad_bottom_r& set_value(uint32_t value)
6087     {
6088         word0 = value;
6089         return *this;
6090     }
6091 #endif
6092 };
6093 
6094 // ifm_depth_m1_r - State managed by NPU_SET_IFM_DEPTH_M1
6095 struct ifm_depth_m1_r
6096 {
6097 #ifndef __cplusplus
6098     union
6099     {
6100         struct
6101         {
6102             uint32_t value : 32; // 32-bit register value
6103         };
6104         uint32_t word;
6105     };
6106 #else
6107 private:
6108     uint32_t word0;
6109 public:
6110     CONSTEXPR ifm_depth_m1_r() :
6111         word0(0)
6112     {}
6113     CONSTEXPR ifm_depth_m1_r(uint32_t init) :
6114         word0(init)
6115     {}
6116     CONSTEXPR void operator=(uint32_t value)
6117     {
6118         word0 = value;
6119     }
6120     CONSTEXPR operator uint32_t()
6121     {
6122         return word0;
6123     }
6124     ifm_depth_m1_r copy()
6125     {
6126         return *this;
6127     }
6128     CONSTEXPR uint32_t get_value() const
6129     {
6130         auto v = word0;
6131         return v;
6132     }
6133     CONSTEXPR ifm_depth_m1_r& set_value(uint32_t value)
6134     {
6135         word0 = value;
6136         return *this;
6137     }
6138 #endif
6139 };
6140 
6141 // ifm_precision_r - State managed by NPU_SET_IFM_PRECISION
6142 struct ifm_precision_r
6143 {
6144 #ifndef __cplusplus
6145     union
6146     {
6147         struct
6148         {
6149             uint32_t value : 32; // 32-bit register value
6150         };
6151         uint32_t word;
6152     };
6153 #else
6154 private:
6155     uint32_t word0;
6156 public:
6157     CONSTEXPR ifm_precision_r() :
6158         word0(0)
6159     {}
6160     CONSTEXPR ifm_precision_r(uint32_t init) :
6161         word0(init)
6162     {}
6163     CONSTEXPR void operator=(uint32_t value)
6164     {
6165         word0 = value;
6166     }
6167     CONSTEXPR operator uint32_t()
6168     {
6169         return word0;
6170     }
6171     ifm_precision_r copy()
6172     {
6173         return *this;
6174     }
6175     CONSTEXPR uint32_t get_value() const
6176     {
6177         auto v = word0;
6178         return v;
6179     }
6180     CONSTEXPR ifm_precision_r& set_value(uint32_t value)
6181     {
6182         word0 = value;
6183         return *this;
6184     }
6185 #endif
6186 };
6187 
6188 // ifm_upscale_r - State managed by NPU_SET_IFM_UPSCALE
6189 struct ifm_upscale_r
6190 {
6191 #ifndef __cplusplus
6192     union
6193     {
6194         struct
6195         {
6196             uint32_t value : 32; // 32-bit register value
6197         };
6198         uint32_t word;
6199     };
6200 #else
6201 private:
6202     uint32_t word0;
6203 public:
6204     CONSTEXPR ifm_upscale_r() :
6205         word0(0)
6206     {}
6207     CONSTEXPR ifm_upscale_r(uint32_t init) :
6208         word0(init)
6209     {}
6210     CONSTEXPR void operator=(uint32_t value)
6211     {
6212         word0 = value;
6213     }
6214     CONSTEXPR operator uint32_t()
6215     {
6216         return word0;
6217     }
6218     ifm_upscale_r copy()
6219     {
6220         return *this;
6221     }
6222     CONSTEXPR uint32_t get_value() const
6223     {
6224         auto v = word0;
6225         return v;
6226     }
6227     CONSTEXPR ifm_upscale_r& set_value(uint32_t value)
6228     {
6229         word0 = value;
6230         return *this;
6231     }
6232 #endif
6233 };
6234 
6235 // ifm_broadcast_r - State managed by NPU_SET_IFM_BROADCAST
6236 struct ifm_broadcast_r
6237 {
6238 #ifndef __cplusplus
6239     union
6240     {
6241         struct
6242         {
6243             uint32_t value : 32; // 32-bit register value
6244         };
6245         uint32_t word;
6246     };
6247 #else
6248 private:
6249     uint32_t word0;
6250 public:
6251     CONSTEXPR ifm_broadcast_r() :
6252         word0(0)
6253     {}
6254     CONSTEXPR ifm_broadcast_r(uint32_t init) :
6255         word0(init)
6256     {}
6257     CONSTEXPR void operator=(uint32_t value)
6258     {
6259         word0 = value;
6260     }
6261     CONSTEXPR operator uint32_t()
6262     {
6263         return word0;
6264     }
6265     ifm_broadcast_r copy()
6266     {
6267         return *this;
6268     }
6269     CONSTEXPR uint32_t get_value() const
6270     {
6271         auto v = word0;
6272         return v;
6273     }
6274     CONSTEXPR ifm_broadcast_r& set_value(uint32_t value)
6275     {
6276         word0 = value;
6277         return *this;
6278     }
6279 #endif
6280 };
6281 
6282 // ifm_zero_point_r - State managed by NPU_SET_IFM_ZERO_POINT
6283 struct ifm_zero_point_r
6284 {
6285 #ifndef __cplusplus
6286     union
6287     {
6288         struct
6289         {
6290             uint32_t value : 32; // 32-bit register value
6291         };
6292         uint32_t word;
6293     };
6294 #else
6295 private:
6296     uint32_t word0;
6297 public:
6298     CONSTEXPR ifm_zero_point_r() :
6299         word0(0)
6300     {}
6301     CONSTEXPR ifm_zero_point_r(uint32_t init) :
6302         word0(init)
6303     {}
6304     CONSTEXPR void operator=(uint32_t value)
6305     {
6306         word0 = value;
6307     }
6308     CONSTEXPR operator uint32_t()
6309     {
6310         return word0;
6311     }
6312     ifm_zero_point_r copy()
6313     {
6314         return *this;
6315     }
6316     CONSTEXPR uint32_t get_value() const
6317     {
6318         auto v = word0;
6319         return v;
6320     }
6321     CONSTEXPR ifm_zero_point_r& set_value(uint32_t value)
6322     {
6323         word0 = value;
6324         return *this;
6325     }
6326 #endif
6327 };
6328 
6329 // ifm_width0_m1_r - State managed by NPU_SET_IFM_WIDTH0_M1
6330 struct ifm_width0_m1_r
6331 {
6332 #ifndef __cplusplus
6333     union
6334     {
6335         struct
6336         {
6337             uint32_t value : 32; // 32-bit register value
6338         };
6339         uint32_t word;
6340     };
6341 #else
6342 private:
6343     uint32_t word0;
6344 public:
6345     CONSTEXPR ifm_width0_m1_r() :
6346         word0(0)
6347     {}
6348     CONSTEXPR ifm_width0_m1_r(uint32_t init) :
6349         word0(init)
6350     {}
6351     CONSTEXPR void operator=(uint32_t value)
6352     {
6353         word0 = value;
6354     }
6355     CONSTEXPR operator uint32_t()
6356     {
6357         return word0;
6358     }
6359     ifm_width0_m1_r copy()
6360     {
6361         return *this;
6362     }
6363     CONSTEXPR uint32_t get_value() const
6364     {
6365         auto v = word0;
6366         return v;
6367     }
6368     CONSTEXPR ifm_width0_m1_r& set_value(uint32_t value)
6369     {
6370         word0 = value;
6371         return *this;
6372     }
6373 #endif
6374 };
6375 
6376 // ifm_height0_m1_r - State managed by NPU_SET_IFM_HEIGHT0_M1
6377 struct ifm_height0_m1_r
6378 {
6379 #ifndef __cplusplus
6380     union
6381     {
6382         struct
6383         {
6384             uint32_t value : 32; // 32-bit register value
6385         };
6386         uint32_t word;
6387     };
6388 #else
6389 private:
6390     uint32_t word0;
6391 public:
6392     CONSTEXPR ifm_height0_m1_r() :
6393         word0(0)
6394     {}
6395     CONSTEXPR ifm_height0_m1_r(uint32_t init) :
6396         word0(init)
6397     {}
6398     CONSTEXPR void operator=(uint32_t value)
6399     {
6400         word0 = value;
6401     }
6402     CONSTEXPR operator uint32_t()
6403     {
6404         return word0;
6405     }
6406     ifm_height0_m1_r copy()
6407     {
6408         return *this;
6409     }
6410     CONSTEXPR uint32_t get_value() const
6411     {
6412         auto v = word0;
6413         return v;
6414     }
6415     CONSTEXPR ifm_height0_m1_r& set_value(uint32_t value)
6416     {
6417         word0 = value;
6418         return *this;
6419     }
6420 #endif
6421 };
6422 
6423 // ifm_height1_m1_r - State managed by NPU_SET_IFM_HEIGHT1_M1
6424 struct ifm_height1_m1_r
6425 {
6426 #ifndef __cplusplus
6427     union
6428     {
6429         struct
6430         {
6431             uint32_t value : 32; // 32-bit register value
6432         };
6433         uint32_t word;
6434     };
6435 #else
6436 private:
6437     uint32_t word0;
6438 public:
6439     CONSTEXPR ifm_height1_m1_r() :
6440         word0(0)
6441     {}
6442     CONSTEXPR ifm_height1_m1_r(uint32_t init) :
6443         word0(init)
6444     {}
6445     CONSTEXPR void operator=(uint32_t value)
6446     {
6447         word0 = value;
6448     }
6449     CONSTEXPR operator uint32_t()
6450     {
6451         return word0;
6452     }
6453     ifm_height1_m1_r copy()
6454     {
6455         return *this;
6456     }
6457     CONSTEXPR uint32_t get_value() const
6458     {
6459         auto v = word0;
6460         return v;
6461     }
6462     CONSTEXPR ifm_height1_m1_r& set_value(uint32_t value)
6463     {
6464         word0 = value;
6465         return *this;
6466     }
6467 #endif
6468 };
6469 
6470 // ifm_region_r - State managed by NPU_SET_IFM_REGION
6471 struct ifm_region_r
6472 {
6473 #ifndef __cplusplus
6474     union
6475     {
6476         struct
6477         {
6478             uint32_t value : 32; // 32-bit register value
6479         };
6480         uint32_t word;
6481     };
6482 #else
6483 private:
6484     uint32_t word0;
6485 public:
6486     CONSTEXPR ifm_region_r() :
6487         word0(0)
6488     {}
6489     CONSTEXPR ifm_region_r(uint32_t init) :
6490         word0(init)
6491     {}
6492     CONSTEXPR void operator=(uint32_t value)
6493     {
6494         word0 = value;
6495     }
6496     CONSTEXPR operator uint32_t()
6497     {
6498         return word0;
6499     }
6500     ifm_region_r copy()
6501     {
6502         return *this;
6503     }
6504     CONSTEXPR uint32_t get_value() const
6505     {
6506         auto v = word0;
6507         return v;
6508     }
6509     CONSTEXPR ifm_region_r& set_value(uint32_t value)
6510     {
6511         word0 = value;
6512         return *this;
6513     }
6514 #endif
6515 };
6516 
6517 // ofm_width_m1_r - State managed by NPU_SET_OFM_WIDTH_M1
6518 struct ofm_width_m1_r
6519 {
6520 #ifndef __cplusplus
6521     union
6522     {
6523         struct
6524         {
6525             uint32_t value : 32; // 32-bit register value
6526         };
6527         uint32_t word;
6528     };
6529 #else
6530 private:
6531     uint32_t word0;
6532 public:
6533     CONSTEXPR ofm_width_m1_r() :
6534         word0(0)
6535     {}
6536     CONSTEXPR ofm_width_m1_r(uint32_t init) :
6537         word0(init)
6538     {}
6539     CONSTEXPR void operator=(uint32_t value)
6540     {
6541         word0 = value;
6542     }
6543     CONSTEXPR operator uint32_t()
6544     {
6545         return word0;
6546     }
6547     ofm_width_m1_r copy()
6548     {
6549         return *this;
6550     }
6551     CONSTEXPR uint32_t get_value() const
6552     {
6553         auto v = word0;
6554         return v;
6555     }
6556     CONSTEXPR ofm_width_m1_r& set_value(uint32_t value)
6557     {
6558         word0 = value;
6559         return *this;
6560     }
6561 #endif
6562 };
6563 
6564 // ofm_height_m1_r - State managed by NPU_SET_OFM_HEIGHT_M1
6565 struct ofm_height_m1_r
6566 {
6567 #ifndef __cplusplus
6568     union
6569     {
6570         struct
6571         {
6572             uint32_t value : 32; // 32-bit register value
6573         };
6574         uint32_t word;
6575     };
6576 #else
6577 private:
6578     uint32_t word0;
6579 public:
6580     CONSTEXPR ofm_height_m1_r() :
6581         word0(0)
6582     {}
6583     CONSTEXPR ofm_height_m1_r(uint32_t init) :
6584         word0(init)
6585     {}
6586     CONSTEXPR void operator=(uint32_t value)
6587     {
6588         word0 = value;
6589     }
6590     CONSTEXPR operator uint32_t()
6591     {
6592         return word0;
6593     }
6594     ofm_height_m1_r copy()
6595     {
6596         return *this;
6597     }
6598     CONSTEXPR uint32_t get_value() const
6599     {
6600         auto v = word0;
6601         return v;
6602     }
6603     CONSTEXPR ofm_height_m1_r& set_value(uint32_t value)
6604     {
6605         word0 = value;
6606         return *this;
6607     }
6608 #endif
6609 };
6610 
6611 // ofm_depth_m1_r - State managed by NPU_SET_OFM_DEPTH_M1
6612 struct ofm_depth_m1_r
6613 {
6614 #ifndef __cplusplus
6615     union
6616     {
6617         struct
6618         {
6619             uint32_t value : 32; // 32-bit register value
6620         };
6621         uint32_t word;
6622     };
6623 #else
6624 private:
6625     uint32_t word0;
6626 public:
6627     CONSTEXPR ofm_depth_m1_r() :
6628         word0(0)
6629     {}
6630     CONSTEXPR ofm_depth_m1_r(uint32_t init) :
6631         word0(init)
6632     {}
6633     CONSTEXPR void operator=(uint32_t value)
6634     {
6635         word0 = value;
6636     }
6637     CONSTEXPR operator uint32_t()
6638     {
6639         return word0;
6640     }
6641     ofm_depth_m1_r copy()
6642     {
6643         return *this;
6644     }
6645     CONSTEXPR uint32_t get_value() const
6646     {
6647         auto v = word0;
6648         return v;
6649     }
6650     CONSTEXPR ofm_depth_m1_r& set_value(uint32_t value)
6651     {
6652         word0 = value;
6653         return *this;
6654     }
6655 #endif
6656 };
6657 
6658 // ofm_precision_r - State managed by NPU_SET_OFM_PRECISION
6659 struct ofm_precision_r
6660 {
6661 #ifndef __cplusplus
6662     union
6663     {
6664         struct
6665         {
6666             uint32_t value : 32; // 32-bit register value
6667         };
6668         uint32_t word;
6669     };
6670 #else
6671 private:
6672     uint32_t word0;
6673 public:
6674     CONSTEXPR ofm_precision_r() :
6675         word0(0)
6676     {}
6677     CONSTEXPR ofm_precision_r(uint32_t init) :
6678         word0(init)
6679     {}
6680     CONSTEXPR void operator=(uint32_t value)
6681     {
6682         word0 = value;
6683     }
6684     CONSTEXPR operator uint32_t()
6685     {
6686         return word0;
6687     }
6688     ofm_precision_r copy()
6689     {
6690         return *this;
6691     }
6692     CONSTEXPR uint32_t get_value() const
6693     {
6694         auto v = word0;
6695         return v;
6696     }
6697     CONSTEXPR ofm_precision_r& set_value(uint32_t value)
6698     {
6699         word0 = value;
6700         return *this;
6701     }
6702 #endif
6703 };
6704 
6705 // ofm_blk_width_m1_r - State managed by NPU_SET_OFM_BLK_WIDTH_M1
6706 struct ofm_blk_width_m1_r
6707 {
6708 #ifndef __cplusplus
6709     union
6710     {
6711         struct
6712         {
6713             uint32_t value : 32; // 32-bit register value
6714         };
6715         uint32_t word;
6716     };
6717 #else
6718 private:
6719     uint32_t word0;
6720 public:
6721     CONSTEXPR ofm_blk_width_m1_r() :
6722         word0(0)
6723     {}
6724     CONSTEXPR ofm_blk_width_m1_r(uint32_t init) :
6725         word0(init)
6726     {}
6727     CONSTEXPR void operator=(uint32_t value)
6728     {
6729         word0 = value;
6730     }
6731     CONSTEXPR operator uint32_t()
6732     {
6733         return word0;
6734     }
6735     ofm_blk_width_m1_r copy()
6736     {
6737         return *this;
6738     }
6739     CONSTEXPR uint32_t get_value() const
6740     {
6741         auto v = word0;
6742         return v;
6743     }
6744     CONSTEXPR ofm_blk_width_m1_r& set_value(uint32_t value)
6745     {
6746         word0 = value;
6747         return *this;
6748     }
6749 #endif
6750 };
6751 
6752 // ofm_blk_height_m1_r - State managed by NPU_SET_OFM_BLK_HEIGHT_M1
6753 struct ofm_blk_height_m1_r
6754 {
6755 #ifndef __cplusplus
6756     union
6757     {
6758         struct
6759         {
6760             uint32_t value : 32; // 32-bit register value
6761         };
6762         uint32_t word;
6763     };
6764 #else
6765 private:
6766     uint32_t word0;
6767 public:
6768     CONSTEXPR ofm_blk_height_m1_r() :
6769         word0(0)
6770     {}
6771     CONSTEXPR ofm_blk_height_m1_r(uint32_t init) :
6772         word0(init)
6773     {}
6774     CONSTEXPR void operator=(uint32_t value)
6775     {
6776         word0 = value;
6777     }
6778     CONSTEXPR operator uint32_t()
6779     {
6780         return word0;
6781     }
6782     ofm_blk_height_m1_r copy()
6783     {
6784         return *this;
6785     }
6786     CONSTEXPR uint32_t get_value() const
6787     {
6788         auto v = word0;
6789         return v;
6790     }
6791     CONSTEXPR ofm_blk_height_m1_r& set_value(uint32_t value)
6792     {
6793         word0 = value;
6794         return *this;
6795     }
6796 #endif
6797 };
6798 
6799 // ofm_blk_depth_m1_r - State managed by NPU_SET_OFM_BLK_DEPTH_M1
6800 struct ofm_blk_depth_m1_r
6801 {
6802 #ifndef __cplusplus
6803     union
6804     {
6805         struct
6806         {
6807             uint32_t value : 32; // 32-bit register value
6808         };
6809         uint32_t word;
6810     };
6811 #else
6812 private:
6813     uint32_t word0;
6814 public:
6815     CONSTEXPR ofm_blk_depth_m1_r() :
6816         word0(0)
6817     {}
6818     CONSTEXPR ofm_blk_depth_m1_r(uint32_t init) :
6819         word0(init)
6820     {}
6821     CONSTEXPR void operator=(uint32_t value)
6822     {
6823         word0 = value;
6824     }
6825     CONSTEXPR operator uint32_t()
6826     {
6827         return word0;
6828     }
6829     ofm_blk_depth_m1_r copy()
6830     {
6831         return *this;
6832     }
6833     CONSTEXPR uint32_t get_value() const
6834     {
6835         auto v = word0;
6836         return v;
6837     }
6838     CONSTEXPR ofm_blk_depth_m1_r& set_value(uint32_t value)
6839     {
6840         word0 = value;
6841         return *this;
6842     }
6843 #endif
6844 };
6845 
6846 // ofm_zero_point_r - State managed by NPU_SET_OFM_ZERO_POINT
6847 struct ofm_zero_point_r
6848 {
6849 #ifndef __cplusplus
6850     union
6851     {
6852         struct
6853         {
6854             uint32_t value : 32; // 32-bit register value
6855         };
6856         uint32_t word;
6857     };
6858 #else
6859 private:
6860     uint32_t word0;
6861 public:
6862     CONSTEXPR ofm_zero_point_r() :
6863         word0(0)
6864     {}
6865     CONSTEXPR ofm_zero_point_r(uint32_t init) :
6866         word0(init)
6867     {}
6868     CONSTEXPR void operator=(uint32_t value)
6869     {
6870         word0 = value;
6871     }
6872     CONSTEXPR operator uint32_t()
6873     {
6874         return word0;
6875     }
6876     ofm_zero_point_r copy()
6877     {
6878         return *this;
6879     }
6880     CONSTEXPR uint32_t get_value() const
6881     {
6882         auto v = word0;
6883         return v;
6884     }
6885     CONSTEXPR ofm_zero_point_r& set_value(uint32_t value)
6886     {
6887         word0 = value;
6888         return *this;
6889     }
6890 #endif
6891 };
6892 
6893 // ofm_width0_m1_r - State managed by NPU_SET_OFM_WIDTH0_M1
6894 struct ofm_width0_m1_r
6895 {
6896 #ifndef __cplusplus
6897     union
6898     {
6899         struct
6900         {
6901             uint32_t value : 32; // 32-bit register value
6902         };
6903         uint32_t word;
6904     };
6905 #else
6906 private:
6907     uint32_t word0;
6908 public:
6909     CONSTEXPR ofm_width0_m1_r() :
6910         word0(0)
6911     {}
6912     CONSTEXPR ofm_width0_m1_r(uint32_t init) :
6913         word0(init)
6914     {}
6915     CONSTEXPR void operator=(uint32_t value)
6916     {
6917         word0 = value;
6918     }
6919     CONSTEXPR operator uint32_t()
6920     {
6921         return word0;
6922     }
6923     ofm_width0_m1_r copy()
6924     {
6925         return *this;
6926     }
6927     CONSTEXPR uint32_t get_value() const
6928     {
6929         auto v = word0;
6930         return v;
6931     }
6932     CONSTEXPR ofm_width0_m1_r& set_value(uint32_t value)
6933     {
6934         word0 = value;
6935         return *this;
6936     }
6937 #endif
6938 };
6939 
6940 // ofm_height0_m1_r - State managed by NPU_SET_OFM_HEIGHT0_M1
6941 struct ofm_height0_m1_r
6942 {
6943 #ifndef __cplusplus
6944     union
6945     {
6946         struct
6947         {
6948             uint32_t value : 32; // 32-bit register value
6949         };
6950         uint32_t word;
6951     };
6952 #else
6953 private:
6954     uint32_t word0;
6955 public:
6956     CONSTEXPR ofm_height0_m1_r() :
6957         word0(0)
6958     {}
6959     CONSTEXPR ofm_height0_m1_r(uint32_t init) :
6960         word0(init)
6961     {}
6962     CONSTEXPR void operator=(uint32_t value)
6963     {
6964         word0 = value;
6965     }
6966     CONSTEXPR operator uint32_t()
6967     {
6968         return word0;
6969     }
6970     ofm_height0_m1_r copy()
6971     {
6972         return *this;
6973     }
6974     CONSTEXPR uint32_t get_value() const
6975     {
6976         auto v = word0;
6977         return v;
6978     }
6979     CONSTEXPR ofm_height0_m1_r& set_value(uint32_t value)
6980     {
6981         word0 = value;
6982         return *this;
6983     }
6984 #endif
6985 };
6986 
6987 // ofm_height1_m1_r - State managed by NPU_SET_OFM_HEIGHT1_M1
6988 struct ofm_height1_m1_r
6989 {
6990 #ifndef __cplusplus
6991     union
6992     {
6993         struct
6994         {
6995             uint32_t value : 32; // 32-bit register value
6996         };
6997         uint32_t word;
6998     };
6999 #else
7000 private:
7001     uint32_t word0;
7002 public:
7003     CONSTEXPR ofm_height1_m1_r() :
7004         word0(0)
7005     {}
7006     CONSTEXPR ofm_height1_m1_r(uint32_t init) :
7007         word0(init)
7008     {}
7009     CONSTEXPR void operator=(uint32_t value)
7010     {
7011         word0 = value;
7012     }
7013     CONSTEXPR operator uint32_t()
7014     {
7015         return word0;
7016     }
7017     ofm_height1_m1_r copy()
7018     {
7019         return *this;
7020     }
7021     CONSTEXPR uint32_t get_value() const
7022     {
7023         auto v = word0;
7024         return v;
7025     }
7026     CONSTEXPR ofm_height1_m1_r& set_value(uint32_t value)
7027     {
7028         word0 = value;
7029         return *this;
7030     }
7031 #endif
7032 };
7033 
7034 // ofm_region_r - State managed by NPU_SET_OFM_REGION
7035 struct ofm_region_r
7036 {
7037 #ifndef __cplusplus
7038     union
7039     {
7040         struct
7041         {
7042             uint32_t value : 32; // 32-bit register value
7043         };
7044         uint32_t word;
7045     };
7046 #else
7047 private:
7048     uint32_t word0;
7049 public:
7050     CONSTEXPR ofm_region_r() :
7051         word0(0)
7052     {}
7053     CONSTEXPR ofm_region_r(uint32_t init) :
7054         word0(init)
7055     {}
7056     CONSTEXPR void operator=(uint32_t value)
7057     {
7058         word0 = value;
7059     }
7060     CONSTEXPR operator uint32_t()
7061     {
7062         return word0;
7063     }
7064     ofm_region_r copy()
7065     {
7066         return *this;
7067     }
7068     CONSTEXPR uint32_t get_value() const
7069     {
7070         auto v = word0;
7071         return v;
7072     }
7073     CONSTEXPR ofm_region_r& set_value(uint32_t value)
7074     {
7075         word0 = value;
7076         return *this;
7077     }
7078 #endif
7079 };
7080 
7081 // kernel_width_m1_r - State managed by NPU_SET_KERNEL_WIDTH_M1
7082 struct kernel_width_m1_r
7083 {
7084 #ifndef __cplusplus
7085     union
7086     {
7087         struct
7088         {
7089             uint32_t value : 32; // 32-bit register value
7090         };
7091         uint32_t word;
7092     };
7093 #else
7094 private:
7095     uint32_t word0;
7096 public:
7097     CONSTEXPR kernel_width_m1_r() :
7098         word0(0)
7099     {}
7100     CONSTEXPR kernel_width_m1_r(uint32_t init) :
7101         word0(init)
7102     {}
7103     CONSTEXPR void operator=(uint32_t value)
7104     {
7105         word0 = value;
7106     }
7107     CONSTEXPR operator uint32_t()
7108     {
7109         return word0;
7110     }
7111     kernel_width_m1_r copy()
7112     {
7113         return *this;
7114     }
7115     CONSTEXPR uint32_t get_value() const
7116     {
7117         auto v = word0;
7118         return v;
7119     }
7120     CONSTEXPR kernel_width_m1_r& set_value(uint32_t value)
7121     {
7122         word0 = value;
7123         return *this;
7124     }
7125 #endif
7126 };
7127 
7128 // kernel_height_m1_r - State managed by NPU_SET_KERNEL_HEIGHT_M1
7129 struct kernel_height_m1_r
7130 {
7131 #ifndef __cplusplus
7132     union
7133     {
7134         struct
7135         {
7136             uint32_t value : 32; // 32-bit register value
7137         };
7138         uint32_t word;
7139     };
7140 #else
7141 private:
7142     uint32_t word0;
7143 public:
7144     CONSTEXPR kernel_height_m1_r() :
7145         word0(0)
7146     {}
7147     CONSTEXPR kernel_height_m1_r(uint32_t init) :
7148         word0(init)
7149     {}
7150     CONSTEXPR void operator=(uint32_t value)
7151     {
7152         word0 = value;
7153     }
7154     CONSTEXPR operator uint32_t()
7155     {
7156         return word0;
7157     }
7158     kernel_height_m1_r copy()
7159     {
7160         return *this;
7161     }
7162     CONSTEXPR uint32_t get_value() const
7163     {
7164         auto v = word0;
7165         return v;
7166     }
7167     CONSTEXPR kernel_height_m1_r& set_value(uint32_t value)
7168     {
7169         word0 = value;
7170         return *this;
7171     }
7172 #endif
7173 };
7174 
7175 // kernel_stride_r - State managed by NPU_SET_KERNEL_STRIDE
7176 struct kernel_stride_r
7177 {
7178 #ifndef __cplusplus
7179     union
7180     {
7181         struct
7182         {
7183             uint32_t value : 32; // 32-bit register value
7184         };
7185         uint32_t word;
7186     };
7187 #else
7188 private:
7189     uint32_t word0;
7190 public:
7191     CONSTEXPR kernel_stride_r() :
7192         word0(0)
7193     {}
7194     CONSTEXPR kernel_stride_r(uint32_t init) :
7195         word0(init)
7196     {}
7197     CONSTEXPR void operator=(uint32_t value)
7198     {
7199         word0 = value;
7200     }
7201     CONSTEXPR operator uint32_t()
7202     {
7203         return word0;
7204     }
7205     kernel_stride_r copy()
7206     {
7207         return *this;
7208     }
7209     CONSTEXPR uint32_t get_value() const
7210     {
7211         auto v = word0;
7212         return v;
7213     }
7214     CONSTEXPR kernel_stride_r& set_value(uint32_t value)
7215     {
7216         word0 = value;
7217         return *this;
7218     }
7219 #endif
7220 };
7221 
7222 // acc_format_r - State managed by NPU_SET_ACC_FORMAT
7223 struct acc_format_r
7224 {
7225 #ifndef __cplusplus
7226     union
7227     {
7228         struct
7229         {
7230             uint32_t value : 32; // 32-bit register value
7231         };
7232         uint32_t word;
7233     };
7234 #else
7235 private:
7236     uint32_t word0;
7237 public:
7238     CONSTEXPR acc_format_r() :
7239         word0(0)
7240     {}
7241     CONSTEXPR acc_format_r(uint32_t init) :
7242         word0(init)
7243     {}
7244     CONSTEXPR void operator=(uint32_t value)
7245     {
7246         word0 = value;
7247     }
7248     CONSTEXPR operator uint32_t()
7249     {
7250         return word0;
7251     }
7252     acc_format_r copy()
7253     {
7254         return *this;
7255     }
7256     CONSTEXPR uint32_t get_value() const
7257     {
7258         auto v = word0;
7259         return v;
7260     }
7261     CONSTEXPR acc_format_r& set_value(uint32_t value)
7262     {
7263         word0 = value;
7264         return *this;
7265     }
7266 #endif
7267 };
7268 
7269 // activation_r - State managed by NPU_SET_ACTIVATION
7270 struct activation_r
7271 {
7272 #ifndef __cplusplus
7273     union
7274     {
7275         struct
7276         {
7277             uint32_t value : 32; // 32-bit register value
7278         };
7279         uint32_t word;
7280     };
7281 #else
7282 private:
7283     uint32_t word0;
7284 public:
7285     CONSTEXPR activation_r() :
7286         word0(0)
7287     {}
7288     CONSTEXPR activation_r(uint32_t init) :
7289         word0(init)
7290     {}
7291     CONSTEXPR void operator=(uint32_t value)
7292     {
7293         word0 = value;
7294     }
7295     CONSTEXPR operator uint32_t()
7296     {
7297         return word0;
7298     }
7299     activation_r copy()
7300     {
7301         return *this;
7302     }
7303     CONSTEXPR uint32_t get_value() const
7304     {
7305         auto v = word0;
7306         return v;
7307     }
7308     CONSTEXPR activation_r& set_value(uint32_t value)
7309     {
7310         word0 = value;
7311         return *this;
7312     }
7313 #endif
7314 };
7315 
7316 // activation_min_r - State managed by NPU_SET_ACTIVATION_MIN
7317 struct activation_min_r
7318 {
7319 #ifndef __cplusplus
7320     union
7321     {
7322         struct
7323         {
7324             uint32_t value : 32; // 32-bit register value
7325         };
7326         uint32_t word;
7327     };
7328 #else
7329 private:
7330     uint32_t word0;
7331 public:
7332     CONSTEXPR activation_min_r() :
7333         word0(0)
7334     {}
7335     CONSTEXPR activation_min_r(uint32_t init) :
7336         word0(init)
7337     {}
7338     CONSTEXPR void operator=(uint32_t value)
7339     {
7340         word0 = value;
7341     }
7342     CONSTEXPR operator uint32_t()
7343     {
7344         return word0;
7345     }
7346     activation_min_r copy()
7347     {
7348         return *this;
7349     }
7350     CONSTEXPR uint32_t get_value() const
7351     {
7352         auto v = word0;
7353         return v;
7354     }
7355     CONSTEXPR activation_min_r& set_value(uint32_t value)
7356     {
7357         word0 = value;
7358         return *this;
7359     }
7360 #endif
7361 };
7362 
7363 // activation_max_r - State managed by NPU_SET_ACTIVATION_MAX
7364 struct activation_max_r
7365 {
7366 #ifndef __cplusplus
7367     union
7368     {
7369         struct
7370         {
7371             uint32_t value : 32; // 32-bit register value
7372         };
7373         uint32_t word;
7374     };
7375 #else
7376 private:
7377     uint32_t word0;
7378 public:
7379     CONSTEXPR activation_max_r() :
7380         word0(0)
7381     {}
7382     CONSTEXPR activation_max_r(uint32_t init) :
7383         word0(init)
7384     {}
7385     CONSTEXPR void operator=(uint32_t value)
7386     {
7387         word0 = value;
7388     }
7389     CONSTEXPR operator uint32_t()
7390     {
7391         return word0;
7392     }
7393     activation_max_r copy()
7394     {
7395         return *this;
7396     }
7397     CONSTEXPR uint32_t get_value() const
7398     {
7399         auto v = word0;
7400         return v;
7401     }
7402     CONSTEXPR activation_max_r& set_value(uint32_t value)
7403     {
7404         word0 = value;
7405         return *this;
7406     }
7407 #endif
7408 };
7409 
7410 // weight_region_r - State managed by NPU_SET_WEIGHT_REGION
7411 struct weight_region_r
7412 {
7413 #ifndef __cplusplus
7414     union
7415     {
7416         struct
7417         {
7418             uint32_t value : 32; // 32-bit register value
7419         };
7420         uint32_t word;
7421     };
7422 #else
7423 private:
7424     uint32_t word0;
7425 public:
7426     CONSTEXPR weight_region_r() :
7427         word0(0)
7428     {}
7429     CONSTEXPR weight_region_r(uint32_t init) :
7430         word0(init)
7431     {}
7432     CONSTEXPR void operator=(uint32_t value)
7433     {
7434         word0 = value;
7435     }
7436     CONSTEXPR operator uint32_t()
7437     {
7438         return word0;
7439     }
7440     weight_region_r copy()
7441     {
7442         return *this;
7443     }
7444     CONSTEXPR uint32_t get_value() const
7445     {
7446         auto v = word0;
7447         return v;
7448     }
7449     CONSTEXPR weight_region_r& set_value(uint32_t value)
7450     {
7451         word0 = value;
7452         return *this;
7453     }
7454 #endif
7455 };
7456 
7457 // scale_region_r - State managed by NPU_SET_SCALE_REGION
7458 struct scale_region_r
7459 {
7460 #ifndef __cplusplus
7461     union
7462     {
7463         struct
7464         {
7465             uint32_t value : 32; // 32-bit register value
7466         };
7467         uint32_t word;
7468     };
7469 #else
7470 private:
7471     uint32_t word0;
7472 public:
7473     CONSTEXPR scale_region_r() :
7474         word0(0)
7475     {}
7476     CONSTEXPR scale_region_r(uint32_t init) :
7477         word0(init)
7478     {}
7479     CONSTEXPR void operator=(uint32_t value)
7480     {
7481         word0 = value;
7482     }
7483     CONSTEXPR operator uint32_t()
7484     {
7485         return word0;
7486     }
7487     scale_region_r copy()
7488     {
7489         return *this;
7490     }
7491     CONSTEXPR uint32_t get_value() const
7492     {
7493         auto v = word0;
7494         return v;
7495     }
7496     CONSTEXPR scale_region_r& set_value(uint32_t value)
7497     {
7498         word0 = value;
7499         return *this;
7500     }
7501 #endif
7502 };
7503 
7504 // resize_x_scale_n_m1_r - State managed by NPU_SET_RESIZE_X_SCALE_N_M1
7505 struct resize_x_scale_n_m1_r
7506 {
7507 #ifndef __cplusplus
7508     union
7509     {
7510         struct
7511         {
7512             uint32_t value : 32; // 32-bit register value
7513         };
7514         uint32_t word;
7515     };
7516 #else
7517 private:
7518     uint32_t word0;
7519 public:
7520     CONSTEXPR resize_x_scale_n_m1_r() :
7521         word0(0)
7522     {}
7523     CONSTEXPR resize_x_scale_n_m1_r(uint32_t init) :
7524         word0(init)
7525     {}
7526     CONSTEXPR void operator=(uint32_t value)
7527     {
7528         word0 = value;
7529     }
7530     CONSTEXPR operator uint32_t()
7531     {
7532         return word0;
7533     }
7534     resize_x_scale_n_m1_r copy()
7535     {
7536         return *this;
7537     }
7538     CONSTEXPR uint32_t get_value() const
7539     {
7540         auto v = word0;
7541         return v;
7542     }
7543     CONSTEXPR resize_x_scale_n_m1_r& set_value(uint32_t value)
7544     {
7545         word0 = value;
7546         return *this;
7547     }
7548 #endif
7549 };
7550 
7551 // resize_y_scale_n_m1_r - State managed by NPU_SET_RESIZE_Y_SCALE_N_M1
7552 struct resize_y_scale_n_m1_r
7553 {
7554 #ifndef __cplusplus
7555     union
7556     {
7557         struct
7558         {
7559             uint32_t value : 32; // 32-bit register value
7560         };
7561         uint32_t word;
7562     };
7563 #else
7564 private:
7565     uint32_t word0;
7566 public:
7567     CONSTEXPR resize_y_scale_n_m1_r() :
7568         word0(0)
7569     {}
7570     CONSTEXPR resize_y_scale_n_m1_r(uint32_t init) :
7571         word0(init)
7572     {}
7573     CONSTEXPR void operator=(uint32_t value)
7574     {
7575         word0 = value;
7576     }
7577     CONSTEXPR operator uint32_t()
7578     {
7579         return word0;
7580     }
7581     resize_y_scale_n_m1_r copy()
7582     {
7583         return *this;
7584     }
7585     CONSTEXPR uint32_t get_value() const
7586     {
7587         auto v = word0;
7588         return v;
7589     }
7590     CONSTEXPR resize_y_scale_n_m1_r& set_value(uint32_t value)
7591     {
7592         word0 = value;
7593         return *this;
7594     }
7595 #endif
7596 };
7597 
7598 // resize_x_offset_r - State managed by NPU_SET_RESIZE_X_OFFSET
7599 struct resize_x_offset_r
7600 {
7601 #ifndef __cplusplus
7602     union
7603     {
7604         struct
7605         {
7606             uint32_t value : 32; // 32-bit register value
7607         };
7608         uint32_t word;
7609     };
7610 #else
7611 private:
7612     uint32_t word0;
7613 public:
7614     CONSTEXPR resize_x_offset_r() :
7615         word0(0)
7616     {}
7617     CONSTEXPR resize_x_offset_r(uint32_t init) :
7618         word0(init)
7619     {}
7620     CONSTEXPR void operator=(uint32_t value)
7621     {
7622         word0 = value;
7623     }
7624     CONSTEXPR operator uint32_t()
7625     {
7626         return word0;
7627     }
7628     resize_x_offset_r copy()
7629     {
7630         return *this;
7631     }
7632     CONSTEXPR uint32_t get_value() const
7633     {
7634         auto v = word0;
7635         return v;
7636     }
7637     CONSTEXPR resize_x_offset_r& set_value(uint32_t value)
7638     {
7639         word0 = value;
7640         return *this;
7641     }
7642 #endif
7643 };
7644 
7645 // resize_y_offset_r - State managed by NPU_SET_RESIZE_Y_OFFSET
7646 struct resize_y_offset_r
7647 {
7648 #ifndef __cplusplus
7649     union
7650     {
7651         struct
7652         {
7653             uint32_t value : 32; // 32-bit register value
7654         };
7655         uint32_t word;
7656     };
7657 #else
7658 private:
7659     uint32_t word0;
7660 public:
7661     CONSTEXPR resize_y_offset_r() :
7662         word0(0)
7663     {}
7664     CONSTEXPR resize_y_offset_r(uint32_t init) :
7665         word0(init)
7666     {}
7667     CONSTEXPR void operator=(uint32_t value)
7668     {
7669         word0 = value;
7670     }
7671     CONSTEXPR operator uint32_t()
7672     {
7673         return word0;
7674     }
7675     resize_y_offset_r copy()
7676     {
7677         return *this;
7678     }
7679     CONSTEXPR uint32_t get_value() const
7680     {
7681         auto v = word0;
7682         return v;
7683     }
7684     CONSTEXPR resize_y_offset_r& set_value(uint32_t value)
7685     {
7686         word0 = value;
7687         return *this;
7688     }
7689 #endif
7690 };
7691 
7692 // weight_format_r - State managed by NPU_SET_WEIGHT_FORMAT
7693 struct weight_format_r
7694 {
7695 #ifndef __cplusplus
7696     union
7697     {
7698         struct
7699         {
7700             uint32_t value : 32; // 32-bit register value
7701         };
7702         uint32_t word;
7703     };
7704 #else
7705 private:
7706     uint32_t word0;
7707 public:
7708     CONSTEXPR weight_format_r() :
7709         word0(0)
7710     {}
7711     CONSTEXPR weight_format_r(uint32_t init) :
7712         word0(init)
7713     {}
7714     CONSTEXPR void operator=(uint32_t value)
7715     {
7716         word0 = value;
7717     }
7718     CONSTEXPR operator uint32_t()
7719     {
7720         return word0;
7721     }
7722     weight_format_r copy()
7723     {
7724         return *this;
7725     }
7726     CONSTEXPR uint32_t get_value() const
7727     {
7728         auto v = word0;
7729         return v;
7730     }
7731     CONSTEXPR weight_format_r& set_value(uint32_t value)
7732     {
7733         word0 = value;
7734         return *this;
7735     }
7736 #endif
7737 };
7738 
7739 // blockdep_r - State managed by NPU_SET_BLOCKDEP
7740 struct blockdep_r
7741 {
7742 #ifndef __cplusplus
7743     union
7744     {
7745         struct
7746         {
7747             uint32_t value : 32; // 32-bit register value
7748         };
7749         uint32_t word;
7750     };
7751 #else
7752 private:
7753     uint32_t word0;
7754 public:
7755     CONSTEXPR blockdep_r() :
7756         word0(0)
7757     {}
7758     CONSTEXPR blockdep_r(uint32_t init) :
7759         word0(init)
7760     {}
7761     CONSTEXPR void operator=(uint32_t value)
7762     {
7763         word0 = value;
7764     }
7765     CONSTEXPR operator uint32_t()
7766     {
7767         return word0;
7768     }
7769     blockdep_r copy()
7770     {
7771         return *this;
7772     }
7773     CONSTEXPR uint32_t get_value() const
7774     {
7775         auto v = word0;
7776         return v;
7777     }
7778     CONSTEXPR blockdep_r& set_value(uint32_t value)
7779     {
7780         word0 = value;
7781         return *this;
7782     }
7783 #endif
7784 };
7785 
7786 // dma0_src_region_r - State managed by NPU_SET_DMA0_SRC_REGION
7787 struct dma0_src_region_r
7788 {
7789 #ifndef __cplusplus
7790     union
7791     {
7792         struct
7793         {
7794             uint32_t value : 32; // 32-bit register value
7795         };
7796         uint32_t word;
7797     };
7798 #else
7799 private:
7800     uint32_t word0;
7801 public:
7802     CONSTEXPR dma0_src_region_r() :
7803         word0(0)
7804     {}
7805     CONSTEXPR dma0_src_region_r(uint32_t init) :
7806         word0(init)
7807     {}
7808     CONSTEXPR void operator=(uint32_t value)
7809     {
7810         word0 = value;
7811     }
7812     CONSTEXPR operator uint32_t()
7813     {
7814         return word0;
7815     }
7816     dma0_src_region_r copy()
7817     {
7818         return *this;
7819     }
7820     CONSTEXPR uint32_t get_value() const
7821     {
7822         auto v = word0;
7823         return v;
7824     }
7825     CONSTEXPR dma0_src_region_r& set_value(uint32_t value)
7826     {
7827         word0 = value;
7828         return *this;
7829     }
7830 #endif
7831 };
7832 
7833 // dma0_dst_region_r - State managed by NPU_SET_DMA0_DST_REGION
7834 struct dma0_dst_region_r
7835 {
7836 #ifndef __cplusplus
7837     union
7838     {
7839         struct
7840         {
7841             uint32_t value : 32; // 32-bit register value
7842         };
7843         uint32_t word;
7844     };
7845 #else
7846 private:
7847     uint32_t word0;
7848 public:
7849     CONSTEXPR dma0_dst_region_r() :
7850         word0(0)
7851     {}
7852     CONSTEXPR dma0_dst_region_r(uint32_t init) :
7853         word0(init)
7854     {}
7855     CONSTEXPR void operator=(uint32_t value)
7856     {
7857         word0 = value;
7858     }
7859     CONSTEXPR operator uint32_t()
7860     {
7861         return word0;
7862     }
7863     dma0_dst_region_r copy()
7864     {
7865         return *this;
7866     }
7867     CONSTEXPR uint32_t get_value() const
7868     {
7869         auto v = word0;
7870         return v;
7871     }
7872     CONSTEXPR dma0_dst_region_r& set_value(uint32_t value)
7873     {
7874         word0 = value;
7875         return *this;
7876     }
7877 #endif
7878 };
7879 
7880 // dma0_size0_r - State managed by NPU_SET_DMA0_SIZE0
7881 struct dma0_size0_r
7882 {
7883 #ifndef __cplusplus
7884     union
7885     {
7886         struct
7887         {
7888             uint32_t value : 32; // 32-bit register value
7889         };
7890         uint32_t word;
7891     };
7892 #else
7893 private:
7894     uint32_t word0;
7895 public:
7896     CONSTEXPR dma0_size0_r() :
7897         word0(0)
7898     {}
7899     CONSTEXPR dma0_size0_r(uint32_t init) :
7900         word0(init)
7901     {}
7902     CONSTEXPR void operator=(uint32_t value)
7903     {
7904         word0 = value;
7905     }
7906     CONSTEXPR operator uint32_t()
7907     {
7908         return word0;
7909     }
7910     dma0_size0_r copy()
7911     {
7912         return *this;
7913     }
7914     CONSTEXPR uint32_t get_value() const
7915     {
7916         auto v = word0;
7917         return v;
7918     }
7919     CONSTEXPR dma0_size0_r& set_value(uint32_t value)
7920     {
7921         word0 = value;
7922         return *this;
7923     }
7924 #endif
7925 };
7926 
7927 // dma0_size1_r - State managed by NPU_SET_DMA0_SIZE1
7928 struct dma0_size1_r
7929 {
7930 #ifndef __cplusplus
7931     union
7932     {
7933         struct
7934         {
7935             uint32_t value : 32; // 32-bit register value
7936         };
7937         uint32_t word;
7938     };
7939 #else
7940 private:
7941     uint32_t word0;
7942 public:
7943     CONSTEXPR dma0_size1_r() :
7944         word0(0)
7945     {}
7946     CONSTEXPR dma0_size1_r(uint32_t init) :
7947         word0(init)
7948     {}
7949     CONSTEXPR void operator=(uint32_t value)
7950     {
7951         word0 = value;
7952     }
7953     CONSTEXPR operator uint32_t()
7954     {
7955         return word0;
7956     }
7957     dma0_size1_r copy()
7958     {
7959         return *this;
7960     }
7961     CONSTEXPR uint32_t get_value() const
7962     {
7963         auto v = word0;
7964         return v;
7965     }
7966     CONSTEXPR dma0_size1_r& set_value(uint32_t value)
7967     {
7968         word0 = value;
7969         return *this;
7970     }
7971 #endif
7972 };
7973 
7974 // dma0_idx_region_r - State managed by NPU_SET_DMA0_IDX_REGION
7975 struct dma0_idx_region_r
7976 {
7977 #ifndef __cplusplus
7978     union
7979     {
7980         struct
7981         {
7982             uint32_t value : 32; // 32-bit register value
7983         };
7984         uint32_t word;
7985     };
7986 #else
7987 private:
7988     uint32_t word0;
7989 public:
7990     CONSTEXPR dma0_idx_region_r() :
7991         word0(0)
7992     {}
7993     CONSTEXPR dma0_idx_region_r(uint32_t init) :
7994         word0(init)
7995     {}
7996     CONSTEXPR void operator=(uint32_t value)
7997     {
7998         word0 = value;
7999     }
8000     CONSTEXPR operator uint32_t()
8001     {
8002         return word0;
8003     }
8004     dma0_idx_region_r copy()
8005     {
8006         return *this;
8007     }
8008     CONSTEXPR uint32_t get_value() const
8009     {
8010         auto v = word0;
8011         return v;
8012     }
8013     CONSTEXPR dma0_idx_region_r& set_value(uint32_t value)
8014     {
8015         word0 = value;
8016         return *this;
8017     }
8018 #endif
8019 };
8020 
8021 // ifm2_broadcast_r - State managed by NPU_SET_IFM2_BROADCAST
8022 struct ifm2_broadcast_r
8023 {
8024 #ifndef __cplusplus
8025     union
8026     {
8027         struct
8028         {
8029             uint32_t value : 32; // 32-bit register value
8030         };
8031         uint32_t word;
8032     };
8033 #else
8034 private:
8035     uint32_t word0;
8036 public:
8037     CONSTEXPR ifm2_broadcast_r() :
8038         word0(0)
8039     {}
8040     CONSTEXPR ifm2_broadcast_r(uint32_t init) :
8041         word0(init)
8042     {}
8043     CONSTEXPR void operator=(uint32_t value)
8044     {
8045         word0 = value;
8046     }
8047     CONSTEXPR operator uint32_t()
8048     {
8049         return word0;
8050     }
8051     ifm2_broadcast_r copy()
8052     {
8053         return *this;
8054     }
8055     CONSTEXPR uint32_t get_value() const
8056     {
8057         auto v = word0;
8058         return v;
8059     }
8060     CONSTEXPR ifm2_broadcast_r& set_value(uint32_t value)
8061     {
8062         word0 = value;
8063         return *this;
8064     }
8065 #endif
8066 };
8067 
8068 // ifm2_precision_r - State managed by NPU_SET_IFM2_PRECISION
8069 struct ifm2_precision_r
8070 {
8071 #ifndef __cplusplus
8072     union
8073     {
8074         struct
8075         {
8076             uint32_t value : 32; // 32-bit register value
8077         };
8078         uint32_t word;
8079     };
8080 #else
8081 private:
8082     uint32_t word0;
8083 public:
8084     CONSTEXPR ifm2_precision_r() :
8085         word0(0)
8086     {}
8087     CONSTEXPR ifm2_precision_r(uint32_t init) :
8088         word0(init)
8089     {}
8090     CONSTEXPR void operator=(uint32_t value)
8091     {
8092         word0 = value;
8093     }
8094     CONSTEXPR operator uint32_t()
8095     {
8096         return word0;
8097     }
8098     ifm2_precision_r copy()
8099     {
8100         return *this;
8101     }
8102     CONSTEXPR uint32_t get_value() const
8103     {
8104         auto v = word0;
8105         return v;
8106     }
8107     CONSTEXPR ifm2_precision_r& set_value(uint32_t value)
8108     {
8109         word0 = value;
8110         return *this;
8111     }
8112 #endif
8113 };
8114 
8115 // ifm2_zero_point_r - State managed by NPU_SET_IFM2_ZERO_POINT
8116 struct ifm2_zero_point_r
8117 {
8118 #ifndef __cplusplus
8119     union
8120     {
8121         struct
8122         {
8123             uint32_t value : 32; // 32-bit register value
8124         };
8125         uint32_t word;
8126     };
8127 #else
8128 private:
8129     uint32_t word0;
8130 public:
8131     CONSTEXPR ifm2_zero_point_r() :
8132         word0(0)
8133     {}
8134     CONSTEXPR ifm2_zero_point_r(uint32_t init) :
8135         word0(init)
8136     {}
8137     CONSTEXPR void operator=(uint32_t value)
8138     {
8139         word0 = value;
8140     }
8141     CONSTEXPR operator uint32_t()
8142     {
8143         return word0;
8144     }
8145     ifm2_zero_point_r copy()
8146     {
8147         return *this;
8148     }
8149     CONSTEXPR uint32_t get_value() const
8150     {
8151         auto v = word0;
8152         return v;
8153     }
8154     CONSTEXPR ifm2_zero_point_r& set_value(uint32_t value)
8155     {
8156         word0 = value;
8157         return *this;
8158     }
8159 #endif
8160 };
8161 
8162 // ifm2_width0_m1_r - State managed by NPU_SET_IFM2_WIDTH0_M1
8163 struct ifm2_width0_m1_r
8164 {
8165 #ifndef __cplusplus
8166     union
8167     {
8168         struct
8169         {
8170             uint32_t value : 32; // 32-bit register value
8171         };
8172         uint32_t word;
8173     };
8174 #else
8175 private:
8176     uint32_t word0;
8177 public:
8178     CONSTEXPR ifm2_width0_m1_r() :
8179         word0(0)
8180     {}
8181     CONSTEXPR ifm2_width0_m1_r(uint32_t init) :
8182         word0(init)
8183     {}
8184     CONSTEXPR void operator=(uint32_t value)
8185     {
8186         word0 = value;
8187     }
8188     CONSTEXPR operator uint32_t()
8189     {
8190         return word0;
8191     }
8192     ifm2_width0_m1_r copy()
8193     {
8194         return *this;
8195     }
8196     CONSTEXPR uint32_t get_value() const
8197     {
8198         auto v = word0;
8199         return v;
8200     }
8201     CONSTEXPR ifm2_width0_m1_r& set_value(uint32_t value)
8202     {
8203         word0 = value;
8204         return *this;
8205     }
8206 #endif
8207 };
8208 
8209 // ifm2_height0_m1_r - State managed by NPU_SET_IFM2_HEIGHT0_M1
8210 struct ifm2_height0_m1_r
8211 {
8212 #ifndef __cplusplus
8213     union
8214     {
8215         struct
8216         {
8217             uint32_t value : 32; // 32-bit register value
8218         };
8219         uint32_t word;
8220     };
8221 #else
8222 private:
8223     uint32_t word0;
8224 public:
8225     CONSTEXPR ifm2_height0_m1_r() :
8226         word0(0)
8227     {}
8228     CONSTEXPR ifm2_height0_m1_r(uint32_t init) :
8229         word0(init)
8230     {}
8231     CONSTEXPR void operator=(uint32_t value)
8232     {
8233         word0 = value;
8234     }
8235     CONSTEXPR operator uint32_t()
8236     {
8237         return word0;
8238     }
8239     ifm2_height0_m1_r copy()
8240     {
8241         return *this;
8242     }
8243     CONSTEXPR uint32_t get_value() const
8244     {
8245         auto v = word0;
8246         return v;
8247     }
8248     CONSTEXPR ifm2_height0_m1_r& set_value(uint32_t value)
8249     {
8250         word0 = value;
8251         return *this;
8252     }
8253 #endif
8254 };
8255 
8256 // ifm2_height1_m1_r - State managed by NPU_SET_IFM2_HEIGHT1_M1
8257 struct ifm2_height1_m1_r
8258 {
8259 #ifndef __cplusplus
8260     union
8261     {
8262         struct
8263         {
8264             uint32_t value : 32; // 32-bit register value
8265         };
8266         uint32_t word;
8267     };
8268 #else
8269 private:
8270     uint32_t word0;
8271 public:
8272     CONSTEXPR ifm2_height1_m1_r() :
8273         word0(0)
8274     {}
8275     CONSTEXPR ifm2_height1_m1_r(uint32_t init) :
8276         word0(init)
8277     {}
8278     CONSTEXPR void operator=(uint32_t value)
8279     {
8280         word0 = value;
8281     }
8282     CONSTEXPR operator uint32_t()
8283     {
8284         return word0;
8285     }
8286     ifm2_height1_m1_r copy()
8287     {
8288         return *this;
8289     }
8290     CONSTEXPR uint32_t get_value() const
8291     {
8292         auto v = word0;
8293         return v;
8294     }
8295     CONSTEXPR ifm2_height1_m1_r& set_value(uint32_t value)
8296     {
8297         word0 = value;
8298         return *this;
8299     }
8300 #endif
8301 };
8302 
8303 // ifm2_region_r - State managed by NPU_SET_IFM2_REGION
8304 struct ifm2_region_r
8305 {
8306 #ifndef __cplusplus
8307     union
8308     {
8309         struct
8310         {
8311             uint32_t value : 32; // 32-bit register value
8312         };
8313         uint32_t word;
8314     };
8315 #else
8316 private:
8317     uint32_t word0;
8318 public:
8319     CONSTEXPR ifm2_region_r() :
8320         word0(0)
8321     {}
8322     CONSTEXPR ifm2_region_r(uint32_t init) :
8323         word0(init)
8324     {}
8325     CONSTEXPR void operator=(uint32_t value)
8326     {
8327         word0 = value;
8328     }
8329     CONSTEXPR operator uint32_t()
8330     {
8331         return word0;
8332     }
8333     ifm2_region_r copy()
8334     {
8335         return *this;
8336     }
8337     CONSTEXPR uint32_t get_value() const
8338     {
8339         auto v = word0;
8340         return v;
8341     }
8342     CONSTEXPR ifm2_region_r& set_value(uint32_t value)
8343     {
8344         word0 = value;
8345         return *this;
8346     }
8347 #endif
8348 };
8349 
8350 // ifm_base0_r - State managed by NPU_SET_IFM_BASE0
8351 struct ifm_base0_r
8352 {
8353 #ifndef __cplusplus
8354     union
8355     {
8356         struct
8357         {
8358             uint32_t value_LO : 32; // 64-bit register value - LSB
8359             uint32_t value_HI : 32; // 64-bit register value - MSB
8360         };
8361         uint32_t word[2];
8362     };
8363 #else
8364 private:
8365     uint32_t word0;
8366     uint32_t word1;
8367 public:
8368     CONSTEXPR ifm_base0_r() :
8369         word0(0),
8370         word1(0)
8371     {}
8372     CONSTEXPR ifm_base0_r(uint64_t init) :
8373         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8374         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8375     {}
8376     CONSTEXPR void operator=(uint64_t value)
8377     {
8378         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8379     }
8380     CONSTEXPR operator uint64_t()
8381     {
8382         return (static_cast<uint64_t>(word1) << 32) | word0;
8383     }
8384     ifm_base0_r copy()
8385     {
8386         return *this;
8387     }
8388 #endif
8389 };
8390 
8391 // ifm_base1_r - State managed by NPU_SET_IFM_BASE1
8392 struct ifm_base1_r
8393 {
8394 #ifndef __cplusplus
8395     union
8396     {
8397         struct
8398         {
8399             uint32_t value_LO : 32; // 64-bit register value - LSB
8400             uint32_t value_HI : 32; // 64-bit register value - MSB
8401         };
8402         uint32_t word[2];
8403     };
8404 #else
8405 private:
8406     uint32_t word0;
8407     uint32_t word1;
8408 public:
8409     CONSTEXPR ifm_base1_r() :
8410         word0(0),
8411         word1(0)
8412     {}
8413     CONSTEXPR ifm_base1_r(uint64_t init) :
8414         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8415         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8416     {}
8417     CONSTEXPR void operator=(uint64_t value)
8418     {
8419         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8420     }
8421     CONSTEXPR operator uint64_t()
8422     {
8423         return (static_cast<uint64_t>(word1) << 32) | word0;
8424     }
8425     ifm_base1_r copy()
8426     {
8427         return *this;
8428     }
8429 #endif
8430 };
8431 
8432 // ifm_base2_r - State managed by NPU_SET_IFM_BASE2
8433 struct ifm_base2_r
8434 {
8435 #ifndef __cplusplus
8436     union
8437     {
8438         struct
8439         {
8440             uint32_t value_LO : 32; // 64-bit register value - LSB
8441             uint32_t value_HI : 32; // 64-bit register value - MSB
8442         };
8443         uint32_t word[2];
8444     };
8445 #else
8446 private:
8447     uint32_t word0;
8448     uint32_t word1;
8449 public:
8450     CONSTEXPR ifm_base2_r() :
8451         word0(0),
8452         word1(0)
8453     {}
8454     CONSTEXPR ifm_base2_r(uint64_t init) :
8455         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8456         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8457     {}
8458     CONSTEXPR void operator=(uint64_t value)
8459     {
8460         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8461     }
8462     CONSTEXPR operator uint64_t()
8463     {
8464         return (static_cast<uint64_t>(word1) << 32) | word0;
8465     }
8466     ifm_base2_r copy()
8467     {
8468         return *this;
8469     }
8470 #endif
8471 };
8472 
8473 // ifm_base3_r - State managed by NPU_SET_IFM_BASE3
8474 struct ifm_base3_r
8475 {
8476 #ifndef __cplusplus
8477     union
8478     {
8479         struct
8480         {
8481             uint32_t value_LO : 32; // 64-bit register value - LSB
8482             uint32_t value_HI : 32; // 64-bit register value - MSB
8483         };
8484         uint32_t word[2];
8485     };
8486 #else
8487 private:
8488     uint32_t word0;
8489     uint32_t word1;
8490 public:
8491     CONSTEXPR ifm_base3_r() :
8492         word0(0),
8493         word1(0)
8494     {}
8495     CONSTEXPR ifm_base3_r(uint64_t init) :
8496         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8497         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8498     {}
8499     CONSTEXPR void operator=(uint64_t value)
8500     {
8501         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8502     }
8503     CONSTEXPR operator uint64_t()
8504     {
8505         return (static_cast<uint64_t>(word1) << 32) | word0;
8506     }
8507     ifm_base3_r copy()
8508     {
8509         return *this;
8510     }
8511 #endif
8512 };
8513 
8514 // ifm_stride_x_r - State managed by NPU_SET_IFM_STRIDE_X
8515 struct ifm_stride_x_r
8516 {
8517 #ifndef __cplusplus
8518     union
8519     {
8520         struct
8521         {
8522             uint32_t value_LO : 32; // 64-bit register value - LSB
8523             uint32_t value_HI : 32; // 64-bit register value - MSB
8524         };
8525         uint32_t word[2];
8526     };
8527 #else
8528 private:
8529     uint32_t word0;
8530     uint32_t word1;
8531 public:
8532     CONSTEXPR ifm_stride_x_r() :
8533         word0(0),
8534         word1(0)
8535     {}
8536     CONSTEXPR ifm_stride_x_r(uint64_t init) :
8537         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8538         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8539     {}
8540     CONSTEXPR void operator=(uint64_t value)
8541     {
8542         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8543     }
8544     CONSTEXPR operator uint64_t()
8545     {
8546         return (static_cast<uint64_t>(word1) << 32) | word0;
8547     }
8548     ifm_stride_x_r copy()
8549     {
8550         return *this;
8551     }
8552 #endif
8553 };
8554 
8555 // ifm_stride_y_r - State managed by NPU_SET_IFM_STRIDE_Y
8556 struct ifm_stride_y_r
8557 {
8558 #ifndef __cplusplus
8559     union
8560     {
8561         struct
8562         {
8563             uint32_t value_LO : 32; // 64-bit register value - LSB
8564             uint32_t value_HI : 32; // 64-bit register value - MSB
8565         };
8566         uint32_t word[2];
8567     };
8568 #else
8569 private:
8570     uint32_t word0;
8571     uint32_t word1;
8572 public:
8573     CONSTEXPR ifm_stride_y_r() :
8574         word0(0),
8575         word1(0)
8576     {}
8577     CONSTEXPR ifm_stride_y_r(uint64_t init) :
8578         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8579         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8580     {}
8581     CONSTEXPR void operator=(uint64_t value)
8582     {
8583         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8584     }
8585     CONSTEXPR operator uint64_t()
8586     {
8587         return (static_cast<uint64_t>(word1) << 32) | word0;
8588     }
8589     ifm_stride_y_r copy()
8590     {
8591         return *this;
8592     }
8593 #endif
8594 };
8595 
8596 // ifm_stride_c_r - State managed by NPU_SET_IFM_STRIDE_C
8597 struct ifm_stride_c_r
8598 {
8599 #ifndef __cplusplus
8600     union
8601     {
8602         struct
8603         {
8604             uint32_t value_LO : 32; // 64-bit register value - LSB
8605             uint32_t value_HI : 32; // 64-bit register value - MSB
8606         };
8607         uint32_t word[2];
8608     };
8609 #else
8610 private:
8611     uint32_t word0;
8612     uint32_t word1;
8613 public:
8614     CONSTEXPR ifm_stride_c_r() :
8615         word0(0),
8616         word1(0)
8617     {}
8618     CONSTEXPR ifm_stride_c_r(uint64_t init) :
8619         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8620         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8621     {}
8622     CONSTEXPR void operator=(uint64_t value)
8623     {
8624         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8625     }
8626     CONSTEXPR operator uint64_t()
8627     {
8628         return (static_cast<uint64_t>(word1) << 32) | word0;
8629     }
8630     ifm_stride_c_r copy()
8631     {
8632         return *this;
8633     }
8634 #endif
8635 };
8636 
8637 // ofm_base0_r - State managed by NPU_SET_OFM_BASE0
8638 struct ofm_base0_r
8639 {
8640 #ifndef __cplusplus
8641     union
8642     {
8643         struct
8644         {
8645             uint32_t value_LO : 32; // 64-bit register value - LSB
8646             uint32_t value_HI : 32; // 64-bit register value - MSB
8647         };
8648         uint32_t word[2];
8649     };
8650 #else
8651 private:
8652     uint32_t word0;
8653     uint32_t word1;
8654 public:
8655     CONSTEXPR ofm_base0_r() :
8656         word0(0),
8657         word1(0)
8658     {}
8659     CONSTEXPR ofm_base0_r(uint64_t init) :
8660         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8661         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8662     {}
8663     CONSTEXPR void operator=(uint64_t value)
8664     {
8665         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8666     }
8667     CONSTEXPR operator uint64_t()
8668     {
8669         return (static_cast<uint64_t>(word1) << 32) | word0;
8670     }
8671     ofm_base0_r copy()
8672     {
8673         return *this;
8674     }
8675 #endif
8676 };
8677 
8678 // ofm_base1_r - State managed by NPU_SET_OFM_BASE1
8679 struct ofm_base1_r
8680 {
8681 #ifndef __cplusplus
8682     union
8683     {
8684         struct
8685         {
8686             uint32_t value_LO : 32; // 64-bit register value - LSB
8687             uint32_t value_HI : 32; // 64-bit register value - MSB
8688         };
8689         uint32_t word[2];
8690     };
8691 #else
8692 private:
8693     uint32_t word0;
8694     uint32_t word1;
8695 public:
8696     CONSTEXPR ofm_base1_r() :
8697         word0(0),
8698         word1(0)
8699     {}
8700     CONSTEXPR ofm_base1_r(uint64_t init) :
8701         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8702         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8703     {}
8704     CONSTEXPR void operator=(uint64_t value)
8705     {
8706         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8707     }
8708     CONSTEXPR operator uint64_t()
8709     {
8710         return (static_cast<uint64_t>(word1) << 32) | word0;
8711     }
8712     ofm_base1_r copy()
8713     {
8714         return *this;
8715     }
8716 #endif
8717 };
8718 
8719 // ofm_base2_r - State managed by NPU_SET_OFM_BASE2
8720 struct ofm_base2_r
8721 {
8722 #ifndef __cplusplus
8723     union
8724     {
8725         struct
8726         {
8727             uint32_t value_LO : 32; // 64-bit register value - LSB
8728             uint32_t value_HI : 32; // 64-bit register value - MSB
8729         };
8730         uint32_t word[2];
8731     };
8732 #else
8733 private:
8734     uint32_t word0;
8735     uint32_t word1;
8736 public:
8737     CONSTEXPR ofm_base2_r() :
8738         word0(0),
8739         word1(0)
8740     {}
8741     CONSTEXPR ofm_base2_r(uint64_t init) :
8742         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8743         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8744     {}
8745     CONSTEXPR void operator=(uint64_t value)
8746     {
8747         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8748     }
8749     CONSTEXPR operator uint64_t()
8750     {
8751         return (static_cast<uint64_t>(word1) << 32) | word0;
8752     }
8753     ofm_base2_r copy()
8754     {
8755         return *this;
8756     }
8757 #endif
8758 };
8759 
8760 // ofm_base3_r - State managed by NPU_SET_OFM_BASE3
8761 struct ofm_base3_r
8762 {
8763 #ifndef __cplusplus
8764     union
8765     {
8766         struct
8767         {
8768             uint32_t value_LO : 32; // 64-bit register value - LSB
8769             uint32_t value_HI : 32; // 64-bit register value - MSB
8770         };
8771         uint32_t word[2];
8772     };
8773 #else
8774 private:
8775     uint32_t word0;
8776     uint32_t word1;
8777 public:
8778     CONSTEXPR ofm_base3_r() :
8779         word0(0),
8780         word1(0)
8781     {}
8782     CONSTEXPR ofm_base3_r(uint64_t init) :
8783         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8784         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8785     {}
8786     CONSTEXPR void operator=(uint64_t value)
8787     {
8788         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8789     }
8790     CONSTEXPR operator uint64_t()
8791     {
8792         return (static_cast<uint64_t>(word1) << 32) | word0;
8793     }
8794     ofm_base3_r copy()
8795     {
8796         return *this;
8797     }
8798 #endif
8799 };
8800 
8801 // ofm_stride_x_r - State managed by NPU_SET_OFM_STRIDE_X
8802 struct ofm_stride_x_r
8803 {
8804 #ifndef __cplusplus
8805     union
8806     {
8807         struct
8808         {
8809             uint32_t value_LO : 32; // 64-bit register value - LSB
8810             uint32_t value_HI : 32; // 64-bit register value - MSB
8811         };
8812         uint32_t word[2];
8813     };
8814 #else
8815 private:
8816     uint32_t word0;
8817     uint32_t word1;
8818 public:
8819     CONSTEXPR ofm_stride_x_r() :
8820         word0(0),
8821         word1(0)
8822     {}
8823     CONSTEXPR ofm_stride_x_r(uint64_t init) :
8824         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8825         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8826     {}
8827     CONSTEXPR void operator=(uint64_t value)
8828     {
8829         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8830     }
8831     CONSTEXPR operator uint64_t()
8832     {
8833         return (static_cast<uint64_t>(word1) << 32) | word0;
8834     }
8835     ofm_stride_x_r copy()
8836     {
8837         return *this;
8838     }
8839 #endif
8840 };
8841 
8842 // ofm_stride_y_r - State managed by NPU_SET_OFM_STRIDE_Y
8843 struct ofm_stride_y_r
8844 {
8845 #ifndef __cplusplus
8846     union
8847     {
8848         struct
8849         {
8850             uint32_t value_LO : 32; // 64-bit register value - LSB
8851             uint32_t value_HI : 32; // 64-bit register value - MSB
8852         };
8853         uint32_t word[2];
8854     };
8855 #else
8856 private:
8857     uint32_t word0;
8858     uint32_t word1;
8859 public:
8860     CONSTEXPR ofm_stride_y_r() :
8861         word0(0),
8862         word1(0)
8863     {}
8864     CONSTEXPR ofm_stride_y_r(uint64_t init) :
8865         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8866         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8867     {}
8868     CONSTEXPR void operator=(uint64_t value)
8869     {
8870         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8871     }
8872     CONSTEXPR operator uint64_t()
8873     {
8874         return (static_cast<uint64_t>(word1) << 32) | word0;
8875     }
8876     ofm_stride_y_r copy()
8877     {
8878         return *this;
8879     }
8880 #endif
8881 };
8882 
8883 // ofm_stride_c_r - State managed by NPU_SET_OFM_STRIDE_C
8884 struct ofm_stride_c_r
8885 {
8886 #ifndef __cplusplus
8887     union
8888     {
8889         struct
8890         {
8891             uint32_t value_LO : 32; // 64-bit register value - LSB
8892             uint32_t value_HI : 32; // 64-bit register value - MSB
8893         };
8894         uint32_t word[2];
8895     };
8896 #else
8897 private:
8898     uint32_t word0;
8899     uint32_t word1;
8900 public:
8901     CONSTEXPR ofm_stride_c_r() :
8902         word0(0),
8903         word1(0)
8904     {}
8905     CONSTEXPR ofm_stride_c_r(uint64_t init) :
8906         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8907         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8908     {}
8909     CONSTEXPR void operator=(uint64_t value)
8910     {
8911         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8912     }
8913     CONSTEXPR operator uint64_t()
8914     {
8915         return (static_cast<uint64_t>(word1) << 32) | word0;
8916     }
8917     ofm_stride_c_r copy()
8918     {
8919         return *this;
8920     }
8921 #endif
8922 };
8923 
8924 // weight_base_r - State managed by NPU_SET_WEIGHT_BASE
8925 struct weight_base_r
8926 {
8927 #ifndef __cplusplus
8928     union
8929     {
8930         struct
8931         {
8932             uint32_t value_LO : 32; // 64-bit register value - LSB
8933             uint32_t value_HI : 32; // 64-bit register value - MSB
8934         };
8935         uint32_t word[2];
8936     };
8937 #else
8938 private:
8939     uint32_t word0;
8940     uint32_t word1;
8941 public:
8942     CONSTEXPR weight_base_r() :
8943         word0(0),
8944         word1(0)
8945     {}
8946     CONSTEXPR weight_base_r(uint64_t init) :
8947         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8948         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8949     {}
8950     CONSTEXPR void operator=(uint64_t value)
8951     {
8952         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8953     }
8954     CONSTEXPR operator uint64_t()
8955     {
8956         return (static_cast<uint64_t>(word1) << 32) | word0;
8957     }
8958     weight_base_r copy()
8959     {
8960         return *this;
8961     }
8962 #endif
8963 };
8964 
8965 // weight_length_r - State managed by NPU_SET_WEIGHT_LENGTH
8966 struct weight_length_r
8967 {
8968 #ifndef __cplusplus
8969     union
8970     {
8971         struct
8972         {
8973             uint32_t value_LO : 32; // 64-bit register value - LSB
8974             uint32_t value_HI : 32; // 64-bit register value - MSB
8975         };
8976         uint32_t word[2];
8977     };
8978 #else
8979 private:
8980     uint32_t word0;
8981     uint32_t word1;
8982 public:
8983     CONSTEXPR weight_length_r() :
8984         word0(0),
8985         word1(0)
8986     {}
8987     CONSTEXPR weight_length_r(uint64_t init) :
8988         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
8989         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
8990     {}
8991     CONSTEXPR void operator=(uint64_t value)
8992     {
8993         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
8994     }
8995     CONSTEXPR operator uint64_t()
8996     {
8997         return (static_cast<uint64_t>(word1) << 32) | word0;
8998     }
8999     weight_length_r copy()
9000     {
9001         return *this;
9002     }
9003 #endif
9004 };
9005 
9006 // scale_base_r - State managed by NPU_SET_SCALE_BASE
9007 struct scale_base_r
9008 {
9009 #ifndef __cplusplus
9010     union
9011     {
9012         struct
9013         {
9014             uint32_t value_LO : 32; // 64-bit register value - LSB
9015             uint32_t value_HI : 32; // 64-bit register value - MSB
9016         };
9017         uint32_t word[2];
9018     };
9019 #else
9020 private:
9021     uint32_t word0;
9022     uint32_t word1;
9023 public:
9024     CONSTEXPR scale_base_r() :
9025         word0(0),
9026         word1(0)
9027     {}
9028     CONSTEXPR scale_base_r(uint64_t init) :
9029         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9030         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9031     {}
9032     CONSTEXPR void operator=(uint64_t value)
9033     {
9034         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9035     }
9036     CONSTEXPR operator uint64_t()
9037     {
9038         return (static_cast<uint64_t>(word1) << 32) | word0;
9039     }
9040     scale_base_r copy()
9041     {
9042         return *this;
9043     }
9044 #endif
9045 };
9046 
9047 // scale_length_r - State managed by NPU_SET_SCALE_LENGTH
9048 struct scale_length_r
9049 {
9050 #ifndef __cplusplus
9051     union
9052     {
9053         struct
9054         {
9055             uint32_t value_LO : 32; // 64-bit register value - LSB
9056             uint32_t value_HI : 32; // 64-bit register value - MSB
9057         };
9058         uint32_t word[2];
9059     };
9060 #else
9061 private:
9062     uint32_t word0;
9063     uint32_t word1;
9064 public:
9065     CONSTEXPR scale_length_r() :
9066         word0(0),
9067         word1(0)
9068     {}
9069     CONSTEXPR scale_length_r(uint64_t init) :
9070         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9071         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9072     {}
9073     CONSTEXPR void operator=(uint64_t value)
9074     {
9075         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9076     }
9077     CONSTEXPR operator uint64_t()
9078     {
9079         return (static_cast<uint64_t>(word1) << 32) | word0;
9080     }
9081     scale_length_r copy()
9082     {
9083         return *this;
9084     }
9085 #endif
9086 };
9087 
9088 // ofm_scale_r - State managed by NPU_SET_OFM_SCALE
9089 struct ofm_scale_r
9090 {
9091 #ifndef __cplusplus
9092     union
9093     {
9094         struct
9095         {
9096             uint32_t value_LO : 32; // 64-bit register value - LSB
9097             uint32_t value_HI : 32; // 64-bit register value - MSB
9098         };
9099         uint32_t word[2];
9100     };
9101 #else
9102 private:
9103     uint32_t word0;
9104     uint32_t word1;
9105 public:
9106     CONSTEXPR ofm_scale_r() :
9107         word0(0),
9108         word1(0)
9109     {}
9110     CONSTEXPR ofm_scale_r(uint64_t init) :
9111         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9112         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9113     {}
9114     CONSTEXPR void operator=(uint64_t value)
9115     {
9116         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9117     }
9118     CONSTEXPR operator uint64_t()
9119     {
9120         return (static_cast<uint64_t>(word1) << 32) | word0;
9121     }
9122     ofm_scale_r copy()
9123     {
9124         return *this;
9125     }
9126 #endif
9127 };
9128 
9129 // ifm_scale_r - State managed by NPU_SET_IFM_SCALE
9130 struct ifm_scale_r
9131 {
9132 #ifndef __cplusplus
9133     union
9134     {
9135         struct
9136         {
9137             uint32_t value_LO : 32; // 64-bit register value - LSB
9138             uint32_t value_HI : 32; // 64-bit register value - MSB
9139         };
9140         uint32_t word[2];
9141     };
9142 #else
9143 private:
9144     uint32_t word0;
9145     uint32_t word1;
9146 public:
9147     CONSTEXPR ifm_scale_r() :
9148         word0(0),
9149         word1(0)
9150     {}
9151     CONSTEXPR ifm_scale_r(uint64_t init) :
9152         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9153         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9154     {}
9155     CONSTEXPR void operator=(uint64_t value)
9156     {
9157         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9158     }
9159     CONSTEXPR operator uint64_t()
9160     {
9161         return (static_cast<uint64_t>(word1) << 32) | word0;
9162     }
9163     ifm_scale_r copy()
9164     {
9165         return *this;
9166     }
9167 #endif
9168 };
9169 
9170 // ifm2_scale_r - State managed by NPU_SET_IFM2_SCALE
9171 struct ifm2_scale_r
9172 {
9173 #ifndef __cplusplus
9174     union
9175     {
9176         struct
9177         {
9178             uint32_t value_LO : 32; // 64-bit register value - LSB
9179             uint32_t value_HI : 32; // 64-bit register value - MSB
9180         };
9181         uint32_t word[2];
9182     };
9183 #else
9184 private:
9185     uint32_t word0;
9186     uint32_t word1;
9187 public:
9188     CONSTEXPR ifm2_scale_r() :
9189         word0(0),
9190         word1(0)
9191     {}
9192     CONSTEXPR ifm2_scale_r(uint64_t init) :
9193         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9194         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9195     {}
9196     CONSTEXPR void operator=(uint64_t value)
9197     {
9198         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9199     }
9200     CONSTEXPR operator uint64_t()
9201     {
9202         return (static_cast<uint64_t>(word1) << 32) | word0;
9203     }
9204     ifm2_scale_r copy()
9205     {
9206         return *this;
9207     }
9208 #endif
9209 };
9210 
9211 // op_scalar_r - State managed by NPU_SET_OP_SCALAR
9212 struct op_scalar_r
9213 {
9214 #ifndef __cplusplus
9215     union
9216     {
9217         struct
9218         {
9219             uint32_t value_LO : 32; // 64-bit register value - LSB
9220             uint32_t value_HI : 32; // 64-bit register value - MSB
9221         };
9222         uint32_t word[2];
9223     };
9224 #else
9225 private:
9226     uint32_t word0;
9227     uint32_t word1;
9228 public:
9229     CONSTEXPR op_scalar_r() :
9230         word0(0),
9231         word1(0)
9232     {}
9233     CONSTEXPR op_scalar_r(uint64_t init) :
9234         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9235         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9236     {}
9237     CONSTEXPR void operator=(uint64_t value)
9238     {
9239         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9240     }
9241     CONSTEXPR operator uint64_t()
9242     {
9243         return (static_cast<uint64_t>(word1) << 32) | word0;
9244     }
9245     op_scalar_r copy()
9246     {
9247         return *this;
9248     }
9249 #endif
9250 };
9251 
9252 // dma0_src_r - State managed by NPU_SET_DMA0_SRC
9253 struct dma0_src_r
9254 {
9255 #ifndef __cplusplus
9256     union
9257     {
9258         struct
9259         {
9260             uint32_t value_LO : 32; // 64-bit register value - LSB
9261             uint32_t value_HI : 32; // 64-bit register value - MSB
9262         };
9263         uint32_t word[2];
9264     };
9265 #else
9266 private:
9267     uint32_t word0;
9268     uint32_t word1;
9269 public:
9270     CONSTEXPR dma0_src_r() :
9271         word0(0),
9272         word1(0)
9273     {}
9274     CONSTEXPR dma0_src_r(uint64_t init) :
9275         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9276         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9277     {}
9278     CONSTEXPR void operator=(uint64_t value)
9279     {
9280         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9281     }
9282     CONSTEXPR operator uint64_t()
9283     {
9284         return (static_cast<uint64_t>(word1) << 32) | word0;
9285     }
9286     dma0_src_r copy()
9287     {
9288         return *this;
9289     }
9290 #endif
9291 };
9292 
9293 // dma0_dst_r - State managed by NPU_SET_DMA0_DST
9294 struct dma0_dst_r
9295 {
9296 #ifndef __cplusplus
9297     union
9298     {
9299         struct
9300         {
9301             uint32_t value_LO : 32; // 64-bit register value - LSB
9302             uint32_t value_HI : 32; // 64-bit register value - MSB
9303         };
9304         uint32_t word[2];
9305     };
9306 #else
9307 private:
9308     uint32_t word0;
9309     uint32_t word1;
9310 public:
9311     CONSTEXPR dma0_dst_r() :
9312         word0(0),
9313         word1(0)
9314     {}
9315     CONSTEXPR dma0_dst_r(uint64_t init) :
9316         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9317         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9318     {}
9319     CONSTEXPR void operator=(uint64_t value)
9320     {
9321         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9322     }
9323     CONSTEXPR operator uint64_t()
9324     {
9325         return (static_cast<uint64_t>(word1) << 32) | word0;
9326     }
9327     dma0_dst_r copy()
9328     {
9329         return *this;
9330     }
9331 #endif
9332 };
9333 
9334 // dma0_len_r - State managed by NPU_SET_DMA0_LEN
9335 struct dma0_len_r
9336 {
9337 #ifndef __cplusplus
9338     union
9339     {
9340         struct
9341         {
9342             uint32_t value_LO : 32; // 64-bit register value - LSB
9343             uint32_t value_HI : 32; // 64-bit register value - MSB
9344         };
9345         uint32_t word[2];
9346     };
9347 #else
9348 private:
9349     uint32_t word0;
9350     uint32_t word1;
9351 public:
9352     CONSTEXPR dma0_len_r() :
9353         word0(0),
9354         word1(0)
9355     {}
9356     CONSTEXPR dma0_len_r(uint64_t init) :
9357         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9358         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9359     {}
9360     CONSTEXPR void operator=(uint64_t value)
9361     {
9362         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9363     }
9364     CONSTEXPR operator uint64_t()
9365     {
9366         return (static_cast<uint64_t>(word1) << 32) | word0;
9367     }
9368     dma0_len_r copy()
9369     {
9370         return *this;
9371     }
9372 #endif
9373 };
9374 
9375 // dma0_src_stride0_r - State managed by NPU_SET_DMA0_SRC_STRIDE0
9376 struct dma0_src_stride0_r
9377 {
9378 #ifndef __cplusplus
9379     union
9380     {
9381         struct
9382         {
9383             uint32_t value_LO : 32; // 64-bit register value - LSB
9384             uint32_t value_HI : 32; // 64-bit register value - MSB
9385         };
9386         uint32_t word[2];
9387     };
9388 #else
9389 private:
9390     uint32_t word0;
9391     uint32_t word1;
9392 public:
9393     CONSTEXPR dma0_src_stride0_r() :
9394         word0(0),
9395         word1(0)
9396     {}
9397     CONSTEXPR dma0_src_stride0_r(uint64_t init) :
9398         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9399         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9400     {}
9401     CONSTEXPR void operator=(uint64_t value)
9402     {
9403         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9404     }
9405     CONSTEXPR operator uint64_t()
9406     {
9407         return (static_cast<uint64_t>(word1) << 32) | word0;
9408     }
9409     dma0_src_stride0_r copy()
9410     {
9411         return *this;
9412     }
9413 #endif
9414 };
9415 
9416 // dma0_src_stride1_r - State managed by NPU_SET_DMA0_SRC_STRIDE1
9417 struct dma0_src_stride1_r
9418 {
9419 #ifndef __cplusplus
9420     union
9421     {
9422         struct
9423         {
9424             uint32_t value_LO : 32; // 64-bit register value - LSB
9425             uint32_t value_HI : 32; // 64-bit register value - MSB
9426         };
9427         uint32_t word[2];
9428     };
9429 #else
9430 private:
9431     uint32_t word0;
9432     uint32_t word1;
9433 public:
9434     CONSTEXPR dma0_src_stride1_r() :
9435         word0(0),
9436         word1(0)
9437     {}
9438     CONSTEXPR dma0_src_stride1_r(uint64_t init) :
9439         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9440         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9441     {}
9442     CONSTEXPR void operator=(uint64_t value)
9443     {
9444         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9445     }
9446     CONSTEXPR operator uint64_t()
9447     {
9448         return (static_cast<uint64_t>(word1) << 32) | word0;
9449     }
9450     dma0_src_stride1_r copy()
9451     {
9452         return *this;
9453     }
9454 #endif
9455 };
9456 
9457 // dma0_dst_stride0_r - State managed by NPU_SET_DMA0_DST_STRIDE0
9458 struct dma0_dst_stride0_r
9459 {
9460 #ifndef __cplusplus
9461     union
9462     {
9463         struct
9464         {
9465             uint32_t value_LO : 32; // 64-bit register value - LSB
9466             uint32_t value_HI : 32; // 64-bit register value - MSB
9467         };
9468         uint32_t word[2];
9469     };
9470 #else
9471 private:
9472     uint32_t word0;
9473     uint32_t word1;
9474 public:
9475     CONSTEXPR dma0_dst_stride0_r() :
9476         word0(0),
9477         word1(0)
9478     {}
9479     CONSTEXPR dma0_dst_stride0_r(uint64_t init) :
9480         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9481         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9482     {}
9483     CONSTEXPR void operator=(uint64_t value)
9484     {
9485         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9486     }
9487     CONSTEXPR operator uint64_t()
9488     {
9489         return (static_cast<uint64_t>(word1) << 32) | word0;
9490     }
9491     dma0_dst_stride0_r copy()
9492     {
9493         return *this;
9494     }
9495 #endif
9496 };
9497 
9498 // dma0_dst_stride1_r - State managed by NPU_SET_DMA0_DST_STRIDE1
9499 struct dma0_dst_stride1_r
9500 {
9501 #ifndef __cplusplus
9502     union
9503     {
9504         struct
9505         {
9506             uint32_t value_LO : 32; // 64-bit register value - LSB
9507             uint32_t value_HI : 32; // 64-bit register value - MSB
9508         };
9509         uint32_t word[2];
9510     };
9511 #else
9512 private:
9513     uint32_t word0;
9514     uint32_t word1;
9515 public:
9516     CONSTEXPR dma0_dst_stride1_r() :
9517         word0(0),
9518         word1(0)
9519     {}
9520     CONSTEXPR dma0_dst_stride1_r(uint64_t init) :
9521         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9522         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9523     {}
9524     CONSTEXPR void operator=(uint64_t value)
9525     {
9526         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9527     }
9528     CONSTEXPR operator uint64_t()
9529     {
9530         return (static_cast<uint64_t>(word1) << 32) | word0;
9531     }
9532     dma0_dst_stride1_r copy()
9533     {
9534         return *this;
9535     }
9536 #endif
9537 };
9538 
9539 // dma0_idx_r - State managed by NPU_SET_DMA0_IDX
9540 struct dma0_idx_r
9541 {
9542 #ifndef __cplusplus
9543     union
9544     {
9545         struct
9546         {
9547             uint32_t value_LO : 32; // 64-bit register value - LSB
9548             uint32_t value_HI : 32; // 64-bit register value - MSB
9549         };
9550         uint32_t word[2];
9551     };
9552 #else
9553 private:
9554     uint32_t word0;
9555     uint32_t word1;
9556 public:
9557     CONSTEXPR dma0_idx_r() :
9558         word0(0),
9559         word1(0)
9560     {}
9561     CONSTEXPR dma0_idx_r(uint64_t init) :
9562         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9563         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9564     {}
9565     CONSTEXPR void operator=(uint64_t value)
9566     {
9567         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9568     }
9569     CONSTEXPR operator uint64_t()
9570     {
9571         return (static_cast<uint64_t>(word1) << 32) | word0;
9572     }
9573     dma0_idx_r copy()
9574     {
9575         return *this;
9576     }
9577 #endif
9578 };
9579 
9580 // ifm2_base0_r - State managed by NPU_SET_IFM2_BASE0
9581 struct ifm2_base0_r
9582 {
9583 #ifndef __cplusplus
9584     union
9585     {
9586         struct
9587         {
9588             uint32_t value_LO : 32; // 64-bit register value - LSB
9589             uint32_t value_HI : 32; // 64-bit register value - MSB
9590         };
9591         uint32_t word[2];
9592     };
9593 #else
9594 private:
9595     uint32_t word0;
9596     uint32_t word1;
9597 public:
9598     CONSTEXPR ifm2_base0_r() :
9599         word0(0),
9600         word1(0)
9601     {}
9602     CONSTEXPR ifm2_base0_r(uint64_t init) :
9603         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9604         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9605     {}
9606     CONSTEXPR void operator=(uint64_t value)
9607     {
9608         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9609     }
9610     CONSTEXPR operator uint64_t()
9611     {
9612         return (static_cast<uint64_t>(word1) << 32) | word0;
9613     }
9614     ifm2_base0_r copy()
9615     {
9616         return *this;
9617     }
9618 #endif
9619 };
9620 
9621 // ifm2_base1_r - State managed by NPU_SET_IFM2_BASE1
9622 struct ifm2_base1_r
9623 {
9624 #ifndef __cplusplus
9625     union
9626     {
9627         struct
9628         {
9629             uint32_t value_LO : 32; // 64-bit register value - LSB
9630             uint32_t value_HI : 32; // 64-bit register value - MSB
9631         };
9632         uint32_t word[2];
9633     };
9634 #else
9635 private:
9636     uint32_t word0;
9637     uint32_t word1;
9638 public:
9639     CONSTEXPR ifm2_base1_r() :
9640         word0(0),
9641         word1(0)
9642     {}
9643     CONSTEXPR ifm2_base1_r(uint64_t init) :
9644         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9645         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9646     {}
9647     CONSTEXPR void operator=(uint64_t value)
9648     {
9649         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9650     }
9651     CONSTEXPR operator uint64_t()
9652     {
9653         return (static_cast<uint64_t>(word1) << 32) | word0;
9654     }
9655     ifm2_base1_r copy()
9656     {
9657         return *this;
9658     }
9659 #endif
9660 };
9661 
9662 // ifm2_base2_r - State managed by NPU_SET_IFM2_BASE2
9663 struct ifm2_base2_r
9664 {
9665 #ifndef __cplusplus
9666     union
9667     {
9668         struct
9669         {
9670             uint32_t value_LO : 32; // 64-bit register value - LSB
9671             uint32_t value_HI : 32; // 64-bit register value - MSB
9672         };
9673         uint32_t word[2];
9674     };
9675 #else
9676 private:
9677     uint32_t word0;
9678     uint32_t word1;
9679 public:
9680     CONSTEXPR ifm2_base2_r() :
9681         word0(0),
9682         word1(0)
9683     {}
9684     CONSTEXPR ifm2_base2_r(uint64_t init) :
9685         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9686         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9687     {}
9688     CONSTEXPR void operator=(uint64_t value)
9689     {
9690         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9691     }
9692     CONSTEXPR operator uint64_t()
9693     {
9694         return (static_cast<uint64_t>(word1) << 32) | word0;
9695     }
9696     ifm2_base2_r copy()
9697     {
9698         return *this;
9699     }
9700 #endif
9701 };
9702 
9703 // ifm2_base3_r - State managed by NPU_SET_IFM2_BASE3
9704 struct ifm2_base3_r
9705 {
9706 #ifndef __cplusplus
9707     union
9708     {
9709         struct
9710         {
9711             uint32_t value_LO : 32; // 64-bit register value - LSB
9712             uint32_t value_HI : 32; // 64-bit register value - MSB
9713         };
9714         uint32_t word[2];
9715     };
9716 #else
9717 private:
9718     uint32_t word0;
9719     uint32_t word1;
9720 public:
9721     CONSTEXPR ifm2_base3_r() :
9722         word0(0),
9723         word1(0)
9724     {}
9725     CONSTEXPR ifm2_base3_r(uint64_t init) :
9726         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9727         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9728     {}
9729     CONSTEXPR void operator=(uint64_t value)
9730     {
9731         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9732     }
9733     CONSTEXPR operator uint64_t()
9734     {
9735         return (static_cast<uint64_t>(word1) << 32) | word0;
9736     }
9737     ifm2_base3_r copy()
9738     {
9739         return *this;
9740     }
9741 #endif
9742 };
9743 
9744 // ifm2_stride_x_r - State managed by NPU_SET_IFM2_STRIDE_X
9745 struct ifm2_stride_x_r
9746 {
9747 #ifndef __cplusplus
9748     union
9749     {
9750         struct
9751         {
9752             uint32_t value_LO : 32; // 64-bit register value - LSB
9753             uint32_t value_HI : 32; // 64-bit register value - MSB
9754         };
9755         uint32_t word[2];
9756     };
9757 #else
9758 private:
9759     uint32_t word0;
9760     uint32_t word1;
9761 public:
9762     CONSTEXPR ifm2_stride_x_r() :
9763         word0(0),
9764         word1(0)
9765     {}
9766     CONSTEXPR ifm2_stride_x_r(uint64_t init) :
9767         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9768         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9769     {}
9770     CONSTEXPR void operator=(uint64_t value)
9771     {
9772         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9773     }
9774     CONSTEXPR operator uint64_t()
9775     {
9776         return (static_cast<uint64_t>(word1) << 32) | word0;
9777     }
9778     ifm2_stride_x_r copy()
9779     {
9780         return *this;
9781     }
9782 #endif
9783 };
9784 
9785 // ifm2_stride_y_r - State managed by NPU_SET_IFM2_STRIDE_Y
9786 struct ifm2_stride_y_r
9787 {
9788 #ifndef __cplusplus
9789     union
9790     {
9791         struct
9792         {
9793             uint32_t value_LO : 32; // 64-bit register value - LSB
9794             uint32_t value_HI : 32; // 64-bit register value - MSB
9795         };
9796         uint32_t word[2];
9797     };
9798 #else
9799 private:
9800     uint32_t word0;
9801     uint32_t word1;
9802 public:
9803     CONSTEXPR ifm2_stride_y_r() :
9804         word0(0),
9805         word1(0)
9806     {}
9807     CONSTEXPR ifm2_stride_y_r(uint64_t init) :
9808         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9809         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9810     {}
9811     CONSTEXPR void operator=(uint64_t value)
9812     {
9813         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9814     }
9815     CONSTEXPR operator uint64_t()
9816     {
9817         return (static_cast<uint64_t>(word1) << 32) | word0;
9818     }
9819     ifm2_stride_y_r copy()
9820     {
9821         return *this;
9822     }
9823 #endif
9824 };
9825 
9826 // ifm2_stride_c_r - State managed by NPU_SET_IFM2_STRIDE_C
9827 struct ifm2_stride_c_r
9828 {
9829 #ifndef __cplusplus
9830     union
9831     {
9832         struct
9833         {
9834             uint32_t value_LO : 32; // 64-bit register value - LSB
9835             uint32_t value_HI : 32; // 64-bit register value - MSB
9836         };
9837         uint32_t word[2];
9838     };
9839 #else
9840 private:
9841     uint32_t word0;
9842     uint32_t word1;
9843 public:
9844     CONSTEXPR ifm2_stride_c_r() :
9845         word0(0),
9846         word1(0)
9847     {}
9848     CONSTEXPR ifm2_stride_c_r(uint64_t init) :
9849         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9850         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9851     {}
9852     CONSTEXPR void operator=(uint64_t value)
9853     {
9854         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9855     }
9856     CONSTEXPR operator uint64_t()
9857     {
9858         return (static_cast<uint64_t>(word1) << 32) | word0;
9859     }
9860     ifm2_stride_c_r copy()
9861     {
9862         return *this;
9863     }
9864 #endif
9865 };
9866 
9867 // weight1_base_r - State managed by NPU_SET_WEIGHT1_BASE
9868 struct weight1_base_r
9869 {
9870 #ifndef __cplusplus
9871     union
9872     {
9873         struct
9874         {
9875             uint32_t value_LO : 32; // 64-bit register value - LSB
9876             uint32_t value_HI : 32; // 64-bit register value - MSB
9877         };
9878         uint32_t word[2];
9879     };
9880 #else
9881 private:
9882     uint32_t word0;
9883     uint32_t word1;
9884 public:
9885     CONSTEXPR weight1_base_r() :
9886         word0(0),
9887         word1(0)
9888     {}
9889     CONSTEXPR weight1_base_r(uint64_t init) :
9890         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9891         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9892     {}
9893     CONSTEXPR void operator=(uint64_t value)
9894     {
9895         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9896     }
9897     CONSTEXPR operator uint64_t()
9898     {
9899         return (static_cast<uint64_t>(word1) << 32) | word0;
9900     }
9901     weight1_base_r copy()
9902     {
9903         return *this;
9904     }
9905 #endif
9906 };
9907 
9908 // weight1_length_r - State managed by NPU_SET_WEIGHT1_LENGTH
9909 struct weight1_length_r
9910 {
9911 #ifndef __cplusplus
9912     union
9913     {
9914         struct
9915         {
9916             uint32_t value_LO : 32; // 64-bit register value - LSB
9917             uint32_t value_HI : 32; // 64-bit register value - MSB
9918         };
9919         uint32_t word[2];
9920     };
9921 #else
9922 private:
9923     uint32_t word0;
9924     uint32_t word1;
9925 public:
9926     CONSTEXPR weight1_length_r() :
9927         word0(0),
9928         word1(0)
9929     {}
9930     CONSTEXPR weight1_length_r(uint64_t init) :
9931         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9932         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9933     {}
9934     CONSTEXPR void operator=(uint64_t value)
9935     {
9936         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9937     }
9938     CONSTEXPR operator uint64_t()
9939     {
9940         return (static_cast<uint64_t>(word1) << 32) | word0;
9941     }
9942     weight1_length_r copy()
9943     {
9944         return *this;
9945     }
9946 #endif
9947 };
9948 
9949 // weight2_base_r - State managed by NPU_SET_WEIGHT2_BASE
9950 struct weight2_base_r
9951 {
9952 #ifndef __cplusplus
9953     union
9954     {
9955         struct
9956         {
9957             uint32_t value_LO : 32; // 64-bit register value - LSB
9958             uint32_t value_HI : 32; // 64-bit register value - MSB
9959         };
9960         uint32_t word[2];
9961     };
9962 #else
9963 private:
9964     uint32_t word0;
9965     uint32_t word1;
9966 public:
9967     CONSTEXPR weight2_base_r() :
9968         word0(0),
9969         word1(0)
9970     {}
9971     CONSTEXPR weight2_base_r(uint64_t init) :
9972         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
9973         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
9974     {}
9975     CONSTEXPR void operator=(uint64_t value)
9976     {
9977         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
9978     }
9979     CONSTEXPR operator uint64_t()
9980     {
9981         return (static_cast<uint64_t>(word1) << 32) | word0;
9982     }
9983     weight2_base_r copy()
9984     {
9985         return *this;
9986     }
9987 #endif
9988 };
9989 
9990 // weight2_length_r - State managed by NPU_SET_WEIGHT2_LENGTH
9991 struct weight2_length_r
9992 {
9993 #ifndef __cplusplus
9994     union
9995     {
9996         struct
9997         {
9998             uint32_t value_LO : 32; // 64-bit register value - LSB
9999             uint32_t value_HI : 32; // 64-bit register value - MSB
10000         };
10001         uint32_t word[2];
10002     };
10003 #else
10004 private:
10005     uint32_t word0;
10006     uint32_t word1;
10007 public:
10008     CONSTEXPR weight2_length_r() :
10009         word0(0),
10010         word1(0)
10011     {}
10012     CONSTEXPR weight2_length_r(uint64_t init) :
10013         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
10014         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
10015     {}
10016     CONSTEXPR void operator=(uint64_t value)
10017     {
10018         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
10019     }
10020     CONSTEXPR operator uint64_t()
10021     {
10022         return (static_cast<uint64_t>(word1) << 32) | word0;
10023     }
10024     weight2_length_r copy()
10025     {
10026         return *this;
10027     }
10028 #endif
10029 };
10030 
10031 // weight3_base_r - State managed by NPU_SET_WEIGHT3_BASE
10032 struct weight3_base_r
10033 {
10034 #ifndef __cplusplus
10035     union
10036     {
10037         struct
10038         {
10039             uint32_t value_LO : 32; // 64-bit register value - LSB
10040             uint32_t value_HI : 32; // 64-bit register value - MSB
10041         };
10042         uint32_t word[2];
10043     };
10044 #else
10045 private:
10046     uint32_t word0;
10047     uint32_t word1;
10048 public:
10049     CONSTEXPR weight3_base_r() :
10050         word0(0),
10051         word1(0)
10052     {}
10053     CONSTEXPR weight3_base_r(uint64_t init) :
10054         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
10055         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
10056     {}
10057     CONSTEXPR void operator=(uint64_t value)
10058     {
10059         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
10060     }
10061     CONSTEXPR operator uint64_t()
10062     {
10063         return (static_cast<uint64_t>(word1) << 32) | word0;
10064     }
10065     weight3_base_r copy()
10066     {
10067         return *this;
10068     }
10069 #endif
10070 };
10071 
10072 // weight3_length_r - State managed by NPU_SET_WEIGHT3_LENGTH
10073 struct weight3_length_r
10074 {
10075 #ifndef __cplusplus
10076     union
10077     {
10078         struct
10079         {
10080             uint32_t value_LO : 32; // 64-bit register value - LSB
10081             uint32_t value_HI : 32; // 64-bit register value - MSB
10082         };
10083         uint32_t word[2];
10084     };
10085 #else
10086 private:
10087     uint32_t word0;
10088     uint32_t word1;
10089 public:
10090     CONSTEXPR weight3_length_r() :
10091         word0(0),
10092         word1(0)
10093     {}
10094     CONSTEXPR weight3_length_r(uint64_t init) :
10095         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
10096         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
10097     {}
10098     CONSTEXPR void operator=(uint64_t value)
10099     {
10100         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
10101     }
10102     CONSTEXPR operator uint64_t()
10103     {
10104         return (static_cast<uint64_t>(word1) << 32) | word0;
10105     }
10106     weight3_length_r copy()
10107     {
10108         return *this;
10109     }
10110 #endif
10111 };
10112 
10113 // resize_x_step_r - State managed by NPU_SET_RESIZE_X_STEP
10114 struct resize_x_step_r
10115 {
10116 #ifndef __cplusplus
10117     union
10118     {
10119         struct
10120         {
10121             uint32_t value_LO : 32; // 64-bit register value - LSB
10122             uint32_t value_HI : 32; // 64-bit register value - MSB
10123         };
10124         uint32_t word[2];
10125     };
10126 #else
10127 private:
10128     uint32_t word0;
10129     uint32_t word1;
10130 public:
10131     CONSTEXPR resize_x_step_r() :
10132         word0(0),
10133         word1(0)
10134     {}
10135     CONSTEXPR resize_x_step_r(uint64_t init) :
10136         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
10137         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
10138     {}
10139     CONSTEXPR void operator=(uint64_t value)
10140     {
10141         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
10142     }
10143     CONSTEXPR operator uint64_t()
10144     {
10145         return (static_cast<uint64_t>(word1) << 32) | word0;
10146     }
10147     resize_x_step_r copy()
10148     {
10149         return *this;
10150     }
10151 #endif
10152 };
10153 
10154 // resize_y_step_r - State managed by NPU_SET_RESIZE_Y_STEP
10155 struct resize_y_step_r
10156 {
10157 #ifndef __cplusplus
10158     union
10159     {
10160         struct
10161         {
10162             uint32_t value_LO : 32; // 64-bit register value - LSB
10163             uint32_t value_HI : 32; // 64-bit register value - MSB
10164         };
10165         uint32_t word[2];
10166     };
10167 #else
10168 private:
10169     uint32_t word0;
10170     uint32_t word1;
10171 public:
10172     CONSTEXPR resize_y_step_r() :
10173         word0(0),
10174         word1(0)
10175     {}
10176     CONSTEXPR resize_y_step_r(uint64_t init) :
10177         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
10178         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
10179     {}
10180     CONSTEXPR void operator=(uint64_t value)
10181     {
10182         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
10183     }
10184     CONSTEXPR operator uint64_t()
10185     {
10186         return (static_cast<uint64_t>(word1) << 32) | word0;
10187     }
10188     resize_y_step_r copy()
10189     {
10190         return *this;
10191     }
10192 #endif
10193 };
10194 
10195 // dma0_idx_max_r - State managed by NPU_SET_DMA0_IDX_MAX
10196 struct dma0_idx_max_r
10197 {
10198 #ifndef __cplusplus
10199     union
10200     {
10201         struct
10202         {
10203             uint32_t value_LO : 32; // 64-bit register value - LSB
10204             uint32_t value_HI : 32; // 64-bit register value - MSB
10205         };
10206         uint32_t word[2];
10207     };
10208 #else
10209 private:
10210     uint32_t word0;
10211     uint32_t word1;
10212 public:
10213     CONSTEXPR dma0_idx_max_r() :
10214         word0(0),
10215         word1(0)
10216     {}
10217     CONSTEXPR dma0_idx_max_r(uint64_t init) :
10218         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
10219         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
10220     {}
10221     CONSTEXPR void operator=(uint64_t value)
10222     {
10223         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
10224     }
10225     CONSTEXPR operator uint64_t()
10226     {
10227         return (static_cast<uint64_t>(word1) << 32) | word0;
10228     }
10229     dma0_idx_max_r copy()
10230     {
10231         return *this;
10232     }
10233 #endif
10234 };
10235 
10236 // dma0_idx_skip1_r - State managed by NPU_SET_DMA0_IDX_SKIP1
10237 struct dma0_idx_skip1_r
10238 {
10239 #ifndef __cplusplus
10240     union
10241     {
10242         struct
10243         {
10244             uint32_t value_LO : 32; // 64-bit register value - LSB
10245             uint32_t value_HI : 32; // 64-bit register value - MSB
10246         };
10247         uint32_t word[2];
10248     };
10249 #else
10250 private:
10251     uint32_t word0;
10252     uint32_t word1;
10253 public:
10254     CONSTEXPR dma0_idx_skip1_r() :
10255         word0(0),
10256         word1(0)
10257     {}
10258     CONSTEXPR dma0_idx_skip1_r(uint64_t init) :
10259         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
10260         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
10261     {}
10262     CONSTEXPR void operator=(uint64_t value)
10263     {
10264         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
10265     }
10266     CONSTEXPR operator uint64_t()
10267     {
10268         return (static_cast<uint64_t>(word1) << 32) | word0;
10269     }
10270     dma0_idx_skip1_r copy()
10271     {
10272         return *this;
10273     }
10274 #endif
10275 };
10276 
10277 // revision_r - Internal FPGA build revision: first 32 bits of the Ultan git hash used for the build
10278 struct revision_r
10279 {
10280 #ifndef __cplusplus
10281     union
10282     {
10283         struct
10284         {
10285             uint32_t value : 32; // 32-bit register value
10286         };
10287         uint32_t word;
10288     };
10289 #else
10290 private:
10291     uint32_t word0;
10292 public:
10293     CONSTEXPR revision_r() :
10294         word0(0)
10295     {}
10296     CONSTEXPR revision_r(uint32_t init) :
10297         word0(init)
10298     {}
10299     CONSTEXPR void operator=(uint32_t value)
10300     {
10301         word0 = value;
10302     }
10303     CONSTEXPR operator uint32_t()
10304     {
10305         return word0;
10306     }
10307     revision_r copy()
10308     {
10309         return *this;
10310     }
10311     CONSTEXPR uint32_t get_value() const
10312     {
10313         auto v = word0;
10314         return v;
10315     }
10316     CONSTEXPR revision_r& set_value(uint32_t value)
10317     {
10318         word0 = value;
10319         return *this;
10320     }
10321 #endif
10322 };
10323 
10324 // pid4_r - Peripheral ID byte 4 (Arm=code 4)
10325 struct pid4_r
10326 {
10327 #ifndef __cplusplus
10328     union
10329     {
10330         struct
10331         {
10332             uint32_t PID4 : 32; // Byte 4 of Peripheral ID (Lower 8 bits valid)
10333         };
10334         uint32_t word;
10335     };
10336 #else
10337 private:
10338     uint32_t word0;
10339 public:
10340     CONSTEXPR pid4_r() :
10341         word0(4)
10342     {}
10343     CONSTEXPR pid4_r(uint32_t init) :
10344         word0(init)
10345     {}
10346     CONSTEXPR void operator=(uint32_t value)
10347     {
10348         word0 = value;
10349     }
10350     CONSTEXPR operator uint32_t()
10351     {
10352         return word0;
10353     }
10354     pid4_r copy()
10355     {
10356         return *this;
10357     }
10358     CONSTEXPR uint32_t get_PID4() const
10359     {
10360         auto v = word0;
10361         return v;
10362     }
10363     CONSTEXPR pid4_r& set_PID4(uint32_t value)
10364     {
10365         word0 = value;
10366         return *this;
10367     }
10368 #endif
10369 };
10370 
10371 // pid5_r - Peripheral ID byte 5 (reserved)
10372 struct pid5_r
10373 {
10374 #ifndef __cplusplus
10375     union
10376     {
10377         struct
10378         {
10379             uint32_t PID5 : 32; // Byte 5 of Peripheral ID (Lower 8 bits valid)
10380         };
10381         uint32_t word;
10382     };
10383 #else
10384 private:
10385     uint32_t word0;
10386 public:
10387     CONSTEXPR pid5_r() :
10388         word0(0)
10389     {}
10390     CONSTEXPR pid5_r(uint32_t init) :
10391         word0(init)
10392     {}
10393     CONSTEXPR void operator=(uint32_t value)
10394     {
10395         word0 = value;
10396     }
10397     CONSTEXPR operator uint32_t()
10398     {
10399         return word0;
10400     }
10401     pid5_r copy()
10402     {
10403         return *this;
10404     }
10405     CONSTEXPR uint32_t get_PID5() const
10406     {
10407         auto v = word0;
10408         return v;
10409     }
10410     CONSTEXPR pid5_r& set_PID5(uint32_t value)
10411     {
10412         word0 = value;
10413         return *this;
10414     }
10415 #endif
10416 };
10417 
10418 // pid6_r - Peripheral ID byte 6 (reserved)
10419 struct pid6_r
10420 {
10421 #ifndef __cplusplus
10422     union
10423     {
10424         struct
10425         {
10426             uint32_t PID6 : 32; // Byte 6 of Peripheral ID (Lower 8 bits valid)
10427         };
10428         uint32_t word;
10429     };
10430 #else
10431 private:
10432     uint32_t word0;
10433 public:
10434     CONSTEXPR pid6_r() :
10435         word0(0)
10436     {}
10437     CONSTEXPR pid6_r(uint32_t init) :
10438         word0(init)
10439     {}
10440     CONSTEXPR void operator=(uint32_t value)
10441     {
10442         word0 = value;
10443     }
10444     CONSTEXPR operator uint32_t()
10445     {
10446         return word0;
10447     }
10448     pid6_r copy()
10449     {
10450         return *this;
10451     }
10452     CONSTEXPR uint32_t get_PID6() const
10453     {
10454         auto v = word0;
10455         return v;
10456     }
10457     CONSTEXPR pid6_r& set_PID6(uint32_t value)
10458     {
10459         word0 = value;
10460         return *this;
10461     }
10462 #endif
10463 };
10464 
10465 // pid7_r - Peripheral ID byte 7 (reserved)
10466 struct pid7_r
10467 {
10468 #ifndef __cplusplus
10469     union
10470     {
10471         struct
10472         {
10473             uint32_t PID7 : 32; // Byte 7 of Peripheral ID (Lower 8 bits valid)
10474         };
10475         uint32_t word;
10476     };
10477 #else
10478 private:
10479     uint32_t word0;
10480 public:
10481     CONSTEXPR pid7_r() :
10482         word0(0)
10483     {}
10484     CONSTEXPR pid7_r(uint32_t init) :
10485         word0(init)
10486     {}
10487     CONSTEXPR void operator=(uint32_t value)
10488     {
10489         word0 = value;
10490     }
10491     CONSTEXPR operator uint32_t()
10492     {
10493         return word0;
10494     }
10495     pid7_r copy()
10496     {
10497         return *this;
10498     }
10499     CONSTEXPR uint32_t get_PID7() const
10500     {
10501         auto v = word0;
10502         return v;
10503     }
10504     CONSTEXPR pid7_r& set_PID7(uint32_t value)
10505     {
10506         word0 = value;
10507         return *this;
10508     }
10509 #endif
10510 };
10511 
10512 // pid0_r - Peripheral ID byte 0. This is bits[7:0] of the part number
10513 struct pid0_r
10514 {
10515 #ifndef __cplusplus
10516     union
10517     {
10518         struct
10519         {
10520             uint32_t PID0 : 32; // Byte 0 of Peripheral ID (Lower 8 bits valid)
10521         };
10522         uint32_t word;
10523     };
10524 #else
10525 private:
10526     uint32_t word0;
10527 public:
10528     CONSTEXPR pid0_r() :
10529         word0(130)
10530     {}
10531     CONSTEXPR pid0_r(uint32_t init) :
10532         word0(init)
10533     {}
10534     CONSTEXPR void operator=(uint32_t value)
10535     {
10536         word0 = value;
10537     }
10538     CONSTEXPR operator uint32_t()
10539     {
10540         return word0;
10541     }
10542     pid0_r copy()
10543     {
10544         return *this;
10545     }
10546     CONSTEXPR uint32_t get_PID0() const
10547     {
10548         auto v = word0;
10549         return v;
10550     }
10551     CONSTEXPR pid0_r& set_PID0(uint32_t value)
10552     {
10553         word0 = value;
10554         return *this;
10555     }
10556 #endif
10557 };
10558 
10559 // pid1_r - Peripheral ID byte 1. This is bits[11:8] of the part number in bits[3:0], and bits[3:0] of the Arm ID in bits[7:4]
10560 struct pid1_r
10561 {
10562 #ifndef __cplusplus
10563     union
10564     {
10565         struct
10566         {
10567             uint32_t PID1 : 32; // Byte 1 of Peripheral ID (Lower 8 bits valid)
10568         };
10569         uint32_t word;
10570     };
10571 #else
10572 private:
10573     uint32_t word0;
10574 public:
10575     CONSTEXPR pid1_r() :
10576         word0(181)
10577     {}
10578     CONSTEXPR pid1_r(uint32_t init) :
10579         word0(init)
10580     {}
10581     CONSTEXPR void operator=(uint32_t value)
10582     {
10583         word0 = value;
10584     }
10585     CONSTEXPR operator uint32_t()
10586     {
10587         return word0;
10588     }
10589     pid1_r copy()
10590     {
10591         return *this;
10592     }
10593     CONSTEXPR uint32_t get_PID1() const
10594     {
10595         auto v = word0;
10596         return v;
10597     }
10598     CONSTEXPR pid1_r& set_PID1(uint32_t value)
10599     {
10600         word0 = value;
10601         return *this;
10602     }
10603 #endif
10604 };
10605 
10606 // pid2_r - Peripheral ID byte 2. This is bits[6:4] of the Arm ID in bits[2:0], and bit 3 indicates format B
10607 struct pid2_r
10608 {
10609 #ifndef __cplusplus
10610     union
10611     {
10612         struct
10613         {
10614             uint32_t PID2 : 32; // Byte 2 of Peripheral ID (Lower 8 bits valid)
10615         };
10616         uint32_t word;
10617     };
10618 #else
10619 private:
10620     uint32_t word0;
10621 public:
10622     CONSTEXPR pid2_r() :
10623         word0(11)
10624     {}
10625     CONSTEXPR pid2_r(uint32_t init) :
10626         word0(init)
10627     {}
10628     CONSTEXPR void operator=(uint32_t value)
10629     {
10630         word0 = value;
10631     }
10632     CONSTEXPR operator uint32_t()
10633     {
10634         return word0;
10635     }
10636     pid2_r copy()
10637     {
10638         return *this;
10639     }
10640     CONSTEXPR uint32_t get_PID2() const
10641     {
10642         auto v = word0;
10643         return v;
10644     }
10645     CONSTEXPR pid2_r& set_PID2(uint32_t value)
10646     {
10647         word0 = value;
10648         return *this;
10649     }
10650 #endif
10651 };
10652 
10653 // pid3_r - Peripheral ID byte 3
10654 struct pid3_r
10655 {
10656 #ifndef __cplusplus
10657     union
10658     {
10659         struct
10660         {
10661             uint32_t PID3 : 32; // Byte 1 of Peripheral ID (Lower 8 bits valid)
10662         };
10663         uint32_t word;
10664     };
10665 #else
10666 private:
10667     uint32_t word0;
10668 public:
10669     CONSTEXPR pid3_r() :
10670         word0(0)
10671     {}
10672     CONSTEXPR pid3_r(uint32_t init) :
10673         word0(init)
10674     {}
10675     CONSTEXPR void operator=(uint32_t value)
10676     {
10677         word0 = value;
10678     }
10679     CONSTEXPR operator uint32_t()
10680     {
10681         return word0;
10682     }
10683     pid3_r copy()
10684     {
10685         return *this;
10686     }
10687     CONSTEXPR uint32_t get_PID3() const
10688     {
10689         auto v = word0;
10690         return v;
10691     }
10692     CONSTEXPR pid3_r& set_PID3(uint32_t value)
10693     {
10694         word0 = value;
10695         return *this;
10696     }
10697 #endif
10698 };
10699 
10700 // cid0_r - Component ID byte 0
10701 struct cid0_r
10702 {
10703 #ifndef __cplusplus
10704     union
10705     {
10706         struct
10707         {
10708             uint32_t CID0 : 32; // Byte 0 of Component ID (Lower 8 bits valid)
10709         };
10710         uint32_t word;
10711     };
10712 #else
10713 private:
10714     uint32_t word0;
10715 public:
10716     CONSTEXPR cid0_r() :
10717         word0(13)
10718     {}
10719     CONSTEXPR cid0_r(uint32_t init) :
10720         word0(init)
10721     {}
10722     CONSTEXPR void operator=(uint32_t value)
10723     {
10724         word0 = value;
10725     }
10726     CONSTEXPR operator uint32_t()
10727     {
10728         return word0;
10729     }
10730     cid0_r copy()
10731     {
10732         return *this;
10733     }
10734     CONSTEXPR uint32_t get_CID0() const
10735     {
10736         auto v = word0;
10737         return v;
10738     }
10739     CONSTEXPR cid0_r& set_CID0(uint32_t value)
10740     {
10741         word0 = value;
10742         return *this;
10743     }
10744 #endif
10745 };
10746 
10747 // cid1_r - Component ID byte 1
10748 struct cid1_r
10749 {
10750 #ifndef __cplusplus
10751     union
10752     {
10753         struct
10754         {
10755             uint32_t CID1 : 32; // Byte 1 of Component ID (Lower 8 bits valid)
10756         };
10757         uint32_t word;
10758     };
10759 #else
10760 private:
10761     uint32_t word0;
10762 public:
10763     CONSTEXPR cid1_r() :
10764         word0(240)
10765     {}
10766     CONSTEXPR cid1_r(uint32_t init) :
10767         word0(init)
10768     {}
10769     CONSTEXPR void operator=(uint32_t value)
10770     {
10771         word0 = value;
10772     }
10773     CONSTEXPR operator uint32_t()
10774     {
10775         return word0;
10776     }
10777     cid1_r copy()
10778     {
10779         return *this;
10780     }
10781     CONSTEXPR uint32_t get_CID1() const
10782     {
10783         auto v = word0;
10784         return v;
10785     }
10786     CONSTEXPR cid1_r& set_CID1(uint32_t value)
10787     {
10788         word0 = value;
10789         return *this;
10790     }
10791 #endif
10792 };
10793 
10794 // cid2_r - Component ID byte 2
10795 struct cid2_r
10796 {
10797 #ifndef __cplusplus
10798     union
10799     {
10800         struct
10801         {
10802             uint32_t CID2 : 32; // Byte 2 of Component ID (Lower 8 bits valid)
10803         };
10804         uint32_t word;
10805     };
10806 #else
10807 private:
10808     uint32_t word0;
10809 public:
10810     CONSTEXPR cid2_r() :
10811         word0(5)
10812     {}
10813     CONSTEXPR cid2_r(uint32_t init) :
10814         word0(init)
10815     {}
10816     CONSTEXPR void operator=(uint32_t value)
10817     {
10818         word0 = value;
10819     }
10820     CONSTEXPR operator uint32_t()
10821     {
10822         return word0;
10823     }
10824     cid2_r copy()
10825     {
10826         return *this;
10827     }
10828     CONSTEXPR uint32_t get_CID2() const
10829     {
10830         auto v = word0;
10831         return v;
10832     }
10833     CONSTEXPR cid2_r& set_CID2(uint32_t value)
10834     {
10835         word0 = value;
10836         return *this;
10837     }
10838 #endif
10839 };
10840 
10841 // cid3_r - Component ID byte 3
10842 struct cid3_r
10843 {
10844 #ifndef __cplusplus
10845     union
10846     {
10847         struct
10848         {
10849             uint32_t CID3 : 32; // Byte 3 of Component ID (Lower 8 bits valid)
10850         };
10851         uint32_t word;
10852     };
10853 #else
10854 private:
10855     uint32_t word0;
10856 public:
10857     CONSTEXPR cid3_r() :
10858         word0(177)
10859     {}
10860     CONSTEXPR cid3_r(uint32_t init) :
10861         word0(init)
10862     {}
10863     CONSTEXPR void operator=(uint32_t value)
10864     {
10865         word0 = value;
10866     }
10867     CONSTEXPR operator uint32_t()
10868     {
10869         return word0;
10870     }
10871     cid3_r copy()
10872     {
10873         return *this;
10874     }
10875     CONSTEXPR uint32_t get_CID3() const
10876     {
10877         auto v = word0;
10878         return v;
10879     }
10880     CONSTEXPR cid3_r& set_CID3(uint32_t value)
10881     {
10882         word0 = value;
10883         return *this;
10884     }
10885 #endif
10886 };
10887 
10888 // wd_status_r - WD_STATUS
10889 struct wd_status_r
10890 {
10891 #ifndef __cplusplus
10892     union
10893     {
10894         struct
10895         {
10896             uint32_t ctrl_idle : 1; // All stripe jobs idle (all weights consumed)
10897             uint32_t reserved0 : 1;
10898             uint32_t active_core : 2; // WD active core
10899             uint32_t sc0_idle : 1; // Standard core 0 idle
10900             uint32_t sc1_idle : 1; // Standard core 1 idle
10901             uint32_t sc2_idle : 1; // Standard core 2 idle
10902             uint32_t sc3_idle : 1; // Standard core 3 idle
10903             uint32_t fc_idle : 1; // Fast core idle
10904             uint32_t tc_idle : 1; // Tensor core (IFM input) idle
10905             uint32_t reserved1 : 6;
10906             uint32_t wbuf0_valid : 1; // Weight buffer 0 full
10907             uint32_t wbuf0_idle : 1; // Weight buffer 0 empty
10908             uint32_t wbuf1_valid : 1; // Weight buffer 1 full
10909             uint32_t wbuf1_idle : 1; // Weight buffer 1 empty
10910             uint32_t wbuf2_valid : 1; // Weight buffer 2 full
10911             uint32_t wbuf2_idle : 1; // Weight buffer 2 empty
10912             uint32_t wbuf3_valid : 1; // Weight buffer 3 full
10913             uint32_t wbuf3_idle : 1; // Weight buffer 3 empty
10914             uint32_t stalled_by_ws_sc0 : 1; // WD stalled by lack of standard core 0 weight stream data
10915             uint32_t stalled_by_ws_sc1 : 1; // WD stalled by lack of standard core 1 weight stream data
10916             uint32_t stalled_by_ws_sc2 : 1; // WD stalled by lack of standard core 2 weight stream data
10917             uint32_t stalled_by_ws_sc3 : 1; // WD stalled by lack of standard core 3 weight stream data
10918             uint32_t stalled_by_ws_fc : 1; // WD stalled by lack of fast core weight stream data
10919             uint32_t stalled_by_ws_tc : 1; // WD stalled by lack of tensor core IFM stream data
10920             uint32_t stalled_by_wd_buf : 1; // WD stalled by lack of free WD buffer (blocked by MAC)
10921             uint32_t reserved2 : 1;
10922         };
10923         uint32_t word;
10924     };
10925 #else
10926 private:
10927     uint32_t word0;
10928 public:
10929     CONSTEXPR wd_status_r() :
10930         word0(0)
10931     {}
10932     CONSTEXPR wd_status_r(uint32_t init) :
10933         word0(init)
10934     {}
10935     CONSTEXPR void operator=(uint32_t value)
10936     {
10937         word0 = value;
10938     }
10939     CONSTEXPR operator uint32_t()
10940     {
10941         return word0;
10942     }
10943     wd_status_r copy()
10944     {
10945         return *this;
10946     }
10947     CONSTEXPR uint32_t get_ctrl_idle() const
10948     {
10949         auto v = ((1U << 1) - 1) & (word0 >> 0);
10950         return v;
10951     }
10952     CONSTEXPR wd_status_r& set_ctrl_idle(uint32_t value)
10953     {
10954         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
10955         return *this;
10956     }
10957     CONSTEXPR NPU_NAMESPACE::wd_active_core get_active_core() const
10958     {
10959         auto v = ((1U << 2) - 1) & (word0 >> 2);
10960         assert(v <= 3);
10961         return static_cast<NPU_NAMESPACE::wd_active_core>(v);
10962     }
10963     CONSTEXPR wd_status_r& set_active_core(NPU_NAMESPACE::wd_active_core value)
10964     {
10965         word0 = (~(((1U << 2) - 1)<<2) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 2);
10966         return *this;
10967     }
10968     CONSTEXPR uint32_t get_sc0_idle() const
10969     {
10970         auto v = ((1U << 1) - 1) & (word0 >> 4);
10971         return v;
10972     }
10973     CONSTEXPR wd_status_r& set_sc0_idle(uint32_t value)
10974     {
10975         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
10976         return *this;
10977     }
10978     CONSTEXPR uint32_t get_sc1_idle() const
10979     {
10980         auto v = ((1U << 1) - 1) & (word0 >> 5);
10981         return v;
10982     }
10983     CONSTEXPR wd_status_r& set_sc1_idle(uint32_t value)
10984     {
10985         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
10986         return *this;
10987     }
10988     CONSTEXPR uint32_t get_sc2_idle() const
10989     {
10990         auto v = ((1U << 1) - 1) & (word0 >> 6);
10991         return v;
10992     }
10993     CONSTEXPR wd_status_r& set_sc2_idle(uint32_t value)
10994     {
10995         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
10996         return *this;
10997     }
10998     CONSTEXPR uint32_t get_sc3_idle() const
10999     {
11000         auto v = ((1U << 1) - 1) & (word0 >> 7);
11001         return v;
11002     }
11003     CONSTEXPR wd_status_r& set_sc3_idle(uint32_t value)
11004     {
11005         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
11006         return *this;
11007     }
11008     CONSTEXPR uint32_t get_fc_idle() const
11009     {
11010         auto v = ((1U << 1) - 1) & (word0 >> 8);
11011         return v;
11012     }
11013     CONSTEXPR wd_status_r& set_fc_idle(uint32_t value)
11014     {
11015         word0 = (~(((1U << 1) - 1)<<8) & word0) | ((((1U << 1) - 1) & value) << 8);
11016         return *this;
11017     }
11018     CONSTEXPR uint32_t get_tc_idle() const
11019     {
11020         auto v = ((1U << 1) - 1) & (word0 >> 9);
11021         return v;
11022     }
11023     CONSTEXPR wd_status_r& set_tc_idle(uint32_t value)
11024     {
11025         word0 = (~(((1U << 1) - 1)<<9) & word0) | ((((1U << 1) - 1) & value) << 9);
11026         return *this;
11027     }
11028     CONSTEXPR uint32_t get_wbuf0_valid() const
11029     {
11030         auto v = ((1U << 1) - 1) & (word0 >> 16);
11031         return v;
11032     }
11033     CONSTEXPR wd_status_r& set_wbuf0_valid(uint32_t value)
11034     {
11035         word0 = (~(((1U << 1) - 1)<<16) & word0) | ((((1U << 1) - 1) & value) << 16);
11036         return *this;
11037     }
11038     CONSTEXPR uint32_t get_wbuf0_idle() const
11039     {
11040         auto v = ((1U << 1) - 1) & (word0 >> 17);
11041         return v;
11042     }
11043     CONSTEXPR wd_status_r& set_wbuf0_idle(uint32_t value)
11044     {
11045         word0 = (~(((1U << 1) - 1)<<17) & word0) | ((((1U << 1) - 1) & value) << 17);
11046         return *this;
11047     }
11048     CONSTEXPR uint32_t get_wbuf1_valid() const
11049     {
11050         auto v = ((1U << 1) - 1) & (word0 >> 18);
11051         return v;
11052     }
11053     CONSTEXPR wd_status_r& set_wbuf1_valid(uint32_t value)
11054     {
11055         word0 = (~(((1U << 1) - 1)<<18) & word0) | ((((1U << 1) - 1) & value) << 18);
11056         return *this;
11057     }
11058     CONSTEXPR uint32_t get_wbuf1_idle() const
11059     {
11060         auto v = ((1U << 1) - 1) & (word0 >> 19);
11061         return v;
11062     }
11063     CONSTEXPR wd_status_r& set_wbuf1_idle(uint32_t value)
11064     {
11065         word0 = (~(((1U << 1) - 1)<<19) & word0) | ((((1U << 1) - 1) & value) << 19);
11066         return *this;
11067     }
11068     CONSTEXPR uint32_t get_wbuf2_valid() const
11069     {
11070         auto v = ((1U << 1) - 1) & (word0 >> 20);
11071         return v;
11072     }
11073     CONSTEXPR wd_status_r& set_wbuf2_valid(uint32_t value)
11074     {
11075         word0 = (~(((1U << 1) - 1)<<20) & word0) | ((((1U << 1) - 1) & value) << 20);
11076         return *this;
11077     }
11078     CONSTEXPR uint32_t get_wbuf2_idle() const
11079     {
11080         auto v = ((1U << 1) - 1) & (word0 >> 21);
11081         return v;
11082     }
11083     CONSTEXPR wd_status_r& set_wbuf2_idle(uint32_t value)
11084     {
11085         word0 = (~(((1U << 1) - 1)<<21) & word0) | ((((1U << 1) - 1) & value) << 21);
11086         return *this;
11087     }
11088     CONSTEXPR uint32_t get_wbuf3_valid() const
11089     {
11090         auto v = ((1U << 1) - 1) & (word0 >> 22);
11091         return v;
11092     }
11093     CONSTEXPR wd_status_r& set_wbuf3_valid(uint32_t value)
11094     {
11095         word0 = (~(((1U << 1) - 1)<<22) & word0) | ((((1U << 1) - 1) & value) << 22);
11096         return *this;
11097     }
11098     CONSTEXPR uint32_t get_wbuf3_idle() const
11099     {
11100         auto v = ((1U << 1) - 1) & (word0 >> 23);
11101         return v;
11102     }
11103     CONSTEXPR wd_status_r& set_wbuf3_idle(uint32_t value)
11104     {
11105         word0 = (~(((1U << 1) - 1)<<23) & word0) | ((((1U << 1) - 1) & value) << 23);
11106         return *this;
11107     }
11108     CONSTEXPR uint32_t get_stalled_by_ws_sc0() const
11109     {
11110         auto v = ((1U << 1) - 1) & (word0 >> 24);
11111         return v;
11112     }
11113     CONSTEXPR wd_status_r& set_stalled_by_ws_sc0(uint32_t value)
11114     {
11115         word0 = (~(((1U << 1) - 1)<<24) & word0) | ((((1U << 1) - 1) & value) << 24);
11116         return *this;
11117     }
11118     CONSTEXPR uint32_t get_stalled_by_ws_sc1() const
11119     {
11120         auto v = ((1U << 1) - 1) & (word0 >> 25);
11121         return v;
11122     }
11123     CONSTEXPR wd_status_r& set_stalled_by_ws_sc1(uint32_t value)
11124     {
11125         word0 = (~(((1U << 1) - 1)<<25) & word0) | ((((1U << 1) - 1) & value) << 25);
11126         return *this;
11127     }
11128     CONSTEXPR uint32_t get_stalled_by_ws_sc2() const
11129     {
11130         auto v = ((1U << 1) - 1) & (word0 >> 26);
11131         return v;
11132     }
11133     CONSTEXPR wd_status_r& set_stalled_by_ws_sc2(uint32_t value)
11134     {
11135         word0 = (~(((1U << 1) - 1)<<26) & word0) | ((((1U << 1) - 1) & value) << 26);
11136         return *this;
11137     }
11138     CONSTEXPR uint32_t get_stalled_by_ws_sc3() const
11139     {
11140         auto v = ((1U << 1) - 1) & (word0 >> 27);
11141         return v;
11142     }
11143     CONSTEXPR wd_status_r& set_stalled_by_ws_sc3(uint32_t value)
11144     {
11145         word0 = (~(((1U << 1) - 1)<<27) & word0) | ((((1U << 1) - 1) & value) << 27);
11146         return *this;
11147     }
11148     CONSTEXPR uint32_t get_stalled_by_ws_fc() const
11149     {
11150         auto v = ((1U << 1) - 1) & (word0 >> 28);
11151         return v;
11152     }
11153     CONSTEXPR wd_status_r& set_stalled_by_ws_fc(uint32_t value)
11154     {
11155         word0 = (~(((1U << 1) - 1)<<28) & word0) | ((((1U << 1) - 1) & value) << 28);
11156         return *this;
11157     }
11158     CONSTEXPR uint32_t get_stalled_by_ws_tc() const
11159     {
11160         auto v = ((1U << 1) - 1) & (word0 >> 29);
11161         return v;
11162     }
11163     CONSTEXPR wd_status_r& set_stalled_by_ws_tc(uint32_t value)
11164     {
11165         word0 = (~(((1U << 1) - 1)<<29) & word0) | ((((1U << 1) - 1) & value) << 29);
11166         return *this;
11167     }
11168     CONSTEXPR uint32_t get_stalled_by_wd_buf() const
11169     {
11170         auto v = ((1U << 1) - 1) & (word0 >> 30);
11171         return v;
11172     }
11173     CONSTEXPR wd_status_r& set_stalled_by_wd_buf(uint32_t value)
11174     {
11175         word0 = (~(((1U << 1) - 1)<<30) & word0) | ((((1U << 1) - 1) & value) << 30);
11176         return *this;
11177     }
11178 #endif
11179 };
11180 
11181 // mac_status_r - MAC_STATUS
11182 struct mac_status_r
11183 {
11184 #ifndef __cplusplus
11185     union
11186     {
11187         struct
11188         {
11189             uint32_t mac_active : 1; // Valid block command and not stalled
11190             uint32_t reserved0 : 2;
11191             uint32_t mac_dpu_active : 1; // At least one DPU is active
11192             uint32_t mac_stalled_by_w_or_acc : 1; // MAC stalled by WB or AB (not IB)
11193             uint32_t mac_stalled_by_w : 1; // MAC stalled by WB (not IB)
11194             uint32_t mac_stalled_by_acc : 1; // MAC stalled by AB (not IB)
11195             uint32_t mac_stalled_by_ib : 1; // MAC stalled by IB
11196             uint32_t reserved1 : 24;
11197         };
11198         uint32_t word;
11199     };
11200 #else
11201 private:
11202     uint32_t word0;
11203 public:
11204     CONSTEXPR mac_status_r() :
11205         word0(0)
11206     {}
11207     CONSTEXPR mac_status_r(uint32_t init) :
11208         word0(init)
11209     {}
11210     CONSTEXPR void operator=(uint32_t value)
11211     {
11212         word0 = value;
11213     }
11214     CONSTEXPR operator uint32_t()
11215     {
11216         return word0;
11217     }
11218     mac_status_r copy()
11219     {
11220         return *this;
11221     }
11222     CONSTEXPR uint32_t get_mac_active() const
11223     {
11224         auto v = ((1U << 1) - 1) & (word0 >> 0);
11225         return v;
11226     }
11227     CONSTEXPR mac_status_r& set_mac_active(uint32_t value)
11228     {
11229         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
11230         return *this;
11231     }
11232     CONSTEXPR uint32_t get_mac_dpu_active() const
11233     {
11234         auto v = ((1U << 1) - 1) & (word0 >> 3);
11235         return v;
11236     }
11237     CONSTEXPR mac_status_r& set_mac_dpu_active(uint32_t value)
11238     {
11239         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
11240         return *this;
11241     }
11242     CONSTEXPR uint32_t get_mac_stalled_by_w_or_acc() const
11243     {
11244         auto v = ((1U << 1) - 1) & (word0 >> 4);
11245         return v;
11246     }
11247     CONSTEXPR mac_status_r& set_mac_stalled_by_w_or_acc(uint32_t value)
11248     {
11249         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
11250         return *this;
11251     }
11252     CONSTEXPR uint32_t get_mac_stalled_by_w() const
11253     {
11254         auto v = ((1U << 1) - 1) & (word0 >> 5);
11255         return v;
11256     }
11257     CONSTEXPR mac_status_r& set_mac_stalled_by_w(uint32_t value)
11258     {
11259         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
11260         return *this;
11261     }
11262     CONSTEXPR uint32_t get_mac_stalled_by_acc() const
11263     {
11264         auto v = ((1U << 1) - 1) & (word0 >> 6);
11265         return v;
11266     }
11267     CONSTEXPR mac_status_r& set_mac_stalled_by_acc(uint32_t value)
11268     {
11269         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
11270         return *this;
11271     }
11272     CONSTEXPR uint32_t get_mac_stalled_by_ib() const
11273     {
11274         auto v = ((1U << 1) - 1) & (word0 >> 7);
11275         return v;
11276     }
11277     CONSTEXPR mac_status_r& set_mac_stalled_by_ib(uint32_t value)
11278     {
11279         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
11280         return *this;
11281     }
11282 #endif
11283 };
11284 
11285 // ao_status_r - AO_STATUS
11286 struct ao_status_r
11287 {
11288 #ifndef __cplusplus
11289     union
11290     {
11291         struct
11292         {
11293             uint32_t ao_active : 1; // Valid block command and not stalled
11294             uint32_t reserved0 : 2;
11295             uint32_t ao_stalled_by_bs_or_ob : 1; // Stalled by bias scale data or output block
11296             uint32_t ao_stalled_by_bs : 1; // Stalled by bias scale data
11297             uint32_t ao_stalled_by_ob : 1; // Stalled by output block
11298             uint32_t ao_stalled_by_ab_or_cb : 1; // Stalled by accumulator or chaining buffer
11299             uint32_t ao_stalled_by_ab : 1; // Stalled by accumulator buffer
11300             uint32_t ao_stalled_by_cb : 1; // Stalled by chaining buffer
11301             uint32_t reserved1 : 23;
11302         };
11303         uint32_t word;
11304     };
11305 #else
11306 private:
11307     uint32_t word0;
11308 public:
11309     CONSTEXPR ao_status_r() :
11310         word0(0)
11311     {}
11312     CONSTEXPR ao_status_r(uint32_t init) :
11313         word0(init)
11314     {}
11315     CONSTEXPR void operator=(uint32_t value)
11316     {
11317         word0 = value;
11318     }
11319     CONSTEXPR operator uint32_t()
11320     {
11321         return word0;
11322     }
11323     ao_status_r copy()
11324     {
11325         return *this;
11326     }
11327     CONSTEXPR uint32_t get_ao_active() const
11328     {
11329         auto v = ((1U << 1) - 1) & (word0 >> 0);
11330         return v;
11331     }
11332     CONSTEXPR ao_status_r& set_ao_active(uint32_t value)
11333     {
11334         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
11335         return *this;
11336     }
11337     CONSTEXPR uint32_t get_ao_stalled_by_bs_or_ob() const
11338     {
11339         auto v = ((1U << 1) - 1) & (word0 >> 3);
11340         return v;
11341     }
11342     CONSTEXPR ao_status_r& set_ao_stalled_by_bs_or_ob(uint32_t value)
11343     {
11344         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
11345         return *this;
11346     }
11347     CONSTEXPR uint32_t get_ao_stalled_by_bs() const
11348     {
11349         auto v = ((1U << 1) - 1) & (word0 >> 4);
11350         return v;
11351     }
11352     CONSTEXPR ao_status_r& set_ao_stalled_by_bs(uint32_t value)
11353     {
11354         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
11355         return *this;
11356     }
11357     CONSTEXPR uint32_t get_ao_stalled_by_ob() const
11358     {
11359         auto v = ((1U << 1) - 1) & (word0 >> 5);
11360         return v;
11361     }
11362     CONSTEXPR ao_status_r& set_ao_stalled_by_ob(uint32_t value)
11363     {
11364         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
11365         return *this;
11366     }
11367     CONSTEXPR uint32_t get_ao_stalled_by_ab_or_cb() const
11368     {
11369         auto v = ((1U << 1) - 1) & (word0 >> 6);
11370         return v;
11371     }
11372     CONSTEXPR ao_status_r& set_ao_stalled_by_ab_or_cb(uint32_t value)
11373     {
11374         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
11375         return *this;
11376     }
11377     CONSTEXPR uint32_t get_ao_stalled_by_ab() const
11378     {
11379         auto v = ((1U << 1) - 1) & (word0 >> 7);
11380         return v;
11381     }
11382     CONSTEXPR ao_status_r& set_ao_stalled_by_ab(uint32_t value)
11383     {
11384         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
11385         return *this;
11386     }
11387     CONSTEXPR uint32_t get_ao_stalled_by_cb() const
11388     {
11389         auto v = ((1U << 1) - 1) & (word0 >> 8);
11390         return v;
11391     }
11392     CONSTEXPR ao_status_r& set_ao_stalled_by_cb(uint32_t value)
11393     {
11394         word0 = (~(((1U << 1) - 1)<<8) & word0) | ((((1U << 1) - 1) & value) << 8);
11395         return *this;
11396     }
11397 #endif
11398 };
11399 
11400 // dma_status0_r - DMA_STATUS0
11401 struct dma_status0_r
11402 {
11403 #ifndef __cplusplus
11404     union
11405     {
11406         struct
11407         {
11408             uint32_t cmd_ch_idle : 1; // When this bit is high means that the CMD channel is not busy in generating addresses for a CMD job
11409             uint32_t ifm0_ch_idle : 1; // When this bit is high means that there are no ongoing IFM MAC jobs
11410             uint32_t ifm1_ch_idle : 1; // When this bit is high means that there are no ongoing IFM STREAM jobs
11411             uint32_t wgt_ch_idle : 1; // When this bit is high means that the WGT channel is not busy in generating addresses for a WGT job
11412             uint32_t bas_ch_idle : 1; // When this bit is high means that the BAS channel is not busy in generating addresses for a BAS job
11413             uint32_t m2m_ch_idle : 1; // When this bit is high means that there are no ongoing M2M jobs
11414             uint32_t ofm_ch_idle : 1; // When this bit is high means that there are no ongoing OFM jobs
11415             uint32_t axi_halt_req : 1; // CPM has requested to HALT AXI bus before soft reset
11416             uint32_t axi_halt_ack : 1; // DMA is in condition to halt the AXI bus since there are no pending transactions
11417             uint32_t axi_pause_req : 1; // CC has requested to pause the AXI
11418             uint32_t axi_pause_ack : 1; // DMA is in condition to pause the AXI bus since there are no pending transactions
11419             uint32_t cmd_abort_ack : 1; // CC has requested to abort a CMD channel job
11420             uint32_t cmd_abort_req : 1; // DMA has acknowledged the request of aborting a CMD channel job
11421             uint32_t ifm_mac_if_stall : 1; // Valid high and Ready low for IFM MAC interface
11422             uint32_t ifm_tc_if_stall : 1; // Valid high and Ready low for IFM WD Tensor Core interface
11423             uint32_t ifm_ao_if_stall : 1; // Valid high and Ready low for IFM AO interface
11424             uint32_t ofm_if_stall : 1; // Valid high and Ready low for OFM interface between AO and DMA
11425             uint32_t cmd_if_stall : 1; // Valid high and Ready low for CMD interface between DMA and CC
11426             uint32_t wd_sc0_if_stall : 1; // Valid high and Ready low for SC0 bitstream interface toward WD
11427             uint32_t wd_sc1_if_stall : 1; // Valid high and Ready low for SC1 bitstream interface toward WD
11428             uint32_t wd_sc2_if_stall : 1; // Valid high and Ready low for SC2 bitstream interface toward WD
11429             uint32_t wd_sc3_if_stall : 1; // Valid high and Ready low for SC2 bitstream interface toward WD
11430             uint32_t wd_fc_if_stall : 1; // Valid high and Ready low for FC bitstream interface toward WD
11431             uint32_t bs_if_stall : 1; // Valid high and Ready low for BAS interface between DMA and AO
11432             uint32_t lutcfg_if_stall : 1; // Valid high and Ready low for LUTCFG interface between DMA and AO
11433             uint32_t reserved0 : 7;
11434         };
11435         uint32_t word;
11436     };
11437 #else
11438 private:
11439     uint32_t word0;
11440 public:
11441     CONSTEXPR dma_status0_r() :
11442         word0(0)
11443     {}
11444     CONSTEXPR dma_status0_r(uint32_t init) :
11445         word0(init)
11446     {}
11447     CONSTEXPR void operator=(uint32_t value)
11448     {
11449         word0 = value;
11450     }
11451     CONSTEXPR operator uint32_t()
11452     {
11453         return word0;
11454     }
11455     dma_status0_r copy()
11456     {
11457         return *this;
11458     }
11459     CONSTEXPR uint32_t get_cmd_ch_idle() const
11460     {
11461         auto v = ((1U << 1) - 1) & (word0 >> 0);
11462         return v;
11463     }
11464     CONSTEXPR dma_status0_r& set_cmd_ch_idle(uint32_t value)
11465     {
11466         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
11467         return *this;
11468     }
11469     CONSTEXPR uint32_t get_ifm0_ch_idle() const
11470     {
11471         auto v = ((1U << 1) - 1) & (word0 >> 1);
11472         return v;
11473     }
11474     CONSTEXPR dma_status0_r& set_ifm0_ch_idle(uint32_t value)
11475     {
11476         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
11477         return *this;
11478     }
11479     CONSTEXPR uint32_t get_ifm1_ch_idle() const
11480     {
11481         auto v = ((1U << 1) - 1) & (word0 >> 2);
11482         return v;
11483     }
11484     CONSTEXPR dma_status0_r& set_ifm1_ch_idle(uint32_t value)
11485     {
11486         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
11487         return *this;
11488     }
11489     CONSTEXPR uint32_t get_wgt_ch_idle() const
11490     {
11491         auto v = ((1U << 1) - 1) & (word0 >> 3);
11492         return v;
11493     }
11494     CONSTEXPR dma_status0_r& set_wgt_ch_idle(uint32_t value)
11495     {
11496         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
11497         return *this;
11498     }
11499     CONSTEXPR uint32_t get_bas_ch_idle() const
11500     {
11501         auto v = ((1U << 1) - 1) & (word0 >> 4);
11502         return v;
11503     }
11504     CONSTEXPR dma_status0_r& set_bas_ch_idle(uint32_t value)
11505     {
11506         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
11507         return *this;
11508     }
11509     CONSTEXPR uint32_t get_m2m_ch_idle() const
11510     {
11511         auto v = ((1U << 1) - 1) & (word0 >> 5);
11512         return v;
11513     }
11514     CONSTEXPR dma_status0_r& set_m2m_ch_idle(uint32_t value)
11515     {
11516         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
11517         return *this;
11518     }
11519     CONSTEXPR uint32_t get_ofm_ch_idle() const
11520     {
11521         auto v = ((1U << 1) - 1) & (word0 >> 6);
11522         return v;
11523     }
11524     CONSTEXPR dma_status0_r& set_ofm_ch_idle(uint32_t value)
11525     {
11526         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
11527         return *this;
11528     }
11529     CONSTEXPR uint32_t get_axi_halt_req() const
11530     {
11531         auto v = ((1U << 1) - 1) & (word0 >> 7);
11532         return v;
11533     }
11534     CONSTEXPR dma_status0_r& set_axi_halt_req(uint32_t value)
11535     {
11536         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
11537         return *this;
11538     }
11539     CONSTEXPR uint32_t get_axi_halt_ack() const
11540     {
11541         auto v = ((1U << 1) - 1) & (word0 >> 8);
11542         return v;
11543     }
11544     CONSTEXPR dma_status0_r& set_axi_halt_ack(uint32_t value)
11545     {
11546         word0 = (~(((1U << 1) - 1)<<8) & word0) | ((((1U << 1) - 1) & value) << 8);
11547         return *this;
11548     }
11549     CONSTEXPR uint32_t get_axi_pause_req() const
11550     {
11551         auto v = ((1U << 1) - 1) & (word0 >> 9);
11552         return v;
11553     }
11554     CONSTEXPR dma_status0_r& set_axi_pause_req(uint32_t value)
11555     {
11556         word0 = (~(((1U << 1) - 1)<<9) & word0) | ((((1U << 1) - 1) & value) << 9);
11557         return *this;
11558     }
11559     CONSTEXPR uint32_t get_axi_pause_ack() const
11560     {
11561         auto v = ((1U << 1) - 1) & (word0 >> 10);
11562         return v;
11563     }
11564     CONSTEXPR dma_status0_r& set_axi_pause_ack(uint32_t value)
11565     {
11566         word0 = (~(((1U << 1) - 1)<<10) & word0) | ((((1U << 1) - 1) & value) << 10);
11567         return *this;
11568     }
11569     CONSTEXPR uint32_t get_cmd_abort_ack() const
11570     {
11571         auto v = ((1U << 1) - 1) & (word0 >> 11);
11572         return v;
11573     }
11574     CONSTEXPR dma_status0_r& set_cmd_abort_ack(uint32_t value)
11575     {
11576         word0 = (~(((1U << 1) - 1)<<11) & word0) | ((((1U << 1) - 1) & value) << 11);
11577         return *this;
11578     }
11579     CONSTEXPR uint32_t get_cmd_abort_req() const
11580     {
11581         auto v = ((1U << 1) - 1) & (word0 >> 12);
11582         return v;
11583     }
11584     CONSTEXPR dma_status0_r& set_cmd_abort_req(uint32_t value)
11585     {
11586         word0 = (~(((1U << 1) - 1)<<12) & word0) | ((((1U << 1) - 1) & value) << 12);
11587         return *this;
11588     }
11589     CONSTEXPR uint32_t get_ifm_mac_if_stall() const
11590     {
11591         auto v = ((1U << 1) - 1) & (word0 >> 13);
11592         return v;
11593     }
11594     CONSTEXPR dma_status0_r& set_ifm_mac_if_stall(uint32_t value)
11595     {
11596         word0 = (~(((1U << 1) - 1)<<13) & word0) | ((((1U << 1) - 1) & value) << 13);
11597         return *this;
11598     }
11599     CONSTEXPR uint32_t get_ifm_tc_if_stall() const
11600     {
11601         auto v = ((1U << 1) - 1) & (word0 >> 14);
11602         return v;
11603     }
11604     CONSTEXPR dma_status0_r& set_ifm_tc_if_stall(uint32_t value)
11605     {
11606         word0 = (~(((1U << 1) - 1)<<14) & word0) | ((((1U << 1) - 1) & value) << 14);
11607         return *this;
11608     }
11609     CONSTEXPR uint32_t get_ifm_ao_if_stall() const
11610     {
11611         auto v = ((1U << 1) - 1) & (word0 >> 15);
11612         return v;
11613     }
11614     CONSTEXPR dma_status0_r& set_ifm_ao_if_stall(uint32_t value)
11615     {
11616         word0 = (~(((1U << 1) - 1)<<15) & word0) | ((((1U << 1) - 1) & value) << 15);
11617         return *this;
11618     }
11619     CONSTEXPR uint32_t get_ofm_if_stall() const
11620     {
11621         auto v = ((1U << 1) - 1) & (word0 >> 16);
11622         return v;
11623     }
11624     CONSTEXPR dma_status0_r& set_ofm_if_stall(uint32_t value)
11625     {
11626         word0 = (~(((1U << 1) - 1)<<16) & word0) | ((((1U << 1) - 1) & value) << 16);
11627         return *this;
11628     }
11629     CONSTEXPR uint32_t get_cmd_if_stall() const
11630     {
11631         auto v = ((1U << 1) - 1) & (word0 >> 17);
11632         return v;
11633     }
11634     CONSTEXPR dma_status0_r& set_cmd_if_stall(uint32_t value)
11635     {
11636         word0 = (~(((1U << 1) - 1)<<17) & word0) | ((((1U << 1) - 1) & value) << 17);
11637         return *this;
11638     }
11639     CONSTEXPR uint32_t get_wd_sc0_if_stall() const
11640     {
11641         auto v = ((1U << 1) - 1) & (word0 >> 18);
11642         return v;
11643     }
11644     CONSTEXPR dma_status0_r& set_wd_sc0_if_stall(uint32_t value)
11645     {
11646         word0 = (~(((1U << 1) - 1)<<18) & word0) | ((((1U << 1) - 1) & value) << 18);
11647         return *this;
11648     }
11649     CONSTEXPR uint32_t get_wd_sc1_if_stall() const
11650     {
11651         auto v = ((1U << 1) - 1) & (word0 >> 19);
11652         return v;
11653     }
11654     CONSTEXPR dma_status0_r& set_wd_sc1_if_stall(uint32_t value)
11655     {
11656         word0 = (~(((1U << 1) - 1)<<19) & word0) | ((((1U << 1) - 1) & value) << 19);
11657         return *this;
11658     }
11659     CONSTEXPR uint32_t get_wd_sc2_if_stall() const
11660     {
11661         auto v = ((1U << 1) - 1) & (word0 >> 20);
11662         return v;
11663     }
11664     CONSTEXPR dma_status0_r& set_wd_sc2_if_stall(uint32_t value)
11665     {
11666         word0 = (~(((1U << 1) - 1)<<20) & word0) | ((((1U << 1) - 1) & value) << 20);
11667         return *this;
11668     }
11669     CONSTEXPR uint32_t get_wd_sc3_if_stall() const
11670     {
11671         auto v = ((1U << 1) - 1) & (word0 >> 21);
11672         return v;
11673     }
11674     CONSTEXPR dma_status0_r& set_wd_sc3_if_stall(uint32_t value)
11675     {
11676         word0 = (~(((1U << 1) - 1)<<21) & word0) | ((((1U << 1) - 1) & value) << 21);
11677         return *this;
11678     }
11679     CONSTEXPR uint32_t get_wd_fc_if_stall() const
11680     {
11681         auto v = ((1U << 1) - 1) & (word0 >> 22);
11682         return v;
11683     }
11684     CONSTEXPR dma_status0_r& set_wd_fc_if_stall(uint32_t value)
11685     {
11686         word0 = (~(((1U << 1) - 1)<<22) & word0) | ((((1U << 1) - 1) & value) << 22);
11687         return *this;
11688     }
11689     CONSTEXPR uint32_t get_bs_if_stall() const
11690     {
11691         auto v = ((1U << 1) - 1) & (word0 >> 23);
11692         return v;
11693     }
11694     CONSTEXPR dma_status0_r& set_bs_if_stall(uint32_t value)
11695     {
11696         word0 = (~(((1U << 1) - 1)<<23) & word0) | ((((1U << 1) - 1) & value) << 23);
11697         return *this;
11698     }
11699     CONSTEXPR uint32_t get_lutcfg_if_stall() const
11700     {
11701         auto v = ((1U << 1) - 1) & (word0 >> 24);
11702         return v;
11703     }
11704     CONSTEXPR dma_status0_r& set_lutcfg_if_stall(uint32_t value)
11705     {
11706         word0 = (~(((1U << 1) - 1)<<24) & word0) | ((((1U << 1) - 1) & value) << 24);
11707         return *this;
11708     }
11709 #endif
11710 };
11711 
11712 // dma_status1_r - DMA_STATUS1
11713 struct dma_status1_r
11714 {
11715 #ifndef __cplusplus
11716     union
11717     {
11718         struct
11719         {
11720             uint32_t axi_sram0_ar_stalled : 1; // Read transfer request stalled on arready low AXI SRAM0 (due to memory system)
11721             uint32_t axi_sram0_rd_limit_stall : 1; // Read stalled due to one AXI SRAM0 limit counter being reached
11722             uint32_t axi_sram0_aw_stalled : 1; // Write transfer request stalled on awready low AXI SRAM0 (due to memory system)
11723             uint32_t axi_sram0_w_stalled : 1; // Write transfer stalled on awready low AXI SRAM0 (due to memory system)
11724             uint32_t axi_sram0_wr_limit_stall : 1; // Write stalled due to one AXI SRAM0 limit counter being reached
11725             uint32_t axi_sram1_ar_stalled : 1; // Read transfer request stalled on arready low AXI SRAM1 (due to memory system)
11726             uint32_t axi_sram1_rd_limit_stall : 1; // Read stalled due to one AXI SRAM1 limit counter being reached
11727             uint32_t axi_sram1_aw_stalled : 1; // Write transfer request stalled on awready low AXI SRAM1 (due to memory system)
11728             uint32_t axi_sram1_w_stalled : 1; // Write transfer stalled on awready low AXI SRAM1 (due to memory system)
11729             uint32_t axi_sram1_wr_limit_stall : 1; // Write stalled due to one AXI SRAM1 limit counter being reached
11730             uint32_t axi_sram2_ar_stalled : 1; // Read transfer request stalled on arready low AXI SRAM2 (due to memory system)
11731             uint32_t axi_sram2_rd_limit_stall : 1; // Read stalled due to one AXI SRAM2 limit counter being reached
11732             uint32_t axi_sram2_aw_stalled : 1; // Write transfer request stalled on awready low AXI SRAM2 (due to memory system)
11733             uint32_t axi_sram2_w_stalled : 1; // Write transfer stalled on awready low AXI SRAM2 (due to memory system)
11734             uint32_t axi_sram2_wr_limit_stall : 1; // Write stalled due to one AXI SRAM2 limit counter being reached
11735             uint32_t axi_sram3_ar_stalled : 1; // Read transfer request stalled on arready low AXI SRAM3 (due to memory system)
11736             uint32_t axi_sram3_rd_limit_stall : 1; // Read stalled due to one AXI SRAM3 limit counter being reached
11737             uint32_t axi_sram3_aw_stalled : 1; // Write transfer request stalled on awready low AXI SRAM3 (due to memory system)
11738             uint32_t axi_sram3_w_stalled : 1; // Write transfer stalled on awready low AXI SRAM3 (due to memory system)
11739             uint32_t axi_sram3_wr_limit_stall : 1; // Write stalled due to one AXI SRAM3 limit counter being reached
11740             uint32_t axi_ext0_ar_stalled : 1; // Read transfer request stalled on arready low AXI EXT0 (due to memory system)
11741             uint32_t axi_ext0_rd_limit_stall : 1; // Read stalled due to one AXI EXT0 limit counter being reached
11742             uint32_t axi_ext0_aw_stalled : 1; // Write transfer request stalled on awready low AXI EXT0 (due to memory system)
11743             uint32_t axi_ext0_w_stalled : 1; // Write transfer stalled on awready low AXI EXT0 (due to memory system)
11744             uint32_t axi_ext0_wr_limit_stall : 1; // Write stalled due to one AXI EXT0 limit counter being reached
11745             uint32_t axi_ext1_ar_stalled : 1; // Read transfer request stalled on arready low AXI EXT1 (due to memory system)
11746             uint32_t axi_ext1_rd_limit_stall : 1; // Read stalled due to one AXI EXT1 limit counter being reached
11747             uint32_t axi_ext1_aw_stalled : 1; // Write transfer request stalled on awready low AXI EXT1 (due to memory system)
11748             uint32_t axi_ext1_w_stalled : 1; // Write transfer stalled on awready low AXI EXT1 (due to memory system)
11749             uint32_t axi_ext1_wr_limit_stall : 1; // Write stalled due to one AXI EXT1 limit counter being reached
11750             uint32_t reserved0 : 2;
11751         };
11752         uint32_t word;
11753     };
11754 #else
11755 private:
11756     uint32_t word0;
11757 public:
11758     CONSTEXPR dma_status1_r() :
11759         word0(0)
11760     {}
11761     CONSTEXPR dma_status1_r(uint32_t init) :
11762         word0(init)
11763     {}
11764     CONSTEXPR void operator=(uint32_t value)
11765     {
11766         word0 = value;
11767     }
11768     CONSTEXPR operator uint32_t()
11769     {
11770         return word0;
11771     }
11772     dma_status1_r copy()
11773     {
11774         return *this;
11775     }
11776     CONSTEXPR uint32_t get_axi_sram0_ar_stalled() const
11777     {
11778         auto v = ((1U << 1) - 1) & (word0 >> 0);
11779         return v;
11780     }
11781     CONSTEXPR dma_status1_r& set_axi_sram0_ar_stalled(uint32_t value)
11782     {
11783         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
11784         return *this;
11785     }
11786     CONSTEXPR uint32_t get_axi_sram0_rd_limit_stall() const
11787     {
11788         auto v = ((1U << 1) - 1) & (word0 >> 1);
11789         return v;
11790     }
11791     CONSTEXPR dma_status1_r& set_axi_sram0_rd_limit_stall(uint32_t value)
11792     {
11793         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
11794         return *this;
11795     }
11796     CONSTEXPR uint32_t get_axi_sram0_aw_stalled() const
11797     {
11798         auto v = ((1U << 1) - 1) & (word0 >> 2);
11799         return v;
11800     }
11801     CONSTEXPR dma_status1_r& set_axi_sram0_aw_stalled(uint32_t value)
11802     {
11803         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
11804         return *this;
11805     }
11806     CONSTEXPR uint32_t get_axi_sram0_w_stalled() const
11807     {
11808         auto v = ((1U << 1) - 1) & (word0 >> 3);
11809         return v;
11810     }
11811     CONSTEXPR dma_status1_r& set_axi_sram0_w_stalled(uint32_t value)
11812     {
11813         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
11814         return *this;
11815     }
11816     CONSTEXPR uint32_t get_axi_sram0_wr_limit_stall() const
11817     {
11818         auto v = ((1U << 1) - 1) & (word0 >> 4);
11819         return v;
11820     }
11821     CONSTEXPR dma_status1_r& set_axi_sram0_wr_limit_stall(uint32_t value)
11822     {
11823         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
11824         return *this;
11825     }
11826     CONSTEXPR uint32_t get_axi_sram1_ar_stalled() const
11827     {
11828         auto v = ((1U << 1) - 1) & (word0 >> 5);
11829         return v;
11830     }
11831     CONSTEXPR dma_status1_r& set_axi_sram1_ar_stalled(uint32_t value)
11832     {
11833         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
11834         return *this;
11835     }
11836     CONSTEXPR uint32_t get_axi_sram1_rd_limit_stall() const
11837     {
11838         auto v = ((1U << 1) - 1) & (word0 >> 6);
11839         return v;
11840     }
11841     CONSTEXPR dma_status1_r& set_axi_sram1_rd_limit_stall(uint32_t value)
11842     {
11843         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
11844         return *this;
11845     }
11846     CONSTEXPR uint32_t get_axi_sram1_aw_stalled() const
11847     {
11848         auto v = ((1U << 1) - 1) & (word0 >> 7);
11849         return v;
11850     }
11851     CONSTEXPR dma_status1_r& set_axi_sram1_aw_stalled(uint32_t value)
11852     {
11853         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
11854         return *this;
11855     }
11856     CONSTEXPR uint32_t get_axi_sram1_w_stalled() const
11857     {
11858         auto v = ((1U << 1) - 1) & (word0 >> 8);
11859         return v;
11860     }
11861     CONSTEXPR dma_status1_r& set_axi_sram1_w_stalled(uint32_t value)
11862     {
11863         word0 = (~(((1U << 1) - 1)<<8) & word0) | ((((1U << 1) - 1) & value) << 8);
11864         return *this;
11865     }
11866     CONSTEXPR uint32_t get_axi_sram1_wr_limit_stall() const
11867     {
11868         auto v = ((1U << 1) - 1) & (word0 >> 9);
11869         return v;
11870     }
11871     CONSTEXPR dma_status1_r& set_axi_sram1_wr_limit_stall(uint32_t value)
11872     {
11873         word0 = (~(((1U << 1) - 1)<<9) & word0) | ((((1U << 1) - 1) & value) << 9);
11874         return *this;
11875     }
11876     CONSTEXPR uint32_t get_axi_sram2_ar_stalled() const
11877     {
11878         auto v = ((1U << 1) - 1) & (word0 >> 10);
11879         return v;
11880     }
11881     CONSTEXPR dma_status1_r& set_axi_sram2_ar_stalled(uint32_t value)
11882     {
11883         word0 = (~(((1U << 1) - 1)<<10) & word0) | ((((1U << 1) - 1) & value) << 10);
11884         return *this;
11885     }
11886     CONSTEXPR uint32_t get_axi_sram2_rd_limit_stall() const
11887     {
11888         auto v = ((1U << 1) - 1) & (word0 >> 11);
11889         return v;
11890     }
11891     CONSTEXPR dma_status1_r& set_axi_sram2_rd_limit_stall(uint32_t value)
11892     {
11893         word0 = (~(((1U << 1) - 1)<<11) & word0) | ((((1U << 1) - 1) & value) << 11);
11894         return *this;
11895     }
11896     CONSTEXPR uint32_t get_axi_sram2_aw_stalled() const
11897     {
11898         auto v = ((1U << 1) - 1) & (word0 >> 12);
11899         return v;
11900     }
11901     CONSTEXPR dma_status1_r& set_axi_sram2_aw_stalled(uint32_t value)
11902     {
11903         word0 = (~(((1U << 1) - 1)<<12) & word0) | ((((1U << 1) - 1) & value) << 12);
11904         return *this;
11905     }
11906     CONSTEXPR uint32_t get_axi_sram2_w_stalled() const
11907     {
11908         auto v = ((1U << 1) - 1) & (word0 >> 13);
11909         return v;
11910     }
11911     CONSTEXPR dma_status1_r& set_axi_sram2_w_stalled(uint32_t value)
11912     {
11913         word0 = (~(((1U << 1) - 1)<<13) & word0) | ((((1U << 1) - 1) & value) << 13);
11914         return *this;
11915     }
11916     CONSTEXPR uint32_t get_axi_sram2_wr_limit_stall() const
11917     {
11918         auto v = ((1U << 1) - 1) & (word0 >> 14);
11919         return v;
11920     }
11921     CONSTEXPR dma_status1_r& set_axi_sram2_wr_limit_stall(uint32_t value)
11922     {
11923         word0 = (~(((1U << 1) - 1)<<14) & word0) | ((((1U << 1) - 1) & value) << 14);
11924         return *this;
11925     }
11926     CONSTEXPR uint32_t get_axi_sram3_ar_stalled() const
11927     {
11928         auto v = ((1U << 1) - 1) & (word0 >> 15);
11929         return v;
11930     }
11931     CONSTEXPR dma_status1_r& set_axi_sram3_ar_stalled(uint32_t value)
11932     {
11933         word0 = (~(((1U << 1) - 1)<<15) & word0) | ((((1U << 1) - 1) & value) << 15);
11934         return *this;
11935     }
11936     CONSTEXPR uint32_t get_axi_sram3_rd_limit_stall() const
11937     {
11938         auto v = ((1U << 1) - 1) & (word0 >> 16);
11939         return v;
11940     }
11941     CONSTEXPR dma_status1_r& set_axi_sram3_rd_limit_stall(uint32_t value)
11942     {
11943         word0 = (~(((1U << 1) - 1)<<16) & word0) | ((((1U << 1) - 1) & value) << 16);
11944         return *this;
11945     }
11946     CONSTEXPR uint32_t get_axi_sram3_aw_stalled() const
11947     {
11948         auto v = ((1U << 1) - 1) & (word0 >> 17);
11949         return v;
11950     }
11951     CONSTEXPR dma_status1_r& set_axi_sram3_aw_stalled(uint32_t value)
11952     {
11953         word0 = (~(((1U << 1) - 1)<<17) & word0) | ((((1U << 1) - 1) & value) << 17);
11954         return *this;
11955     }
11956     CONSTEXPR uint32_t get_axi_sram3_w_stalled() const
11957     {
11958         auto v = ((1U << 1) - 1) & (word0 >> 18);
11959         return v;
11960     }
11961     CONSTEXPR dma_status1_r& set_axi_sram3_w_stalled(uint32_t value)
11962     {
11963         word0 = (~(((1U << 1) - 1)<<18) & word0) | ((((1U << 1) - 1) & value) << 18);
11964         return *this;
11965     }
11966     CONSTEXPR uint32_t get_axi_sram3_wr_limit_stall() const
11967     {
11968         auto v = ((1U << 1) - 1) & (word0 >> 19);
11969         return v;
11970     }
11971     CONSTEXPR dma_status1_r& set_axi_sram3_wr_limit_stall(uint32_t value)
11972     {
11973         word0 = (~(((1U << 1) - 1)<<19) & word0) | ((((1U << 1) - 1) & value) << 19);
11974         return *this;
11975     }
11976     CONSTEXPR uint32_t get_axi_ext0_ar_stalled() const
11977     {
11978         auto v = ((1U << 1) - 1) & (word0 >> 20);
11979         return v;
11980     }
11981     CONSTEXPR dma_status1_r& set_axi_ext0_ar_stalled(uint32_t value)
11982     {
11983         word0 = (~(((1U << 1) - 1)<<20) & word0) | ((((1U << 1) - 1) & value) << 20);
11984         return *this;
11985     }
11986     CONSTEXPR uint32_t get_axi_ext0_rd_limit_stall() const
11987     {
11988         auto v = ((1U << 1) - 1) & (word0 >> 21);
11989         return v;
11990     }
11991     CONSTEXPR dma_status1_r& set_axi_ext0_rd_limit_stall(uint32_t value)
11992     {
11993         word0 = (~(((1U << 1) - 1)<<21) & word0) | ((((1U << 1) - 1) & value) << 21);
11994         return *this;
11995     }
11996     CONSTEXPR uint32_t get_axi_ext0_aw_stalled() const
11997     {
11998         auto v = ((1U << 1) - 1) & (word0 >> 22);
11999         return v;
12000     }
12001     CONSTEXPR dma_status1_r& set_axi_ext0_aw_stalled(uint32_t value)
12002     {
12003         word0 = (~(((1U << 1) - 1)<<22) & word0) | ((((1U << 1) - 1) & value) << 22);
12004         return *this;
12005     }
12006     CONSTEXPR uint32_t get_axi_ext0_w_stalled() const
12007     {
12008         auto v = ((1U << 1) - 1) & (word0 >> 23);
12009         return v;
12010     }
12011     CONSTEXPR dma_status1_r& set_axi_ext0_w_stalled(uint32_t value)
12012     {
12013         word0 = (~(((1U << 1) - 1)<<23) & word0) | ((((1U << 1) - 1) & value) << 23);
12014         return *this;
12015     }
12016     CONSTEXPR uint32_t get_axi_ext0_wr_limit_stall() const
12017     {
12018         auto v = ((1U << 1) - 1) & (word0 >> 24);
12019         return v;
12020     }
12021     CONSTEXPR dma_status1_r& set_axi_ext0_wr_limit_stall(uint32_t value)
12022     {
12023         word0 = (~(((1U << 1) - 1)<<24) & word0) | ((((1U << 1) - 1) & value) << 24);
12024         return *this;
12025     }
12026     CONSTEXPR uint32_t get_axi_ext1_ar_stalled() const
12027     {
12028         auto v = ((1U << 1) - 1) & (word0 >> 25);
12029         return v;
12030     }
12031     CONSTEXPR dma_status1_r& set_axi_ext1_ar_stalled(uint32_t value)
12032     {
12033         word0 = (~(((1U << 1) - 1)<<25) & word0) | ((((1U << 1) - 1) & value) << 25);
12034         return *this;
12035     }
12036     CONSTEXPR uint32_t get_axi_ext1_rd_limit_stall() const
12037     {
12038         auto v = ((1U << 1) - 1) & (word0 >> 26);
12039         return v;
12040     }
12041     CONSTEXPR dma_status1_r& set_axi_ext1_rd_limit_stall(uint32_t value)
12042     {
12043         word0 = (~(((1U << 1) - 1)<<26) & word0) | ((((1U << 1) - 1) & value) << 26);
12044         return *this;
12045     }
12046     CONSTEXPR uint32_t get_axi_ext1_aw_stalled() const
12047     {
12048         auto v = ((1U << 1) - 1) & (word0 >> 27);
12049         return v;
12050     }
12051     CONSTEXPR dma_status1_r& set_axi_ext1_aw_stalled(uint32_t value)
12052     {
12053         word0 = (~(((1U << 1) - 1)<<27) & word0) | ((((1U << 1) - 1) & value) << 27);
12054         return *this;
12055     }
12056     CONSTEXPR uint32_t get_axi_ext1_w_stalled() const
12057     {
12058         auto v = ((1U << 1) - 1) & (word0 >> 28);
12059         return v;
12060     }
12061     CONSTEXPR dma_status1_r& set_axi_ext1_w_stalled(uint32_t value)
12062     {
12063         word0 = (~(((1U << 1) - 1)<<28) & word0) | ((((1U << 1) - 1) & value) << 28);
12064         return *this;
12065     }
12066     CONSTEXPR uint32_t get_axi_ext1_wr_limit_stall() const
12067     {
12068         auto v = ((1U << 1) - 1) & (word0 >> 29);
12069         return v;
12070     }
12071     CONSTEXPR dma_status1_r& set_axi_ext1_wr_limit_stall(uint32_t value)
12072     {
12073         word0 = (~(((1U << 1) - 1)<<29) & word0) | ((((1U << 1) - 1) & value) << 29);
12074         return *this;
12075     }
12076 #endif
12077 };
12078 
12079 // pmcr_r - PMU register control
12080 struct pmcr_r
12081 {
12082 #ifndef __cplusplus
12083     union
12084     {
12085         struct
12086         {
12087             uint32_t cnt_en : 1; // Enable counter
12088             uint32_t event_cnt_rst : 1; // Reset event counter
12089             uint32_t cycle_cnt_rst : 1; // Reset cycle counter
12090             uint32_t mask_en : 1; // PMU can be enabled/disabled by command stream operation NPU_OP_PMU_MASK
12091             uint32_t reserved0 : 7;
12092             uint32_t num_event_cnt : 5; // Number of event counters
12093             uint32_t reserved1 : 16;
12094         };
12095         uint32_t word;
12096     };
12097 #else
12098 private:
12099     uint32_t word0;
12100 public:
12101     CONSTEXPR pmcr_r() :
12102         word0(16384)
12103     {}
12104     CONSTEXPR pmcr_r(uint32_t init) :
12105         word0(init)
12106     {}
12107     CONSTEXPR void operator=(uint32_t value)
12108     {
12109         word0 = value;
12110     }
12111     CONSTEXPR operator uint32_t()
12112     {
12113         return word0;
12114     }
12115     pmcr_r copy()
12116     {
12117         return *this;
12118     }
12119     CONSTEXPR uint32_t get_cnt_en() const
12120     {
12121         auto v = ((1U << 1) - 1) & (word0 >> 0);
12122         return v;
12123     }
12124     CONSTEXPR pmcr_r& set_cnt_en(uint32_t value)
12125     {
12126         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
12127         return *this;
12128     }
12129     CONSTEXPR uint32_t get_event_cnt_rst() const
12130     {
12131         auto v = ((1U << 1) - 1) & (word0 >> 1);
12132         return v;
12133     }
12134     CONSTEXPR pmcr_r& set_event_cnt_rst(uint32_t value)
12135     {
12136         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
12137         return *this;
12138     }
12139     CONSTEXPR uint32_t get_cycle_cnt_rst() const
12140     {
12141         auto v = ((1U << 1) - 1) & (word0 >> 2);
12142         return v;
12143     }
12144     CONSTEXPR pmcr_r& set_cycle_cnt_rst(uint32_t value)
12145     {
12146         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
12147         return *this;
12148     }
12149     CONSTEXPR uint32_t get_mask_en() const
12150     {
12151         auto v = ((1U << 1) - 1) & (word0 >> 3);
12152         return v;
12153     }
12154     CONSTEXPR pmcr_r& set_mask_en(uint32_t value)
12155     {
12156         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
12157         return *this;
12158     }
12159     CONSTEXPR uint32_t get_num_event_cnt() const
12160     {
12161         auto v = ((1U << 5) - 1) & (word0 >> 11);
12162         return v;
12163     }
12164     CONSTEXPR pmcr_r& set_num_event_cnt(uint32_t value)
12165     {
12166         word0 = (~(((1U << 5) - 1)<<11) & word0) | ((((1U << 5) - 1) & value) << 11);
12167         return *this;
12168     }
12169 #endif
12170 };
12171 
12172 // pmcntenset_r - Count enable set register
12173 struct pmcntenset_r
12174 {
12175 #ifndef __cplusplus
12176     union
12177     {
12178         struct
12179         {
12180             uint32_t EVENT_CNT_0 : 1; // Event counter enable bit for PMEVCNTR0
12181             uint32_t EVENT_CNT_1 : 1; // Event counter enable bit for PMEVCNTR1
12182             uint32_t EVENT_CNT_2 : 1; // Event counter enable bit for PMEVCNTR2
12183             uint32_t EVENT_CNT_3 : 1; // Event counter enable bit for PMEVCNTR3
12184             uint32_t EVENT_CNT_4 : 1; // Event counter enable bit for PMEVCNTR4
12185             uint32_t EVENT_CNT_5 : 1; // Event counter enable bit for PMEVCNTR5
12186             uint32_t EVENT_CNT_6 : 1; // Event counter enable bit for PMEVCNTR6
12187             uint32_t EVENT_CNT_7 : 1; // Event counter enable bit for PMEVCNTR7
12188             uint32_t reserved0 : 23;
12189             uint32_t CYCLE_CNT : 1; // PMCCNTR enable bit
12190         };
12191         uint32_t word;
12192     };
12193 #else
12194 private:
12195     uint32_t word0;
12196 public:
12197     CONSTEXPR pmcntenset_r() :
12198         word0(0)
12199     {}
12200     CONSTEXPR pmcntenset_r(uint32_t init) :
12201         word0(init)
12202     {}
12203     CONSTEXPR void operator=(uint32_t value)
12204     {
12205         word0 = value;
12206     }
12207     CONSTEXPR operator uint32_t()
12208     {
12209         return word0;
12210     }
12211     pmcntenset_r copy()
12212     {
12213         return *this;
12214     }
12215     CONSTEXPR uint32_t get_EVENT_CNT_0() const
12216     {
12217         auto v = ((1U << 1) - 1) & (word0 >> 0);
12218         return v;
12219     }
12220     CONSTEXPR pmcntenset_r& set_EVENT_CNT_0(uint32_t value)
12221     {
12222         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
12223         return *this;
12224     }
12225     CONSTEXPR uint32_t get_EVENT_CNT_1() const
12226     {
12227         auto v = ((1U << 1) - 1) & (word0 >> 1);
12228         return v;
12229     }
12230     CONSTEXPR pmcntenset_r& set_EVENT_CNT_1(uint32_t value)
12231     {
12232         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
12233         return *this;
12234     }
12235     CONSTEXPR uint32_t get_EVENT_CNT_2() const
12236     {
12237         auto v = ((1U << 1) - 1) & (word0 >> 2);
12238         return v;
12239     }
12240     CONSTEXPR pmcntenset_r& set_EVENT_CNT_2(uint32_t value)
12241     {
12242         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
12243         return *this;
12244     }
12245     CONSTEXPR uint32_t get_EVENT_CNT_3() const
12246     {
12247         auto v = ((1U << 1) - 1) & (word0 >> 3);
12248         return v;
12249     }
12250     CONSTEXPR pmcntenset_r& set_EVENT_CNT_3(uint32_t value)
12251     {
12252         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
12253         return *this;
12254     }
12255     CONSTEXPR uint32_t get_EVENT_CNT_4() const
12256     {
12257         auto v = ((1U << 1) - 1) & (word0 >> 4);
12258         return v;
12259     }
12260     CONSTEXPR pmcntenset_r& set_EVENT_CNT_4(uint32_t value)
12261     {
12262         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
12263         return *this;
12264     }
12265     CONSTEXPR uint32_t get_EVENT_CNT_5() const
12266     {
12267         auto v = ((1U << 1) - 1) & (word0 >> 5);
12268         return v;
12269     }
12270     CONSTEXPR pmcntenset_r& set_EVENT_CNT_5(uint32_t value)
12271     {
12272         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
12273         return *this;
12274     }
12275     CONSTEXPR uint32_t get_EVENT_CNT_6() const
12276     {
12277         auto v = ((1U << 1) - 1) & (word0 >> 6);
12278         return v;
12279     }
12280     CONSTEXPR pmcntenset_r& set_EVENT_CNT_6(uint32_t value)
12281     {
12282         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
12283         return *this;
12284     }
12285     CONSTEXPR uint32_t get_EVENT_CNT_7() const
12286     {
12287         auto v = ((1U << 1) - 1) & (word0 >> 7);
12288         return v;
12289     }
12290     CONSTEXPR pmcntenset_r& set_EVENT_CNT_7(uint32_t value)
12291     {
12292         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
12293         return *this;
12294     }
12295     CONSTEXPR uint32_t get_CYCLE_CNT() const
12296     {
12297         auto v = ((1U << 1) - 1) & (word0 >> 31);
12298         return v;
12299     }
12300     CONSTEXPR pmcntenset_r& set_CYCLE_CNT(uint32_t value)
12301     {
12302         word0 = (~(((1U << 1) - 1)<<31) & word0) | ((((1U << 1) - 1) & value) << 31);
12303         return *this;
12304     }
12305 #endif
12306 };
12307 
12308 // pmcntenclr_r - Count enable clear register
12309 struct pmcntenclr_r
12310 {
12311 #ifndef __cplusplus
12312     union
12313     {
12314         struct
12315         {
12316             uint32_t EVENT_CNT_0 : 1; // Event counter disable bit for PMEVCNTR0
12317             uint32_t EVENT_CNT_1 : 1; // Event counter disable bit for PMEVCNTR1
12318             uint32_t EVENT_CNT_2 : 1; // Event counter disable bit for PMEVCNTR2
12319             uint32_t EVENT_CNT_3 : 1; // Event counter disable bit for PMEVCNTR3
12320             uint32_t EVENT_CNT_4 : 1; // Event counter disable bit for PMEVCNTR4
12321             uint32_t EVENT_CNT_5 : 1; // Event counter disable bit for PMEVCNTR5
12322             uint32_t EVENT_CNT_6 : 1; // Event counter disable bit for PMEVCNTR6
12323             uint32_t EVENT_CNT_7 : 1; // Event counter disable bit for PMEVCNTR7
12324             uint32_t reserved0 : 23;
12325             uint32_t CYCLE_CNT : 1; // PMCCNTR disable bit
12326         };
12327         uint32_t word;
12328     };
12329 #else
12330 private:
12331     uint32_t word0;
12332 public:
12333     CONSTEXPR pmcntenclr_r() :
12334         word0(0)
12335     {}
12336     CONSTEXPR pmcntenclr_r(uint32_t init) :
12337         word0(init)
12338     {}
12339     CONSTEXPR void operator=(uint32_t value)
12340     {
12341         word0 = value;
12342     }
12343     CONSTEXPR operator uint32_t()
12344     {
12345         return word0;
12346     }
12347     pmcntenclr_r copy()
12348     {
12349         return *this;
12350     }
12351     CONSTEXPR uint32_t get_EVENT_CNT_0() const
12352     {
12353         auto v = ((1U << 1) - 1) & (word0 >> 0);
12354         return v;
12355     }
12356     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_0(uint32_t value)
12357     {
12358         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
12359         return *this;
12360     }
12361     CONSTEXPR uint32_t get_EVENT_CNT_1() const
12362     {
12363         auto v = ((1U << 1) - 1) & (word0 >> 1);
12364         return v;
12365     }
12366     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_1(uint32_t value)
12367     {
12368         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
12369         return *this;
12370     }
12371     CONSTEXPR uint32_t get_EVENT_CNT_2() const
12372     {
12373         auto v = ((1U << 1) - 1) & (word0 >> 2);
12374         return v;
12375     }
12376     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_2(uint32_t value)
12377     {
12378         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
12379         return *this;
12380     }
12381     CONSTEXPR uint32_t get_EVENT_CNT_3() const
12382     {
12383         auto v = ((1U << 1) - 1) & (word0 >> 3);
12384         return v;
12385     }
12386     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_3(uint32_t value)
12387     {
12388         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
12389         return *this;
12390     }
12391     CONSTEXPR uint32_t get_EVENT_CNT_4() const
12392     {
12393         auto v = ((1U << 1) - 1) & (word0 >> 4);
12394         return v;
12395     }
12396     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_4(uint32_t value)
12397     {
12398         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
12399         return *this;
12400     }
12401     CONSTEXPR uint32_t get_EVENT_CNT_5() const
12402     {
12403         auto v = ((1U << 1) - 1) & (word0 >> 5);
12404         return v;
12405     }
12406     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_5(uint32_t value)
12407     {
12408         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
12409         return *this;
12410     }
12411     CONSTEXPR uint32_t get_EVENT_CNT_6() const
12412     {
12413         auto v = ((1U << 1) - 1) & (word0 >> 6);
12414         return v;
12415     }
12416     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_6(uint32_t value)
12417     {
12418         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
12419         return *this;
12420     }
12421     CONSTEXPR uint32_t get_EVENT_CNT_7() const
12422     {
12423         auto v = ((1U << 1) - 1) & (word0 >> 7);
12424         return v;
12425     }
12426     CONSTEXPR pmcntenclr_r& set_EVENT_CNT_7(uint32_t value)
12427     {
12428         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
12429         return *this;
12430     }
12431     CONSTEXPR uint32_t get_CYCLE_CNT() const
12432     {
12433         auto v = ((1U << 1) - 1) & (word0 >> 31);
12434         return v;
12435     }
12436     CONSTEXPR pmcntenclr_r& set_CYCLE_CNT(uint32_t value)
12437     {
12438         word0 = (~(((1U << 1) - 1)<<31) & word0) | ((((1U << 1) - 1) & value) << 31);
12439         return *this;
12440     }
12441 #endif
12442 };
12443 
12444 // pmovsset_r - Overflow flag status set register
12445 struct pmovsset_r
12446 {
12447 #ifndef __cplusplus
12448     union
12449     {
12450         struct
12451         {
12452             uint32_t EVENT_CNT_0_OVF : 1; // Event counter overflow set bit for PMEVCNTR0
12453             uint32_t EVENT_CNT_1_OVF : 1; // Event counter overflow set bit for PMEVCNTR1
12454             uint32_t EVENT_CNT_2_OVF : 1; // Event counter overflow set bit for PMEVCNTR2
12455             uint32_t EVENT_CNT_3_OVF : 1; // Event counter overflow set bit for PMEVCNTR3
12456             uint32_t EVENT_CNT_4_OVF : 1; // Event counter overflow set bit for PMEVCNTR4
12457             uint32_t EVENT_CNT_5_OVF : 1; // Event counter overflow set bit for PMEVCNTR5
12458             uint32_t EVENT_CNT_6_OVF : 1; // Event counter overflow set bit for PMEVCNTR6
12459             uint32_t EVENT_CNT_7_OVF : 1; // Event counter overflow set bit for PMEVCNTR7
12460             uint32_t reserved0 : 23;
12461             uint32_t CYCLE_CNT_OVF : 1; // PMCCNTR overflow set bit
12462         };
12463         uint32_t word;
12464     };
12465 #else
12466 private:
12467     uint32_t word0;
12468 public:
12469     CONSTEXPR pmovsset_r() :
12470         word0(0)
12471     {}
12472     CONSTEXPR pmovsset_r(uint32_t init) :
12473         word0(init)
12474     {}
12475     CONSTEXPR void operator=(uint32_t value)
12476     {
12477         word0 = value;
12478     }
12479     CONSTEXPR operator uint32_t()
12480     {
12481         return word0;
12482     }
12483     pmovsset_r copy()
12484     {
12485         return *this;
12486     }
12487     CONSTEXPR uint32_t get_EVENT_CNT_0_OVF() const
12488     {
12489         auto v = ((1U << 1) - 1) & (word0 >> 0);
12490         return v;
12491     }
12492     CONSTEXPR pmovsset_r& set_EVENT_CNT_0_OVF(uint32_t value)
12493     {
12494         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
12495         return *this;
12496     }
12497     CONSTEXPR uint32_t get_EVENT_CNT_1_OVF() const
12498     {
12499         auto v = ((1U << 1) - 1) & (word0 >> 1);
12500         return v;
12501     }
12502     CONSTEXPR pmovsset_r& set_EVENT_CNT_1_OVF(uint32_t value)
12503     {
12504         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
12505         return *this;
12506     }
12507     CONSTEXPR uint32_t get_EVENT_CNT_2_OVF() const
12508     {
12509         auto v = ((1U << 1) - 1) & (word0 >> 2);
12510         return v;
12511     }
12512     CONSTEXPR pmovsset_r& set_EVENT_CNT_2_OVF(uint32_t value)
12513     {
12514         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
12515         return *this;
12516     }
12517     CONSTEXPR uint32_t get_EVENT_CNT_3_OVF() const
12518     {
12519         auto v = ((1U << 1) - 1) & (word0 >> 3);
12520         return v;
12521     }
12522     CONSTEXPR pmovsset_r& set_EVENT_CNT_3_OVF(uint32_t value)
12523     {
12524         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
12525         return *this;
12526     }
12527     CONSTEXPR uint32_t get_EVENT_CNT_4_OVF() const
12528     {
12529         auto v = ((1U << 1) - 1) & (word0 >> 4);
12530         return v;
12531     }
12532     CONSTEXPR pmovsset_r& set_EVENT_CNT_4_OVF(uint32_t value)
12533     {
12534         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
12535         return *this;
12536     }
12537     CONSTEXPR uint32_t get_EVENT_CNT_5_OVF() const
12538     {
12539         auto v = ((1U << 1) - 1) & (word0 >> 5);
12540         return v;
12541     }
12542     CONSTEXPR pmovsset_r& set_EVENT_CNT_5_OVF(uint32_t value)
12543     {
12544         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
12545         return *this;
12546     }
12547     CONSTEXPR uint32_t get_EVENT_CNT_6_OVF() const
12548     {
12549         auto v = ((1U << 1) - 1) & (word0 >> 6);
12550         return v;
12551     }
12552     CONSTEXPR pmovsset_r& set_EVENT_CNT_6_OVF(uint32_t value)
12553     {
12554         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
12555         return *this;
12556     }
12557     CONSTEXPR uint32_t get_EVENT_CNT_7_OVF() const
12558     {
12559         auto v = ((1U << 1) - 1) & (word0 >> 7);
12560         return v;
12561     }
12562     CONSTEXPR pmovsset_r& set_EVENT_CNT_7_OVF(uint32_t value)
12563     {
12564         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
12565         return *this;
12566     }
12567     CONSTEXPR uint32_t get_CYCLE_CNT_OVF() const
12568     {
12569         auto v = ((1U << 1) - 1) & (word0 >> 31);
12570         return v;
12571     }
12572     CONSTEXPR pmovsset_r& set_CYCLE_CNT_OVF(uint32_t value)
12573     {
12574         word0 = (~(((1U << 1) - 1)<<31) & word0) | ((((1U << 1) - 1) & value) << 31);
12575         return *this;
12576     }
12577 #endif
12578 };
12579 
12580 // pmovsclr_r - Overflow flag status clear register
12581 struct pmovsclr_r
12582 {
12583 #ifndef __cplusplus
12584     union
12585     {
12586         struct
12587         {
12588             uint32_t EVENT_CNT_0_OVF : 1; // Event counter overflow clear bit for PMEVCNTR0
12589             uint32_t EVENT_CNT_1_OVF : 1; // Event counter overflow clear bit for PMEVCNTR1
12590             uint32_t EVENT_CNT_2_OVF : 1; // Event counter overflow clear bit for PMEVCNTR2
12591             uint32_t EVENT_CNT_3_OVF : 1; // Event counter overflow clear bit for PMEVCNTR3
12592             uint32_t EVENT_CNT_4_OVF : 1; // Event counter overflow clear bit for PMEVCNTR4
12593             uint32_t EVENT_CNT_5_OVF : 1; // Event counter overflow clear bit for PMEVCNTR5
12594             uint32_t EVENT_CNT_6_OVF : 1; // Event counter overflow clear bit for PMEVCNTR6
12595             uint32_t EVENT_CNT_7_OVF : 1; // Event counter overflow clear bit for PMEVCNTR7
12596             uint32_t reserved0 : 23;
12597             uint32_t CYCLE_CNT_OVF : 1; // PMCCNTR overflow clear bit
12598         };
12599         uint32_t word;
12600     };
12601 #else
12602 private:
12603     uint32_t word0;
12604 public:
12605     CONSTEXPR pmovsclr_r() :
12606         word0(0)
12607     {}
12608     CONSTEXPR pmovsclr_r(uint32_t init) :
12609         word0(init)
12610     {}
12611     CONSTEXPR void operator=(uint32_t value)
12612     {
12613         word0 = value;
12614     }
12615     CONSTEXPR operator uint32_t()
12616     {
12617         return word0;
12618     }
12619     pmovsclr_r copy()
12620     {
12621         return *this;
12622     }
12623     CONSTEXPR uint32_t get_EVENT_CNT_0_OVF() const
12624     {
12625         auto v = ((1U << 1) - 1) & (word0 >> 0);
12626         return v;
12627     }
12628     CONSTEXPR pmovsclr_r& set_EVENT_CNT_0_OVF(uint32_t value)
12629     {
12630         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
12631         return *this;
12632     }
12633     CONSTEXPR uint32_t get_EVENT_CNT_1_OVF() const
12634     {
12635         auto v = ((1U << 1) - 1) & (word0 >> 1);
12636         return v;
12637     }
12638     CONSTEXPR pmovsclr_r& set_EVENT_CNT_1_OVF(uint32_t value)
12639     {
12640         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
12641         return *this;
12642     }
12643     CONSTEXPR uint32_t get_EVENT_CNT_2_OVF() const
12644     {
12645         auto v = ((1U << 1) - 1) & (word0 >> 2);
12646         return v;
12647     }
12648     CONSTEXPR pmovsclr_r& set_EVENT_CNT_2_OVF(uint32_t value)
12649     {
12650         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
12651         return *this;
12652     }
12653     CONSTEXPR uint32_t get_EVENT_CNT_3_OVF() const
12654     {
12655         auto v = ((1U << 1) - 1) & (word0 >> 3);
12656         return v;
12657     }
12658     CONSTEXPR pmovsclr_r& set_EVENT_CNT_3_OVF(uint32_t value)
12659     {
12660         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
12661         return *this;
12662     }
12663     CONSTEXPR uint32_t get_EVENT_CNT_4_OVF() const
12664     {
12665         auto v = ((1U << 1) - 1) & (word0 >> 4);
12666         return v;
12667     }
12668     CONSTEXPR pmovsclr_r& set_EVENT_CNT_4_OVF(uint32_t value)
12669     {
12670         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
12671         return *this;
12672     }
12673     CONSTEXPR uint32_t get_EVENT_CNT_5_OVF() const
12674     {
12675         auto v = ((1U << 1) - 1) & (word0 >> 5);
12676         return v;
12677     }
12678     CONSTEXPR pmovsclr_r& set_EVENT_CNT_5_OVF(uint32_t value)
12679     {
12680         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
12681         return *this;
12682     }
12683     CONSTEXPR uint32_t get_EVENT_CNT_6_OVF() const
12684     {
12685         auto v = ((1U << 1) - 1) & (word0 >> 6);
12686         return v;
12687     }
12688     CONSTEXPR pmovsclr_r& set_EVENT_CNT_6_OVF(uint32_t value)
12689     {
12690         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
12691         return *this;
12692     }
12693     CONSTEXPR uint32_t get_EVENT_CNT_7_OVF() const
12694     {
12695         auto v = ((1U << 1) - 1) & (word0 >> 7);
12696         return v;
12697     }
12698     CONSTEXPR pmovsclr_r& set_EVENT_CNT_7_OVF(uint32_t value)
12699     {
12700         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
12701         return *this;
12702     }
12703     CONSTEXPR uint32_t get_CYCLE_CNT_OVF() const
12704     {
12705         auto v = ((1U << 1) - 1) & (word0 >> 31);
12706         return v;
12707     }
12708     CONSTEXPR pmovsclr_r& set_CYCLE_CNT_OVF(uint32_t value)
12709     {
12710         word0 = (~(((1U << 1) - 1)<<31) & word0) | ((((1U << 1) - 1) & value) << 31);
12711         return *this;
12712     }
12713 #endif
12714 };
12715 
12716 // pmintset_r - Interrupt enable set register
12717 struct pmintset_r
12718 {
12719 #ifndef __cplusplus
12720     union
12721     {
12722         struct
12723         {
12724             uint32_t EVENT_CNT_0_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR0
12725             uint32_t EVENT_CNT_1_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR1
12726             uint32_t EVENT_CNT_2_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR2
12727             uint32_t EVENT_CNT_3_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR3
12728             uint32_t EVENT_CNT_4_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR4
12729             uint32_t EVENT_CNT_5_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR5
12730             uint32_t EVENT_CNT_6_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR6
12731             uint32_t EVENT_CNT_7_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR7
12732             uint32_t reserved0 : 23;
12733             uint32_t CYCLE_CNT_INT : 1; // PMCCNTR overflow interrupt request enable bit
12734         };
12735         uint32_t word;
12736     };
12737 #else
12738 private:
12739     uint32_t word0;
12740 public:
12741     CONSTEXPR pmintset_r() :
12742         word0(0)
12743     {}
12744     CONSTEXPR pmintset_r(uint32_t init) :
12745         word0(init)
12746     {}
12747     CONSTEXPR void operator=(uint32_t value)
12748     {
12749         word0 = value;
12750     }
12751     CONSTEXPR operator uint32_t()
12752     {
12753         return word0;
12754     }
12755     pmintset_r copy()
12756     {
12757         return *this;
12758     }
12759     CONSTEXPR uint32_t get_EVENT_CNT_0_INT() const
12760     {
12761         auto v = ((1U << 1) - 1) & (word0 >> 0);
12762         return v;
12763     }
12764     CONSTEXPR pmintset_r& set_EVENT_CNT_0_INT(uint32_t value)
12765     {
12766         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
12767         return *this;
12768     }
12769     CONSTEXPR uint32_t get_EVENT_CNT_1_INT() const
12770     {
12771         auto v = ((1U << 1) - 1) & (word0 >> 1);
12772         return v;
12773     }
12774     CONSTEXPR pmintset_r& set_EVENT_CNT_1_INT(uint32_t value)
12775     {
12776         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
12777         return *this;
12778     }
12779     CONSTEXPR uint32_t get_EVENT_CNT_2_INT() const
12780     {
12781         auto v = ((1U << 1) - 1) & (word0 >> 2);
12782         return v;
12783     }
12784     CONSTEXPR pmintset_r& set_EVENT_CNT_2_INT(uint32_t value)
12785     {
12786         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
12787         return *this;
12788     }
12789     CONSTEXPR uint32_t get_EVENT_CNT_3_INT() const
12790     {
12791         auto v = ((1U << 1) - 1) & (word0 >> 3);
12792         return v;
12793     }
12794     CONSTEXPR pmintset_r& set_EVENT_CNT_3_INT(uint32_t value)
12795     {
12796         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
12797         return *this;
12798     }
12799     CONSTEXPR uint32_t get_EVENT_CNT_4_INT() const
12800     {
12801         auto v = ((1U << 1) - 1) & (word0 >> 4);
12802         return v;
12803     }
12804     CONSTEXPR pmintset_r& set_EVENT_CNT_4_INT(uint32_t value)
12805     {
12806         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
12807         return *this;
12808     }
12809     CONSTEXPR uint32_t get_EVENT_CNT_5_INT() const
12810     {
12811         auto v = ((1U << 1) - 1) & (word0 >> 5);
12812         return v;
12813     }
12814     CONSTEXPR pmintset_r& set_EVENT_CNT_5_INT(uint32_t value)
12815     {
12816         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
12817         return *this;
12818     }
12819     CONSTEXPR uint32_t get_EVENT_CNT_6_INT() const
12820     {
12821         auto v = ((1U << 1) - 1) & (word0 >> 6);
12822         return v;
12823     }
12824     CONSTEXPR pmintset_r& set_EVENT_CNT_6_INT(uint32_t value)
12825     {
12826         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
12827         return *this;
12828     }
12829     CONSTEXPR uint32_t get_EVENT_CNT_7_INT() const
12830     {
12831         auto v = ((1U << 1) - 1) & (word0 >> 7);
12832         return v;
12833     }
12834     CONSTEXPR pmintset_r& set_EVENT_CNT_7_INT(uint32_t value)
12835     {
12836         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
12837         return *this;
12838     }
12839     CONSTEXPR uint32_t get_CYCLE_CNT_INT() const
12840     {
12841         auto v = ((1U << 1) - 1) & (word0 >> 31);
12842         return v;
12843     }
12844     CONSTEXPR pmintset_r& set_CYCLE_CNT_INT(uint32_t value)
12845     {
12846         word0 = (~(((1U << 1) - 1)<<31) & word0) | ((((1U << 1) - 1) & value) << 31);
12847         return *this;
12848     }
12849 #endif
12850 };
12851 
12852 // pmintclr_r - Interrupt enable clear register
12853 struct pmintclr_r
12854 {
12855 #ifndef __cplusplus
12856     union
12857     {
12858         struct
12859         {
12860             uint32_t EVENT_CNT_0_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR0
12861             uint32_t EVENT_CNT_1_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR1
12862             uint32_t EVENT_CNT_2_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR2
12863             uint32_t EVENT_CNT_3_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR3
12864             uint32_t EVENT_CNT_4_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR4
12865             uint32_t EVENT_CNT_5_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR5
12866             uint32_t EVENT_CNT_6_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR6
12867             uint32_t EVENT_CNT_7_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR7
12868             uint32_t reserved0 : 23;
12869             uint32_t CYCLE_CNT_INT : 1; // PMCCNTR overflow interrupt request disable bit
12870         };
12871         uint32_t word;
12872     };
12873 #else
12874 private:
12875     uint32_t word0;
12876 public:
12877     CONSTEXPR pmintclr_r() :
12878         word0(0)
12879     {}
12880     CONSTEXPR pmintclr_r(uint32_t init) :
12881         word0(init)
12882     {}
12883     CONSTEXPR void operator=(uint32_t value)
12884     {
12885         word0 = value;
12886     }
12887     CONSTEXPR operator uint32_t()
12888     {
12889         return word0;
12890     }
12891     pmintclr_r copy()
12892     {
12893         return *this;
12894     }
12895     CONSTEXPR uint32_t get_EVENT_CNT_0_INT() const
12896     {
12897         auto v = ((1U << 1) - 1) & (word0 >> 0);
12898         return v;
12899     }
12900     CONSTEXPR pmintclr_r& set_EVENT_CNT_0_INT(uint32_t value)
12901     {
12902         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
12903         return *this;
12904     }
12905     CONSTEXPR uint32_t get_EVENT_CNT_1_INT() const
12906     {
12907         auto v = ((1U << 1) - 1) & (word0 >> 1);
12908         return v;
12909     }
12910     CONSTEXPR pmintclr_r& set_EVENT_CNT_1_INT(uint32_t value)
12911     {
12912         word0 = (~(((1U << 1) - 1)<<1) & word0) | ((((1U << 1) - 1) & value) << 1);
12913         return *this;
12914     }
12915     CONSTEXPR uint32_t get_EVENT_CNT_2_INT() const
12916     {
12917         auto v = ((1U << 1) - 1) & (word0 >> 2);
12918         return v;
12919     }
12920     CONSTEXPR pmintclr_r& set_EVENT_CNT_2_INT(uint32_t value)
12921     {
12922         word0 = (~(((1U << 1) - 1)<<2) & word0) | ((((1U << 1) - 1) & value) << 2);
12923         return *this;
12924     }
12925     CONSTEXPR uint32_t get_EVENT_CNT_3_INT() const
12926     {
12927         auto v = ((1U << 1) - 1) & (word0 >> 3);
12928         return v;
12929     }
12930     CONSTEXPR pmintclr_r& set_EVENT_CNT_3_INT(uint32_t value)
12931     {
12932         word0 = (~(((1U << 1) - 1)<<3) & word0) | ((((1U << 1) - 1) & value) << 3);
12933         return *this;
12934     }
12935     CONSTEXPR uint32_t get_EVENT_CNT_4_INT() const
12936     {
12937         auto v = ((1U << 1) - 1) & (word0 >> 4);
12938         return v;
12939     }
12940     CONSTEXPR pmintclr_r& set_EVENT_CNT_4_INT(uint32_t value)
12941     {
12942         word0 = (~(((1U << 1) - 1)<<4) & word0) | ((((1U << 1) - 1) & value) << 4);
12943         return *this;
12944     }
12945     CONSTEXPR uint32_t get_EVENT_CNT_5_INT() const
12946     {
12947         auto v = ((1U << 1) - 1) & (word0 >> 5);
12948         return v;
12949     }
12950     CONSTEXPR pmintclr_r& set_EVENT_CNT_5_INT(uint32_t value)
12951     {
12952         word0 = (~(((1U << 1) - 1)<<5) & word0) | ((((1U << 1) - 1) & value) << 5);
12953         return *this;
12954     }
12955     CONSTEXPR uint32_t get_EVENT_CNT_6_INT() const
12956     {
12957         auto v = ((1U << 1) - 1) & (word0 >> 6);
12958         return v;
12959     }
12960     CONSTEXPR pmintclr_r& set_EVENT_CNT_6_INT(uint32_t value)
12961     {
12962         word0 = (~(((1U << 1) - 1)<<6) & word0) | ((((1U << 1) - 1) & value) << 6);
12963         return *this;
12964     }
12965     CONSTEXPR uint32_t get_EVENT_CNT_7_INT() const
12966     {
12967         auto v = ((1U << 1) - 1) & (word0 >> 7);
12968         return v;
12969     }
12970     CONSTEXPR pmintclr_r& set_EVENT_CNT_7_INT(uint32_t value)
12971     {
12972         word0 = (~(((1U << 1) - 1)<<7) & word0) | ((((1U << 1) - 1) & value) << 7);
12973         return *this;
12974     }
12975     CONSTEXPR uint32_t get_CYCLE_CNT_INT() const
12976     {
12977         auto v = ((1U << 1) - 1) & (word0 >> 31);
12978         return v;
12979     }
12980     CONSTEXPR pmintclr_r& set_CYCLE_CNT_INT(uint32_t value)
12981     {
12982         word0 = (~(((1U << 1) - 1)<<31) & word0) | ((((1U << 1) - 1) & value) << 31);
12983         return *this;
12984     }
12985 #endif
12986 };
12987 
12988 // pmccntr_r - Performance monitor cycle count register
12989 struct pmccntr_r
12990 {
12991 #ifndef __cplusplus
12992     union
12993     {
12994         struct
12995         {
12996             uint32_t CYCLE_CNT_LO : 32; // Cycle count - LSB
12997             uint32_t CYCLE_CNT_HI : 16; // Cycle count - MSB
12998             uint32_t reserved0 : 16;
12999         };
13000         uint32_t word[2];
13001     };
13002 #else
13003 private:
13004     uint32_t word0;
13005     uint32_t word1;
13006 public:
13007     CONSTEXPR pmccntr_r() :
13008         word0(0),
13009         word1(0)
13010     {}
13011     CONSTEXPR pmccntr_r(uint64_t init) :
13012         word0(static_cast<uint32_t>((init) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()))),
13013         word1(static_cast<uint32_t>((init >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
13014     {}
13015     CONSTEXPR void operator=(uint64_t value)
13016     {
13017         word0 = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); word1 = static_cast<uint32_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()));
13018     }
13019     CONSTEXPR operator uint64_t()
13020     {
13021         return (static_cast<uint64_t>(word1) << 32) | word0;
13022     }
13023     pmccntr_r copy()
13024     {
13025         return *this;
13026     }
13027 #endif
13028 };
13029 
13030 // pmccntr_cfg_r - Set start/stop event on the cycle counter
13031 struct pmccntr_cfg_r
13032 {
13033 #ifndef __cplusplus
13034     union
13035     {
13036         struct
13037         {
13038             uint32_t CYCLE_CNT_CFG_START : 10; // Cycle counter start event
13039             uint32_t reserved0 : 2;
13040             uint32_t S0 : 1; // Start disabled for AXI port 0
13041             uint32_t S1 : 1; // Start disabled for AXI port 1
13042             uint32_t S2 : 1; // Start disabled for AXI port 2
13043             uint32_t S3 : 1; // Start disabled for AXI port 3
13044             uint32_t CYCLE_CNT_CFG_STOP : 10; // Cycle counter stop event
13045             uint32_t reserved1 : 2;
13046             uint32_t E0 : 1; // End disabled for AXI port 0
13047             uint32_t E1 : 1; // End disabled for AXI port 1
13048             uint32_t E2 : 1; // End disabled for AXI port 2
13049             uint32_t E3 : 1; // End disabled for AXI port 3
13050         };
13051         uint32_t word;
13052     };
13053 #else
13054 private:
13055     uint32_t word0;
13056 public:
13057     CONSTEXPR pmccntr_cfg_r() :
13058         word0(0)
13059     {}
13060     CONSTEXPR pmccntr_cfg_r(uint32_t init) :
13061         word0(init)
13062     {}
13063     CONSTEXPR void operator=(uint32_t value)
13064     {
13065         word0 = value;
13066     }
13067     CONSTEXPR operator uint32_t()
13068     {
13069         return word0;
13070     }
13071     pmccntr_cfg_r copy()
13072     {
13073         return *this;
13074     }
13075     CONSTEXPR NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_START() const
13076     {
13077         auto v = ((1U << 10) - 1) & (word0 >> 0);
13078         assert(v <= 671);
13079         return static_cast<NPU_NAMESPACE::pmu_event>(v);
13080     }
13081     CONSTEXPR pmccntr_cfg_r& set_CYCLE_CNT_CFG_START(NPU_NAMESPACE::pmu_event value)
13082     {
13083         word0 = (~(((1U << 10) - 1)<<0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
13084         return *this;
13085     }
13086     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_S0() const
13087     {
13088         auto v = ((1U << 1) - 1) & (word0 >> 12);
13089         assert(v <= 1);
13090         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13091     }
13092     CONSTEXPR pmccntr_cfg_r& set_S0(NPU_NAMESPACE::pmu_port_disable value)
13093     {
13094         word0 = (~(((1U << 1) - 1)<<12) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 12);
13095         return *this;
13096     }
13097     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_S1() const
13098     {
13099         auto v = ((1U << 1) - 1) & (word0 >> 13);
13100         assert(v <= 1);
13101         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13102     }
13103     CONSTEXPR pmccntr_cfg_r& set_S1(NPU_NAMESPACE::pmu_port_disable value)
13104     {
13105         word0 = (~(((1U << 1) - 1)<<13) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 13);
13106         return *this;
13107     }
13108     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_S2() const
13109     {
13110         auto v = ((1U << 1) - 1) & (word0 >> 14);
13111         assert(v <= 1);
13112         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13113     }
13114     CONSTEXPR pmccntr_cfg_r& set_S2(NPU_NAMESPACE::pmu_port_disable value)
13115     {
13116         word0 = (~(((1U << 1) - 1)<<14) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 14);
13117         return *this;
13118     }
13119     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_S3() const
13120     {
13121         auto v = ((1U << 1) - 1) & (word0 >> 15);
13122         assert(v <= 1);
13123         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13124     }
13125     CONSTEXPR pmccntr_cfg_r& set_S3(NPU_NAMESPACE::pmu_port_disable value)
13126     {
13127         word0 = (~(((1U << 1) - 1)<<15) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 15);
13128         return *this;
13129     }
13130     CONSTEXPR NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_STOP() const
13131     {
13132         auto v = ((1U << 10) - 1) & (word0 >> 16);
13133         assert(v <= 671);
13134         return static_cast<NPU_NAMESPACE::pmu_event>(v);
13135     }
13136     CONSTEXPR pmccntr_cfg_r& set_CYCLE_CNT_CFG_STOP(NPU_NAMESPACE::pmu_event value)
13137     {
13138         word0 = (~(((1U << 10) - 1)<<16) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 16);
13139         return *this;
13140     }
13141     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_E0() const
13142     {
13143         auto v = ((1U << 1) - 1) & (word0 >> 28);
13144         assert(v <= 1);
13145         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13146     }
13147     CONSTEXPR pmccntr_cfg_r& set_E0(NPU_NAMESPACE::pmu_port_disable value)
13148     {
13149         word0 = (~(((1U << 1) - 1)<<28) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 28);
13150         return *this;
13151     }
13152     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_E1() const
13153     {
13154         auto v = ((1U << 1) - 1) & (word0 >> 29);
13155         assert(v <= 1);
13156         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13157     }
13158     CONSTEXPR pmccntr_cfg_r& set_E1(NPU_NAMESPACE::pmu_port_disable value)
13159     {
13160         word0 = (~(((1U << 1) - 1)<<29) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 29);
13161         return *this;
13162     }
13163     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_E2() const
13164     {
13165         auto v = ((1U << 1) - 1) & (word0 >> 30);
13166         assert(v <= 1);
13167         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13168     }
13169     CONSTEXPR pmccntr_cfg_r& set_E2(NPU_NAMESPACE::pmu_port_disable value)
13170     {
13171         word0 = (~(((1U << 1) - 1)<<30) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 30);
13172         return *this;
13173     }
13174     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_E3() const
13175     {
13176         auto v = ((1U << 1) - 1) & (word0 >> 31);
13177         assert(v <= 1);
13178         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13179     }
13180     CONSTEXPR pmccntr_cfg_r& set_E3(NPU_NAMESPACE::pmu_port_disable value)
13181     {
13182         word0 = (~(((1U << 1) - 1)<<31) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 31);
13183         return *this;
13184     }
13185 #endif
13186 };
13187 
13188 // pmcaxi_chan_r - Set which AXI channel to monitor for latency measurements in PMU
13189 struct pmcaxi_chan_r
13190 {
13191 #ifndef __cplusplus
13192     union
13193     {
13194         struct
13195         {
13196             uint32_t CH_SEL : 4; // Channel select for latency measurements
13197             uint32_t reserved0 : 4;
13198             uint32_t AXI_SEL : 1; // AXI port select for latency measurements
13199             uint32_t reserved1 : 1;
13200             uint32_t BW_CH_SEL_EN : 1; // Bandwidth channel selector
13201             uint32_t reserved2 : 21;
13202         };
13203         uint32_t word;
13204     };
13205 #else
13206 private:
13207     uint32_t word0;
13208 public:
13209     CONSTEXPR pmcaxi_chan_r() :
13210         word0(0)
13211     {}
13212     CONSTEXPR pmcaxi_chan_r(uint32_t init) :
13213         word0(init)
13214     {}
13215     CONSTEXPR void operator=(uint32_t value)
13216     {
13217         word0 = value;
13218     }
13219     CONSTEXPR operator uint32_t()
13220     {
13221         return word0;
13222     }
13223     pmcaxi_chan_r copy()
13224     {
13225         return *this;
13226     }
13227     CONSTEXPR NPU_NAMESPACE::pmu_axi_channel get_CH_SEL() const
13228     {
13229         auto v = ((1U << 4) - 1) & (word0 >> 0);
13230         assert(v <= 9);
13231         return static_cast<NPU_NAMESPACE::pmu_axi_channel>(v);
13232     }
13233     CONSTEXPR pmcaxi_chan_r& set_CH_SEL(NPU_NAMESPACE::pmu_axi_channel value)
13234     {
13235         word0 = (~(((1U << 4) - 1)<<0) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 0);
13236         return *this;
13237     }
13238     CONSTEXPR NPU_NAMESPACE::axi_port get_AXI_SEL() const
13239     {
13240         auto v = ((1U << 1) - 1) & (word0 >> 8);
13241         assert(v <= 1);
13242         return static_cast<NPU_NAMESPACE::axi_port>(v);
13243     }
13244     CONSTEXPR pmcaxi_chan_r& set_AXI_SEL(NPU_NAMESPACE::axi_port value)
13245     {
13246         word0 = (~(((1U << 1) - 1)<<8) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 8);
13247         return *this;
13248     }
13249     CONSTEXPR uint32_t get_BW_CH_SEL_EN() const
13250     {
13251         auto v = ((1U << 1) - 1) & (word0 >> 10);
13252         return v;
13253     }
13254     CONSTEXPR pmcaxi_chan_r& set_BW_CH_SEL_EN(uint32_t value)
13255     {
13256         word0 = (~(((1U << 1) - 1)<<10) & word0) | ((((1U << 1) - 1) & value) << 10);
13257         return *this;
13258     }
13259 #endif
13260 };
13261 
13262 // pmclut_r - Performance monitor control for lookup table
13263 struct pmclut_r
13264 {
13265 #ifndef __cplusplus
13266     union
13267     {
13268         struct
13269         {
13270             uint32_t PCM_LUT_EN_0 : 1; // PMU lookup table enable for event counter 0
13271             uint32_t reserved0 : 15;
13272             uint32_t PMC_LUT_0 : 16; // PMU lookup table for event counter 0
13273         };
13274         uint32_t word;
13275     };
13276 #else
13277 private:
13278     uint32_t word0;
13279 public:
13280     CONSTEXPR pmclut_r() :
13281         word0(0)
13282     {}
13283     CONSTEXPR pmclut_r(uint32_t init) :
13284         word0(init)
13285     {}
13286     CONSTEXPR void operator=(uint32_t value)
13287     {
13288         word0 = value;
13289     }
13290     CONSTEXPR operator uint32_t()
13291     {
13292         return word0;
13293     }
13294     pmclut_r copy()
13295     {
13296         return *this;
13297     }
13298     CONSTEXPR uint32_t get_PCM_LUT_EN_0() const
13299     {
13300         auto v = ((1U << 1) - 1) & (word0 >> 0);
13301         return v;
13302     }
13303     CONSTEXPR pmclut_r& set_PCM_LUT_EN_0(uint32_t value)
13304     {
13305         word0 = (~(((1U << 1) - 1)<<0) & word0) | ((((1U << 1) - 1) & value) << 0);
13306         return *this;
13307     }
13308     CONSTEXPR uint32_t get_PMC_LUT_0() const
13309     {
13310         auto v = ((1U << 16) - 1) & (word0 >> 16);
13311         return v;
13312     }
13313     CONSTEXPR pmclut_r& set_PMC_LUT_0(uint32_t value)
13314     {
13315         word0 = (~(((1U << 16) - 1)<<16) & word0) | ((((1U << 16) - 1) & value) << 16);
13316         return *this;
13317     }
13318 #endif
13319 };
13320 
13321 // pmevcntr_r - Performance monitor event 0 count register
13322 struct pmevcntr_r
13323 {
13324 #ifndef __cplusplus
13325     union
13326     {
13327         struct
13328         {
13329             uint32_t count : 32; // Count word
13330         };
13331         uint32_t word;
13332     };
13333 #else
13334 private:
13335     uint32_t word0;
13336 public:
13337     CONSTEXPR pmevcntr_r() :
13338         word0(0)
13339     {}
13340     CONSTEXPR pmevcntr_r(uint32_t init) :
13341         word0(init)
13342     {}
13343     CONSTEXPR void operator=(uint32_t value)
13344     {
13345         word0 = value;
13346     }
13347     CONSTEXPR operator uint32_t()
13348     {
13349         return word0;
13350     }
13351     pmevcntr_r copy()
13352     {
13353         return *this;
13354     }
13355     CONSTEXPR uint32_t get_count() const
13356     {
13357         auto v = word0;
13358         return v;
13359     }
13360     CONSTEXPR pmevcntr_r& set_count(uint32_t value)
13361     {
13362         word0 = value;
13363         return *this;
13364     }
13365 #endif
13366 };
13367 
13368 // pmevtyper_r - Performance monitor event type register 0
13369 struct pmevtyper_r
13370 {
13371 #ifndef __cplusplus
13372     union
13373     {
13374         struct
13375         {
13376             uint32_t EV_TYPE : 10; // Event Type
13377             uint32_t reserved0 : 2;
13378             uint32_t D0 : 1; // Counting disabled for AXI port 0
13379             uint32_t D1 : 1; // Counting disabled for AXI port 1
13380             uint32_t D2 : 1; // Counting disabled for AXI port 2
13381             uint32_t D3 : 1; // Counting disabled for AXI port 3
13382             uint32_t reserved1 : 16;
13383         };
13384         uint32_t word;
13385     };
13386 #else
13387 private:
13388     uint32_t word0;
13389 public:
13390     CONSTEXPR pmevtyper_r() :
13391         word0(0)
13392     {}
13393     CONSTEXPR pmevtyper_r(uint32_t init) :
13394         word0(init)
13395     {}
13396     CONSTEXPR void operator=(uint32_t value)
13397     {
13398         word0 = value;
13399     }
13400     CONSTEXPR operator uint32_t()
13401     {
13402         return word0;
13403     }
13404     pmevtyper_r copy()
13405     {
13406         return *this;
13407     }
13408     CONSTEXPR NPU_NAMESPACE::pmu_event get_EV_TYPE() const
13409     {
13410         auto v = ((1U << 10) - 1) & (word0 >> 0);
13411         assert(v <= 671);
13412         return static_cast<NPU_NAMESPACE::pmu_event>(v);
13413     }
13414     CONSTEXPR pmevtyper_r& set_EV_TYPE(NPU_NAMESPACE::pmu_event value)
13415     {
13416         word0 = (~(((1U << 10) - 1)<<0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
13417         return *this;
13418     }
13419     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_D0() const
13420     {
13421         auto v = ((1U << 1) - 1) & (word0 >> 12);
13422         assert(v <= 1);
13423         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13424     }
13425     CONSTEXPR pmevtyper_r& set_D0(NPU_NAMESPACE::pmu_port_disable value)
13426     {
13427         word0 = (~(((1U << 1) - 1)<<12) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 12);
13428         return *this;
13429     }
13430     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_D1() const
13431     {
13432         auto v = ((1U << 1) - 1) & (word0 >> 13);
13433         assert(v <= 1);
13434         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13435     }
13436     CONSTEXPR pmevtyper_r& set_D1(NPU_NAMESPACE::pmu_port_disable value)
13437     {
13438         word0 = (~(((1U << 1) - 1)<<13) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 13);
13439         return *this;
13440     }
13441     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_D2() const
13442     {
13443         auto v = ((1U << 1) - 1) & (word0 >> 14);
13444         assert(v <= 1);
13445         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13446     }
13447     CONSTEXPR pmevtyper_r& set_D2(NPU_NAMESPACE::pmu_port_disable value)
13448     {
13449         word0 = (~(((1U << 1) - 1)<<14) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 14);
13450         return *this;
13451     }
13452     CONSTEXPR NPU_NAMESPACE::pmu_port_disable get_D3() const
13453     {
13454         auto v = ((1U << 1) - 1) & (word0 >> 15);
13455         assert(v <= 1);
13456         return static_cast<NPU_NAMESPACE::pmu_port_disable>(v);
13457     }
13458     CONSTEXPR pmevtyper_r& set_D3(NPU_NAMESPACE::pmu_port_disable value)
13459     {
13460         word0 = (~(((1U << 1) - 1)<<15) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 15);
13461         return *this;
13462     }
13463 #endif
13464 };
13465 
13466 struct NPU_REG
13467 {
13468     STRUCT id_r ID; // 0x0000
13469     STRUCT status_r STATUS; // 0x0004
13470     STRUCT cmd_r CMD; // 0x0008
13471     STRUCT reset_r RESET; // 0x000C
13472     STRUCT qbase_r QBASE; // 0x0010
13473     STRUCT qread_r QREAD; // 0x0018
13474     STRUCT qconfig_r QCONFIG; // 0x001C
13475     STRUCT qsize_r QSIZE; // 0x0020
13476     STRUCT prot_r PROT; // 0x0024
13477     STRUCT config_r CONFIG; // 0x0028
13478     uint32_t unused0[1];
13479     STRUCT cond_status_r COND_STATUS; // 0x0030
13480     uint32_t unused1[1];
13481     STRUCT power_ctrl_r POWER_CTRL; // 0x0038
13482     STRUCT regioncfg_r REGIONCFG; // 0x003C
13483     STRUCT mem_attr_r MEM_ATTR[4]; // 0x0040
13484     STRUCT axi_sram_r AXI_SRAM; // 0x0050
13485     STRUCT axi_ext_r AXI_EXT; // 0x0054
13486     uint32_t unused2[2];
13487     STRUCT cfg_sram_cap_r CFG_SRAM_CAP; // 0x0060
13488     STRUCT cfg_ext_cap_r CFG_EXT_CAP; // 0x0064
13489     STRUCT cfg_sram_hash0_r CFG_SRAM_HASH0; // 0x0068
13490     STRUCT cfg_sram_hash1_r CFG_SRAM_HASH1; // 0x0070
13491     STRUCT cfg_ext_hash0_r CFG_EXT_HASH0; // 0x0078
13492     STRUCT basep_r BASEP[8]; // 0x0080
13493     uint32_t unused3[32];
13494     STRUCT clkforce_r CLKFORCE; // 0x0140
13495     STRUCT debug_address_r DEBUG_ADDRESS; // 0x0144
13496     STRUCT debug_misc_r DEBUG_MISC; // 0x0148
13497     uint32_t unused4[2];
13498     STRUCT feature_disable_r FEATURE_DISABLE; // 0x0154
13499     uint32_t unused5[58];
13500     STRUCT dma_ifm_src_r DMA_IFM_SRC; // 0x0240
13501     uint32_t unused6[2];
13502     STRUCT dma_ofm_dst_r DMA_OFM_DST; // 0x0250
13503     STRUCT dma_weight_src_r DMA_WEIGHT_SRC; // 0x0258
13504     STRUCT dma_cmd_src_r DMA_CMD_SRC; // 0x0260
13505     STRUCT dma_cmd_size_r DMA_CMD_SIZE; // 0x0268
13506     STRUCT dma_m2m_src_r DMA_M2M_SRC; // 0x026C
13507     STRUCT dma_m2m_dst_r DMA_M2M_DST; // 0x0274
13508     STRUCT current_qread_r CURRENT_QREAD; // 0x027C
13509     STRUCT dma_scale_src_r DMA_SCALE_SRC; // 0x0280
13510     STRUCT dma_weight1_src_r DMA_WEIGHT1_SRC; // 0x0288
13511     STRUCT dma_weight2_src_r DMA_WEIGHT2_SRC; // 0x0290
13512     STRUCT dma_weight3_src_r DMA_WEIGHT3_SRC; // 0x0298
13513     uint32_t unused7[6];
13514     STRUCT current_op_r CURRENT_OP; // 0x02B8
13515     STRUCT current_cmd_r CURRENT_CMD; // 0x02BC
13516     uint32_t unused8[80];
13517     STRUCT internal_memory_r INTERNAL_MEMORY[256]; // 0x0400
13518     STRUCT ifm_pad_top_r IFM_PAD_TOP; // 0x0800
13519     STRUCT ifm_pad_left_r IFM_PAD_LEFT; // 0x0804
13520     STRUCT ifm_pad_right_r IFM_PAD_RIGHT; // 0x0808
13521     STRUCT ifm_pad_bottom_r IFM_PAD_BOTTOM; // 0x080C
13522     STRUCT ifm_depth_m1_r IFM_DEPTH_M1; // 0x0810
13523     STRUCT ifm_precision_r IFM_PRECISION; // 0x0814
13524     uint32_t unused9[1];
13525     STRUCT ifm_upscale_r IFM_UPSCALE; // 0x081C
13526     STRUCT ifm_broadcast_r IFM_BROADCAST; // 0x0820
13527     STRUCT ifm_zero_point_r IFM_ZERO_POINT; // 0x0824
13528     STRUCT ifm_width0_m1_r IFM_WIDTH0_M1; // 0x0828
13529     STRUCT ifm_height0_m1_r IFM_HEIGHT0_M1; // 0x082C
13530     STRUCT ifm_height1_m1_r IFM_HEIGHT1_M1; // 0x0830
13531     uint32_t unused10[2];
13532     STRUCT ifm_region_r IFM_REGION; // 0x083C
13533     uint32_t unused11[1];
13534     STRUCT ofm_width_m1_r OFM_WIDTH_M1; // 0x0844
13535     STRUCT ofm_height_m1_r OFM_HEIGHT_M1; // 0x0848
13536     STRUCT ofm_depth_m1_r OFM_DEPTH_M1; // 0x084C
13537     STRUCT ofm_precision_r OFM_PRECISION; // 0x0850
13538     STRUCT ofm_blk_width_m1_r OFM_BLK_WIDTH_M1; // 0x0854
13539     STRUCT ofm_blk_height_m1_r OFM_BLK_HEIGHT_M1; // 0x0858
13540     STRUCT ofm_blk_depth_m1_r OFM_BLK_DEPTH_M1; // 0x085C
13541     STRUCT ofm_zero_point_r OFM_ZERO_POINT; // 0x0860
13542     uint32_t unused12[1];
13543     STRUCT ofm_width0_m1_r OFM_WIDTH0_M1; // 0x0868
13544     STRUCT ofm_height0_m1_r OFM_HEIGHT0_M1; // 0x086C
13545     STRUCT ofm_height1_m1_r OFM_HEIGHT1_M1; // 0x0870
13546     uint32_t unused13[2];
13547     STRUCT ofm_region_r OFM_REGION; // 0x087C
13548     STRUCT kernel_width_m1_r KERNEL_WIDTH_M1; // 0x0880
13549     STRUCT kernel_height_m1_r KERNEL_HEIGHT_M1; // 0x0884
13550     STRUCT kernel_stride_r KERNEL_STRIDE; // 0x0888
13551     uint32_t unused14[1];
13552     STRUCT acc_format_r ACC_FORMAT; // 0x0890
13553     STRUCT activation_r ACTIVATION; // 0x0894
13554     STRUCT activation_min_r ACTIVATION_MIN; // 0x0898
13555     STRUCT activation_max_r ACTIVATION_MAX; // 0x089C
13556     STRUCT weight_region_r WEIGHT_REGION; // 0x08A0
13557     STRUCT scale_region_r SCALE_REGION; // 0x08A4
13558     STRUCT resize_x_scale_n_m1_r RESIZE_X_SCALE_N_M1; // 0x08A8
13559     STRUCT resize_y_scale_n_m1_r RESIZE_Y_SCALE_N_M1; // 0x08AC
13560     STRUCT resize_x_offset_r RESIZE_X_OFFSET; // 0x08B0
13561     STRUCT resize_y_offset_r RESIZE_Y_OFFSET; // 0x08B4
13562     STRUCT weight_format_r WEIGHT_FORMAT; // 0x08B8
13563     STRUCT blockdep_r BLOCKDEP; // 0x08BC
13564     STRUCT dma0_src_region_r DMA0_SRC_REGION; // 0x08C0
13565     STRUCT dma0_dst_region_r DMA0_DST_REGION; // 0x08C4
13566     STRUCT dma0_size0_r DMA0_SIZE0; // 0x08C8
13567     STRUCT dma0_size1_r DMA0_SIZE1; // 0x08CC
13568     STRUCT dma0_idx_region_r DMA0_IDX_REGION; // 0x08D0
13569     uint32_t unused15[11];
13570     STRUCT ifm2_broadcast_r IFM2_BROADCAST; // 0x0900
13571     uint32_t unused16[4];
13572     STRUCT ifm2_precision_r IFM2_PRECISION; // 0x0914
13573     uint32_t unused17[3];
13574     STRUCT ifm2_zero_point_r IFM2_ZERO_POINT; // 0x0924
13575     STRUCT ifm2_width0_m1_r IFM2_WIDTH0_M1; // 0x0928
13576     STRUCT ifm2_height0_m1_r IFM2_HEIGHT0_M1; // 0x092C
13577     STRUCT ifm2_height1_m1_r IFM2_HEIGHT1_M1; // 0x0930
13578     uint32_t unused18[2];
13579     STRUCT ifm2_region_r IFM2_REGION; // 0x093C
13580     uint32_t unused19[48];
13581     STRUCT ifm_base0_r IFM_BASE0; // 0x0A00
13582     STRUCT ifm_base1_r IFM_BASE1; // 0x0A08
13583     STRUCT ifm_base2_r IFM_BASE2; // 0x0A10
13584     STRUCT ifm_base3_r IFM_BASE3; // 0x0A18
13585     STRUCT ifm_stride_x_r IFM_STRIDE_X; // 0x0A20
13586     STRUCT ifm_stride_y_r IFM_STRIDE_Y; // 0x0A28
13587     STRUCT ifm_stride_c_r IFM_STRIDE_C; // 0x0A30
13588     uint32_t unused20[2];
13589     STRUCT ofm_base0_r OFM_BASE0; // 0x0A40
13590     STRUCT ofm_base1_r OFM_BASE1; // 0x0A48
13591     STRUCT ofm_base2_r OFM_BASE2; // 0x0A50
13592     STRUCT ofm_base3_r OFM_BASE3; // 0x0A58
13593     STRUCT ofm_stride_x_r OFM_STRIDE_X; // 0x0A60
13594     STRUCT ofm_stride_y_r OFM_STRIDE_Y; // 0x0A68
13595     STRUCT ofm_stride_c_r OFM_STRIDE_C; // 0x0A70
13596     uint32_t unused21[2];
13597     STRUCT weight_base_r WEIGHT_BASE; // 0x0A80
13598     STRUCT weight_length_r WEIGHT_LENGTH; // 0x0A88
13599     STRUCT scale_base_r SCALE_BASE; // 0x0A90
13600     STRUCT scale_length_r SCALE_LENGTH; // 0x0A98
13601     STRUCT ofm_scale_r OFM_SCALE; // 0x0AA0
13602     STRUCT ifm_scale_r IFM_SCALE; // 0x0AA8
13603     STRUCT ifm2_scale_r IFM2_SCALE; // 0x0AB0
13604     STRUCT op_scalar_r OP_SCALAR; // 0x0AB8
13605     STRUCT dma0_src_r DMA0_SRC; // 0x0AC0
13606     STRUCT dma0_dst_r DMA0_DST; // 0x0AC8
13607     STRUCT dma0_len_r DMA0_LEN; // 0x0AD0
13608     STRUCT dma0_src_stride0_r DMA0_SRC_STRIDE0; // 0x0AD8
13609     STRUCT dma0_src_stride1_r DMA0_SRC_STRIDE1; // 0x0AE0
13610     STRUCT dma0_dst_stride0_r DMA0_DST_STRIDE0; // 0x0AE8
13611     STRUCT dma0_dst_stride1_r DMA0_DST_STRIDE1; // 0x0AF0
13612     STRUCT dma0_idx_r DMA0_IDX; // 0x0AF8
13613     STRUCT ifm2_base0_r IFM2_BASE0; // 0x0B00
13614     STRUCT ifm2_base1_r IFM2_BASE1; // 0x0B08
13615     STRUCT ifm2_base2_r IFM2_BASE2; // 0x0B10
13616     STRUCT ifm2_base3_r IFM2_BASE3; // 0x0B18
13617     STRUCT ifm2_stride_x_r IFM2_STRIDE_X; // 0x0B20
13618     STRUCT ifm2_stride_y_r IFM2_STRIDE_Y; // 0x0B28
13619     STRUCT ifm2_stride_c_r IFM2_STRIDE_C; // 0x0B30
13620     uint32_t unused22[2];
13621     STRUCT weight1_base_r WEIGHT1_BASE; // 0x0B40
13622     STRUCT weight1_length_r WEIGHT1_LENGTH; // 0x0B48
13623     STRUCT weight2_base_r WEIGHT2_BASE; // 0x0B50
13624     STRUCT weight2_length_r WEIGHT2_LENGTH; // 0x0B58
13625     STRUCT weight3_base_r WEIGHT3_BASE; // 0x0B60
13626     STRUCT weight3_length_r WEIGHT3_LENGTH; // 0x0B68
13627     STRUCT resize_x_step_r RESIZE_X_STEP; // 0x0B70
13628     STRUCT resize_y_step_r RESIZE_Y_STEP; // 0x0B78
13629     uint32_t unused23[16];
13630     STRUCT dma0_idx_max_r DMA0_IDX_MAX; // 0x0BC0
13631     STRUCT dma0_idx_skip1_r DMA0_IDX_SKIP1; // 0x0BC8
13632     uint32_t unused24[252];
13633     STRUCT revision_r REVISION; // 0x0FC0
13634     uint32_t unused25[3];
13635     STRUCT pid4_r PID4; // 0x0FD0
13636     STRUCT pid5_r PID5; // 0x0FD4
13637     STRUCT pid6_r PID6; // 0x0FD8
13638     STRUCT pid7_r PID7; // 0x0FDC
13639     STRUCT pid0_r PID0; // 0x0FE0
13640     STRUCT pid1_r PID1; // 0x0FE4
13641     STRUCT pid2_r PID2; // 0x0FE8
13642     STRUCT pid3_r PID3; // 0x0FEC
13643     STRUCT cid0_r CID0; // 0x0FF0
13644     STRUCT cid1_r CID1; // 0x0FF4
13645     STRUCT cid2_r CID2; // 0x0FF8
13646     STRUCT cid3_r CID3; // 0x0FFC
13647     uint32_t unused26[64];
13648     STRUCT wd_status_r WD_STATUS; // 0x1100
13649     STRUCT mac_status_r MAC_STATUS; // 0x1104
13650     STRUCT ao_status_r AO_STATUS; // 0x1108
13651     uint32_t unused27[1];
13652     STRUCT dma_status0_r DMA_STATUS0; // 0x1110
13653     STRUCT dma_status1_r DMA_STATUS1; // 0x1114
13654     uint32_t unused28[26];
13655     STRUCT pmcr_r PMCR; // 0x1180
13656     STRUCT pmcntenset_r PMCNTENSET; // 0x1184
13657     STRUCT pmcntenclr_r PMCNTENCLR; // 0x1188
13658     STRUCT pmovsset_r PMOVSSET; // 0x118C
13659     STRUCT pmovsclr_r PMOVSCLR; // 0x1190
13660     STRUCT pmintset_r PMINTSET; // 0x1194
13661     STRUCT pmintclr_r PMINTCLR; // 0x1198
13662     uint32_t unused29[1];
13663     STRUCT pmccntr_r PMCCNTR; // 0x11A0
13664     STRUCT pmccntr_cfg_r PMCCNTR_CFG; // 0x11A8
13665     STRUCT pmcaxi_chan_r PMCAXI_CHAN; // 0x11AC
13666     STRUCT pmclut_r PMCLUT; // 0x11B0
13667     uint32_t unused30[83];
13668     STRUCT pmevcntr_r PMEVCNTR[8]; // 0x1300
13669     uint32_t unused31[24];
13670     STRUCT pmevtyper_r PMEVTYPER[8]; // 0x1380
13671 
13672 #ifdef __cplusplus
13673     enum class access_type_t : uint8_t { RW, RO, WO };
NPU_REGNPU_REG13674     NPU_REG()
13675     {
13676         reset();
13677     }
resetNPU_REG13678     void reset()
13679     {
13680         ID = 536899585;
13681         STATUS = 8;
13682         CMD = 12;
13683         RESET = 0;
13684         QBASE = 0;
13685         QREAD = 0;
13686         QCONFIG = 0;
13687         QSIZE = 0;
13688         PROT = 0;
13689         CONFIG = 536870928;
13690         COND_STATUS = 0;
13691         POWER_CTRL = 0;
13692         REGIONCFG = 0;
13693         for (size_t i = 0; i < (sizeof(MEM_ATTR) / sizeof(MEM_ATTR[0])); ++i)
13694             MEM_ATTR[i] = 0;
13695         AXI_SRAM = 0;
13696         AXI_EXT = 0;
13697         CFG_SRAM_CAP = 0;
13698         CFG_EXT_CAP = 0;
13699         CFG_SRAM_HASH0 = 0;
13700         CFG_SRAM_HASH1 = 0;
13701         CFG_EXT_HASH0 = 0;
13702         for (size_t i = 0; i < (sizeof(BASEP) / sizeof(BASEP[0])); ++i)
13703             BASEP[i] = 0;
13704         CLKFORCE = 0;
13705         DEBUG_ADDRESS = 0;
13706         DEBUG_MISC = 0;
13707         FEATURE_DISABLE = 0;
13708         DMA_IFM_SRC = 0;
13709         DMA_OFM_DST = 0;
13710         DMA_WEIGHT_SRC = 0;
13711         DMA_CMD_SRC = 0;
13712         DMA_CMD_SIZE = 0;
13713         DMA_M2M_SRC = 0;
13714         DMA_M2M_DST = 0;
13715         CURRENT_QREAD = 0;
13716         DMA_SCALE_SRC = 0;
13717         DMA_WEIGHT1_SRC = 0;
13718         DMA_WEIGHT2_SRC = 0;
13719         DMA_WEIGHT3_SRC = 0;
13720         CURRENT_OP = 0;
13721         CURRENT_CMD = 0;
13722         for (size_t i = 0; i < (sizeof(INTERNAL_MEMORY) / sizeof(INTERNAL_MEMORY[0])); ++i)
13723             INTERNAL_MEMORY[i] = 0;
13724         IFM_PAD_TOP = 0;
13725         IFM_PAD_LEFT = 0;
13726         IFM_PAD_RIGHT = 0;
13727         IFM_PAD_BOTTOM = 0;
13728         IFM_DEPTH_M1 = 0;
13729         IFM_PRECISION = 0;
13730         IFM_UPSCALE = 0;
13731         IFM_BROADCAST = 0;
13732         IFM_ZERO_POINT = 0;
13733         IFM_WIDTH0_M1 = 0;
13734         IFM_HEIGHT0_M1 = 0;
13735         IFM_HEIGHT1_M1 = 0;
13736         IFM_REGION = 0;
13737         OFM_WIDTH_M1 = 0;
13738         OFM_HEIGHT_M1 = 0;
13739         OFM_DEPTH_M1 = 0;
13740         OFM_PRECISION = 0;
13741         OFM_BLK_WIDTH_M1 = 0;
13742         OFM_BLK_HEIGHT_M1 = 0;
13743         OFM_BLK_DEPTH_M1 = 0;
13744         OFM_ZERO_POINT = 0;
13745         OFM_WIDTH0_M1 = 0;
13746         OFM_HEIGHT0_M1 = 0;
13747         OFM_HEIGHT1_M1 = 0;
13748         OFM_REGION = 0;
13749         KERNEL_WIDTH_M1 = 0;
13750         KERNEL_HEIGHT_M1 = 0;
13751         KERNEL_STRIDE = 0;
13752         ACC_FORMAT = 0;
13753         ACTIVATION = 0;
13754         ACTIVATION_MIN = 0;
13755         ACTIVATION_MAX = 0;
13756         WEIGHT_REGION = 0;
13757         SCALE_REGION = 0;
13758         RESIZE_X_SCALE_N_M1 = 0;
13759         RESIZE_Y_SCALE_N_M1 = 0;
13760         RESIZE_X_OFFSET = 0;
13761         RESIZE_Y_OFFSET = 0;
13762         WEIGHT_FORMAT = 0;
13763         BLOCKDEP = 0;
13764         DMA0_SRC_REGION = 0;
13765         DMA0_DST_REGION = 0;
13766         DMA0_SIZE0 = 0;
13767         DMA0_SIZE1 = 0;
13768         DMA0_IDX_REGION = 0;
13769         IFM2_BROADCAST = 0;
13770         IFM2_PRECISION = 0;
13771         IFM2_ZERO_POINT = 0;
13772         IFM2_WIDTH0_M1 = 0;
13773         IFM2_HEIGHT0_M1 = 0;
13774         IFM2_HEIGHT1_M1 = 0;
13775         IFM2_REGION = 0;
13776         IFM_BASE0 = 0;
13777         IFM_BASE1 = 0;
13778         IFM_BASE2 = 0;
13779         IFM_BASE3 = 0;
13780         IFM_STRIDE_X = 0;
13781         IFM_STRIDE_Y = 0;
13782         IFM_STRIDE_C = 0;
13783         OFM_BASE0 = 0;
13784         OFM_BASE1 = 0;
13785         OFM_BASE2 = 0;
13786         OFM_BASE3 = 0;
13787         OFM_STRIDE_X = 0;
13788         OFM_STRIDE_Y = 0;
13789         OFM_STRIDE_C = 0;
13790         WEIGHT_BASE = 0;
13791         WEIGHT_LENGTH = 0;
13792         SCALE_BASE = 0;
13793         SCALE_LENGTH = 0;
13794         OFM_SCALE = 0;
13795         IFM_SCALE = 0;
13796         IFM2_SCALE = 0;
13797         OP_SCALAR = 0;
13798         DMA0_SRC = 0;
13799         DMA0_DST = 0;
13800         DMA0_LEN = 0;
13801         DMA0_SRC_STRIDE0 = 0;
13802         DMA0_SRC_STRIDE1 = 0;
13803         DMA0_DST_STRIDE0 = 0;
13804         DMA0_DST_STRIDE1 = 0;
13805         DMA0_IDX = 0;
13806         IFM2_BASE0 = 0;
13807         IFM2_BASE1 = 0;
13808         IFM2_BASE2 = 0;
13809         IFM2_BASE3 = 0;
13810         IFM2_STRIDE_X = 0;
13811         IFM2_STRIDE_Y = 0;
13812         IFM2_STRIDE_C = 0;
13813         WEIGHT1_BASE = 0;
13814         WEIGHT1_LENGTH = 0;
13815         WEIGHT2_BASE = 0;
13816         WEIGHT2_LENGTH = 0;
13817         WEIGHT3_BASE = 0;
13818         WEIGHT3_LENGTH = 0;
13819         RESIZE_X_STEP = 0;
13820         RESIZE_Y_STEP = 0;
13821         DMA0_IDX_MAX = 0;
13822         DMA0_IDX_SKIP1 = 0;
13823         REVISION = 0;
13824         PID4 = 4;
13825         PID5 = 0;
13826         PID6 = 0;
13827         PID7 = 0;
13828         PID0 = 130;
13829         PID1 = 181;
13830         PID2 = 11;
13831         PID3 = 0;
13832         CID0 = 13;
13833         CID1 = 240;
13834         CID2 = 5;
13835         CID3 = 177;
13836         WD_STATUS = 0;
13837         MAC_STATUS = 0;
13838         AO_STATUS = 0;
13839         DMA_STATUS0 = 0;
13840         DMA_STATUS1 = 0;
13841         PMCR = 16384;
13842         PMCNTENSET = 0;
13843         PMCNTENCLR = 0;
13844         PMOVSSET = 0;
13845         PMOVSCLR = 0;
13846         PMINTSET = 0;
13847         PMINTCLR = 0;
13848         PMCCNTR = 0;
13849         PMCCNTR_CFG = 0;
13850         PMCAXI_CHAN = 0;
13851         PMCLUT = 0;
13852         for (size_t i = 0; i < (sizeof(PMEVCNTR) / sizeof(PMEVCNTR[0])); ++i)
13853             PMEVCNTR[i] = 0;
13854         for (size_t i = 0; i < (sizeof(PMEVTYPER) / sizeof(PMEVTYPER[0])); ++i)
13855             PMEVTYPER[i] = 0;
13856     }
13857     uint32_t& operator[](const int addr_offset)
13858     {
13859         return reinterpret_cast<uint32_t *>(this)[addr_offset / 4];
13860     }
get_access_typeNPU_REG13861     access_type_t get_access_type(uint32_t offset)
13862     {
13863         switch (offset)
13864         {
13865             case 0: return access_type_t::RO;
13866             case 4: return access_type_t::RO;
13867             case 8: return access_type_t::RW;
13868             case 12: return access_type_t::RW;
13869             case 16: return access_type_t::RW;
13870             case 24: return access_type_t::RO;
13871             case 28: return access_type_t::RW;
13872             case 32: return access_type_t::RW;
13873             case 36: return access_type_t::RO;
13874             case 40: return access_type_t::RO;
13875             case 48: return access_type_t::RO;
13876             case 56: return access_type_t::RW;
13877             case 60: return access_type_t::RW;
13878             case 64: return access_type_t::RW;
13879             case 68: return access_type_t::RW;
13880             case 72: return access_type_t::RW;
13881             case 76: return access_type_t::RW;
13882             case 80: return access_type_t::RW;
13883             case 84: return access_type_t::RW;
13884             case 96: return access_type_t::RO;
13885             case 100: return access_type_t::RO;
13886             case 104: return access_type_t::RO;
13887             case 112: return access_type_t::RO;
13888             case 120: return access_type_t::RO;
13889             case 128: return access_type_t::RW;
13890             case 136: return access_type_t::RW;
13891             case 144: return access_type_t::RW;
13892             case 152: return access_type_t::RW;
13893             case 160: return access_type_t::RW;
13894             case 168: return access_type_t::RW;
13895             case 176: return access_type_t::RW;
13896             case 184: return access_type_t::RW;
13897             case 320: return access_type_t::RW;
13898             case 324: return access_type_t::RW;
13899             case 328: return access_type_t::RW;
13900             case 340: return access_type_t::RW;
13901             case 576: return access_type_t::RO;
13902             case 592: return access_type_t::RO;
13903             case 600: return access_type_t::RO;
13904             case 608: return access_type_t::RO;
13905             case 616: return access_type_t::RO;
13906             case 620: return access_type_t::RO;
13907             case 628: return access_type_t::RO;
13908             case 636: return access_type_t::RO;
13909             case 640: return access_type_t::RO;
13910             case 648: return access_type_t::RO;
13911             case 656: return access_type_t::RO;
13912             case 664: return access_type_t::RO;
13913             case 696: return access_type_t::RO;
13914             case 700: return access_type_t::RO;
13915             case 1024: return access_type_t::RW;
13916             case 1028: return access_type_t::RW;
13917             case 1032: return access_type_t::RW;
13918             case 1036: return access_type_t::RW;
13919             case 1040: return access_type_t::RW;
13920             case 1044: return access_type_t::RW;
13921             case 1048: return access_type_t::RW;
13922             case 1052: return access_type_t::RW;
13923             case 1056: return access_type_t::RW;
13924             case 1060: return access_type_t::RW;
13925             case 1064: return access_type_t::RW;
13926             case 1068: return access_type_t::RW;
13927             case 1072: return access_type_t::RW;
13928             case 1076: return access_type_t::RW;
13929             case 1080: return access_type_t::RW;
13930             case 1084: return access_type_t::RW;
13931             case 1088: return access_type_t::RW;
13932             case 1092: return access_type_t::RW;
13933             case 1096: return access_type_t::RW;
13934             case 1100: return access_type_t::RW;
13935             case 1104: return access_type_t::RW;
13936             case 1108: return access_type_t::RW;
13937             case 1112: return access_type_t::RW;
13938             case 1116: return access_type_t::RW;
13939             case 1120: return access_type_t::RW;
13940             case 1124: return access_type_t::RW;
13941             case 1128: return access_type_t::RW;
13942             case 1132: return access_type_t::RW;
13943             case 1136: return access_type_t::RW;
13944             case 1140: return access_type_t::RW;
13945             case 1144: return access_type_t::RW;
13946             case 1148: return access_type_t::RW;
13947             case 1152: return access_type_t::RW;
13948             case 1156: return access_type_t::RW;
13949             case 1160: return access_type_t::RW;
13950             case 1164: return access_type_t::RW;
13951             case 1168: return access_type_t::RW;
13952             case 1172: return access_type_t::RW;
13953             case 1176: return access_type_t::RW;
13954             case 1180: return access_type_t::RW;
13955             case 1184: return access_type_t::RW;
13956             case 1188: return access_type_t::RW;
13957             case 1192: return access_type_t::RW;
13958             case 1196: return access_type_t::RW;
13959             case 1200: return access_type_t::RW;
13960             case 1204: return access_type_t::RW;
13961             case 1208: return access_type_t::RW;
13962             case 1212: return access_type_t::RW;
13963             case 1216: return access_type_t::RW;
13964             case 1220: return access_type_t::RW;
13965             case 1224: return access_type_t::RW;
13966             case 1228: return access_type_t::RW;
13967             case 1232: return access_type_t::RW;
13968             case 1236: return access_type_t::RW;
13969             case 1240: return access_type_t::RW;
13970             case 1244: return access_type_t::RW;
13971             case 1248: return access_type_t::RW;
13972             case 1252: return access_type_t::RW;
13973             case 1256: return access_type_t::RW;
13974             case 1260: return access_type_t::RW;
13975             case 1264: return access_type_t::RW;
13976             case 1268: return access_type_t::RW;
13977             case 1272: return access_type_t::RW;
13978             case 1276: return access_type_t::RW;
13979             case 1280: return access_type_t::RW;
13980             case 1284: return access_type_t::RW;
13981             case 1288: return access_type_t::RW;
13982             case 1292: return access_type_t::RW;
13983             case 1296: return access_type_t::RW;
13984             case 1300: return access_type_t::RW;
13985             case 1304: return access_type_t::RW;
13986             case 1308: return access_type_t::RW;
13987             case 1312: return access_type_t::RW;
13988             case 1316: return access_type_t::RW;
13989             case 1320: return access_type_t::RW;
13990             case 1324: return access_type_t::RW;
13991             case 1328: return access_type_t::RW;
13992             case 1332: return access_type_t::RW;
13993             case 1336: return access_type_t::RW;
13994             case 1340: return access_type_t::RW;
13995             case 1344: return access_type_t::RW;
13996             case 1348: return access_type_t::RW;
13997             case 1352: return access_type_t::RW;
13998             case 1356: return access_type_t::RW;
13999             case 1360: return access_type_t::RW;
14000             case 1364: return access_type_t::RW;
14001             case 1368: return access_type_t::RW;
14002             case 1372: return access_type_t::RW;
14003             case 1376: return access_type_t::RW;
14004             case 1380: return access_type_t::RW;
14005             case 1384: return access_type_t::RW;
14006             case 1388: return access_type_t::RW;
14007             case 1392: return access_type_t::RW;
14008             case 1396: return access_type_t::RW;
14009             case 1400: return access_type_t::RW;
14010             case 1404: return access_type_t::RW;
14011             case 1408: return access_type_t::RW;
14012             case 1412: return access_type_t::RW;
14013             case 1416: return access_type_t::RW;
14014             case 1420: return access_type_t::RW;
14015             case 1424: return access_type_t::RW;
14016             case 1428: return access_type_t::RW;
14017             case 1432: return access_type_t::RW;
14018             case 1436: return access_type_t::RW;
14019             case 1440: return access_type_t::RW;
14020             case 1444: return access_type_t::RW;
14021             case 1448: return access_type_t::RW;
14022             case 1452: return access_type_t::RW;
14023             case 1456: return access_type_t::RW;
14024             case 1460: return access_type_t::RW;
14025             case 1464: return access_type_t::RW;
14026             case 1468: return access_type_t::RW;
14027             case 1472: return access_type_t::RW;
14028             case 1476: return access_type_t::RW;
14029             case 1480: return access_type_t::RW;
14030             case 1484: return access_type_t::RW;
14031             case 1488: return access_type_t::RW;
14032             case 1492: return access_type_t::RW;
14033             case 1496: return access_type_t::RW;
14034             case 1500: return access_type_t::RW;
14035             case 1504: return access_type_t::RW;
14036             case 1508: return access_type_t::RW;
14037             case 1512: return access_type_t::RW;
14038             case 1516: return access_type_t::RW;
14039             case 1520: return access_type_t::RW;
14040             case 1524: return access_type_t::RW;
14041             case 1528: return access_type_t::RW;
14042             case 1532: return access_type_t::RW;
14043             case 1536: return access_type_t::RW;
14044             case 1540: return access_type_t::RW;
14045             case 1544: return access_type_t::RW;
14046             case 1548: return access_type_t::RW;
14047             case 1552: return access_type_t::RW;
14048             case 1556: return access_type_t::RW;
14049             case 1560: return access_type_t::RW;
14050             case 1564: return access_type_t::RW;
14051             case 1568: return access_type_t::RW;
14052             case 1572: return access_type_t::RW;
14053             case 1576: return access_type_t::RW;
14054             case 1580: return access_type_t::RW;
14055             case 1584: return access_type_t::RW;
14056             case 1588: return access_type_t::RW;
14057             case 1592: return access_type_t::RW;
14058             case 1596: return access_type_t::RW;
14059             case 1600: return access_type_t::RW;
14060             case 1604: return access_type_t::RW;
14061             case 1608: return access_type_t::RW;
14062             case 1612: return access_type_t::RW;
14063             case 1616: return access_type_t::RW;
14064             case 1620: return access_type_t::RW;
14065             case 1624: return access_type_t::RW;
14066             case 1628: return access_type_t::RW;
14067             case 1632: return access_type_t::RW;
14068             case 1636: return access_type_t::RW;
14069             case 1640: return access_type_t::RW;
14070             case 1644: return access_type_t::RW;
14071             case 1648: return access_type_t::RW;
14072             case 1652: return access_type_t::RW;
14073             case 1656: return access_type_t::RW;
14074             case 1660: return access_type_t::RW;
14075             case 1664: return access_type_t::RW;
14076             case 1668: return access_type_t::RW;
14077             case 1672: return access_type_t::RW;
14078             case 1676: return access_type_t::RW;
14079             case 1680: return access_type_t::RW;
14080             case 1684: return access_type_t::RW;
14081             case 1688: return access_type_t::RW;
14082             case 1692: return access_type_t::RW;
14083             case 1696: return access_type_t::RW;
14084             case 1700: return access_type_t::RW;
14085             case 1704: return access_type_t::RW;
14086             case 1708: return access_type_t::RW;
14087             case 1712: return access_type_t::RW;
14088             case 1716: return access_type_t::RW;
14089             case 1720: return access_type_t::RW;
14090             case 1724: return access_type_t::RW;
14091             case 1728: return access_type_t::RW;
14092             case 1732: return access_type_t::RW;
14093             case 1736: return access_type_t::RW;
14094             case 1740: return access_type_t::RW;
14095             case 1744: return access_type_t::RW;
14096             case 1748: return access_type_t::RW;
14097             case 1752: return access_type_t::RW;
14098             case 1756: return access_type_t::RW;
14099             case 1760: return access_type_t::RW;
14100             case 1764: return access_type_t::RW;
14101             case 1768: return access_type_t::RW;
14102             case 1772: return access_type_t::RW;
14103             case 1776: return access_type_t::RW;
14104             case 1780: return access_type_t::RW;
14105             case 1784: return access_type_t::RW;
14106             case 1788: return access_type_t::RW;
14107             case 1792: return access_type_t::RW;
14108             case 1796: return access_type_t::RW;
14109             case 1800: return access_type_t::RW;
14110             case 1804: return access_type_t::RW;
14111             case 1808: return access_type_t::RW;
14112             case 1812: return access_type_t::RW;
14113             case 1816: return access_type_t::RW;
14114             case 1820: return access_type_t::RW;
14115             case 1824: return access_type_t::RW;
14116             case 1828: return access_type_t::RW;
14117             case 1832: return access_type_t::RW;
14118             case 1836: return access_type_t::RW;
14119             case 1840: return access_type_t::RW;
14120             case 1844: return access_type_t::RW;
14121             case 1848: return access_type_t::RW;
14122             case 1852: return access_type_t::RW;
14123             case 1856: return access_type_t::RW;
14124             case 1860: return access_type_t::RW;
14125             case 1864: return access_type_t::RW;
14126             case 1868: return access_type_t::RW;
14127             case 1872: return access_type_t::RW;
14128             case 1876: return access_type_t::RW;
14129             case 1880: return access_type_t::RW;
14130             case 1884: return access_type_t::RW;
14131             case 1888: return access_type_t::RW;
14132             case 1892: return access_type_t::RW;
14133             case 1896: return access_type_t::RW;
14134             case 1900: return access_type_t::RW;
14135             case 1904: return access_type_t::RW;
14136             case 1908: return access_type_t::RW;
14137             case 1912: return access_type_t::RW;
14138             case 1916: return access_type_t::RW;
14139             case 1920: return access_type_t::RW;
14140             case 1924: return access_type_t::RW;
14141             case 1928: return access_type_t::RW;
14142             case 1932: return access_type_t::RW;
14143             case 1936: return access_type_t::RW;
14144             case 1940: return access_type_t::RW;
14145             case 1944: return access_type_t::RW;
14146             case 1948: return access_type_t::RW;
14147             case 1952: return access_type_t::RW;
14148             case 1956: return access_type_t::RW;
14149             case 1960: return access_type_t::RW;
14150             case 1964: return access_type_t::RW;
14151             case 1968: return access_type_t::RW;
14152             case 1972: return access_type_t::RW;
14153             case 1976: return access_type_t::RW;
14154             case 1980: return access_type_t::RW;
14155             case 1984: return access_type_t::RW;
14156             case 1988: return access_type_t::RW;
14157             case 1992: return access_type_t::RW;
14158             case 1996: return access_type_t::RW;
14159             case 2000: return access_type_t::RW;
14160             case 2004: return access_type_t::RW;
14161             case 2008: return access_type_t::RW;
14162             case 2012: return access_type_t::RW;
14163             case 2016: return access_type_t::RW;
14164             case 2020: return access_type_t::RW;
14165             case 2024: return access_type_t::RW;
14166             case 2028: return access_type_t::RW;
14167             case 2032: return access_type_t::RW;
14168             case 2036: return access_type_t::RW;
14169             case 2040: return access_type_t::RW;
14170             case 2044: return access_type_t::RW;
14171             case 2048: return access_type_t::RW;
14172             case 2052: return access_type_t::RW;
14173             case 2056: return access_type_t::RW;
14174             case 2060: return access_type_t::RW;
14175             case 2064: return access_type_t::RW;
14176             case 2068: return access_type_t::RW;
14177             case 2076: return access_type_t::RW;
14178             case 2080: return access_type_t::RW;
14179             case 2084: return access_type_t::RW;
14180             case 2088: return access_type_t::RW;
14181             case 2092: return access_type_t::RW;
14182             case 2096: return access_type_t::RW;
14183             case 2108: return access_type_t::RW;
14184             case 2116: return access_type_t::RW;
14185             case 2120: return access_type_t::RW;
14186             case 2124: return access_type_t::RW;
14187             case 2128: return access_type_t::RW;
14188             case 2132: return access_type_t::RW;
14189             case 2136: return access_type_t::RW;
14190             case 2140: return access_type_t::RW;
14191             case 2144: return access_type_t::RW;
14192             case 2152: return access_type_t::RW;
14193             case 2156: return access_type_t::RW;
14194             case 2160: return access_type_t::RW;
14195             case 2172: return access_type_t::RW;
14196             case 2176: return access_type_t::RW;
14197             case 2180: return access_type_t::RW;
14198             case 2184: return access_type_t::RW;
14199             case 2192: return access_type_t::RW;
14200             case 2196: return access_type_t::RW;
14201             case 2200: return access_type_t::RW;
14202             case 2204: return access_type_t::RW;
14203             case 2208: return access_type_t::RW;
14204             case 2212: return access_type_t::RW;
14205             case 2216: return access_type_t::RW;
14206             case 2220: return access_type_t::RW;
14207             case 2224: return access_type_t::RW;
14208             case 2228: return access_type_t::RW;
14209             case 2232: return access_type_t::RW;
14210             case 2236: return access_type_t::RW;
14211             case 2240: return access_type_t::RW;
14212             case 2244: return access_type_t::RW;
14213             case 2248: return access_type_t::RW;
14214             case 2252: return access_type_t::RW;
14215             case 2256: return access_type_t::RW;
14216             case 2304: return access_type_t::RW;
14217             case 2324: return access_type_t::RW;
14218             case 2340: return access_type_t::RW;
14219             case 2344: return access_type_t::RW;
14220             case 2348: return access_type_t::RW;
14221             case 2352: return access_type_t::RW;
14222             case 2364: return access_type_t::RW;
14223             case 2560: return access_type_t::RW;
14224             case 2568: return access_type_t::RW;
14225             case 2576: return access_type_t::RW;
14226             case 2584: return access_type_t::RW;
14227             case 2592: return access_type_t::RW;
14228             case 2600: return access_type_t::RW;
14229             case 2608: return access_type_t::RW;
14230             case 2624: return access_type_t::RW;
14231             case 2632: return access_type_t::RW;
14232             case 2640: return access_type_t::RW;
14233             case 2648: return access_type_t::RW;
14234             case 2656: return access_type_t::RW;
14235             case 2664: return access_type_t::RW;
14236             case 2672: return access_type_t::RW;
14237             case 2688: return access_type_t::RW;
14238             case 2696: return access_type_t::RW;
14239             case 2704: return access_type_t::RW;
14240             case 2712: return access_type_t::RW;
14241             case 2720: return access_type_t::RW;
14242             case 2728: return access_type_t::RW;
14243             case 2736: return access_type_t::RW;
14244             case 2744: return access_type_t::RW;
14245             case 2752: return access_type_t::RW;
14246             case 2760: return access_type_t::RW;
14247             case 2768: return access_type_t::RW;
14248             case 2776: return access_type_t::RW;
14249             case 2784: return access_type_t::RW;
14250             case 2792: return access_type_t::RW;
14251             case 2800: return access_type_t::RW;
14252             case 2808: return access_type_t::RW;
14253             case 2816: return access_type_t::RW;
14254             case 2824: return access_type_t::RW;
14255             case 2832: return access_type_t::RW;
14256             case 2840: return access_type_t::RW;
14257             case 2848: return access_type_t::RW;
14258             case 2856: return access_type_t::RW;
14259             case 2864: return access_type_t::RW;
14260             case 2880: return access_type_t::RW;
14261             case 2888: return access_type_t::RW;
14262             case 2896: return access_type_t::RW;
14263             case 2904: return access_type_t::RW;
14264             case 2912: return access_type_t::RW;
14265             case 2920: return access_type_t::RW;
14266             case 2928: return access_type_t::RW;
14267             case 2936: return access_type_t::RW;
14268             case 3008: return access_type_t::RW;
14269             case 3016: return access_type_t::RW;
14270             case 4032: return access_type_t::RO;
14271             case 4048: return access_type_t::RO;
14272             case 4052: return access_type_t::RO;
14273             case 4056: return access_type_t::RO;
14274             case 4060: return access_type_t::RO;
14275             case 4064: return access_type_t::RO;
14276             case 4068: return access_type_t::RO;
14277             case 4072: return access_type_t::RO;
14278             case 4076: return access_type_t::RO;
14279             case 4080: return access_type_t::RO;
14280             case 4084: return access_type_t::RO;
14281             case 4088: return access_type_t::RO;
14282             case 4092: return access_type_t::RO;
14283             case 4352: return access_type_t::RO;
14284             case 4356: return access_type_t::RO;
14285             case 4360: return access_type_t::RO;
14286             case 4368: return access_type_t::RO;
14287             case 4372: return access_type_t::RO;
14288             case 4480: return access_type_t::RW;
14289             case 4484: return access_type_t::RW;
14290             case 4488: return access_type_t::RW;
14291             case 4492: return access_type_t::RW;
14292             case 4496: return access_type_t::RW;
14293             case 4500: return access_type_t::RW;
14294             case 4504: return access_type_t::RW;
14295             case 4512: return access_type_t::RW;
14296             case 4520: return access_type_t::RW;
14297             case 4524: return access_type_t::RW;
14298             case 4528: return access_type_t::RW;
14299             case 4864: return access_type_t::RW;
14300             case 4868: return access_type_t::RW;
14301             case 4872: return access_type_t::RW;
14302             case 4876: return access_type_t::RW;
14303             case 4880: return access_type_t::RW;
14304             case 4884: return access_type_t::RW;
14305             case 4888: return access_type_t::RW;
14306             case 4892: return access_type_t::RW;
14307             case 4992: return access_type_t::RW;
14308             case 4996: return access_type_t::RW;
14309             case 5000: return access_type_t::RW;
14310             case 5004: return access_type_t::RW;
14311             case 5008: return access_type_t::RW;
14312             case 5012: return access_type_t::RW;
14313             case 5016: return access_type_t::RW;
14314             case 5020: return access_type_t::RW;
14315             default: return access_type_t::RO;
14316         }
14317     }
14318 #endif
14319 };
14320 
14321 #ifdef __cplusplus
14322 struct isa
14323 {
14324 #ifdef NPU_DISASSEMBLE
disassembleisa14325 static int disassemble(const uint32_t* in, std::string& op, std::vector<std::pair<std::string, std::string>>& fields)
14326 {
14327     switch (*in & 0xffff)
14328     {
14329         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP):
14330         {
14331             const npu_op_stop_t& v = *reinterpret_cast<const npu_op_stop_t*>(in);
14332             op = "NPU_OP_STOP";
14333             v.disassemble(fields);
14334             break;
14335         }
14336         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ):
14337         {
14338             const npu_op_irq_t& v = *reinterpret_cast<const npu_op_irq_t*>(in);
14339             op = "NPU_OP_IRQ";
14340             v.disassemble(fields);
14341             break;
14342         }
14343         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV):
14344         {
14345             const npu_op_conv_t& v = *reinterpret_cast<const npu_op_conv_t*>(in);
14346             op = "NPU_OP_CONV";
14347             v.disassemble(fields);
14348             break;
14349         }
14350         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE):
14351         {
14352             const npu_op_depthwise_t& v = *reinterpret_cast<const npu_op_depthwise_t*>(in);
14353             op = "NPU_OP_DEPTHWISE";
14354             v.disassemble(fields);
14355             break;
14356         }
14357         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL):
14358         {
14359             const npu_op_pool_t& v = *reinterpret_cast<const npu_op_pool_t*>(in);
14360             op = "NPU_OP_POOL";
14361             v.disassemble(fields);
14362             break;
14363         }
14364         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE):
14365         {
14366             const npu_op_elementwise_t& v = *reinterpret_cast<const npu_op_elementwise_t*>(in);
14367             op = "NPU_OP_ELEMENTWISE";
14368             v.disassemble(fields);
14369             break;
14370         }
14371         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_RESIZE):
14372         {
14373             const npu_op_resize_t& v = *reinterpret_cast<const npu_op_resize_t*>(in);
14374             op = "NPU_OP_RESIZE";
14375             v.disassemble(fields);
14376             break;
14377         }
14378         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START):
14379         {
14380             const npu_op_dma_start_t& v = *reinterpret_cast<const npu_op_dma_start_t*>(in);
14381             op = "NPU_OP_DMA_START";
14382             v.disassemble(fields);
14383             break;
14384         }
14385         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT):
14386         {
14387             const npu_op_dma_wait_t& v = *reinterpret_cast<const npu_op_dma_wait_t*>(in);
14388             op = "NPU_OP_DMA_WAIT";
14389             v.disassemble(fields);
14390             break;
14391         }
14392         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT):
14393         {
14394             const npu_op_kernel_wait_t& v = *reinterpret_cast<const npu_op_kernel_wait_t*>(in);
14395             op = "NPU_OP_KERNEL_WAIT";
14396             v.disassemble(fields);
14397             break;
14398         }
14399         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK):
14400         {
14401             const npu_op_pmu_mask_t& v = *reinterpret_cast<const npu_op_pmu_mask_t*>(in);
14402             op = "NPU_OP_PMU_MASK";
14403             v.disassemble(fields);
14404             break;
14405         }
14406         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP):
14407         {
14408             const npu_set_ifm_pad_top_t& v = *reinterpret_cast<const npu_set_ifm_pad_top_t*>(in);
14409             op = "NPU_SET_IFM_PAD_TOP";
14410             v.disassemble(fields);
14411             break;
14412         }
14413         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT):
14414         {
14415             const npu_set_ifm_pad_left_t& v = *reinterpret_cast<const npu_set_ifm_pad_left_t*>(in);
14416             op = "NPU_SET_IFM_PAD_LEFT";
14417             v.disassemble(fields);
14418             break;
14419         }
14420         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT):
14421         {
14422             const npu_set_ifm_pad_right_t& v = *reinterpret_cast<const npu_set_ifm_pad_right_t*>(in);
14423             op = "NPU_SET_IFM_PAD_RIGHT";
14424             v.disassemble(fields);
14425             break;
14426         }
14427         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM):
14428         {
14429             const npu_set_ifm_pad_bottom_t& v = *reinterpret_cast<const npu_set_ifm_pad_bottom_t*>(in);
14430             op = "NPU_SET_IFM_PAD_BOTTOM";
14431             v.disassemble(fields);
14432             break;
14433         }
14434         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1):
14435         {
14436             const npu_set_ifm_depth_m1_t& v = *reinterpret_cast<const npu_set_ifm_depth_m1_t*>(in);
14437             op = "NPU_SET_IFM_DEPTH_M1";
14438             v.disassemble(fields);
14439             break;
14440         }
14441         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION):
14442         {
14443             const npu_set_ifm_precision_t& v = *reinterpret_cast<const npu_set_ifm_precision_t*>(in);
14444             op = "NPU_SET_IFM_PRECISION";
14445             v.disassemble(fields);
14446             break;
14447         }
14448         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE):
14449         {
14450             const npu_set_ifm_upscale_t& v = *reinterpret_cast<const npu_set_ifm_upscale_t*>(in);
14451             op = "NPU_SET_IFM_UPSCALE";
14452             v.disassemble(fields);
14453             break;
14454         }
14455         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT):
14456         {
14457             const npu_set_ifm_zero_point_t& v = *reinterpret_cast<const npu_set_ifm_zero_point_t*>(in);
14458             op = "NPU_SET_IFM_ZERO_POINT";
14459             v.disassemble(fields);
14460             break;
14461         }
14462         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1):
14463         {
14464             const npu_set_ifm_width0_m1_t& v = *reinterpret_cast<const npu_set_ifm_width0_m1_t*>(in);
14465             op = "NPU_SET_IFM_WIDTH0_M1";
14466             v.disassemble(fields);
14467             break;
14468         }
14469         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1):
14470         {
14471             const npu_set_ifm_height0_m1_t& v = *reinterpret_cast<const npu_set_ifm_height0_m1_t*>(in);
14472             op = "NPU_SET_IFM_HEIGHT0_M1";
14473             v.disassemble(fields);
14474             break;
14475         }
14476         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1):
14477         {
14478             const npu_set_ifm_height1_m1_t& v = *reinterpret_cast<const npu_set_ifm_height1_m1_t*>(in);
14479             op = "NPU_SET_IFM_HEIGHT1_M1";
14480             v.disassemble(fields);
14481             break;
14482         }
14483         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION):
14484         {
14485             const npu_set_ifm_region_t& v = *reinterpret_cast<const npu_set_ifm_region_t*>(in);
14486             op = "NPU_SET_IFM_REGION";
14487             v.disassemble(fields);
14488             break;
14489         }
14490         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_BROADCAST):
14491         {
14492             const npu_set_ifm_broadcast_t& v = *reinterpret_cast<const npu_set_ifm_broadcast_t*>(in);
14493             op = "NPU_SET_IFM_BROADCAST";
14494             v.disassemble(fields);
14495             break;
14496         }
14497         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1):
14498         {
14499             const npu_set_ofm_width_m1_t& v = *reinterpret_cast<const npu_set_ofm_width_m1_t*>(in);
14500             op = "NPU_SET_OFM_WIDTH_M1";
14501             v.disassemble(fields);
14502             break;
14503         }
14504         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1):
14505         {
14506             const npu_set_ofm_height_m1_t& v = *reinterpret_cast<const npu_set_ofm_height_m1_t*>(in);
14507             op = "NPU_SET_OFM_HEIGHT_M1";
14508             v.disassemble(fields);
14509             break;
14510         }
14511         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1):
14512         {
14513             const npu_set_ofm_depth_m1_t& v = *reinterpret_cast<const npu_set_ofm_depth_m1_t*>(in);
14514             op = "NPU_SET_OFM_DEPTH_M1";
14515             v.disassemble(fields);
14516             break;
14517         }
14518         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION):
14519         {
14520             const npu_set_ofm_precision_t& v = *reinterpret_cast<const npu_set_ofm_precision_t*>(in);
14521             op = "NPU_SET_OFM_PRECISION";
14522             v.disassemble(fields);
14523             break;
14524         }
14525         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1):
14526         {
14527             const npu_set_ofm_blk_width_m1_t& v = *reinterpret_cast<const npu_set_ofm_blk_width_m1_t*>(in);
14528             op = "NPU_SET_OFM_BLK_WIDTH_M1";
14529             v.disassemble(fields);
14530             break;
14531         }
14532         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1):
14533         {
14534             const npu_set_ofm_blk_height_m1_t& v = *reinterpret_cast<const npu_set_ofm_blk_height_m1_t*>(in);
14535             op = "NPU_SET_OFM_BLK_HEIGHT_M1";
14536             v.disassemble(fields);
14537             break;
14538         }
14539         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1):
14540         {
14541             const npu_set_ofm_blk_depth_m1_t& v = *reinterpret_cast<const npu_set_ofm_blk_depth_m1_t*>(in);
14542             op = "NPU_SET_OFM_BLK_DEPTH_M1";
14543             v.disassemble(fields);
14544             break;
14545         }
14546         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT):
14547         {
14548             const npu_set_ofm_zero_point_t& v = *reinterpret_cast<const npu_set_ofm_zero_point_t*>(in);
14549             op = "NPU_SET_OFM_ZERO_POINT";
14550             v.disassemble(fields);
14551             break;
14552         }
14553         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1):
14554         {
14555             const npu_set_ofm_width0_m1_t& v = *reinterpret_cast<const npu_set_ofm_width0_m1_t*>(in);
14556             op = "NPU_SET_OFM_WIDTH0_M1";
14557             v.disassemble(fields);
14558             break;
14559         }
14560         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1):
14561         {
14562             const npu_set_ofm_height0_m1_t& v = *reinterpret_cast<const npu_set_ofm_height0_m1_t*>(in);
14563             op = "NPU_SET_OFM_HEIGHT0_M1";
14564             v.disassemble(fields);
14565             break;
14566         }
14567         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1):
14568         {
14569             const npu_set_ofm_height1_m1_t& v = *reinterpret_cast<const npu_set_ofm_height1_m1_t*>(in);
14570             op = "NPU_SET_OFM_HEIGHT1_M1";
14571             v.disassemble(fields);
14572             break;
14573         }
14574         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION):
14575         {
14576             const npu_set_ofm_region_t& v = *reinterpret_cast<const npu_set_ofm_region_t*>(in);
14577             op = "NPU_SET_OFM_REGION";
14578             v.disassemble(fields);
14579             break;
14580         }
14581         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1):
14582         {
14583             const npu_set_kernel_width_m1_t& v = *reinterpret_cast<const npu_set_kernel_width_m1_t*>(in);
14584             op = "NPU_SET_KERNEL_WIDTH_M1";
14585             v.disassemble(fields);
14586             break;
14587         }
14588         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1):
14589         {
14590             const npu_set_kernel_height_m1_t& v = *reinterpret_cast<const npu_set_kernel_height_m1_t*>(in);
14591             op = "NPU_SET_KERNEL_HEIGHT_M1";
14592             v.disassemble(fields);
14593             break;
14594         }
14595         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE):
14596         {
14597             const npu_set_kernel_stride_t& v = *reinterpret_cast<const npu_set_kernel_stride_t*>(in);
14598             op = "NPU_SET_KERNEL_STRIDE";
14599             v.disassemble(fields);
14600             break;
14601         }
14602         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT):
14603         {
14604             const npu_set_acc_format_t& v = *reinterpret_cast<const npu_set_acc_format_t*>(in);
14605             op = "NPU_SET_ACC_FORMAT";
14606             v.disassemble(fields);
14607             break;
14608         }
14609         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION):
14610         {
14611             const npu_set_activation_t& v = *reinterpret_cast<const npu_set_activation_t*>(in);
14612             op = "NPU_SET_ACTIVATION";
14613             v.disassemble(fields);
14614             break;
14615         }
14616         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN):
14617         {
14618             const npu_set_activation_min_t& v = *reinterpret_cast<const npu_set_activation_min_t*>(in);
14619             op = "NPU_SET_ACTIVATION_MIN";
14620             v.disassemble(fields);
14621             break;
14622         }
14623         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX):
14624         {
14625             const npu_set_activation_max_t& v = *reinterpret_cast<const npu_set_activation_max_t*>(in);
14626             op = "NPU_SET_ACTIVATION_MAX";
14627             v.disassemble(fields);
14628             break;
14629         }
14630         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION):
14631         {
14632             const npu_set_weight_region_t& v = *reinterpret_cast<const npu_set_weight_region_t*>(in);
14633             op = "NPU_SET_WEIGHT_REGION";
14634             v.disassemble(fields);
14635             break;
14636         }
14637         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION):
14638         {
14639             const npu_set_scale_region_t& v = *reinterpret_cast<const npu_set_scale_region_t*>(in);
14640             op = "NPU_SET_SCALE_REGION";
14641             v.disassemble(fields);
14642             break;
14643         }
14644         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_FORMAT):
14645         {
14646             const npu_set_weight_format_t& v = *reinterpret_cast<const npu_set_weight_format_t*>(in);
14647             op = "NPU_SET_WEIGHT_FORMAT";
14648             v.disassemble(fields);
14649             break;
14650         }
14651         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP):
14652         {
14653             const npu_set_blockdep_t& v = *reinterpret_cast<const npu_set_blockdep_t*>(in);
14654             op = "NPU_SET_BLOCKDEP";
14655             v.disassemble(fields);
14656             break;
14657         }
14658         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_SCALE_N_M1):
14659         {
14660             const npu_set_resize_x_scale_n_m1_t& v = *reinterpret_cast<const npu_set_resize_x_scale_n_m1_t*>(in);
14661             op = "NPU_SET_RESIZE_X_SCALE_N_M1";
14662             v.disassemble(fields);
14663             break;
14664         }
14665         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_SCALE_N_M1):
14666         {
14667             const npu_set_resize_y_scale_n_m1_t& v = *reinterpret_cast<const npu_set_resize_y_scale_n_m1_t*>(in);
14668             op = "NPU_SET_RESIZE_Y_SCALE_N_M1";
14669             v.disassemble(fields);
14670             break;
14671         }
14672         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_OFFSET):
14673         {
14674             const npu_set_resize_x_offset_t& v = *reinterpret_cast<const npu_set_resize_x_offset_t*>(in);
14675             op = "NPU_SET_RESIZE_X_OFFSET";
14676             v.disassemble(fields);
14677             break;
14678         }
14679         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_OFFSET):
14680         {
14681             const npu_set_resize_y_offset_t& v = *reinterpret_cast<const npu_set_resize_y_offset_t*>(in);
14682             op = "NPU_SET_RESIZE_Y_OFFSET";
14683             v.disassemble(fields);
14684             break;
14685         }
14686         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION):
14687         {
14688             const npu_set_dma0_src_region_t& v = *reinterpret_cast<const npu_set_dma0_src_region_t*>(in);
14689             op = "NPU_SET_DMA0_SRC_REGION";
14690             v.disassemble(fields);
14691             break;
14692         }
14693         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION):
14694         {
14695             const npu_set_dma0_dst_region_t& v = *reinterpret_cast<const npu_set_dma0_dst_region_t*>(in);
14696             op = "NPU_SET_DMA0_DST_REGION";
14697             v.disassemble(fields);
14698             break;
14699         }
14700         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0):
14701         {
14702             const npu_set_dma0_size0_t& v = *reinterpret_cast<const npu_set_dma0_size0_t*>(in);
14703             op = "NPU_SET_DMA0_SIZE0";
14704             v.disassemble(fields);
14705             break;
14706         }
14707         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1):
14708         {
14709             const npu_set_dma0_size1_t& v = *reinterpret_cast<const npu_set_dma0_size1_t*>(in);
14710             op = "NPU_SET_DMA0_SIZE1";
14711             v.disassemble(fields);
14712             break;
14713         }
14714         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_IDX_REGION):
14715         {
14716             const npu_set_dma0_idx_region_t& v = *reinterpret_cast<const npu_set_dma0_idx_region_t*>(in);
14717             op = "NPU_SET_DMA0_IDX_REGION";
14718             v.disassemble(fields);
14719             break;
14720         }
14721         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST):
14722         {
14723             const npu_set_ifm2_broadcast_t& v = *reinterpret_cast<const npu_set_ifm2_broadcast_t*>(in);
14724             op = "NPU_SET_IFM2_BROADCAST";
14725             v.disassemble(fields);
14726             break;
14727         }
14728         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION):
14729         {
14730             const npu_set_ifm2_precision_t& v = *reinterpret_cast<const npu_set_ifm2_precision_t*>(in);
14731             op = "NPU_SET_IFM2_PRECISION";
14732             v.disassemble(fields);
14733             break;
14734         }
14735         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT):
14736         {
14737             const npu_set_ifm2_zero_point_t& v = *reinterpret_cast<const npu_set_ifm2_zero_point_t*>(in);
14738             op = "NPU_SET_IFM2_ZERO_POINT";
14739             v.disassemble(fields);
14740             break;
14741         }
14742         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1):
14743         {
14744             const npu_set_ifm2_width0_m1_t& v = *reinterpret_cast<const npu_set_ifm2_width0_m1_t*>(in);
14745             op = "NPU_SET_IFM2_WIDTH0_M1";
14746             v.disassemble(fields);
14747             break;
14748         }
14749         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1):
14750         {
14751             const npu_set_ifm2_height0_m1_t& v = *reinterpret_cast<const npu_set_ifm2_height0_m1_t*>(in);
14752             op = "NPU_SET_IFM2_HEIGHT0_M1";
14753             v.disassemble(fields);
14754             break;
14755         }
14756         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1):
14757         {
14758             const npu_set_ifm2_height1_m1_t& v = *reinterpret_cast<const npu_set_ifm2_height1_m1_t*>(in);
14759             op = "NPU_SET_IFM2_HEIGHT1_M1";
14760             v.disassemble(fields);
14761             break;
14762         }
14763         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION):
14764         {
14765             const npu_set_ifm2_region_t& v = *reinterpret_cast<const npu_set_ifm2_region_t*>(in);
14766             op = "NPU_SET_IFM2_REGION";
14767             v.disassemble(fields);
14768             break;
14769         }
14770         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0):
14771         {
14772             const npu_set_ifm_base0_t& v = *reinterpret_cast<const npu_set_ifm_base0_t*>(in);
14773             op = "NPU_SET_IFM_BASE0";
14774             v.disassemble(fields);
14775             break;
14776         }
14777         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1):
14778         {
14779             const npu_set_ifm_base1_t& v = *reinterpret_cast<const npu_set_ifm_base1_t*>(in);
14780             op = "NPU_SET_IFM_BASE1";
14781             v.disassemble(fields);
14782             break;
14783         }
14784         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2):
14785         {
14786             const npu_set_ifm_base2_t& v = *reinterpret_cast<const npu_set_ifm_base2_t*>(in);
14787             op = "NPU_SET_IFM_BASE2";
14788             v.disassemble(fields);
14789             break;
14790         }
14791         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3):
14792         {
14793             const npu_set_ifm_base3_t& v = *reinterpret_cast<const npu_set_ifm_base3_t*>(in);
14794             op = "NPU_SET_IFM_BASE3";
14795             v.disassemble(fields);
14796             break;
14797         }
14798         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X):
14799         {
14800             const npu_set_ifm_stride_x_t& v = *reinterpret_cast<const npu_set_ifm_stride_x_t*>(in);
14801             op = "NPU_SET_IFM_STRIDE_X";
14802             v.disassemble(fields);
14803             break;
14804         }
14805         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y):
14806         {
14807             const npu_set_ifm_stride_y_t& v = *reinterpret_cast<const npu_set_ifm_stride_y_t*>(in);
14808             op = "NPU_SET_IFM_STRIDE_Y";
14809             v.disassemble(fields);
14810             break;
14811         }
14812         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C):
14813         {
14814             const npu_set_ifm_stride_c_t& v = *reinterpret_cast<const npu_set_ifm_stride_c_t*>(in);
14815             op = "NPU_SET_IFM_STRIDE_C";
14816             v.disassemble(fields);
14817             break;
14818         }
14819         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0):
14820         {
14821             const npu_set_ofm_base0_t& v = *reinterpret_cast<const npu_set_ofm_base0_t*>(in);
14822             op = "NPU_SET_OFM_BASE0";
14823             v.disassemble(fields);
14824             break;
14825         }
14826         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1):
14827         {
14828             const npu_set_ofm_base1_t& v = *reinterpret_cast<const npu_set_ofm_base1_t*>(in);
14829             op = "NPU_SET_OFM_BASE1";
14830             v.disassemble(fields);
14831             break;
14832         }
14833         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2):
14834         {
14835             const npu_set_ofm_base2_t& v = *reinterpret_cast<const npu_set_ofm_base2_t*>(in);
14836             op = "NPU_SET_OFM_BASE2";
14837             v.disassemble(fields);
14838             break;
14839         }
14840         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3):
14841         {
14842             const npu_set_ofm_base3_t& v = *reinterpret_cast<const npu_set_ofm_base3_t*>(in);
14843             op = "NPU_SET_OFM_BASE3";
14844             v.disassemble(fields);
14845             break;
14846         }
14847         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X):
14848         {
14849             const npu_set_ofm_stride_x_t& v = *reinterpret_cast<const npu_set_ofm_stride_x_t*>(in);
14850             op = "NPU_SET_OFM_STRIDE_X";
14851             v.disassemble(fields);
14852             break;
14853         }
14854         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y):
14855         {
14856             const npu_set_ofm_stride_y_t& v = *reinterpret_cast<const npu_set_ofm_stride_y_t*>(in);
14857             op = "NPU_SET_OFM_STRIDE_Y";
14858             v.disassemble(fields);
14859             break;
14860         }
14861         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C):
14862         {
14863             const npu_set_ofm_stride_c_t& v = *reinterpret_cast<const npu_set_ofm_stride_c_t*>(in);
14864             op = "NPU_SET_OFM_STRIDE_C";
14865             v.disassemble(fields);
14866             break;
14867         }
14868         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE):
14869         {
14870             const npu_set_weight_base_t& v = *reinterpret_cast<const npu_set_weight_base_t*>(in);
14871             op = "NPU_SET_WEIGHT_BASE";
14872             v.disassemble(fields);
14873             break;
14874         }
14875         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH):
14876         {
14877             const npu_set_weight_length_t& v = *reinterpret_cast<const npu_set_weight_length_t*>(in);
14878             op = "NPU_SET_WEIGHT_LENGTH";
14879             v.disassemble(fields);
14880             break;
14881         }
14882         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE):
14883         {
14884             const npu_set_scale_base_t& v = *reinterpret_cast<const npu_set_scale_base_t*>(in);
14885             op = "NPU_SET_SCALE_BASE";
14886             v.disassemble(fields);
14887             break;
14888         }
14889         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH):
14890         {
14891             const npu_set_scale_length_t& v = *reinterpret_cast<const npu_set_scale_length_t*>(in);
14892             op = "NPU_SET_SCALE_LENGTH";
14893             v.disassemble(fields);
14894             break;
14895         }
14896         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE):
14897         {
14898             const npu_set_ofm_scale_t& v = *reinterpret_cast<const npu_set_ofm_scale_t*>(in);
14899             op = "NPU_SET_OFM_SCALE";
14900             v.disassemble(fields);
14901             break;
14902         }
14903         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_SCALE):
14904         {
14905             const npu_set_ifm_scale_t& v = *reinterpret_cast<const npu_set_ifm_scale_t*>(in);
14906             op = "NPU_SET_IFM_SCALE";
14907             v.disassemble(fields);
14908             break;
14909         }
14910         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_SCALE):
14911         {
14912             const npu_set_ifm2_scale_t& v = *reinterpret_cast<const npu_set_ifm2_scale_t*>(in);
14913             op = "NPU_SET_IFM2_SCALE";
14914             v.disassemble(fields);
14915             break;
14916         }
14917         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OP_SCALAR):
14918         {
14919             const npu_set_op_scalar_t& v = *reinterpret_cast<const npu_set_op_scalar_t*>(in);
14920             op = "NPU_SET_OP_SCALAR";
14921             v.disassemble(fields);
14922             break;
14923         }
14924         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC):
14925         {
14926             const npu_set_dma0_src_t& v = *reinterpret_cast<const npu_set_dma0_src_t*>(in);
14927             op = "NPU_SET_DMA0_SRC";
14928             v.disassemble(fields);
14929             break;
14930         }
14931         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST):
14932         {
14933             const npu_set_dma0_dst_t& v = *reinterpret_cast<const npu_set_dma0_dst_t*>(in);
14934             op = "NPU_SET_DMA0_DST";
14935             v.disassemble(fields);
14936             break;
14937         }
14938         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN):
14939         {
14940             const npu_set_dma0_len_t& v = *reinterpret_cast<const npu_set_dma0_len_t*>(in);
14941             op = "NPU_SET_DMA0_LEN";
14942             v.disassemble(fields);
14943             break;
14944         }
14945         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE0):
14946         {
14947             const npu_set_dma0_src_stride0_t& v = *reinterpret_cast<const npu_set_dma0_src_stride0_t*>(in);
14948             op = "NPU_SET_DMA0_SRC_STRIDE0";
14949             v.disassemble(fields);
14950             break;
14951         }
14952         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE1):
14953         {
14954             const npu_set_dma0_src_stride1_t& v = *reinterpret_cast<const npu_set_dma0_src_stride1_t*>(in);
14955             op = "NPU_SET_DMA0_SRC_STRIDE1";
14956             v.disassemble(fields);
14957             break;
14958         }
14959         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE0):
14960         {
14961             const npu_set_dma0_dst_stride0_t& v = *reinterpret_cast<const npu_set_dma0_dst_stride0_t*>(in);
14962             op = "NPU_SET_DMA0_DST_STRIDE0";
14963             v.disassemble(fields);
14964             break;
14965         }
14966         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE1):
14967         {
14968             const npu_set_dma0_dst_stride1_t& v = *reinterpret_cast<const npu_set_dma0_dst_stride1_t*>(in);
14969             op = "NPU_SET_DMA0_DST_STRIDE1";
14970             v.disassemble(fields);
14971             break;
14972         }
14973         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX):
14974         {
14975             const npu_set_dma0_idx_t& v = *reinterpret_cast<const npu_set_dma0_idx_t*>(in);
14976             op = "NPU_SET_DMA0_IDX";
14977             v.disassemble(fields);
14978             break;
14979         }
14980         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_MAX):
14981         {
14982             const npu_set_dma0_idx_max_t& v = *reinterpret_cast<const npu_set_dma0_idx_max_t*>(in);
14983             op = "NPU_SET_DMA0_IDX_MAX";
14984             v.disassemble(fields);
14985             break;
14986         }
14987         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_SKIP1):
14988         {
14989             const npu_set_dma0_idx_skip1_t& v = *reinterpret_cast<const npu_set_dma0_idx_skip1_t*>(in);
14990             op = "NPU_SET_DMA0_IDX_SKIP1";
14991             v.disassemble(fields);
14992             break;
14993         }
14994         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0):
14995         {
14996             const npu_set_ifm2_base0_t& v = *reinterpret_cast<const npu_set_ifm2_base0_t*>(in);
14997             op = "NPU_SET_IFM2_BASE0";
14998             v.disassemble(fields);
14999             break;
15000         }
15001         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1):
15002         {
15003             const npu_set_ifm2_base1_t& v = *reinterpret_cast<const npu_set_ifm2_base1_t*>(in);
15004             op = "NPU_SET_IFM2_BASE1";
15005             v.disassemble(fields);
15006             break;
15007         }
15008         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2):
15009         {
15010             const npu_set_ifm2_base2_t& v = *reinterpret_cast<const npu_set_ifm2_base2_t*>(in);
15011             op = "NPU_SET_IFM2_BASE2";
15012             v.disassemble(fields);
15013             break;
15014         }
15015         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3):
15016         {
15017             const npu_set_ifm2_base3_t& v = *reinterpret_cast<const npu_set_ifm2_base3_t*>(in);
15018             op = "NPU_SET_IFM2_BASE3";
15019             v.disassemble(fields);
15020             break;
15021         }
15022         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X):
15023         {
15024             const npu_set_ifm2_stride_x_t& v = *reinterpret_cast<const npu_set_ifm2_stride_x_t*>(in);
15025             op = "NPU_SET_IFM2_STRIDE_X";
15026             v.disassemble(fields);
15027             break;
15028         }
15029         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y):
15030         {
15031             const npu_set_ifm2_stride_y_t& v = *reinterpret_cast<const npu_set_ifm2_stride_y_t*>(in);
15032             op = "NPU_SET_IFM2_STRIDE_Y";
15033             v.disassemble(fields);
15034             break;
15035         }
15036         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C):
15037         {
15038             const npu_set_ifm2_stride_c_t& v = *reinterpret_cast<const npu_set_ifm2_stride_c_t*>(in);
15039             op = "NPU_SET_IFM2_STRIDE_C";
15040             v.disassemble(fields);
15041             break;
15042         }
15043         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE):
15044         {
15045             const npu_set_weight1_base_t& v = *reinterpret_cast<const npu_set_weight1_base_t*>(in);
15046             op = "NPU_SET_WEIGHT1_BASE";
15047             v.disassemble(fields);
15048             break;
15049         }
15050         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH):
15051         {
15052             const npu_set_weight1_length_t& v = *reinterpret_cast<const npu_set_weight1_length_t*>(in);
15053             op = "NPU_SET_WEIGHT1_LENGTH";
15054             v.disassemble(fields);
15055             break;
15056         }
15057         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_BASE):
15058         {
15059             const npu_set_weight2_base_t& v = *reinterpret_cast<const npu_set_weight2_base_t*>(in);
15060             op = "NPU_SET_WEIGHT2_BASE";
15061             v.disassemble(fields);
15062             break;
15063         }
15064         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_LENGTH):
15065         {
15066             const npu_set_weight2_length_t& v = *reinterpret_cast<const npu_set_weight2_length_t*>(in);
15067             op = "NPU_SET_WEIGHT2_LENGTH";
15068             v.disassemble(fields);
15069             break;
15070         }
15071         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_BASE):
15072         {
15073             const npu_set_weight3_base_t& v = *reinterpret_cast<const npu_set_weight3_base_t*>(in);
15074             op = "NPU_SET_WEIGHT3_BASE";
15075             v.disassemble(fields);
15076             break;
15077         }
15078         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_LENGTH):
15079         {
15080             const npu_set_weight3_length_t& v = *reinterpret_cast<const npu_set_weight3_length_t*>(in);
15081             op = "NPU_SET_WEIGHT3_LENGTH";
15082             v.disassemble(fields);
15083             break;
15084         }
15085         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_X):
15086         {
15087             const npu_set_resize_x_step_t& v = *reinterpret_cast<const npu_set_resize_x_step_t*>(in);
15088             op = "NPU_SET_RESIZE_X_STEP";
15089             v.disassemble(fields);
15090             break;
15091         }
15092         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_Y):
15093         {
15094             const npu_set_resize_y_step_t& v = *reinterpret_cast<const npu_set_resize_y_step_t*>(in);
15095             op = "NPU_SET_RESIZE_Y_STEP";
15096             v.disassemble(fields);
15097             break;
15098         }
15099         case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) | static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_OP_BRANCH):
15100         {
15101             const npu_op_branch_t& v = *reinterpret_cast<const npu_op_branch_t*>(in);
15102             op = "NPU_OP_BRANCH";
15103             v.disassemble(fields);
15104             break;
15105         }
15106         default: break;
15107     }
15108     return (*in & (3<<14)) != 0 ? 2 : 1;
15109 }
15110 #endif
15111 #endif
15112 // Signal the end of command stream
15113 struct npu_op_stop_t
15114 {
15115 #ifdef __cplusplus
15116 private:
15117 #endif
15118     uint32_t opcode:10; //  opcode
15119     uint32_t reserved0:4;
15120     uint32_t control:2; //  control
15121     uint32_t mask:16; //  Encoding for 16-bit mask value
15122 #ifdef __cplusplus
15123 public:
npu_op_stop_tisa::npu_op_stop_t15124     npu_op_stop_t(uint32_t _mask) :
15125         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP)),
15126         reserved0(0),
15127         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15128         mask(_mask & ((1U << 16)-1))
15129     {}
npu_op_stop_tisa::npu_op_stop_t15130     CONSTEXPR npu_op_stop_t() :
15131         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP)),
15132         reserved0(0),
15133         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15134         mask(0)
15135     {}
validisa::npu_op_stop_t15136     CONSTEXPR bool valid() const
15137     {
15138         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15139     }
initisa::npu_op_stop_t15140     CONSTEXPR void init()
15141     {
15142         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15143     }
uint32_tisa::npu_op_stop_t15144     operator uint32_t()
15145     {
15146         uint32_t word = 0;
15147         word |= uint32_t(opcode) << 0;
15148         word |= uint32_t(control) << 14;
15149         word |= uint32_t(mask) << 16;
15150         return word;
15151     }
get_opcodeisa::npu_op_stop_t15152     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15153     {
15154         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15155     }
set_opcodeisa::npu_op_stop_t15156     CONSTEXPR npu_op_stop_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15157     {
15158         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15159         return *this;
15160     }
get_controlisa::npu_op_stop_t15161     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15162     {
15163         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15164     }
set_controlisa::npu_op_stop_t15165     CONSTEXPR npu_op_stop_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15166     {
15167         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15168         return *this;
15169     }
get_maskisa::npu_op_stop_t15170     CONSTEXPR uint32_t get_mask() const
15171     {
15172         return static_cast<uint32_t>(mask);
15173     }
set_maskisa::npu_op_stop_t15174     CONSTEXPR npu_op_stop_t& set_mask(uint32_t value)
15175     {
15176         assert((value >> 16) == 0);
15177         mask = static_cast<uint16_t>(value & ((1U << 16)-1));
15178         return *this;
15179     }
15180 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_stop_t15181     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15182     {
15183         fields.push_back(std::make_pair<std::string, std::string>("mask", std::to_string(mask)));
15184     }
15185 #endif
15186 #endif
15187 };
15188 // Raises an IRQ to the host
15189 struct npu_op_irq_t
15190 {
15191 #ifdef __cplusplus
15192 private:
15193 #endif
15194     uint32_t opcode:10; //  opcode
15195     uint32_t reserved0:4;
15196     uint32_t control:2; //  control
15197     uint32_t mask:16; //  Encoding for 16-bit mask value
15198 #ifdef __cplusplus
15199 public:
npu_op_irq_tisa::npu_op_irq_t15200     npu_op_irq_t(uint32_t _mask) :
15201         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ)),
15202         reserved0(0),
15203         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15204         mask(_mask & ((1U << 16)-1))
15205     {}
npu_op_irq_tisa::npu_op_irq_t15206     CONSTEXPR npu_op_irq_t() :
15207         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ)),
15208         reserved0(0),
15209         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15210         mask(0)
15211     {}
validisa::npu_op_irq_t15212     CONSTEXPR bool valid() const
15213     {
15214         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15215     }
initisa::npu_op_irq_t15216     CONSTEXPR void init()
15217     {
15218         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15219     }
uint32_tisa::npu_op_irq_t15220     operator uint32_t()
15221     {
15222         uint32_t word = 0;
15223         word |= uint32_t(opcode) << 0;
15224         word |= uint32_t(control) << 14;
15225         word |= uint32_t(mask) << 16;
15226         return word;
15227     }
get_opcodeisa::npu_op_irq_t15228     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15229     {
15230         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15231     }
set_opcodeisa::npu_op_irq_t15232     CONSTEXPR npu_op_irq_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15233     {
15234         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15235         return *this;
15236     }
get_controlisa::npu_op_irq_t15237     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15238     {
15239         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15240     }
set_controlisa::npu_op_irq_t15241     CONSTEXPR npu_op_irq_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15242     {
15243         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15244         return *this;
15245     }
get_maskisa::npu_op_irq_t15246     CONSTEXPR uint32_t get_mask() const
15247     {
15248         return static_cast<uint32_t>(mask);
15249     }
set_maskisa::npu_op_irq_t15250     CONSTEXPR npu_op_irq_t& set_mask(uint32_t value)
15251     {
15252         assert((value >> 16) == 0);
15253         mask = static_cast<uint16_t>(value & ((1U << 16)-1));
15254         return *this;
15255     }
15256 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_irq_t15257     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15258     {
15259         fields.push_back(std::make_pair<std::string, std::string>("mask", std::to_string(mask)));
15260     }
15261 #endif
15262 #endif
15263 };
15264 // 2D convolution
15265 struct npu_op_conv_t
15266 {
15267 #ifdef __cplusplus
15268 private:
15269 #endif
15270     uint32_t opcode:10; //  opcode
15271     uint32_t reserved0:4;
15272     uint32_t control:2; //  control
15273     uint32_t weights_ifm2:1; //  Read weights from IFM2 rather than a static compressed stream
15274     uint32_t reserved1:15;
15275 #ifdef __cplusplus
15276 public:
npu_op_conv_tisa::npu_op_conv_t15277     npu_op_conv_t(uint32_t _weights_ifm2) :
15278         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV)),
15279         reserved0(0),
15280         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15281         weights_ifm2(_weights_ifm2 & ((1U << 1)-1)),
15282         reserved1(0)
15283     {}
npu_op_conv_tisa::npu_op_conv_t15284     CONSTEXPR npu_op_conv_t() :
15285         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV)),
15286         reserved0(0),
15287         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15288         weights_ifm2(0),
15289         reserved1(0)
15290     {}
validisa::npu_op_conv_t15291     CONSTEXPR bool valid() const
15292     {
15293         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15294     }
initisa::npu_op_conv_t15295     CONSTEXPR void init()
15296     {
15297         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15298     }
uint32_tisa::npu_op_conv_t15299     operator uint32_t()
15300     {
15301         uint32_t word = 0;
15302         word |= uint32_t(opcode) << 0;
15303         word |= uint32_t(control) << 14;
15304         word |= uint32_t(weights_ifm2) << 16;
15305         return word;
15306     }
get_opcodeisa::npu_op_conv_t15307     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15308     {
15309         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15310     }
set_opcodeisa::npu_op_conv_t15311     CONSTEXPR npu_op_conv_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15312     {
15313         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15314         return *this;
15315     }
get_controlisa::npu_op_conv_t15316     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15317     {
15318         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15319     }
set_controlisa::npu_op_conv_t15320     CONSTEXPR npu_op_conv_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15321     {
15322         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15323         return *this;
15324     }
get_weights_ifm2isa::npu_op_conv_t15325     CONSTEXPR uint32_t get_weights_ifm2() const
15326     {
15327         return static_cast<uint32_t>(weights_ifm2);
15328     }
set_weights_ifm2isa::npu_op_conv_t15329     CONSTEXPR npu_op_conv_t& set_weights_ifm2(uint32_t value)
15330     {
15331         assert((value >> 1) == 0);
15332         weights_ifm2 = static_cast<uint8_t>(value & ((1U << 1)-1));
15333         return *this;
15334     }
15335 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_conv_t15336     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15337     {
15338         fields.push_back(std::make_pair<std::string, std::string>("weights_ifm2", std::to_string(weights_ifm2)));
15339     }
15340 #endif
15341 #endif
15342 };
15343 // Depth-wise 2D convolution
15344 struct npu_op_depthwise_t
15345 {
15346 #ifdef __cplusplus
15347 private:
15348 #endif
15349     uint32_t opcode:10; //  opcode
15350     uint32_t reserved0:4;
15351     uint32_t control:2; //  control
15352     uint32_t reserved1:16;
15353 #ifdef __cplusplus
15354 public:
npu_op_depthwise_tisa::npu_op_depthwise_t15355     CONSTEXPR npu_op_depthwise_t() :
15356         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE)),
15357         reserved0(0),
15358         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15359         reserved1(0)
15360     {}
validisa::npu_op_depthwise_t15361     CONSTEXPR bool valid() const
15362     {
15363         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15364     }
initisa::npu_op_depthwise_t15365     CONSTEXPR void init()
15366     {
15367         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15368     }
uint32_tisa::npu_op_depthwise_t15369     operator uint32_t()
15370     {
15371         uint32_t word = 0;
15372         word |= uint32_t(opcode) << 0;
15373         word |= uint32_t(control) << 14;
15374         return word;
15375     }
get_opcodeisa::npu_op_depthwise_t15376     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15377     {
15378         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15379     }
set_opcodeisa::npu_op_depthwise_t15380     CONSTEXPR npu_op_depthwise_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15381     {
15382         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15383         return *this;
15384     }
get_controlisa::npu_op_depthwise_t15385     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15386     {
15387         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15388     }
set_controlisa::npu_op_depthwise_t15389     CONSTEXPR npu_op_depthwise_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15390     {
15391         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15392         return *this;
15393     }
15394 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_depthwise_t15395     void disassemble(std::vector<std::pair<std::string, std::string>>&) const
15396     {
15397     }
15398 #endif
15399 #endif
15400 };
15401 // Pooling
15402 struct npu_op_pool_t
15403 {
15404 #ifdef __cplusplus
15405 private:
15406 #endif
15407     uint32_t opcode:10; //  opcode
15408     uint32_t reserved0:4;
15409     uint32_t control:2; //  control
15410     uint32_t pooling_mode:3; //  Pooling mode
15411     uint32_t reserved1:13;
15412 #ifdef __cplusplus
15413 public:
npu_op_pool_tisa::npu_op_pool_t15414     npu_op_pool_t(NPU_NAMESPACE::pooling_mode _pooling_mode) :
15415         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL)),
15416         reserved0(0),
15417         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15418         pooling_mode(static_cast<uint8_t>(_pooling_mode) & ((1U << 3)-1)),
15419         reserved1(0)
15420     {}
npu_op_pool_tisa::npu_op_pool_t15421     CONSTEXPR npu_op_pool_t() :
15422         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL)),
15423         reserved0(0),
15424         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15425         pooling_mode(0),
15426         reserved1(0)
15427     {}
validisa::npu_op_pool_t15428     CONSTEXPR bool valid() const
15429     {
15430         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15431     }
initisa::npu_op_pool_t15432     CONSTEXPR void init()
15433     {
15434         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15435     }
uint32_tisa::npu_op_pool_t15436     operator uint32_t()
15437     {
15438         uint32_t word = 0;
15439         word |= uint32_t(opcode) << 0;
15440         word |= uint32_t(control) << 14;
15441         word |= uint32_t(pooling_mode) << 16;
15442         return word;
15443     }
get_opcodeisa::npu_op_pool_t15444     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15445     {
15446         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15447     }
set_opcodeisa::npu_op_pool_t15448     CONSTEXPR npu_op_pool_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15449     {
15450         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15451         return *this;
15452     }
get_controlisa::npu_op_pool_t15453     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15454     {
15455         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15456     }
set_controlisa::npu_op_pool_t15457     CONSTEXPR npu_op_pool_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15458     {
15459         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15460         return *this;
15461     }
get_pooling_modeisa::npu_op_pool_t15462     CONSTEXPR NPU_NAMESPACE::pooling_mode get_pooling_mode() const
15463     {
15464         return static_cast<NPU_NAMESPACE::pooling_mode>(pooling_mode);
15465     }
set_pooling_modeisa::npu_op_pool_t15466     CONSTEXPR npu_op_pool_t& set_pooling_mode(NPU_NAMESPACE::pooling_mode value)
15467     {
15468         pooling_mode = static_cast<uint8_t>(value) & ((1U << 3)-1);
15469         return *this;
15470     }
15471 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_pool_t15472     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15473     {
15474         fields.push_back(std::make_pair<std::string, std::string>("pooling_mode", (pooling_mode < (sizeof(pooling_mode_str)/sizeof(pooling_mode_str[0])) ? pooling_mode_str[pooling_mode] : "****")));
15475     }
15476 #endif
15477 #endif
15478 };
15479 // Elementwise operation
15480 struct npu_op_elementwise_t
15481 {
15482 #ifdef __cplusplus
15483 private:
15484 #endif
15485     uint32_t opcode:10; //  opcode
15486     uint32_t reserved0:4;
15487     uint32_t control:2; //  control
15488     uint32_t elementwise_mode:6; //  Elementwise mode
15489     uint32_t reserved1:10;
15490 #ifdef __cplusplus
15491 public:
npu_op_elementwise_tisa::npu_op_elementwise_t15492     npu_op_elementwise_t(NPU_NAMESPACE::elementwise_mode _elementwise_mode) :
15493         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE)),
15494         reserved0(0),
15495         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15496         elementwise_mode(static_cast<uint8_t>(_elementwise_mode) & ((1U << 6)-1)),
15497         reserved1(0)
15498     {}
npu_op_elementwise_tisa::npu_op_elementwise_t15499     CONSTEXPR npu_op_elementwise_t() :
15500         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE)),
15501         reserved0(0),
15502         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15503         elementwise_mode(0),
15504         reserved1(0)
15505     {}
validisa::npu_op_elementwise_t15506     CONSTEXPR bool valid() const
15507     {
15508         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15509     }
initisa::npu_op_elementwise_t15510     CONSTEXPR void init()
15511     {
15512         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15513     }
uint32_tisa::npu_op_elementwise_t15514     operator uint32_t()
15515     {
15516         uint32_t word = 0;
15517         word |= uint32_t(opcode) << 0;
15518         word |= uint32_t(control) << 14;
15519         word |= uint32_t(elementwise_mode) << 16;
15520         return word;
15521     }
get_opcodeisa::npu_op_elementwise_t15522     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15523     {
15524         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15525     }
set_opcodeisa::npu_op_elementwise_t15526     CONSTEXPR npu_op_elementwise_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15527     {
15528         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15529         return *this;
15530     }
get_controlisa::npu_op_elementwise_t15531     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15532     {
15533         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15534     }
set_controlisa::npu_op_elementwise_t15535     CONSTEXPR npu_op_elementwise_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15536     {
15537         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15538         return *this;
15539     }
get_elementwise_modeisa::npu_op_elementwise_t15540     CONSTEXPR NPU_NAMESPACE::elementwise_mode get_elementwise_mode() const
15541     {
15542         return static_cast<NPU_NAMESPACE::elementwise_mode>(elementwise_mode);
15543     }
set_elementwise_modeisa::npu_op_elementwise_t15544     CONSTEXPR npu_op_elementwise_t& set_elementwise_mode(NPU_NAMESPACE::elementwise_mode value)
15545     {
15546         elementwise_mode = static_cast<uint8_t>(value) & ((1U << 6)-1);
15547         return *this;
15548     }
15549 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_elementwise_t15550     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15551     {
15552         fields.push_back(std::make_pair<std::string, std::string>("elementwise_mode", (elementwise_mode < (sizeof(elementwise_mode_str)/sizeof(elementwise_mode_str[0])) ? elementwise_mode_str[elementwise_mode] : "****")));
15553     }
15554 #endif
15555 #endif
15556 };
15557 // Resize operation
15558 struct npu_op_resize_t
15559 {
15560 #ifdef __cplusplus
15561 private:
15562 #endif
15563     uint32_t opcode:10; //  opcode
15564     uint32_t reserved0:4;
15565     uint32_t control:2; //  control
15566     uint32_t resize_mode:2; //  Resize mode
15567     uint32_t reserved1:14;
15568 #ifdef __cplusplus
15569 public:
npu_op_resize_tisa::npu_op_resize_t15570     npu_op_resize_t(NPU_NAMESPACE::resize_mode _resize_mode) :
15571         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_RESIZE)),
15572         reserved0(0),
15573         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15574         resize_mode(static_cast<uint8_t>(_resize_mode) & ((1U << 2)-1)),
15575         reserved1(0)
15576     {}
npu_op_resize_tisa::npu_op_resize_t15577     CONSTEXPR npu_op_resize_t() :
15578         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_RESIZE)),
15579         reserved0(0),
15580         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15581         resize_mode(0),
15582         reserved1(0)
15583     {}
validisa::npu_op_resize_t15584     CONSTEXPR bool valid() const
15585     {
15586         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_RESIZE) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15587     }
initisa::npu_op_resize_t15588     CONSTEXPR void init()
15589     {
15590         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_RESIZE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15591     }
uint32_tisa::npu_op_resize_t15592     operator uint32_t()
15593     {
15594         uint32_t word = 0;
15595         word |= uint32_t(opcode) << 0;
15596         word |= uint32_t(control) << 14;
15597         word |= uint32_t(resize_mode) << 16;
15598         return word;
15599     }
get_opcodeisa::npu_op_resize_t15600     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15601     {
15602         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15603     }
set_opcodeisa::npu_op_resize_t15604     CONSTEXPR npu_op_resize_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15605     {
15606         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15607         return *this;
15608     }
get_controlisa::npu_op_resize_t15609     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15610     {
15611         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15612     }
set_controlisa::npu_op_resize_t15613     CONSTEXPR npu_op_resize_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15614     {
15615         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15616         return *this;
15617     }
get_resize_modeisa::npu_op_resize_t15618     CONSTEXPR NPU_NAMESPACE::resize_mode get_resize_mode() const
15619     {
15620         return static_cast<NPU_NAMESPACE::resize_mode>(resize_mode);
15621     }
set_resize_modeisa::npu_op_resize_t15622     CONSTEXPR npu_op_resize_t& set_resize_mode(NPU_NAMESPACE::resize_mode value)
15623     {
15624         resize_mode = static_cast<uint8_t>(value) & ((1U << 2)-1);
15625         return *this;
15626     }
15627 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_resize_t15628     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15629     {
15630         fields.push_back(std::make_pair<std::string, std::string>("resize_mode", (resize_mode < (sizeof(resize_mode_str)/sizeof(resize_mode_str[0])) ? resize_mode_str[resize_mode] : "****")));
15631     }
15632 #endif
15633 #endif
15634 };
15635 // Queue new DMA for the given channel
15636 struct npu_op_dma_start_t
15637 {
15638 #ifdef __cplusplus
15639 private:
15640 #endif
15641     uint32_t opcode:10; //  opcode
15642     uint32_t reserved0:4;
15643     uint32_t control:2; //  control
15644     uint32_t reserved1:16;
15645 #ifdef __cplusplus
15646 public:
npu_op_dma_start_tisa::npu_op_dma_start_t15647     CONSTEXPR npu_op_dma_start_t() :
15648         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START)),
15649         reserved0(0),
15650         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15651         reserved1(0)
15652     {}
validisa::npu_op_dma_start_t15653     CONSTEXPR bool valid() const
15654     {
15655         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15656     }
initisa::npu_op_dma_start_t15657     CONSTEXPR void init()
15658     {
15659         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15660     }
uint32_tisa::npu_op_dma_start_t15661     operator uint32_t()
15662     {
15663         uint32_t word = 0;
15664         word |= uint32_t(opcode) << 0;
15665         word |= uint32_t(control) << 14;
15666         return word;
15667     }
get_opcodeisa::npu_op_dma_start_t15668     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15669     {
15670         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15671     }
set_opcodeisa::npu_op_dma_start_t15672     CONSTEXPR npu_op_dma_start_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15673     {
15674         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15675         return *this;
15676     }
get_controlisa::npu_op_dma_start_t15677     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15678     {
15679         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15680     }
set_controlisa::npu_op_dma_start_t15681     CONSTEXPR npu_op_dma_start_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15682     {
15683         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15684         return *this;
15685     }
15686 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_dma_start_t15687     void disassemble(std::vector<std::pair<std::string, std::string>>&) const
15688     {
15689     }
15690 #endif
15691 #endif
15692 };
15693 // Wait for the mem2mem DMA channel to have k or fewer active descriptors outstanding
15694 struct npu_op_dma_wait_t
15695 {
15696 #ifdef __cplusplus
15697 private:
15698 #endif
15699     uint32_t opcode:10; //  opcode
15700     uint32_t reserved0:4;
15701     uint32_t control:2; //  control
15702     uint32_t k:2; //  Number of outstanding descriptors
15703     uint32_t reserved1:14;
15704 #ifdef __cplusplus
15705 public:
npu_op_dma_wait_tisa::npu_op_dma_wait_t15706     npu_op_dma_wait_t(uint32_t _k) :
15707         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT)),
15708         reserved0(0),
15709         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15710         k(_k & ((1U << 2)-1)),
15711         reserved1(0)
15712     {}
npu_op_dma_wait_tisa::npu_op_dma_wait_t15713     CONSTEXPR npu_op_dma_wait_t() :
15714         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT)),
15715         reserved0(0),
15716         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15717         k(0),
15718         reserved1(0)
15719     {}
validisa::npu_op_dma_wait_t15720     CONSTEXPR bool valid() const
15721     {
15722         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15723     }
initisa::npu_op_dma_wait_t15724     CONSTEXPR void init()
15725     {
15726         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15727     }
uint32_tisa::npu_op_dma_wait_t15728     operator uint32_t()
15729     {
15730         uint32_t word = 0;
15731         word |= uint32_t(opcode) << 0;
15732         word |= uint32_t(control) << 14;
15733         word |= uint32_t(k) << 16;
15734         return word;
15735     }
get_opcodeisa::npu_op_dma_wait_t15736     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15737     {
15738         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15739     }
set_opcodeisa::npu_op_dma_wait_t15740     CONSTEXPR npu_op_dma_wait_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15741     {
15742         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15743         return *this;
15744     }
get_controlisa::npu_op_dma_wait_t15745     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15746     {
15747         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15748     }
set_controlisa::npu_op_dma_wait_t15749     CONSTEXPR npu_op_dma_wait_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15750     {
15751         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15752         return *this;
15753     }
get_kisa::npu_op_dma_wait_t15754     CONSTEXPR uint32_t get_k() const
15755     {
15756         return static_cast<uint32_t>(k);
15757     }
set_kisa::npu_op_dma_wait_t15758     CONSTEXPR npu_op_dma_wait_t& set_k(uint32_t value)
15759     {
15760         assert((value >> 2) == 0);
15761         k = static_cast<uint8_t>(value & ((1U << 2)-1));
15762         return *this;
15763     }
15764 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_dma_wait_t15765     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15766     {
15767         fields.push_back(std::make_pair<std::string, std::string>("k", std::to_string(k)));
15768     }
15769 #endif
15770 #endif
15771 };
15772 // Wait for kernel operations to complete
15773 struct npu_op_kernel_wait_t
15774 {
15775 #ifdef __cplusplus
15776 private:
15777 #endif
15778     uint32_t opcode:10; //  opcode
15779     uint32_t reserved0:4;
15780     uint32_t control:2; //  control
15781     uint32_t n:1; //  Number of kernel operations
15782     uint32_t reserved1:15;
15783 #ifdef __cplusplus
15784 public:
npu_op_kernel_wait_tisa::npu_op_kernel_wait_t15785     npu_op_kernel_wait_t(uint32_t _n) :
15786         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT)),
15787         reserved0(0),
15788         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15789         n(_n & ((1U << 1)-1)),
15790         reserved1(0)
15791     {}
npu_op_kernel_wait_tisa::npu_op_kernel_wait_t15792     CONSTEXPR npu_op_kernel_wait_t() :
15793         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT)),
15794         reserved0(0),
15795         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15796         n(0),
15797         reserved1(0)
15798     {}
validisa::npu_op_kernel_wait_t15799     CONSTEXPR bool valid() const
15800     {
15801         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15802     }
initisa::npu_op_kernel_wait_t15803     CONSTEXPR void init()
15804     {
15805         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15806     }
uint32_tisa::npu_op_kernel_wait_t15807     operator uint32_t()
15808     {
15809         uint32_t word = 0;
15810         word |= uint32_t(opcode) << 0;
15811         word |= uint32_t(control) << 14;
15812         word |= uint32_t(n) << 16;
15813         return word;
15814     }
get_opcodeisa::npu_op_kernel_wait_t15815     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15816     {
15817         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15818     }
set_opcodeisa::npu_op_kernel_wait_t15819     CONSTEXPR npu_op_kernel_wait_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15820     {
15821         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15822         return *this;
15823     }
get_controlisa::npu_op_kernel_wait_t15824     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15825     {
15826         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15827     }
set_controlisa::npu_op_kernel_wait_t15828     CONSTEXPR npu_op_kernel_wait_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15829     {
15830         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15831         return *this;
15832     }
get_nisa::npu_op_kernel_wait_t15833     CONSTEXPR uint32_t get_n() const
15834     {
15835         return static_cast<uint32_t>(n);
15836     }
set_nisa::npu_op_kernel_wait_t15837     CONSTEXPR npu_op_kernel_wait_t& set_n(uint32_t value)
15838     {
15839         assert((value >> 1) == 0);
15840         n = static_cast<uint8_t>(value & ((1U << 1)-1));
15841         return *this;
15842     }
15843 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_kernel_wait_t15844     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15845     {
15846         fields.push_back(std::make_pair<std::string, std::string>("n", std::to_string(n)));
15847     }
15848 #endif
15849 #endif
15850 };
15851 // Enable or disable PMU counting (debug feature only)
15852 struct npu_op_pmu_mask_t
15853 {
15854 #ifdef __cplusplus
15855 private:
15856 #endif
15857     uint32_t opcode:10; //  opcode
15858     uint32_t reserved0:4;
15859     uint32_t control:2; //  control
15860     uint32_t enable:1; //  Enable or disable PMU mask
15861     uint32_t reserved1:15;
15862 #ifdef __cplusplus
15863 public:
npu_op_pmu_mask_tisa::npu_op_pmu_mask_t15864     npu_op_pmu_mask_t(uint32_t _enable) :
15865         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK)),
15866         reserved0(0),
15867         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15868         enable(_enable & ((1U << 1)-1)),
15869         reserved1(0)
15870     {}
npu_op_pmu_mask_tisa::npu_op_pmu_mask_t15871     CONSTEXPR npu_op_pmu_mask_t() :
15872         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK)),
15873         reserved0(0),
15874         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15875         enable(0),
15876         reserved1(0)
15877     {}
validisa::npu_op_pmu_mask_t15878     CONSTEXPR bool valid() const
15879     {
15880         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15881     }
initisa::npu_op_pmu_mask_t15882     CONSTEXPR void init()
15883     {
15884         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15885     }
uint32_tisa::npu_op_pmu_mask_t15886     operator uint32_t()
15887     {
15888         uint32_t word = 0;
15889         word |= uint32_t(opcode) << 0;
15890         word |= uint32_t(control) << 14;
15891         word |= uint32_t(enable) << 16;
15892         return word;
15893     }
get_opcodeisa::npu_op_pmu_mask_t15894     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15895     {
15896         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15897     }
set_opcodeisa::npu_op_pmu_mask_t15898     CONSTEXPR npu_op_pmu_mask_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15899     {
15900         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15901         return *this;
15902     }
get_controlisa::npu_op_pmu_mask_t15903     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15904     {
15905         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15906     }
set_controlisa::npu_op_pmu_mask_t15907     CONSTEXPR npu_op_pmu_mask_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15908     {
15909         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15910         return *this;
15911     }
get_enableisa::npu_op_pmu_mask_t15912     CONSTEXPR uint32_t get_enable() const
15913     {
15914         return static_cast<uint32_t>(enable);
15915     }
set_enableisa::npu_op_pmu_mask_t15916     CONSTEXPR npu_op_pmu_mask_t& set_enable(uint32_t value)
15917     {
15918         assert((value >> 1) == 0);
15919         enable = static_cast<uint8_t>(value & ((1U << 1)-1));
15920         return *this;
15921     }
15922 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_pmu_mask_t15923     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
15924     {
15925         fields.push_back(std::make_pair<std::string, std::string>("enable", std::to_string(enable)));
15926     }
15927 #endif
15928 #endif
15929 };
15930 // IFM top pad
15931 struct npu_set_ifm_pad_top_t
15932 {
15933 #ifdef __cplusplus
15934 private:
15935 #endif
15936     uint32_t opcode:10; //  opcode
15937     uint32_t reserved0:4;
15938     uint32_t control:2; //  control
15939     uint32_t pad:7; //  IFM top pad
15940     uint32_t reserved1:9;
15941 #ifdef __cplusplus
15942 public:
npu_set_ifm_pad_top_tisa::npu_set_ifm_pad_top_t15943     npu_set_ifm_pad_top_t(uint32_t _pad) :
15944         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP)),
15945         reserved0(0),
15946         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15947         pad(_pad & ((1U << 7)-1)),
15948         reserved1(0)
15949     {}
npu_set_ifm_pad_top_tisa::npu_set_ifm_pad_top_t15950     CONSTEXPR npu_set_ifm_pad_top_t() :
15951         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP)),
15952         reserved0(0),
15953         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
15954         pad(0),
15955         reserved1(0)
15956     {}
validisa::npu_set_ifm_pad_top_t15957     CONSTEXPR bool valid() const
15958     {
15959         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15960     }
initisa::npu_set_ifm_pad_top_t15961     CONSTEXPR void init()
15962     {
15963         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
15964     }
uint32_tisa::npu_set_ifm_pad_top_t15965     operator uint32_t()
15966     {
15967         uint32_t word = 0;
15968         word |= uint32_t(opcode) << 0;
15969         word |= uint32_t(control) << 14;
15970         word |= uint32_t(pad) << 16;
15971         return word;
15972     }
get_opcodeisa::npu_set_ifm_pad_top_t15973     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
15974     {
15975         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
15976     }
set_opcodeisa::npu_set_ifm_pad_top_t15977     CONSTEXPR npu_set_ifm_pad_top_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
15978     {
15979         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
15980         return *this;
15981     }
get_controlisa::npu_set_ifm_pad_top_t15982     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
15983     {
15984         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
15985     }
set_controlisa::npu_set_ifm_pad_top_t15986     CONSTEXPR npu_set_ifm_pad_top_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
15987     {
15988         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
15989         return *this;
15990     }
get_padisa::npu_set_ifm_pad_top_t15991     CONSTEXPR uint32_t get_pad() const
15992     {
15993         return static_cast<uint32_t>(pad);
15994     }
set_padisa::npu_set_ifm_pad_top_t15995     CONSTEXPR npu_set_ifm_pad_top_t& set_pad(uint32_t value)
15996     {
15997         assert((value >> 7) == 0);
15998         pad = static_cast<uint8_t>(value & ((1U << 7)-1));
15999         return *this;
16000     }
16001 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_pad_top_t16002     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16003     {
16004         fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
16005     }
16006 #endif
16007 #endif
16008 };
16009 // IFM left pad
16010 struct npu_set_ifm_pad_left_t
16011 {
16012 #ifdef __cplusplus
16013 private:
16014 #endif
16015     uint32_t opcode:10; //  opcode
16016     uint32_t reserved0:4;
16017     uint32_t control:2; //  control
16018     uint32_t pad:7; //  IFM left pad
16019     uint32_t reserved1:9;
16020 #ifdef __cplusplus
16021 public:
npu_set_ifm_pad_left_tisa::npu_set_ifm_pad_left_t16022     npu_set_ifm_pad_left_t(uint32_t _pad) :
16023         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT)),
16024         reserved0(0),
16025         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16026         pad(_pad & ((1U << 7)-1)),
16027         reserved1(0)
16028     {}
npu_set_ifm_pad_left_tisa::npu_set_ifm_pad_left_t16029     CONSTEXPR npu_set_ifm_pad_left_t() :
16030         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT)),
16031         reserved0(0),
16032         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16033         pad(0),
16034         reserved1(0)
16035     {}
validisa::npu_set_ifm_pad_left_t16036     CONSTEXPR bool valid() const
16037     {
16038         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16039     }
initisa::npu_set_ifm_pad_left_t16040     CONSTEXPR void init()
16041     {
16042         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16043     }
uint32_tisa::npu_set_ifm_pad_left_t16044     operator uint32_t()
16045     {
16046         uint32_t word = 0;
16047         word |= uint32_t(opcode) << 0;
16048         word |= uint32_t(control) << 14;
16049         word |= uint32_t(pad) << 16;
16050         return word;
16051     }
get_opcodeisa::npu_set_ifm_pad_left_t16052     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16053     {
16054         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16055     }
set_opcodeisa::npu_set_ifm_pad_left_t16056     CONSTEXPR npu_set_ifm_pad_left_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16057     {
16058         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16059         return *this;
16060     }
get_controlisa::npu_set_ifm_pad_left_t16061     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16062     {
16063         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16064     }
set_controlisa::npu_set_ifm_pad_left_t16065     CONSTEXPR npu_set_ifm_pad_left_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16066     {
16067         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16068         return *this;
16069     }
get_padisa::npu_set_ifm_pad_left_t16070     CONSTEXPR uint32_t get_pad() const
16071     {
16072         return static_cast<uint32_t>(pad);
16073     }
set_padisa::npu_set_ifm_pad_left_t16074     CONSTEXPR npu_set_ifm_pad_left_t& set_pad(uint32_t value)
16075     {
16076         assert((value >> 7) == 0);
16077         pad = static_cast<uint8_t>(value & ((1U << 7)-1));
16078         return *this;
16079     }
16080 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_pad_left_t16081     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16082     {
16083         fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
16084     }
16085 #endif
16086 #endif
16087 };
16088 // IFM right pad
16089 struct npu_set_ifm_pad_right_t
16090 {
16091 #ifdef __cplusplus
16092 private:
16093 #endif
16094     uint32_t opcode:10; //  opcode
16095     uint32_t reserved0:4;
16096     uint32_t control:2; //  control
16097     uint32_t pad:8; //  IFM right pad. Max value is 128
16098     uint32_t reserved1:8;
16099 #ifdef __cplusplus
16100 public:
npu_set_ifm_pad_right_tisa::npu_set_ifm_pad_right_t16101     npu_set_ifm_pad_right_t(uint32_t _pad) :
16102         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT)),
16103         reserved0(0),
16104         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16105         pad(_pad & ((1U << 8)-1)),
16106         reserved1(0)
16107     {}
npu_set_ifm_pad_right_tisa::npu_set_ifm_pad_right_t16108     CONSTEXPR npu_set_ifm_pad_right_t() :
16109         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT)),
16110         reserved0(0),
16111         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16112         pad(0),
16113         reserved1(0)
16114     {}
validisa::npu_set_ifm_pad_right_t16115     CONSTEXPR bool valid() const
16116     {
16117         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16118     }
initisa::npu_set_ifm_pad_right_t16119     CONSTEXPR void init()
16120     {
16121         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16122     }
uint32_tisa::npu_set_ifm_pad_right_t16123     operator uint32_t()
16124     {
16125         uint32_t word = 0;
16126         word |= uint32_t(opcode) << 0;
16127         word |= uint32_t(control) << 14;
16128         word |= uint32_t(pad) << 16;
16129         return word;
16130     }
get_opcodeisa::npu_set_ifm_pad_right_t16131     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16132     {
16133         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16134     }
set_opcodeisa::npu_set_ifm_pad_right_t16135     CONSTEXPR npu_set_ifm_pad_right_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16136     {
16137         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16138         return *this;
16139     }
get_controlisa::npu_set_ifm_pad_right_t16140     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16141     {
16142         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16143     }
set_controlisa::npu_set_ifm_pad_right_t16144     CONSTEXPR npu_set_ifm_pad_right_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16145     {
16146         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16147         return *this;
16148     }
get_padisa::npu_set_ifm_pad_right_t16149     CONSTEXPR uint32_t get_pad() const
16150     {
16151         return static_cast<uint32_t>(pad);
16152     }
set_padisa::npu_set_ifm_pad_right_t16153     CONSTEXPR npu_set_ifm_pad_right_t& set_pad(uint32_t value)
16154     {
16155         assert((value >> 8) == 0);
16156         pad = static_cast<uint8_t>(value & ((1U << 8)-1));
16157         return *this;
16158     }
16159 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_pad_right_t16160     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16161     {
16162         fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
16163     }
16164 #endif
16165 #endif
16166 };
16167 // IFM bottom pad
16168 struct npu_set_ifm_pad_bottom_t
16169 {
16170 #ifdef __cplusplus
16171 private:
16172 #endif
16173     uint32_t opcode:10; //  opcode
16174     uint32_t reserved0:4;
16175     uint32_t control:2; //  control
16176     uint32_t pad:8; //  IFM bottom pad. Max value is 128
16177     uint32_t reserved1:8;
16178 #ifdef __cplusplus
16179 public:
npu_set_ifm_pad_bottom_tisa::npu_set_ifm_pad_bottom_t16180     npu_set_ifm_pad_bottom_t(uint32_t _pad) :
16181         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM)),
16182         reserved0(0),
16183         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16184         pad(_pad & ((1U << 8)-1)),
16185         reserved1(0)
16186     {}
npu_set_ifm_pad_bottom_tisa::npu_set_ifm_pad_bottom_t16187     CONSTEXPR npu_set_ifm_pad_bottom_t() :
16188         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM)),
16189         reserved0(0),
16190         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16191         pad(0),
16192         reserved1(0)
16193     {}
validisa::npu_set_ifm_pad_bottom_t16194     CONSTEXPR bool valid() const
16195     {
16196         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16197     }
initisa::npu_set_ifm_pad_bottom_t16198     CONSTEXPR void init()
16199     {
16200         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16201     }
uint32_tisa::npu_set_ifm_pad_bottom_t16202     operator uint32_t()
16203     {
16204         uint32_t word = 0;
16205         word |= uint32_t(opcode) << 0;
16206         word |= uint32_t(control) << 14;
16207         word |= uint32_t(pad) << 16;
16208         return word;
16209     }
get_opcodeisa::npu_set_ifm_pad_bottom_t16210     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16211     {
16212         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16213     }
set_opcodeisa::npu_set_ifm_pad_bottom_t16214     CONSTEXPR npu_set_ifm_pad_bottom_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16215     {
16216         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16217         return *this;
16218     }
get_controlisa::npu_set_ifm_pad_bottom_t16219     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16220     {
16221         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16222     }
set_controlisa::npu_set_ifm_pad_bottom_t16223     CONSTEXPR npu_set_ifm_pad_bottom_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16224     {
16225         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16226         return *this;
16227     }
get_padisa::npu_set_ifm_pad_bottom_t16228     CONSTEXPR uint32_t get_pad() const
16229     {
16230         return static_cast<uint32_t>(pad);
16231     }
set_padisa::npu_set_ifm_pad_bottom_t16232     CONSTEXPR npu_set_ifm_pad_bottom_t& set_pad(uint32_t value)
16233     {
16234         assert((value >> 8) == 0);
16235         pad = static_cast<uint8_t>(value & ((1U << 8)-1));
16236         return *this;
16237     }
16238 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_pad_bottom_t16239     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16240     {
16241         fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
16242     }
16243 #endif
16244 #endif
16245 };
16246 // Number of input channels for convolution
16247 struct npu_set_ifm_depth_m1_t
16248 {
16249 #ifdef __cplusplus
16250 private:
16251 #endif
16252     uint32_t opcode:10; //  opcode
16253     uint32_t reserved0:4;
16254     uint32_t control:2; //  control
16255     uint32_t depth_m1:16; //  Number of input channels for convolution
16256 #ifdef __cplusplus
16257 public:
npu_set_ifm_depth_m1_tisa::npu_set_ifm_depth_m1_t16258     npu_set_ifm_depth_m1_t(uint32_t _depth_m1) :
16259         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1)),
16260         reserved0(0),
16261         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16262         depth_m1(_depth_m1 & ((1U << 16)-1))
16263     {}
npu_set_ifm_depth_m1_tisa::npu_set_ifm_depth_m1_t16264     CONSTEXPR npu_set_ifm_depth_m1_t() :
16265         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1)),
16266         reserved0(0),
16267         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16268         depth_m1(0)
16269     {}
validisa::npu_set_ifm_depth_m1_t16270     CONSTEXPR bool valid() const
16271     {
16272         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16273     }
initisa::npu_set_ifm_depth_m1_t16274     CONSTEXPR void init()
16275     {
16276         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16277     }
uint32_tisa::npu_set_ifm_depth_m1_t16278     operator uint32_t()
16279     {
16280         uint32_t word = 0;
16281         word |= uint32_t(opcode) << 0;
16282         word |= uint32_t(control) << 14;
16283         word |= uint32_t(depth_m1) << 16;
16284         return word;
16285     }
get_opcodeisa::npu_set_ifm_depth_m1_t16286     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16287     {
16288         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16289     }
set_opcodeisa::npu_set_ifm_depth_m1_t16290     CONSTEXPR npu_set_ifm_depth_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16291     {
16292         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16293         return *this;
16294     }
get_controlisa::npu_set_ifm_depth_m1_t16295     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16296     {
16297         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16298     }
set_controlisa::npu_set_ifm_depth_m1_t16299     CONSTEXPR npu_set_ifm_depth_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16300     {
16301         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16302         return *this;
16303     }
get_depth_m1isa::npu_set_ifm_depth_m1_t16304     CONSTEXPR uint32_t get_depth_m1() const
16305     {
16306         return static_cast<uint32_t>(depth_m1);
16307     }
set_depth_m1isa::npu_set_ifm_depth_m1_t16308     CONSTEXPR npu_set_ifm_depth_m1_t& set_depth_m1(uint32_t value)
16309     {
16310         assert((value >> 16) == 0);
16311         depth_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
16312         return *this;
16313     }
16314 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_depth_m1_t16315     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16316     {
16317         fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
16318     }
16319 #endif
16320 #endif
16321 };
16322 // IFM Precision
16323 struct npu_set_ifm_precision_t
16324 {
16325 #ifdef __cplusplus
16326 private:
16327 #endif
16328     uint32_t opcode:10; //  opcode
16329     uint32_t reserved0:4;
16330     uint32_t control:2; //  control
16331     uint32_t activation_type:1; //  IFM type
16332     uint32_t reserved1:1;
16333     uint32_t activation_precision:2; //  IFM precision
16334     uint32_t reserved2:2;
16335     uint32_t activation_format:2; //  IFM format
16336     uint32_t reserved3:6;
16337     uint32_t activation_storage:2; //  IFM storage mode
16338 #ifdef __cplusplus
16339 public:
npu_set_ifm_precision_tisa::npu_set_ifm_precision_t16340     npu_set_ifm_precision_t(NPU_NAMESPACE::activation_type _activation_type, NPU_NAMESPACE::activation_precision _activation_precision, NPU_NAMESPACE::activation_format _activation_format, NPU_NAMESPACE::activation_storage _activation_storage) :
16341         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION)),
16342         reserved0(0),
16343         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16344         activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1)-1)),
16345         reserved1(0),
16346         activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2)-1)),
16347         reserved2(0),
16348         activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2)-1)),
16349         reserved3(0),
16350         activation_storage(static_cast<uint8_t>(_activation_storage) & ((1U << 2)-1))
16351     {}
npu_set_ifm_precision_tisa::npu_set_ifm_precision_t16352     CONSTEXPR npu_set_ifm_precision_t() :
16353         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION)),
16354         reserved0(0),
16355         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16356         activation_type(0),
16357         reserved1(0),
16358         activation_precision(0),
16359         reserved2(0),
16360         activation_format(0),
16361         reserved3(0),
16362         activation_storage(0)
16363     {}
validisa::npu_set_ifm_precision_t16364     CONSTEXPR bool valid() const
16365     {
16366         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16367     }
initisa::npu_set_ifm_precision_t16368     CONSTEXPR void init()
16369     {
16370         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16371     }
uint32_tisa::npu_set_ifm_precision_t16372     operator uint32_t()
16373     {
16374         uint32_t word = 0;
16375         word |= uint32_t(opcode) << 0;
16376         word |= uint32_t(control) << 14;
16377         word |= uint32_t(activation_type) << 16;
16378         word |= uint32_t(activation_precision) << 18;
16379         word |= uint32_t(activation_format) << 22;
16380         word |= uint32_t(activation_storage) << 30;
16381         return word;
16382     }
get_opcodeisa::npu_set_ifm_precision_t16383     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16384     {
16385         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16386     }
set_opcodeisa::npu_set_ifm_precision_t16387     CONSTEXPR npu_set_ifm_precision_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16388     {
16389         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16390         return *this;
16391     }
get_controlisa::npu_set_ifm_precision_t16392     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16393     {
16394         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16395     }
set_controlisa::npu_set_ifm_precision_t16396     CONSTEXPR npu_set_ifm_precision_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16397     {
16398         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16399         return *this;
16400     }
get_activation_typeisa::npu_set_ifm_precision_t16401     CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
16402     {
16403         return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
16404     }
set_activation_typeisa::npu_set_ifm_precision_t16405     CONSTEXPR npu_set_ifm_precision_t& set_activation_type(NPU_NAMESPACE::activation_type value)
16406     {
16407         activation_type = static_cast<uint8_t>(value) & ((1U << 1)-1);
16408         return *this;
16409     }
get_activation_precisionisa::npu_set_ifm_precision_t16410     CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
16411     {
16412         return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
16413     }
set_activation_precisionisa::npu_set_ifm_precision_t16414     CONSTEXPR npu_set_ifm_precision_t& set_activation_precision(NPU_NAMESPACE::activation_precision value)
16415     {
16416         activation_precision = static_cast<uint8_t>(value) & ((1U << 2)-1);
16417         return *this;
16418     }
get_activation_formatisa::npu_set_ifm_precision_t16419     CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
16420     {
16421         return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
16422     }
set_activation_formatisa::npu_set_ifm_precision_t16423     CONSTEXPR npu_set_ifm_precision_t& set_activation_format(NPU_NAMESPACE::activation_format value)
16424     {
16425         activation_format = static_cast<uint8_t>(value) & ((1U << 2)-1);
16426         return *this;
16427     }
get_activation_storageisa::npu_set_ifm_precision_t16428     CONSTEXPR NPU_NAMESPACE::activation_storage get_activation_storage() const
16429     {
16430         return static_cast<NPU_NAMESPACE::activation_storage>(activation_storage);
16431     }
set_activation_storageisa::npu_set_ifm_precision_t16432     CONSTEXPR npu_set_ifm_precision_t& set_activation_storage(NPU_NAMESPACE::activation_storage value)
16433     {
16434         activation_storage = static_cast<uint8_t>(value) & ((1U << 2)-1);
16435         return *this;
16436     }
16437 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_precision_t16438     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16439     {
16440         fields.push_back(std::make_pair<std::string, std::string>("activation_type", (activation_type < (sizeof(activation_type_str)/sizeof(activation_type_str[0])) ? activation_type_str[activation_type] : "****")));
16441         fields.push_back(std::make_pair<std::string, std::string>("activation_precision", (activation_precision < (sizeof(activation_precision_str)/sizeof(activation_precision_str[0])) ? activation_precision_str[activation_precision] : "****")));
16442         fields.push_back(std::make_pair<std::string, std::string>("activation_format", (activation_format < (sizeof(activation_format_str)/sizeof(activation_format_str[0])) ? activation_format_str[activation_format] : "****")));
16443         fields.push_back(std::make_pair<std::string, std::string>("activation_storage", (activation_storage < (sizeof(activation_storage_str)/sizeof(activation_storage_str[0])) ? activation_storage_str[activation_storage] : "****")));
16444     }
16445 #endif
16446 #endif
16447 };
16448 // IFM upscale mode
16449 struct npu_set_ifm_upscale_t
16450 {
16451 #ifdef __cplusplus
16452 private:
16453 #endif
16454     uint32_t opcode:10; //  opcode
16455     uint32_t reserved0:4;
16456     uint32_t control:2; //  control
16457     uint32_t mode:2; //  IFM upscale mode
16458     uint32_t reserved1:14;
16459 #ifdef __cplusplus
16460 public:
npu_set_ifm_upscale_tisa::npu_set_ifm_upscale_t16461     npu_set_ifm_upscale_t(NPU_NAMESPACE::ifm_upscale_mode _mode) :
16462         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE)),
16463         reserved0(0),
16464         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16465         mode(static_cast<uint8_t>(_mode) & ((1U << 2)-1)),
16466         reserved1(0)
16467     {}
npu_set_ifm_upscale_tisa::npu_set_ifm_upscale_t16468     CONSTEXPR npu_set_ifm_upscale_t() :
16469         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE)),
16470         reserved0(0),
16471         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16472         mode(0),
16473         reserved1(0)
16474     {}
validisa::npu_set_ifm_upscale_t16475     CONSTEXPR bool valid() const
16476     {
16477         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16478     }
initisa::npu_set_ifm_upscale_t16479     CONSTEXPR void init()
16480     {
16481         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16482     }
uint32_tisa::npu_set_ifm_upscale_t16483     operator uint32_t()
16484     {
16485         uint32_t word = 0;
16486         word |= uint32_t(opcode) << 0;
16487         word |= uint32_t(control) << 14;
16488         word |= uint32_t(mode) << 16;
16489         return word;
16490     }
get_opcodeisa::npu_set_ifm_upscale_t16491     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16492     {
16493         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16494     }
set_opcodeisa::npu_set_ifm_upscale_t16495     CONSTEXPR npu_set_ifm_upscale_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16496     {
16497         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16498         return *this;
16499     }
get_controlisa::npu_set_ifm_upscale_t16500     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16501     {
16502         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16503     }
set_controlisa::npu_set_ifm_upscale_t16504     CONSTEXPR npu_set_ifm_upscale_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16505     {
16506         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16507         return *this;
16508     }
get_modeisa::npu_set_ifm_upscale_t16509     CONSTEXPR NPU_NAMESPACE::ifm_upscale_mode get_mode() const
16510     {
16511         return static_cast<NPU_NAMESPACE::ifm_upscale_mode>(mode);
16512     }
set_modeisa::npu_set_ifm_upscale_t16513     CONSTEXPR npu_set_ifm_upscale_t& set_mode(NPU_NAMESPACE::ifm_upscale_mode value)
16514     {
16515         mode = static_cast<uint8_t>(value) & ((1U << 2)-1);
16516         return *this;
16517     }
16518 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_upscale_t16519     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16520     {
16521         fields.push_back(std::make_pair<std::string, std::string>("mode", (mode < (sizeof(ifm_upscale_mode_str)/sizeof(ifm_upscale_mode_str[0])) ? ifm_upscale_mode_str[mode] : "****")));
16522     }
16523 #endif
16524 #endif
16525 };
16526 // IFM zero point
16527 struct npu_set_ifm_zero_point_t
16528 {
16529 #ifdef __cplusplus
16530 private:
16531 #endif
16532     uint32_t opcode:10; //  opcode
16533     uint32_t reserved0:4;
16534     uint32_t control:2; //  control
16535     uint32_t zero_point:16; //  Zero point offset
16536 #ifdef __cplusplus
16537 public:
npu_set_ifm_zero_point_tisa::npu_set_ifm_zero_point_t16538     npu_set_ifm_zero_point_t(uint32_t _zero_point) :
16539         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT)),
16540         reserved0(0),
16541         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16542         zero_point(_zero_point & ((1U << 16)-1))
16543     {}
npu_set_ifm_zero_point_tisa::npu_set_ifm_zero_point_t16544     CONSTEXPR npu_set_ifm_zero_point_t() :
16545         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT)),
16546         reserved0(0),
16547         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16548         zero_point(0)
16549     {}
validisa::npu_set_ifm_zero_point_t16550     CONSTEXPR bool valid() const
16551     {
16552         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16553     }
initisa::npu_set_ifm_zero_point_t16554     CONSTEXPR void init()
16555     {
16556         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16557     }
uint32_tisa::npu_set_ifm_zero_point_t16558     operator uint32_t()
16559     {
16560         uint32_t word = 0;
16561         word |= uint32_t(opcode) << 0;
16562         word |= uint32_t(control) << 14;
16563         word |= uint32_t(zero_point) << 16;
16564         return word;
16565     }
get_opcodeisa::npu_set_ifm_zero_point_t16566     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16567     {
16568         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16569     }
set_opcodeisa::npu_set_ifm_zero_point_t16570     CONSTEXPR npu_set_ifm_zero_point_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16571     {
16572         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16573         return *this;
16574     }
get_controlisa::npu_set_ifm_zero_point_t16575     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16576     {
16577         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16578     }
set_controlisa::npu_set_ifm_zero_point_t16579     CONSTEXPR npu_set_ifm_zero_point_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16580     {
16581         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16582         return *this;
16583     }
get_zero_pointisa::npu_set_ifm_zero_point_t16584     CONSTEXPR uint32_t get_zero_point() const
16585     {
16586         return static_cast<uint32_t>(zero_point);
16587     }
set_zero_pointisa::npu_set_ifm_zero_point_t16588     CONSTEXPR npu_set_ifm_zero_point_t& set_zero_point(uint32_t value)
16589     {
16590         assert((value >> 16) == 0);
16591         zero_point = static_cast<uint16_t>(value & ((1U << 16)-1));
16592         return *this;
16593     }
16594 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_zero_point_t16595     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16596     {
16597         fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
16598     }
16599 #endif
16600 #endif
16601 };
16602 // IFM Tile 0 and Tile 2 width
16603 struct npu_set_ifm_width0_m1_t
16604 {
16605 #ifdef __cplusplus
16606 private:
16607 #endif
16608     uint32_t opcode:10; //  opcode
16609     uint32_t reserved0:4;
16610     uint32_t control:2; //  control
16611     uint32_t width_m1:16; //  IFM Tile 0 and tile 2 width
16612 #ifdef __cplusplus
16613 public:
npu_set_ifm_width0_m1_tisa::npu_set_ifm_width0_m1_t16614     npu_set_ifm_width0_m1_t(uint32_t _width_m1) :
16615         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1)),
16616         reserved0(0),
16617         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16618         width_m1(_width_m1 & ((1U << 16)-1))
16619     {}
npu_set_ifm_width0_m1_tisa::npu_set_ifm_width0_m1_t16620     CONSTEXPR npu_set_ifm_width0_m1_t() :
16621         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1)),
16622         reserved0(0),
16623         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16624         width_m1(0)
16625     {}
validisa::npu_set_ifm_width0_m1_t16626     CONSTEXPR bool valid() const
16627     {
16628         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16629     }
initisa::npu_set_ifm_width0_m1_t16630     CONSTEXPR void init()
16631     {
16632         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16633     }
uint32_tisa::npu_set_ifm_width0_m1_t16634     operator uint32_t()
16635     {
16636         uint32_t word = 0;
16637         word |= uint32_t(opcode) << 0;
16638         word |= uint32_t(control) << 14;
16639         word |= uint32_t(width_m1) << 16;
16640         return word;
16641     }
get_opcodeisa::npu_set_ifm_width0_m1_t16642     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16643     {
16644         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16645     }
set_opcodeisa::npu_set_ifm_width0_m1_t16646     CONSTEXPR npu_set_ifm_width0_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16647     {
16648         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16649         return *this;
16650     }
get_controlisa::npu_set_ifm_width0_m1_t16651     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16652     {
16653         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16654     }
set_controlisa::npu_set_ifm_width0_m1_t16655     CONSTEXPR npu_set_ifm_width0_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16656     {
16657         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16658         return *this;
16659     }
get_width_m1isa::npu_set_ifm_width0_m1_t16660     CONSTEXPR uint32_t get_width_m1() const
16661     {
16662         return static_cast<uint32_t>(width_m1);
16663     }
set_width_m1isa::npu_set_ifm_width0_m1_t16664     CONSTEXPR npu_set_ifm_width0_m1_t& set_width_m1(uint32_t value)
16665     {
16666         assert((value >> 16) == 0);
16667         width_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
16668         return *this;
16669     }
16670 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_width0_m1_t16671     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16672     {
16673         fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
16674     }
16675 #endif
16676 #endif
16677 };
16678 // IFM Tile 0 height
16679 struct npu_set_ifm_height0_m1_t
16680 {
16681 #ifdef __cplusplus
16682 private:
16683 #endif
16684     uint32_t opcode:10; //  opcode
16685     uint32_t reserved0:4;
16686     uint32_t control:2; //  control
16687     uint32_t height_m1:16; //  IFM Tile 0 height
16688 #ifdef __cplusplus
16689 public:
npu_set_ifm_height0_m1_tisa::npu_set_ifm_height0_m1_t16690     npu_set_ifm_height0_m1_t(uint32_t _height_m1) :
16691         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1)),
16692         reserved0(0),
16693         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16694         height_m1(_height_m1 & ((1U << 16)-1))
16695     {}
npu_set_ifm_height0_m1_tisa::npu_set_ifm_height0_m1_t16696     CONSTEXPR npu_set_ifm_height0_m1_t() :
16697         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1)),
16698         reserved0(0),
16699         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16700         height_m1(0)
16701     {}
validisa::npu_set_ifm_height0_m1_t16702     CONSTEXPR bool valid() const
16703     {
16704         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16705     }
initisa::npu_set_ifm_height0_m1_t16706     CONSTEXPR void init()
16707     {
16708         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16709     }
uint32_tisa::npu_set_ifm_height0_m1_t16710     operator uint32_t()
16711     {
16712         uint32_t word = 0;
16713         word |= uint32_t(opcode) << 0;
16714         word |= uint32_t(control) << 14;
16715         word |= uint32_t(height_m1) << 16;
16716         return word;
16717     }
get_opcodeisa::npu_set_ifm_height0_m1_t16718     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16719     {
16720         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16721     }
set_opcodeisa::npu_set_ifm_height0_m1_t16722     CONSTEXPR npu_set_ifm_height0_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16723     {
16724         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16725         return *this;
16726     }
get_controlisa::npu_set_ifm_height0_m1_t16727     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16728     {
16729         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16730     }
set_controlisa::npu_set_ifm_height0_m1_t16731     CONSTEXPR npu_set_ifm_height0_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16732     {
16733         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16734         return *this;
16735     }
get_height_m1isa::npu_set_ifm_height0_m1_t16736     CONSTEXPR uint32_t get_height_m1() const
16737     {
16738         return static_cast<uint32_t>(height_m1);
16739     }
set_height_m1isa::npu_set_ifm_height0_m1_t16740     CONSTEXPR npu_set_ifm_height0_m1_t& set_height_m1(uint32_t value)
16741     {
16742         assert((value >> 16) == 0);
16743         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
16744         return *this;
16745     }
16746 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_height0_m1_t16747     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16748     {
16749         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
16750     }
16751 #endif
16752 #endif
16753 };
16754 // IFM Tile 1 height
16755 struct npu_set_ifm_height1_m1_t
16756 {
16757 #ifdef __cplusplus
16758 private:
16759 #endif
16760     uint32_t opcode:10; //  opcode
16761     uint32_t reserved0:4;
16762     uint32_t control:2; //  control
16763     uint32_t height_m1:16; //  IFM Tile 1 height
16764 #ifdef __cplusplus
16765 public:
npu_set_ifm_height1_m1_tisa::npu_set_ifm_height1_m1_t16766     npu_set_ifm_height1_m1_t(uint32_t _height_m1) :
16767         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1)),
16768         reserved0(0),
16769         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16770         height_m1(_height_m1 & ((1U << 16)-1))
16771     {}
npu_set_ifm_height1_m1_tisa::npu_set_ifm_height1_m1_t16772     CONSTEXPR npu_set_ifm_height1_m1_t() :
16773         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1)),
16774         reserved0(0),
16775         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16776         height_m1(0)
16777     {}
validisa::npu_set_ifm_height1_m1_t16778     CONSTEXPR bool valid() const
16779     {
16780         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16781     }
initisa::npu_set_ifm_height1_m1_t16782     CONSTEXPR void init()
16783     {
16784         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16785     }
uint32_tisa::npu_set_ifm_height1_m1_t16786     operator uint32_t()
16787     {
16788         uint32_t word = 0;
16789         word |= uint32_t(opcode) << 0;
16790         word |= uint32_t(control) << 14;
16791         word |= uint32_t(height_m1) << 16;
16792         return word;
16793     }
get_opcodeisa::npu_set_ifm_height1_m1_t16794     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16795     {
16796         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16797     }
set_opcodeisa::npu_set_ifm_height1_m1_t16798     CONSTEXPR npu_set_ifm_height1_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16799     {
16800         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16801         return *this;
16802     }
get_controlisa::npu_set_ifm_height1_m1_t16803     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16804     {
16805         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16806     }
set_controlisa::npu_set_ifm_height1_m1_t16807     CONSTEXPR npu_set_ifm_height1_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16808     {
16809         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16810         return *this;
16811     }
get_height_m1isa::npu_set_ifm_height1_m1_t16812     CONSTEXPR uint32_t get_height_m1() const
16813     {
16814         return static_cast<uint32_t>(height_m1);
16815     }
set_height_m1isa::npu_set_ifm_height1_m1_t16816     CONSTEXPR npu_set_ifm_height1_m1_t& set_height_m1(uint32_t value)
16817     {
16818         assert((value >> 16) == 0);
16819         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
16820         return *this;
16821     }
16822 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_height1_m1_t16823     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16824     {
16825         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
16826     }
16827 #endif
16828 #endif
16829 };
16830 // Index n for IFM access
16831 struct npu_set_ifm_region_t
16832 {
16833 #ifdef __cplusplus
16834 private:
16835 #endif
16836     uint32_t opcode:10; //  opcode
16837     uint32_t reserved0:4;
16838     uint32_t control:2; //  control
16839     uint32_t region:3; //  Region number for external memory accesses
16840     uint32_t reserved1:13;
16841 #ifdef __cplusplus
16842 public:
npu_set_ifm_region_tisa::npu_set_ifm_region_t16843     npu_set_ifm_region_t(uint32_t _region) :
16844         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION)),
16845         reserved0(0),
16846         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16847         region(_region & ((1U << 3)-1)),
16848         reserved1(0)
16849     {}
npu_set_ifm_region_tisa::npu_set_ifm_region_t16850     CONSTEXPR npu_set_ifm_region_t() :
16851         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION)),
16852         reserved0(0),
16853         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16854         region(0),
16855         reserved1(0)
16856     {}
validisa::npu_set_ifm_region_t16857     CONSTEXPR bool valid() const
16858     {
16859         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16860     }
initisa::npu_set_ifm_region_t16861     CONSTEXPR void init()
16862     {
16863         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16864     }
uint32_tisa::npu_set_ifm_region_t16865     operator uint32_t()
16866     {
16867         uint32_t word = 0;
16868         word |= uint32_t(opcode) << 0;
16869         word |= uint32_t(control) << 14;
16870         word |= uint32_t(region) << 16;
16871         return word;
16872     }
get_opcodeisa::npu_set_ifm_region_t16873     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16874     {
16875         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16876     }
set_opcodeisa::npu_set_ifm_region_t16877     CONSTEXPR npu_set_ifm_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16878     {
16879         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16880         return *this;
16881     }
get_controlisa::npu_set_ifm_region_t16882     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16883     {
16884         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16885     }
set_controlisa::npu_set_ifm_region_t16886     CONSTEXPR npu_set_ifm_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16887     {
16888         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16889         return *this;
16890     }
get_regionisa::npu_set_ifm_region_t16891     CONSTEXPR uint32_t get_region() const
16892     {
16893         return static_cast<uint32_t>(region);
16894     }
set_regionisa::npu_set_ifm_region_t16895     CONSTEXPR npu_set_ifm_region_t& set_region(uint32_t value)
16896     {
16897         assert((value >> 3) == 0);
16898         region = static_cast<uint8_t>(value & ((1U << 3)-1));
16899         return *this;
16900     }
16901 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_region_t16902     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16903     {
16904         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
16905     }
16906 #endif
16907 #endif
16908 };
16909 // IFM broadcast configuration
16910 struct npu_set_ifm_broadcast_t
16911 {
16912 #ifdef __cplusplus
16913 private:
16914 #endif
16915     uint32_t opcode:10; //  opcode
16916     uint32_t reserved0:4;
16917     uint32_t control:2; //  control
16918     uint32_t broadcast_mode:4; //  Broadcast mode for IFM
16919     uint32_t reserved1:12;
16920 #ifdef __cplusplus
16921 public:
npu_set_ifm_broadcast_tisa::npu_set_ifm_broadcast_t16922     npu_set_ifm_broadcast_t(NPU_NAMESPACE::broadcast_mode _broadcast_mode) :
16923         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_BROADCAST)),
16924         reserved0(0),
16925         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16926         broadcast_mode(static_cast<uint8_t>(_broadcast_mode) & ((1U << 4)-1)),
16927         reserved1(0)
16928     {}
npu_set_ifm_broadcast_tisa::npu_set_ifm_broadcast_t16929     CONSTEXPR npu_set_ifm_broadcast_t() :
16930         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_BROADCAST)),
16931         reserved0(0),
16932         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
16933         broadcast_mode(0),
16934         reserved1(0)
16935     {}
validisa::npu_set_ifm_broadcast_t16936     CONSTEXPR bool valid() const
16937     {
16938         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_BROADCAST) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16939     }
initisa::npu_set_ifm_broadcast_t16940     CONSTEXPR void init()
16941     {
16942         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_BROADCAST); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
16943     }
uint32_tisa::npu_set_ifm_broadcast_t16944     operator uint32_t()
16945     {
16946         uint32_t word = 0;
16947         word |= uint32_t(opcode) << 0;
16948         word |= uint32_t(control) << 14;
16949         word |= uint32_t(broadcast_mode) << 16;
16950         return word;
16951     }
get_opcodeisa::npu_set_ifm_broadcast_t16952     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
16953     {
16954         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
16955     }
set_opcodeisa::npu_set_ifm_broadcast_t16956     CONSTEXPR npu_set_ifm_broadcast_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
16957     {
16958         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
16959         return *this;
16960     }
get_controlisa::npu_set_ifm_broadcast_t16961     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
16962     {
16963         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
16964     }
set_controlisa::npu_set_ifm_broadcast_t16965     CONSTEXPR npu_set_ifm_broadcast_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
16966     {
16967         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
16968         return *this;
16969     }
get_broadcast_modeisa::npu_set_ifm_broadcast_t16970     CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_mode() const
16971     {
16972         return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_mode);
16973     }
set_broadcast_modeisa::npu_set_ifm_broadcast_t16974     CONSTEXPR npu_set_ifm_broadcast_t& set_broadcast_mode(NPU_NAMESPACE::broadcast_mode value)
16975     {
16976         broadcast_mode = static_cast<uint8_t>(value) & ((1U << 4)-1);
16977         return *this;
16978     }
16979 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_broadcast_t16980     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
16981     {
16982         fields.push_back(std::make_pair<std::string, std::string>("broadcast_mode", (broadcast_mode < (sizeof(broadcast_mode_str)/sizeof(broadcast_mode_str[0])) ? broadcast_mode_str[broadcast_mode] : "****")));
16983     }
16984 #endif
16985 #endif
16986 };
16987 // Output feature map width
16988 struct npu_set_ofm_width_m1_t
16989 {
16990 #ifdef __cplusplus
16991 private:
16992 #endif
16993     uint32_t opcode:10; //  opcode
16994     uint32_t reserved0:4;
16995     uint32_t control:2; //  control
16996     uint32_t width_m1:16; //  Output feature map width
16997 #ifdef __cplusplus
16998 public:
npu_set_ofm_width_m1_tisa::npu_set_ofm_width_m1_t16999     npu_set_ofm_width_m1_t(uint32_t _width_m1) :
17000         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1)),
17001         reserved0(0),
17002         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17003         width_m1(_width_m1 & ((1U << 16)-1))
17004     {}
npu_set_ofm_width_m1_tisa::npu_set_ofm_width_m1_t17005     CONSTEXPR npu_set_ofm_width_m1_t() :
17006         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1)),
17007         reserved0(0),
17008         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17009         width_m1(0)
17010     {}
validisa::npu_set_ofm_width_m1_t17011     CONSTEXPR bool valid() const
17012     {
17013         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17014     }
initisa::npu_set_ofm_width_m1_t17015     CONSTEXPR void init()
17016     {
17017         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17018     }
uint32_tisa::npu_set_ofm_width_m1_t17019     operator uint32_t()
17020     {
17021         uint32_t word = 0;
17022         word |= uint32_t(opcode) << 0;
17023         word |= uint32_t(control) << 14;
17024         word |= uint32_t(width_m1) << 16;
17025         return word;
17026     }
get_opcodeisa::npu_set_ofm_width_m1_t17027     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17028     {
17029         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17030     }
set_opcodeisa::npu_set_ofm_width_m1_t17031     CONSTEXPR npu_set_ofm_width_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17032     {
17033         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17034         return *this;
17035     }
get_controlisa::npu_set_ofm_width_m1_t17036     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17037     {
17038         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17039     }
set_controlisa::npu_set_ofm_width_m1_t17040     CONSTEXPR npu_set_ofm_width_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17041     {
17042         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17043         return *this;
17044     }
get_width_m1isa::npu_set_ofm_width_m1_t17045     CONSTEXPR uint32_t get_width_m1() const
17046     {
17047         return static_cast<uint32_t>(width_m1);
17048     }
set_width_m1isa::npu_set_ofm_width_m1_t17049     CONSTEXPR npu_set_ofm_width_m1_t& set_width_m1(uint32_t value)
17050     {
17051         assert((value >> 16) == 0);
17052         width_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
17053         return *this;
17054     }
17055 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_width_m1_t17056     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17057     {
17058         fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
17059     }
17060 #endif
17061 #endif
17062 };
17063 // Output feature map height
17064 struct npu_set_ofm_height_m1_t
17065 {
17066 #ifdef __cplusplus
17067 private:
17068 #endif
17069     uint32_t opcode:10; //  opcode
17070     uint32_t reserved0:4;
17071     uint32_t control:2; //  control
17072     uint32_t height_m1:16; //  Output feature map height
17073 #ifdef __cplusplus
17074 public:
npu_set_ofm_height_m1_tisa::npu_set_ofm_height_m1_t17075     npu_set_ofm_height_m1_t(uint32_t _height_m1) :
17076         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1)),
17077         reserved0(0),
17078         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17079         height_m1(_height_m1 & ((1U << 16)-1))
17080     {}
npu_set_ofm_height_m1_tisa::npu_set_ofm_height_m1_t17081     CONSTEXPR npu_set_ofm_height_m1_t() :
17082         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1)),
17083         reserved0(0),
17084         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17085         height_m1(0)
17086     {}
validisa::npu_set_ofm_height_m1_t17087     CONSTEXPR bool valid() const
17088     {
17089         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17090     }
initisa::npu_set_ofm_height_m1_t17091     CONSTEXPR void init()
17092     {
17093         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17094     }
uint32_tisa::npu_set_ofm_height_m1_t17095     operator uint32_t()
17096     {
17097         uint32_t word = 0;
17098         word |= uint32_t(opcode) << 0;
17099         word |= uint32_t(control) << 14;
17100         word |= uint32_t(height_m1) << 16;
17101         return word;
17102     }
get_opcodeisa::npu_set_ofm_height_m1_t17103     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17104     {
17105         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17106     }
set_opcodeisa::npu_set_ofm_height_m1_t17107     CONSTEXPR npu_set_ofm_height_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17108     {
17109         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17110         return *this;
17111     }
get_controlisa::npu_set_ofm_height_m1_t17112     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17113     {
17114         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17115     }
set_controlisa::npu_set_ofm_height_m1_t17116     CONSTEXPR npu_set_ofm_height_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17117     {
17118         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17119         return *this;
17120     }
get_height_m1isa::npu_set_ofm_height_m1_t17121     CONSTEXPR uint32_t get_height_m1() const
17122     {
17123         return static_cast<uint32_t>(height_m1);
17124     }
set_height_m1isa::npu_set_ofm_height_m1_t17125     CONSTEXPR npu_set_ofm_height_m1_t& set_height_m1(uint32_t value)
17126     {
17127         assert((value >> 16) == 0);
17128         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
17129         return *this;
17130     }
17131 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_height_m1_t17132     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17133     {
17134         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
17135     }
17136 #endif
17137 #endif
17138 };
17139 // Output feature map depth
17140 struct npu_set_ofm_depth_m1_t
17141 {
17142 #ifdef __cplusplus
17143 private:
17144 #endif
17145     uint32_t opcode:10; //  opcode
17146     uint32_t reserved0:4;
17147     uint32_t control:2; //  control
17148     uint32_t depth_m1:16; //  Output feature map depth
17149 #ifdef __cplusplus
17150 public:
npu_set_ofm_depth_m1_tisa::npu_set_ofm_depth_m1_t17151     npu_set_ofm_depth_m1_t(uint32_t _depth_m1) :
17152         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1)),
17153         reserved0(0),
17154         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17155         depth_m1(_depth_m1 & ((1U << 16)-1))
17156     {}
npu_set_ofm_depth_m1_tisa::npu_set_ofm_depth_m1_t17157     CONSTEXPR npu_set_ofm_depth_m1_t() :
17158         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1)),
17159         reserved0(0),
17160         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17161         depth_m1(0)
17162     {}
validisa::npu_set_ofm_depth_m1_t17163     CONSTEXPR bool valid() const
17164     {
17165         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17166     }
initisa::npu_set_ofm_depth_m1_t17167     CONSTEXPR void init()
17168     {
17169         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17170     }
uint32_tisa::npu_set_ofm_depth_m1_t17171     operator uint32_t()
17172     {
17173         uint32_t word = 0;
17174         word |= uint32_t(opcode) << 0;
17175         word |= uint32_t(control) << 14;
17176         word |= uint32_t(depth_m1) << 16;
17177         return word;
17178     }
get_opcodeisa::npu_set_ofm_depth_m1_t17179     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17180     {
17181         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17182     }
set_opcodeisa::npu_set_ofm_depth_m1_t17183     CONSTEXPR npu_set_ofm_depth_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17184     {
17185         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17186         return *this;
17187     }
get_controlisa::npu_set_ofm_depth_m1_t17188     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17189     {
17190         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17191     }
set_controlisa::npu_set_ofm_depth_m1_t17192     CONSTEXPR npu_set_ofm_depth_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17193     {
17194         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17195         return *this;
17196     }
get_depth_m1isa::npu_set_ofm_depth_m1_t17197     CONSTEXPR uint32_t get_depth_m1() const
17198     {
17199         return static_cast<uint32_t>(depth_m1);
17200     }
set_depth_m1isa::npu_set_ofm_depth_m1_t17201     CONSTEXPR npu_set_ofm_depth_m1_t& set_depth_m1(uint32_t value)
17202     {
17203         assert((value >> 16) == 0);
17204         depth_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
17205         return *this;
17206     }
17207 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_depth_m1_t17208     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17209     {
17210         fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
17211     }
17212 #endif
17213 #endif
17214 };
17215 // OFM Precision
17216 struct npu_set_ofm_precision_t
17217 {
17218 #ifdef __cplusplus
17219 private:
17220 #endif
17221     uint32_t opcode:10; //  opcode
17222     uint32_t reserved0:4;
17223     uint32_t control:2; //  control
17224     uint32_t activation_type:1; //  OFM type
17225     uint32_t activation_precision:2; //  OFM precision
17226     uint32_t reserved1:3;
17227     uint32_t activation_format:2; //  OFM format
17228     uint32_t scale_mode:1; //  OFM scale mode
17229     uint32_t activation_reverse:2; //  OFM reverse
17230     uint32_t activation_transpose:3; //  OFM transpose
17231     uint32_t activation_storage:2; //  OFM storage mode
17232 #ifdef __cplusplus
17233 public:
npu_set_ofm_precision_tisa::npu_set_ofm_precision_t17234     npu_set_ofm_precision_t(NPU_NAMESPACE::activation_type _activation_type, NPU_NAMESPACE::activation_precision _activation_precision, NPU_NAMESPACE::activation_format _activation_format, NPU_NAMESPACE::ofm_scale_mode _scale_mode, NPU_NAMESPACE::activation_reverse _activation_reverse, NPU_NAMESPACE::activation_transpose _activation_transpose, NPU_NAMESPACE::activation_storage _activation_storage) :
17235         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION)),
17236         reserved0(0),
17237         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17238         activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1)-1)),
17239         activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2)-1)),
17240         reserved1(0),
17241         activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2)-1)),
17242         scale_mode(static_cast<uint8_t>(_scale_mode) & ((1U << 1)-1)),
17243         activation_reverse(static_cast<uint8_t>(_activation_reverse) & ((1U << 2)-1)),
17244         activation_transpose(static_cast<uint8_t>(_activation_transpose) & ((1U << 3)-1)),
17245         activation_storage(static_cast<uint8_t>(_activation_storage) & ((1U << 2)-1))
17246     {}
npu_set_ofm_precision_tisa::npu_set_ofm_precision_t17247     CONSTEXPR npu_set_ofm_precision_t() :
17248         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION)),
17249         reserved0(0),
17250         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17251         activation_type(0),
17252         activation_precision(0),
17253         reserved1(0),
17254         activation_format(0),
17255         scale_mode(0),
17256         activation_reverse(0),
17257         activation_transpose(0),
17258         activation_storage(0)
17259     {}
validisa::npu_set_ofm_precision_t17260     CONSTEXPR bool valid() const
17261     {
17262         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17263     }
initisa::npu_set_ofm_precision_t17264     CONSTEXPR void init()
17265     {
17266         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17267     }
uint32_tisa::npu_set_ofm_precision_t17268     operator uint32_t()
17269     {
17270         uint32_t word = 0;
17271         word |= uint32_t(opcode) << 0;
17272         word |= uint32_t(control) << 14;
17273         word |= uint32_t(activation_type) << 16;
17274         word |= uint32_t(activation_precision) << 17;
17275         word |= uint32_t(activation_format) << 22;
17276         word |= uint32_t(scale_mode) << 24;
17277         word |= uint32_t(activation_reverse) << 25;
17278         word |= uint32_t(activation_transpose) << 27;
17279         word |= uint32_t(activation_storage) << 30;
17280         return word;
17281     }
get_opcodeisa::npu_set_ofm_precision_t17282     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17283     {
17284         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17285     }
set_opcodeisa::npu_set_ofm_precision_t17286     CONSTEXPR npu_set_ofm_precision_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17287     {
17288         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17289         return *this;
17290     }
get_controlisa::npu_set_ofm_precision_t17291     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17292     {
17293         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17294     }
set_controlisa::npu_set_ofm_precision_t17295     CONSTEXPR npu_set_ofm_precision_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17296     {
17297         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17298         return *this;
17299     }
get_activation_typeisa::npu_set_ofm_precision_t17300     CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
17301     {
17302         return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
17303     }
set_activation_typeisa::npu_set_ofm_precision_t17304     CONSTEXPR npu_set_ofm_precision_t& set_activation_type(NPU_NAMESPACE::activation_type value)
17305     {
17306         activation_type = static_cast<uint8_t>(value) & ((1U << 1)-1);
17307         return *this;
17308     }
get_activation_precisionisa::npu_set_ofm_precision_t17309     CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
17310     {
17311         return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
17312     }
set_activation_precisionisa::npu_set_ofm_precision_t17313     CONSTEXPR npu_set_ofm_precision_t& set_activation_precision(NPU_NAMESPACE::activation_precision value)
17314     {
17315         activation_precision = static_cast<uint8_t>(value) & ((1U << 2)-1);
17316         return *this;
17317     }
get_activation_formatisa::npu_set_ofm_precision_t17318     CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
17319     {
17320         return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
17321     }
set_activation_formatisa::npu_set_ofm_precision_t17322     CONSTEXPR npu_set_ofm_precision_t& set_activation_format(NPU_NAMESPACE::activation_format value)
17323     {
17324         activation_format = static_cast<uint8_t>(value) & ((1U << 2)-1);
17325         return *this;
17326     }
get_scale_modeisa::npu_set_ofm_precision_t17327     CONSTEXPR NPU_NAMESPACE::ofm_scale_mode get_scale_mode() const
17328     {
17329         return static_cast<NPU_NAMESPACE::ofm_scale_mode>(scale_mode);
17330     }
set_scale_modeisa::npu_set_ofm_precision_t17331     CONSTEXPR npu_set_ofm_precision_t& set_scale_mode(NPU_NAMESPACE::ofm_scale_mode value)
17332     {
17333         scale_mode = static_cast<uint8_t>(value) & ((1U << 1)-1);
17334         return *this;
17335     }
get_activation_reverseisa::npu_set_ofm_precision_t17336     CONSTEXPR NPU_NAMESPACE::activation_reverse get_activation_reverse() const
17337     {
17338         return static_cast<NPU_NAMESPACE::activation_reverse>(activation_reverse);
17339     }
set_activation_reverseisa::npu_set_ofm_precision_t17340     CONSTEXPR npu_set_ofm_precision_t& set_activation_reverse(NPU_NAMESPACE::activation_reverse value)
17341     {
17342         activation_reverse = static_cast<uint8_t>(value) & ((1U << 2)-1);
17343         return *this;
17344     }
get_activation_transposeisa::npu_set_ofm_precision_t17345     CONSTEXPR NPU_NAMESPACE::activation_transpose get_activation_transpose() const
17346     {
17347         return static_cast<NPU_NAMESPACE::activation_transpose>(activation_transpose);
17348     }
set_activation_transposeisa::npu_set_ofm_precision_t17349     CONSTEXPR npu_set_ofm_precision_t& set_activation_transpose(NPU_NAMESPACE::activation_transpose value)
17350     {
17351         activation_transpose = static_cast<uint8_t>(value) & ((1U << 3)-1);
17352         return *this;
17353     }
get_activation_storageisa::npu_set_ofm_precision_t17354     CONSTEXPR NPU_NAMESPACE::activation_storage get_activation_storage() const
17355     {
17356         return static_cast<NPU_NAMESPACE::activation_storage>(activation_storage);
17357     }
set_activation_storageisa::npu_set_ofm_precision_t17358     CONSTEXPR npu_set_ofm_precision_t& set_activation_storage(NPU_NAMESPACE::activation_storage value)
17359     {
17360         activation_storage = static_cast<uint8_t>(value) & ((1U << 2)-1);
17361         return *this;
17362     }
17363 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_precision_t17364     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17365     {
17366         fields.push_back(std::make_pair<std::string, std::string>("activation_type", (activation_type < (sizeof(activation_type_str)/sizeof(activation_type_str[0])) ? activation_type_str[activation_type] : "****")));
17367         fields.push_back(std::make_pair<std::string, std::string>("activation_precision", (activation_precision < (sizeof(activation_precision_str)/sizeof(activation_precision_str[0])) ? activation_precision_str[activation_precision] : "****")));
17368         fields.push_back(std::make_pair<std::string, std::string>("activation_format", (activation_format < (sizeof(activation_format_str)/sizeof(activation_format_str[0])) ? activation_format_str[activation_format] : "****")));
17369         fields.push_back(std::make_pair<std::string, std::string>("scale_mode", (scale_mode < (sizeof(ofm_scale_mode_str)/sizeof(ofm_scale_mode_str[0])) ? ofm_scale_mode_str[scale_mode] : "****")));
17370         fields.push_back(std::make_pair<std::string, std::string>("activation_reverse", (activation_reverse < (sizeof(activation_reverse_str)/sizeof(activation_reverse_str[0])) ? activation_reverse_str[activation_reverse] : "****")));
17371         fields.push_back(std::make_pair<std::string, std::string>("activation_transpose", (activation_transpose < (sizeof(activation_transpose_str)/sizeof(activation_transpose_str[0])) ? activation_transpose_str[activation_transpose] : "****")));
17372         fields.push_back(std::make_pair<std::string, std::string>("activation_storage", (activation_storage < (sizeof(activation_storage_str)/sizeof(activation_storage_str[0])) ? activation_storage_str[activation_storage] : "****")));
17373     }
17374 #endif
17375 #endif
17376 };
17377 // OFM block width
17378 struct npu_set_ofm_blk_width_m1_t
17379 {
17380 #ifdef __cplusplus
17381 private:
17382 #endif
17383     uint32_t opcode:10; //  opcode
17384     uint32_t reserved0:4;
17385     uint32_t control:2; //  control
17386     uint32_t width_m1:7; //  OFM block width
17387     uint32_t reserved1:9;
17388 #ifdef __cplusplus
17389 public:
npu_set_ofm_blk_width_m1_tisa::npu_set_ofm_blk_width_m1_t17390     npu_set_ofm_blk_width_m1_t(uint32_t _width_m1) :
17391         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1)),
17392         reserved0(0),
17393         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17394         width_m1(_width_m1 & ((1U << 7)-1)),
17395         reserved1(0)
17396     {}
npu_set_ofm_blk_width_m1_tisa::npu_set_ofm_blk_width_m1_t17397     CONSTEXPR npu_set_ofm_blk_width_m1_t() :
17398         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1)),
17399         reserved0(0),
17400         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17401         width_m1(0),
17402         reserved1(0)
17403     {}
validisa::npu_set_ofm_blk_width_m1_t17404     CONSTEXPR bool valid() const
17405     {
17406         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17407     }
initisa::npu_set_ofm_blk_width_m1_t17408     CONSTEXPR void init()
17409     {
17410         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17411     }
uint32_tisa::npu_set_ofm_blk_width_m1_t17412     operator uint32_t()
17413     {
17414         uint32_t word = 0;
17415         word |= uint32_t(opcode) << 0;
17416         word |= uint32_t(control) << 14;
17417         word |= uint32_t(width_m1) << 16;
17418         return word;
17419     }
get_opcodeisa::npu_set_ofm_blk_width_m1_t17420     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17421     {
17422         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17423     }
set_opcodeisa::npu_set_ofm_blk_width_m1_t17424     CONSTEXPR npu_set_ofm_blk_width_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17425     {
17426         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17427         return *this;
17428     }
get_controlisa::npu_set_ofm_blk_width_m1_t17429     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17430     {
17431         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17432     }
set_controlisa::npu_set_ofm_blk_width_m1_t17433     CONSTEXPR npu_set_ofm_blk_width_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17434     {
17435         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17436         return *this;
17437     }
get_width_m1isa::npu_set_ofm_blk_width_m1_t17438     CONSTEXPR uint32_t get_width_m1() const
17439     {
17440         return static_cast<uint32_t>(width_m1);
17441     }
set_width_m1isa::npu_set_ofm_blk_width_m1_t17442     CONSTEXPR npu_set_ofm_blk_width_m1_t& set_width_m1(uint32_t value)
17443     {
17444         assert((value >> 7) == 0);
17445         width_m1 = static_cast<uint8_t>(value & ((1U << 7)-1));
17446         return *this;
17447     }
17448 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_blk_width_m1_t17449     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17450     {
17451         fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
17452     }
17453 #endif
17454 #endif
17455 };
17456 // OFM block height
17457 struct npu_set_ofm_blk_height_m1_t
17458 {
17459 #ifdef __cplusplus
17460 private:
17461 #endif
17462     uint32_t opcode:10; //  opcode
17463     uint32_t reserved0:4;
17464     uint32_t control:2; //  control
17465     uint32_t height_m1:7; //  OFM block height
17466     uint32_t reserved1:9;
17467 #ifdef __cplusplus
17468 public:
npu_set_ofm_blk_height_m1_tisa::npu_set_ofm_blk_height_m1_t17469     npu_set_ofm_blk_height_m1_t(uint32_t _height_m1) :
17470         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1)),
17471         reserved0(0),
17472         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17473         height_m1(_height_m1 & ((1U << 7)-1)),
17474         reserved1(0)
17475     {}
npu_set_ofm_blk_height_m1_tisa::npu_set_ofm_blk_height_m1_t17476     CONSTEXPR npu_set_ofm_blk_height_m1_t() :
17477         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1)),
17478         reserved0(0),
17479         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17480         height_m1(0),
17481         reserved1(0)
17482     {}
validisa::npu_set_ofm_blk_height_m1_t17483     CONSTEXPR bool valid() const
17484     {
17485         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17486     }
initisa::npu_set_ofm_blk_height_m1_t17487     CONSTEXPR void init()
17488     {
17489         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17490     }
uint32_tisa::npu_set_ofm_blk_height_m1_t17491     operator uint32_t()
17492     {
17493         uint32_t word = 0;
17494         word |= uint32_t(opcode) << 0;
17495         word |= uint32_t(control) << 14;
17496         word |= uint32_t(height_m1) << 16;
17497         return word;
17498     }
get_opcodeisa::npu_set_ofm_blk_height_m1_t17499     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17500     {
17501         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17502     }
set_opcodeisa::npu_set_ofm_blk_height_m1_t17503     CONSTEXPR npu_set_ofm_blk_height_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17504     {
17505         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17506         return *this;
17507     }
get_controlisa::npu_set_ofm_blk_height_m1_t17508     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17509     {
17510         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17511     }
set_controlisa::npu_set_ofm_blk_height_m1_t17512     CONSTEXPR npu_set_ofm_blk_height_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17513     {
17514         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17515         return *this;
17516     }
get_height_m1isa::npu_set_ofm_blk_height_m1_t17517     CONSTEXPR uint32_t get_height_m1() const
17518     {
17519         return static_cast<uint32_t>(height_m1);
17520     }
set_height_m1isa::npu_set_ofm_blk_height_m1_t17521     CONSTEXPR npu_set_ofm_blk_height_m1_t& set_height_m1(uint32_t value)
17522     {
17523         assert((value >> 7) == 0);
17524         height_m1 = static_cast<uint8_t>(value & ((1U << 7)-1));
17525         return *this;
17526     }
17527 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_blk_height_m1_t17528     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17529     {
17530         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
17531     }
17532 #endif
17533 #endif
17534 };
17535 // OFM block depth
17536 struct npu_set_ofm_blk_depth_m1_t
17537 {
17538 #ifdef __cplusplus
17539 private:
17540 #endif
17541     uint32_t opcode:10; //  opcode
17542     uint32_t reserved0:4;
17543     uint32_t control:2; //  control
17544     uint32_t depth_m1:10; //  OFM block depth
17545     uint32_t reserved1:6;
17546 #ifdef __cplusplus
17547 public:
npu_set_ofm_blk_depth_m1_tisa::npu_set_ofm_blk_depth_m1_t17548     npu_set_ofm_blk_depth_m1_t(uint32_t _depth_m1) :
17549         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1)),
17550         reserved0(0),
17551         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17552         depth_m1(_depth_m1 & ((1U << 10)-1)),
17553         reserved1(0)
17554     {}
npu_set_ofm_blk_depth_m1_tisa::npu_set_ofm_blk_depth_m1_t17555     CONSTEXPR npu_set_ofm_blk_depth_m1_t() :
17556         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1)),
17557         reserved0(0),
17558         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17559         depth_m1(0),
17560         reserved1(0)
17561     {}
validisa::npu_set_ofm_blk_depth_m1_t17562     CONSTEXPR bool valid() const
17563     {
17564         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17565     }
initisa::npu_set_ofm_blk_depth_m1_t17566     CONSTEXPR void init()
17567     {
17568         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17569     }
uint32_tisa::npu_set_ofm_blk_depth_m1_t17570     operator uint32_t()
17571     {
17572         uint32_t word = 0;
17573         word |= uint32_t(opcode) << 0;
17574         word |= uint32_t(control) << 14;
17575         word |= uint32_t(depth_m1) << 16;
17576         return word;
17577     }
get_opcodeisa::npu_set_ofm_blk_depth_m1_t17578     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17579     {
17580         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17581     }
set_opcodeisa::npu_set_ofm_blk_depth_m1_t17582     CONSTEXPR npu_set_ofm_blk_depth_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17583     {
17584         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17585         return *this;
17586     }
get_controlisa::npu_set_ofm_blk_depth_m1_t17587     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17588     {
17589         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17590     }
set_controlisa::npu_set_ofm_blk_depth_m1_t17591     CONSTEXPR npu_set_ofm_blk_depth_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17592     {
17593         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17594         return *this;
17595     }
get_depth_m1isa::npu_set_ofm_blk_depth_m1_t17596     CONSTEXPR uint32_t get_depth_m1() const
17597     {
17598         return static_cast<uint32_t>(depth_m1);
17599     }
set_depth_m1isa::npu_set_ofm_blk_depth_m1_t17600     CONSTEXPR npu_set_ofm_blk_depth_m1_t& set_depth_m1(uint32_t value)
17601     {
17602         assert((value >> 10) == 0);
17603         depth_m1 = static_cast<uint16_t>(value & ((1U << 10)-1));
17604         return *this;
17605     }
17606 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_blk_depth_m1_t17607     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17608     {
17609         fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
17610     }
17611 #endif
17612 #endif
17613 };
17614 // OFM zero point
17615 struct npu_set_ofm_zero_point_t
17616 {
17617 #ifdef __cplusplus
17618 private:
17619 #endif
17620     uint32_t opcode:10; //  opcode
17621     uint32_t reserved0:4;
17622     uint32_t control:2; //  control
17623     uint32_t zero_point:16; //  Zero point offset
17624 #ifdef __cplusplus
17625 public:
npu_set_ofm_zero_point_tisa::npu_set_ofm_zero_point_t17626     npu_set_ofm_zero_point_t(uint32_t _zero_point) :
17627         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT)),
17628         reserved0(0),
17629         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17630         zero_point(_zero_point & ((1U << 16)-1))
17631     {}
npu_set_ofm_zero_point_tisa::npu_set_ofm_zero_point_t17632     CONSTEXPR npu_set_ofm_zero_point_t() :
17633         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT)),
17634         reserved0(0),
17635         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17636         zero_point(0)
17637     {}
validisa::npu_set_ofm_zero_point_t17638     CONSTEXPR bool valid() const
17639     {
17640         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17641     }
initisa::npu_set_ofm_zero_point_t17642     CONSTEXPR void init()
17643     {
17644         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17645     }
uint32_tisa::npu_set_ofm_zero_point_t17646     operator uint32_t()
17647     {
17648         uint32_t word = 0;
17649         word |= uint32_t(opcode) << 0;
17650         word |= uint32_t(control) << 14;
17651         word |= uint32_t(zero_point) << 16;
17652         return word;
17653     }
get_opcodeisa::npu_set_ofm_zero_point_t17654     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17655     {
17656         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17657     }
set_opcodeisa::npu_set_ofm_zero_point_t17658     CONSTEXPR npu_set_ofm_zero_point_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17659     {
17660         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17661         return *this;
17662     }
get_controlisa::npu_set_ofm_zero_point_t17663     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17664     {
17665         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17666     }
set_controlisa::npu_set_ofm_zero_point_t17667     CONSTEXPR npu_set_ofm_zero_point_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17668     {
17669         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17670         return *this;
17671     }
get_zero_pointisa::npu_set_ofm_zero_point_t17672     CONSTEXPR uint32_t get_zero_point() const
17673     {
17674         return static_cast<uint32_t>(zero_point);
17675     }
set_zero_pointisa::npu_set_ofm_zero_point_t17676     CONSTEXPR npu_set_ofm_zero_point_t& set_zero_point(uint32_t value)
17677     {
17678         assert((value >> 16) == 0);
17679         zero_point = static_cast<uint16_t>(value & ((1U << 16)-1));
17680         return *this;
17681     }
17682 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_zero_point_t17683     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17684     {
17685         fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
17686     }
17687 #endif
17688 #endif
17689 };
17690 // OFM Tile 0 and tile 2 width
17691 struct npu_set_ofm_width0_m1_t
17692 {
17693 #ifdef __cplusplus
17694 private:
17695 #endif
17696     uint32_t opcode:10; //  opcode
17697     uint32_t reserved0:4;
17698     uint32_t control:2; //  control
17699     uint32_t width_m1:16; //  OFM Tile 0 and tile 2 width
17700 #ifdef __cplusplus
17701 public:
npu_set_ofm_width0_m1_tisa::npu_set_ofm_width0_m1_t17702     npu_set_ofm_width0_m1_t(uint32_t _width_m1) :
17703         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1)),
17704         reserved0(0),
17705         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17706         width_m1(_width_m1 & ((1U << 16)-1))
17707     {}
npu_set_ofm_width0_m1_tisa::npu_set_ofm_width0_m1_t17708     CONSTEXPR npu_set_ofm_width0_m1_t() :
17709         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1)),
17710         reserved0(0),
17711         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17712         width_m1(0)
17713     {}
validisa::npu_set_ofm_width0_m1_t17714     CONSTEXPR bool valid() const
17715     {
17716         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17717     }
initisa::npu_set_ofm_width0_m1_t17718     CONSTEXPR void init()
17719     {
17720         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17721     }
uint32_tisa::npu_set_ofm_width0_m1_t17722     operator uint32_t()
17723     {
17724         uint32_t word = 0;
17725         word |= uint32_t(opcode) << 0;
17726         word |= uint32_t(control) << 14;
17727         word |= uint32_t(width_m1) << 16;
17728         return word;
17729     }
get_opcodeisa::npu_set_ofm_width0_m1_t17730     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17731     {
17732         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17733     }
set_opcodeisa::npu_set_ofm_width0_m1_t17734     CONSTEXPR npu_set_ofm_width0_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17735     {
17736         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17737         return *this;
17738     }
get_controlisa::npu_set_ofm_width0_m1_t17739     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17740     {
17741         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17742     }
set_controlisa::npu_set_ofm_width0_m1_t17743     CONSTEXPR npu_set_ofm_width0_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17744     {
17745         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17746         return *this;
17747     }
get_width_m1isa::npu_set_ofm_width0_m1_t17748     CONSTEXPR uint32_t get_width_m1() const
17749     {
17750         return static_cast<uint32_t>(width_m1);
17751     }
set_width_m1isa::npu_set_ofm_width0_m1_t17752     CONSTEXPR npu_set_ofm_width0_m1_t& set_width_m1(uint32_t value)
17753     {
17754         assert((value >> 16) == 0);
17755         width_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
17756         return *this;
17757     }
17758 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_width0_m1_t17759     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17760     {
17761         fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
17762     }
17763 #endif
17764 #endif
17765 };
17766 // OFM Tile 0 height
17767 struct npu_set_ofm_height0_m1_t
17768 {
17769 #ifdef __cplusplus
17770 private:
17771 #endif
17772     uint32_t opcode:10; //  opcode
17773     uint32_t reserved0:4;
17774     uint32_t control:2; //  control
17775     uint32_t height_m1:16; //  OFM Tile 0 height
17776 #ifdef __cplusplus
17777 public:
npu_set_ofm_height0_m1_tisa::npu_set_ofm_height0_m1_t17778     npu_set_ofm_height0_m1_t(uint32_t _height_m1) :
17779         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1)),
17780         reserved0(0),
17781         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17782         height_m1(_height_m1 & ((1U << 16)-1))
17783     {}
npu_set_ofm_height0_m1_tisa::npu_set_ofm_height0_m1_t17784     CONSTEXPR npu_set_ofm_height0_m1_t() :
17785         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1)),
17786         reserved0(0),
17787         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17788         height_m1(0)
17789     {}
validisa::npu_set_ofm_height0_m1_t17790     CONSTEXPR bool valid() const
17791     {
17792         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17793     }
initisa::npu_set_ofm_height0_m1_t17794     CONSTEXPR void init()
17795     {
17796         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17797     }
uint32_tisa::npu_set_ofm_height0_m1_t17798     operator uint32_t()
17799     {
17800         uint32_t word = 0;
17801         word |= uint32_t(opcode) << 0;
17802         word |= uint32_t(control) << 14;
17803         word |= uint32_t(height_m1) << 16;
17804         return word;
17805     }
get_opcodeisa::npu_set_ofm_height0_m1_t17806     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17807     {
17808         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17809     }
set_opcodeisa::npu_set_ofm_height0_m1_t17810     CONSTEXPR npu_set_ofm_height0_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17811     {
17812         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17813         return *this;
17814     }
get_controlisa::npu_set_ofm_height0_m1_t17815     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17816     {
17817         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17818     }
set_controlisa::npu_set_ofm_height0_m1_t17819     CONSTEXPR npu_set_ofm_height0_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17820     {
17821         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17822         return *this;
17823     }
get_height_m1isa::npu_set_ofm_height0_m1_t17824     CONSTEXPR uint32_t get_height_m1() const
17825     {
17826         return static_cast<uint32_t>(height_m1);
17827     }
set_height_m1isa::npu_set_ofm_height0_m1_t17828     CONSTEXPR npu_set_ofm_height0_m1_t& set_height_m1(uint32_t value)
17829     {
17830         assert((value >> 16) == 0);
17831         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
17832         return *this;
17833     }
17834 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_height0_m1_t17835     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17836     {
17837         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
17838     }
17839 #endif
17840 #endif
17841 };
17842 // OFM Tile 1 height
17843 struct npu_set_ofm_height1_m1_t
17844 {
17845 #ifdef __cplusplus
17846 private:
17847 #endif
17848     uint32_t opcode:10; //  opcode
17849     uint32_t reserved0:4;
17850     uint32_t control:2; //  control
17851     uint32_t height_m1:16; //  OFM Tile 1 height
17852 #ifdef __cplusplus
17853 public:
npu_set_ofm_height1_m1_tisa::npu_set_ofm_height1_m1_t17854     npu_set_ofm_height1_m1_t(uint32_t _height_m1) :
17855         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1)),
17856         reserved0(0),
17857         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17858         height_m1(_height_m1 & ((1U << 16)-1))
17859     {}
npu_set_ofm_height1_m1_tisa::npu_set_ofm_height1_m1_t17860     CONSTEXPR npu_set_ofm_height1_m1_t() :
17861         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1)),
17862         reserved0(0),
17863         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17864         height_m1(0)
17865     {}
validisa::npu_set_ofm_height1_m1_t17866     CONSTEXPR bool valid() const
17867     {
17868         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17869     }
initisa::npu_set_ofm_height1_m1_t17870     CONSTEXPR void init()
17871     {
17872         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17873     }
uint32_tisa::npu_set_ofm_height1_m1_t17874     operator uint32_t()
17875     {
17876         uint32_t word = 0;
17877         word |= uint32_t(opcode) << 0;
17878         word |= uint32_t(control) << 14;
17879         word |= uint32_t(height_m1) << 16;
17880         return word;
17881     }
get_opcodeisa::npu_set_ofm_height1_m1_t17882     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17883     {
17884         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17885     }
set_opcodeisa::npu_set_ofm_height1_m1_t17886     CONSTEXPR npu_set_ofm_height1_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17887     {
17888         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17889         return *this;
17890     }
get_controlisa::npu_set_ofm_height1_m1_t17891     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17892     {
17893         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17894     }
set_controlisa::npu_set_ofm_height1_m1_t17895     CONSTEXPR npu_set_ofm_height1_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17896     {
17897         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17898         return *this;
17899     }
get_height_m1isa::npu_set_ofm_height1_m1_t17900     CONSTEXPR uint32_t get_height_m1() const
17901     {
17902         return static_cast<uint32_t>(height_m1);
17903     }
set_height_m1isa::npu_set_ofm_height1_m1_t17904     CONSTEXPR npu_set_ofm_height1_m1_t& set_height_m1(uint32_t value)
17905     {
17906         assert((value >> 16) == 0);
17907         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
17908         return *this;
17909     }
17910 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_height1_m1_t17911     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17912     {
17913         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
17914     }
17915 #endif
17916 #endif
17917 };
17918 // Index n for OFM access
17919 struct npu_set_ofm_region_t
17920 {
17921 #ifdef __cplusplus
17922 private:
17923 #endif
17924     uint32_t opcode:10; //  opcode
17925     uint32_t reserved0:4;
17926     uint32_t control:2; //  control
17927     uint32_t region:3; //  Region number for external memory accesses
17928     uint32_t reserved1:13;
17929 #ifdef __cplusplus
17930 public:
npu_set_ofm_region_tisa::npu_set_ofm_region_t17931     npu_set_ofm_region_t(uint32_t _region) :
17932         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION)),
17933         reserved0(0),
17934         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17935         region(_region & ((1U << 3)-1)),
17936         reserved1(0)
17937     {}
npu_set_ofm_region_tisa::npu_set_ofm_region_t17938     CONSTEXPR npu_set_ofm_region_t() :
17939         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION)),
17940         reserved0(0),
17941         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
17942         region(0),
17943         reserved1(0)
17944     {}
validisa::npu_set_ofm_region_t17945     CONSTEXPR bool valid() const
17946     {
17947         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17948     }
initisa::npu_set_ofm_region_t17949     CONSTEXPR void init()
17950     {
17951         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17952     }
uint32_tisa::npu_set_ofm_region_t17953     operator uint32_t()
17954     {
17955         uint32_t word = 0;
17956         word |= uint32_t(opcode) << 0;
17957         word |= uint32_t(control) << 14;
17958         word |= uint32_t(region) << 16;
17959         return word;
17960     }
get_opcodeisa::npu_set_ofm_region_t17961     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
17962     {
17963         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
17964     }
set_opcodeisa::npu_set_ofm_region_t17965     CONSTEXPR npu_set_ofm_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
17966     {
17967         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
17968         return *this;
17969     }
get_controlisa::npu_set_ofm_region_t17970     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
17971     {
17972         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
17973     }
set_controlisa::npu_set_ofm_region_t17974     CONSTEXPR npu_set_ofm_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
17975     {
17976         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
17977         return *this;
17978     }
get_regionisa::npu_set_ofm_region_t17979     CONSTEXPR uint32_t get_region() const
17980     {
17981         return static_cast<uint32_t>(region);
17982     }
set_regionisa::npu_set_ofm_region_t17983     CONSTEXPR npu_set_ofm_region_t& set_region(uint32_t value)
17984     {
17985         assert((value >> 3) == 0);
17986         region = static_cast<uint8_t>(value & ((1U << 3)-1));
17987         return *this;
17988     }
17989 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_region_t17990     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
17991     {
17992         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
17993     }
17994 #endif
17995 #endif
17996 };
17997 // Kernel width
17998 struct npu_set_kernel_width_m1_t
17999 {
18000 #ifdef __cplusplus
18001 private:
18002 #endif
18003     uint32_t opcode:10; //  opcode
18004     uint32_t reserved0:4;
18005     uint32_t control:2; //  control
18006     uint32_t width_m1:16; //  Kernel width
18007 #ifdef __cplusplus
18008 public:
npu_set_kernel_width_m1_tisa::npu_set_kernel_width_m1_t18009     npu_set_kernel_width_m1_t(uint32_t _width_m1) :
18010         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1)),
18011         reserved0(0),
18012         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18013         width_m1(_width_m1 & ((1U << 16)-1))
18014     {}
npu_set_kernel_width_m1_tisa::npu_set_kernel_width_m1_t18015     CONSTEXPR npu_set_kernel_width_m1_t() :
18016         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1)),
18017         reserved0(0),
18018         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18019         width_m1(0)
18020     {}
validisa::npu_set_kernel_width_m1_t18021     CONSTEXPR bool valid() const
18022     {
18023         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18024     }
initisa::npu_set_kernel_width_m1_t18025     CONSTEXPR void init()
18026     {
18027         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18028     }
uint32_tisa::npu_set_kernel_width_m1_t18029     operator uint32_t()
18030     {
18031         uint32_t word = 0;
18032         word |= uint32_t(opcode) << 0;
18033         word |= uint32_t(control) << 14;
18034         word |= uint32_t(width_m1) << 16;
18035         return word;
18036     }
get_opcodeisa::npu_set_kernel_width_m1_t18037     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18038     {
18039         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18040     }
set_opcodeisa::npu_set_kernel_width_m1_t18041     CONSTEXPR npu_set_kernel_width_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18042     {
18043         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18044         return *this;
18045     }
get_controlisa::npu_set_kernel_width_m1_t18046     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18047     {
18048         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18049     }
set_controlisa::npu_set_kernel_width_m1_t18050     CONSTEXPR npu_set_kernel_width_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18051     {
18052         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18053         return *this;
18054     }
get_width_m1isa::npu_set_kernel_width_m1_t18055     CONSTEXPR uint32_t get_width_m1() const
18056     {
18057         return static_cast<uint32_t>(width_m1);
18058     }
set_width_m1isa::npu_set_kernel_width_m1_t18059     CONSTEXPR npu_set_kernel_width_m1_t& set_width_m1(uint32_t value)
18060     {
18061         assert((value >> 16) == 0);
18062         width_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
18063         return *this;
18064     }
18065 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_kernel_width_m1_t18066     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18067     {
18068         fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
18069     }
18070 #endif
18071 #endif
18072 };
18073 // Kernel height
18074 struct npu_set_kernel_height_m1_t
18075 {
18076 #ifdef __cplusplus
18077 private:
18078 #endif
18079     uint32_t opcode:10; //  opcode
18080     uint32_t reserved0:4;
18081     uint32_t control:2; //  control
18082     uint32_t height_m1:16; //  Kernel height
18083 #ifdef __cplusplus
18084 public:
npu_set_kernel_height_m1_tisa::npu_set_kernel_height_m1_t18085     npu_set_kernel_height_m1_t(uint32_t _height_m1) :
18086         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1)),
18087         reserved0(0),
18088         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18089         height_m1(_height_m1 & ((1U << 16)-1))
18090     {}
npu_set_kernel_height_m1_tisa::npu_set_kernel_height_m1_t18091     CONSTEXPR npu_set_kernel_height_m1_t() :
18092         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1)),
18093         reserved0(0),
18094         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18095         height_m1(0)
18096     {}
validisa::npu_set_kernel_height_m1_t18097     CONSTEXPR bool valid() const
18098     {
18099         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18100     }
initisa::npu_set_kernel_height_m1_t18101     CONSTEXPR void init()
18102     {
18103         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18104     }
uint32_tisa::npu_set_kernel_height_m1_t18105     operator uint32_t()
18106     {
18107         uint32_t word = 0;
18108         word |= uint32_t(opcode) << 0;
18109         word |= uint32_t(control) << 14;
18110         word |= uint32_t(height_m1) << 16;
18111         return word;
18112     }
get_opcodeisa::npu_set_kernel_height_m1_t18113     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18114     {
18115         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18116     }
set_opcodeisa::npu_set_kernel_height_m1_t18117     CONSTEXPR npu_set_kernel_height_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18118     {
18119         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18120         return *this;
18121     }
get_controlisa::npu_set_kernel_height_m1_t18122     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18123     {
18124         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18125     }
set_controlisa::npu_set_kernel_height_m1_t18126     CONSTEXPR npu_set_kernel_height_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18127     {
18128         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18129         return *this;
18130     }
get_height_m1isa::npu_set_kernel_height_m1_t18131     CONSTEXPR uint32_t get_height_m1() const
18132     {
18133         return static_cast<uint32_t>(height_m1);
18134     }
set_height_m1isa::npu_set_kernel_height_m1_t18135     CONSTEXPR npu_set_kernel_height_m1_t& set_height_m1(uint32_t value)
18136     {
18137         assert((value >> 16) == 0);
18138         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
18139         return *this;
18140     }
18141 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_kernel_height_m1_t18142     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18143     {
18144         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
18145     }
18146 #endif
18147 #endif
18148 };
18149 // Kernel stride
18150 struct npu_set_kernel_stride_t
18151 {
18152 #ifdef __cplusplus
18153 private:
18154 #endif
18155     uint32_t opcode:10; //  opcode
18156     uint32_t reserved0:4;
18157     uint32_t control:2; //  control
18158     uint32_t stride_x_lsb:1; //  Stride x LSB. (kernel_x_stride - 1)[0]
18159     uint32_t stride_y_lsb:1; //  Stride y LSB. (kernel_y_stride - 1)[0]
18160     uint32_t weight_order:1; //  Weight ordering mode
18161     uint32_t dilation_x:1; //  Kernel x dilation
18162     uint32_t dilation_y:1; //  Kernel y dilation
18163     uint32_t decomposition:1; //  Kernel decomposition
18164     uint32_t stride_x_msb:1; //  Stride x MSB. (kernel_x_stride - 1) >> 1
18165     uint32_t reserved1:2;
18166     uint32_t stride_y_msb:1; //  Stride y MSB. (kernel_y_stride - 1) >> 1
18167     uint32_t reserved2:6;
18168 #ifdef __cplusplus
18169 public:
npu_set_kernel_stride_tisa::npu_set_kernel_stride_t18170     npu_set_kernel_stride_t(uint32_t _stride_x_lsb, uint32_t _stride_y_lsb, NPU_NAMESPACE::weight_order _weight_order, NPU_NAMESPACE::kernel_dilation _dilation_x, NPU_NAMESPACE::kernel_dilation _dilation_y, NPU_NAMESPACE::kernel_decomposition _decomposition, uint32_t _stride_x_msb, uint32_t _stride_y_msb) :
18171         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE)),
18172         reserved0(0),
18173         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18174         stride_x_lsb(_stride_x_lsb & ((1U << 1)-1)),
18175         stride_y_lsb(_stride_y_lsb & ((1U << 1)-1)),
18176         weight_order(static_cast<uint8_t>(_weight_order) & ((1U << 1)-1)),
18177         dilation_x(static_cast<uint8_t>(_dilation_x) & ((1U << 1)-1)),
18178         dilation_y(static_cast<uint8_t>(_dilation_y) & ((1U << 1)-1)),
18179         decomposition(static_cast<uint8_t>(_decomposition) & ((1U << 1)-1)),
18180         stride_x_msb(_stride_x_msb & ((1U << 1)-1)),
18181         reserved1(0),
18182         stride_y_msb(_stride_y_msb & ((1U << 1)-1)),
18183         reserved2(0)
18184     {}
npu_set_kernel_stride_tisa::npu_set_kernel_stride_t18185     CONSTEXPR npu_set_kernel_stride_t() :
18186         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE)),
18187         reserved0(0),
18188         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18189         stride_x_lsb(0),
18190         stride_y_lsb(0),
18191         weight_order(0),
18192         dilation_x(0),
18193         dilation_y(0),
18194         decomposition(0),
18195         stride_x_msb(0),
18196         reserved1(0),
18197         stride_y_msb(0),
18198         reserved2(0)
18199     {}
validisa::npu_set_kernel_stride_t18200     CONSTEXPR bool valid() const
18201     {
18202         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18203     }
initisa::npu_set_kernel_stride_t18204     CONSTEXPR void init()
18205     {
18206         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18207     }
uint32_tisa::npu_set_kernel_stride_t18208     operator uint32_t()
18209     {
18210         uint32_t word = 0;
18211         word |= uint32_t(opcode) << 0;
18212         word |= uint32_t(control) << 14;
18213         word |= uint32_t(stride_x_lsb) << 16;
18214         word |= uint32_t(stride_y_lsb) << 17;
18215         word |= uint32_t(weight_order) << 18;
18216         word |= uint32_t(dilation_x) << 19;
18217         word |= uint32_t(dilation_y) << 20;
18218         word |= uint32_t(decomposition) << 21;
18219         word |= uint32_t(stride_x_msb) << 22;
18220         word |= uint32_t(stride_y_msb) << 25;
18221         return word;
18222     }
get_opcodeisa::npu_set_kernel_stride_t18223     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18224     {
18225         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18226     }
set_opcodeisa::npu_set_kernel_stride_t18227     CONSTEXPR npu_set_kernel_stride_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18228     {
18229         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18230         return *this;
18231     }
get_controlisa::npu_set_kernel_stride_t18232     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18233     {
18234         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18235     }
set_controlisa::npu_set_kernel_stride_t18236     CONSTEXPR npu_set_kernel_stride_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18237     {
18238         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18239         return *this;
18240     }
get_stride_x_lsbisa::npu_set_kernel_stride_t18241     CONSTEXPR uint32_t get_stride_x_lsb() const
18242     {
18243         return static_cast<uint32_t>(stride_x_lsb);
18244     }
set_stride_x_lsbisa::npu_set_kernel_stride_t18245     CONSTEXPR npu_set_kernel_stride_t& set_stride_x_lsb(uint32_t value)
18246     {
18247         assert((value >> 1) == 0);
18248         stride_x_lsb = static_cast<uint8_t>(value & ((1U << 1)-1));
18249         return *this;
18250     }
get_stride_y_lsbisa::npu_set_kernel_stride_t18251     CONSTEXPR uint32_t get_stride_y_lsb() const
18252     {
18253         return static_cast<uint32_t>(stride_y_lsb);
18254     }
set_stride_y_lsbisa::npu_set_kernel_stride_t18255     CONSTEXPR npu_set_kernel_stride_t& set_stride_y_lsb(uint32_t value)
18256     {
18257         assert((value >> 1) == 0);
18258         stride_y_lsb = static_cast<uint8_t>(value & ((1U << 1)-1));
18259         return *this;
18260     }
get_weight_orderisa::npu_set_kernel_stride_t18261     CONSTEXPR NPU_NAMESPACE::weight_order get_weight_order() const
18262     {
18263         return static_cast<NPU_NAMESPACE::weight_order>(weight_order);
18264     }
set_weight_orderisa::npu_set_kernel_stride_t18265     CONSTEXPR npu_set_kernel_stride_t& set_weight_order(NPU_NAMESPACE::weight_order value)
18266     {
18267         weight_order = static_cast<uint8_t>(value) & ((1U << 1)-1);
18268         return *this;
18269     }
get_dilation_xisa::npu_set_kernel_stride_t18270     CONSTEXPR NPU_NAMESPACE::kernel_dilation get_dilation_x() const
18271     {
18272         return static_cast<NPU_NAMESPACE::kernel_dilation>(dilation_x);
18273     }
set_dilation_xisa::npu_set_kernel_stride_t18274     CONSTEXPR npu_set_kernel_stride_t& set_dilation_x(NPU_NAMESPACE::kernel_dilation value)
18275     {
18276         dilation_x = static_cast<uint8_t>(value) & ((1U << 1)-1);
18277         return *this;
18278     }
get_dilation_yisa::npu_set_kernel_stride_t18279     CONSTEXPR NPU_NAMESPACE::kernel_dilation get_dilation_y() const
18280     {
18281         return static_cast<NPU_NAMESPACE::kernel_dilation>(dilation_y);
18282     }
set_dilation_yisa::npu_set_kernel_stride_t18283     CONSTEXPR npu_set_kernel_stride_t& set_dilation_y(NPU_NAMESPACE::kernel_dilation value)
18284     {
18285         dilation_y = static_cast<uint8_t>(value) & ((1U << 1)-1);
18286         return *this;
18287     }
get_decompositionisa::npu_set_kernel_stride_t18288     CONSTEXPR NPU_NAMESPACE::kernel_decomposition get_decomposition() const
18289     {
18290         return static_cast<NPU_NAMESPACE::kernel_decomposition>(decomposition);
18291     }
set_decompositionisa::npu_set_kernel_stride_t18292     CONSTEXPR npu_set_kernel_stride_t& set_decomposition(NPU_NAMESPACE::kernel_decomposition value)
18293     {
18294         decomposition = static_cast<uint8_t>(value) & ((1U << 1)-1);
18295         return *this;
18296     }
get_stride_x_msbisa::npu_set_kernel_stride_t18297     CONSTEXPR uint32_t get_stride_x_msb() const
18298     {
18299         return static_cast<uint32_t>(stride_x_msb);
18300     }
set_stride_x_msbisa::npu_set_kernel_stride_t18301     CONSTEXPR npu_set_kernel_stride_t& set_stride_x_msb(uint32_t value)
18302     {
18303         assert((value >> 1) == 0);
18304         stride_x_msb = static_cast<uint8_t>(value & ((1U << 1)-1));
18305         return *this;
18306     }
get_stride_y_msbisa::npu_set_kernel_stride_t18307     CONSTEXPR uint32_t get_stride_y_msb() const
18308     {
18309         return static_cast<uint32_t>(stride_y_msb);
18310     }
set_stride_y_msbisa::npu_set_kernel_stride_t18311     CONSTEXPR npu_set_kernel_stride_t& set_stride_y_msb(uint32_t value)
18312     {
18313         assert((value >> 1) == 0);
18314         stride_y_msb = static_cast<uint8_t>(value & ((1U << 1)-1));
18315         return *this;
18316     }
18317 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_kernel_stride_t18318     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18319     {
18320         fields.push_back(std::make_pair<std::string, std::string>("stride_x_lsb", std::to_string(stride_x_lsb)));
18321         fields.push_back(std::make_pair<std::string, std::string>("stride_y_lsb", std::to_string(stride_y_lsb)));
18322         fields.push_back(std::make_pair<std::string, std::string>("weight_order", (weight_order < (sizeof(weight_order_str)/sizeof(weight_order_str[0])) ? weight_order_str[weight_order] : "****")));
18323         fields.push_back(std::make_pair<std::string, std::string>("dilation_x", (dilation_x < (sizeof(kernel_dilation_str)/sizeof(kernel_dilation_str[0])) ? kernel_dilation_str[dilation_x] : "****")));
18324         fields.push_back(std::make_pair<std::string, std::string>("dilation_y", (dilation_y < (sizeof(kernel_dilation_str)/sizeof(kernel_dilation_str[0])) ? kernel_dilation_str[dilation_y] : "****")));
18325         fields.push_back(std::make_pair<std::string, std::string>("decomposition", (decomposition < (sizeof(kernel_decomposition_str)/sizeof(kernel_decomposition_str[0])) ? kernel_decomposition_str[decomposition] : "****")));
18326         fields.push_back(std::make_pair<std::string, std::string>("stride_x_msb", std::to_string(stride_x_msb)));
18327         fields.push_back(std::make_pair<std::string, std::string>("stride_y_msb", std::to_string(stride_y_msb)));
18328     }
18329 #endif
18330 #endif
18331 };
18332 // Accumulator format
18333 struct npu_set_acc_format_t
18334 {
18335 #ifdef __cplusplus
18336 private:
18337 #endif
18338     uint32_t opcode:10; //  opcode
18339     uint32_t reserved0:4;
18340     uint32_t control:2; //  control
18341     uint32_t acc_format:2; //  Accumulator format
18342     uint32_t reserved1:2;
18343     uint32_t acc_input:2; //  Accumulator input
18344     uint32_t acc_output:1; //  Accumulator output
18345     uint32_t reserved2:1;
18346     uint32_t microblock:3; //  Accumulator microblock size
18347     uint32_t reserved3:5;
18348 #ifdef __cplusplus
18349 public:
npu_set_acc_format_tisa::npu_set_acc_format_t18350     npu_set_acc_format_t(NPU_NAMESPACE::acc_format _acc_format, NPU_NAMESPACE::acc_input _acc_input, NPU_NAMESPACE::acc_output _acc_output, NPU_NAMESPACE::microblock _microblock) :
18351         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT)),
18352         reserved0(0),
18353         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18354         acc_format(static_cast<uint8_t>(_acc_format) & ((1U << 2)-1)),
18355         reserved1(0),
18356         acc_input(static_cast<uint8_t>(_acc_input) & ((1U << 2)-1)),
18357         acc_output(static_cast<uint8_t>(_acc_output) & ((1U << 1)-1)),
18358         reserved2(0),
18359         microblock(static_cast<uint8_t>(_microblock) & ((1U << 3)-1)),
18360         reserved3(0)
18361     {}
npu_set_acc_format_tisa::npu_set_acc_format_t18362     CONSTEXPR npu_set_acc_format_t() :
18363         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT)),
18364         reserved0(0),
18365         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18366         acc_format(0),
18367         reserved1(0),
18368         acc_input(0),
18369         acc_output(0),
18370         reserved2(0),
18371         microblock(0),
18372         reserved3(0)
18373     {}
validisa::npu_set_acc_format_t18374     CONSTEXPR bool valid() const
18375     {
18376         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18377     }
initisa::npu_set_acc_format_t18378     CONSTEXPR void init()
18379     {
18380         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18381     }
uint32_tisa::npu_set_acc_format_t18382     operator uint32_t()
18383     {
18384         uint32_t word = 0;
18385         word |= uint32_t(opcode) << 0;
18386         word |= uint32_t(control) << 14;
18387         word |= uint32_t(acc_format) << 16;
18388         word |= uint32_t(acc_input) << 20;
18389         word |= uint32_t(acc_output) << 22;
18390         word |= uint32_t(microblock) << 24;
18391         return word;
18392     }
get_opcodeisa::npu_set_acc_format_t18393     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18394     {
18395         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18396     }
set_opcodeisa::npu_set_acc_format_t18397     CONSTEXPR npu_set_acc_format_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18398     {
18399         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18400         return *this;
18401     }
get_controlisa::npu_set_acc_format_t18402     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18403     {
18404         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18405     }
set_controlisa::npu_set_acc_format_t18406     CONSTEXPR npu_set_acc_format_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18407     {
18408         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18409         return *this;
18410     }
get_acc_formatisa::npu_set_acc_format_t18411     CONSTEXPR NPU_NAMESPACE::acc_format get_acc_format() const
18412     {
18413         return static_cast<NPU_NAMESPACE::acc_format>(acc_format);
18414     }
set_acc_formatisa::npu_set_acc_format_t18415     CONSTEXPR npu_set_acc_format_t& set_acc_format(NPU_NAMESPACE::acc_format value)
18416     {
18417         acc_format = static_cast<uint8_t>(value) & ((1U << 2)-1);
18418         return *this;
18419     }
get_acc_inputisa::npu_set_acc_format_t18420     CONSTEXPR NPU_NAMESPACE::acc_input get_acc_input() const
18421     {
18422         return static_cast<NPU_NAMESPACE::acc_input>(acc_input);
18423     }
set_acc_inputisa::npu_set_acc_format_t18424     CONSTEXPR npu_set_acc_format_t& set_acc_input(NPU_NAMESPACE::acc_input value)
18425     {
18426         acc_input = static_cast<uint8_t>(value) & ((1U << 2)-1);
18427         return *this;
18428     }
get_acc_outputisa::npu_set_acc_format_t18429     CONSTEXPR NPU_NAMESPACE::acc_output get_acc_output() const
18430     {
18431         return static_cast<NPU_NAMESPACE::acc_output>(acc_output);
18432     }
set_acc_outputisa::npu_set_acc_format_t18433     CONSTEXPR npu_set_acc_format_t& set_acc_output(NPU_NAMESPACE::acc_output value)
18434     {
18435         acc_output = static_cast<uint8_t>(value) & ((1U << 1)-1);
18436         return *this;
18437     }
get_microblockisa::npu_set_acc_format_t18438     CONSTEXPR NPU_NAMESPACE::microblock get_microblock() const
18439     {
18440         return static_cast<NPU_NAMESPACE::microblock>(microblock);
18441     }
set_microblockisa::npu_set_acc_format_t18442     CONSTEXPR npu_set_acc_format_t& set_microblock(NPU_NAMESPACE::microblock value)
18443     {
18444         microblock = static_cast<uint8_t>(value) & ((1U << 3)-1);
18445         return *this;
18446     }
18447 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_acc_format_t18448     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18449     {
18450         fields.push_back(std::make_pair<std::string, std::string>("acc_format", (acc_format < (sizeof(acc_format_str)/sizeof(acc_format_str[0])) ? acc_format_str[acc_format] : "****")));
18451         fields.push_back(std::make_pair<std::string, std::string>("acc_input", (acc_input < (sizeof(acc_input_str)/sizeof(acc_input_str[0])) ? acc_input_str[acc_input] : "****")));
18452         fields.push_back(std::make_pair<std::string, std::string>("acc_output", (acc_output < (sizeof(acc_output_str)/sizeof(acc_output_str[0])) ? acc_output_str[acc_output] : "****")));
18453         fields.push_back(std::make_pair<std::string, std::string>("microblock", (microblock < (sizeof(microblock_str)/sizeof(microblock_str[0])) ? microblock_str[microblock] : "****")));
18454     }
18455 #endif
18456 #endif
18457 };
18458 // Activation function and clip range
18459 struct npu_set_activation_t
18460 {
18461 #ifdef __cplusplus
18462 private:
18463 #endif
18464     uint32_t opcode:10; //  opcode
18465     uint32_t reserved0:4;
18466     uint32_t control:2; //  control
18467     uint32_t activation_function:5; //  Activation function to apply
18468     uint32_t table:3; //  Table number to use for LUT
18469     uint32_t reserved1:4;
18470     uint32_t activation_clip_range:1; //  Activation clip to apply
18471     uint32_t reserved2:3;
18472 #ifdef __cplusplus
18473 public:
npu_set_activation_tisa::npu_set_activation_t18474     npu_set_activation_t(NPU_NAMESPACE::activation_function _activation_function, uint32_t _table, NPU_NAMESPACE::activation_clip_range _activation_clip_range) :
18475         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION)),
18476         reserved0(0),
18477         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18478         activation_function(static_cast<uint8_t>(_activation_function) & ((1U << 5)-1)),
18479         table(_table & ((1U << 3)-1)),
18480         reserved1(0),
18481         activation_clip_range(static_cast<uint8_t>(_activation_clip_range) & ((1U << 1)-1)),
18482         reserved2(0)
18483     {}
npu_set_activation_tisa::npu_set_activation_t18484     CONSTEXPR npu_set_activation_t() :
18485         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION)),
18486         reserved0(0),
18487         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18488         activation_function(0),
18489         table(0),
18490         reserved1(0),
18491         activation_clip_range(0),
18492         reserved2(0)
18493     {}
validisa::npu_set_activation_t18494     CONSTEXPR bool valid() const
18495     {
18496         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18497     }
initisa::npu_set_activation_t18498     CONSTEXPR void init()
18499     {
18500         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18501     }
uint32_tisa::npu_set_activation_t18502     operator uint32_t()
18503     {
18504         uint32_t word = 0;
18505         word |= uint32_t(opcode) << 0;
18506         word |= uint32_t(control) << 14;
18507         word |= uint32_t(activation_function) << 16;
18508         word |= uint32_t(table) << 21;
18509         word |= uint32_t(activation_clip_range) << 28;
18510         return word;
18511     }
get_opcodeisa::npu_set_activation_t18512     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18513     {
18514         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18515     }
set_opcodeisa::npu_set_activation_t18516     CONSTEXPR npu_set_activation_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18517     {
18518         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18519         return *this;
18520     }
get_controlisa::npu_set_activation_t18521     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18522     {
18523         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18524     }
set_controlisa::npu_set_activation_t18525     CONSTEXPR npu_set_activation_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18526     {
18527         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18528         return *this;
18529     }
get_activation_functionisa::npu_set_activation_t18530     CONSTEXPR NPU_NAMESPACE::activation_function get_activation_function() const
18531     {
18532         return static_cast<NPU_NAMESPACE::activation_function>(activation_function);
18533     }
set_activation_functionisa::npu_set_activation_t18534     CONSTEXPR npu_set_activation_t& set_activation_function(NPU_NAMESPACE::activation_function value)
18535     {
18536         activation_function = static_cast<uint8_t>(value) & ((1U << 5)-1);
18537         return *this;
18538     }
get_tableisa::npu_set_activation_t18539     CONSTEXPR uint32_t get_table() const
18540     {
18541         return static_cast<uint32_t>(table);
18542     }
set_tableisa::npu_set_activation_t18543     CONSTEXPR npu_set_activation_t& set_table(uint32_t value)
18544     {
18545         assert((value >> 3) == 0);
18546         table = static_cast<uint8_t>(value & ((1U << 3)-1));
18547         return *this;
18548     }
get_activation_clip_rangeisa::npu_set_activation_t18549     CONSTEXPR NPU_NAMESPACE::activation_clip_range get_activation_clip_range() const
18550     {
18551         return static_cast<NPU_NAMESPACE::activation_clip_range>(activation_clip_range);
18552     }
set_activation_clip_rangeisa::npu_set_activation_t18553     CONSTEXPR npu_set_activation_t& set_activation_clip_range(NPU_NAMESPACE::activation_clip_range value)
18554     {
18555         activation_clip_range = static_cast<uint8_t>(value) & ((1U << 1)-1);
18556         return *this;
18557     }
18558 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_activation_t18559     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18560     {
18561         fields.push_back(std::make_pair<std::string, std::string>("activation_function", (activation_function < (sizeof(activation_function_str)/sizeof(activation_function_str[0])) ? activation_function_str[activation_function] : "****")));
18562         fields.push_back(std::make_pair<std::string, std::string>("table", std::to_string(table)));
18563         fields.push_back(std::make_pair<std::string, std::string>("activation_clip_range", (activation_clip_range < (sizeof(activation_clip_range_str)/sizeof(activation_clip_range_str[0])) ? activation_clip_range_str[activation_clip_range] : "****")));
18564     }
18565 #endif
18566 #endif
18567 };
18568 // Lower bound clip
18569 struct npu_set_activation_min_t
18570 {
18571 #ifdef __cplusplus
18572 private:
18573 #endif
18574     uint32_t opcode:10; //  opcode
18575     uint32_t reserved0:4;
18576     uint32_t control:2; //  control
18577     uint32_t clip_boundary:16; //  Clip boundary for OFM activations
18578 #ifdef __cplusplus
18579 public:
npu_set_activation_min_tisa::npu_set_activation_min_t18580     npu_set_activation_min_t(uint32_t _clip_boundary) :
18581         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN)),
18582         reserved0(0),
18583         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18584         clip_boundary(_clip_boundary & ((1U << 16)-1))
18585     {}
npu_set_activation_min_tisa::npu_set_activation_min_t18586     CONSTEXPR npu_set_activation_min_t() :
18587         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN)),
18588         reserved0(0),
18589         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18590         clip_boundary(0)
18591     {}
validisa::npu_set_activation_min_t18592     CONSTEXPR bool valid() const
18593     {
18594         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18595     }
initisa::npu_set_activation_min_t18596     CONSTEXPR void init()
18597     {
18598         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18599     }
uint32_tisa::npu_set_activation_min_t18600     operator uint32_t()
18601     {
18602         uint32_t word = 0;
18603         word |= uint32_t(opcode) << 0;
18604         word |= uint32_t(control) << 14;
18605         word |= uint32_t(clip_boundary) << 16;
18606         return word;
18607     }
get_opcodeisa::npu_set_activation_min_t18608     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18609     {
18610         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18611     }
set_opcodeisa::npu_set_activation_min_t18612     CONSTEXPR npu_set_activation_min_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18613     {
18614         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18615         return *this;
18616     }
get_controlisa::npu_set_activation_min_t18617     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18618     {
18619         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18620     }
set_controlisa::npu_set_activation_min_t18621     CONSTEXPR npu_set_activation_min_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18622     {
18623         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18624         return *this;
18625     }
get_clip_boundaryisa::npu_set_activation_min_t18626     CONSTEXPR uint32_t get_clip_boundary() const
18627     {
18628         return static_cast<uint32_t>(clip_boundary);
18629     }
set_clip_boundaryisa::npu_set_activation_min_t18630     CONSTEXPR npu_set_activation_min_t& set_clip_boundary(uint32_t value)
18631     {
18632         assert((value >> 16) == 0);
18633         clip_boundary = static_cast<uint16_t>(value & ((1U << 16)-1));
18634         return *this;
18635     }
18636 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_activation_min_t18637     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18638     {
18639         fields.push_back(std::make_pair<std::string, std::string>("clip_boundary", std::to_string(clip_boundary)));
18640     }
18641 #endif
18642 #endif
18643 };
18644 // Upper bound clip
18645 struct npu_set_activation_max_t
18646 {
18647 #ifdef __cplusplus
18648 private:
18649 #endif
18650     uint32_t opcode:10; //  opcode
18651     uint32_t reserved0:4;
18652     uint32_t control:2; //  control
18653     uint32_t clip_boundary:16; //  Clip boundary for OFM activations
18654 #ifdef __cplusplus
18655 public:
npu_set_activation_max_tisa::npu_set_activation_max_t18656     npu_set_activation_max_t(uint32_t _clip_boundary) :
18657         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX)),
18658         reserved0(0),
18659         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18660         clip_boundary(_clip_boundary & ((1U << 16)-1))
18661     {}
npu_set_activation_max_tisa::npu_set_activation_max_t18662     CONSTEXPR npu_set_activation_max_t() :
18663         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX)),
18664         reserved0(0),
18665         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18666         clip_boundary(0)
18667     {}
validisa::npu_set_activation_max_t18668     CONSTEXPR bool valid() const
18669     {
18670         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18671     }
initisa::npu_set_activation_max_t18672     CONSTEXPR void init()
18673     {
18674         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18675     }
uint32_tisa::npu_set_activation_max_t18676     operator uint32_t()
18677     {
18678         uint32_t word = 0;
18679         word |= uint32_t(opcode) << 0;
18680         word |= uint32_t(control) << 14;
18681         word |= uint32_t(clip_boundary) << 16;
18682         return word;
18683     }
get_opcodeisa::npu_set_activation_max_t18684     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18685     {
18686         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18687     }
set_opcodeisa::npu_set_activation_max_t18688     CONSTEXPR npu_set_activation_max_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18689     {
18690         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18691         return *this;
18692     }
get_controlisa::npu_set_activation_max_t18693     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18694     {
18695         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18696     }
set_controlisa::npu_set_activation_max_t18697     CONSTEXPR npu_set_activation_max_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18698     {
18699         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18700         return *this;
18701     }
get_clip_boundaryisa::npu_set_activation_max_t18702     CONSTEXPR uint32_t get_clip_boundary() const
18703     {
18704         return static_cast<uint32_t>(clip_boundary);
18705     }
set_clip_boundaryisa::npu_set_activation_max_t18706     CONSTEXPR npu_set_activation_max_t& set_clip_boundary(uint32_t value)
18707     {
18708         assert((value >> 16) == 0);
18709         clip_boundary = static_cast<uint16_t>(value & ((1U << 16)-1));
18710         return *this;
18711     }
18712 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_activation_max_t18713     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18714     {
18715         fields.push_back(std::make_pair<std::string, std::string>("clip_boundary", std::to_string(clip_boundary)));
18716     }
18717 #endif
18718 #endif
18719 };
18720 // Index n for weight stream access
18721 struct npu_set_weight_region_t
18722 {
18723 #ifdef __cplusplus
18724 private:
18725 #endif
18726     uint32_t opcode:10; //  opcode
18727     uint32_t reserved0:4;
18728     uint32_t control:2; //  control
18729     uint32_t region:3; //  Index n for weight stream access
18730     uint32_t reserved1:13;
18731 #ifdef __cplusplus
18732 public:
npu_set_weight_region_tisa::npu_set_weight_region_t18733     npu_set_weight_region_t(uint32_t _region) :
18734         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION)),
18735         reserved0(0),
18736         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18737         region(_region & ((1U << 3)-1)),
18738         reserved1(0)
18739     {}
npu_set_weight_region_tisa::npu_set_weight_region_t18740     CONSTEXPR npu_set_weight_region_t() :
18741         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION)),
18742         reserved0(0),
18743         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18744         region(0),
18745         reserved1(0)
18746     {}
validisa::npu_set_weight_region_t18747     CONSTEXPR bool valid() const
18748     {
18749         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18750     }
initisa::npu_set_weight_region_t18751     CONSTEXPR void init()
18752     {
18753         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18754     }
uint32_tisa::npu_set_weight_region_t18755     operator uint32_t()
18756     {
18757         uint32_t word = 0;
18758         word |= uint32_t(opcode) << 0;
18759         word |= uint32_t(control) << 14;
18760         word |= uint32_t(region) << 16;
18761         return word;
18762     }
get_opcodeisa::npu_set_weight_region_t18763     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18764     {
18765         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18766     }
set_opcodeisa::npu_set_weight_region_t18767     CONSTEXPR npu_set_weight_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18768     {
18769         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18770         return *this;
18771     }
get_controlisa::npu_set_weight_region_t18772     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18773     {
18774         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18775     }
set_controlisa::npu_set_weight_region_t18776     CONSTEXPR npu_set_weight_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18777     {
18778         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18779         return *this;
18780     }
get_regionisa::npu_set_weight_region_t18781     CONSTEXPR uint32_t get_region() const
18782     {
18783         return static_cast<uint32_t>(region);
18784     }
set_regionisa::npu_set_weight_region_t18785     CONSTEXPR npu_set_weight_region_t& set_region(uint32_t value)
18786     {
18787         assert((value >> 3) == 0);
18788         region = static_cast<uint8_t>(value & ((1U << 3)-1));
18789         return *this;
18790     }
18791 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight_region_t18792     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18793     {
18794         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
18795     }
18796 #endif
18797 #endif
18798 };
18799 // Index n for scale stream access
18800 struct npu_set_scale_region_t
18801 {
18802 #ifdef __cplusplus
18803 private:
18804 #endif
18805     uint32_t opcode:10; //  opcode
18806     uint32_t reserved0:4;
18807     uint32_t control:2; //  control
18808     uint32_t region:3; //  Index n for scale stream access
18809     uint32_t reserved1:13;
18810 #ifdef __cplusplus
18811 public:
npu_set_scale_region_tisa::npu_set_scale_region_t18812     npu_set_scale_region_t(uint32_t _region) :
18813         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION)),
18814         reserved0(0),
18815         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18816         region(_region & ((1U << 3)-1)),
18817         reserved1(0)
18818     {}
npu_set_scale_region_tisa::npu_set_scale_region_t18819     CONSTEXPR npu_set_scale_region_t() :
18820         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION)),
18821         reserved0(0),
18822         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18823         region(0),
18824         reserved1(0)
18825     {}
validisa::npu_set_scale_region_t18826     CONSTEXPR bool valid() const
18827     {
18828         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18829     }
initisa::npu_set_scale_region_t18830     CONSTEXPR void init()
18831     {
18832         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18833     }
uint32_tisa::npu_set_scale_region_t18834     operator uint32_t()
18835     {
18836         uint32_t word = 0;
18837         word |= uint32_t(opcode) << 0;
18838         word |= uint32_t(control) << 14;
18839         word |= uint32_t(region) << 16;
18840         return word;
18841     }
get_opcodeisa::npu_set_scale_region_t18842     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18843     {
18844         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18845     }
set_opcodeisa::npu_set_scale_region_t18846     CONSTEXPR npu_set_scale_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18847     {
18848         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18849         return *this;
18850     }
get_controlisa::npu_set_scale_region_t18851     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18852     {
18853         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18854     }
set_controlisa::npu_set_scale_region_t18855     CONSTEXPR npu_set_scale_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18856     {
18857         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18858         return *this;
18859     }
get_regionisa::npu_set_scale_region_t18860     CONSTEXPR uint32_t get_region() const
18861     {
18862         return static_cast<uint32_t>(region);
18863     }
set_regionisa::npu_set_scale_region_t18864     CONSTEXPR npu_set_scale_region_t& set_region(uint32_t value)
18865     {
18866         assert((value >> 3) == 0);
18867         region = static_cast<uint8_t>(value & ((1U << 3)-1));
18868         return *this;
18869     }
18870 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_scale_region_t18871     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18872     {
18873         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
18874     }
18875 #endif
18876 #endif
18877 };
18878 // Set weight stream format
18879 struct npu_set_weight_format_t
18880 {
18881 #ifdef __cplusplus
18882 private:
18883 #endif
18884     uint32_t opcode:10; //  opcode
18885     uint32_t reserved0:4;
18886     uint32_t control:2; //  control
18887     uint32_t weight_format:1; //  Weight stream format
18888     uint32_t reserved1:3;
18889     uint32_t weight_sparsity:1; //  Weight sparsity type
18890     uint32_t reserved2:11;
18891 #ifdef __cplusplus
18892 public:
npu_set_weight_format_tisa::npu_set_weight_format_t18893     npu_set_weight_format_t(NPU_NAMESPACE::weight_format _weight_format, NPU_NAMESPACE::weight_sparsity _weight_sparsity) :
18894         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_FORMAT)),
18895         reserved0(0),
18896         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18897         weight_format(static_cast<uint8_t>(_weight_format) & ((1U << 1)-1)),
18898         reserved1(0),
18899         weight_sparsity(static_cast<uint8_t>(_weight_sparsity) & ((1U << 1)-1)),
18900         reserved2(0)
18901     {}
npu_set_weight_format_tisa::npu_set_weight_format_t18902     CONSTEXPR npu_set_weight_format_t() :
18903         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_FORMAT)),
18904         reserved0(0),
18905         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18906         weight_format(0),
18907         reserved1(0),
18908         weight_sparsity(0),
18909         reserved2(0)
18910     {}
validisa::npu_set_weight_format_t18911     CONSTEXPR bool valid() const
18912     {
18913         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_FORMAT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18914     }
initisa::npu_set_weight_format_t18915     CONSTEXPR void init()
18916     {
18917         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_FORMAT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18918     }
uint32_tisa::npu_set_weight_format_t18919     operator uint32_t()
18920     {
18921         uint32_t word = 0;
18922         word |= uint32_t(opcode) << 0;
18923         word |= uint32_t(control) << 14;
18924         word |= uint32_t(weight_format) << 16;
18925         word |= uint32_t(weight_sparsity) << 20;
18926         return word;
18927     }
get_opcodeisa::npu_set_weight_format_t18928     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18929     {
18930         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18931     }
set_opcodeisa::npu_set_weight_format_t18932     CONSTEXPR npu_set_weight_format_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18933     {
18934         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
18935         return *this;
18936     }
get_controlisa::npu_set_weight_format_t18937     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18938     {
18939         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18940     }
set_controlisa::npu_set_weight_format_t18941     CONSTEXPR npu_set_weight_format_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
18942     {
18943         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
18944         return *this;
18945     }
get_weight_formatisa::npu_set_weight_format_t18946     CONSTEXPR NPU_NAMESPACE::weight_format get_weight_format() const
18947     {
18948         return static_cast<NPU_NAMESPACE::weight_format>(weight_format);
18949     }
set_weight_formatisa::npu_set_weight_format_t18950     CONSTEXPR npu_set_weight_format_t& set_weight_format(NPU_NAMESPACE::weight_format value)
18951     {
18952         weight_format = static_cast<uint8_t>(value) & ((1U << 1)-1);
18953         return *this;
18954     }
get_weight_sparsityisa::npu_set_weight_format_t18955     CONSTEXPR NPU_NAMESPACE::weight_sparsity get_weight_sparsity() const
18956     {
18957         return static_cast<NPU_NAMESPACE::weight_sparsity>(weight_sparsity);
18958     }
set_weight_sparsityisa::npu_set_weight_format_t18959     CONSTEXPR npu_set_weight_format_t& set_weight_sparsity(NPU_NAMESPACE::weight_sparsity value)
18960     {
18961         weight_sparsity = static_cast<uint8_t>(value) & ((1U << 1)-1);
18962         return *this;
18963     }
18964 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight_format_t18965     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
18966     {
18967         fields.push_back(std::make_pair<std::string, std::string>("weight_format", (weight_format < (sizeof(weight_format_str)/sizeof(weight_format_str[0])) ? weight_format_str[weight_format] : "****")));
18968         fields.push_back(std::make_pair<std::string, std::string>("weight_sparsity", (weight_sparsity < (sizeof(weight_sparsity_str)/sizeof(weight_sparsity_str[0])) ? weight_sparsity_str[weight_sparsity] : "****")));
18969     }
18970 #endif
18971 #endif
18972 };
18973 // Block number of blocks dependency
18974 struct npu_set_blockdep_t
18975 {
18976 #ifdef __cplusplus
18977 private:
18978 #endif
18979     uint32_t opcode:10; //  opcode
18980     uint32_t reserved0:4;
18981     uint32_t control:2; //  control
18982     uint32_t blockdep:3; //  Block number of blocks dependency between kernel operations
18983     uint32_t reserved1:13;
18984 #ifdef __cplusplus
18985 public:
npu_set_blockdep_tisa::npu_set_blockdep_t18986     npu_set_blockdep_t(uint32_t _blockdep) :
18987         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP)),
18988         reserved0(0),
18989         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18990         blockdep(_blockdep & ((1U << 3)-1)),
18991         reserved1(0)
18992     {}
npu_set_blockdep_tisa::npu_set_blockdep_t18993     CONSTEXPR npu_set_blockdep_t() :
18994         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP)),
18995         reserved0(0),
18996         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18997         blockdep(0),
18998         reserved1(0)
18999     {}
validisa::npu_set_blockdep_t19000     CONSTEXPR bool valid() const
19001     {
19002         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19003     }
initisa::npu_set_blockdep_t19004     CONSTEXPR void init()
19005     {
19006         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19007     }
uint32_tisa::npu_set_blockdep_t19008     operator uint32_t()
19009     {
19010         uint32_t word = 0;
19011         word |= uint32_t(opcode) << 0;
19012         word |= uint32_t(control) << 14;
19013         word |= uint32_t(blockdep) << 16;
19014         return word;
19015     }
get_opcodeisa::npu_set_blockdep_t19016     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19017     {
19018         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19019     }
set_opcodeisa::npu_set_blockdep_t19020     CONSTEXPR npu_set_blockdep_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19021     {
19022         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19023         return *this;
19024     }
get_controlisa::npu_set_blockdep_t19025     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19026     {
19027         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19028     }
set_controlisa::npu_set_blockdep_t19029     CONSTEXPR npu_set_blockdep_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19030     {
19031         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19032         return *this;
19033     }
get_blockdepisa::npu_set_blockdep_t19034     CONSTEXPR uint32_t get_blockdep() const
19035     {
19036         return static_cast<uint32_t>(blockdep);
19037     }
set_blockdepisa::npu_set_blockdep_t19038     CONSTEXPR npu_set_blockdep_t& set_blockdep(uint32_t value)
19039     {
19040         assert((value >> 3) == 0);
19041         blockdep = static_cast<uint8_t>(value & ((1U << 3)-1));
19042         return *this;
19043     }
19044 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_blockdep_t19045     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19046     {
19047         fields.push_back(std::make_pair<std::string, std::string>("blockdep", std::to_string(blockdep)));
19048     }
19049 #endif
19050 #endif
19051 };
19052 // Set resize scale X numerator
19053 struct npu_set_resize_x_scale_n_m1_t
19054 {
19055 #ifdef __cplusplus
19056 private:
19057 #endif
19058     uint32_t opcode:10; //  opcode
19059     uint32_t reserved0:4;
19060     uint32_t control:2; //  control
19061     uint32_t resize_x_scale_n_m1:11; //  Resize X scale numerator
19062     uint32_t reserved1:5;
19063 #ifdef __cplusplus
19064 public:
npu_set_resize_x_scale_n_m1_tisa::npu_set_resize_x_scale_n_m1_t19065     npu_set_resize_x_scale_n_m1_t(uint32_t _resize_x_scale_n_m1) :
19066         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_SCALE_N_M1)),
19067         reserved0(0),
19068         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19069         resize_x_scale_n_m1(_resize_x_scale_n_m1 & ((1U << 11)-1)),
19070         reserved1(0)
19071     {}
npu_set_resize_x_scale_n_m1_tisa::npu_set_resize_x_scale_n_m1_t19072     CONSTEXPR npu_set_resize_x_scale_n_m1_t() :
19073         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_SCALE_N_M1)),
19074         reserved0(0),
19075         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19076         resize_x_scale_n_m1(0),
19077         reserved1(0)
19078     {}
validisa::npu_set_resize_x_scale_n_m1_t19079     CONSTEXPR bool valid() const
19080     {
19081         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_SCALE_N_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19082     }
initisa::npu_set_resize_x_scale_n_m1_t19083     CONSTEXPR void init()
19084     {
19085         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_SCALE_N_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19086     }
uint32_tisa::npu_set_resize_x_scale_n_m1_t19087     operator uint32_t()
19088     {
19089         uint32_t word = 0;
19090         word |= uint32_t(opcode) << 0;
19091         word |= uint32_t(control) << 14;
19092         word |= uint32_t(resize_x_scale_n_m1) << 16;
19093         return word;
19094     }
get_opcodeisa::npu_set_resize_x_scale_n_m1_t19095     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19096     {
19097         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19098     }
set_opcodeisa::npu_set_resize_x_scale_n_m1_t19099     CONSTEXPR npu_set_resize_x_scale_n_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19100     {
19101         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19102         return *this;
19103     }
get_controlisa::npu_set_resize_x_scale_n_m1_t19104     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19105     {
19106         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19107     }
set_controlisa::npu_set_resize_x_scale_n_m1_t19108     CONSTEXPR npu_set_resize_x_scale_n_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19109     {
19110         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19111         return *this;
19112     }
get_resize_x_scale_n_m1isa::npu_set_resize_x_scale_n_m1_t19113     CONSTEXPR uint32_t get_resize_x_scale_n_m1() const
19114     {
19115         return static_cast<uint32_t>(resize_x_scale_n_m1);
19116     }
set_resize_x_scale_n_m1isa::npu_set_resize_x_scale_n_m1_t19117     CONSTEXPR npu_set_resize_x_scale_n_m1_t& set_resize_x_scale_n_m1(uint32_t value)
19118     {
19119         assert((value >> 11) == 0);
19120         resize_x_scale_n_m1 = static_cast<uint16_t>(value & ((1U << 11)-1));
19121         return *this;
19122     }
19123 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_resize_x_scale_n_m1_t19124     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19125     {
19126         fields.push_back(std::make_pair<std::string, std::string>("resize_x_scale_n_m1", std::to_string(resize_x_scale_n_m1)));
19127     }
19128 #endif
19129 #endif
19130 };
19131 // Set resize scale Y numerator
19132 struct npu_set_resize_y_scale_n_m1_t
19133 {
19134 #ifdef __cplusplus
19135 private:
19136 #endif
19137     uint32_t opcode:10; //  opcode
19138     uint32_t reserved0:4;
19139     uint32_t control:2; //  control
19140     uint32_t resize_y_scale_n_m1:11; //  Resize Y scale numerator
19141     uint32_t reserved1:5;
19142 #ifdef __cplusplus
19143 public:
npu_set_resize_y_scale_n_m1_tisa::npu_set_resize_y_scale_n_m1_t19144     npu_set_resize_y_scale_n_m1_t(uint32_t _resize_y_scale_n_m1) :
19145         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_SCALE_N_M1)),
19146         reserved0(0),
19147         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19148         resize_y_scale_n_m1(_resize_y_scale_n_m1 & ((1U << 11)-1)),
19149         reserved1(0)
19150     {}
npu_set_resize_y_scale_n_m1_tisa::npu_set_resize_y_scale_n_m1_t19151     CONSTEXPR npu_set_resize_y_scale_n_m1_t() :
19152         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_SCALE_N_M1)),
19153         reserved0(0),
19154         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19155         resize_y_scale_n_m1(0),
19156         reserved1(0)
19157     {}
validisa::npu_set_resize_y_scale_n_m1_t19158     CONSTEXPR bool valid() const
19159     {
19160         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_SCALE_N_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19161     }
initisa::npu_set_resize_y_scale_n_m1_t19162     CONSTEXPR void init()
19163     {
19164         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_SCALE_N_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19165     }
uint32_tisa::npu_set_resize_y_scale_n_m1_t19166     operator uint32_t()
19167     {
19168         uint32_t word = 0;
19169         word |= uint32_t(opcode) << 0;
19170         word |= uint32_t(control) << 14;
19171         word |= uint32_t(resize_y_scale_n_m1) << 16;
19172         return word;
19173     }
get_opcodeisa::npu_set_resize_y_scale_n_m1_t19174     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19175     {
19176         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19177     }
set_opcodeisa::npu_set_resize_y_scale_n_m1_t19178     CONSTEXPR npu_set_resize_y_scale_n_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19179     {
19180         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19181         return *this;
19182     }
get_controlisa::npu_set_resize_y_scale_n_m1_t19183     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19184     {
19185         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19186     }
set_controlisa::npu_set_resize_y_scale_n_m1_t19187     CONSTEXPR npu_set_resize_y_scale_n_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19188     {
19189         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19190         return *this;
19191     }
get_resize_y_scale_n_m1isa::npu_set_resize_y_scale_n_m1_t19192     CONSTEXPR uint32_t get_resize_y_scale_n_m1() const
19193     {
19194         return static_cast<uint32_t>(resize_y_scale_n_m1);
19195     }
set_resize_y_scale_n_m1isa::npu_set_resize_y_scale_n_m1_t19196     CONSTEXPR npu_set_resize_y_scale_n_m1_t& set_resize_y_scale_n_m1(uint32_t value)
19197     {
19198         assert((value >> 11) == 0);
19199         resize_y_scale_n_m1 = static_cast<uint16_t>(value & ((1U << 11)-1));
19200         return *this;
19201     }
19202 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_resize_y_scale_n_m1_t19203     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19204     {
19205         fields.push_back(std::make_pair<std::string, std::string>("resize_y_scale_n_m1", std::to_string(resize_y_scale_n_m1)));
19206     }
19207 #endif
19208 #endif
19209 };
19210 // Set resize offset X
19211 struct npu_set_resize_x_offset_t
19212 {
19213 #ifdef __cplusplus
19214 private:
19215 #endif
19216     uint32_t opcode:10; //  opcode
19217     uint32_t reserved0:4;
19218     uint32_t control:2; //  control
19219     uint32_t resize_x_offset:12; //  Resize X offset
19220     uint32_t reserved1:4;
19221 #ifdef __cplusplus
19222 public:
npu_set_resize_x_offset_tisa::npu_set_resize_x_offset_t19223     npu_set_resize_x_offset_t(uint32_t _resize_x_offset) :
19224         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_OFFSET)),
19225         reserved0(0),
19226         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19227         resize_x_offset(_resize_x_offset & ((1U << 12)-1)),
19228         reserved1(0)
19229     {}
npu_set_resize_x_offset_tisa::npu_set_resize_x_offset_t19230     CONSTEXPR npu_set_resize_x_offset_t() :
19231         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_OFFSET)),
19232         reserved0(0),
19233         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19234         resize_x_offset(0),
19235         reserved1(0)
19236     {}
validisa::npu_set_resize_x_offset_t19237     CONSTEXPR bool valid() const
19238     {
19239         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_OFFSET) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19240     }
initisa::npu_set_resize_x_offset_t19241     CONSTEXPR void init()
19242     {
19243         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_X_OFFSET); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19244     }
uint32_tisa::npu_set_resize_x_offset_t19245     operator uint32_t()
19246     {
19247         uint32_t word = 0;
19248         word |= uint32_t(opcode) << 0;
19249         word |= uint32_t(control) << 14;
19250         word |= uint32_t(resize_x_offset) << 16;
19251         return word;
19252     }
get_opcodeisa::npu_set_resize_x_offset_t19253     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19254     {
19255         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19256     }
set_opcodeisa::npu_set_resize_x_offset_t19257     CONSTEXPR npu_set_resize_x_offset_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19258     {
19259         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19260         return *this;
19261     }
get_controlisa::npu_set_resize_x_offset_t19262     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19263     {
19264         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19265     }
set_controlisa::npu_set_resize_x_offset_t19266     CONSTEXPR npu_set_resize_x_offset_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19267     {
19268         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19269         return *this;
19270     }
get_resize_x_offsetisa::npu_set_resize_x_offset_t19271     CONSTEXPR uint32_t get_resize_x_offset() const
19272     {
19273         return static_cast<uint32_t>(resize_x_offset);
19274     }
set_resize_x_offsetisa::npu_set_resize_x_offset_t19275     CONSTEXPR npu_set_resize_x_offset_t& set_resize_x_offset(uint32_t value)
19276     {
19277         assert((value >> 12) == 0);
19278         resize_x_offset = static_cast<uint16_t>(value & ((1U << 12)-1));
19279         return *this;
19280     }
19281 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_resize_x_offset_t19282     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19283     {
19284         fields.push_back(std::make_pair<std::string, std::string>("resize_x_offset", std::to_string(((resize_x_offset <= std::numeric_limits<int>::max() ? static_cast<int>(resize_x_offset) : resize_x_offset - std::numeric_limits<int>::min() + std::numeric_limits<int>::max()) << 20) >> 20)));
19285     }
19286 #endif
19287 #endif
19288 };
19289 // Set resize offset Y
19290 struct npu_set_resize_y_offset_t
19291 {
19292 #ifdef __cplusplus
19293 private:
19294 #endif
19295     uint32_t opcode:10; //  opcode
19296     uint32_t reserved0:4;
19297     uint32_t control:2; //  control
19298     uint32_t resize_y_offset:12; //  Resize Y offset
19299     uint32_t reserved1:4;
19300 #ifdef __cplusplus
19301 public:
npu_set_resize_y_offset_tisa::npu_set_resize_y_offset_t19302     npu_set_resize_y_offset_t(uint32_t _resize_y_offset) :
19303         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_OFFSET)),
19304         reserved0(0),
19305         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19306         resize_y_offset(_resize_y_offset & ((1U << 12)-1)),
19307         reserved1(0)
19308     {}
npu_set_resize_y_offset_tisa::npu_set_resize_y_offset_t19309     CONSTEXPR npu_set_resize_y_offset_t() :
19310         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_OFFSET)),
19311         reserved0(0),
19312         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19313         resize_y_offset(0),
19314         reserved1(0)
19315     {}
validisa::npu_set_resize_y_offset_t19316     CONSTEXPR bool valid() const
19317     {
19318         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_OFFSET) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19319     }
initisa::npu_set_resize_y_offset_t19320     CONSTEXPR void init()
19321     {
19322         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_RESIZE_Y_OFFSET); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19323     }
uint32_tisa::npu_set_resize_y_offset_t19324     operator uint32_t()
19325     {
19326         uint32_t word = 0;
19327         word |= uint32_t(opcode) << 0;
19328         word |= uint32_t(control) << 14;
19329         word |= uint32_t(resize_y_offset) << 16;
19330         return word;
19331     }
get_opcodeisa::npu_set_resize_y_offset_t19332     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19333     {
19334         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19335     }
set_opcodeisa::npu_set_resize_y_offset_t19336     CONSTEXPR npu_set_resize_y_offset_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19337     {
19338         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19339         return *this;
19340     }
get_controlisa::npu_set_resize_y_offset_t19341     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19342     {
19343         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19344     }
set_controlisa::npu_set_resize_y_offset_t19345     CONSTEXPR npu_set_resize_y_offset_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19346     {
19347         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19348         return *this;
19349     }
get_resize_y_offsetisa::npu_set_resize_y_offset_t19350     CONSTEXPR uint32_t get_resize_y_offset() const
19351     {
19352         return static_cast<uint32_t>(resize_y_offset);
19353     }
set_resize_y_offsetisa::npu_set_resize_y_offset_t19354     CONSTEXPR npu_set_resize_y_offset_t& set_resize_y_offset(uint32_t value)
19355     {
19356         assert((value >> 12) == 0);
19357         resize_y_offset = static_cast<uint16_t>(value & ((1U << 12)-1));
19358         return *this;
19359     }
19360 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_resize_y_offset_t19361     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19362     {
19363         fields.push_back(std::make_pair<std::string, std::string>("resize_y_offset", std::to_string(((resize_y_offset <= std::numeric_limits<int>::max() ? static_cast<int>(resize_y_offset) : resize_y_offset - std::numeric_limits<int>::min() + std::numeric_limits<int>::max()) << 20) >> 20)));
19364     }
19365 #endif
19366 #endif
19367 };
19368 // DMA0 source region
19369 struct npu_set_dma0_src_region_t
19370 {
19371 #ifdef __cplusplus
19372 private:
19373 #endif
19374     uint32_t opcode:10; //  opcode
19375     uint32_t reserved0:4;
19376     uint32_t control:2; //  control
19377     uint32_t region:3; //  Region number for external memory accesses
19378     uint32_t reserved1:5;
19379     uint32_t region_mode:1; //  Region mode
19380     uint32_t stride_mode:2; //  Stride mode
19381     uint32_t idx_mode:1; //  Index mode for gather or scatter
19382     uint32_t reserved2:4;
19383 #ifdef __cplusplus
19384 public:
npu_set_dma0_src_region_tisa::npu_set_dma0_src_region_t19385     npu_set_dma0_src_region_t(uint32_t _region, NPU_NAMESPACE::dma_region_mode _region_mode, NPU_NAMESPACE::dma_stride_mode _stride_mode, NPU_NAMESPACE::dma_idx_mode _idx_mode) :
19386         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION)),
19387         reserved0(0),
19388         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19389         region(_region & ((1U << 3)-1)),
19390         reserved1(0),
19391         region_mode(static_cast<uint8_t>(_region_mode) & ((1U << 1)-1)),
19392         stride_mode(static_cast<uint8_t>(_stride_mode) & ((1U << 2)-1)),
19393         idx_mode(static_cast<uint8_t>(_idx_mode) & ((1U << 1)-1)),
19394         reserved2(0)
19395     {}
npu_set_dma0_src_region_tisa::npu_set_dma0_src_region_t19396     CONSTEXPR npu_set_dma0_src_region_t() :
19397         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION)),
19398         reserved0(0),
19399         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19400         region(0),
19401         reserved1(0),
19402         region_mode(0),
19403         stride_mode(0),
19404         idx_mode(0),
19405         reserved2(0)
19406     {}
validisa::npu_set_dma0_src_region_t19407     CONSTEXPR bool valid() const
19408     {
19409         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19410     }
initisa::npu_set_dma0_src_region_t19411     CONSTEXPR void init()
19412     {
19413         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19414     }
uint32_tisa::npu_set_dma0_src_region_t19415     operator uint32_t()
19416     {
19417         uint32_t word = 0;
19418         word |= uint32_t(opcode) << 0;
19419         word |= uint32_t(control) << 14;
19420         word |= uint32_t(region) << 16;
19421         word |= uint32_t(region_mode) << 24;
19422         word |= uint32_t(stride_mode) << 25;
19423         word |= uint32_t(idx_mode) << 27;
19424         return word;
19425     }
get_opcodeisa::npu_set_dma0_src_region_t19426     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19427     {
19428         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19429     }
set_opcodeisa::npu_set_dma0_src_region_t19430     CONSTEXPR npu_set_dma0_src_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19431     {
19432         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19433         return *this;
19434     }
get_controlisa::npu_set_dma0_src_region_t19435     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19436     {
19437         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19438     }
set_controlisa::npu_set_dma0_src_region_t19439     CONSTEXPR npu_set_dma0_src_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19440     {
19441         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19442         return *this;
19443     }
get_regionisa::npu_set_dma0_src_region_t19444     CONSTEXPR uint32_t get_region() const
19445     {
19446         return static_cast<uint32_t>(region);
19447     }
set_regionisa::npu_set_dma0_src_region_t19448     CONSTEXPR npu_set_dma0_src_region_t& set_region(uint32_t value)
19449     {
19450         assert((value >> 3) == 0);
19451         region = static_cast<uint8_t>(value & ((1U << 3)-1));
19452         return *this;
19453     }
get_region_modeisa::npu_set_dma0_src_region_t19454     CONSTEXPR NPU_NAMESPACE::dma_region_mode get_region_mode() const
19455     {
19456         return static_cast<NPU_NAMESPACE::dma_region_mode>(region_mode);
19457     }
set_region_modeisa::npu_set_dma0_src_region_t19458     CONSTEXPR npu_set_dma0_src_region_t& set_region_mode(NPU_NAMESPACE::dma_region_mode value)
19459     {
19460         region_mode = static_cast<uint8_t>(value) & ((1U << 1)-1);
19461         return *this;
19462     }
get_stride_modeisa::npu_set_dma0_src_region_t19463     CONSTEXPR NPU_NAMESPACE::dma_stride_mode get_stride_mode() const
19464     {
19465         return static_cast<NPU_NAMESPACE::dma_stride_mode>(stride_mode);
19466     }
set_stride_modeisa::npu_set_dma0_src_region_t19467     CONSTEXPR npu_set_dma0_src_region_t& set_stride_mode(NPU_NAMESPACE::dma_stride_mode value)
19468     {
19469         stride_mode = static_cast<uint8_t>(value) & ((1U << 2)-1);
19470         return *this;
19471     }
get_idx_modeisa::npu_set_dma0_src_region_t19472     CONSTEXPR NPU_NAMESPACE::dma_idx_mode get_idx_mode() const
19473     {
19474         return static_cast<NPU_NAMESPACE::dma_idx_mode>(idx_mode);
19475     }
set_idx_modeisa::npu_set_dma0_src_region_t19476     CONSTEXPR npu_set_dma0_src_region_t& set_idx_mode(NPU_NAMESPACE::dma_idx_mode value)
19477     {
19478         idx_mode = static_cast<uint8_t>(value) & ((1U << 1)-1);
19479         return *this;
19480     }
19481 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_src_region_t19482     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19483     {
19484         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
19485         fields.push_back(std::make_pair<std::string, std::string>("region_mode", (region_mode < (sizeof(dma_region_mode_str)/sizeof(dma_region_mode_str[0])) ? dma_region_mode_str[region_mode] : "****")));
19486         fields.push_back(std::make_pair<std::string, std::string>("stride_mode", (stride_mode < (sizeof(dma_stride_mode_str)/sizeof(dma_stride_mode_str[0])) ? dma_stride_mode_str[stride_mode] : "****")));
19487         fields.push_back(std::make_pair<std::string, std::string>("idx_mode", (idx_mode < (sizeof(dma_idx_mode_str)/sizeof(dma_idx_mode_str[0])) ? dma_idx_mode_str[idx_mode] : "****")));
19488     }
19489 #endif
19490 #endif
19491 };
19492 // DMA0 destination region
19493 struct npu_set_dma0_dst_region_t
19494 {
19495 #ifdef __cplusplus
19496 private:
19497 #endif
19498     uint32_t opcode:10; //  opcode
19499     uint32_t reserved0:4;
19500     uint32_t control:2; //  control
19501     uint32_t region:3; //  Region number for memory accesses
19502     uint32_t reserved1:5;
19503     uint32_t region_mode:1; //  Region mode
19504     uint32_t reserved2:2;
19505     uint32_t idx_mode:1; //  Index mode for gather or scatter
19506     uint32_t reserved3:4;
19507 #ifdef __cplusplus
19508 public:
npu_set_dma0_dst_region_tisa::npu_set_dma0_dst_region_t19509     npu_set_dma0_dst_region_t(uint32_t _region, NPU_NAMESPACE::dma_region_mode _region_mode, NPU_NAMESPACE::dma_idx_mode _idx_mode) :
19510         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION)),
19511         reserved0(0),
19512         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19513         region(_region & ((1U << 3)-1)),
19514         reserved1(0),
19515         region_mode(static_cast<uint8_t>(_region_mode) & ((1U << 1)-1)),
19516         reserved2(0),
19517         idx_mode(static_cast<uint8_t>(_idx_mode) & ((1U << 1)-1)),
19518         reserved3(0)
19519     {}
npu_set_dma0_dst_region_tisa::npu_set_dma0_dst_region_t19520     CONSTEXPR npu_set_dma0_dst_region_t() :
19521         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION)),
19522         reserved0(0),
19523         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19524         region(0),
19525         reserved1(0),
19526         region_mode(0),
19527         reserved2(0),
19528         idx_mode(0),
19529         reserved3(0)
19530     {}
validisa::npu_set_dma0_dst_region_t19531     CONSTEXPR bool valid() const
19532     {
19533         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19534     }
initisa::npu_set_dma0_dst_region_t19535     CONSTEXPR void init()
19536     {
19537         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19538     }
uint32_tisa::npu_set_dma0_dst_region_t19539     operator uint32_t()
19540     {
19541         uint32_t word = 0;
19542         word |= uint32_t(opcode) << 0;
19543         word |= uint32_t(control) << 14;
19544         word |= uint32_t(region) << 16;
19545         word |= uint32_t(region_mode) << 24;
19546         word |= uint32_t(idx_mode) << 27;
19547         return word;
19548     }
get_opcodeisa::npu_set_dma0_dst_region_t19549     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19550     {
19551         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19552     }
set_opcodeisa::npu_set_dma0_dst_region_t19553     CONSTEXPR npu_set_dma0_dst_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19554     {
19555         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19556         return *this;
19557     }
get_controlisa::npu_set_dma0_dst_region_t19558     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19559     {
19560         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19561     }
set_controlisa::npu_set_dma0_dst_region_t19562     CONSTEXPR npu_set_dma0_dst_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19563     {
19564         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19565         return *this;
19566     }
get_regionisa::npu_set_dma0_dst_region_t19567     CONSTEXPR uint32_t get_region() const
19568     {
19569         return static_cast<uint32_t>(region);
19570     }
set_regionisa::npu_set_dma0_dst_region_t19571     CONSTEXPR npu_set_dma0_dst_region_t& set_region(uint32_t value)
19572     {
19573         assert((value >> 3) == 0);
19574         region = static_cast<uint8_t>(value & ((1U << 3)-1));
19575         return *this;
19576     }
get_region_modeisa::npu_set_dma0_dst_region_t19577     CONSTEXPR NPU_NAMESPACE::dma_region_mode get_region_mode() const
19578     {
19579         return static_cast<NPU_NAMESPACE::dma_region_mode>(region_mode);
19580     }
set_region_modeisa::npu_set_dma0_dst_region_t19581     CONSTEXPR npu_set_dma0_dst_region_t& set_region_mode(NPU_NAMESPACE::dma_region_mode value)
19582     {
19583         region_mode = static_cast<uint8_t>(value) & ((1U << 1)-1);
19584         return *this;
19585     }
get_idx_modeisa::npu_set_dma0_dst_region_t19586     CONSTEXPR NPU_NAMESPACE::dma_idx_mode get_idx_mode() const
19587     {
19588         return static_cast<NPU_NAMESPACE::dma_idx_mode>(idx_mode);
19589     }
set_idx_modeisa::npu_set_dma0_dst_region_t19590     CONSTEXPR npu_set_dma0_dst_region_t& set_idx_mode(NPU_NAMESPACE::dma_idx_mode value)
19591     {
19592         idx_mode = static_cast<uint8_t>(value) & ((1U << 1)-1);
19593         return *this;
19594     }
19595 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_dst_region_t19596     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19597     {
19598         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
19599         fields.push_back(std::make_pair<std::string, std::string>("region_mode", (region_mode < (sizeof(dma_region_mode_str)/sizeof(dma_region_mode_str[0])) ? dma_region_mode_str[region_mode] : "****")));
19600         fields.push_back(std::make_pair<std::string, std::string>("idx_mode", (idx_mode < (sizeof(dma_idx_mode_str)/sizeof(dma_idx_mode_str[0])) ? dma_idx_mode_str[idx_mode] : "****")));
19601     }
19602 #endif
19603 #endif
19604 };
19605 // Size of second dimension for 2D/3D transfers
19606 struct npu_set_dma0_size0_t
19607 {
19608 #ifdef __cplusplus
19609 private:
19610 #endif
19611     uint32_t opcode:10; //  opcode
19612     uint32_t reserved0:4;
19613     uint32_t control:2; //  control
19614     uint32_t size:16; //  Size of second dimension for 2D/3D transfers
19615 #ifdef __cplusplus
19616 public:
npu_set_dma0_size0_tisa::npu_set_dma0_size0_t19617     npu_set_dma0_size0_t(uint32_t _size) :
19618         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0)),
19619         reserved0(0),
19620         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19621         size(_size & ((1U << 16)-1))
19622     {}
npu_set_dma0_size0_tisa::npu_set_dma0_size0_t19623     CONSTEXPR npu_set_dma0_size0_t() :
19624         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0)),
19625         reserved0(0),
19626         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19627         size(0)
19628     {}
validisa::npu_set_dma0_size0_t19629     CONSTEXPR bool valid() const
19630     {
19631         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19632     }
initisa::npu_set_dma0_size0_t19633     CONSTEXPR void init()
19634     {
19635         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19636     }
uint32_tisa::npu_set_dma0_size0_t19637     operator uint32_t()
19638     {
19639         uint32_t word = 0;
19640         word |= uint32_t(opcode) << 0;
19641         word |= uint32_t(control) << 14;
19642         word |= uint32_t(size) << 16;
19643         return word;
19644     }
get_opcodeisa::npu_set_dma0_size0_t19645     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19646     {
19647         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19648     }
set_opcodeisa::npu_set_dma0_size0_t19649     CONSTEXPR npu_set_dma0_size0_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19650     {
19651         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19652         return *this;
19653     }
get_controlisa::npu_set_dma0_size0_t19654     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19655     {
19656         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19657     }
set_controlisa::npu_set_dma0_size0_t19658     CONSTEXPR npu_set_dma0_size0_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19659     {
19660         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19661         return *this;
19662     }
get_sizeisa::npu_set_dma0_size0_t19663     CONSTEXPR uint32_t get_size() const
19664     {
19665         return static_cast<uint32_t>(size);
19666     }
set_sizeisa::npu_set_dma0_size0_t19667     CONSTEXPR npu_set_dma0_size0_t& set_size(uint32_t value)
19668     {
19669         assert((value >> 16) == 0);
19670         size = static_cast<uint16_t>(value & ((1U << 16)-1));
19671         return *this;
19672     }
19673 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_size0_t19674     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19675     {
19676         fields.push_back(std::make_pair<std::string, std::string>("size", std::to_string(size)));
19677     }
19678 #endif
19679 #endif
19680 };
19681 // Size of third dimension for 3D transfers
19682 struct npu_set_dma0_size1_t
19683 {
19684 #ifdef __cplusplus
19685 private:
19686 #endif
19687     uint32_t opcode:10; //  opcode
19688     uint32_t reserved0:4;
19689     uint32_t control:2; //  control
19690     uint32_t size:16; //  Size of third dimension for 3D transfers
19691 #ifdef __cplusplus
19692 public:
npu_set_dma0_size1_tisa::npu_set_dma0_size1_t19693     npu_set_dma0_size1_t(uint32_t _size) :
19694         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1)),
19695         reserved0(0),
19696         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19697         size(_size & ((1U << 16)-1))
19698     {}
npu_set_dma0_size1_tisa::npu_set_dma0_size1_t19699     CONSTEXPR npu_set_dma0_size1_t() :
19700         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1)),
19701         reserved0(0),
19702         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19703         size(0)
19704     {}
validisa::npu_set_dma0_size1_t19705     CONSTEXPR bool valid() const
19706     {
19707         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19708     }
initisa::npu_set_dma0_size1_t19709     CONSTEXPR void init()
19710     {
19711         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19712     }
uint32_tisa::npu_set_dma0_size1_t19713     operator uint32_t()
19714     {
19715         uint32_t word = 0;
19716         word |= uint32_t(opcode) << 0;
19717         word |= uint32_t(control) << 14;
19718         word |= uint32_t(size) << 16;
19719         return word;
19720     }
get_opcodeisa::npu_set_dma0_size1_t19721     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19722     {
19723         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19724     }
set_opcodeisa::npu_set_dma0_size1_t19725     CONSTEXPR npu_set_dma0_size1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19726     {
19727         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19728         return *this;
19729     }
get_controlisa::npu_set_dma0_size1_t19730     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19731     {
19732         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19733     }
set_controlisa::npu_set_dma0_size1_t19734     CONSTEXPR npu_set_dma0_size1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19735     {
19736         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19737         return *this;
19738     }
get_sizeisa::npu_set_dma0_size1_t19739     CONSTEXPR uint32_t get_size() const
19740     {
19741         return static_cast<uint32_t>(size);
19742     }
set_sizeisa::npu_set_dma0_size1_t19743     CONSTEXPR npu_set_dma0_size1_t& set_size(uint32_t value)
19744     {
19745         assert((value >> 16) == 0);
19746         size = static_cast<uint16_t>(value & ((1U << 16)-1));
19747         return *this;
19748     }
19749 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_size1_t19750     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19751     {
19752         fields.push_back(std::make_pair<std::string, std::string>("size", std::to_string(size)));
19753     }
19754 #endif
19755 #endif
19756 };
19757 // DMA0 index region
19758 struct npu_set_dma0_idx_region_t
19759 {
19760 #ifdef __cplusplus
19761 private:
19762 #endif
19763     uint32_t opcode:10; //  opcode
19764     uint32_t reserved0:4;
19765     uint32_t control:2; //  control
19766     uint32_t region:3; //  Region number for external memory accesses
19767     uint32_t reserved1:13;
19768 #ifdef __cplusplus
19769 public:
npu_set_dma0_idx_region_tisa::npu_set_dma0_idx_region_t19770     npu_set_dma0_idx_region_t(uint32_t _region) :
19771         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_IDX_REGION)),
19772         reserved0(0),
19773         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19774         region(_region & ((1U << 3)-1)),
19775         reserved1(0)
19776     {}
npu_set_dma0_idx_region_tisa::npu_set_dma0_idx_region_t19777     CONSTEXPR npu_set_dma0_idx_region_t() :
19778         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_IDX_REGION)),
19779         reserved0(0),
19780         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19781         region(0),
19782         reserved1(0)
19783     {}
validisa::npu_set_dma0_idx_region_t19784     CONSTEXPR bool valid() const
19785     {
19786         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_IDX_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19787     }
initisa::npu_set_dma0_idx_region_t19788     CONSTEXPR void init()
19789     {
19790         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_IDX_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19791     }
uint32_tisa::npu_set_dma0_idx_region_t19792     operator uint32_t()
19793     {
19794         uint32_t word = 0;
19795         word |= uint32_t(opcode) << 0;
19796         word |= uint32_t(control) << 14;
19797         word |= uint32_t(region) << 16;
19798         return word;
19799     }
get_opcodeisa::npu_set_dma0_idx_region_t19800     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19801     {
19802         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19803     }
set_opcodeisa::npu_set_dma0_idx_region_t19804     CONSTEXPR npu_set_dma0_idx_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19805     {
19806         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19807         return *this;
19808     }
get_controlisa::npu_set_dma0_idx_region_t19809     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19810     {
19811         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19812     }
set_controlisa::npu_set_dma0_idx_region_t19813     CONSTEXPR npu_set_dma0_idx_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19814     {
19815         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19816         return *this;
19817     }
get_regionisa::npu_set_dma0_idx_region_t19818     CONSTEXPR uint32_t get_region() const
19819     {
19820         return static_cast<uint32_t>(region);
19821     }
set_regionisa::npu_set_dma0_idx_region_t19822     CONSTEXPR npu_set_dma0_idx_region_t& set_region(uint32_t value)
19823     {
19824         assert((value >> 3) == 0);
19825         region = static_cast<uint8_t>(value & ((1U << 3)-1));
19826         return *this;
19827     }
19828 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_idx_region_t19829     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19830     {
19831         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
19832     }
19833 #endif
19834 #endif
19835 };
19836 // IFM2 broadcast configuration
19837 struct npu_set_ifm2_broadcast_t
19838 {
19839 #ifdef __cplusplus
19840 private:
19841 #endif
19842     uint32_t opcode:10; //  opcode
19843     uint32_t reserved0:4;
19844     uint32_t control:2; //  control
19845     uint32_t broadcast_mode:4; //  Broadcast mode for IFM2
19846     uint32_t reserved1:12;
19847 #ifdef __cplusplus
19848 public:
npu_set_ifm2_broadcast_tisa::npu_set_ifm2_broadcast_t19849     npu_set_ifm2_broadcast_t(NPU_NAMESPACE::broadcast_mode _broadcast_mode) :
19850         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST)),
19851         reserved0(0),
19852         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19853         broadcast_mode(static_cast<uint8_t>(_broadcast_mode) & ((1U << 4)-1)),
19854         reserved1(0)
19855     {}
npu_set_ifm2_broadcast_tisa::npu_set_ifm2_broadcast_t19856     CONSTEXPR npu_set_ifm2_broadcast_t() :
19857         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST)),
19858         reserved0(0),
19859         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19860         broadcast_mode(0),
19861         reserved1(0)
19862     {}
validisa::npu_set_ifm2_broadcast_t19863     CONSTEXPR bool valid() const
19864     {
19865         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19866     }
initisa::npu_set_ifm2_broadcast_t19867     CONSTEXPR void init()
19868     {
19869         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19870     }
uint32_tisa::npu_set_ifm2_broadcast_t19871     operator uint32_t()
19872     {
19873         uint32_t word = 0;
19874         word |= uint32_t(opcode) << 0;
19875         word |= uint32_t(control) << 14;
19876         word |= uint32_t(broadcast_mode) << 16;
19877         return word;
19878     }
get_opcodeisa::npu_set_ifm2_broadcast_t19879     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19880     {
19881         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19882     }
set_opcodeisa::npu_set_ifm2_broadcast_t19883     CONSTEXPR npu_set_ifm2_broadcast_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19884     {
19885         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19886         return *this;
19887     }
get_controlisa::npu_set_ifm2_broadcast_t19888     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19889     {
19890         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19891     }
set_controlisa::npu_set_ifm2_broadcast_t19892     CONSTEXPR npu_set_ifm2_broadcast_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19893     {
19894         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19895         return *this;
19896     }
get_broadcast_modeisa::npu_set_ifm2_broadcast_t19897     CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_mode() const
19898     {
19899         return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_mode);
19900     }
set_broadcast_modeisa::npu_set_ifm2_broadcast_t19901     CONSTEXPR npu_set_ifm2_broadcast_t& set_broadcast_mode(NPU_NAMESPACE::broadcast_mode value)
19902     {
19903         broadcast_mode = static_cast<uint8_t>(value) & ((1U << 4)-1);
19904         return *this;
19905     }
19906 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_broadcast_t19907     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
19908     {
19909         fields.push_back(std::make_pair<std::string, std::string>("broadcast_mode", (broadcast_mode < (sizeof(broadcast_mode_str)/sizeof(broadcast_mode_str[0])) ? broadcast_mode_str[broadcast_mode] : "****")));
19910     }
19911 #endif
19912 #endif
19913 };
19914 // IFM2 Precision
19915 struct npu_set_ifm2_precision_t
19916 {
19917 #ifdef __cplusplus
19918 private:
19919 #endif
19920     uint32_t opcode:10; //  opcode
19921     uint32_t reserved0:4;
19922     uint32_t control:2; //  control
19923     uint32_t activation_type:1; //  IFM type
19924     uint32_t reserved1:1;
19925     uint32_t activation_precision:2; //  IFM precision
19926     uint32_t reserved2:2;
19927     uint32_t activation_format:2; //  IFM format
19928     uint32_t reserved3:6;
19929     uint32_t activation_storage:2; //  IFM storage mode
19930 #ifdef __cplusplus
19931 public:
npu_set_ifm2_precision_tisa::npu_set_ifm2_precision_t19932     npu_set_ifm2_precision_t(NPU_NAMESPACE::activation_type _activation_type, NPU_NAMESPACE::activation_precision _activation_precision, NPU_NAMESPACE::activation_format _activation_format, NPU_NAMESPACE::activation_storage _activation_storage) :
19933         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION)),
19934         reserved0(0),
19935         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19936         activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1)-1)),
19937         reserved1(0),
19938         activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2)-1)),
19939         reserved2(0),
19940         activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2)-1)),
19941         reserved3(0),
19942         activation_storage(static_cast<uint8_t>(_activation_storage) & ((1U << 2)-1))
19943     {}
npu_set_ifm2_precision_tisa::npu_set_ifm2_precision_t19944     CONSTEXPR npu_set_ifm2_precision_t() :
19945         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION)),
19946         reserved0(0),
19947         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19948         activation_type(0),
19949         reserved1(0),
19950         activation_precision(0),
19951         reserved2(0),
19952         activation_format(0),
19953         reserved3(0),
19954         activation_storage(0)
19955     {}
validisa::npu_set_ifm2_precision_t19956     CONSTEXPR bool valid() const
19957     {
19958         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19959     }
initisa::npu_set_ifm2_precision_t19960     CONSTEXPR void init()
19961     {
19962         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19963     }
uint32_tisa::npu_set_ifm2_precision_t19964     operator uint32_t()
19965     {
19966         uint32_t word = 0;
19967         word |= uint32_t(opcode) << 0;
19968         word |= uint32_t(control) << 14;
19969         word |= uint32_t(activation_type) << 16;
19970         word |= uint32_t(activation_precision) << 18;
19971         word |= uint32_t(activation_format) << 22;
19972         word |= uint32_t(activation_storage) << 30;
19973         return word;
19974     }
get_opcodeisa::npu_set_ifm2_precision_t19975     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19976     {
19977         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19978     }
set_opcodeisa::npu_set_ifm2_precision_t19979     CONSTEXPR npu_set_ifm2_precision_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19980     {
19981         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
19982         return *this;
19983     }
get_controlisa::npu_set_ifm2_precision_t19984     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19985     {
19986         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19987     }
set_controlisa::npu_set_ifm2_precision_t19988     CONSTEXPR npu_set_ifm2_precision_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
19989     {
19990         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
19991         return *this;
19992     }
get_activation_typeisa::npu_set_ifm2_precision_t19993     CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
19994     {
19995         return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
19996     }
set_activation_typeisa::npu_set_ifm2_precision_t19997     CONSTEXPR npu_set_ifm2_precision_t& set_activation_type(NPU_NAMESPACE::activation_type value)
19998     {
19999         activation_type = static_cast<uint8_t>(value) & ((1U << 1)-1);
20000         return *this;
20001     }
get_activation_precisionisa::npu_set_ifm2_precision_t20002     CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
20003     {
20004         return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
20005     }
set_activation_precisionisa::npu_set_ifm2_precision_t20006     CONSTEXPR npu_set_ifm2_precision_t& set_activation_precision(NPU_NAMESPACE::activation_precision value)
20007     {
20008         activation_precision = static_cast<uint8_t>(value) & ((1U << 2)-1);
20009         return *this;
20010     }
get_activation_formatisa::npu_set_ifm2_precision_t20011     CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
20012     {
20013         return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
20014     }
set_activation_formatisa::npu_set_ifm2_precision_t20015     CONSTEXPR npu_set_ifm2_precision_t& set_activation_format(NPU_NAMESPACE::activation_format value)
20016     {
20017         activation_format = static_cast<uint8_t>(value) & ((1U << 2)-1);
20018         return *this;
20019     }
get_activation_storageisa::npu_set_ifm2_precision_t20020     CONSTEXPR NPU_NAMESPACE::activation_storage get_activation_storage() const
20021     {
20022         return static_cast<NPU_NAMESPACE::activation_storage>(activation_storage);
20023     }
set_activation_storageisa::npu_set_ifm2_precision_t20024     CONSTEXPR npu_set_ifm2_precision_t& set_activation_storage(NPU_NAMESPACE::activation_storage value)
20025     {
20026         activation_storage = static_cast<uint8_t>(value) & ((1U << 2)-1);
20027         return *this;
20028     }
20029 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_precision_t20030     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20031     {
20032         fields.push_back(std::make_pair<std::string, std::string>("activation_type", (activation_type < (sizeof(activation_type_str)/sizeof(activation_type_str[0])) ? activation_type_str[activation_type] : "****")));
20033         fields.push_back(std::make_pair<std::string, std::string>("activation_precision", (activation_precision < (sizeof(activation_precision_str)/sizeof(activation_precision_str[0])) ? activation_precision_str[activation_precision] : "****")));
20034         fields.push_back(std::make_pair<std::string, std::string>("activation_format", (activation_format < (sizeof(activation_format_str)/sizeof(activation_format_str[0])) ? activation_format_str[activation_format] : "****")));
20035         fields.push_back(std::make_pair<std::string, std::string>("activation_storage", (activation_storage < (sizeof(activation_storage_str)/sizeof(activation_storage_str[0])) ? activation_storage_str[activation_storage] : "****")));
20036     }
20037 #endif
20038 #endif
20039 };
20040 // IFM2 zero point
20041 struct npu_set_ifm2_zero_point_t
20042 {
20043 #ifdef __cplusplus
20044 private:
20045 #endif
20046     uint32_t opcode:10; //  opcode
20047     uint32_t reserved0:4;
20048     uint32_t control:2; //  control
20049     uint32_t zero_point:16; //  Zero point offset
20050 #ifdef __cplusplus
20051 public:
npu_set_ifm2_zero_point_tisa::npu_set_ifm2_zero_point_t20052     npu_set_ifm2_zero_point_t(uint32_t _zero_point) :
20053         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT)),
20054         reserved0(0),
20055         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20056         zero_point(_zero_point & ((1U << 16)-1))
20057     {}
npu_set_ifm2_zero_point_tisa::npu_set_ifm2_zero_point_t20058     CONSTEXPR npu_set_ifm2_zero_point_t() :
20059         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT)),
20060         reserved0(0),
20061         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20062         zero_point(0)
20063     {}
validisa::npu_set_ifm2_zero_point_t20064     CONSTEXPR bool valid() const
20065     {
20066         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20067     }
initisa::npu_set_ifm2_zero_point_t20068     CONSTEXPR void init()
20069     {
20070         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20071     }
uint32_tisa::npu_set_ifm2_zero_point_t20072     operator uint32_t()
20073     {
20074         uint32_t word = 0;
20075         word |= uint32_t(opcode) << 0;
20076         word |= uint32_t(control) << 14;
20077         word |= uint32_t(zero_point) << 16;
20078         return word;
20079     }
get_opcodeisa::npu_set_ifm2_zero_point_t20080     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20081     {
20082         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20083     }
set_opcodeisa::npu_set_ifm2_zero_point_t20084     CONSTEXPR npu_set_ifm2_zero_point_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20085     {
20086         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
20087         return *this;
20088     }
get_controlisa::npu_set_ifm2_zero_point_t20089     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20090     {
20091         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20092     }
set_controlisa::npu_set_ifm2_zero_point_t20093     CONSTEXPR npu_set_ifm2_zero_point_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
20094     {
20095         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
20096         return *this;
20097     }
get_zero_pointisa::npu_set_ifm2_zero_point_t20098     CONSTEXPR uint32_t get_zero_point() const
20099     {
20100         return static_cast<uint32_t>(zero_point);
20101     }
set_zero_pointisa::npu_set_ifm2_zero_point_t20102     CONSTEXPR npu_set_ifm2_zero_point_t& set_zero_point(uint32_t value)
20103     {
20104         assert((value >> 16) == 0);
20105         zero_point = static_cast<uint16_t>(value & ((1U << 16)-1));
20106         return *this;
20107     }
20108 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_zero_point_t20109     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20110     {
20111         fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
20112     }
20113 #endif
20114 #endif
20115 };
20116 // IFM2 Tile 0 and Tile 2 width
20117 struct npu_set_ifm2_width0_m1_t
20118 {
20119 #ifdef __cplusplus
20120 private:
20121 #endif
20122     uint32_t opcode:10; //  opcode
20123     uint32_t reserved0:4;
20124     uint32_t control:2; //  control
20125     uint32_t width_m1:16; //  IFM2 Tile 0 and tile 2 width
20126 #ifdef __cplusplus
20127 public:
npu_set_ifm2_width0_m1_tisa::npu_set_ifm2_width0_m1_t20128     npu_set_ifm2_width0_m1_t(uint32_t _width_m1) :
20129         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1)),
20130         reserved0(0),
20131         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20132         width_m1(_width_m1 & ((1U << 16)-1))
20133     {}
npu_set_ifm2_width0_m1_tisa::npu_set_ifm2_width0_m1_t20134     CONSTEXPR npu_set_ifm2_width0_m1_t() :
20135         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1)),
20136         reserved0(0),
20137         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20138         width_m1(0)
20139     {}
validisa::npu_set_ifm2_width0_m1_t20140     CONSTEXPR bool valid() const
20141     {
20142         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20143     }
initisa::npu_set_ifm2_width0_m1_t20144     CONSTEXPR void init()
20145     {
20146         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20147     }
uint32_tisa::npu_set_ifm2_width0_m1_t20148     operator uint32_t()
20149     {
20150         uint32_t word = 0;
20151         word |= uint32_t(opcode) << 0;
20152         word |= uint32_t(control) << 14;
20153         word |= uint32_t(width_m1) << 16;
20154         return word;
20155     }
get_opcodeisa::npu_set_ifm2_width0_m1_t20156     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20157     {
20158         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20159     }
set_opcodeisa::npu_set_ifm2_width0_m1_t20160     CONSTEXPR npu_set_ifm2_width0_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20161     {
20162         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
20163         return *this;
20164     }
get_controlisa::npu_set_ifm2_width0_m1_t20165     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20166     {
20167         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20168     }
set_controlisa::npu_set_ifm2_width0_m1_t20169     CONSTEXPR npu_set_ifm2_width0_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
20170     {
20171         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
20172         return *this;
20173     }
get_width_m1isa::npu_set_ifm2_width0_m1_t20174     CONSTEXPR uint32_t get_width_m1() const
20175     {
20176         return static_cast<uint32_t>(width_m1);
20177     }
set_width_m1isa::npu_set_ifm2_width0_m1_t20178     CONSTEXPR npu_set_ifm2_width0_m1_t& set_width_m1(uint32_t value)
20179     {
20180         assert((value >> 16) == 0);
20181         width_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
20182         return *this;
20183     }
20184 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_width0_m1_t20185     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20186     {
20187         fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
20188     }
20189 #endif
20190 #endif
20191 };
20192 // IFM2 Tile 0 height
20193 struct npu_set_ifm2_height0_m1_t
20194 {
20195 #ifdef __cplusplus
20196 private:
20197 #endif
20198     uint32_t opcode:10; //  opcode
20199     uint32_t reserved0:4;
20200     uint32_t control:2; //  control
20201     uint32_t height_m1:16; //  IFM2 Tile 0 height
20202 #ifdef __cplusplus
20203 public:
npu_set_ifm2_height0_m1_tisa::npu_set_ifm2_height0_m1_t20204     npu_set_ifm2_height0_m1_t(uint32_t _height_m1) :
20205         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1)),
20206         reserved0(0),
20207         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20208         height_m1(_height_m1 & ((1U << 16)-1))
20209     {}
npu_set_ifm2_height0_m1_tisa::npu_set_ifm2_height0_m1_t20210     CONSTEXPR npu_set_ifm2_height0_m1_t() :
20211         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1)),
20212         reserved0(0),
20213         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20214         height_m1(0)
20215     {}
validisa::npu_set_ifm2_height0_m1_t20216     CONSTEXPR bool valid() const
20217     {
20218         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20219     }
initisa::npu_set_ifm2_height0_m1_t20220     CONSTEXPR void init()
20221     {
20222         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20223     }
uint32_tisa::npu_set_ifm2_height0_m1_t20224     operator uint32_t()
20225     {
20226         uint32_t word = 0;
20227         word |= uint32_t(opcode) << 0;
20228         word |= uint32_t(control) << 14;
20229         word |= uint32_t(height_m1) << 16;
20230         return word;
20231     }
get_opcodeisa::npu_set_ifm2_height0_m1_t20232     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20233     {
20234         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20235     }
set_opcodeisa::npu_set_ifm2_height0_m1_t20236     CONSTEXPR npu_set_ifm2_height0_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20237     {
20238         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
20239         return *this;
20240     }
get_controlisa::npu_set_ifm2_height0_m1_t20241     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20242     {
20243         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20244     }
set_controlisa::npu_set_ifm2_height0_m1_t20245     CONSTEXPR npu_set_ifm2_height0_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
20246     {
20247         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
20248         return *this;
20249     }
get_height_m1isa::npu_set_ifm2_height0_m1_t20250     CONSTEXPR uint32_t get_height_m1() const
20251     {
20252         return static_cast<uint32_t>(height_m1);
20253     }
set_height_m1isa::npu_set_ifm2_height0_m1_t20254     CONSTEXPR npu_set_ifm2_height0_m1_t& set_height_m1(uint32_t value)
20255     {
20256         assert((value >> 16) == 0);
20257         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
20258         return *this;
20259     }
20260 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_height0_m1_t20261     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20262     {
20263         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
20264     }
20265 #endif
20266 #endif
20267 };
20268 // IFM2 Tile 1 height
20269 struct npu_set_ifm2_height1_m1_t
20270 {
20271 #ifdef __cplusplus
20272 private:
20273 #endif
20274     uint32_t opcode:10; //  opcode
20275     uint32_t reserved0:4;
20276     uint32_t control:2; //  control
20277     uint32_t height_m1:16; //  IFM2 Tile 1 height
20278 #ifdef __cplusplus
20279 public:
npu_set_ifm2_height1_m1_tisa::npu_set_ifm2_height1_m1_t20280     npu_set_ifm2_height1_m1_t(uint32_t _height_m1) :
20281         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1)),
20282         reserved0(0),
20283         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20284         height_m1(_height_m1 & ((1U << 16)-1))
20285     {}
npu_set_ifm2_height1_m1_tisa::npu_set_ifm2_height1_m1_t20286     CONSTEXPR npu_set_ifm2_height1_m1_t() :
20287         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1)),
20288         reserved0(0),
20289         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20290         height_m1(0)
20291     {}
validisa::npu_set_ifm2_height1_m1_t20292     CONSTEXPR bool valid() const
20293     {
20294         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20295     }
initisa::npu_set_ifm2_height1_m1_t20296     CONSTEXPR void init()
20297     {
20298         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20299     }
uint32_tisa::npu_set_ifm2_height1_m1_t20300     operator uint32_t()
20301     {
20302         uint32_t word = 0;
20303         word |= uint32_t(opcode) << 0;
20304         word |= uint32_t(control) << 14;
20305         word |= uint32_t(height_m1) << 16;
20306         return word;
20307     }
get_opcodeisa::npu_set_ifm2_height1_m1_t20308     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20309     {
20310         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20311     }
set_opcodeisa::npu_set_ifm2_height1_m1_t20312     CONSTEXPR npu_set_ifm2_height1_m1_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20313     {
20314         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
20315         return *this;
20316     }
get_controlisa::npu_set_ifm2_height1_m1_t20317     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20318     {
20319         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20320     }
set_controlisa::npu_set_ifm2_height1_m1_t20321     CONSTEXPR npu_set_ifm2_height1_m1_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
20322     {
20323         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
20324         return *this;
20325     }
get_height_m1isa::npu_set_ifm2_height1_m1_t20326     CONSTEXPR uint32_t get_height_m1() const
20327     {
20328         return static_cast<uint32_t>(height_m1);
20329     }
set_height_m1isa::npu_set_ifm2_height1_m1_t20330     CONSTEXPR npu_set_ifm2_height1_m1_t& set_height_m1(uint32_t value)
20331     {
20332         assert((value >> 16) == 0);
20333         height_m1 = static_cast<uint16_t>(value & ((1U << 16)-1));
20334         return *this;
20335     }
20336 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_height1_m1_t20337     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20338     {
20339         fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
20340     }
20341 #endif
20342 #endif
20343 };
20344 // Index n for IFM2 access
20345 struct npu_set_ifm2_region_t
20346 {
20347 #ifdef __cplusplus
20348 private:
20349 #endif
20350     uint32_t opcode:10; //  opcode
20351     uint32_t reserved0:4;
20352     uint32_t control:2; //  control
20353     uint32_t region:3; //  Region number for external memory accesses
20354     uint32_t reserved1:13;
20355 #ifdef __cplusplus
20356 public:
npu_set_ifm2_region_tisa::npu_set_ifm2_region_t20357     npu_set_ifm2_region_t(uint32_t _region) :
20358         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION)),
20359         reserved0(0),
20360         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20361         region(_region & ((1U << 3)-1)),
20362         reserved1(0)
20363     {}
npu_set_ifm2_region_tisa::npu_set_ifm2_region_t20364     CONSTEXPR npu_set_ifm2_region_t() :
20365         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION)),
20366         reserved0(0),
20367         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
20368         region(0),
20369         reserved1(0)
20370     {}
validisa::npu_set_ifm2_region_t20371     CONSTEXPR bool valid() const
20372     {
20373         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION) && control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20374     }
initisa::npu_set_ifm2_region_t20375     CONSTEXPR void init()
20376     {
20377         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20378     }
uint32_tisa::npu_set_ifm2_region_t20379     operator uint32_t()
20380     {
20381         uint32_t word = 0;
20382         word |= uint32_t(opcode) << 0;
20383         word |= uint32_t(control) << 14;
20384         word |= uint32_t(region) << 16;
20385         return word;
20386     }
get_opcodeisa::npu_set_ifm2_region_t20387     CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20388     {
20389         return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20390     }
set_opcodeisa::npu_set_ifm2_region_t20391     CONSTEXPR npu_set_ifm2_region_t& set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20392     {
20393         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
20394         return *this;
20395     }
get_controlisa::npu_set_ifm2_region_t20396     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20397     {
20398         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20399     }
set_controlisa::npu_set_ifm2_region_t20400     CONSTEXPR npu_set_ifm2_region_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
20401     {
20402         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
20403         return *this;
20404     }
get_regionisa::npu_set_ifm2_region_t20405     CONSTEXPR uint32_t get_region() const
20406     {
20407         return static_cast<uint32_t>(region);
20408     }
set_regionisa::npu_set_ifm2_region_t20409     CONSTEXPR npu_set_ifm2_region_t& set_region(uint32_t value)
20410     {
20411         assert((value >> 3) == 0);
20412         region = static_cast<uint8_t>(value & ((1U << 3)-1));
20413         return *this;
20414     }
20415 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_region_t20416     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20417     {
20418         fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
20419     }
20420 #endif
20421 #endif
20422 };
20423 // IFM Tile 0 address
20424 struct npu_set_ifm_base0_t
20425 {
20426 #ifdef __cplusplus
20427 private:
20428 #endif
20429     uint32_t opcode:10; //  opcode
20430     uint32_t reserved0:4;
20431     uint32_t control:2; //  control
20432     uint32_t addr_hi:8; //  address extension
20433     uint32_t reserved1:8;
20434     uint32_t addr_lo:32; //  address offset
20435 #ifdef __cplusplus
20436 public:
npu_set_ifm_base0_tisa::npu_set_ifm_base0_t20437     npu_set_ifm_base0_t(uint64_t _addr) :
20438         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0)),
20439         reserved0(0),
20440         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20441         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20442         reserved1(0),
20443         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20444     {}
npu_set_ifm_base0_tisa::npu_set_ifm_base0_t20445     CONSTEXPR npu_set_ifm_base0_t() :
20446         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0)),
20447         reserved0(0),
20448         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20449         addr_hi(0),
20450         reserved1(0),
20451         addr_lo(0)
20452     {}
validisa::npu_set_ifm_base0_t20453     CONSTEXPR bool valid() const
20454     {
20455         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0) && control >= 1 && control <= 2;
20456     }
initisa::npu_set_ifm_base0_t20457     CONSTEXPR void init()
20458     {
20459         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20460     }
uint64_tisa::npu_set_ifm_base0_t20461     operator uint64_t()
20462     {
20463         uint64_t word = 0;
20464         word |= uint64_t(opcode) << 0;
20465         word |= uint64_t(control) << 14;
20466         word |= uint64_t(addr_hi) << 16;
20467         word |= uint64_t(addr_lo) << 32;
20468         return word;
20469     }
get_addrisa::npu_set_ifm_base0_t20470     CONSTEXPR uint64_t get_addr() const
20471     {
20472         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20473     }
set_addrisa::npu_set_ifm_base0_t20474     CONSTEXPR npu_set_ifm_base0_t& set_addr(uint64_t value)
20475     {
20476         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20477     }
20478 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_base0_t20479     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20480     {
20481         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20482         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20483     }
20484 #endif
20485 #endif
20486 };
20487 // IFM Tile 1 address
20488 struct npu_set_ifm_base1_t
20489 {
20490 #ifdef __cplusplus
20491 private:
20492 #endif
20493     uint32_t opcode:10; //  opcode
20494     uint32_t reserved0:4;
20495     uint32_t control:2; //  control
20496     uint32_t addr_hi:8; //  address extension
20497     uint32_t reserved1:8;
20498     uint32_t addr_lo:32; //  address offset
20499 #ifdef __cplusplus
20500 public:
npu_set_ifm_base1_tisa::npu_set_ifm_base1_t20501     npu_set_ifm_base1_t(uint64_t _addr) :
20502         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1)),
20503         reserved0(0),
20504         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20505         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20506         reserved1(0),
20507         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20508     {}
npu_set_ifm_base1_tisa::npu_set_ifm_base1_t20509     CONSTEXPR npu_set_ifm_base1_t() :
20510         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1)),
20511         reserved0(0),
20512         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20513         addr_hi(0),
20514         reserved1(0),
20515         addr_lo(0)
20516     {}
validisa::npu_set_ifm_base1_t20517     CONSTEXPR bool valid() const
20518     {
20519         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1) && control >= 1 && control <= 2;
20520     }
initisa::npu_set_ifm_base1_t20521     CONSTEXPR void init()
20522     {
20523         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20524     }
uint64_tisa::npu_set_ifm_base1_t20525     operator uint64_t()
20526     {
20527         uint64_t word = 0;
20528         word |= uint64_t(opcode) << 0;
20529         word |= uint64_t(control) << 14;
20530         word |= uint64_t(addr_hi) << 16;
20531         word |= uint64_t(addr_lo) << 32;
20532         return word;
20533     }
get_addrisa::npu_set_ifm_base1_t20534     CONSTEXPR uint64_t get_addr() const
20535     {
20536         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20537     }
set_addrisa::npu_set_ifm_base1_t20538     CONSTEXPR npu_set_ifm_base1_t& set_addr(uint64_t value)
20539     {
20540         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20541     }
20542 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_base1_t20543     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20544     {
20545         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20546         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20547     }
20548 #endif
20549 #endif
20550 };
20551 // IFM Tile 2 address
20552 struct npu_set_ifm_base2_t
20553 {
20554 #ifdef __cplusplus
20555 private:
20556 #endif
20557     uint32_t opcode:10; //  opcode
20558     uint32_t reserved0:4;
20559     uint32_t control:2; //  control
20560     uint32_t addr_hi:8; //  address extension
20561     uint32_t reserved1:8;
20562     uint32_t addr_lo:32; //  address offset
20563 #ifdef __cplusplus
20564 public:
npu_set_ifm_base2_tisa::npu_set_ifm_base2_t20565     npu_set_ifm_base2_t(uint64_t _addr) :
20566         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2)),
20567         reserved0(0),
20568         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20569         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20570         reserved1(0),
20571         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20572     {}
npu_set_ifm_base2_tisa::npu_set_ifm_base2_t20573     CONSTEXPR npu_set_ifm_base2_t() :
20574         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2)),
20575         reserved0(0),
20576         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20577         addr_hi(0),
20578         reserved1(0),
20579         addr_lo(0)
20580     {}
validisa::npu_set_ifm_base2_t20581     CONSTEXPR bool valid() const
20582     {
20583         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2) && control >= 1 && control <= 2;
20584     }
initisa::npu_set_ifm_base2_t20585     CONSTEXPR void init()
20586     {
20587         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20588     }
uint64_tisa::npu_set_ifm_base2_t20589     operator uint64_t()
20590     {
20591         uint64_t word = 0;
20592         word |= uint64_t(opcode) << 0;
20593         word |= uint64_t(control) << 14;
20594         word |= uint64_t(addr_hi) << 16;
20595         word |= uint64_t(addr_lo) << 32;
20596         return word;
20597     }
get_addrisa::npu_set_ifm_base2_t20598     CONSTEXPR uint64_t get_addr() const
20599     {
20600         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20601     }
set_addrisa::npu_set_ifm_base2_t20602     CONSTEXPR npu_set_ifm_base2_t& set_addr(uint64_t value)
20603     {
20604         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20605     }
20606 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_base2_t20607     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20608     {
20609         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20610         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20611     }
20612 #endif
20613 #endif
20614 };
20615 // IFM Tile 3 address
20616 struct npu_set_ifm_base3_t
20617 {
20618 #ifdef __cplusplus
20619 private:
20620 #endif
20621     uint32_t opcode:10; //  opcode
20622     uint32_t reserved0:4;
20623     uint32_t control:2; //  control
20624     uint32_t addr_hi:8; //  address extension
20625     uint32_t reserved1:8;
20626     uint32_t addr_lo:32; //  address offset
20627 #ifdef __cplusplus
20628 public:
npu_set_ifm_base3_tisa::npu_set_ifm_base3_t20629     npu_set_ifm_base3_t(uint64_t _addr) :
20630         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3)),
20631         reserved0(0),
20632         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20633         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20634         reserved1(0),
20635         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20636     {}
npu_set_ifm_base3_tisa::npu_set_ifm_base3_t20637     CONSTEXPR npu_set_ifm_base3_t() :
20638         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3)),
20639         reserved0(0),
20640         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20641         addr_hi(0),
20642         reserved1(0),
20643         addr_lo(0)
20644     {}
validisa::npu_set_ifm_base3_t20645     CONSTEXPR bool valid() const
20646     {
20647         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3) && control >= 1 && control <= 2;
20648     }
initisa::npu_set_ifm_base3_t20649     CONSTEXPR void init()
20650     {
20651         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20652     }
uint64_tisa::npu_set_ifm_base3_t20653     operator uint64_t()
20654     {
20655         uint64_t word = 0;
20656         word |= uint64_t(opcode) << 0;
20657         word |= uint64_t(control) << 14;
20658         word |= uint64_t(addr_hi) << 16;
20659         word |= uint64_t(addr_lo) << 32;
20660         return word;
20661     }
get_addrisa::npu_set_ifm_base3_t20662     CONSTEXPR uint64_t get_addr() const
20663     {
20664         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20665     }
set_addrisa::npu_set_ifm_base3_t20666     CONSTEXPR npu_set_ifm_base3_t& set_addr(uint64_t value)
20667     {
20668         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20669     }
20670 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_base3_t20671     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20672     {
20673         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20674         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20675     }
20676 #endif
20677 #endif
20678 };
20679 // IFM byte stride between horizontal values
20680 struct npu_set_ifm_stride_x_t
20681 {
20682 #ifdef __cplusplus
20683 private:
20684 #endif
20685     uint32_t opcode:10; //  opcode
20686     uint32_t reserved0:4;
20687     uint32_t control:2; //  control
20688     uint32_t addr_hi:8; //  address extension
20689     uint32_t reserved1:8;
20690     uint32_t addr_lo:32; //  address offset
20691 #ifdef __cplusplus
20692 public:
npu_set_ifm_stride_x_tisa::npu_set_ifm_stride_x_t20693     npu_set_ifm_stride_x_t(uint64_t _addr) :
20694         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X)),
20695         reserved0(0),
20696         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20697         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20698         reserved1(0),
20699         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20700     {}
npu_set_ifm_stride_x_tisa::npu_set_ifm_stride_x_t20701     CONSTEXPR npu_set_ifm_stride_x_t() :
20702         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X)),
20703         reserved0(0),
20704         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20705         addr_hi(0),
20706         reserved1(0),
20707         addr_lo(0)
20708     {}
validisa::npu_set_ifm_stride_x_t20709     CONSTEXPR bool valid() const
20710     {
20711         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X) && control >= 1 && control <= 2;
20712     }
initisa::npu_set_ifm_stride_x_t20713     CONSTEXPR void init()
20714     {
20715         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20716     }
uint64_tisa::npu_set_ifm_stride_x_t20717     operator uint64_t()
20718     {
20719         uint64_t word = 0;
20720         word |= uint64_t(opcode) << 0;
20721         word |= uint64_t(control) << 14;
20722         word |= uint64_t(addr_hi) << 16;
20723         word |= uint64_t(addr_lo) << 32;
20724         return word;
20725     }
get_addrisa::npu_set_ifm_stride_x_t20726     CONSTEXPR uint64_t get_addr() const
20727     {
20728         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20729     }
set_addrisa::npu_set_ifm_stride_x_t20730     CONSTEXPR npu_set_ifm_stride_x_t& set_addr(uint64_t value)
20731     {
20732         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20733     }
20734 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_stride_x_t20735     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20736     {
20737         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20738         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20739     }
20740 #endif
20741 #endif
20742 };
20743 // IFM byte stride between vertical values
20744 struct npu_set_ifm_stride_y_t
20745 {
20746 #ifdef __cplusplus
20747 private:
20748 #endif
20749     uint32_t opcode:10; //  opcode
20750     uint32_t reserved0:4;
20751     uint32_t control:2; //  control
20752     uint32_t addr_hi:8; //  address extension
20753     uint32_t reserved1:8;
20754     uint32_t addr_lo:32; //  address offset
20755 #ifdef __cplusplus
20756 public:
npu_set_ifm_stride_y_tisa::npu_set_ifm_stride_y_t20757     npu_set_ifm_stride_y_t(uint64_t _addr) :
20758         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y)),
20759         reserved0(0),
20760         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20761         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20762         reserved1(0),
20763         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20764     {}
npu_set_ifm_stride_y_tisa::npu_set_ifm_stride_y_t20765     CONSTEXPR npu_set_ifm_stride_y_t() :
20766         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y)),
20767         reserved0(0),
20768         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20769         addr_hi(0),
20770         reserved1(0),
20771         addr_lo(0)
20772     {}
validisa::npu_set_ifm_stride_y_t20773     CONSTEXPR bool valid() const
20774     {
20775         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y) && control >= 1 && control <= 2;
20776     }
initisa::npu_set_ifm_stride_y_t20777     CONSTEXPR void init()
20778     {
20779         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20780     }
uint64_tisa::npu_set_ifm_stride_y_t20781     operator uint64_t()
20782     {
20783         uint64_t word = 0;
20784         word |= uint64_t(opcode) << 0;
20785         word |= uint64_t(control) << 14;
20786         word |= uint64_t(addr_hi) << 16;
20787         word |= uint64_t(addr_lo) << 32;
20788         return word;
20789     }
get_addrisa::npu_set_ifm_stride_y_t20790     CONSTEXPR uint64_t get_addr() const
20791     {
20792         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20793     }
set_addrisa::npu_set_ifm_stride_y_t20794     CONSTEXPR npu_set_ifm_stride_y_t& set_addr(uint64_t value)
20795     {
20796         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20797     }
20798 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_stride_y_t20799     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20800     {
20801         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20802         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20803     }
20804 #endif
20805 #endif
20806 };
20807 // IFM byte stride between channel blocks
20808 struct npu_set_ifm_stride_c_t
20809 {
20810 #ifdef __cplusplus
20811 private:
20812 #endif
20813     uint32_t opcode:10; //  opcode
20814     uint32_t reserved0:4;
20815     uint32_t control:2; //  control
20816     uint32_t addr_hi:8; //  address extension
20817     uint32_t reserved1:8;
20818     uint32_t addr_lo:32; //  address offset
20819 #ifdef __cplusplus
20820 public:
npu_set_ifm_stride_c_tisa::npu_set_ifm_stride_c_t20821     npu_set_ifm_stride_c_t(uint64_t _addr) :
20822         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C)),
20823         reserved0(0),
20824         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20825         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20826         reserved1(0),
20827         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20828     {}
npu_set_ifm_stride_c_tisa::npu_set_ifm_stride_c_t20829     CONSTEXPR npu_set_ifm_stride_c_t() :
20830         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C)),
20831         reserved0(0),
20832         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20833         addr_hi(0),
20834         reserved1(0),
20835         addr_lo(0)
20836     {}
validisa::npu_set_ifm_stride_c_t20837     CONSTEXPR bool valid() const
20838     {
20839         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C) && control >= 1 && control <= 2;
20840     }
initisa::npu_set_ifm_stride_c_t20841     CONSTEXPR void init()
20842     {
20843         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20844     }
uint64_tisa::npu_set_ifm_stride_c_t20845     operator uint64_t()
20846     {
20847         uint64_t word = 0;
20848         word |= uint64_t(opcode) << 0;
20849         word |= uint64_t(control) << 14;
20850         word |= uint64_t(addr_hi) << 16;
20851         word |= uint64_t(addr_lo) << 32;
20852         return word;
20853     }
get_addrisa::npu_set_ifm_stride_c_t20854     CONSTEXPR uint64_t get_addr() const
20855     {
20856         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20857     }
set_addrisa::npu_set_ifm_stride_c_t20858     CONSTEXPR npu_set_ifm_stride_c_t& set_addr(uint64_t value)
20859     {
20860         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20861     }
20862 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_stride_c_t20863     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20864     {
20865         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20866         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20867     }
20868 #endif
20869 #endif
20870 };
20871 // OFM Tile 0 address
20872 struct npu_set_ofm_base0_t
20873 {
20874 #ifdef __cplusplus
20875 private:
20876 #endif
20877     uint32_t opcode:10; //  opcode
20878     uint32_t reserved0:4;
20879     uint32_t control:2; //  control
20880     uint32_t addr_hi:8; //  address extension
20881     uint32_t reserved1:8;
20882     uint32_t addr_lo:32; //  address offset
20883 #ifdef __cplusplus
20884 public:
npu_set_ofm_base0_tisa::npu_set_ofm_base0_t20885     npu_set_ofm_base0_t(uint64_t _addr) :
20886         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0)),
20887         reserved0(0),
20888         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20889         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20890         reserved1(0),
20891         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20892     {}
npu_set_ofm_base0_tisa::npu_set_ofm_base0_t20893     CONSTEXPR npu_set_ofm_base0_t() :
20894         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0)),
20895         reserved0(0),
20896         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20897         addr_hi(0),
20898         reserved1(0),
20899         addr_lo(0)
20900     {}
validisa::npu_set_ofm_base0_t20901     CONSTEXPR bool valid() const
20902     {
20903         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0) && control >= 1 && control <= 2;
20904     }
initisa::npu_set_ofm_base0_t20905     CONSTEXPR void init()
20906     {
20907         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20908     }
uint64_tisa::npu_set_ofm_base0_t20909     operator uint64_t()
20910     {
20911         uint64_t word = 0;
20912         word |= uint64_t(opcode) << 0;
20913         word |= uint64_t(control) << 14;
20914         word |= uint64_t(addr_hi) << 16;
20915         word |= uint64_t(addr_lo) << 32;
20916         return word;
20917     }
get_addrisa::npu_set_ofm_base0_t20918     CONSTEXPR uint64_t get_addr() const
20919     {
20920         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20921     }
set_addrisa::npu_set_ofm_base0_t20922     CONSTEXPR npu_set_ofm_base0_t& set_addr(uint64_t value)
20923     {
20924         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20925     }
20926 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_base0_t20927     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20928     {
20929         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20930         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20931     }
20932 #endif
20933 #endif
20934 };
20935 // OFM Tile 1 address
20936 struct npu_set_ofm_base1_t
20937 {
20938 #ifdef __cplusplus
20939 private:
20940 #endif
20941     uint32_t opcode:10; //  opcode
20942     uint32_t reserved0:4;
20943     uint32_t control:2; //  control
20944     uint32_t addr_hi:8; //  address extension
20945     uint32_t reserved1:8;
20946     uint32_t addr_lo:32; //  address offset
20947 #ifdef __cplusplus
20948 public:
npu_set_ofm_base1_tisa::npu_set_ofm_base1_t20949     npu_set_ofm_base1_t(uint64_t _addr) :
20950         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1)),
20951         reserved0(0),
20952         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20953         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
20954         reserved1(0),
20955         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
20956     {}
npu_set_ofm_base1_tisa::npu_set_ofm_base1_t20957     CONSTEXPR npu_set_ofm_base1_t() :
20958         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1)),
20959         reserved0(0),
20960         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
20961         addr_hi(0),
20962         reserved1(0),
20963         addr_lo(0)
20964     {}
validisa::npu_set_ofm_base1_t20965     CONSTEXPR bool valid() const
20966     {
20967         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1) && control >= 1 && control <= 2;
20968     }
initisa::npu_set_ofm_base1_t20969     CONSTEXPR void init()
20970     {
20971         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
20972     }
uint64_tisa::npu_set_ofm_base1_t20973     operator uint64_t()
20974     {
20975         uint64_t word = 0;
20976         word |= uint64_t(opcode) << 0;
20977         word |= uint64_t(control) << 14;
20978         word |= uint64_t(addr_hi) << 16;
20979         word |= uint64_t(addr_lo) << 32;
20980         return word;
20981     }
get_addrisa::npu_set_ofm_base1_t20982     CONSTEXPR uint64_t get_addr() const
20983     {
20984         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
20985     }
set_addrisa::npu_set_ofm_base1_t20986     CONSTEXPR npu_set_ofm_base1_t& set_addr(uint64_t value)
20987     {
20988         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
20989     }
20990 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_base1_t20991     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
20992     {
20993         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
20994         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
20995     }
20996 #endif
20997 #endif
20998 };
20999 // OFM Tile 2 address
21000 struct npu_set_ofm_base2_t
21001 {
21002 #ifdef __cplusplus
21003 private:
21004 #endif
21005     uint32_t opcode:10; //  opcode
21006     uint32_t reserved0:4;
21007     uint32_t control:2; //  control
21008     uint32_t addr_hi:8; //  address extension
21009     uint32_t reserved1:8;
21010     uint32_t addr_lo:32; //  address offset
21011 #ifdef __cplusplus
21012 public:
npu_set_ofm_base2_tisa::npu_set_ofm_base2_t21013     npu_set_ofm_base2_t(uint64_t _addr) :
21014         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2)),
21015         reserved0(0),
21016         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21017         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
21018         reserved1(0),
21019         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
21020     {}
npu_set_ofm_base2_tisa::npu_set_ofm_base2_t21021     CONSTEXPR npu_set_ofm_base2_t() :
21022         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2)),
21023         reserved0(0),
21024         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21025         addr_hi(0),
21026         reserved1(0),
21027         addr_lo(0)
21028     {}
validisa::npu_set_ofm_base2_t21029     CONSTEXPR bool valid() const
21030     {
21031         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2) && control >= 1 && control <= 2;
21032     }
initisa::npu_set_ofm_base2_t21033     CONSTEXPR void init()
21034     {
21035         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21036     }
uint64_tisa::npu_set_ofm_base2_t21037     operator uint64_t()
21038     {
21039         uint64_t word = 0;
21040         word |= uint64_t(opcode) << 0;
21041         word |= uint64_t(control) << 14;
21042         word |= uint64_t(addr_hi) << 16;
21043         word |= uint64_t(addr_lo) << 32;
21044         return word;
21045     }
get_addrisa::npu_set_ofm_base2_t21046     CONSTEXPR uint64_t get_addr() const
21047     {
21048         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
21049     }
set_addrisa::npu_set_ofm_base2_t21050     CONSTEXPR npu_set_ofm_base2_t& set_addr(uint64_t value)
21051     {
21052         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
21053     }
21054 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_base2_t21055     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21056     {
21057         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
21058         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
21059     }
21060 #endif
21061 #endif
21062 };
21063 // OFM Tile 3 address
21064 struct npu_set_ofm_base3_t
21065 {
21066 #ifdef __cplusplus
21067 private:
21068 #endif
21069     uint32_t opcode:10; //  opcode
21070     uint32_t reserved0:4;
21071     uint32_t control:2; //  control
21072     uint32_t addr_hi:8; //  address extension
21073     uint32_t reserved1:8;
21074     uint32_t addr_lo:32; //  address offset
21075 #ifdef __cplusplus
21076 public:
npu_set_ofm_base3_tisa::npu_set_ofm_base3_t21077     npu_set_ofm_base3_t(uint64_t _addr) :
21078         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3)),
21079         reserved0(0),
21080         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21081         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
21082         reserved1(0),
21083         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
21084     {}
npu_set_ofm_base3_tisa::npu_set_ofm_base3_t21085     CONSTEXPR npu_set_ofm_base3_t() :
21086         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3)),
21087         reserved0(0),
21088         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21089         addr_hi(0),
21090         reserved1(0),
21091         addr_lo(0)
21092     {}
validisa::npu_set_ofm_base3_t21093     CONSTEXPR bool valid() const
21094     {
21095         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3) && control >= 1 && control <= 2;
21096     }
initisa::npu_set_ofm_base3_t21097     CONSTEXPR void init()
21098     {
21099         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21100     }
uint64_tisa::npu_set_ofm_base3_t21101     operator uint64_t()
21102     {
21103         uint64_t word = 0;
21104         word |= uint64_t(opcode) << 0;
21105         word |= uint64_t(control) << 14;
21106         word |= uint64_t(addr_hi) << 16;
21107         word |= uint64_t(addr_lo) << 32;
21108         return word;
21109     }
get_addrisa::npu_set_ofm_base3_t21110     CONSTEXPR uint64_t get_addr() const
21111     {
21112         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
21113     }
set_addrisa::npu_set_ofm_base3_t21114     CONSTEXPR npu_set_ofm_base3_t& set_addr(uint64_t value)
21115     {
21116         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
21117     }
21118 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_base3_t21119     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21120     {
21121         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
21122         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
21123     }
21124 #endif
21125 #endif
21126 };
21127 // OFM byte stride between horizontal values
21128 struct npu_set_ofm_stride_x_t
21129 {
21130 #ifdef __cplusplus
21131 private:
21132 #endif
21133     uint32_t opcode:10; //  opcode
21134     uint32_t reserved0:4;
21135     uint32_t control:2; //  control
21136     uint32_t addr_hi:8; //  address extension
21137     uint32_t reserved1:8;
21138     uint32_t addr_lo:32; //  address offset
21139 #ifdef __cplusplus
21140 public:
npu_set_ofm_stride_x_tisa::npu_set_ofm_stride_x_t21141     npu_set_ofm_stride_x_t(uint64_t _addr) :
21142         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X)),
21143         reserved0(0),
21144         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21145         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
21146         reserved1(0),
21147         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
21148     {}
npu_set_ofm_stride_x_tisa::npu_set_ofm_stride_x_t21149     CONSTEXPR npu_set_ofm_stride_x_t() :
21150         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X)),
21151         reserved0(0),
21152         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21153         addr_hi(0),
21154         reserved1(0),
21155         addr_lo(0)
21156     {}
validisa::npu_set_ofm_stride_x_t21157     CONSTEXPR bool valid() const
21158     {
21159         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X) && control >= 1 && control <= 2;
21160     }
initisa::npu_set_ofm_stride_x_t21161     CONSTEXPR void init()
21162     {
21163         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21164     }
uint64_tisa::npu_set_ofm_stride_x_t21165     operator uint64_t()
21166     {
21167         uint64_t word = 0;
21168         word |= uint64_t(opcode) << 0;
21169         word |= uint64_t(control) << 14;
21170         word |= uint64_t(addr_hi) << 16;
21171         word |= uint64_t(addr_lo) << 32;
21172         return word;
21173     }
get_addrisa::npu_set_ofm_stride_x_t21174     CONSTEXPR uint64_t get_addr() const
21175     {
21176         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
21177     }
set_addrisa::npu_set_ofm_stride_x_t21178     CONSTEXPR npu_set_ofm_stride_x_t& set_addr(uint64_t value)
21179     {
21180         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
21181     }
21182 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_stride_x_t21183     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21184     {
21185         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
21186         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
21187     }
21188 #endif
21189 #endif
21190 };
21191 // OFM byte stride between vertical values
21192 struct npu_set_ofm_stride_y_t
21193 {
21194 #ifdef __cplusplus
21195 private:
21196 #endif
21197     uint32_t opcode:10; //  opcode
21198     uint32_t reserved0:4;
21199     uint32_t control:2; //  control
21200     uint32_t addr_hi:8; //  address extension
21201     uint32_t reserved1:8;
21202     uint32_t addr_lo:32; //  address offset
21203 #ifdef __cplusplus
21204 public:
npu_set_ofm_stride_y_tisa::npu_set_ofm_stride_y_t21205     npu_set_ofm_stride_y_t(uint64_t _addr) :
21206         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y)),
21207         reserved0(0),
21208         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21209         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
21210         reserved1(0),
21211         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
21212     {}
npu_set_ofm_stride_y_tisa::npu_set_ofm_stride_y_t21213     CONSTEXPR npu_set_ofm_stride_y_t() :
21214         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y)),
21215         reserved0(0),
21216         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21217         addr_hi(0),
21218         reserved1(0),
21219         addr_lo(0)
21220     {}
validisa::npu_set_ofm_stride_y_t21221     CONSTEXPR bool valid() const
21222     {
21223         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y) && control >= 1 && control <= 2;
21224     }
initisa::npu_set_ofm_stride_y_t21225     CONSTEXPR void init()
21226     {
21227         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21228     }
uint64_tisa::npu_set_ofm_stride_y_t21229     operator uint64_t()
21230     {
21231         uint64_t word = 0;
21232         word |= uint64_t(opcode) << 0;
21233         word |= uint64_t(control) << 14;
21234         word |= uint64_t(addr_hi) << 16;
21235         word |= uint64_t(addr_lo) << 32;
21236         return word;
21237     }
get_addrisa::npu_set_ofm_stride_y_t21238     CONSTEXPR uint64_t get_addr() const
21239     {
21240         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
21241     }
set_addrisa::npu_set_ofm_stride_y_t21242     CONSTEXPR npu_set_ofm_stride_y_t& set_addr(uint64_t value)
21243     {
21244         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
21245     }
21246 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_stride_y_t21247     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21248     {
21249         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
21250         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
21251     }
21252 #endif
21253 #endif
21254 };
21255 // OFM byte stride between channel blocks
21256 struct npu_set_ofm_stride_c_t
21257 {
21258 #ifdef __cplusplus
21259 private:
21260 #endif
21261     uint32_t opcode:10; //  opcode
21262     uint32_t reserved0:4;
21263     uint32_t control:2; //  control
21264     uint32_t addr_hi:8; //  address extension
21265     uint32_t reserved1:8;
21266     uint32_t addr_lo:32; //  address offset
21267 #ifdef __cplusplus
21268 public:
npu_set_ofm_stride_c_tisa::npu_set_ofm_stride_c_t21269     npu_set_ofm_stride_c_t(uint64_t _addr) :
21270         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C)),
21271         reserved0(0),
21272         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21273         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
21274         reserved1(0),
21275         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
21276     {}
npu_set_ofm_stride_c_tisa::npu_set_ofm_stride_c_t21277     CONSTEXPR npu_set_ofm_stride_c_t() :
21278         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C)),
21279         reserved0(0),
21280         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21281         addr_hi(0),
21282         reserved1(0),
21283         addr_lo(0)
21284     {}
validisa::npu_set_ofm_stride_c_t21285     CONSTEXPR bool valid() const
21286     {
21287         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C) && control >= 1 && control <= 2;
21288     }
initisa::npu_set_ofm_stride_c_t21289     CONSTEXPR void init()
21290     {
21291         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21292     }
uint64_tisa::npu_set_ofm_stride_c_t21293     operator uint64_t()
21294     {
21295         uint64_t word = 0;
21296         word |= uint64_t(opcode) << 0;
21297         word |= uint64_t(control) << 14;
21298         word |= uint64_t(addr_hi) << 16;
21299         word |= uint64_t(addr_lo) << 32;
21300         return word;
21301     }
get_addrisa::npu_set_ofm_stride_c_t21302     CONSTEXPR uint64_t get_addr() const
21303     {
21304         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
21305     }
set_addrisa::npu_set_ofm_stride_c_t21306     CONSTEXPR npu_set_ofm_stride_c_t& set_addr(uint64_t value)
21307     {
21308         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
21309     }
21310 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_stride_c_t21311     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21312     {
21313         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
21314         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
21315     }
21316 #endif
21317 #endif
21318 };
21319 // Weight stream byte offset in WEIGHT_REGION
21320 struct npu_set_weight_base_t
21321 {
21322 #ifdef __cplusplus
21323 private:
21324 #endif
21325     uint32_t opcode:10; //  opcode
21326     uint32_t reserved0:4;
21327     uint32_t control:2; //  control
21328     uint32_t addr_hi:8; //  address extension
21329     uint32_t reserved1:8;
21330     uint32_t addr_lo:32; //  address offset
21331 #ifdef __cplusplus
21332 public:
npu_set_weight_base_tisa::npu_set_weight_base_t21333     npu_set_weight_base_t(uint64_t _addr) :
21334         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE)),
21335         reserved0(0),
21336         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21337         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
21338         reserved1(0),
21339         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
21340     {}
npu_set_weight_base_tisa::npu_set_weight_base_t21341     CONSTEXPR npu_set_weight_base_t() :
21342         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE)),
21343         reserved0(0),
21344         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21345         addr_hi(0),
21346         reserved1(0),
21347         addr_lo(0)
21348     {}
validisa::npu_set_weight_base_t21349     CONSTEXPR bool valid() const
21350     {
21351         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE) && control >= 1 && control <= 2;
21352     }
initisa::npu_set_weight_base_t21353     CONSTEXPR void init()
21354     {
21355         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21356     }
uint64_tisa::npu_set_weight_base_t21357     operator uint64_t()
21358     {
21359         uint64_t word = 0;
21360         word |= uint64_t(opcode) << 0;
21361         word |= uint64_t(control) << 14;
21362         word |= uint64_t(addr_hi) << 16;
21363         word |= uint64_t(addr_lo) << 32;
21364         return word;
21365     }
get_addrisa::npu_set_weight_base_t21366     CONSTEXPR uint64_t get_addr() const
21367     {
21368         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
21369     }
set_addrisa::npu_set_weight_base_t21370     CONSTEXPR npu_set_weight_base_t& set_addr(uint64_t value)
21371     {
21372         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
21373     }
21374 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight_base_t21375     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21376     {
21377         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
21378         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
21379     }
21380 #endif
21381 #endif
21382 };
21383 // Weight stream byte length
21384 struct npu_set_weight_length_t
21385 {
21386 #ifdef __cplusplus
21387 private:
21388 #endif
21389     uint32_t opcode:10; //  opcode
21390     uint32_t reserved0:4;
21391     uint32_t control:2; //  control
21392     uint32_t reserved1:16;
21393     uint32_t length:32; //  Weight stream byte length
21394 #ifdef __cplusplus
21395 public:
npu_set_weight_length_tisa::npu_set_weight_length_t21396     npu_set_weight_length_t(uint32_t _length) :
21397         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH)),
21398         reserved0(0),
21399         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21400         reserved1(0),
21401         length(_length)
21402     {}
npu_set_weight_length_tisa::npu_set_weight_length_t21403     CONSTEXPR npu_set_weight_length_t() :
21404         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH)),
21405         reserved0(0),
21406         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21407         reserved1(0),
21408         length(0)
21409     {}
validisa::npu_set_weight_length_t21410     CONSTEXPR bool valid() const
21411     {
21412         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH) && control >= 1 && control <= 2;
21413     }
initisa::npu_set_weight_length_t21414     CONSTEXPR void init()
21415     {
21416         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21417     }
uint64_tisa::npu_set_weight_length_t21418     operator uint64_t()
21419     {
21420         uint64_t word = 0;
21421         word |= uint64_t(opcode) << 0;
21422         word |= uint64_t(control) << 14;
21423         word |= uint64_t(length) << 32;
21424         return word;
21425     }
get_opcodeisa::npu_set_weight_length_t21426     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
21427     {
21428         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
21429     }
set_opcodeisa::npu_set_weight_length_t21430     CONSTEXPR npu_set_weight_length_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
21431     {
21432         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
21433         return *this;
21434     }
get_controlisa::npu_set_weight_length_t21435     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21436     {
21437         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21438     }
set_controlisa::npu_set_weight_length_t21439     CONSTEXPR npu_set_weight_length_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
21440     {
21441         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
21442         return *this;
21443     }
get_lengthisa::npu_set_weight_length_t21444     CONSTEXPR uint32_t get_length() const
21445     {
21446         return static_cast<uint32_t>(length);
21447     }
set_lengthisa::npu_set_weight_length_t21448     CONSTEXPR npu_set_weight_length_t& set_length(uint32_t value)
21449     {
21450         length = value;
21451         return *this;
21452     }
21453 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight_length_t21454     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21455     {
21456         fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
21457     }
21458 #endif
21459 #endif
21460 };
21461 // Scale and bias stream input byte offset from SCALE_REGION
21462 struct npu_set_scale_base_t
21463 {
21464 #ifdef __cplusplus
21465 private:
21466 #endif
21467     uint32_t opcode:10; //  opcode
21468     uint32_t reserved0:4;
21469     uint32_t control:2; //  control
21470     uint32_t addr_hi:8; //  address extension
21471     uint32_t reserved1:8;
21472     uint32_t addr_lo:32; //  address offset
21473 #ifdef __cplusplus
21474 public:
npu_set_scale_base_tisa::npu_set_scale_base_t21475     npu_set_scale_base_t(uint64_t _addr) :
21476         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE)),
21477         reserved0(0),
21478         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21479         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
21480         reserved1(0),
21481         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
21482     {}
npu_set_scale_base_tisa::npu_set_scale_base_t21483     CONSTEXPR npu_set_scale_base_t() :
21484         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE)),
21485         reserved0(0),
21486         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21487         addr_hi(0),
21488         reserved1(0),
21489         addr_lo(0)
21490     {}
validisa::npu_set_scale_base_t21491     CONSTEXPR bool valid() const
21492     {
21493         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE) && control >= 1 && control <= 2;
21494     }
initisa::npu_set_scale_base_t21495     CONSTEXPR void init()
21496     {
21497         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21498     }
uint64_tisa::npu_set_scale_base_t21499     operator uint64_t()
21500     {
21501         uint64_t word = 0;
21502         word |= uint64_t(opcode) << 0;
21503         word |= uint64_t(control) << 14;
21504         word |= uint64_t(addr_hi) << 16;
21505         word |= uint64_t(addr_lo) << 32;
21506         return word;
21507     }
get_addrisa::npu_set_scale_base_t21508     CONSTEXPR uint64_t get_addr() const
21509     {
21510         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
21511     }
set_addrisa::npu_set_scale_base_t21512     CONSTEXPR npu_set_scale_base_t& set_addr(uint64_t value)
21513     {
21514         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
21515     }
21516 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_scale_base_t21517     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21518     {
21519         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
21520         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
21521     }
21522 #endif
21523 #endif
21524 };
21525 // Scale and bias stream input byte length
21526 struct npu_set_scale_length_t
21527 {
21528 #ifdef __cplusplus
21529 private:
21530 #endif
21531     uint32_t opcode:10; //  opcode
21532     uint32_t reserved0:4;
21533     uint32_t control:2; //  control
21534     uint32_t reserved1:16;
21535     uint32_t length:20; //  Scale and bias stream byte length
21536     uint32_t reserved2:12;
21537 #ifdef __cplusplus
21538 public:
npu_set_scale_length_tisa::npu_set_scale_length_t21539     npu_set_scale_length_t(uint32_t _length) :
21540         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH)),
21541         reserved0(0),
21542         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21543         reserved1(0),
21544         length(_length & ((1U << 20)-1)),
21545         reserved2(0)
21546     {}
npu_set_scale_length_tisa::npu_set_scale_length_t21547     CONSTEXPR npu_set_scale_length_t() :
21548         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH)),
21549         reserved0(0),
21550         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21551         reserved1(0),
21552         length(0),
21553         reserved2(0)
21554     {}
validisa::npu_set_scale_length_t21555     CONSTEXPR bool valid() const
21556     {
21557         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH) && control >= 1 && control <= 2;
21558     }
initisa::npu_set_scale_length_t21559     CONSTEXPR void init()
21560     {
21561         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21562     }
uint64_tisa::npu_set_scale_length_t21563     operator uint64_t()
21564     {
21565         uint64_t word = 0;
21566         word |= uint64_t(opcode) << 0;
21567         word |= uint64_t(control) << 14;
21568         word |= uint64_t(length) << 32;
21569         return word;
21570     }
get_opcodeisa::npu_set_scale_length_t21571     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
21572     {
21573         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
21574     }
set_opcodeisa::npu_set_scale_length_t21575     CONSTEXPR npu_set_scale_length_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
21576     {
21577         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
21578         return *this;
21579     }
get_controlisa::npu_set_scale_length_t21580     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21581     {
21582         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21583     }
set_controlisa::npu_set_scale_length_t21584     CONSTEXPR npu_set_scale_length_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
21585     {
21586         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
21587         return *this;
21588     }
get_lengthisa::npu_set_scale_length_t21589     CONSTEXPR uint32_t get_length() const
21590     {
21591         return static_cast<uint32_t>(length);
21592     }
set_lengthisa::npu_set_scale_length_t21593     CONSTEXPR npu_set_scale_length_t& set_length(uint32_t value)
21594     {
21595         assert((value >> 20) == 0);
21596         length = value & ((1U << 20)-1);
21597         return *this;
21598     }
21599 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_scale_length_t21600     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21601     {
21602         fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
21603     }
21604 #endif
21605 #endif
21606 };
21607 // OFM scale
21608 struct npu_set_ofm_scale_t
21609 {
21610 #ifdef __cplusplus
21611 private:
21612 #endif
21613     uint32_t opcode:10; //  opcode
21614     uint32_t reserved0:4;
21615     uint32_t control:2; //  control
21616     uint32_t shift:6; //  Right shift (0 to 63)
21617     uint32_t dbl_rnd:5; //  Double rounding shift (0 to 30)
21618     uint32_t reserved1:2;
21619     uint32_t round_mode:3; //  Rounding mode
21620     uint32_t scale:31; //  Scale value (uint31 = non-negative int32)
21621     uint32_t reserved2:1;
21622 #ifdef __cplusplus
21623 public:
npu_set_ofm_scale_tisa::npu_set_ofm_scale_t21624     npu_set_ofm_scale_t(uint32_t _shift, uint32_t _dbl_rnd, NPU_NAMESPACE::round_mode_ofm _round_mode, uint32_t _scale) :
21625         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE)),
21626         reserved0(0),
21627         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21628         shift(_shift & ((1U << 6)-1)),
21629         dbl_rnd(_dbl_rnd & ((1U << 5)-1)),
21630         reserved1(0),
21631         round_mode(static_cast<uint8_t>(_round_mode) & ((1U << 3)-1)),
21632         scale(_scale & ((1U << 31)-1)),
21633         reserved2(0)
21634     {}
npu_set_ofm_scale_tisa::npu_set_ofm_scale_t21635     CONSTEXPR npu_set_ofm_scale_t() :
21636         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE)),
21637         reserved0(0),
21638         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21639         shift(0),
21640         dbl_rnd(0),
21641         reserved1(0),
21642         round_mode(0),
21643         scale(0),
21644         reserved2(0)
21645     {}
validisa::npu_set_ofm_scale_t21646     CONSTEXPR bool valid() const
21647     {
21648         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE) && control >= 1 && control <= 2;
21649     }
initisa::npu_set_ofm_scale_t21650     CONSTEXPR void init()
21651     {
21652         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21653     }
uint64_tisa::npu_set_ofm_scale_t21654     operator uint64_t()
21655     {
21656         uint64_t word = 0;
21657         word |= uint64_t(opcode) << 0;
21658         word |= uint64_t(control) << 14;
21659         word |= uint64_t(shift) << 16;
21660         word |= uint64_t(dbl_rnd) << 22;
21661         word |= uint64_t(round_mode) << 29;
21662         word |= uint64_t(scale) << 32;
21663         return word;
21664     }
get_opcodeisa::npu_set_ofm_scale_t21665     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
21666     {
21667         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
21668     }
set_opcodeisa::npu_set_ofm_scale_t21669     CONSTEXPR npu_set_ofm_scale_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
21670     {
21671         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
21672         return *this;
21673     }
get_controlisa::npu_set_ofm_scale_t21674     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21675     {
21676         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21677     }
set_controlisa::npu_set_ofm_scale_t21678     CONSTEXPR npu_set_ofm_scale_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
21679     {
21680         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
21681         return *this;
21682     }
get_shiftisa::npu_set_ofm_scale_t21683     CONSTEXPR uint32_t get_shift() const
21684     {
21685         return static_cast<uint32_t>(shift);
21686     }
set_shiftisa::npu_set_ofm_scale_t21687     CONSTEXPR npu_set_ofm_scale_t& set_shift(uint32_t value)
21688     {
21689         assert((value >> 6) == 0);
21690         shift = static_cast<uint8_t>(value & ((1U << 6)-1));
21691         return *this;
21692     }
get_dbl_rndisa::npu_set_ofm_scale_t21693     CONSTEXPR uint32_t get_dbl_rnd() const
21694     {
21695         return static_cast<uint32_t>(dbl_rnd);
21696     }
set_dbl_rndisa::npu_set_ofm_scale_t21697     CONSTEXPR npu_set_ofm_scale_t& set_dbl_rnd(uint32_t value)
21698     {
21699         assert((value >> 5) == 0);
21700         dbl_rnd = static_cast<uint8_t>(value & ((1U << 5)-1));
21701         return *this;
21702     }
get_round_modeisa::npu_set_ofm_scale_t21703     CONSTEXPR NPU_NAMESPACE::round_mode_ofm get_round_mode() const
21704     {
21705         return static_cast<NPU_NAMESPACE::round_mode_ofm>(round_mode);
21706     }
set_round_modeisa::npu_set_ofm_scale_t21707     CONSTEXPR npu_set_ofm_scale_t& set_round_mode(NPU_NAMESPACE::round_mode_ofm value)
21708     {
21709         round_mode = static_cast<uint8_t>(value) & ((1U << 3)-1);
21710         return *this;
21711     }
get_scaleisa::npu_set_ofm_scale_t21712     CONSTEXPR uint32_t get_scale() const
21713     {
21714         return static_cast<uint32_t>(scale);
21715     }
set_scaleisa::npu_set_ofm_scale_t21716     CONSTEXPR npu_set_ofm_scale_t& set_scale(uint32_t value)
21717     {
21718         assert((value >> 31) == 0);
21719         scale = value & ((1U << 31)-1);
21720         return *this;
21721     }
21722 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ofm_scale_t21723     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21724     {
21725         fields.push_back(std::make_pair<std::string, std::string>("shift", std::to_string(shift)));
21726         fields.push_back(std::make_pair<std::string, std::string>("dbl_rnd", std::to_string(dbl_rnd)));
21727         fields.push_back(std::make_pair<std::string, std::string>("round_mode", (round_mode < (sizeof(round_mode_ofm_str)/sizeof(round_mode_ofm_str[0])) ? round_mode_ofm_str[round_mode] : "****")));
21728         fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
21729     }
21730 #endif
21731 #endif
21732 };
21733 // IFM input scale
21734 struct npu_set_ifm_scale_t
21735 {
21736 #ifdef __cplusplus
21737 private:
21738 #endif
21739     uint32_t opcode:10; //  opcode
21740     uint32_t reserved0:4;
21741     uint32_t control:2; //  control
21742     uint32_t shift:6; //  Right shift (0 to 63)
21743     uint32_t dbl_rnd:5; //  Double rounding shift (0 to 30)
21744     uint32_t reserved1:2;
21745     uint32_t round_mode:1; //  Rounding mode
21746     uint32_t reserved2:2;
21747     uint32_t scale:31; //  Scale value (uint31 = non-negative int32)
21748     uint32_t reserved3:1;
21749 #ifdef __cplusplus
21750 public:
npu_set_ifm_scale_tisa::npu_set_ifm_scale_t21751     npu_set_ifm_scale_t(uint32_t _shift, uint32_t _dbl_rnd, NPU_NAMESPACE::round_mode_ifm _round_mode, uint32_t _scale) :
21752         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_SCALE)),
21753         reserved0(0),
21754         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21755         shift(_shift & ((1U << 6)-1)),
21756         dbl_rnd(_dbl_rnd & ((1U << 5)-1)),
21757         reserved1(0),
21758         round_mode(static_cast<uint8_t>(_round_mode) & ((1U << 1)-1)),
21759         reserved2(0),
21760         scale(_scale & ((1U << 31)-1)),
21761         reserved3(0)
21762     {}
npu_set_ifm_scale_tisa::npu_set_ifm_scale_t21763     CONSTEXPR npu_set_ifm_scale_t() :
21764         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_SCALE)),
21765         reserved0(0),
21766         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21767         shift(0),
21768         dbl_rnd(0),
21769         reserved1(0),
21770         round_mode(0),
21771         reserved2(0),
21772         scale(0),
21773         reserved3(0)
21774     {}
validisa::npu_set_ifm_scale_t21775     CONSTEXPR bool valid() const
21776     {
21777         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_SCALE) && control >= 1 && control <= 2;
21778     }
initisa::npu_set_ifm_scale_t21779     CONSTEXPR void init()
21780     {
21781         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_SCALE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21782     }
uint64_tisa::npu_set_ifm_scale_t21783     operator uint64_t()
21784     {
21785         uint64_t word = 0;
21786         word |= uint64_t(opcode) << 0;
21787         word |= uint64_t(control) << 14;
21788         word |= uint64_t(shift) << 16;
21789         word |= uint64_t(dbl_rnd) << 22;
21790         word |= uint64_t(round_mode) << 29;
21791         word |= uint64_t(scale) << 32;
21792         return word;
21793     }
get_opcodeisa::npu_set_ifm_scale_t21794     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
21795     {
21796         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
21797     }
set_opcodeisa::npu_set_ifm_scale_t21798     CONSTEXPR npu_set_ifm_scale_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
21799     {
21800         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
21801         return *this;
21802     }
get_controlisa::npu_set_ifm_scale_t21803     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21804     {
21805         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21806     }
set_controlisa::npu_set_ifm_scale_t21807     CONSTEXPR npu_set_ifm_scale_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
21808     {
21809         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
21810         return *this;
21811     }
get_shiftisa::npu_set_ifm_scale_t21812     CONSTEXPR uint32_t get_shift() const
21813     {
21814         return static_cast<uint32_t>(shift);
21815     }
set_shiftisa::npu_set_ifm_scale_t21816     CONSTEXPR npu_set_ifm_scale_t& set_shift(uint32_t value)
21817     {
21818         assert((value >> 6) == 0);
21819         shift = static_cast<uint8_t>(value & ((1U << 6)-1));
21820         return *this;
21821     }
get_dbl_rndisa::npu_set_ifm_scale_t21822     CONSTEXPR uint32_t get_dbl_rnd() const
21823     {
21824         return static_cast<uint32_t>(dbl_rnd);
21825     }
set_dbl_rndisa::npu_set_ifm_scale_t21826     CONSTEXPR npu_set_ifm_scale_t& set_dbl_rnd(uint32_t value)
21827     {
21828         assert((value >> 5) == 0);
21829         dbl_rnd = static_cast<uint8_t>(value & ((1U << 5)-1));
21830         return *this;
21831     }
get_round_modeisa::npu_set_ifm_scale_t21832     CONSTEXPR NPU_NAMESPACE::round_mode_ifm get_round_mode() const
21833     {
21834         return static_cast<NPU_NAMESPACE::round_mode_ifm>(round_mode);
21835     }
set_round_modeisa::npu_set_ifm_scale_t21836     CONSTEXPR npu_set_ifm_scale_t& set_round_mode(NPU_NAMESPACE::round_mode_ifm value)
21837     {
21838         round_mode = static_cast<uint8_t>(value) & ((1U << 1)-1);
21839         return *this;
21840     }
get_scaleisa::npu_set_ifm_scale_t21841     CONSTEXPR uint32_t get_scale() const
21842     {
21843         return static_cast<uint32_t>(scale);
21844     }
set_scaleisa::npu_set_ifm_scale_t21845     CONSTEXPR npu_set_ifm_scale_t& set_scale(uint32_t value)
21846     {
21847         assert((value >> 31) == 0);
21848         scale = value & ((1U << 31)-1);
21849         return *this;
21850     }
21851 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm_scale_t21852     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21853     {
21854         fields.push_back(std::make_pair<std::string, std::string>("shift", std::to_string(shift)));
21855         fields.push_back(std::make_pair<std::string, std::string>("dbl_rnd", std::to_string(dbl_rnd)));
21856         fields.push_back(std::make_pair<std::string, std::string>("round_mode", (round_mode < (sizeof(round_mode_ifm_str)/sizeof(round_mode_ifm_str[0])) ? round_mode_ifm_str[round_mode] : "****")));
21857         fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
21858     }
21859 #endif
21860 #endif
21861 };
21862 // IFM2 input scale
21863 struct npu_set_ifm2_scale_t
21864 {
21865 #ifdef __cplusplus
21866 private:
21867 #endif
21868     uint32_t opcode:10; //  opcode
21869     uint32_t reserved0:4;
21870     uint32_t control:2; //  control
21871     uint32_t shift:6; //  Right shift (0 to 63)
21872     uint32_t dbl_rnd:5; //  Double rounding shift (0 to 30)
21873     uint32_t reserved1:2;
21874     uint32_t round_mode:1; //  Rounding mode
21875     uint32_t reserved2:2;
21876     uint32_t scale:31; //  Scale value (uint31 = non-negative int32)
21877     uint32_t reserved3:1;
21878 #ifdef __cplusplus
21879 public:
npu_set_ifm2_scale_tisa::npu_set_ifm2_scale_t21880     npu_set_ifm2_scale_t(uint32_t _shift, uint32_t _dbl_rnd, NPU_NAMESPACE::round_mode_ifm _round_mode, uint32_t _scale) :
21881         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_SCALE)),
21882         reserved0(0),
21883         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21884         shift(_shift & ((1U << 6)-1)),
21885         dbl_rnd(_dbl_rnd & ((1U << 5)-1)),
21886         reserved1(0),
21887         round_mode(static_cast<uint8_t>(_round_mode) & ((1U << 1)-1)),
21888         reserved2(0),
21889         scale(_scale & ((1U << 31)-1)),
21890         reserved3(0)
21891     {}
npu_set_ifm2_scale_tisa::npu_set_ifm2_scale_t21892     CONSTEXPR npu_set_ifm2_scale_t() :
21893         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_SCALE)),
21894         reserved0(0),
21895         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
21896         shift(0),
21897         dbl_rnd(0),
21898         reserved1(0),
21899         round_mode(0),
21900         reserved2(0),
21901         scale(0),
21902         reserved3(0)
21903     {}
validisa::npu_set_ifm2_scale_t21904     CONSTEXPR bool valid() const
21905     {
21906         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_SCALE) && control >= 1 && control <= 2;
21907     }
initisa::npu_set_ifm2_scale_t21908     CONSTEXPR void init()
21909     {
21910         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_SCALE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
21911     }
uint64_tisa::npu_set_ifm2_scale_t21912     operator uint64_t()
21913     {
21914         uint64_t word = 0;
21915         word |= uint64_t(opcode) << 0;
21916         word |= uint64_t(control) << 14;
21917         word |= uint64_t(shift) << 16;
21918         word |= uint64_t(dbl_rnd) << 22;
21919         word |= uint64_t(round_mode) << 29;
21920         word |= uint64_t(scale) << 32;
21921         return word;
21922     }
get_opcodeisa::npu_set_ifm2_scale_t21923     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
21924     {
21925         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
21926     }
set_opcodeisa::npu_set_ifm2_scale_t21927     CONSTEXPR npu_set_ifm2_scale_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
21928     {
21929         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
21930         return *this;
21931     }
get_controlisa::npu_set_ifm2_scale_t21932     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21933     {
21934         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21935     }
set_controlisa::npu_set_ifm2_scale_t21936     CONSTEXPR npu_set_ifm2_scale_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
21937     {
21938         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
21939         return *this;
21940     }
get_shiftisa::npu_set_ifm2_scale_t21941     CONSTEXPR uint32_t get_shift() const
21942     {
21943         return static_cast<uint32_t>(shift);
21944     }
set_shiftisa::npu_set_ifm2_scale_t21945     CONSTEXPR npu_set_ifm2_scale_t& set_shift(uint32_t value)
21946     {
21947         assert((value >> 6) == 0);
21948         shift = static_cast<uint8_t>(value & ((1U << 6)-1));
21949         return *this;
21950     }
get_dbl_rndisa::npu_set_ifm2_scale_t21951     CONSTEXPR uint32_t get_dbl_rnd() const
21952     {
21953         return static_cast<uint32_t>(dbl_rnd);
21954     }
set_dbl_rndisa::npu_set_ifm2_scale_t21955     CONSTEXPR npu_set_ifm2_scale_t& set_dbl_rnd(uint32_t value)
21956     {
21957         assert((value >> 5) == 0);
21958         dbl_rnd = static_cast<uint8_t>(value & ((1U << 5)-1));
21959         return *this;
21960     }
get_round_modeisa::npu_set_ifm2_scale_t21961     CONSTEXPR NPU_NAMESPACE::round_mode_ifm get_round_mode() const
21962     {
21963         return static_cast<NPU_NAMESPACE::round_mode_ifm>(round_mode);
21964     }
set_round_modeisa::npu_set_ifm2_scale_t21965     CONSTEXPR npu_set_ifm2_scale_t& set_round_mode(NPU_NAMESPACE::round_mode_ifm value)
21966     {
21967         round_mode = static_cast<uint8_t>(value) & ((1U << 1)-1);
21968         return *this;
21969     }
get_scaleisa::npu_set_ifm2_scale_t21970     CONSTEXPR uint32_t get_scale() const
21971     {
21972         return static_cast<uint32_t>(scale);
21973     }
set_scaleisa::npu_set_ifm2_scale_t21974     CONSTEXPR npu_set_ifm2_scale_t& set_scale(uint32_t value)
21975     {
21976         assert((value >> 31) == 0);
21977         scale = value & ((1U << 31)-1);
21978         return *this;
21979     }
21980 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_scale_t21981     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
21982     {
21983         fields.push_back(std::make_pair<std::string, std::string>("shift", std::to_string(shift)));
21984         fields.push_back(std::make_pair<std::string, std::string>("dbl_rnd", std::to_string(dbl_rnd)));
21985         fields.push_back(std::make_pair<std::string, std::string>("round_mode", (round_mode < (sizeof(round_mode_ifm_str)/sizeof(round_mode_ifm_str[0])) ? round_mode_ifm_str[round_mode] : "****")));
21986         fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
21987     }
21988 #endif
21989 #endif
21990 };
21991 // Operation scalar value
21992 struct npu_set_op_scalar_t
21993 {
21994 #ifdef __cplusplus
21995 private:
21996 #endif
21997     uint32_t opcode:10; //  opcode
21998     uint32_t reserved0:4;
21999     uint32_t control:2; //  control
22000     uint32_t reserved1:16;
22001     uint32_t scalar:32; //  Scalar value (int32)
22002 #ifdef __cplusplus
22003 public:
npu_set_op_scalar_tisa::npu_set_op_scalar_t22004     npu_set_op_scalar_t(uint32_t _scalar) :
22005         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OP_SCALAR)),
22006         reserved0(0),
22007         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22008         reserved1(0),
22009         scalar(_scalar)
22010     {}
npu_set_op_scalar_tisa::npu_set_op_scalar_t22011     CONSTEXPR npu_set_op_scalar_t() :
22012         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OP_SCALAR)),
22013         reserved0(0),
22014         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22015         reserved1(0),
22016         scalar(0)
22017     {}
validisa::npu_set_op_scalar_t22018     CONSTEXPR bool valid() const
22019     {
22020         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OP_SCALAR) && control >= 1 && control <= 2;
22021     }
initisa::npu_set_op_scalar_t22022     CONSTEXPR void init()
22023     {
22024         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OP_SCALAR); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22025     }
uint64_tisa::npu_set_op_scalar_t22026     operator uint64_t()
22027     {
22028         uint64_t word = 0;
22029         word |= uint64_t(opcode) << 0;
22030         word |= uint64_t(control) << 14;
22031         word |= uint64_t(scalar) << 32;
22032         return word;
22033     }
get_opcodeisa::npu_set_op_scalar_t22034     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
22035     {
22036         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
22037     }
set_opcodeisa::npu_set_op_scalar_t22038     CONSTEXPR npu_set_op_scalar_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
22039     {
22040         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
22041         return *this;
22042     }
get_controlisa::npu_set_op_scalar_t22043     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22044     {
22045         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22046     }
set_controlisa::npu_set_op_scalar_t22047     CONSTEXPR npu_set_op_scalar_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
22048     {
22049         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
22050         return *this;
22051     }
get_scalarisa::npu_set_op_scalar_t22052     CONSTEXPR uint32_t get_scalar() const
22053     {
22054         return static_cast<uint32_t>(scalar);
22055     }
set_scalarisa::npu_set_op_scalar_t22056     CONSTEXPR npu_set_op_scalar_t& set_scalar(uint32_t value)
22057     {
22058         scalar = value;
22059         return *this;
22060     }
22061 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_op_scalar_t22062     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22063     {
22064         fields.push_back(std::make_pair<std::string, std::string>("scalar", std::to_string(((scalar <= std::numeric_limits<int>::max() ? static_cast<int>(scalar) : scalar - std::numeric_limits<int>::min() + std::numeric_limits<int>::max()) << 0) >> 0)));
22065     }
22066 #endif
22067 #endif
22068 };
22069 // DMA user channel 0 source byte offset from DMA0_SRC_REGION
22070 struct npu_set_dma0_src_t
22071 {
22072 #ifdef __cplusplus
22073 private:
22074 #endif
22075     uint32_t opcode:10; //  opcode
22076     uint32_t reserved0:4;
22077     uint32_t control:2; //  control
22078     uint32_t addr_hi:8; //  address extension
22079     uint32_t reserved1:8;
22080     uint32_t addr_lo:32; //  address offset
22081 #ifdef __cplusplus
22082 public:
npu_set_dma0_src_tisa::npu_set_dma0_src_t22083     npu_set_dma0_src_t(uint64_t _addr) :
22084         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC)),
22085         reserved0(0),
22086         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22087         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22088         reserved1(0),
22089         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22090     {}
npu_set_dma0_src_tisa::npu_set_dma0_src_t22091     CONSTEXPR npu_set_dma0_src_t() :
22092         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC)),
22093         reserved0(0),
22094         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22095         addr_hi(0),
22096         reserved1(0),
22097         addr_lo(0)
22098     {}
validisa::npu_set_dma0_src_t22099     CONSTEXPR bool valid() const
22100     {
22101         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC) && control >= 1 && control <= 2;
22102     }
initisa::npu_set_dma0_src_t22103     CONSTEXPR void init()
22104     {
22105         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22106     }
uint64_tisa::npu_set_dma0_src_t22107     operator uint64_t()
22108     {
22109         uint64_t word = 0;
22110         word |= uint64_t(opcode) << 0;
22111         word |= uint64_t(control) << 14;
22112         word |= uint64_t(addr_hi) << 16;
22113         word |= uint64_t(addr_lo) << 32;
22114         return word;
22115     }
get_addrisa::npu_set_dma0_src_t22116     CONSTEXPR uint64_t get_addr() const
22117     {
22118         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22119     }
set_addrisa::npu_set_dma0_src_t22120     CONSTEXPR npu_set_dma0_src_t& set_addr(uint64_t value)
22121     {
22122         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22123     }
22124 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_src_t22125     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22126     {
22127         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22128         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22129     }
22130 #endif
22131 #endif
22132 };
22133 // DMA user channel 0 destination byte offset from DMA0_DST_REGION
22134 struct npu_set_dma0_dst_t
22135 {
22136 #ifdef __cplusplus
22137 private:
22138 #endif
22139     uint32_t opcode:10; //  opcode
22140     uint32_t reserved0:4;
22141     uint32_t control:2; //  control
22142     uint32_t addr_hi:8; //  address extension
22143     uint32_t reserved1:8;
22144     uint32_t addr_lo:32; //  address offset
22145 #ifdef __cplusplus
22146 public:
npu_set_dma0_dst_tisa::npu_set_dma0_dst_t22147     npu_set_dma0_dst_t(uint64_t _addr) :
22148         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST)),
22149         reserved0(0),
22150         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22151         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22152         reserved1(0),
22153         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22154     {}
npu_set_dma0_dst_tisa::npu_set_dma0_dst_t22155     CONSTEXPR npu_set_dma0_dst_t() :
22156         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST)),
22157         reserved0(0),
22158         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22159         addr_hi(0),
22160         reserved1(0),
22161         addr_lo(0)
22162     {}
validisa::npu_set_dma0_dst_t22163     CONSTEXPR bool valid() const
22164     {
22165         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST) && control >= 1 && control <= 2;
22166     }
initisa::npu_set_dma0_dst_t22167     CONSTEXPR void init()
22168     {
22169         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22170     }
uint64_tisa::npu_set_dma0_dst_t22171     operator uint64_t()
22172     {
22173         uint64_t word = 0;
22174         word |= uint64_t(opcode) << 0;
22175         word |= uint64_t(control) << 14;
22176         word |= uint64_t(addr_hi) << 16;
22177         word |= uint64_t(addr_lo) << 32;
22178         return word;
22179     }
get_addrisa::npu_set_dma0_dst_t22180     CONSTEXPR uint64_t get_addr() const
22181     {
22182         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22183     }
set_addrisa::npu_set_dma0_dst_t22184     CONSTEXPR npu_set_dma0_dst_t& set_addr(uint64_t value)
22185     {
22186         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22187     }
22188 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_dst_t22189     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22190     {
22191         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22192         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22193     }
22194 #endif
22195 #endif
22196 };
22197 // DMA user channel 0 transfer length in bytes for each 1D transfer
22198 struct npu_set_dma0_len_t
22199 {
22200 #ifdef __cplusplus
22201 private:
22202 #endif
22203     uint32_t opcode:10; //  opcode
22204     uint32_t reserved0:4;
22205     uint32_t control:2; //  control
22206     uint32_t addr_hi:8; //  address extension
22207     uint32_t reserved1:8;
22208     uint32_t addr_lo:32; //  address offset
22209 #ifdef __cplusplus
22210 public:
npu_set_dma0_len_tisa::npu_set_dma0_len_t22211     npu_set_dma0_len_t(uint64_t _addr) :
22212         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN)),
22213         reserved0(0),
22214         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22215         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22216         reserved1(0),
22217         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22218     {}
npu_set_dma0_len_tisa::npu_set_dma0_len_t22219     CONSTEXPR npu_set_dma0_len_t() :
22220         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN)),
22221         reserved0(0),
22222         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22223         addr_hi(0),
22224         reserved1(0),
22225         addr_lo(0)
22226     {}
validisa::npu_set_dma0_len_t22227     CONSTEXPR bool valid() const
22228     {
22229         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN) && control >= 1 && control <= 2;
22230     }
initisa::npu_set_dma0_len_t22231     CONSTEXPR void init()
22232     {
22233         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22234     }
uint64_tisa::npu_set_dma0_len_t22235     operator uint64_t()
22236     {
22237         uint64_t word = 0;
22238         word |= uint64_t(opcode) << 0;
22239         word |= uint64_t(control) << 14;
22240         word |= uint64_t(addr_hi) << 16;
22241         word |= uint64_t(addr_lo) << 32;
22242         return word;
22243     }
get_addrisa::npu_set_dma0_len_t22244     CONSTEXPR uint64_t get_addr() const
22245     {
22246         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22247     }
set_addrisa::npu_set_dma0_len_t22248     CONSTEXPR npu_set_dma0_len_t& set_addr(uint64_t value)
22249     {
22250         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22251     }
22252 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_len_t22253     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22254     {
22255         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22256         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22257     }
22258 #endif
22259 #endif
22260 };
22261 // Source byte stride after each 1D transfer
22262 struct npu_set_dma0_src_stride0_t
22263 {
22264 #ifdef __cplusplus
22265 private:
22266 #endif
22267     uint32_t opcode:10; //  opcode
22268     uint32_t reserved0:4;
22269     uint32_t control:2; //  control
22270     uint32_t addr_hi:8; //  address extension
22271     uint32_t reserved1:8;
22272     uint32_t addr_lo:32; //  address offset
22273 #ifdef __cplusplus
22274 public:
npu_set_dma0_src_stride0_tisa::npu_set_dma0_src_stride0_t22275     npu_set_dma0_src_stride0_t(uint64_t _addr) :
22276         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE0)),
22277         reserved0(0),
22278         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22279         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22280         reserved1(0),
22281         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22282     {}
npu_set_dma0_src_stride0_tisa::npu_set_dma0_src_stride0_t22283     CONSTEXPR npu_set_dma0_src_stride0_t() :
22284         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE0)),
22285         reserved0(0),
22286         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22287         addr_hi(0),
22288         reserved1(0),
22289         addr_lo(0)
22290     {}
validisa::npu_set_dma0_src_stride0_t22291     CONSTEXPR bool valid() const
22292     {
22293         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE0) && control >= 1 && control <= 2;
22294     }
initisa::npu_set_dma0_src_stride0_t22295     CONSTEXPR void init()
22296     {
22297         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE0); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22298     }
uint64_tisa::npu_set_dma0_src_stride0_t22299     operator uint64_t()
22300     {
22301         uint64_t word = 0;
22302         word |= uint64_t(opcode) << 0;
22303         word |= uint64_t(control) << 14;
22304         word |= uint64_t(addr_hi) << 16;
22305         word |= uint64_t(addr_lo) << 32;
22306         return word;
22307     }
get_addrisa::npu_set_dma0_src_stride0_t22308     CONSTEXPR uint64_t get_addr() const
22309     {
22310         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22311     }
set_addrisa::npu_set_dma0_src_stride0_t22312     CONSTEXPR npu_set_dma0_src_stride0_t& set_addr(uint64_t value)
22313     {
22314         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22315     }
22316 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_src_stride0_t22317     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22318     {
22319         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22320         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22321     }
22322 #endif
22323 #endif
22324 };
22325 // Source byte stride after each 2D transfer
22326 struct npu_set_dma0_src_stride1_t
22327 {
22328 #ifdef __cplusplus
22329 private:
22330 #endif
22331     uint32_t opcode:10; //  opcode
22332     uint32_t reserved0:4;
22333     uint32_t control:2; //  control
22334     uint32_t addr_hi:8; //  address extension
22335     uint32_t reserved1:8;
22336     uint32_t addr_lo:32; //  address offset
22337 #ifdef __cplusplus
22338 public:
npu_set_dma0_src_stride1_tisa::npu_set_dma0_src_stride1_t22339     npu_set_dma0_src_stride1_t(uint64_t _addr) :
22340         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE1)),
22341         reserved0(0),
22342         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22343         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22344         reserved1(0),
22345         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22346     {}
npu_set_dma0_src_stride1_tisa::npu_set_dma0_src_stride1_t22347     CONSTEXPR npu_set_dma0_src_stride1_t() :
22348         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE1)),
22349         reserved0(0),
22350         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22351         addr_hi(0),
22352         reserved1(0),
22353         addr_lo(0)
22354     {}
validisa::npu_set_dma0_src_stride1_t22355     CONSTEXPR bool valid() const
22356     {
22357         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE1) && control >= 1 && control <= 2;
22358     }
initisa::npu_set_dma0_src_stride1_t22359     CONSTEXPR void init()
22360     {
22361         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC_STRIDE1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22362     }
uint64_tisa::npu_set_dma0_src_stride1_t22363     operator uint64_t()
22364     {
22365         uint64_t word = 0;
22366         word |= uint64_t(opcode) << 0;
22367         word |= uint64_t(control) << 14;
22368         word |= uint64_t(addr_hi) << 16;
22369         word |= uint64_t(addr_lo) << 32;
22370         return word;
22371     }
get_addrisa::npu_set_dma0_src_stride1_t22372     CONSTEXPR uint64_t get_addr() const
22373     {
22374         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22375     }
set_addrisa::npu_set_dma0_src_stride1_t22376     CONSTEXPR npu_set_dma0_src_stride1_t& set_addr(uint64_t value)
22377     {
22378         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22379     }
22380 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_src_stride1_t22381     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22382     {
22383         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22384         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22385     }
22386 #endif
22387 #endif
22388 };
22389 // Destination byte stride after each 1D transfer
22390 struct npu_set_dma0_dst_stride0_t
22391 {
22392 #ifdef __cplusplus
22393 private:
22394 #endif
22395     uint32_t opcode:10; //  opcode
22396     uint32_t reserved0:4;
22397     uint32_t control:2; //  control
22398     uint32_t addr_hi:8; //  address extension
22399     uint32_t reserved1:8;
22400     uint32_t addr_lo:32; //  address offset
22401 #ifdef __cplusplus
22402 public:
npu_set_dma0_dst_stride0_tisa::npu_set_dma0_dst_stride0_t22403     npu_set_dma0_dst_stride0_t(uint64_t _addr) :
22404         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE0)),
22405         reserved0(0),
22406         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22407         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22408         reserved1(0),
22409         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22410     {}
npu_set_dma0_dst_stride0_tisa::npu_set_dma0_dst_stride0_t22411     CONSTEXPR npu_set_dma0_dst_stride0_t() :
22412         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE0)),
22413         reserved0(0),
22414         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22415         addr_hi(0),
22416         reserved1(0),
22417         addr_lo(0)
22418     {}
validisa::npu_set_dma0_dst_stride0_t22419     CONSTEXPR bool valid() const
22420     {
22421         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE0) && control >= 1 && control <= 2;
22422     }
initisa::npu_set_dma0_dst_stride0_t22423     CONSTEXPR void init()
22424     {
22425         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE0); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22426     }
uint64_tisa::npu_set_dma0_dst_stride0_t22427     operator uint64_t()
22428     {
22429         uint64_t word = 0;
22430         word |= uint64_t(opcode) << 0;
22431         word |= uint64_t(control) << 14;
22432         word |= uint64_t(addr_hi) << 16;
22433         word |= uint64_t(addr_lo) << 32;
22434         return word;
22435     }
get_addrisa::npu_set_dma0_dst_stride0_t22436     CONSTEXPR uint64_t get_addr() const
22437     {
22438         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22439     }
set_addrisa::npu_set_dma0_dst_stride0_t22440     CONSTEXPR npu_set_dma0_dst_stride0_t& set_addr(uint64_t value)
22441     {
22442         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22443     }
22444 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_dst_stride0_t22445     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22446     {
22447         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22448         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22449     }
22450 #endif
22451 #endif
22452 };
22453 // Destination byte stride after 2D transfer
22454 struct npu_set_dma0_dst_stride1_t
22455 {
22456 #ifdef __cplusplus
22457 private:
22458 #endif
22459     uint32_t opcode:10; //  opcode
22460     uint32_t reserved0:4;
22461     uint32_t control:2; //  control
22462     uint32_t addr_hi:8; //  address extension
22463     uint32_t reserved1:8;
22464     uint32_t addr_lo:32; //  address offset
22465 #ifdef __cplusplus
22466 public:
npu_set_dma0_dst_stride1_tisa::npu_set_dma0_dst_stride1_t22467     npu_set_dma0_dst_stride1_t(uint64_t _addr) :
22468         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE1)),
22469         reserved0(0),
22470         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22471         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22472         reserved1(0),
22473         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22474     {}
npu_set_dma0_dst_stride1_tisa::npu_set_dma0_dst_stride1_t22475     CONSTEXPR npu_set_dma0_dst_stride1_t() :
22476         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE1)),
22477         reserved0(0),
22478         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22479         addr_hi(0),
22480         reserved1(0),
22481         addr_lo(0)
22482     {}
validisa::npu_set_dma0_dst_stride1_t22483     CONSTEXPR bool valid() const
22484     {
22485         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE1) && control >= 1 && control <= 2;
22486     }
initisa::npu_set_dma0_dst_stride1_t22487     CONSTEXPR void init()
22488     {
22489         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST_STRIDE1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22490     }
uint64_tisa::npu_set_dma0_dst_stride1_t22491     operator uint64_t()
22492     {
22493         uint64_t word = 0;
22494         word |= uint64_t(opcode) << 0;
22495         word |= uint64_t(control) << 14;
22496         word |= uint64_t(addr_hi) << 16;
22497         word |= uint64_t(addr_lo) << 32;
22498         return word;
22499     }
get_addrisa::npu_set_dma0_dst_stride1_t22500     CONSTEXPR uint64_t get_addr() const
22501     {
22502         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22503     }
set_addrisa::npu_set_dma0_dst_stride1_t22504     CONSTEXPR npu_set_dma0_dst_stride1_t& set_addr(uint64_t value)
22505     {
22506         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22507     }
22508 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_dst_stride1_t22509     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22510     {
22511         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22512         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22513     }
22514 #endif
22515 #endif
22516 };
22517 // DMA channel 0 index array address
22518 struct npu_set_dma0_idx_t
22519 {
22520 #ifdef __cplusplus
22521 private:
22522 #endif
22523     uint32_t opcode:10; //  opcode
22524     uint32_t reserved0:4;
22525     uint32_t control:2; //  control
22526     uint32_t addr_hi:8; //  address extension
22527     uint32_t reserved1:8;
22528     uint32_t addr_lo:32; //  address offset
22529 #ifdef __cplusplus
22530 public:
npu_set_dma0_idx_tisa::npu_set_dma0_idx_t22531     npu_set_dma0_idx_t(uint64_t _addr) :
22532         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX)),
22533         reserved0(0),
22534         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22535         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22536         reserved1(0),
22537         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22538     {}
npu_set_dma0_idx_tisa::npu_set_dma0_idx_t22539     CONSTEXPR npu_set_dma0_idx_t() :
22540         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX)),
22541         reserved0(0),
22542         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22543         addr_hi(0),
22544         reserved1(0),
22545         addr_lo(0)
22546     {}
validisa::npu_set_dma0_idx_t22547     CONSTEXPR bool valid() const
22548     {
22549         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX) && control >= 1 && control <= 2;
22550     }
initisa::npu_set_dma0_idx_t22551     CONSTEXPR void init()
22552     {
22553         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22554     }
uint64_tisa::npu_set_dma0_idx_t22555     operator uint64_t()
22556     {
22557         uint64_t word = 0;
22558         word |= uint64_t(opcode) << 0;
22559         word |= uint64_t(control) << 14;
22560         word |= uint64_t(addr_hi) << 16;
22561         word |= uint64_t(addr_lo) << 32;
22562         return word;
22563     }
get_addrisa::npu_set_dma0_idx_t22564     CONSTEXPR uint64_t get_addr() const
22565     {
22566         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22567     }
set_addrisa::npu_set_dma0_idx_t22568     CONSTEXPR npu_set_dma0_idx_t& set_addr(uint64_t value)
22569     {
22570         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22571     }
22572 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_idx_t22573     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22574     {
22575         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22576         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22577     }
22578 #endif
22579 #endif
22580 };
22581 // DMA channel 0 index maximum value
22582 struct npu_set_dma0_idx_max_t
22583 {
22584 #ifdef __cplusplus
22585 private:
22586 #endif
22587     uint32_t opcode:10; //  opcode
22588     uint32_t reserved0:4;
22589     uint32_t control:2; //  control
22590     uint32_t reserved1:16;
22591     uint32_t idx_max:31; //  maximum permitted index
22592     uint32_t reserved2:1;
22593 #ifdef __cplusplus
22594 public:
npu_set_dma0_idx_max_tisa::npu_set_dma0_idx_max_t22595     npu_set_dma0_idx_max_t(uint32_t _idx_max) :
22596         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_MAX)),
22597         reserved0(0),
22598         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22599         reserved1(0),
22600         idx_max(_idx_max & ((1U << 31)-1)),
22601         reserved2(0)
22602     {}
npu_set_dma0_idx_max_tisa::npu_set_dma0_idx_max_t22603     CONSTEXPR npu_set_dma0_idx_max_t() :
22604         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_MAX)),
22605         reserved0(0),
22606         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22607         reserved1(0),
22608         idx_max(0),
22609         reserved2(0)
22610     {}
validisa::npu_set_dma0_idx_max_t22611     CONSTEXPR bool valid() const
22612     {
22613         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_MAX) && control >= 1 && control <= 2;
22614     }
initisa::npu_set_dma0_idx_max_t22615     CONSTEXPR void init()
22616     {
22617         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_MAX); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22618     }
uint64_tisa::npu_set_dma0_idx_max_t22619     operator uint64_t()
22620     {
22621         uint64_t word = 0;
22622         word |= uint64_t(opcode) << 0;
22623         word |= uint64_t(control) << 14;
22624         word |= uint64_t(idx_max) << 32;
22625         return word;
22626     }
get_opcodeisa::npu_set_dma0_idx_max_t22627     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
22628     {
22629         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
22630     }
set_opcodeisa::npu_set_dma0_idx_max_t22631     CONSTEXPR npu_set_dma0_idx_max_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
22632     {
22633         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
22634         return *this;
22635     }
get_controlisa::npu_set_dma0_idx_max_t22636     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22637     {
22638         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22639     }
set_controlisa::npu_set_dma0_idx_max_t22640     CONSTEXPR npu_set_dma0_idx_max_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
22641     {
22642         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
22643         return *this;
22644     }
get_idx_maxisa::npu_set_dma0_idx_max_t22645     CONSTEXPR uint32_t get_idx_max() const
22646     {
22647         return static_cast<uint32_t>(idx_max);
22648     }
set_idx_maxisa::npu_set_dma0_idx_max_t22649     CONSTEXPR npu_set_dma0_idx_max_t& set_idx_max(uint32_t value)
22650     {
22651         assert((value >> 31) == 0);
22652         idx_max = value & ((1U << 31)-1);
22653         return *this;
22654     }
22655 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_idx_max_t22656     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22657     {
22658         fields.push_back(std::make_pair<std::string, std::string>("idx_max", std::to_string(idx_max)));
22659     }
22660 #endif
22661 #endif
22662 };
22663 // Index byte distance to skip in index after each 2D transfer
22664 struct npu_set_dma0_idx_skip1_t
22665 {
22666 #ifdef __cplusplus
22667 private:
22668 #endif
22669     uint32_t opcode:10; //  opcode
22670     uint32_t reserved0:4;
22671     uint32_t control:2; //  control
22672     uint32_t addr_hi:8; //  address extension
22673     uint32_t reserved1:8;
22674     uint32_t addr_lo:32; //  address offset
22675 #ifdef __cplusplus
22676 public:
npu_set_dma0_idx_skip1_tisa::npu_set_dma0_idx_skip1_t22677     npu_set_dma0_idx_skip1_t(uint64_t _addr) :
22678         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_SKIP1)),
22679         reserved0(0),
22680         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22681         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22682         reserved1(0),
22683         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22684     {}
npu_set_dma0_idx_skip1_tisa::npu_set_dma0_idx_skip1_t22685     CONSTEXPR npu_set_dma0_idx_skip1_t() :
22686         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_SKIP1)),
22687         reserved0(0),
22688         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22689         addr_hi(0),
22690         reserved1(0),
22691         addr_lo(0)
22692     {}
validisa::npu_set_dma0_idx_skip1_t22693     CONSTEXPR bool valid() const
22694     {
22695         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_SKIP1) && control >= 1 && control <= 2;
22696     }
initisa::npu_set_dma0_idx_skip1_t22697     CONSTEXPR void init()
22698     {
22699         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_IDX_SKIP1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22700     }
uint64_tisa::npu_set_dma0_idx_skip1_t22701     operator uint64_t()
22702     {
22703         uint64_t word = 0;
22704         word |= uint64_t(opcode) << 0;
22705         word |= uint64_t(control) << 14;
22706         word |= uint64_t(addr_hi) << 16;
22707         word |= uint64_t(addr_lo) << 32;
22708         return word;
22709     }
get_addrisa::npu_set_dma0_idx_skip1_t22710     CONSTEXPR uint64_t get_addr() const
22711     {
22712         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22713     }
set_addrisa::npu_set_dma0_idx_skip1_t22714     CONSTEXPR npu_set_dma0_idx_skip1_t& set_addr(uint64_t value)
22715     {
22716         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22717     }
22718 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_dma0_idx_skip1_t22719     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22720     {
22721         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22722         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22723     }
22724 #endif
22725 #endif
22726 };
22727 // IFM2 Tile 0 address
22728 struct npu_set_ifm2_base0_t
22729 {
22730 #ifdef __cplusplus
22731 private:
22732 #endif
22733     uint32_t opcode:10; //  opcode
22734     uint32_t reserved0:4;
22735     uint32_t control:2; //  control
22736     uint32_t addr_hi:8; //  address extension
22737     uint32_t reserved1:8;
22738     uint32_t addr_lo:32; //  address offset
22739 #ifdef __cplusplus
22740 public:
npu_set_ifm2_base0_tisa::npu_set_ifm2_base0_t22741     npu_set_ifm2_base0_t(uint64_t _addr) :
22742         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0)),
22743         reserved0(0),
22744         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22745         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22746         reserved1(0),
22747         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22748     {}
npu_set_ifm2_base0_tisa::npu_set_ifm2_base0_t22749     CONSTEXPR npu_set_ifm2_base0_t() :
22750         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0)),
22751         reserved0(0),
22752         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22753         addr_hi(0),
22754         reserved1(0),
22755         addr_lo(0)
22756     {}
validisa::npu_set_ifm2_base0_t22757     CONSTEXPR bool valid() const
22758     {
22759         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0) && control >= 1 && control <= 2;
22760     }
initisa::npu_set_ifm2_base0_t22761     CONSTEXPR void init()
22762     {
22763         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22764     }
uint64_tisa::npu_set_ifm2_base0_t22765     operator uint64_t()
22766     {
22767         uint64_t word = 0;
22768         word |= uint64_t(opcode) << 0;
22769         word |= uint64_t(control) << 14;
22770         word |= uint64_t(addr_hi) << 16;
22771         word |= uint64_t(addr_lo) << 32;
22772         return word;
22773     }
get_addrisa::npu_set_ifm2_base0_t22774     CONSTEXPR uint64_t get_addr() const
22775     {
22776         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22777     }
set_addrisa::npu_set_ifm2_base0_t22778     CONSTEXPR npu_set_ifm2_base0_t& set_addr(uint64_t value)
22779     {
22780         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22781     }
22782 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_base0_t22783     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22784     {
22785         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22786         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22787     }
22788 #endif
22789 #endif
22790 };
22791 // IFM2 Tile 1 address
22792 struct npu_set_ifm2_base1_t
22793 {
22794 #ifdef __cplusplus
22795 private:
22796 #endif
22797     uint32_t opcode:10; //  opcode
22798     uint32_t reserved0:4;
22799     uint32_t control:2; //  control
22800     uint32_t addr_hi:8; //  address extension
22801     uint32_t reserved1:8;
22802     uint32_t addr_lo:32; //  address offset
22803 #ifdef __cplusplus
22804 public:
npu_set_ifm2_base1_tisa::npu_set_ifm2_base1_t22805     npu_set_ifm2_base1_t(uint64_t _addr) :
22806         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1)),
22807         reserved0(0),
22808         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22809         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22810         reserved1(0),
22811         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22812     {}
npu_set_ifm2_base1_tisa::npu_set_ifm2_base1_t22813     CONSTEXPR npu_set_ifm2_base1_t() :
22814         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1)),
22815         reserved0(0),
22816         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22817         addr_hi(0),
22818         reserved1(0),
22819         addr_lo(0)
22820     {}
validisa::npu_set_ifm2_base1_t22821     CONSTEXPR bool valid() const
22822     {
22823         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1) && control >= 1 && control <= 2;
22824     }
initisa::npu_set_ifm2_base1_t22825     CONSTEXPR void init()
22826     {
22827         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22828     }
uint64_tisa::npu_set_ifm2_base1_t22829     operator uint64_t()
22830     {
22831         uint64_t word = 0;
22832         word |= uint64_t(opcode) << 0;
22833         word |= uint64_t(control) << 14;
22834         word |= uint64_t(addr_hi) << 16;
22835         word |= uint64_t(addr_lo) << 32;
22836         return word;
22837     }
get_addrisa::npu_set_ifm2_base1_t22838     CONSTEXPR uint64_t get_addr() const
22839     {
22840         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22841     }
set_addrisa::npu_set_ifm2_base1_t22842     CONSTEXPR npu_set_ifm2_base1_t& set_addr(uint64_t value)
22843     {
22844         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22845     }
22846 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_base1_t22847     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22848     {
22849         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22850         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22851     }
22852 #endif
22853 #endif
22854 };
22855 // IFM2 Tile 2 address
22856 struct npu_set_ifm2_base2_t
22857 {
22858 #ifdef __cplusplus
22859 private:
22860 #endif
22861     uint32_t opcode:10; //  opcode
22862     uint32_t reserved0:4;
22863     uint32_t control:2; //  control
22864     uint32_t addr_hi:8; //  address extension
22865     uint32_t reserved1:8;
22866     uint32_t addr_lo:32; //  address offset
22867 #ifdef __cplusplus
22868 public:
npu_set_ifm2_base2_tisa::npu_set_ifm2_base2_t22869     npu_set_ifm2_base2_t(uint64_t _addr) :
22870         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2)),
22871         reserved0(0),
22872         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22873         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22874         reserved1(0),
22875         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22876     {}
npu_set_ifm2_base2_tisa::npu_set_ifm2_base2_t22877     CONSTEXPR npu_set_ifm2_base2_t() :
22878         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2)),
22879         reserved0(0),
22880         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22881         addr_hi(0),
22882         reserved1(0),
22883         addr_lo(0)
22884     {}
validisa::npu_set_ifm2_base2_t22885     CONSTEXPR bool valid() const
22886     {
22887         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2) && control >= 1 && control <= 2;
22888     }
initisa::npu_set_ifm2_base2_t22889     CONSTEXPR void init()
22890     {
22891         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22892     }
uint64_tisa::npu_set_ifm2_base2_t22893     operator uint64_t()
22894     {
22895         uint64_t word = 0;
22896         word |= uint64_t(opcode) << 0;
22897         word |= uint64_t(control) << 14;
22898         word |= uint64_t(addr_hi) << 16;
22899         word |= uint64_t(addr_lo) << 32;
22900         return word;
22901     }
get_addrisa::npu_set_ifm2_base2_t22902     CONSTEXPR uint64_t get_addr() const
22903     {
22904         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22905     }
set_addrisa::npu_set_ifm2_base2_t22906     CONSTEXPR npu_set_ifm2_base2_t& set_addr(uint64_t value)
22907     {
22908         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22909     }
22910 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_base2_t22911     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22912     {
22913         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22914         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22915     }
22916 #endif
22917 #endif
22918 };
22919 // IFM2 Tile 3 address
22920 struct npu_set_ifm2_base3_t
22921 {
22922 #ifdef __cplusplus
22923 private:
22924 #endif
22925     uint32_t opcode:10; //  opcode
22926     uint32_t reserved0:4;
22927     uint32_t control:2; //  control
22928     uint32_t addr_hi:8; //  address extension
22929     uint32_t reserved1:8;
22930     uint32_t addr_lo:32; //  address offset
22931 #ifdef __cplusplus
22932 public:
npu_set_ifm2_base3_tisa::npu_set_ifm2_base3_t22933     npu_set_ifm2_base3_t(uint64_t _addr) :
22934         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3)),
22935         reserved0(0),
22936         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22937         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
22938         reserved1(0),
22939         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
22940     {}
npu_set_ifm2_base3_tisa::npu_set_ifm2_base3_t22941     CONSTEXPR npu_set_ifm2_base3_t() :
22942         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3)),
22943         reserved0(0),
22944         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
22945         addr_hi(0),
22946         reserved1(0),
22947         addr_lo(0)
22948     {}
validisa::npu_set_ifm2_base3_t22949     CONSTEXPR bool valid() const
22950     {
22951         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3) && control >= 1 && control <= 2;
22952     }
initisa::npu_set_ifm2_base3_t22953     CONSTEXPR void init()
22954     {
22955         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22956     }
uint64_tisa::npu_set_ifm2_base3_t22957     operator uint64_t()
22958     {
22959         uint64_t word = 0;
22960         word |= uint64_t(opcode) << 0;
22961         word |= uint64_t(control) << 14;
22962         word |= uint64_t(addr_hi) << 16;
22963         word |= uint64_t(addr_lo) << 32;
22964         return word;
22965     }
get_addrisa::npu_set_ifm2_base3_t22966     CONSTEXPR uint64_t get_addr() const
22967     {
22968         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
22969     }
set_addrisa::npu_set_ifm2_base3_t22970     CONSTEXPR npu_set_ifm2_base3_t& set_addr(uint64_t value)
22971     {
22972         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
22973     }
22974 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_base3_t22975     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
22976     {
22977         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
22978         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22979     }
22980 #endif
22981 #endif
22982 };
22983 // IFM2 byte stride between horizontal values
22984 struct npu_set_ifm2_stride_x_t
22985 {
22986 #ifdef __cplusplus
22987 private:
22988 #endif
22989     uint32_t opcode:10; //  opcode
22990     uint32_t reserved0:4;
22991     uint32_t control:2; //  control
22992     uint32_t addr_hi:8; //  address extension
22993     uint32_t reserved1:8;
22994     uint32_t addr_lo:32; //  address offset
22995 #ifdef __cplusplus
22996 public:
npu_set_ifm2_stride_x_tisa::npu_set_ifm2_stride_x_t22997     npu_set_ifm2_stride_x_t(uint64_t _addr) :
22998         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X)),
22999         reserved0(0),
23000         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23001         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
23002         reserved1(0),
23003         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
23004     {}
npu_set_ifm2_stride_x_tisa::npu_set_ifm2_stride_x_t23005     CONSTEXPR npu_set_ifm2_stride_x_t() :
23006         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X)),
23007         reserved0(0),
23008         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23009         addr_hi(0),
23010         reserved1(0),
23011         addr_lo(0)
23012     {}
validisa::npu_set_ifm2_stride_x_t23013     CONSTEXPR bool valid() const
23014     {
23015         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X) && control >= 1 && control <= 2;
23016     }
initisa::npu_set_ifm2_stride_x_t23017     CONSTEXPR void init()
23018     {
23019         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23020     }
uint64_tisa::npu_set_ifm2_stride_x_t23021     operator uint64_t()
23022     {
23023         uint64_t word = 0;
23024         word |= uint64_t(opcode) << 0;
23025         word |= uint64_t(control) << 14;
23026         word |= uint64_t(addr_hi) << 16;
23027         word |= uint64_t(addr_lo) << 32;
23028         return word;
23029     }
get_addrisa::npu_set_ifm2_stride_x_t23030     CONSTEXPR uint64_t get_addr() const
23031     {
23032         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
23033     }
set_addrisa::npu_set_ifm2_stride_x_t23034     CONSTEXPR npu_set_ifm2_stride_x_t& set_addr(uint64_t value)
23035     {
23036         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
23037     }
23038 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_stride_x_t23039     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23040     {
23041         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
23042         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23043     }
23044 #endif
23045 #endif
23046 };
23047 // IFM2 byte stride between vertical values
23048 struct npu_set_ifm2_stride_y_t
23049 {
23050 #ifdef __cplusplus
23051 private:
23052 #endif
23053     uint32_t opcode:10; //  opcode
23054     uint32_t reserved0:4;
23055     uint32_t control:2; //  control
23056     uint32_t addr_hi:8; //  address extension
23057     uint32_t reserved1:8;
23058     uint32_t addr_lo:32; //  address offset
23059 #ifdef __cplusplus
23060 public:
npu_set_ifm2_stride_y_tisa::npu_set_ifm2_stride_y_t23061     npu_set_ifm2_stride_y_t(uint64_t _addr) :
23062         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y)),
23063         reserved0(0),
23064         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23065         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
23066         reserved1(0),
23067         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
23068     {}
npu_set_ifm2_stride_y_tisa::npu_set_ifm2_stride_y_t23069     CONSTEXPR npu_set_ifm2_stride_y_t() :
23070         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y)),
23071         reserved0(0),
23072         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23073         addr_hi(0),
23074         reserved1(0),
23075         addr_lo(0)
23076     {}
validisa::npu_set_ifm2_stride_y_t23077     CONSTEXPR bool valid() const
23078     {
23079         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y) && control >= 1 && control <= 2;
23080     }
initisa::npu_set_ifm2_stride_y_t23081     CONSTEXPR void init()
23082     {
23083         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23084     }
uint64_tisa::npu_set_ifm2_stride_y_t23085     operator uint64_t()
23086     {
23087         uint64_t word = 0;
23088         word |= uint64_t(opcode) << 0;
23089         word |= uint64_t(control) << 14;
23090         word |= uint64_t(addr_hi) << 16;
23091         word |= uint64_t(addr_lo) << 32;
23092         return word;
23093     }
get_addrisa::npu_set_ifm2_stride_y_t23094     CONSTEXPR uint64_t get_addr() const
23095     {
23096         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
23097     }
set_addrisa::npu_set_ifm2_stride_y_t23098     CONSTEXPR npu_set_ifm2_stride_y_t& set_addr(uint64_t value)
23099     {
23100         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
23101     }
23102 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_stride_y_t23103     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23104     {
23105         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
23106         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23107     }
23108 #endif
23109 #endif
23110 };
23111 // IFM2 byte stride between channel blocks
23112 struct npu_set_ifm2_stride_c_t
23113 {
23114 #ifdef __cplusplus
23115 private:
23116 #endif
23117     uint32_t opcode:10; //  opcode
23118     uint32_t reserved0:4;
23119     uint32_t control:2; //  control
23120     uint32_t addr_hi:8; //  address extension
23121     uint32_t reserved1:8;
23122     uint32_t addr_lo:32; //  address offset
23123 #ifdef __cplusplus
23124 public:
npu_set_ifm2_stride_c_tisa::npu_set_ifm2_stride_c_t23125     npu_set_ifm2_stride_c_t(uint64_t _addr) :
23126         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C)),
23127         reserved0(0),
23128         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23129         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
23130         reserved1(0),
23131         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
23132     {}
npu_set_ifm2_stride_c_tisa::npu_set_ifm2_stride_c_t23133     CONSTEXPR npu_set_ifm2_stride_c_t() :
23134         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C)),
23135         reserved0(0),
23136         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23137         addr_hi(0),
23138         reserved1(0),
23139         addr_lo(0)
23140     {}
validisa::npu_set_ifm2_stride_c_t23141     CONSTEXPR bool valid() const
23142     {
23143         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C) && control >= 1 && control <= 2;
23144     }
initisa::npu_set_ifm2_stride_c_t23145     CONSTEXPR void init()
23146     {
23147         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23148     }
uint64_tisa::npu_set_ifm2_stride_c_t23149     operator uint64_t()
23150     {
23151         uint64_t word = 0;
23152         word |= uint64_t(opcode) << 0;
23153         word |= uint64_t(control) << 14;
23154         word |= uint64_t(addr_hi) << 16;
23155         word |= uint64_t(addr_lo) << 32;
23156         return word;
23157     }
get_addrisa::npu_set_ifm2_stride_c_t23158     CONSTEXPR uint64_t get_addr() const
23159     {
23160         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
23161     }
set_addrisa::npu_set_ifm2_stride_c_t23162     CONSTEXPR npu_set_ifm2_stride_c_t& set_addr(uint64_t value)
23163     {
23164         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
23165     }
23166 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_ifm2_stride_c_t23167     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23168     {
23169         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
23170         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23171     }
23172 #endif
23173 #endif
23174 };
23175 // Weight stream byte offset in WEIGHT_REGION for weight decoder 1
23176 struct npu_set_weight1_base_t
23177 {
23178 #ifdef __cplusplus
23179 private:
23180 #endif
23181     uint32_t opcode:10; //  opcode
23182     uint32_t reserved0:4;
23183     uint32_t control:2; //  control
23184     uint32_t addr_hi:8; //  address extension
23185     uint32_t reserved1:8;
23186     uint32_t addr_lo:32; //  address offset
23187 #ifdef __cplusplus
23188 public:
npu_set_weight1_base_tisa::npu_set_weight1_base_t23189     npu_set_weight1_base_t(uint64_t _addr) :
23190         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE)),
23191         reserved0(0),
23192         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23193         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
23194         reserved1(0),
23195         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
23196     {}
npu_set_weight1_base_tisa::npu_set_weight1_base_t23197     CONSTEXPR npu_set_weight1_base_t() :
23198         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE)),
23199         reserved0(0),
23200         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23201         addr_hi(0),
23202         reserved1(0),
23203         addr_lo(0)
23204     {}
validisa::npu_set_weight1_base_t23205     CONSTEXPR bool valid() const
23206     {
23207         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE) && control >= 1 && control <= 2;
23208     }
initisa::npu_set_weight1_base_t23209     CONSTEXPR void init()
23210     {
23211         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_BASE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23212     }
uint64_tisa::npu_set_weight1_base_t23213     operator uint64_t()
23214     {
23215         uint64_t word = 0;
23216         word |= uint64_t(opcode) << 0;
23217         word |= uint64_t(control) << 14;
23218         word |= uint64_t(addr_hi) << 16;
23219         word |= uint64_t(addr_lo) << 32;
23220         return word;
23221     }
get_addrisa::npu_set_weight1_base_t23222     CONSTEXPR uint64_t get_addr() const
23223     {
23224         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
23225     }
set_addrisa::npu_set_weight1_base_t23226     CONSTEXPR npu_set_weight1_base_t& set_addr(uint64_t value)
23227     {
23228         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
23229     }
23230 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight1_base_t23231     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23232     {
23233         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
23234         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23235     }
23236 #endif
23237 #endif
23238 };
23239 // Weight stream byte length for weight decoder 1
23240 struct npu_set_weight1_length_t
23241 {
23242 #ifdef __cplusplus
23243 private:
23244 #endif
23245     uint32_t opcode:10; //  opcode
23246     uint32_t reserved0:4;
23247     uint32_t control:2; //  control
23248     uint32_t reserved1:16;
23249     uint32_t length:32; //  Weight stream byte length
23250 #ifdef __cplusplus
23251 public:
npu_set_weight1_length_tisa::npu_set_weight1_length_t23252     npu_set_weight1_length_t(uint32_t _length) :
23253         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH)),
23254         reserved0(0),
23255         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23256         reserved1(0),
23257         length(_length)
23258     {}
npu_set_weight1_length_tisa::npu_set_weight1_length_t23259     CONSTEXPR npu_set_weight1_length_t() :
23260         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH)),
23261         reserved0(0),
23262         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23263         reserved1(0),
23264         length(0)
23265     {}
validisa::npu_set_weight1_length_t23266     CONSTEXPR bool valid() const
23267     {
23268         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH) && control >= 1 && control <= 2;
23269     }
initisa::npu_set_weight1_length_t23270     CONSTEXPR void init()
23271     {
23272         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT1_LENGTH); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23273     }
uint64_tisa::npu_set_weight1_length_t23274     operator uint64_t()
23275     {
23276         uint64_t word = 0;
23277         word |= uint64_t(opcode) << 0;
23278         word |= uint64_t(control) << 14;
23279         word |= uint64_t(length) << 32;
23280         return word;
23281     }
get_opcodeisa::npu_set_weight1_length_t23282     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23283     {
23284         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23285     }
set_opcodeisa::npu_set_weight1_length_t23286     CONSTEXPR npu_set_weight1_length_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23287     {
23288         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
23289         return *this;
23290     }
get_controlisa::npu_set_weight1_length_t23291     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23292     {
23293         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23294     }
set_controlisa::npu_set_weight1_length_t23295     CONSTEXPR npu_set_weight1_length_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
23296     {
23297         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
23298         return *this;
23299     }
get_lengthisa::npu_set_weight1_length_t23300     CONSTEXPR uint32_t get_length() const
23301     {
23302         return static_cast<uint32_t>(length);
23303     }
set_lengthisa::npu_set_weight1_length_t23304     CONSTEXPR npu_set_weight1_length_t& set_length(uint32_t value)
23305     {
23306         length = value;
23307         return *this;
23308     }
23309 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight1_length_t23310     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23311     {
23312         fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
23313     }
23314 #endif
23315 #endif
23316 };
23317 // Weight stream byte offset in WEIGHT_REGION for weight decoder 2
23318 struct npu_set_weight2_base_t
23319 {
23320 #ifdef __cplusplus
23321 private:
23322 #endif
23323     uint32_t opcode:10; //  opcode
23324     uint32_t reserved0:4;
23325     uint32_t control:2; //  control
23326     uint32_t addr_hi:8; //  address extension
23327     uint32_t reserved1:8;
23328     uint32_t addr_lo:32; //  address offset
23329 #ifdef __cplusplus
23330 public:
npu_set_weight2_base_tisa::npu_set_weight2_base_t23331     npu_set_weight2_base_t(uint64_t _addr) :
23332         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_BASE)),
23333         reserved0(0),
23334         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23335         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
23336         reserved1(0),
23337         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
23338     {}
npu_set_weight2_base_tisa::npu_set_weight2_base_t23339     CONSTEXPR npu_set_weight2_base_t() :
23340         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_BASE)),
23341         reserved0(0),
23342         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23343         addr_hi(0),
23344         reserved1(0),
23345         addr_lo(0)
23346     {}
validisa::npu_set_weight2_base_t23347     CONSTEXPR bool valid() const
23348     {
23349         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_BASE) && control >= 1 && control <= 2;
23350     }
initisa::npu_set_weight2_base_t23351     CONSTEXPR void init()
23352     {
23353         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_BASE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23354     }
uint64_tisa::npu_set_weight2_base_t23355     operator uint64_t()
23356     {
23357         uint64_t word = 0;
23358         word |= uint64_t(opcode) << 0;
23359         word |= uint64_t(control) << 14;
23360         word |= uint64_t(addr_hi) << 16;
23361         word |= uint64_t(addr_lo) << 32;
23362         return word;
23363     }
get_addrisa::npu_set_weight2_base_t23364     CONSTEXPR uint64_t get_addr() const
23365     {
23366         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
23367     }
set_addrisa::npu_set_weight2_base_t23368     CONSTEXPR npu_set_weight2_base_t& set_addr(uint64_t value)
23369     {
23370         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
23371     }
23372 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight2_base_t23373     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23374     {
23375         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
23376         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23377     }
23378 #endif
23379 #endif
23380 };
23381 // Weight stream byte length for weight decoder 2
23382 struct npu_set_weight2_length_t
23383 {
23384 #ifdef __cplusplus
23385 private:
23386 #endif
23387     uint32_t opcode:10; //  opcode
23388     uint32_t reserved0:4;
23389     uint32_t control:2; //  control
23390     uint32_t reserved1:16;
23391     uint32_t length:32; //  Weight stream byte length
23392 #ifdef __cplusplus
23393 public:
npu_set_weight2_length_tisa::npu_set_weight2_length_t23394     npu_set_weight2_length_t(uint32_t _length) :
23395         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_LENGTH)),
23396         reserved0(0),
23397         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23398         reserved1(0),
23399         length(_length)
23400     {}
npu_set_weight2_length_tisa::npu_set_weight2_length_t23401     CONSTEXPR npu_set_weight2_length_t() :
23402         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_LENGTH)),
23403         reserved0(0),
23404         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23405         reserved1(0),
23406         length(0)
23407     {}
validisa::npu_set_weight2_length_t23408     CONSTEXPR bool valid() const
23409     {
23410         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_LENGTH) && control >= 1 && control <= 2;
23411     }
initisa::npu_set_weight2_length_t23412     CONSTEXPR void init()
23413     {
23414         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT2_LENGTH); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23415     }
uint64_tisa::npu_set_weight2_length_t23416     operator uint64_t()
23417     {
23418         uint64_t word = 0;
23419         word |= uint64_t(opcode) << 0;
23420         word |= uint64_t(control) << 14;
23421         word |= uint64_t(length) << 32;
23422         return word;
23423     }
get_opcodeisa::npu_set_weight2_length_t23424     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23425     {
23426         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23427     }
set_opcodeisa::npu_set_weight2_length_t23428     CONSTEXPR npu_set_weight2_length_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23429     {
23430         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
23431         return *this;
23432     }
get_controlisa::npu_set_weight2_length_t23433     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23434     {
23435         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23436     }
set_controlisa::npu_set_weight2_length_t23437     CONSTEXPR npu_set_weight2_length_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
23438     {
23439         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
23440         return *this;
23441     }
get_lengthisa::npu_set_weight2_length_t23442     CONSTEXPR uint32_t get_length() const
23443     {
23444         return static_cast<uint32_t>(length);
23445     }
set_lengthisa::npu_set_weight2_length_t23446     CONSTEXPR npu_set_weight2_length_t& set_length(uint32_t value)
23447     {
23448         length = value;
23449         return *this;
23450     }
23451 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight2_length_t23452     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23453     {
23454         fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
23455     }
23456 #endif
23457 #endif
23458 };
23459 // Weight stream byte offset in WEIGHT_REGION for weight decoder 3
23460 struct npu_set_weight3_base_t
23461 {
23462 #ifdef __cplusplus
23463 private:
23464 #endif
23465     uint32_t opcode:10; //  opcode
23466     uint32_t reserved0:4;
23467     uint32_t control:2; //  control
23468     uint32_t addr_hi:8; //  address extension
23469     uint32_t reserved1:8;
23470     uint32_t addr_lo:32; //  address offset
23471 #ifdef __cplusplus
23472 public:
npu_set_weight3_base_tisa::npu_set_weight3_base_t23473     npu_set_weight3_base_t(uint64_t _addr) :
23474         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_BASE)),
23475         reserved0(0),
23476         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23477         addr_hi(static_cast<uint8_t>((_addr >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max()))),
23478         reserved1(0),
23479         addr_lo(static_cast<uint32_t>((_addr) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())))
23480     {}
npu_set_weight3_base_tisa::npu_set_weight3_base_t23481     CONSTEXPR npu_set_weight3_base_t() :
23482         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_BASE)),
23483         reserved0(0),
23484         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23485         addr_hi(0),
23486         reserved1(0),
23487         addr_lo(0)
23488     {}
validisa::npu_set_weight3_base_t23489     CONSTEXPR bool valid() const
23490     {
23491         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_BASE) && control >= 1 && control <= 2;
23492     }
initisa::npu_set_weight3_base_t23493     CONSTEXPR void init()
23494     {
23495         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_BASE); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23496     }
uint64_tisa::npu_set_weight3_base_t23497     operator uint64_t()
23498     {
23499         uint64_t word = 0;
23500         word |= uint64_t(opcode) << 0;
23501         word |= uint64_t(control) << 14;
23502         word |= uint64_t(addr_hi) << 16;
23503         word |= uint64_t(addr_lo) << 32;
23504         return word;
23505     }
get_addrisa::npu_set_weight3_base_t23506     CONSTEXPR uint64_t get_addr() const
23507     {
23508         return (static_cast<uint64_t>(addr_hi) << 32) | addr_lo;
23509     }
set_addrisa::npu_set_weight3_base_t23510     CONSTEXPR npu_set_weight3_base_t& set_addr(uint64_t value)
23511     {
23512         addr_lo = static_cast<uint32_t>((value) & static_cast<uint64_t>(std::numeric_limits<uint32_t>::max())); addr_hi = static_cast<uint8_t>((value >> 32) & static_cast<uint64_t>(std::numeric_limits<uint8_t>::max())); return *this;
23513     }
23514 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight3_base_t23515     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23516     {
23517         std::stringstream saddr; saddr << std::hex << "0x" << get_addr();
23518         fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23519     }
23520 #endif
23521 #endif
23522 };
23523 // Weight stream byte length for weight decoder 3
23524 struct npu_set_weight3_length_t
23525 {
23526 #ifdef __cplusplus
23527 private:
23528 #endif
23529     uint32_t opcode:10; //  opcode
23530     uint32_t reserved0:4;
23531     uint32_t control:2; //  control
23532     uint32_t reserved1:16;
23533     uint32_t length:32; //  Weight stream byte length
23534 #ifdef __cplusplus
23535 public:
npu_set_weight3_length_tisa::npu_set_weight3_length_t23536     npu_set_weight3_length_t(uint32_t _length) :
23537         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_LENGTH)),
23538         reserved0(0),
23539         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23540         reserved1(0),
23541         length(_length)
23542     {}
npu_set_weight3_length_tisa::npu_set_weight3_length_t23543     CONSTEXPR npu_set_weight3_length_t() :
23544         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_LENGTH)),
23545         reserved0(0),
23546         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23547         reserved1(0),
23548         length(0)
23549     {}
validisa::npu_set_weight3_length_t23550     CONSTEXPR bool valid() const
23551     {
23552         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_LENGTH) && control >= 1 && control <= 2;
23553     }
initisa::npu_set_weight3_length_t23554     CONSTEXPR void init()
23555     {
23556         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT3_LENGTH); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23557     }
uint64_tisa::npu_set_weight3_length_t23558     operator uint64_t()
23559     {
23560         uint64_t word = 0;
23561         word |= uint64_t(opcode) << 0;
23562         word |= uint64_t(control) << 14;
23563         word |= uint64_t(length) << 32;
23564         return word;
23565     }
get_opcodeisa::npu_set_weight3_length_t23566     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23567     {
23568         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23569     }
set_opcodeisa::npu_set_weight3_length_t23570     CONSTEXPR npu_set_weight3_length_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23571     {
23572         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
23573         return *this;
23574     }
get_controlisa::npu_set_weight3_length_t23575     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23576     {
23577         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23578     }
set_controlisa::npu_set_weight3_length_t23579     CONSTEXPR npu_set_weight3_length_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
23580     {
23581         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
23582         return *this;
23583     }
get_lengthisa::npu_set_weight3_length_t23584     CONSTEXPR uint32_t get_length() const
23585     {
23586         return static_cast<uint32_t>(length);
23587     }
set_lengthisa::npu_set_weight3_length_t23588     CONSTEXPR npu_set_weight3_length_t& set_length(uint32_t value)
23589     {
23590         length = value;
23591         return *this;
23592     }
23593 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_weight3_length_t23594     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23595     {
23596         fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
23597     }
23598 #endif
23599 #endif
23600 };
23601 // Resize X axis step parameters
23602 struct npu_set_resize_x_step_t
23603 {
23604 #ifdef __cplusplus
23605 private:
23606 #endif
23607     uint32_t opcode:10; //  opcode
23608     uint32_t reserved0:4;
23609     uint32_t control:2; //  control
23610     uint32_t one_step_int:4; //  (1*scale_d) / scale_n
23611     uint32_t blk_step_int:11; //  ((ofm_block_size-1)*scale_d) / scale_n
23612     uint32_t reserved1:1;
23613     uint32_t one_step_mod:11; //  (1*scale_d) % scale_n
23614     uint32_t reserved2:5;
23615     uint32_t blk_step_mod:11; //  ((ofm_block_size-1)*scale_d) % scale_n
23616     uint32_t reserved3:5;
23617 #ifdef __cplusplus
23618 public:
npu_set_resize_x_step_tisa::npu_set_resize_x_step_t23619     npu_set_resize_x_step_t(uint32_t _one_step_int, uint32_t _blk_step_int, uint32_t _one_step_mod, uint32_t _blk_step_mod) :
23620         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_X)),
23621         reserved0(0),
23622         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23623         one_step_int(_one_step_int & ((1U << 4)-1)),
23624         blk_step_int(_blk_step_int & ((1U << 11)-1)),
23625         reserved1(0),
23626         one_step_mod(_one_step_mod & ((1U << 11)-1)),
23627         reserved2(0),
23628         blk_step_mod(_blk_step_mod & ((1U << 11)-1)),
23629         reserved3(0)
23630     {}
npu_set_resize_x_step_tisa::npu_set_resize_x_step_t23631     CONSTEXPR npu_set_resize_x_step_t() :
23632         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_X)),
23633         reserved0(0),
23634         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23635         one_step_int(0),
23636         blk_step_int(0),
23637         reserved1(0),
23638         one_step_mod(0),
23639         reserved2(0),
23640         blk_step_mod(0),
23641         reserved3(0)
23642     {}
validisa::npu_set_resize_x_step_t23643     CONSTEXPR bool valid() const
23644     {
23645         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_X) && control >= 1 && control <= 2;
23646     }
initisa::npu_set_resize_x_step_t23647     CONSTEXPR void init()
23648     {
23649         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_X); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23650     }
uint64_tisa::npu_set_resize_x_step_t23651     operator uint64_t()
23652     {
23653         uint64_t word = 0;
23654         word |= uint64_t(opcode) << 0;
23655         word |= uint64_t(control) << 14;
23656         word |= uint64_t(one_step_int) << 16;
23657         word |= uint64_t(blk_step_int) << 20;
23658         word |= uint64_t(one_step_mod) << 32;
23659         word |= uint64_t(blk_step_mod) << 48;
23660         return word;
23661     }
get_opcodeisa::npu_set_resize_x_step_t23662     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23663     {
23664         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23665     }
set_opcodeisa::npu_set_resize_x_step_t23666     CONSTEXPR npu_set_resize_x_step_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23667     {
23668         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
23669         return *this;
23670     }
get_controlisa::npu_set_resize_x_step_t23671     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23672     {
23673         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23674     }
set_controlisa::npu_set_resize_x_step_t23675     CONSTEXPR npu_set_resize_x_step_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
23676     {
23677         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
23678         return *this;
23679     }
get_one_step_intisa::npu_set_resize_x_step_t23680     CONSTEXPR uint32_t get_one_step_int() const
23681     {
23682         return static_cast<uint32_t>(one_step_int);
23683     }
set_one_step_intisa::npu_set_resize_x_step_t23684     CONSTEXPR npu_set_resize_x_step_t& set_one_step_int(uint32_t value)
23685     {
23686         assert((value >> 4) == 0);
23687         one_step_int = static_cast<uint8_t>(value & ((1U << 4)-1));
23688         return *this;
23689     }
get_blk_step_intisa::npu_set_resize_x_step_t23690     CONSTEXPR uint32_t get_blk_step_int() const
23691     {
23692         return static_cast<uint32_t>(blk_step_int);
23693     }
set_blk_step_intisa::npu_set_resize_x_step_t23694     CONSTEXPR npu_set_resize_x_step_t& set_blk_step_int(uint32_t value)
23695     {
23696         assert((value >> 11) == 0);
23697         blk_step_int = static_cast<uint16_t>(value & ((1U << 11)-1));
23698         return *this;
23699     }
get_one_step_modisa::npu_set_resize_x_step_t23700     CONSTEXPR uint32_t get_one_step_mod() const
23701     {
23702         return static_cast<uint32_t>(one_step_mod);
23703     }
set_one_step_modisa::npu_set_resize_x_step_t23704     CONSTEXPR npu_set_resize_x_step_t& set_one_step_mod(uint32_t value)
23705     {
23706         assert((value >> 11) == 0);
23707         one_step_mod = static_cast<uint16_t>(value & ((1U << 11)-1));
23708         return *this;
23709     }
get_blk_step_modisa::npu_set_resize_x_step_t23710     CONSTEXPR uint32_t get_blk_step_mod() const
23711     {
23712         return static_cast<uint32_t>(blk_step_mod);
23713     }
set_blk_step_modisa::npu_set_resize_x_step_t23714     CONSTEXPR npu_set_resize_x_step_t& set_blk_step_mod(uint32_t value)
23715     {
23716         assert((value >> 11) == 0);
23717         blk_step_mod = static_cast<uint16_t>(value & ((1U << 11)-1));
23718         return *this;
23719     }
23720 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_resize_x_step_t23721     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23722     {
23723         fields.push_back(std::make_pair<std::string, std::string>("one_step_int", std::to_string(one_step_int)));
23724         fields.push_back(std::make_pair<std::string, std::string>("blk_step_int", std::to_string(blk_step_int)));
23725         fields.push_back(std::make_pair<std::string, std::string>("one_step_mod", std::to_string(one_step_mod)));
23726         fields.push_back(std::make_pair<std::string, std::string>("blk_step_mod", std::to_string(blk_step_mod)));
23727     }
23728 #endif
23729 #endif
23730 };
23731 // Resize Y axis step parameters
23732 struct npu_set_resize_y_step_t
23733 {
23734 #ifdef __cplusplus
23735 private:
23736 #endif
23737     uint32_t opcode:10; //  opcode
23738     uint32_t reserved0:4;
23739     uint32_t control:2; //  control
23740     uint32_t one_step_int:4; //  (1*scale_d) / scale_n
23741     uint32_t blk_step_int:11; //  ((ofm_block_size-1)*scale_d) / scale_n
23742     uint32_t reserved1:1;
23743     uint32_t one_step_mod:11; //  (1*scale_d) % scale_n
23744     uint32_t reserved2:5;
23745     uint32_t blk_step_mod:11; //  ((ofm_block_size-1)*scale_d) % scale_n
23746     uint32_t reserved3:5;
23747 #ifdef __cplusplus
23748 public:
npu_set_resize_y_step_tisa::npu_set_resize_y_step_t23749     npu_set_resize_y_step_t(uint32_t _one_step_int, uint32_t _blk_step_int, uint32_t _one_step_mod, uint32_t _blk_step_mod) :
23750         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_Y)),
23751         reserved0(0),
23752         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23753         one_step_int(_one_step_int & ((1U << 4)-1)),
23754         blk_step_int(_blk_step_int & ((1U << 11)-1)),
23755         reserved1(0),
23756         one_step_mod(_one_step_mod & ((1U << 11)-1)),
23757         reserved2(0),
23758         blk_step_mod(_blk_step_mod & ((1U << 11)-1)),
23759         reserved3(0)
23760     {}
npu_set_resize_y_step_tisa::npu_set_resize_y_step_t23761     CONSTEXPR npu_set_resize_y_step_t() :
23762         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_Y)),
23763         reserved0(0),
23764         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23765         one_step_int(0),
23766         blk_step_int(0),
23767         reserved1(0),
23768         one_step_mod(0),
23769         reserved2(0),
23770         blk_step_mod(0),
23771         reserved3(0)
23772     {}
validisa::npu_set_resize_y_step_t23773     CONSTEXPR bool valid() const
23774     {
23775         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_Y) && control >= 1 && control <= 2;
23776     }
initisa::npu_set_resize_y_step_t23777     CONSTEXPR void init()
23778     {
23779         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_RESIZE_Y); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23780     }
uint64_tisa::npu_set_resize_y_step_t23781     operator uint64_t()
23782     {
23783         uint64_t word = 0;
23784         word |= uint64_t(opcode) << 0;
23785         word |= uint64_t(control) << 14;
23786         word |= uint64_t(one_step_int) << 16;
23787         word |= uint64_t(blk_step_int) << 20;
23788         word |= uint64_t(one_step_mod) << 32;
23789         word |= uint64_t(blk_step_mod) << 48;
23790         return word;
23791     }
get_opcodeisa::npu_set_resize_y_step_t23792     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23793     {
23794         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23795     }
set_opcodeisa::npu_set_resize_y_step_t23796     CONSTEXPR npu_set_resize_y_step_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23797     {
23798         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
23799         return *this;
23800     }
get_controlisa::npu_set_resize_y_step_t23801     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23802     {
23803         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23804     }
set_controlisa::npu_set_resize_y_step_t23805     CONSTEXPR npu_set_resize_y_step_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
23806     {
23807         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
23808         return *this;
23809     }
get_one_step_intisa::npu_set_resize_y_step_t23810     CONSTEXPR uint32_t get_one_step_int() const
23811     {
23812         return static_cast<uint32_t>(one_step_int);
23813     }
set_one_step_intisa::npu_set_resize_y_step_t23814     CONSTEXPR npu_set_resize_y_step_t& set_one_step_int(uint32_t value)
23815     {
23816         assert((value >> 4) == 0);
23817         one_step_int = static_cast<uint8_t>(value & ((1U << 4)-1));
23818         return *this;
23819     }
get_blk_step_intisa::npu_set_resize_y_step_t23820     CONSTEXPR uint32_t get_blk_step_int() const
23821     {
23822         return static_cast<uint32_t>(blk_step_int);
23823     }
set_blk_step_intisa::npu_set_resize_y_step_t23824     CONSTEXPR npu_set_resize_y_step_t& set_blk_step_int(uint32_t value)
23825     {
23826         assert((value >> 11) == 0);
23827         blk_step_int = static_cast<uint16_t>(value & ((1U << 11)-1));
23828         return *this;
23829     }
get_one_step_modisa::npu_set_resize_y_step_t23830     CONSTEXPR uint32_t get_one_step_mod() const
23831     {
23832         return static_cast<uint32_t>(one_step_mod);
23833     }
set_one_step_modisa::npu_set_resize_y_step_t23834     CONSTEXPR npu_set_resize_y_step_t& set_one_step_mod(uint32_t value)
23835     {
23836         assert((value >> 11) == 0);
23837         one_step_mod = static_cast<uint16_t>(value & ((1U << 11)-1));
23838         return *this;
23839     }
get_blk_step_modisa::npu_set_resize_y_step_t23840     CONSTEXPR uint32_t get_blk_step_mod() const
23841     {
23842         return static_cast<uint32_t>(blk_step_mod);
23843     }
set_blk_step_modisa::npu_set_resize_y_step_t23844     CONSTEXPR npu_set_resize_y_step_t& set_blk_step_mod(uint32_t value)
23845     {
23846         assert((value >> 11) == 0);
23847         blk_step_mod = static_cast<uint16_t>(value & ((1U << 11)-1));
23848         return *this;
23849     }
23850 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_set_resize_y_step_t23851     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23852     {
23853         fields.push_back(std::make_pair<std::string, std::string>("one_step_int", std::to_string(one_step_int)));
23854         fields.push_back(std::make_pair<std::string, std::string>("blk_step_int", std::to_string(blk_step_int)));
23855         fields.push_back(std::make_pair<std::string, std::string>("one_step_mod", std::to_string(one_step_mod)));
23856         fields.push_back(std::make_pair<std::string, std::string>("blk_step_mod", std::to_string(blk_step_mod)));
23857     }
23858 #endif
23859 #endif
23860 };
23861 // Branch to new location
23862 struct npu_op_branch_t
23863 {
23864 #ifdef __cplusplus
23865 private:
23866 #endif
23867     uint32_t opcode:10; //  opcode
23868     uint32_t reserved0:4;
23869     uint32_t control:2; //  control
23870     uint32_t branch_cond:1; //  Branch condition
23871     uint32_t reserved1:15;
23872     uint32_t branch_target:32; //  Branch target in bytes
23873 #ifdef __cplusplus
23874 public:
npu_op_branch_tisa::npu_op_branch_t23875     npu_op_branch_t(NPU_NAMESPACE::branch_cond _branch_cond, uint32_t _branch_target) :
23876         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_OP_BRANCH)),
23877         reserved0(0),
23878         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23879         branch_cond(static_cast<uint8_t>(_branch_cond) & ((1U << 1)-1)),
23880         reserved1(0),
23881         branch_target(_branch_target)
23882     {}
npu_op_branch_tisa::npu_op_branch_t23883     CONSTEXPR npu_op_branch_t() :
23884         opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_OP_BRANCH)),
23885         reserved0(0),
23886         control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)),
23887         branch_cond(0),
23888         reserved1(0),
23889         branch_target(0)
23890     {}
validisa::npu_op_branch_t23891     CONSTEXPR bool valid() const
23892     {
23893         return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_OP_BRANCH) && control >= 1 && control <= 2;
23894     }
initisa::npu_op_branch_t23895     CONSTEXPR void init()
23896     {
23897         opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_OP_BRANCH); control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23898     }
uint64_tisa::npu_op_branch_t23899     operator uint64_t()
23900     {
23901         uint64_t word = 0;
23902         word |= uint64_t(opcode) << 0;
23903         word |= uint64_t(control) << 14;
23904         word |= uint64_t(branch_cond) << 16;
23905         word |= uint64_t(branch_target) << 32;
23906         return word;
23907     }
get_opcodeisa::npu_op_branch_t23908     CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23909     {
23910         return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23911     }
set_opcodeisa::npu_op_branch_t23912     CONSTEXPR npu_op_branch_t& set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23913     {
23914         opcode = static_cast<uint16_t>(value) & ((1U << 10)-1);
23915         return *this;
23916     }
get_controlisa::npu_op_branch_t23917     CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23918     {
23919         return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23920     }
set_controlisa::npu_op_branch_t23921     CONSTEXPR npu_op_branch_t& set_control(NPU_NAMESPACE::cmd_ctrl value)
23922     {
23923         control = static_cast<uint8_t>(value) & ((1U << 2)-1);
23924         return *this;
23925     }
get_branch_condisa::npu_op_branch_t23926     CONSTEXPR NPU_NAMESPACE::branch_cond get_branch_cond() const
23927     {
23928         return static_cast<NPU_NAMESPACE::branch_cond>(branch_cond);
23929     }
set_branch_condisa::npu_op_branch_t23930     CONSTEXPR npu_op_branch_t& set_branch_cond(NPU_NAMESPACE::branch_cond value)
23931     {
23932         branch_cond = static_cast<uint8_t>(value) & ((1U << 1)-1);
23933         return *this;
23934     }
get_branch_targetisa::npu_op_branch_t23935     CONSTEXPR uint32_t get_branch_target() const
23936     {
23937         return static_cast<uint32_t>(branch_target);
23938     }
set_branch_targetisa::npu_op_branch_t23939     CONSTEXPR npu_op_branch_t& set_branch_target(uint32_t value)
23940     {
23941         branch_target = value;
23942         return *this;
23943     }
23944 #ifdef NPU_DISASSEMBLE
disassembleisa::npu_op_branch_t23945     void disassemble(std::vector<std::pair<std::string, std::string>>& fields) const
23946     {
23947         fields.push_back(std::make_pair<std::string, std::string>("branch_cond", (branch_cond < (sizeof(branch_cond_str)/sizeof(branch_cond_str[0])) ? branch_cond_str[branch_cond] : "****")));
23948         fields.push_back(std::make_pair<std::string, std::string>("branch_target", std::to_string(branch_target)));
23949     }
23950 #endif
23951 #endif
23952 };
23953 #ifdef __cplusplus
23954 };
23955 #endif
23956 #define NPU_OP_STRUCTS \
23957     NPU_OP_(stop) \
23958     NPU_OP_(irq) \
23959     NPU_OP_(conv) \
23960     NPU_OP_(depthwise) \
23961     NPU_OP_(pool) \
23962     NPU_OP_(elementwise) \
23963     NPU_OP_(resize) \
23964     NPU_OP_(dma_start) \
23965     NPU_OP_(dma_wait) \
23966     NPU_OP_(kernel_wait) \
23967     NPU_OP_(pmu_mask) \
23968     NPU_OP_(branch)
23969 
23970 #define NPU_SET_STRUCTS \
23971     NPU_SET_(ifm_pad_top) \
23972     NPU_SET_(ifm_pad_left) \
23973     NPU_SET_(ifm_pad_right) \
23974     NPU_SET_(ifm_pad_bottom) \
23975     NPU_SET_(ifm_depth_m1) \
23976     NPU_SET_(ifm_precision) \
23977     NPU_SET_(ifm_upscale) \
23978     NPU_SET_(ifm_zero_point) \
23979     NPU_SET_(ifm_width0_m1) \
23980     NPU_SET_(ifm_height0_m1) \
23981     NPU_SET_(ifm_height1_m1) \
23982     NPU_SET_(ifm_region) \
23983     NPU_SET_(ifm_broadcast) \
23984     NPU_SET_(ofm_width_m1) \
23985     NPU_SET_(ofm_height_m1) \
23986     NPU_SET_(ofm_depth_m1) \
23987     NPU_SET_(ofm_precision) \
23988     NPU_SET_(ofm_blk_width_m1) \
23989     NPU_SET_(ofm_blk_height_m1) \
23990     NPU_SET_(ofm_blk_depth_m1) \
23991     NPU_SET_(ofm_zero_point) \
23992     NPU_SET_(ofm_width0_m1) \
23993     NPU_SET_(ofm_height0_m1) \
23994     NPU_SET_(ofm_height1_m1) \
23995     NPU_SET_(ofm_region) \
23996     NPU_SET_(kernel_width_m1) \
23997     NPU_SET_(kernel_height_m1) \
23998     NPU_SET_(kernel_stride) \
23999     NPU_SET_(acc_format) \
24000     NPU_SET_(activation) \
24001     NPU_SET_(activation_min) \
24002     NPU_SET_(activation_max) \
24003     NPU_SET_(weight_region) \
24004     NPU_SET_(scale_region) \
24005     NPU_SET_(weight_format) \
24006     NPU_SET_(blockdep) \
24007     NPU_SET_(resize_x_scale_n_m1) \
24008     NPU_SET_(resize_y_scale_n_m1) \
24009     NPU_SET_(resize_x_offset) \
24010     NPU_SET_(resize_y_offset) \
24011     NPU_SET_(dma0_src_region) \
24012     NPU_SET_(dma0_dst_region) \
24013     NPU_SET_(dma0_size0) \
24014     NPU_SET_(dma0_size1) \
24015     NPU_SET_(dma0_idx_region) \
24016     NPU_SET_(ifm2_broadcast) \
24017     NPU_SET_(ifm2_precision) \
24018     NPU_SET_(ifm2_zero_point) \
24019     NPU_SET_(ifm2_width0_m1) \
24020     NPU_SET_(ifm2_height0_m1) \
24021     NPU_SET_(ifm2_height1_m1) \
24022     NPU_SET_(ifm2_region) \
24023     NPU_SET_(ifm_base0) \
24024     NPU_SET_(ifm_base1) \
24025     NPU_SET_(ifm_base2) \
24026     NPU_SET_(ifm_base3) \
24027     NPU_SET_(ifm_stride_x) \
24028     NPU_SET_(ifm_stride_y) \
24029     NPU_SET_(ifm_stride_c) \
24030     NPU_SET_(ofm_base0) \
24031     NPU_SET_(ofm_base1) \
24032     NPU_SET_(ofm_base2) \
24033     NPU_SET_(ofm_base3) \
24034     NPU_SET_(ofm_stride_x) \
24035     NPU_SET_(ofm_stride_y) \
24036     NPU_SET_(ofm_stride_c) \
24037     NPU_SET_(weight_base) \
24038     NPU_SET_(weight_length) \
24039     NPU_SET_(scale_base) \
24040     NPU_SET_(scale_length) \
24041     NPU_SET_(ofm_scale) \
24042     NPU_SET_(ifm_scale) \
24043     NPU_SET_(ifm2_scale) \
24044     NPU_SET_(op_scalar) \
24045     NPU_SET_(dma0_src) \
24046     NPU_SET_(dma0_dst) \
24047     NPU_SET_(dma0_len) \
24048     NPU_SET_(dma0_src_stride0) \
24049     NPU_SET_(dma0_src_stride1) \
24050     NPU_SET_(dma0_dst_stride0) \
24051     NPU_SET_(dma0_dst_stride1) \
24052     NPU_SET_(dma0_idx) \
24053     NPU_SET_(dma0_idx_max) \
24054     NPU_SET_(dma0_idx_skip1) \
24055     NPU_SET_(ifm2_base0) \
24056     NPU_SET_(ifm2_base1) \
24057     NPU_SET_(ifm2_base2) \
24058     NPU_SET_(ifm2_base3) \
24059     NPU_SET_(ifm2_stride_x) \
24060     NPU_SET_(ifm2_stride_y) \
24061     NPU_SET_(ifm2_stride_c) \
24062     NPU_SET_(weight1_base) \
24063     NPU_SET_(weight1_length) \
24064     NPU_SET_(weight2_base) \
24065     NPU_SET_(weight2_length) \
24066     NPU_SET_(weight3_base) \
24067     NPU_SET_(weight3_length) \
24068     NPU_SET_(resize_x_step) \
24069     NPU_SET_(resize_y_step)
24070 
24071 #define EXPAND_ACC_FORMAT(FUNC, SEP) \
24072     FUNC(acc_format, I32) SEP \
24073     FUNC(acc_format, I48)
24074 
24075 #define EXPAND_ACC_INPUT(FUNC, SEP) \
24076     FUNC(acc_input, RESET) SEP \
24077     FUNC(acc_input, KEEP) SEP \
24078     FUNC(acc_input, IFM2)
24079 
24080 #define EXPAND_ACC_OUTPUT(FUNC, SEP) \
24081     FUNC(acc_output, ENABLE) SEP \
24082     FUNC(acc_output, DISABLE)
24083 
24084 #define EXPAND_ACTIVATION_CLIP_RANGE(FUNC, SEP) \
24085     FUNC(activation_clip_range, B16) SEP \
24086     FUNC(activation_clip_range, NONE)
24087 
24088 #define EXPAND_ACTIVATION_FORMAT(FUNC, SEP) \
24089     FUNC(activation_format, NHWC) SEP \
24090     FUNC(activation_format, NHCWB16)
24091 
24092 #define EXPAND_ACTIVATION_FUNCTION(FUNC, SEP) \
24093     FUNC(activation_function, LUT_NONE) SEP \
24094     FUNC(activation_function, LUT_U8_U8) SEP \
24095     FUNC(activation_function, LUT_S8_S8) SEP \
24096     FUNC(activation_function, LUT_S8_S16) SEP \
24097     FUNC(activation_function, LUT_S8_S32) SEP \
24098     FUNC(activation_function, LUT_S16_S16) SEP \
24099     FUNC(activation_function, LUT_S16_S32) SEP \
24100     FUNC(activation_function, LUT_TANH) SEP \
24101     FUNC(activation_function, LUT_SIGMOID)
24102 
24103 #define EXPAND_ACTIVATION_PRECISION(FUNC, SEP) \
24104     FUNC(activation_precision, B8) SEP \
24105     FUNC(activation_precision, B16) SEP \
24106     FUNC(activation_precision, B32) SEP \
24107     FUNC(activation_precision, B64)
24108 
24109 #define EXPAND_ACTIVATION_REVERSE(FUNC, SEP) \
24110     FUNC(activation_reverse, NONE) SEP \
24111     FUNC(activation_reverse, H) SEP \
24112     FUNC(activation_reverse, W) SEP \
24113     FUNC(activation_reverse, C)
24114 
24115 #define EXPAND_ACTIVATION_STORAGE(FUNC, SEP) \
24116     FUNC(activation_storage, TILE2X2) SEP \
24117     FUNC(activation_storage, TILE3X1) SEP \
24118     FUNC(activation_storage, CHAINED) SEP \
24119     FUNC(activation_storage, NONE)
24120 
24121 #define EXPAND_ACTIVATION_TRANSPOSE(FUNC, SEP) \
24122     FUNC(activation_transpose, HWC) SEP \
24123     FUNC(activation_transpose, WHC) SEP \
24124     FUNC(activation_transpose, HCW) SEP \
24125     FUNC(activation_transpose, WCH) SEP \
24126     FUNC(activation_transpose, CHW) SEP \
24127     FUNC(activation_transpose, CWH)
24128 
24129 #define EXPAND_ACTIVATION_TYPE(FUNC, SEP) \
24130     FUNC(activation_type, UNSIGNED) SEP \
24131     FUNC(activation_type, SIGNED)
24132 
24133 #define EXPAND_AXI_MEM_DOMAIN(FUNC, SEP) \
24134     FUNC(axi_mem_domain, NON_SHARABLE) SEP \
24135     FUNC(axi_mem_domain, INNER_SHARABLE) SEP \
24136     FUNC(axi_mem_domain, OUTER_SHARABLE) SEP \
24137     FUNC(axi_mem_domain, SYSTEM)
24138 
24139 #define EXPAND_AXI_MEM_ENCODING(FUNC, SEP) \
24140     FUNC(axi_mem_encoding, DEVICE_NON_BUFFERABLE) SEP \
24141     FUNC(axi_mem_encoding, DEVICE_BUFFERABLE) SEP \
24142     FUNC(axi_mem_encoding, NORMAL_NON_CACHEABLE_NON_BUFFERABLE) SEP \
24143     FUNC(axi_mem_encoding, NORMAL_NON_CACHEABLE_BUFFERABLE) SEP \
24144     FUNC(axi_mem_encoding, WRITE_THROUGH_NO_ALLOCATE) SEP \
24145     FUNC(axi_mem_encoding, WRITE_THROUGH_READ_ALLOCATE) SEP \
24146     FUNC(axi_mem_encoding, WRITE_THROUGH_WRITE_ALLOCATE) SEP \
24147     FUNC(axi_mem_encoding, WRITE_THROUGH_READ_AND_WRITE_ALLOCATE) SEP \
24148     FUNC(axi_mem_encoding, WRITE_BACK_NO_ALLOCATE) SEP \
24149     FUNC(axi_mem_encoding, WRITE_BACK_READ_ALLOCATE) SEP \
24150     FUNC(axi_mem_encoding, WRITE_BACK_WRITE_ALLOCATE) SEP \
24151     FUNC(axi_mem_encoding, WRITE_BACK_READ_AND_WRITE_ALLOCATE)
24152 
24153 #define EXPAND_AXI_PORT(FUNC, SEP) \
24154     FUNC(axi_port, SRAM) SEP \
24155     FUNC(axi_port, EXT)
24156 
24157 #define EXPAND_BRANCH_COND(FUNC, SEP) \
24158     FUNC(branch_cond, ALWAYS) SEP \
24159     FUNC(branch_cond, RF_TRUE)
24160 
24161 #define EXPAND_BROADCAST_MODE(FUNC, SEP) \
24162     FUNC(broadcast_mode, NONE) SEP \
24163     FUNC(broadcast_mode, H) SEP \
24164     FUNC(broadcast_mode, W) SEP \
24165     FUNC(broadcast_mode, HW) SEP \
24166     FUNC(broadcast_mode, C) SEP \
24167     FUNC(broadcast_mode, CH) SEP \
24168     FUNC(broadcast_mode, CW) SEP \
24169     FUNC(broadcast_mode, CWH) SEP \
24170     FUNC(broadcast_mode, SCALAR)
24171 
24172 #define EXPAND_CMD0_OPCODE(FUNC, SEP) \
24173     FUNC(cmd0_opcode, NPU_OP_STOP) SEP \
24174     FUNC(cmd0_opcode, NPU_OP_IRQ) SEP \
24175     FUNC(cmd0_opcode, NPU_OP_CONV) SEP \
24176     FUNC(cmd0_opcode, NPU_OP_DEPTHWISE) SEP \
24177     FUNC(cmd0_opcode, NPU_OP_POOL) SEP \
24178     FUNC(cmd0_opcode, NPU_OP_ELEMENTWISE) SEP \
24179     FUNC(cmd0_opcode, NPU_OP_RESIZE) SEP \
24180     FUNC(cmd0_opcode, NPU_OP_DMA_START) SEP \
24181     FUNC(cmd0_opcode, NPU_OP_DMA_WAIT) SEP \
24182     FUNC(cmd0_opcode, NPU_OP_KERNEL_WAIT) SEP \
24183     FUNC(cmd0_opcode, NPU_OP_PMU_MASK) SEP \
24184     FUNC(cmd0_opcode, NPU_SET_IFM_PAD_TOP) SEP \
24185     FUNC(cmd0_opcode, NPU_SET_IFM_PAD_LEFT) SEP \
24186     FUNC(cmd0_opcode, NPU_SET_IFM_PAD_RIGHT) SEP \
24187     FUNC(cmd0_opcode, NPU_SET_IFM_PAD_BOTTOM) SEP \
24188     FUNC(cmd0_opcode, NPU_SET_IFM_DEPTH_M1) SEP \
24189     FUNC(cmd0_opcode, NPU_SET_IFM_PRECISION) SEP \
24190     FUNC(cmd0_opcode, NPU_SET_IFM_UPSCALE) SEP \
24191     FUNC(cmd0_opcode, NPU_SET_IFM_BROADCAST) SEP \
24192     FUNC(cmd0_opcode, NPU_SET_IFM_ZERO_POINT) SEP \
24193     FUNC(cmd0_opcode, NPU_SET_IFM_WIDTH0_M1) SEP \
24194     FUNC(cmd0_opcode, NPU_SET_IFM_HEIGHT0_M1) SEP \
24195     FUNC(cmd0_opcode, NPU_SET_IFM_HEIGHT1_M1) SEP \
24196     FUNC(cmd0_opcode, NPU_SET_IFM_REGION) SEP \
24197     FUNC(cmd0_opcode, NPU_SET_OFM_WIDTH_M1) SEP \
24198     FUNC(cmd0_opcode, NPU_SET_OFM_HEIGHT_M1) SEP \
24199     FUNC(cmd0_opcode, NPU_SET_OFM_DEPTH_M1) SEP \
24200     FUNC(cmd0_opcode, NPU_SET_OFM_PRECISION) SEP \
24201     FUNC(cmd0_opcode, NPU_SET_OFM_BLK_WIDTH_M1) SEP \
24202     FUNC(cmd0_opcode, NPU_SET_OFM_BLK_HEIGHT_M1) SEP \
24203     FUNC(cmd0_opcode, NPU_SET_OFM_BLK_DEPTH_M1) SEP \
24204     FUNC(cmd0_opcode, NPU_SET_OFM_ZERO_POINT) SEP \
24205     FUNC(cmd0_opcode, NPU_SET_OFM_WIDTH0_M1) SEP \
24206     FUNC(cmd0_opcode, NPU_SET_OFM_HEIGHT0_M1) SEP \
24207     FUNC(cmd0_opcode, NPU_SET_OFM_HEIGHT1_M1) SEP \
24208     FUNC(cmd0_opcode, NPU_SET_OFM_REGION) SEP \
24209     FUNC(cmd0_opcode, NPU_SET_KERNEL_WIDTH_M1) SEP \
24210     FUNC(cmd0_opcode, NPU_SET_KERNEL_HEIGHT_M1) SEP \
24211     FUNC(cmd0_opcode, NPU_SET_KERNEL_STRIDE) SEP \
24212     FUNC(cmd0_opcode, NPU_SET_ACC_FORMAT) SEP \
24213     FUNC(cmd0_opcode, NPU_SET_ACTIVATION) SEP \
24214     FUNC(cmd0_opcode, NPU_SET_ACTIVATION_MIN) SEP \
24215     FUNC(cmd0_opcode, NPU_SET_ACTIVATION_MAX) SEP \
24216     FUNC(cmd0_opcode, NPU_SET_WEIGHT_REGION) SEP \
24217     FUNC(cmd0_opcode, NPU_SET_SCALE_REGION) SEP \
24218     FUNC(cmd0_opcode, NPU_SET_RESIZE_X_SCALE_N_M1) SEP \
24219     FUNC(cmd0_opcode, NPU_SET_RESIZE_Y_SCALE_N_M1) SEP \
24220     FUNC(cmd0_opcode, NPU_SET_RESIZE_X_OFFSET) SEP \
24221     FUNC(cmd0_opcode, NPU_SET_RESIZE_Y_OFFSET) SEP \
24222     FUNC(cmd0_opcode, NPU_SET_WEIGHT_FORMAT) SEP \
24223     FUNC(cmd0_opcode, NPU_SET_BLOCKDEP) SEP \
24224     FUNC(cmd0_opcode, NPU_SET_DMA0_SRC_REGION) SEP \
24225     FUNC(cmd0_opcode, NPU_SET_DMA0_DST_REGION) SEP \
24226     FUNC(cmd0_opcode, NPU_SET_DMA0_SIZE0) SEP \
24227     FUNC(cmd0_opcode, NPU_SET_DMA0_SIZE1) SEP \
24228     FUNC(cmd0_opcode, NPU_SET_DMA0_IDX_REGION) SEP \
24229     FUNC(cmd0_opcode, NPU_SET_IFM2_BROADCAST) SEP \
24230     FUNC(cmd0_opcode, NPU_SET_IFM2_PRECISION) SEP \
24231     FUNC(cmd0_opcode, NPU_SET_IFM2_ZERO_POINT) SEP \
24232     FUNC(cmd0_opcode, NPU_SET_IFM2_WIDTH0_M1) SEP \
24233     FUNC(cmd0_opcode, NPU_SET_IFM2_HEIGHT0_M1) SEP \
24234     FUNC(cmd0_opcode, NPU_SET_IFM2_HEIGHT1_M1) SEP \
24235     FUNC(cmd0_opcode, NPU_SET_IFM2_REGION)
24236 
24237 #define EXPAND_CMD1_OPCODE(FUNC, SEP) \
24238     FUNC(cmd1_opcode, NPU_SET_IFM_BASE0) SEP \
24239     FUNC(cmd1_opcode, NPU_SET_IFM_BASE1) SEP \
24240     FUNC(cmd1_opcode, NPU_SET_IFM_BASE2) SEP \
24241     FUNC(cmd1_opcode, NPU_SET_IFM_BASE3) SEP \
24242     FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_X) SEP \
24243     FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_Y) SEP \
24244     FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_C) SEP \
24245     FUNC(cmd1_opcode, NPU_SET_OFM_BASE0) SEP \
24246     FUNC(cmd1_opcode, NPU_SET_OFM_BASE1) SEP \
24247     FUNC(cmd1_opcode, NPU_SET_OFM_BASE2) SEP \
24248     FUNC(cmd1_opcode, NPU_SET_OFM_BASE3) SEP \
24249     FUNC(cmd1_opcode, NPU_SET_OFM_STRIDE_X) SEP \
24250     FUNC(cmd1_opcode, NPU_SET_OFM_STRIDE_Y) SEP \
24251     FUNC(cmd1_opcode, NPU_SET_OFM_STRIDE_C) SEP \
24252     FUNC(cmd1_opcode, NPU_SET_WEIGHT_BASE) SEP \
24253     FUNC(cmd1_opcode, NPU_SET_WEIGHT_LENGTH) SEP \
24254     FUNC(cmd1_opcode, NPU_SET_SCALE_BASE) SEP \
24255     FUNC(cmd1_opcode, NPU_SET_SCALE_LENGTH) SEP \
24256     FUNC(cmd1_opcode, NPU_SET_OFM_SCALE) SEP \
24257     FUNC(cmd1_opcode, NPU_SET_IFM_SCALE) SEP \
24258     FUNC(cmd1_opcode, NPU_SET_IFM2_SCALE) SEP \
24259     FUNC(cmd1_opcode, NPU_SET_OP_SCALAR) SEP \
24260     FUNC(cmd1_opcode, NPU_SET_DMA0_SRC) SEP \
24261     FUNC(cmd1_opcode, NPU_SET_DMA0_DST) SEP \
24262     FUNC(cmd1_opcode, NPU_SET_DMA0_LEN) SEP \
24263     FUNC(cmd1_opcode, NPU_SET_DMA0_SRC_STRIDE0) SEP \
24264     FUNC(cmd1_opcode, NPU_SET_DMA0_SRC_STRIDE1) SEP \
24265     FUNC(cmd1_opcode, NPU_SET_DMA0_DST_STRIDE0) SEP \
24266     FUNC(cmd1_opcode, NPU_SET_DMA0_DST_STRIDE1) SEP \
24267     FUNC(cmd1_opcode, NPU_SET_DMA0_IDX) SEP \
24268     FUNC(cmd1_opcode, NPU_SET_DMA0_IDX_MAX) SEP \
24269     FUNC(cmd1_opcode, NPU_SET_DMA0_IDX_SKIP1) SEP \
24270     FUNC(cmd1_opcode, NPU_SET_IFM2_BASE0) SEP \
24271     FUNC(cmd1_opcode, NPU_SET_IFM2_BASE1) SEP \
24272     FUNC(cmd1_opcode, NPU_SET_IFM2_BASE2) SEP \
24273     FUNC(cmd1_opcode, NPU_SET_IFM2_BASE3) SEP \
24274     FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_X) SEP \
24275     FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_Y) SEP \
24276     FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_C) SEP \
24277     FUNC(cmd1_opcode, NPU_SET_WEIGHT1_BASE) SEP \
24278     FUNC(cmd1_opcode, NPU_SET_WEIGHT1_LENGTH) SEP \
24279     FUNC(cmd1_opcode, NPU_SET_WEIGHT2_BASE) SEP \
24280     FUNC(cmd1_opcode, NPU_SET_WEIGHT2_LENGTH) SEP \
24281     FUNC(cmd1_opcode, NPU_SET_WEIGHT3_BASE) SEP \
24282     FUNC(cmd1_opcode, NPU_SET_WEIGHT3_LENGTH) SEP \
24283     FUNC(cmd1_opcode, NPU_SET_RESIZE_X) SEP \
24284     FUNC(cmd1_opcode, NPU_SET_RESIZE_Y) SEP \
24285     FUNC(cmd1_opcode, NPU_OP_BRANCH)
24286 
24287 #define EXPAND_CMD_CTRL(FUNC, SEP) \
24288     FUNC(cmd_ctrl, CMD0_CTRL) SEP \
24289     FUNC(cmd_ctrl, CMD1_CTRL)
24290 
24291 #define EXPAND_CUSTOM_DMA(FUNC, SEP) \
24292     FUNC(custom_dma, NOT_IMPLEMENTED) SEP \
24293     FUNC(custom_dma, IMPLEMENTED)
24294 
24295 #define EXPAND_DMA_FAULT_SRC(FUNC, SEP) \
24296     FUNC(dma_fault_src, SRAM) SEP \
24297     FUNC(dma_fault_src, EXT)
24298 
24299 #define EXPAND_DMA_IDX_MODE(FUNC, SEP) \
24300     FUNC(dma_idx_mode, DISABLED) SEP \
24301     FUNC(dma_idx_mode, ENABLED)
24302 
24303 #define EXPAND_DMA_REGION_MODE(FUNC, SEP) \
24304     FUNC(dma_region_mode, EXTERNAL) SEP \
24305     FUNC(dma_region_mode, INTERNAL)
24306 
24307 #define EXPAND_DMA_STRIDE_MODE(FUNC, SEP) \
24308     FUNC(dma_stride_mode, D1) SEP \
24309     FUNC(dma_stride_mode, D2) SEP \
24310     FUNC(dma_stride_mode, D3)
24311 
24312 #define EXPAND_ELEMENTWISE_MODE(FUNC, SEP) \
24313     FUNC(elementwise_mode, MUL) SEP \
24314     FUNC(elementwise_mode, ADD) SEP \
24315     FUNC(elementwise_mode, SUB) SEP \
24316     FUNC(elementwise_mode, MIN) SEP \
24317     FUNC(elementwise_mode, MAX) SEP \
24318     FUNC(elementwise_mode, LRELU) SEP \
24319     FUNC(elementwise_mode, ABS) SEP \
24320     FUNC(elementwise_mode, CLZ) SEP \
24321     FUNC(elementwise_mode, SHR) SEP \
24322     FUNC(elementwise_mode, SHL) SEP \
24323     FUNC(elementwise_mode, LSR) SEP \
24324     FUNC(elementwise_mode, DIV) SEP \
24325     FUNC(elementwise_mode, CMP_EQ) SEP \
24326     FUNC(elementwise_mode, CMP_NE) SEP \
24327     FUNC(elementwise_mode, CMP_GE) SEP \
24328     FUNC(elementwise_mode, CMP_GT) SEP \
24329     FUNC(elementwise_mode, AND) SEP \
24330     FUNC(elementwise_mode, OR) SEP \
24331     FUNC(elementwise_mode, XOR) SEP \
24332     FUNC(elementwise_mode, NOT) SEP \
24333     FUNC(elementwise_mode, AND_NOT)
24334 
24335 #define EXPAND_IFM_UPSCALE_MODE(FUNC, SEP) \
24336     FUNC(ifm_upscale_mode, NONE) SEP \
24337     FUNC(ifm_upscale_mode, NEAREST) SEP \
24338     FUNC(ifm_upscale_mode, ZEROS)
24339 
24340 #define EXPAND_KERNEL_DECOMPOSITION(FUNC, SEP) \
24341     FUNC(kernel_decomposition, D8X8) SEP \
24342     FUNC(kernel_decomposition, D4X4)
24343 
24344 #define EXPAND_KERNEL_DILATION(FUNC, SEP) \
24345     FUNC(kernel_dilation, NONE) SEP \
24346     FUNC(kernel_dilation, X2)
24347 
24348 #define EXPAND_MAX_BEATS(FUNC, SEP) \
24349     FUNC(max_beats, B64) SEP \
24350     FUNC(max_beats, B128) SEP \
24351     FUNC(max_beats, B256)
24352 
24353 #define EXPAND_MICROBLOCK(FUNC, SEP) \
24354     FUNC(microblock, U1X1) SEP \
24355     FUNC(microblock, U1X2) SEP \
24356     FUNC(microblock, U1X4) SEP \
24357     FUNC(microblock, U2X2) SEP \
24358     FUNC(microblock, U2X4) SEP \
24359     FUNC(microblock, U4X4)
24360 
24361 #define EXPAND_OFM_SCALE_MODE(FUNC, SEP) \
24362     FUNC(ofm_scale_mode, PER_CHANNEL) SEP \
24363     FUNC(ofm_scale_mode, GLOBAL)
24364 
24365 #define EXPAND_PMU_AXI_CHANNEL(FUNC, SEP) \
24366     FUNC(pmu_axi_channel, RD_CMD) SEP \
24367     FUNC(pmu_axi_channel, RD_IFM) SEP \
24368     FUNC(pmu_axi_channel, RD_WEIGHTS) SEP \
24369     FUNC(pmu_axi_channel, RD_SCALE_BIAS) SEP \
24370     FUNC(pmu_axi_channel, RD_MEM2MEM) SEP \
24371     FUNC(pmu_axi_channel, RD_IFM_STREAM) SEP \
24372     FUNC(pmu_axi_channel, RD_MEM2MEM_IDX) SEP \
24373     FUNC(pmu_axi_channel, WR_OFM) SEP \
24374     FUNC(pmu_axi_channel, WR_MEM2MEM)
24375 
24376 #define EXPAND_PMU_EVENT(FUNC, SEP) \
24377     FUNC(pmu_event, NO_EVENT) SEP \
24378     FUNC(pmu_event, CYCLE) SEP \
24379     FUNC(pmu_event, NPU_IDLE) SEP \
24380     FUNC(pmu_event, CC_STALLED_ON_BLOCKDEP) SEP \
24381     FUNC(pmu_event, NPU_ACTIVE) SEP \
24382     FUNC(pmu_event, MAC_ACTIVE) SEP \
24383     FUNC(pmu_event, MAC_DPU_ACTIVE) SEP \
24384     FUNC(pmu_event, MAC_STALLED_BY_W_OR_ACC) SEP \
24385     FUNC(pmu_event, MAC_STALLED_BY_W) SEP \
24386     FUNC(pmu_event, MAC_STALLED_BY_ACC) SEP \
24387     FUNC(pmu_event, MAC_STALLED_BY_IB) SEP \
24388     FUNC(pmu_event, AO_ACTIVE) SEP \
24389     FUNC(pmu_event, AO_STALLED_BY_BS_OR_OB) SEP \
24390     FUNC(pmu_event, AO_STALLED_BY_BS) SEP \
24391     FUNC(pmu_event, AO_STALLED_BY_OB) SEP \
24392     FUNC(pmu_event, AO_STALLED_BY_AB_OR_CB) SEP \
24393     FUNC(pmu_event, AO_STALLED_BY_AB) SEP \
24394     FUNC(pmu_event, AO_STALLED_BY_CB) SEP \
24395     FUNC(pmu_event, WD_ACTIVE) SEP \
24396     FUNC(pmu_event, WD_STALLED) SEP \
24397     FUNC(pmu_event, WD_STALLED_BY_WD_BUF) SEP \
24398     FUNC(pmu_event, WD_STALLED_BY_WS_FC) SEP \
24399     FUNC(pmu_event, WD_STALLED_BY_WS_TC) SEP \
24400     FUNC(pmu_event, WD_TRANS_WBLK) SEP \
24401     FUNC(pmu_event, WD_TRANS_WS_FC) SEP \
24402     FUNC(pmu_event, WD_TRANS_WS_TC) SEP \
24403     FUNC(pmu_event, WD_STALLED_BY_WS_SC0) SEP \
24404     FUNC(pmu_event, WD_STALLED_BY_WS_SC1) SEP \
24405     FUNC(pmu_event, WD_STALLED_BY_WS_SC2) SEP \
24406     FUNC(pmu_event, WD_STALLED_BY_WS_SC3) SEP \
24407     FUNC(pmu_event, WD_PARSE_ACTIVE_SC0) SEP \
24408     FUNC(pmu_event, WD_PARSE_ACTIVE_SC1) SEP \
24409     FUNC(pmu_event, WD_PARSE_ACTIVE_SC2) SEP \
24410     FUNC(pmu_event, WD_PARSE_ACTIVE_SC3) SEP \
24411     FUNC(pmu_event, WD_PARSE_STALL_SC0) SEP \
24412     FUNC(pmu_event, WD_PARSE_STALL_SC1) SEP \
24413     FUNC(pmu_event, WD_PARSE_STALL_SC2) SEP \
24414     FUNC(pmu_event, WD_PARSE_STALL_SC3) SEP \
24415     FUNC(pmu_event, WD_PARSE_STALL_IN_SC0) SEP \
24416     FUNC(pmu_event, WD_PARSE_STALL_IN_SC1) SEP \
24417     FUNC(pmu_event, WD_PARSE_STALL_IN_SC2) SEP \
24418     FUNC(pmu_event, WD_PARSE_STALL_IN_SC3) SEP \
24419     FUNC(pmu_event, WD_PARSE_STALL_OUT_SC0) SEP \
24420     FUNC(pmu_event, WD_PARSE_STALL_OUT_SC1) SEP \
24421     FUNC(pmu_event, WD_PARSE_STALL_OUT_SC2) SEP \
24422     FUNC(pmu_event, WD_PARSE_STALL_OUT_SC3) SEP \
24423     FUNC(pmu_event, WD_TRANS_WS_SC0) SEP \
24424     FUNC(pmu_event, WD_TRANS_WS_SC1) SEP \
24425     FUNC(pmu_event, WD_TRANS_WS_SC2) SEP \
24426     FUNC(pmu_event, WD_TRANS_WS_SC3) SEP \
24427     FUNC(pmu_event, WD_TRANS_WB0) SEP \
24428     FUNC(pmu_event, WD_TRANS_WB1) SEP \
24429     FUNC(pmu_event, WD_TRANS_WB2) SEP \
24430     FUNC(pmu_event, WD_TRANS_WB3) SEP \
24431     FUNC(pmu_event, SRAM_RD_TRANS_ACCEPTED) SEP \
24432     FUNC(pmu_event, SRAM_RD_TRANS_COMPLETED) SEP \
24433     FUNC(pmu_event, SRAM_RD_DATA_BEAT_RECEIVED) SEP \
24434     FUNC(pmu_event, SRAM_RD_TRAN_REQ_STALLED) SEP \
24435     FUNC(pmu_event, SRAM_WR_TRANS_ACCEPTED) SEP \
24436     FUNC(pmu_event, SRAM_WR_TRANS_COMPLETED_M) SEP \
24437     FUNC(pmu_event, SRAM_WR_TRANS_COMPLETED_S) SEP \
24438     FUNC(pmu_event, SRAM_WR_DATA_BEAT_WRITTEN) SEP \
24439     FUNC(pmu_event, SRAM_WR_TRAN_REQ_STALLED) SEP \
24440     FUNC(pmu_event, SRAM_WR_DATA_BEAT_STALLED) SEP \
24441     FUNC(pmu_event, SRAM_ENABLED_CYCLES) SEP \
24442     FUNC(pmu_event, SRAM_RD_STALL_LIMIT) SEP \
24443     FUNC(pmu_event, SRAM_WR_STALL_LIMIT) SEP \
24444     FUNC(pmu_event, AXI_LATENCY_ANY) SEP \
24445     FUNC(pmu_event, AXI_LATENCY_32) SEP \
24446     FUNC(pmu_event, AXI_LATENCY_64) SEP \
24447     FUNC(pmu_event, AXI_LATENCY_128) SEP \
24448     FUNC(pmu_event, AXI_LATENCY_256) SEP \
24449     FUNC(pmu_event, AXI_LATENCY_512) SEP \
24450     FUNC(pmu_event, AXI_LATENCY_1024) SEP \
24451     FUNC(pmu_event, ECC_DMA) SEP \
24452     FUNC(pmu_event, ECC_MAC_IB) SEP \
24453     FUNC(pmu_event, ECC_MAC_AB) SEP \
24454     FUNC(pmu_event, ECC_AO_CB) SEP \
24455     FUNC(pmu_event, ECC_AO_OB) SEP \
24456     FUNC(pmu_event, ECC_AO_LUT) SEP \
24457     FUNC(pmu_event, EXT_RD_TRANS_ACCEPTED) SEP \
24458     FUNC(pmu_event, EXT_RD_TRANS_COMPLETED) SEP \
24459     FUNC(pmu_event, EXT_RD_DATA_BEAT_RECEIVED) SEP \
24460     FUNC(pmu_event, EXT_RD_TRAN_REQ_STALLED) SEP \
24461     FUNC(pmu_event, EXT_WR_TRANS_ACCEPTED) SEP \
24462     FUNC(pmu_event, EXT_WR_TRANS_COMPLETED_M) SEP \
24463     FUNC(pmu_event, EXT_WR_TRANS_COMPLETED_S) SEP \
24464     FUNC(pmu_event, EXT_WR_DATA_BEAT_WRITTEN) SEP \
24465     FUNC(pmu_event, EXT_WR_TRAN_REQ_STALLED) SEP \
24466     FUNC(pmu_event, EXT_WR_DATA_BEAT_STALLED) SEP \
24467     FUNC(pmu_event, EXT_ENABLED_CYCLES) SEP \
24468     FUNC(pmu_event, EXT_RD_STALL_LIMIT) SEP \
24469     FUNC(pmu_event, EXT_WR_STALL_LIMIT) SEP \
24470     FUNC(pmu_event, SRAM0_RD_TRANS_ACCEPTED) SEP \
24471     FUNC(pmu_event, SRAM0_RD_TRANS_COMPLETED) SEP \
24472     FUNC(pmu_event, SRAM0_RD_DATA_BEAT_RECEIVED) SEP \
24473     FUNC(pmu_event, SRAM0_RD_TRAN_REQ_STALLED) SEP \
24474     FUNC(pmu_event, SRAM0_WR_TRANS_ACCEPTED) SEP \
24475     FUNC(pmu_event, SRAM0_WR_TRANS_COMPLETED_M) SEP \
24476     FUNC(pmu_event, SRAM0_WR_TRANS_COMPLETED_S) SEP \
24477     FUNC(pmu_event, SRAM0_WR_DATA_BEAT_WRITTEN) SEP \
24478     FUNC(pmu_event, SRAM0_WR_TRAN_REQ_STALLED) SEP \
24479     FUNC(pmu_event, SRAM0_WR_DATA_BEAT_STALLED) SEP \
24480     FUNC(pmu_event, SRAM0_ENABLED_CYCLES) SEP \
24481     FUNC(pmu_event, SRAM0_RD_STALL_LIMIT) SEP \
24482     FUNC(pmu_event, SRAM0_WR_STALL_LIMIT) SEP \
24483     FUNC(pmu_event, SRAM1_RD_TRANS_ACCEPTED) SEP \
24484     FUNC(pmu_event, SRAM1_RD_TRANS_COMPLETED) SEP \
24485     FUNC(pmu_event, SRAM1_RD_DATA_BEAT_RECEIVED) SEP \
24486     FUNC(pmu_event, SRAM1_RD_TRAN_REQ_STALLED) SEP \
24487     FUNC(pmu_event, SRAM1_WR_TRANS_ACCEPTED) SEP \
24488     FUNC(pmu_event, SRAM1_WR_TRANS_COMPLETED_M) SEP \
24489     FUNC(pmu_event, SRAM1_WR_TRANS_COMPLETED_S) SEP \
24490     FUNC(pmu_event, SRAM1_WR_DATA_BEAT_WRITTEN) SEP \
24491     FUNC(pmu_event, SRAM1_WR_TRAN_REQ_STALLED) SEP \
24492     FUNC(pmu_event, SRAM1_WR_DATA_BEAT_STALLED) SEP \
24493     FUNC(pmu_event, SRAM1_ENABLED_CYCLES) SEP \
24494     FUNC(pmu_event, SRAM1_RD_STALL_LIMIT) SEP \
24495     FUNC(pmu_event, SRAM1_WR_STALL_LIMIT) SEP \
24496     FUNC(pmu_event, SRAM2_RD_TRANS_ACCEPTED) SEP \
24497     FUNC(pmu_event, SRAM2_RD_TRANS_COMPLETED) SEP \
24498     FUNC(pmu_event, SRAM2_RD_DATA_BEAT_RECEIVED) SEP \
24499     FUNC(pmu_event, SRAM2_RD_TRAN_REQ_STALLED) SEP \
24500     FUNC(pmu_event, SRAM2_WR_TRANS_ACCEPTED) SEP \
24501     FUNC(pmu_event, SRAM2_WR_TRANS_COMPLETED_M) SEP \
24502     FUNC(pmu_event, SRAM2_WR_TRANS_COMPLETED_S) SEP \
24503     FUNC(pmu_event, SRAM2_WR_DATA_BEAT_WRITTEN) SEP \
24504     FUNC(pmu_event, SRAM2_WR_TRAN_REQ_STALLED) SEP \
24505     FUNC(pmu_event, SRAM2_WR_DATA_BEAT_STALLED) SEP \
24506     FUNC(pmu_event, SRAM2_ENABLED_CYCLES) SEP \
24507     FUNC(pmu_event, SRAM2_RD_STALL_LIMIT) SEP \
24508     FUNC(pmu_event, SRAM2_WR_STALL_LIMIT) SEP \
24509     FUNC(pmu_event, SRAM3_RD_TRANS_ACCEPTED) SEP \
24510     FUNC(pmu_event, SRAM3_RD_TRANS_COMPLETED) SEP \
24511     FUNC(pmu_event, SRAM3_RD_DATA_BEAT_RECEIVED) SEP \
24512     FUNC(pmu_event, SRAM3_RD_TRAN_REQ_STALLED) SEP \
24513     FUNC(pmu_event, SRAM3_WR_TRANS_ACCEPTED) SEP \
24514     FUNC(pmu_event, SRAM3_WR_TRANS_COMPLETED_M) SEP \
24515     FUNC(pmu_event, SRAM3_WR_TRANS_COMPLETED_S) SEP \
24516     FUNC(pmu_event, SRAM3_WR_DATA_BEAT_WRITTEN) SEP \
24517     FUNC(pmu_event, SRAM3_WR_TRAN_REQ_STALLED) SEP \
24518     FUNC(pmu_event, SRAM3_WR_DATA_BEAT_STALLED) SEP \
24519     FUNC(pmu_event, SRAM3_ENABLED_CYCLES) SEP \
24520     FUNC(pmu_event, SRAM3_RD_STALL_LIMIT) SEP \
24521     FUNC(pmu_event, SRAM3_WR_STALL_LIMIT) SEP \
24522     FUNC(pmu_event, EXT0_RD_TRANS_ACCEPTED) SEP \
24523     FUNC(pmu_event, EXT0_RD_TRANS_COMPLETED) SEP \
24524     FUNC(pmu_event, EXT0_RD_DATA_BEAT_RECEIVED) SEP \
24525     FUNC(pmu_event, EXT0_RD_TRAN_REQ_STALLED) SEP \
24526     FUNC(pmu_event, EXT0_WR_TRANS_ACCEPTED) SEP \
24527     FUNC(pmu_event, EXT0_WR_TRANS_COMPLETED_M) SEP \
24528     FUNC(pmu_event, EXT0_WR_TRANS_COMPLETED_S) SEP \
24529     FUNC(pmu_event, EXT0_WR_DATA_BEAT_WRITTEN) SEP \
24530     FUNC(pmu_event, EXT0_WR_TRAN_REQ_STALLED) SEP \
24531     FUNC(pmu_event, EXT0_WR_DATA_BEAT_STALLED) SEP \
24532     FUNC(pmu_event, EXT0_ENABLED_CYCLES) SEP \
24533     FUNC(pmu_event, EXT0_RD_STALL_LIMIT) SEP \
24534     FUNC(pmu_event, EXT0_WR_STALL_LIMIT) SEP \
24535     FUNC(pmu_event, EXT1_RD_TRANS_ACCEPTED) SEP \
24536     FUNC(pmu_event, EXT1_RD_TRANS_COMPLETED) SEP \
24537     FUNC(pmu_event, EXT1_RD_DATA_BEAT_RECEIVED) SEP \
24538     FUNC(pmu_event, EXT1_RD_TRAN_REQ_STALLED) SEP \
24539     FUNC(pmu_event, EXT1_WR_TRANS_ACCEPTED) SEP \
24540     FUNC(pmu_event, EXT1_WR_TRANS_COMPLETED_M) SEP \
24541     FUNC(pmu_event, EXT1_WR_TRANS_COMPLETED_S) SEP \
24542     FUNC(pmu_event, EXT1_WR_DATA_BEAT_WRITTEN) SEP \
24543     FUNC(pmu_event, EXT1_WR_TRAN_REQ_STALLED) SEP \
24544     FUNC(pmu_event, EXT1_WR_DATA_BEAT_STALLED) SEP \
24545     FUNC(pmu_event, EXT1_ENABLED_CYCLES) SEP \
24546     FUNC(pmu_event, EXT1_RD_STALL_LIMIT) SEP \
24547     FUNC(pmu_event, EXT1_WR_STALL_LIMIT)
24548 
24549 #define EXPAND_PMU_PORT_DISABLE(FUNC, SEP) \
24550     FUNC(pmu_port_disable, ENABLE) SEP \
24551     FUNC(pmu_port_disable, DISABLE)
24552 
24553 #define EXPAND_POOLING_MODE(FUNC, SEP) \
24554     FUNC(pooling_mode, MAX) SEP \
24555     FUNC(pooling_mode, AVERAGE) SEP \
24556     FUNC(pooling_mode, REDUCE_SUM) SEP \
24557     FUNC(pooling_mode, SUM) SEP \
24558     FUNC(pooling_mode, NONE) SEP \
24559     FUNC(pooling_mode, MIN) SEP \
24560     FUNC(pooling_mode, ARGMAX_X) SEP \
24561     FUNC(pooling_mode, ARGMAX_Y)
24562 
24563 #define EXPAND_PRIVILEGE_LEVEL(FUNC, SEP) \
24564     FUNC(privilege_level, USER) SEP \
24565     FUNC(privilege_level, PRIVILEGED)
24566 
24567 #define EXPAND_RAM_ID(FUNC, SEP) \
24568     FUNC(ram_id, LUT) SEP \
24569     FUNC(ram_id, IB) SEP \
24570     FUNC(ram_id, AB) SEP \
24571     FUNC(ram_id, CB) SEP \
24572     FUNC(ram_id, OB)
24573 
24574 #define EXPAND_RESIZE_MODE(FUNC, SEP) \
24575     FUNC(resize_mode, BILINEAR) SEP \
24576     FUNC(resize_mode, REPLICATE) SEP \
24577     FUNC(resize_mode, NEAREST)
24578 
24579 #define EXPAND_ROUND_MODE_IFM(FUNC, SEP) \
24580     FUNC(round_mode_ifm, DOUBLE_SYMMETRIC) SEP \
24581     FUNC(round_mode_ifm, NATURAL)
24582 
24583 #define EXPAND_ROUND_MODE_OFM(FUNC, SEP) \
24584     FUNC(round_mode_ofm, DOUBLE_SYMMETRIC) SEP \
24585     FUNC(round_mode_ofm, NATURAL) SEP \
24586     FUNC(round_mode_ofm, DOUBLE_ASYMMETRIC) SEP \
24587     FUNC(round_mode_ofm, SYMMETRIC) SEP \
24588     FUNC(round_mode_ofm, TRUNCATE_TO_ZERO) SEP \
24589     FUNC(round_mode_ofm, TRUNCATE_TO_LOWER)
24590 
24591 #define EXPAND_SECURITY_LEVEL(FUNC, SEP) \
24592     FUNC(security_level, SECURE) SEP \
24593     FUNC(security_level, NON_SECURE)
24594 
24595 #define EXPAND_STATE(FUNC, SEP) \
24596     FUNC(state, STOPPED) SEP \
24597     FUNC(state, RUNNING)
24598 
24599 #define EXPAND_WD_ACTIVE_CORE(FUNC, SEP) \
24600     FUNC(wd_active_core, NONE) SEP \
24601     FUNC(wd_active_core, STANDARD) SEP \
24602     FUNC(wd_active_core, FAST) SEP \
24603     FUNC(wd_active_core, TENSOR)
24604 
24605 #define EXPAND_WEIGHT_FORMAT(FUNC, SEP) \
24606     FUNC(weight_format, SWD) SEP \
24607     FUNC(weight_format, FWD)
24608 
24609 #define EXPAND_WEIGHT_ORDER(FUNC, SEP) \
24610     FUNC(weight_order, DEPTH_FIRST) SEP \
24611     FUNC(weight_order, PART_KERNEL_FIRST)
24612 
24613 #define EXPAND_WEIGHT_SPARSITY(FUNC, SEP) \
24614     FUNC(weight_sparsity, NONE) SEP \
24615     FUNC(weight_sparsity, SPARSE_2_4)
24616 
24617 #ifdef __cplusplus
24618 }
24619 #endif
24620 #endif
24621