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