blob: 37472b9c339ffb88640c63f130cc2254d15f95a8 [file] [log] [blame]
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001/*
Jonny Svärd136810f2021-10-13 16:04:26 +02002 * Copyright (c) 2020-2021 Arm Limited. All rights reserved.
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02003 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
Diqing Zhonga9f38d52020-04-27 11:00:13 +020019#ifndef ETHOSU55_INTERFACE_H
20#define ETHOSU55_INTERFACE_H
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021
22#ifdef __KERNEL__
23#include <linux/types.h>
24#else
25#include <stdint.h>
26#endif
27
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020028#if !defined(__cplusplus) || __cplusplus < 201402L
29#define CONSTEXPR
30#else
31#define CONSTEXPR constexpr
32#endif
33
34#ifndef __cplusplus
35#define STRUCT struct
36#else
37#define STRUCT
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020038#endif
39
Jonny Svärd136810f2021-10-13 16:04:26 +020040#if defined(__cplusplus) && defined(NPU_DISASSEMBLE)
41#include <iomanip>
42#include <sstream>
43#include <vector>
44#endif
45
46#if defined(__cplusplus) && !defined(NPU_NAMESPACE)
47#define NPU_NAMESPACE npu
48#endif
49
50#ifdef __cplusplus
51#include <cstring>
52#include <limits>
53#endif
54
55#ifdef __cplusplus
56namespace NPU_NAMESPACE
57{
58#endif
Douglas Trohaf6a85da2020-05-11 11:45:28 +020059#define NNX_ARCH_VERSION_MAJOR 1
Jonny Svärd136810f2021-10-13 16:04:26 +020060#define NNX_ARCH_VERSION_MINOR 1
61#define NNX_ARCH_VERSION_PATCH 0
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020062
63// Register offsets
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020064//
Douglas Troha2e7e3b72020-05-14 20:28:31 +020065// Register subpage BASE
66//
67#define NPU_REG_ID 0x0000
68#define NPU_REG_STATUS 0x0004
69#define NPU_REG_CMD 0x0008
70#define NPU_REG_RESET 0x000C
Jonny Svärd136810f2021-10-13 16:04:26 +020071#define NPU_REG_QBASE 0x0010
72#define NPU_REG_QBASE_HI 0x0014
Douglas Troha2e7e3b72020-05-14 20:28:31 +020073#define NPU_REG_QREAD 0x0018
74#define NPU_REG_QCONFIG 0x001C
75#define NPU_REG_QSIZE 0x0020
76#define NPU_REG_PROT 0x0024
77#define NPU_REG_CONFIG 0x0028
78#define NPU_REG_LOCK 0x002C
79#define NPU_REG_REGIONCFG 0x003C
80#define NPU_REG_AXI_LIMIT0 0x0040
81#define NPU_REG_AXI_LIMIT1 0x0044
82#define NPU_REG_AXI_LIMIT2 0x0048
83#define NPU_REG_AXI_LIMIT3 0x004C
Jonny Svärd136810f2021-10-13 16:04:26 +020084#define BASE_REGISTERS_SIZE 0x0080
Douglas Troha2e7e3b72020-05-14 20:28:31 +020085
86//
87// Register subpage BASE_POINTERS
88//
Jonny Svärd136810f2021-10-13 16:04:26 +020089#define NPU_REG_BASEP_BASE 0x0080
90#define NPU_REG_BASEP_ARRLEN 0x0008
91#define BASE_POINTERS_REGISTERS_SIZE 0x0100
Douglas Troha2e7e3b72020-05-14 20:28:31 +020092
93//
94// Register subpage DEBUG
95//
96#define NPU_REG_WD_STATUS 0x0100
97#define NPU_REG_MAC_STATUS 0x0104
98#define NPU_REG_AO_STATUS 0x0108
99#define NPU_REG_DMA_STATUS0 0x0110
100#define NPU_REG_DMA_STATUS1 0x0114
101#define NPU_REG_CLKFORCE 0x0140
102#define NPU_REG_DEBUG_ADDRESS 0x0144
103#define NPU_REG_DEBUG_MISC 0x0148
Stefan Nannessone2e70242020-08-19 16:01:29 +0200104#define NPU_REG_DEBUG_BLOCK 0x0150
Jonny Svärd136810f2021-10-13 16:04:26 +0200105#define DEBUG_REGISTERS_SIZE 0x0180
Douglas Troha2e7e3b72020-05-14 20:28:31 +0200106
107//
108// Register subpage PMU
109//
110#define NPU_REG_PMCR 0x0180
111#define NPU_REG_PMCNTENSET 0x0184
112#define NPU_REG_PMCNTENCLR 0x0188
113#define NPU_REG_PMOVSSET 0x018C
114#define NPU_REG_PMOVSCLR 0x0190
115#define NPU_REG_PMINTSET 0x0194
116#define NPU_REG_PMINTCLR 0x0198
Jonny Svärd136810f2021-10-13 16:04:26 +0200117#define NPU_REG_PMCCNTR 0x01A0
Douglas Troha2e7e3b72020-05-14 20:28:31 +0200118#define NPU_REG_PMCCNTR_HI 0x01A4
119#define NPU_REG_PMCCNTR_CFG 0x01A8
120#define NPU_REG_PMCAXI_CHAN 0x01AC
Jonny Svärd136810f2021-10-13 16:04:26 +0200121#define PMU_REGISTERS_SIZE 0x0200
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200122
123//
Douglas Troha2e7e3b72020-05-14 20:28:31 +0200124// Register subpage TSU_DEBUG
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200125//
126#define NPU_REG_KERNEL_X 0x0200
127#define NPU_REG_KERNEL_Y 0x0204
128#define NPU_REG_KERNEL_W_M1 0x0208
129#define NPU_REG_KERNEL_H_M1 0x020C
130#define NPU_REG_OFM_CBLK_WIDTH_M1 0x0210
131#define NPU_REG_OFM_CBLK_HEIGHT_M1 0x0214
132#define NPU_REG_OFM_CBLK_DEPTH_M1 0x0218
133#define NPU_REG_IFM_CBLK_DEPTH_M1 0x021C
134#define NPU_REG_OFM_X 0x0220
135#define NPU_REG_OFM_Y 0x0224
136#define NPU_REG_OFM_Z 0x0228
137#define NPU_REG_IFM_Z 0x022C
138#define NPU_REG_PAD_TOP 0x0230
139#define NPU_REG_PAD_LEFT 0x0234
140#define NPU_REG_IFM_CBLK_WIDTH 0x0238
141#define NPU_REG_IFM_CBLK_HEIGHT 0x023C
142#define NPU_REG_DMA_IFM_SRC 0x0240
143#define NPU_REG_DMA_IFM_SRC_HI 0x0244
144#define NPU_REG_DMA_IFM_DST 0x0248
145#define NPU_REG_DMA_OFM_SRC 0x024C
146#define NPU_REG_DMA_OFM_DST 0x0250
147#define NPU_REG_DMA_OFM_DST_HI 0x0254
148#define NPU_REG_DMA_WEIGHT_SRC 0x0258
149#define NPU_REG_DMA_WEIGHT_SRC_HI 0x025C
150#define NPU_REG_DMA_CMD_SRC 0x0260
151#define NPU_REG_DMA_CMD_SRC_HI 0x0264
152#define NPU_REG_DMA_CMD_SIZE 0x0268
153#define NPU_REG_DMA_M2M_SRC 0x026C
154#define NPU_REG_DMA_M2M_SRC_HI 0x0270
155#define NPU_REG_DMA_M2M_DST 0x0274
156#define NPU_REG_DMA_M2M_DST_HI 0x0278
157#define NPU_REG_CURRENT_QREAD 0x027C
158#define NPU_REG_DMA_SCALE_SRC 0x0280
159#define NPU_REG_DMA_SCALE_SRC_HI 0x0284
Stefan Nannessone2e70242020-08-19 16:01:29 +0200160#define NPU_REG_CURRENT_BLOCK 0x02B4
161#define NPU_REG_CURRENT_OP 0x02B8
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200162#define NPU_REG_CURRENT_CMD 0x02BC
Douglas Troha2e7e3b72020-05-14 20:28:31 +0200163#define TSU_DEBUG_REGISTERS_SIZE 0x02C0
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200164
Jonny Svärd136810f2021-10-13 16:04:26 +0200165//
166// Register subpage PMU_COUNTERS
167//
168#define NPU_REG_PMEVCNTR_BASE 0x0300
169#define NPU_REG_PMEVCNTR_ARRLEN 0x0004
170#define NPU_REG_PMEVTYPER_BASE 0x0380
171#define NPU_REG_PMEVTYPER_ARRLEN 0x0004
172#define PMU_COUNTERS_REGISTERS_SIZE 0x0400
173
174//
175// Register subpage SHARED_BUFFER
176//
177#define NPU_REG_SHARED_BUFFER_BASE 0x0400
178#define NPU_REG_SHARED_BUFFER_ARRLEN 0x0100
179#define SHARED_BUFFER_REGISTERS_SIZE 0x0800
180
181//
182// Register subpage TSU_IFM
183//
184#define NPU_REG_IFM_PAD_TOP 0x0800
185#define NPU_REG_IFM_PAD_LEFT 0x0804
186#define NPU_REG_IFM_PAD_RIGHT 0x0808
187#define NPU_REG_IFM_PAD_BOTTOM 0x080C
188#define NPU_REG_IFM_DEPTH_M1 0x0810
189#define NPU_REG_IFM_PRECISION 0x0814
190#define NPU_REG_IFM_UPSCALE 0x081C
191#define NPU_REG_IFM_ZERO_POINT 0x0824
192#define NPU_REG_IFM_WIDTH0_M1 0x0828
193#define NPU_REG_IFM_HEIGHT0_M1 0x082C
194#define NPU_REG_IFM_HEIGHT1_M1 0x0830
195#define NPU_REG_IFM_IB_END 0x0834
196#define NPU_REG_IFM_REGION 0x083C
197#define TSU_IFM_REGISTERS_SIZE 0x0840
198
199//
200// Register subpage TSU_OFM
201//
202#define NPU_REG_OFM_WIDTH_M1 0x0844
203#define NPU_REG_OFM_HEIGHT_M1 0x0848
204#define NPU_REG_OFM_DEPTH_M1 0x084C
205#define NPU_REG_OFM_PRECISION 0x0850
206#define NPU_REG_OFM_BLK_WIDTH_M1 0x0854
207#define NPU_REG_OFM_BLK_HEIGHT_M1 0x0858
208#define NPU_REG_OFM_BLK_DEPTH_M1 0x085C
209#define NPU_REG_OFM_ZERO_POINT 0x0860
210#define NPU_REG_OFM_WIDTH0_M1 0x0868
211#define NPU_REG_OFM_HEIGHT0_M1 0x086C
212#define NPU_REG_OFM_HEIGHT1_M1 0x0870
213#define NPU_REG_OFM_REGION 0x087C
214#define TSU_OFM_REGISTERS_SIZE 0x0880
215
216//
217// Register subpage TSU_KERNEL
218//
219#define NPU_REG_KERNEL_WIDTH_M1 0x0880
220#define NPU_REG_KERNEL_HEIGHT_M1 0x0884
221#define NPU_REG_KERNEL_STRIDE 0x0888
222#define NPU_REG_ACC_FORMAT 0x0890
223#define NPU_REG_ACTIVATION 0x0894
224#define NPU_REG_ACTIVATION_MIN 0x0898
225#define NPU_REG_ACTIVATION_MAX 0x089C
226#define NPU_REG_WEIGHT_REGION 0x08A0
227#define NPU_REG_SCALE_REGION 0x08A4
228#define NPU_REG_AB_START 0x08B4
229#define NPU_REG_BLOCKDEP 0x08BC
230#define TSU_KERNEL_REGISTERS_SIZE 0x08C0
231
232//
233// Register subpage TSU_DMA
234//
235#define NPU_REG_DMA0_SRC_REGION 0x08C0
236#define NPU_REG_DMA0_DST_REGION 0x08C4
237#define NPU_REG_DMA0_SIZE0 0x08C8
238#define NPU_REG_DMA0_SIZE1 0x08CC
239#define TSU_DMA_REGISTERS_SIZE 0x0900
240
241//
242// Register subpage TSU_IFM2
243//
244#define NPU_REG_IFM2_BROADCAST 0x0900
245#define NPU_REG_IFM2_SCALAR 0x0904
246#define NPU_REG_IFM2_PRECISION 0x0914
247#define NPU_REG_IFM2_ZERO_POINT 0x0924
248#define NPU_REG_IFM2_WIDTH0_M1 0x0928
249#define NPU_REG_IFM2_HEIGHT0_M1 0x092C
250#define NPU_REG_IFM2_HEIGHT1_M1 0x0930
251#define NPU_REG_IFM2_IB_START 0x0934
252#define NPU_REG_IFM2_REGION 0x093C
253#define TSU_IFM2_REGISTERS_SIZE 0x0940
254
255//
256// Register subpage TSU_IFM_BASE
257//
258#define NPU_REG_IFM_BASE0 0x0A00
259#define NPU_REG_IFM_BASE0_HI 0x0A04
260#define NPU_REG_IFM_BASE1 0x0A08
261#define NPU_REG_IFM_BASE1_HI 0x0A0C
262#define NPU_REG_IFM_BASE2 0x0A10
263#define NPU_REG_IFM_BASE2_HI 0x0A14
264#define NPU_REG_IFM_BASE3 0x0A18
265#define NPU_REG_IFM_BASE3_HI 0x0A1C
266#define NPU_REG_IFM_STRIDE_X 0x0A20
267#define NPU_REG_IFM_STRIDE_X_HI 0x0A24
268#define NPU_REG_IFM_STRIDE_Y 0x0A28
269#define NPU_REG_IFM_STRIDE_Y_HI 0x0A2C
270#define NPU_REG_IFM_STRIDE_C 0x0A30
271#define NPU_REG_IFM_STRIDE_C_HI 0x0A34
272#define TSU_IFM_BASE_REGISTERS_SIZE 0x0A40
273
274//
275// Register subpage TSU_OFM_BASE
276//
277#define NPU_REG_OFM_BASE0 0x0A40
278#define NPU_REG_OFM_BASE0_HI 0x0A44
279#define NPU_REG_OFM_BASE1 0x0A48
280#define NPU_REG_OFM_BASE1_HI 0x0A4C
281#define NPU_REG_OFM_BASE2 0x0A50
282#define NPU_REG_OFM_BASE2_HI 0x0A54
283#define NPU_REG_OFM_BASE3 0x0A58
284#define NPU_REG_OFM_BASE3_HI 0x0A5C
285#define NPU_REG_OFM_STRIDE_X 0x0A60
286#define NPU_REG_OFM_STRIDE_X_HI 0x0A64
287#define NPU_REG_OFM_STRIDE_Y 0x0A68
288#define NPU_REG_OFM_STRIDE_Y_HI 0x0A6C
289#define NPU_REG_OFM_STRIDE_C 0x0A70
290#define NPU_REG_OFM_STRIDE_C_HI 0x0A74
291#define TSU_OFM_BASE_REGISTERS_SIZE 0x0A80
292
293//
294// Register subpage TSU_WS_BASE
295//
296#define NPU_REG_WEIGHT_BASE 0x0A80
297#define NPU_REG_WEIGHT_BASE_HI 0x0A84
298#define NPU_REG_WEIGHT_LENGTH 0x0A88
Jonny Svärd13cb0892021-11-16 18:43:04 +0100299#define NPU_REG_WEIGHT_LENGTH_HI 0x0A8C
Jonny Svärd136810f2021-10-13 16:04:26 +0200300#define NPU_REG_SCALE_BASE 0x0A90
301#define NPU_REG_SCALE_BASE_HI 0x0A94
302#define NPU_REG_SCALE_LENGTH 0x0A98
Jonny Svärd13cb0892021-11-16 18:43:04 +0100303#define NPU_REG_SCALE_LENGTH_HI 0x0A9C
Jonny Svärd136810f2021-10-13 16:04:26 +0200304#define NPU_REG_OFM_SCALE 0x0AA0
305#define NPU_REG_OFM_SCALE_SHIFT 0x0AA4
306#define NPU_REG_OPA_SCALE 0x0AA8
307#define NPU_REG_OPA_SCALE_SHIFT 0x0AAC
308#define NPU_REG_OPB_SCALE 0x0AB0
309#define TSU_WS_BASE_REGISTERS_SIZE 0x0AC0
310
311//
312// Register subpage TSU_DMA_BASE
313//
314#define NPU_REG_DMA0_SRC 0x0AC0
315#define NPU_REG_DMA0_SRC_HI 0x0AC4
316#define NPU_REG_DMA0_DST 0x0AC8
317#define NPU_REG_DMA0_DST_HI 0x0ACC
318#define NPU_REG_DMA0_LEN 0x0AD0
319#define NPU_REG_DMA0_LEN_HI 0x0AD4
320#define TSU_DMA_BASE_REGISTERS_SIZE 0x0B00
321
322//
323// Register subpage TSU_IFM2_BASE
324//
325#define NPU_REG_IFM2_BASE0 0x0B00
326#define NPU_REG_IFM2_BASE0_HI 0x0B04
327#define NPU_REG_IFM2_BASE1 0x0B08
328#define NPU_REG_IFM2_BASE1_HI 0x0B0C
329#define NPU_REG_IFM2_BASE2 0x0B10
330#define NPU_REG_IFM2_BASE2_HI 0x0B14
331#define NPU_REG_IFM2_BASE3 0x0B18
332#define NPU_REG_IFM2_BASE3_HI 0x0B1C
333#define NPU_REG_IFM2_STRIDE_X 0x0B20
334#define NPU_REG_IFM2_STRIDE_X_HI 0x0B24
335#define NPU_REG_IFM2_STRIDE_Y 0x0B28
336#define NPU_REG_IFM2_STRIDE_Y_HI 0x0B2C
337#define NPU_REG_IFM2_STRIDE_C 0x0B30
338#define NPU_REG_IFM2_STRIDE_C_HI 0x0B34
339#define TSU_IFM2_BASE_REGISTERS_SIZE 0x0B40
340
341//
342// Register subpage TSU_WS1_BASE
343//
344#define TSU_WS1_BASE_REGISTERS_SIZE 0x0B80
345
346//
347// Register subpage TSU_USER_BASE
348//
349#define NPU_REG_USER_DEFINED_BASE 0x0B80
350#define NPU_REG_USER_DEFINED_ARRLEN 0x0008
351#define TSU_USER_BASE_REGISTERS_SIZE 0x0BC0
352
353//
354// Register subpage TSU_DMA_EBASE
355//
356#define TSU_DMA_EBASE_REGISTERS_SIZE 0x0C00
357
358//
359// Register subpage ID
360//
361#define NPU_REG_REVISION 0x0FC0
362#define NPU_REG_PID4 0x0FD0
363#define NPU_REG_PID5 0x0FD4
364#define NPU_REG_PID6 0x0FD8
365#define NPU_REG_PID7 0x0FDC
366#define NPU_REG_PID0 0x0FE0
367#define NPU_REG_PID1 0x0FE4
368#define NPU_REG_PID2 0x0FE8
369#define NPU_REG_PID3 0x0FEC
370#define NPU_REG_CID0 0x0FF0
371#define NPU_REG_CID1 0x0FF4
372#define NPU_REG_CID2 0x0FF8
373#define NPU_REG_CID3 0x0FFC
374#define ID_REGISTERS_SIZE 0x1000
375
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200376#ifdef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200377// Enum types
Jonny Svärd136810f2021-10-13 16:04:26 +0200378enum class acc_format : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200379{
Jonny Svärd136810f2021-10-13 16:04:26 +0200380 I32 = 0,
381 I40 = 1,
382 F16 = 2,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200383};
384
Jonny Svärd136810f2021-10-13 16:04:26 +0200385enum class activation_clip_range : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200386{
387 OFM_PRECISION = 0,
388 FORCE_UINT8 = 2,
389 FORCE_INT8 = 3,
390 FORCE_INT16 = 5,
391};
392
Jonny Svärd136810f2021-10-13 16:04:26 +0200393enum class activation_format : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200394{
395 NHWC = 0,
396 NHCWB16 = 1,
397};
398
Jonny Svärd136810f2021-10-13 16:04:26 +0200399enum class activation_function : uint8_t
400{
401 RELU = 0,
402 TANH = 3,
403 SIGMOID = 4,
404 TABLE_0 = 16,
405 TABLE_1 = 17,
406 TABLE_2 = 18,
407 TABLE_3 = 19,
408 TABLE_4 = 20,
409 TABLE_5 = 21,
410 TABLE_6 = 22,
411 TABLE_7 = 23,
412};
413
414enum class activation_precision : uint8_t
415{
416 B8 = 0,
417 B16 = 1,
418 B32 = 2,
419 B64 = 3,
420};
421
422enum class activation_type : uint8_t
423{
424 UNSIGNED = 0,
425 SIGNED = 1,
426};
427
428enum class axi_mem_encoding : uint8_t
429{
430 DEVICE_NON_BUFFERABLE = 0,
431 DEVICE_BUFFERABLE = 1,
432 NORMAL_NON_CACHEABLE_NON_BUFFERABLE = 2,
433 NORMAL_NON_CACHEABLE_BUFFERABLE = 3,
434 WRITE_THROUGH_NO_ALLOCATE = 4,
435 WRITE_THROUGH_READ_ALLOCATE = 5,
436 WRITE_THROUGH_WRITE_ALLOCATE = 6,
437 WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 7,
438 WRITE_BACK_NO_ALLOCATE = 8,
439 WRITE_BACK_READ_ALLOCATE = 9,
440 WRITE_BACK_WRITE_ALLOCATE = 10,
441 WRITE_BACK_READ_AND_WRITE_ALLOCATE = 11,
442};
443
444enum class broadcast_mode : uint8_t
445{
446 DISABLE = 0,
447 ENABLE = 1,
448};
449
450enum class cmd0_opcode : uint16_t
451{
452 NPU_OP_STOP = 0,
453 NPU_OP_IRQ = 1,
454 NPU_OP_CONV = 2,
455 NPU_OP_DEPTHWISE = 3,
456 NPU_OP_POOL = 5,
457 NPU_OP_ELEMENTWISE = 6,
458 NPU_OP_DMA_START = 16,
459 NPU_OP_DMA_WAIT = 17,
460 NPU_OP_KERNEL_WAIT = 18,
461 NPU_OP_PMU_MASK = 19,
462 NPU_SET_IFM_PAD_TOP = 256,
463 NPU_SET_IFM_PAD_LEFT = 257,
464 NPU_SET_IFM_PAD_RIGHT = 258,
465 NPU_SET_IFM_PAD_BOTTOM = 259,
466 NPU_SET_IFM_DEPTH_M1 = 260,
467 NPU_SET_IFM_PRECISION = 261,
468 NPU_SET_IFM_UPSCALE = 263,
469 NPU_SET_IFM_ZERO_POINT = 265,
470 NPU_SET_IFM_WIDTH0_M1 = 266,
471 NPU_SET_IFM_HEIGHT0_M1 = 267,
472 NPU_SET_IFM_HEIGHT1_M1 = 268,
473 NPU_SET_IFM_IB_END = 269,
474 NPU_SET_IFM_REGION = 271,
475 NPU_SET_OFM_WIDTH_M1 = 273,
476 NPU_SET_OFM_HEIGHT_M1 = 274,
477 NPU_SET_OFM_DEPTH_M1 = 275,
478 NPU_SET_OFM_PRECISION = 276,
479 NPU_SET_OFM_BLK_WIDTH_M1 = 277,
480 NPU_SET_OFM_BLK_HEIGHT_M1 = 278,
481 NPU_SET_OFM_BLK_DEPTH_M1 = 279,
482 NPU_SET_OFM_ZERO_POINT = 280,
483 NPU_SET_OFM_WIDTH0_M1 = 282,
484 NPU_SET_OFM_HEIGHT0_M1 = 283,
485 NPU_SET_OFM_HEIGHT1_M1 = 284,
486 NPU_SET_OFM_REGION = 287,
487 NPU_SET_KERNEL_WIDTH_M1 = 288,
488 NPU_SET_KERNEL_HEIGHT_M1 = 289,
489 NPU_SET_KERNEL_STRIDE = 290,
490 NPU_SET_ACC_FORMAT = 292,
491 NPU_SET_ACTIVATION = 293,
492 NPU_SET_ACTIVATION_MIN = 294,
493 NPU_SET_ACTIVATION_MAX = 295,
494 NPU_SET_WEIGHT_REGION = 296,
495 NPU_SET_SCALE_REGION = 297,
496 NPU_SET_AB_START = 301,
497 NPU_SET_BLOCKDEP = 303,
498 NPU_SET_DMA0_SRC_REGION = 304,
499 NPU_SET_DMA0_DST_REGION = 305,
500 NPU_SET_DMA0_SIZE0 = 306,
501 NPU_SET_DMA0_SIZE1 = 307,
502 NPU_SET_IFM2_BROADCAST = 384,
503 NPU_SET_IFM2_SCALAR = 385,
504 NPU_SET_IFM2_PRECISION = 389,
505 NPU_SET_IFM2_ZERO_POINT = 393,
506 NPU_SET_IFM2_WIDTH0_M1 = 394,
507 NPU_SET_IFM2_HEIGHT0_M1 = 395,
508 NPU_SET_IFM2_HEIGHT1_M1 = 396,
509 NPU_SET_IFM2_IB_START = 397,
510 NPU_SET_IFM2_REGION = 399,
511};
512
513enum class cmd1_opcode : uint16_t
514{
515 NPU_SET_IFM_BASE0 = 0,
516 NPU_SET_IFM_BASE1 = 1,
517 NPU_SET_IFM_BASE2 = 2,
518 NPU_SET_IFM_BASE3 = 3,
519 NPU_SET_IFM_STRIDE_X = 4,
520 NPU_SET_IFM_STRIDE_Y = 5,
521 NPU_SET_IFM_STRIDE_C = 6,
522 NPU_SET_OFM_BASE0 = 16,
523 NPU_SET_OFM_BASE1 = 17,
524 NPU_SET_OFM_BASE2 = 18,
525 NPU_SET_OFM_BASE3 = 19,
526 NPU_SET_OFM_STRIDE_X = 20,
527 NPU_SET_OFM_STRIDE_Y = 21,
528 NPU_SET_OFM_STRIDE_C = 22,
529 NPU_SET_WEIGHT_BASE = 32,
530 NPU_SET_WEIGHT_LENGTH = 33,
531 NPU_SET_SCALE_BASE = 34,
532 NPU_SET_SCALE_LENGTH = 35,
533 NPU_SET_OFM_SCALE = 36,
534 NPU_SET_OPA_SCALE = 37,
535 NPU_SET_OPB_SCALE = 38,
536 NPU_SET_DMA0_SRC = 48,
537 NPU_SET_DMA0_DST = 49,
538 NPU_SET_DMA0_LEN = 50,
539 NPU_SET_IFM2_BASE0 = 128,
540 NPU_SET_IFM2_BASE1 = 129,
541 NPU_SET_IFM2_BASE2 = 130,
542 NPU_SET_IFM2_BASE3 = 131,
543 NPU_SET_IFM2_STRIDE_X = 132,
544 NPU_SET_IFM2_STRIDE_Y = 133,
545 NPU_SET_IFM2_STRIDE_C = 134,
546 NPU_SET_USER_DEFINED0 = 160,
547 NPU_SET_USER_DEFINED1 = 161,
548 NPU_SET_USER_DEFINED2 = 162,
549 NPU_SET_USER_DEFINED3 = 163,
550 NPU_SET_USER_DEFINED4 = 164,
551 NPU_SET_USER_DEFINED5 = 165,
552 NPU_SET_USER_DEFINED6 = 166,
553 NPU_SET_USER_DEFINED7 = 167,
554};
555
556enum class cmd_ctrl : uint8_t
557{
558 CMD0_CTRL = 0,
559 CMD1_CTRL = 1,
560};
561
562enum class custom_dma_cs : uint8_t
563{
564 DISABLE = 0,
565 ENABLE = 1,
566};
567
568enum class custom_dma : uint8_t
569{
570 NOT_IMPLEMENTED = 0,
571 IMPLEMENTED = 1,
572};
573
574enum class dma_fault_src : uint8_t
575{
576 AXI_M0 = 0,
577 AXI_M1 = 1,
578};
579
580enum class dma_region_mode : uint8_t
581{
582 EXTERNAL = 0,
583 INTERNAL = 1,
584};
585
586enum class dma_stride_mode : uint8_t
587{
588 D1 = 0,
589};
590
591enum class elementwise_mode : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200592{
593 MUL = 0,
594 ADD = 1,
595 SUB = 2,
596 MIN = 3,
597 MAX = 4,
598 LRELU = 5,
599 ABS = 6,
600 CLZ = 7,
601 SHR = 8,
602 SHL = 9,
603};
604
Jonny Svärd136810f2021-10-13 16:04:26 +0200605enum class functional_safety : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200606{
Jonny Svärd136810f2021-10-13 16:04:26 +0200607 NOT_IMPLEMENTED = 0,
608 IMPLEMENTED = 1,
609};
610
611enum class ifm2_operand_order : uint8_t
612{
613 ORDER_B = 0,
614 ORDER_A = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200615};
616
617enum class ifm_scale_mode : uint8_t
618{
Jonny Svärd136810f2021-10-13 16:04:26 +0200619 OPA_OPB_16 = 0,
620 OPA_32 = 1,
621 OPB_32 = 2,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200622};
623
Jonny Svärd136810f2021-10-13 16:04:26 +0200624enum class ifm_upscale_mode : uint8_t
Diqing Zhong04118062020-04-15 01:19:12 +0200625{
Jonny Svärd136810f2021-10-13 16:04:26 +0200626 NONE = 0,
627 NEAREST = 1,
628 ZEROS = 2,
Diqing Zhong04118062020-04-15 01:19:12 +0200629};
630
Jonny Svärd136810f2021-10-13 16:04:26 +0200631enum class kernel_decomposition : uint8_t
632{
633 D8X8 = 0,
634 D4X4 = 1,
635};
636
637enum class kernel_dilation : uint8_t
638{
639 NONE = 0,
640 X2 = 1,
641};
642
643enum class max_beats : uint8_t
644{
645 B64 = 0,
646 B128 = 1,
647 B256 = 2,
648};
649
650enum class mem_attr : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200651{
652 AXI0_OUTSTANDING_COUNTER0 = 0,
653 AXI0_OUTSTANDING_COUNTER1 = 1,
654 AXI1_OUTSTANDING_COUNTER2 = 2,
655 AXI1_OUTSTANDING_COUNTER3 = 3,
656};
657
Jonny Svärd136810f2021-10-13 16:04:26 +0200658enum class ofm_scale_mode : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200659{
Jonny Svärd136810f2021-10-13 16:04:26 +0200660 PER_CHANNEL = 0,
661 GLOBAL = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200662};
663
Jonny Svärd136810f2021-10-13 16:04:26 +0200664enum class pmu_axi_channel : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200665{
Jonny Svärd136810f2021-10-13 16:04:26 +0200666 RD_CMD = 0,
667 RD_IFM = 1,
668 RD_WEIGHTS = 2,
669 RD_SCALE_BIAS = 3,
670 RD_MEM2MEM = 4,
671 WR_OFM = 8,
672 WR_MEM2MEM = 9,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200673};
674
Jonny Svärd136810f2021-10-13 16:04:26 +0200675enum class pmu_event : uint16_t
676{
677 NO_EVENT = 0,
678 CYCLE = 17,
679 NPU_IDLE = 32,
680 CC_STALLED_ON_BLOCKDEP = 33,
681 CC_STALLED_ON_SHRAM_RECONFIG = 34,
682 NPU_ACTIVE = 35,
683 MAC_ACTIVE = 48,
684 MAC_ACTIVE_8BIT = 49,
685 MAC_ACTIVE_16BIT = 50,
686 MAC_DPU_ACTIVE = 51,
687 MAC_STALLED_BY_WD_ACC = 52,
688 MAC_STALLED_BY_WD = 53,
689 MAC_STALLED_BY_ACC = 54,
690 MAC_STALLED_BY_IB = 55,
691 MAC_ACTIVE_32BIT = 56,
692 MAC_STALLED_BY_INT_W = 57,
693 MAC_STALLED_BY_INT_ACC = 58,
694 AO_ACTIVE = 64,
695 AO_ACTIVE_8BIT = 65,
696 AO_ACTIVE_16BIT = 66,
697 AO_STALLED_BY_OFMP_OB = 67,
698 AO_STALLED_BY_OFMP = 68,
699 AO_STALLED_BY_OB = 69,
700 AO_STALLED_BY_ACC_IB = 70,
701 AO_STALLED_BY_ACC = 71,
702 AO_STALLED_BY_IB = 72,
703 WD_ACTIVE = 80,
704 WD_STALLED = 81,
705 WD_STALLED_BY_WS = 82,
706 WD_STALLED_BY_WD_BUF = 83,
707 WD_PARSE_ACTIVE = 84,
708 WD_PARSE_STALLED = 85,
709 WD_PARSE_STALLED_IN = 86,
710 WD_PARSE_STALLED_OUT = 87,
711 WD_TRANS_WS = 88,
712 WD_TRANS_WB = 89,
713 WD_TRANS_DW0 = 90,
714 WD_TRANS_DW1 = 91,
715 AXI0_RD_TRANS_ACCEPTED = 128,
716 AXI0_RD_TRANS_COMPLETED = 129,
717 AXI0_RD_DATA_BEAT_RECEIVED = 130,
718 AXI0_RD_TRAN_REQ_STALLED = 131,
719 AXI0_WR_TRANS_ACCEPTED = 132,
720 AXI0_WR_TRANS_COMPLETED_M = 133,
721 AXI0_WR_TRANS_COMPLETED_S = 134,
722 AXI0_WR_DATA_BEAT_WRITTEN = 135,
723 AXI0_WR_TRAN_REQ_STALLED = 136,
724 AXI0_WR_DATA_BEAT_STALLED = 137,
725 AXI0_ENABLED_CYCLES = 140,
726 AXI0_RD_STALL_LIMIT = 142,
727 AXI0_WR_STALL_LIMIT = 143,
728 AXI_LATENCY_ANY = 160,
729 AXI_LATENCY_32 = 161,
730 AXI_LATENCY_64 = 162,
731 AXI_LATENCY_128 = 163,
732 AXI_LATENCY_256 = 164,
733 AXI_LATENCY_512 = 165,
734 AXI_LATENCY_1024 = 166,
735 ECC_DMA = 176,
736 ECC_SB0 = 177,
737 AXI1_RD_TRANS_ACCEPTED = 384,
738 AXI1_RD_TRANS_COMPLETED = 385,
739 AXI1_RD_DATA_BEAT_RECEIVED = 386,
740 AXI1_RD_TRAN_REQ_STALLED = 387,
741 AXI1_WR_TRANS_ACCEPTED = 388,
742 AXI1_WR_TRANS_COMPLETED_M = 389,
743 AXI1_WR_TRANS_COMPLETED_S = 390,
744 AXI1_WR_DATA_BEAT_WRITTEN = 391,
745 AXI1_WR_TRAN_REQ_STALLED = 392,
746 AXI1_WR_DATA_BEAT_STALLED = 393,
747 AXI1_ENABLED_CYCLES = 396,
748 AXI1_RD_STALL_LIMIT = 398,
749 AXI1_WR_STALL_LIMIT = 399,
750 ECC_SB1 = 433,
751};
752
753enum class pooling_mode : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200754{
755 MAX = 0,
756 AVERAGE = 1,
757 REDUCE_SUM = 2,
758};
759
760enum class privilege_level : uint8_t
761{
762 USER = 0,
763 PRIVILEGED = 1,
764};
765
Jonny Svärd136810f2021-10-13 16:04:26 +0200766enum class round_mode : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200767{
Jonny Svärd136810f2021-10-13 16:04:26 +0200768 DBL = 0,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200769 TRUNCATE = 1,
770 NATURAL = 2,
771};
772
773enum class security_level : uint8_t
774{
775 SECURE = 0,
776 NON_SECURE = 1,
777};
778
779enum class state : uint8_t
780{
781 STOPPED = 0,
782 RUNNING = 1,
783};
784
Jonny Svärd136810f2021-10-13 16:04:26 +0200785enum class wd_core_slice_state : uint8_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200786{
Jonny Svärd136810f2021-10-13 16:04:26 +0200787 HEADER = 0,
788 PALETTE = 1,
789 WEIGHTS = 2,
790};
791
792enum class wd_ctrl_state : uint8_t
793{
794 IDLE = 0,
795 DRAIN = 1,
796 OFD_INIT = 2,
797 OFD_RUN = 3,
798};
799
800enum class weight_order : uint8_t
801{
802 DEPTH_FIRST = 0,
803 PART_KERNEL_FIRST = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200804};
805
806#else
807
808enum acc_format
809{
Jonny Svärd136810f2021-10-13 16:04:26 +0200810 ACC_FORMAT_I32 = 0,
811 ACC_FORMAT_I40 = 1,
812 ACC_FORMAT_F16 = 2,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200813};
814
Jonny Svärd136810f2021-10-13 16:04:26 +0200815enum activation_clip_range
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200816{
Jonny Svärd136810f2021-10-13 16:04:26 +0200817 ACTIVATION_CLIP_RANGE_OFM_PRECISION = 0,
818 ACTIVATION_CLIP_RANGE_FORCE_UINT8 = 2,
819 ACTIVATION_CLIP_RANGE_FORCE_INT8 = 3,
820 ACTIVATION_CLIP_RANGE_FORCE_INT16 = 5,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200821};
822
Jonny Svärd136810f2021-10-13 16:04:26 +0200823enum activation_format
Stefan Nannessone2e70242020-08-19 16:01:29 +0200824{
Jonny Svärd136810f2021-10-13 16:04:26 +0200825 ACTIVATION_FORMAT_NHWC = 0,
826 ACTIVATION_FORMAT_NHCWB16 = 1,
Stefan Nannessone2e70242020-08-19 16:01:29 +0200827};
828
Jonny Svärd136810f2021-10-13 16:04:26 +0200829enum activation_function
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200830{
Jonny Svärd136810f2021-10-13 16:04:26 +0200831 ACTIVATION_FUNCTION_RELU = 0,
832 ACTIVATION_FUNCTION_TANH = 3,
833 ACTIVATION_FUNCTION_SIGMOID = 4,
834 ACTIVATION_FUNCTION_TABLE_0 = 16,
835 ACTIVATION_FUNCTION_TABLE_1 = 17,
836 ACTIVATION_FUNCTION_TABLE_2 = 18,
837 ACTIVATION_FUNCTION_TABLE_3 = 19,
838 ACTIVATION_FUNCTION_TABLE_4 = 20,
839 ACTIVATION_FUNCTION_TABLE_5 = 21,
840 ACTIVATION_FUNCTION_TABLE_6 = 22,
841 ACTIVATION_FUNCTION_TABLE_7 = 23,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200842};
843
Jonny Svärd136810f2021-10-13 16:04:26 +0200844enum activation_precision
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200845{
Jonny Svärd136810f2021-10-13 16:04:26 +0200846 ACTIVATION_PRECISION_B8 = 0,
847 ACTIVATION_PRECISION_B16 = 1,
848 ACTIVATION_PRECISION_B32 = 2,
849 ACTIVATION_PRECISION_B64 = 3,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200850};
851
Jonny Svärd136810f2021-10-13 16:04:26 +0200852enum activation_type
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200853{
Jonny Svärd136810f2021-10-13 16:04:26 +0200854 ACTIVATION_TYPE_UNSIGNED = 0,
855 ACTIVATION_TYPE_SIGNED = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200856};
857
Jonny Svärd136810f2021-10-13 16:04:26 +0200858enum axi_mem_encoding
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200859{
Jonny Svärd136810f2021-10-13 16:04:26 +0200860 AXI_MEM_ENCODING_DEVICE_NON_BUFFERABLE = 0,
861 AXI_MEM_ENCODING_DEVICE_BUFFERABLE = 1,
862 AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_NON_BUFFERABLE = 2,
863 AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_BUFFERABLE = 3,
864 AXI_MEM_ENCODING_WRITE_THROUGH_NO_ALLOCATE = 4,
865 AXI_MEM_ENCODING_WRITE_THROUGH_READ_ALLOCATE = 5,
866 AXI_MEM_ENCODING_WRITE_THROUGH_WRITE_ALLOCATE = 6,
867 AXI_MEM_ENCODING_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE = 7,
868 AXI_MEM_ENCODING_WRITE_BACK_NO_ALLOCATE = 8,
869 AXI_MEM_ENCODING_WRITE_BACK_READ_ALLOCATE = 9,
870 AXI_MEM_ENCODING_WRITE_BACK_WRITE_ALLOCATE = 10,
871 AXI_MEM_ENCODING_WRITE_BACK_READ_AND_WRITE_ALLOCATE = 11,
872};
873
874enum broadcast_mode
875{
876 BROADCAST_MODE_DISABLE = 0,
877 BROADCAST_MODE_ENABLE = 1,
878};
879
880enum cmd0_opcode
881{
882 CMD0_OPCODE_NPU_OP_STOP = 0,
883 CMD0_OPCODE_NPU_OP_IRQ = 1,
884 CMD0_OPCODE_NPU_OP_CONV = 2,
885 CMD0_OPCODE_NPU_OP_DEPTHWISE = 3,
886 CMD0_OPCODE_NPU_OP_POOL = 5,
887 CMD0_OPCODE_NPU_OP_ELEMENTWISE = 6,
888 CMD0_OPCODE_NPU_OP_DMA_START = 16,
889 CMD0_OPCODE_NPU_OP_DMA_WAIT = 17,
890 CMD0_OPCODE_NPU_OP_KERNEL_WAIT = 18,
891 CMD0_OPCODE_NPU_OP_PMU_MASK = 19,
892 CMD0_OPCODE_NPU_SET_IFM_PAD_TOP = 256,
893 CMD0_OPCODE_NPU_SET_IFM_PAD_LEFT = 257,
894 CMD0_OPCODE_NPU_SET_IFM_PAD_RIGHT = 258,
895 CMD0_OPCODE_NPU_SET_IFM_PAD_BOTTOM = 259,
896 CMD0_OPCODE_NPU_SET_IFM_DEPTH_M1 = 260,
897 CMD0_OPCODE_NPU_SET_IFM_PRECISION = 261,
898 CMD0_OPCODE_NPU_SET_IFM_UPSCALE = 263,
899 CMD0_OPCODE_NPU_SET_IFM_ZERO_POINT = 265,
900 CMD0_OPCODE_NPU_SET_IFM_WIDTH0_M1 = 266,
901 CMD0_OPCODE_NPU_SET_IFM_HEIGHT0_M1 = 267,
902 CMD0_OPCODE_NPU_SET_IFM_HEIGHT1_M1 = 268,
903 CMD0_OPCODE_NPU_SET_IFM_IB_END = 269,
904 CMD0_OPCODE_NPU_SET_IFM_REGION = 271,
905 CMD0_OPCODE_NPU_SET_OFM_WIDTH_M1 = 273,
906 CMD0_OPCODE_NPU_SET_OFM_HEIGHT_M1 = 274,
907 CMD0_OPCODE_NPU_SET_OFM_DEPTH_M1 = 275,
908 CMD0_OPCODE_NPU_SET_OFM_PRECISION = 276,
909 CMD0_OPCODE_NPU_SET_OFM_BLK_WIDTH_M1 = 277,
910 CMD0_OPCODE_NPU_SET_OFM_BLK_HEIGHT_M1 = 278,
911 CMD0_OPCODE_NPU_SET_OFM_BLK_DEPTH_M1 = 279,
912 CMD0_OPCODE_NPU_SET_OFM_ZERO_POINT = 280,
913 CMD0_OPCODE_NPU_SET_OFM_WIDTH0_M1 = 282,
914 CMD0_OPCODE_NPU_SET_OFM_HEIGHT0_M1 = 283,
915 CMD0_OPCODE_NPU_SET_OFM_HEIGHT1_M1 = 284,
916 CMD0_OPCODE_NPU_SET_OFM_REGION = 287,
917 CMD0_OPCODE_NPU_SET_KERNEL_WIDTH_M1 = 288,
918 CMD0_OPCODE_NPU_SET_KERNEL_HEIGHT_M1 = 289,
919 CMD0_OPCODE_NPU_SET_KERNEL_STRIDE = 290,
920 CMD0_OPCODE_NPU_SET_ACC_FORMAT = 292,
921 CMD0_OPCODE_NPU_SET_ACTIVATION = 293,
922 CMD0_OPCODE_NPU_SET_ACTIVATION_MIN = 294,
923 CMD0_OPCODE_NPU_SET_ACTIVATION_MAX = 295,
924 CMD0_OPCODE_NPU_SET_WEIGHT_REGION = 296,
925 CMD0_OPCODE_NPU_SET_SCALE_REGION = 297,
926 CMD0_OPCODE_NPU_SET_AB_START = 301,
927 CMD0_OPCODE_NPU_SET_BLOCKDEP = 303,
928 CMD0_OPCODE_NPU_SET_DMA0_SRC_REGION = 304,
929 CMD0_OPCODE_NPU_SET_DMA0_DST_REGION = 305,
930 CMD0_OPCODE_NPU_SET_DMA0_SIZE0 = 306,
931 CMD0_OPCODE_NPU_SET_DMA0_SIZE1 = 307,
932 CMD0_OPCODE_NPU_SET_IFM2_BROADCAST = 384,
933 CMD0_OPCODE_NPU_SET_IFM2_SCALAR = 385,
934 CMD0_OPCODE_NPU_SET_IFM2_PRECISION = 389,
935 CMD0_OPCODE_NPU_SET_IFM2_ZERO_POINT = 393,
936 CMD0_OPCODE_NPU_SET_IFM2_WIDTH0_M1 = 394,
937 CMD0_OPCODE_NPU_SET_IFM2_HEIGHT0_M1 = 395,
938 CMD0_OPCODE_NPU_SET_IFM2_HEIGHT1_M1 = 396,
939 CMD0_OPCODE_NPU_SET_IFM2_IB_START = 397,
940 CMD0_OPCODE_NPU_SET_IFM2_REGION = 399,
941};
942
943enum cmd1_opcode
944{
945 CMD1_OPCODE_NPU_SET_IFM_BASE0 = 0,
946 CMD1_OPCODE_NPU_SET_IFM_BASE1 = 1,
947 CMD1_OPCODE_NPU_SET_IFM_BASE2 = 2,
948 CMD1_OPCODE_NPU_SET_IFM_BASE3 = 3,
949 CMD1_OPCODE_NPU_SET_IFM_STRIDE_X = 4,
950 CMD1_OPCODE_NPU_SET_IFM_STRIDE_Y = 5,
951 CMD1_OPCODE_NPU_SET_IFM_STRIDE_C = 6,
952 CMD1_OPCODE_NPU_SET_OFM_BASE0 = 16,
953 CMD1_OPCODE_NPU_SET_OFM_BASE1 = 17,
954 CMD1_OPCODE_NPU_SET_OFM_BASE2 = 18,
955 CMD1_OPCODE_NPU_SET_OFM_BASE3 = 19,
956 CMD1_OPCODE_NPU_SET_OFM_STRIDE_X = 20,
957 CMD1_OPCODE_NPU_SET_OFM_STRIDE_Y = 21,
958 CMD1_OPCODE_NPU_SET_OFM_STRIDE_C = 22,
959 CMD1_OPCODE_NPU_SET_WEIGHT_BASE = 32,
960 CMD1_OPCODE_NPU_SET_WEIGHT_LENGTH = 33,
961 CMD1_OPCODE_NPU_SET_SCALE_BASE = 34,
962 CMD1_OPCODE_NPU_SET_SCALE_LENGTH = 35,
963 CMD1_OPCODE_NPU_SET_OFM_SCALE = 36,
964 CMD1_OPCODE_NPU_SET_OPA_SCALE = 37,
965 CMD1_OPCODE_NPU_SET_OPB_SCALE = 38,
966 CMD1_OPCODE_NPU_SET_DMA0_SRC = 48,
967 CMD1_OPCODE_NPU_SET_DMA0_DST = 49,
968 CMD1_OPCODE_NPU_SET_DMA0_LEN = 50,
969 CMD1_OPCODE_NPU_SET_IFM2_BASE0 = 128,
970 CMD1_OPCODE_NPU_SET_IFM2_BASE1 = 129,
971 CMD1_OPCODE_NPU_SET_IFM2_BASE2 = 130,
972 CMD1_OPCODE_NPU_SET_IFM2_BASE3 = 131,
973 CMD1_OPCODE_NPU_SET_IFM2_STRIDE_X = 132,
974 CMD1_OPCODE_NPU_SET_IFM2_STRIDE_Y = 133,
975 CMD1_OPCODE_NPU_SET_IFM2_STRIDE_C = 134,
976 CMD1_OPCODE_NPU_SET_USER_DEFINED0 = 160,
977 CMD1_OPCODE_NPU_SET_USER_DEFINED1 = 161,
978 CMD1_OPCODE_NPU_SET_USER_DEFINED2 = 162,
979 CMD1_OPCODE_NPU_SET_USER_DEFINED3 = 163,
980 CMD1_OPCODE_NPU_SET_USER_DEFINED4 = 164,
981 CMD1_OPCODE_NPU_SET_USER_DEFINED5 = 165,
982 CMD1_OPCODE_NPU_SET_USER_DEFINED6 = 166,
983 CMD1_OPCODE_NPU_SET_USER_DEFINED7 = 167,
984};
985
986enum cmd_ctrl
987{
988 CMD_CTRL_CMD0_CTRL = 0,
989 CMD_CTRL_CMD1_CTRL = 1,
990};
991
992enum custom_dma_cs
993{
994 CUSTOM_DMA_CS_DISABLE = 0,
995 CUSTOM_DMA_CS_ENABLE = 1,
996};
997
998enum custom_dma
999{
1000 CUSTOM_DMA_NOT_IMPLEMENTED = 0,
1001 CUSTOM_DMA_IMPLEMENTED = 1,
1002};
1003
1004enum dma_fault_src
1005{
1006 DMA_FAULT_SRC_AXI_M0 = 0,
1007 DMA_FAULT_SRC_AXI_M1 = 1,
1008};
1009
1010enum dma_region_mode
1011{
1012 DMA_REGION_MODE_EXTERNAL = 0,
1013 DMA_REGION_MODE_INTERNAL = 1,
1014};
1015
1016enum dma_stride_mode
1017{
1018 DMA_STRIDE_MODE_D1 = 0,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001019};
1020
1021enum elementwise_mode
1022{
1023 ELEMENTWISE_MODE_MUL = 0,
1024 ELEMENTWISE_MODE_ADD = 1,
1025 ELEMENTWISE_MODE_SUB = 2,
1026 ELEMENTWISE_MODE_MIN = 3,
1027 ELEMENTWISE_MODE_MAX = 4,
1028 ELEMENTWISE_MODE_LRELU = 5,
1029 ELEMENTWISE_MODE_ABS = 6,
1030 ELEMENTWISE_MODE_CLZ = 7,
1031 ELEMENTWISE_MODE_SHR = 8,
1032 ELEMENTWISE_MODE_SHL = 9,
1033};
1034
Jonny Svärd136810f2021-10-13 16:04:26 +02001035enum functional_safety
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001036{
Jonny Svärd136810f2021-10-13 16:04:26 +02001037 FUNCTIONAL_SAFETY_NOT_IMPLEMENTED = 0,
1038 FUNCTIONAL_SAFETY_IMPLEMENTED = 1,
1039};
1040
1041enum ifm2_operand_order
1042{
1043 IFM2_OPERAND_ORDER_ORDER_B = 0,
1044 IFM2_OPERAND_ORDER_ORDER_A = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001045};
1046
1047enum ifm_scale_mode
1048{
Jonny Svärd136810f2021-10-13 16:04:26 +02001049 IFM_SCALE_MODE_OPA_OPB_16 = 0,
1050 IFM_SCALE_MODE_OPA_32 = 1,
1051 IFM_SCALE_MODE_OPB_32 = 2,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001052};
1053
Jonny Svärd136810f2021-10-13 16:04:26 +02001054enum ifm_upscale_mode
Diqing Zhong04118062020-04-15 01:19:12 +02001055{
Jonny Svärd136810f2021-10-13 16:04:26 +02001056 IFM_UPSCALE_MODE_NONE = 0,
1057 IFM_UPSCALE_MODE_NEAREST = 1,
1058 IFM_UPSCALE_MODE_ZEROS = 2,
Diqing Zhong04118062020-04-15 01:19:12 +02001059};
1060
Jonny Svärd136810f2021-10-13 16:04:26 +02001061enum kernel_decomposition
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001062{
Jonny Svärd136810f2021-10-13 16:04:26 +02001063 KERNEL_DECOMPOSITION_D8X8 = 0,
1064 KERNEL_DECOMPOSITION_D4X4 = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001065};
1066
Jonny Svärd136810f2021-10-13 16:04:26 +02001067enum kernel_dilation
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001068{
Jonny Svärd136810f2021-10-13 16:04:26 +02001069 KERNEL_DILATION_NONE = 0,
1070 KERNEL_DILATION_X2 = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001071};
1072
Jonny Svärd136810f2021-10-13 16:04:26 +02001073enum max_beats
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001074{
Jonny Svärd136810f2021-10-13 16:04:26 +02001075 MAX_BEATS_B64 = 0,
1076 MAX_BEATS_B128 = 1,
1077 MAX_BEATS_B256 = 2,
1078};
1079
1080enum mem_attr
1081{
1082 MEM_ATTR_AXI0_OUTSTANDING_COUNTER0 = 0,
1083 MEM_ATTR_AXI0_OUTSTANDING_COUNTER1 = 1,
1084 MEM_ATTR_AXI1_OUTSTANDING_COUNTER2 = 2,
1085 MEM_ATTR_AXI1_OUTSTANDING_COUNTER3 = 3,
1086};
1087
1088enum ofm_scale_mode
1089{
1090 OFM_SCALE_MODE_PER_CHANNEL = 0,
1091 OFM_SCALE_MODE_GLOBAL = 1,
1092};
1093
1094enum pmu_axi_channel
1095{
1096 PMU_AXI_CHANNEL_RD_CMD = 0,
1097 PMU_AXI_CHANNEL_RD_IFM = 1,
1098 PMU_AXI_CHANNEL_RD_WEIGHTS = 2,
1099 PMU_AXI_CHANNEL_RD_SCALE_BIAS = 3,
1100 PMU_AXI_CHANNEL_RD_MEM2MEM = 4,
1101 PMU_AXI_CHANNEL_WR_OFM = 8,
1102 PMU_AXI_CHANNEL_WR_MEM2MEM = 9,
1103};
1104
1105enum pmu_event
1106{
1107 PMU_EVENT_NO_EVENT = 0,
1108 PMU_EVENT_CYCLE = 17,
1109 PMU_EVENT_NPU_IDLE = 32,
1110 PMU_EVENT_CC_STALLED_ON_BLOCKDEP = 33,
1111 PMU_EVENT_CC_STALLED_ON_SHRAM_RECONFIG = 34,
1112 PMU_EVENT_NPU_ACTIVE = 35,
1113 PMU_EVENT_MAC_ACTIVE = 48,
1114 PMU_EVENT_MAC_ACTIVE_8BIT = 49,
1115 PMU_EVENT_MAC_ACTIVE_16BIT = 50,
1116 PMU_EVENT_MAC_DPU_ACTIVE = 51,
1117 PMU_EVENT_MAC_STALLED_BY_WD_ACC = 52,
1118 PMU_EVENT_MAC_STALLED_BY_WD = 53,
1119 PMU_EVENT_MAC_STALLED_BY_ACC = 54,
1120 PMU_EVENT_MAC_STALLED_BY_IB = 55,
1121 PMU_EVENT_MAC_ACTIVE_32BIT = 56,
1122 PMU_EVENT_MAC_STALLED_BY_INT_W = 57,
1123 PMU_EVENT_MAC_STALLED_BY_INT_ACC = 58,
1124 PMU_EVENT_AO_ACTIVE = 64,
1125 PMU_EVENT_AO_ACTIVE_8BIT = 65,
1126 PMU_EVENT_AO_ACTIVE_16BIT = 66,
1127 PMU_EVENT_AO_STALLED_BY_OFMP_OB = 67,
1128 PMU_EVENT_AO_STALLED_BY_OFMP = 68,
1129 PMU_EVENT_AO_STALLED_BY_OB = 69,
1130 PMU_EVENT_AO_STALLED_BY_ACC_IB = 70,
1131 PMU_EVENT_AO_STALLED_BY_ACC = 71,
1132 PMU_EVENT_AO_STALLED_BY_IB = 72,
1133 PMU_EVENT_WD_ACTIVE = 80,
1134 PMU_EVENT_WD_STALLED = 81,
1135 PMU_EVENT_WD_STALLED_BY_WS = 82,
1136 PMU_EVENT_WD_STALLED_BY_WD_BUF = 83,
1137 PMU_EVENT_WD_PARSE_ACTIVE = 84,
1138 PMU_EVENT_WD_PARSE_STALLED = 85,
1139 PMU_EVENT_WD_PARSE_STALLED_IN = 86,
1140 PMU_EVENT_WD_PARSE_STALLED_OUT = 87,
1141 PMU_EVENT_WD_TRANS_WS = 88,
1142 PMU_EVENT_WD_TRANS_WB = 89,
1143 PMU_EVENT_WD_TRANS_DW0 = 90,
1144 PMU_EVENT_WD_TRANS_DW1 = 91,
1145 PMU_EVENT_AXI0_RD_TRANS_ACCEPTED = 128,
1146 PMU_EVENT_AXI0_RD_TRANS_COMPLETED = 129,
1147 PMU_EVENT_AXI0_RD_DATA_BEAT_RECEIVED = 130,
1148 PMU_EVENT_AXI0_RD_TRAN_REQ_STALLED = 131,
1149 PMU_EVENT_AXI0_WR_TRANS_ACCEPTED = 132,
1150 PMU_EVENT_AXI0_WR_TRANS_COMPLETED_M = 133,
1151 PMU_EVENT_AXI0_WR_TRANS_COMPLETED_S = 134,
1152 PMU_EVENT_AXI0_WR_DATA_BEAT_WRITTEN = 135,
1153 PMU_EVENT_AXI0_WR_TRAN_REQ_STALLED = 136,
1154 PMU_EVENT_AXI0_WR_DATA_BEAT_STALLED = 137,
1155 PMU_EVENT_AXI0_ENABLED_CYCLES = 140,
1156 PMU_EVENT_AXI0_RD_STALL_LIMIT = 142,
1157 PMU_EVENT_AXI0_WR_STALL_LIMIT = 143,
1158 PMU_EVENT_AXI_LATENCY_ANY = 160,
1159 PMU_EVENT_AXI_LATENCY_32 = 161,
1160 PMU_EVENT_AXI_LATENCY_64 = 162,
1161 PMU_EVENT_AXI_LATENCY_128 = 163,
1162 PMU_EVENT_AXI_LATENCY_256 = 164,
1163 PMU_EVENT_AXI_LATENCY_512 = 165,
1164 PMU_EVENT_AXI_LATENCY_1024 = 166,
1165 PMU_EVENT_ECC_DMA = 176,
1166 PMU_EVENT_ECC_SB0 = 177,
1167 PMU_EVENT_AXI1_RD_TRANS_ACCEPTED = 384,
1168 PMU_EVENT_AXI1_RD_TRANS_COMPLETED = 385,
1169 PMU_EVENT_AXI1_RD_DATA_BEAT_RECEIVED = 386,
1170 PMU_EVENT_AXI1_RD_TRAN_REQ_STALLED = 387,
1171 PMU_EVENT_AXI1_WR_TRANS_ACCEPTED = 388,
1172 PMU_EVENT_AXI1_WR_TRANS_COMPLETED_M = 389,
1173 PMU_EVENT_AXI1_WR_TRANS_COMPLETED_S = 390,
1174 PMU_EVENT_AXI1_WR_DATA_BEAT_WRITTEN = 391,
1175 PMU_EVENT_AXI1_WR_TRAN_REQ_STALLED = 392,
1176 PMU_EVENT_AXI1_WR_DATA_BEAT_STALLED = 393,
1177 PMU_EVENT_AXI1_ENABLED_CYCLES = 396,
1178 PMU_EVENT_AXI1_RD_STALL_LIMIT = 398,
1179 PMU_EVENT_AXI1_WR_STALL_LIMIT = 399,
1180 PMU_EVENT_ECC_SB1 = 433,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001181};
1182
1183enum pooling_mode
1184{
1185 POOLING_MODE_MAX = 0,
1186 POOLING_MODE_AVERAGE = 1,
1187 POOLING_MODE_REDUCE_SUM = 2,
1188};
1189
1190enum privilege_level
1191{
1192 PRIVILEGE_LEVEL_USER = 0,
1193 PRIVILEGE_LEVEL_PRIVILEGED = 1,
1194};
1195
Jonny Svärd136810f2021-10-13 16:04:26 +02001196enum round_mode
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001197{
Jonny Svärd136810f2021-10-13 16:04:26 +02001198 ROUND_MODE_DBL = 0,
1199 ROUND_MODE_TRUNCATE = 1,
1200 ROUND_MODE_NATURAL = 2,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001201};
1202
1203enum security_level
1204{
1205 SECURITY_LEVEL_SECURE = 0,
1206 SECURITY_LEVEL_NON_SECURE = 1,
1207};
1208
1209enum state
1210{
1211 STATE_STOPPED = 0,
1212 STATE_RUNNING = 1,
1213};
1214
Jonny Svärd136810f2021-10-13 16:04:26 +02001215enum wd_core_slice_state
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001216{
Jonny Svärd136810f2021-10-13 16:04:26 +02001217 WD_CORE_SLICE_STATE_HEADER = 0,
1218 WD_CORE_SLICE_STATE_PALETTE = 1,
1219 WD_CORE_SLICE_STATE_WEIGHTS = 2,
1220};
1221
1222enum wd_ctrl_state
1223{
1224 WD_CTRL_STATE_IDLE = 0,
1225 WD_CTRL_STATE_DRAIN = 1,
1226 WD_CTRL_STATE_OFD_INIT = 2,
1227 WD_CTRL_STATE_OFD_RUN = 3,
1228};
1229
1230enum weight_order
1231{
1232 WEIGHT_ORDER_DEPTH_FIRST = 0,
1233 WEIGHT_ORDER_PART_KERNEL_FIRST = 1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001234};
1235
1236#endif
1237
Jonny Svärd136810f2021-10-13 16:04:26 +02001238#ifdef NPU_DISASSEMBLE
1239
1240static const char *acc_format_str[] = {
1241 "ACC_FORMAT_I32",
1242 "ACC_FORMAT_I40",
1243 "ACC_FORMAT_F16",
1244};
1245
1246static const char *activation_clip_range_str[] = {
1247 "ACTIVATION_CLIP_RANGE_OFM_PRECISION",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001248 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001249 "ACTIVATION_CLIP_RANGE_FORCE_UINT8",
1250 "ACTIVATION_CLIP_RANGE_FORCE_INT8",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001251 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001252 "ACTIVATION_CLIP_RANGE_FORCE_INT16",
1253};
1254
1255static const char *activation_format_str[] = {
1256 "ACTIVATION_FORMAT_NHWC",
1257 "ACTIVATION_FORMAT_NHCWB16",
1258};
1259
1260static const char *activation_function_str[] = {
1261 "ACTIVATION_FUNCTION_RELU",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001262 "****",
1263 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001264 "ACTIVATION_FUNCTION_TANH",
1265 "ACTIVATION_FUNCTION_SIGMOID",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001266 "****",
1267 "****",
1268 "****",
1269 "****",
1270 "****",
1271 "****",
1272 "****",
1273 "****",
1274 "****",
1275 "****",
1276 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001277 "ACTIVATION_FUNCTION_TABLE_0",
1278 "ACTIVATION_FUNCTION_TABLE_1",
1279 "ACTIVATION_FUNCTION_TABLE_2",
1280 "ACTIVATION_FUNCTION_TABLE_3",
1281 "ACTIVATION_FUNCTION_TABLE_4",
1282 "ACTIVATION_FUNCTION_TABLE_5",
1283 "ACTIVATION_FUNCTION_TABLE_6",
1284 "ACTIVATION_FUNCTION_TABLE_7",
1285};
1286
1287static const char *activation_precision_str[] = {
1288 "ACTIVATION_PRECISION_B8",
1289 "ACTIVATION_PRECISION_B16",
1290 "ACTIVATION_PRECISION_B32",
1291 "ACTIVATION_PRECISION_B64",
1292};
1293
1294static const char *activation_type_str[] = {
1295 "ACTIVATION_TYPE_UNSIGNED",
1296 "ACTIVATION_TYPE_SIGNED",
1297};
1298
1299static const char *axi_mem_encoding_str[] = {
1300 "AXI_MEM_ENCODING_DEVICE_NON_BUFFERABLE",
1301 "AXI_MEM_ENCODING_DEVICE_BUFFERABLE",
1302 "AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_NON_BUFFERABLE",
1303 "AXI_MEM_ENCODING_NORMAL_NON_CACHEABLE_BUFFERABLE",
1304 "AXI_MEM_ENCODING_WRITE_THROUGH_NO_ALLOCATE",
1305 "AXI_MEM_ENCODING_WRITE_THROUGH_READ_ALLOCATE",
1306 "AXI_MEM_ENCODING_WRITE_THROUGH_WRITE_ALLOCATE",
1307 "AXI_MEM_ENCODING_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE",
1308 "AXI_MEM_ENCODING_WRITE_BACK_NO_ALLOCATE",
1309 "AXI_MEM_ENCODING_WRITE_BACK_READ_ALLOCATE",
1310 "AXI_MEM_ENCODING_WRITE_BACK_WRITE_ALLOCATE",
1311 "AXI_MEM_ENCODING_WRITE_BACK_READ_AND_WRITE_ALLOCATE",
1312};
1313
1314static const char *broadcast_mode_str[] = {
1315 "BROADCAST_MODE_DISABLE",
1316 "BROADCAST_MODE_ENABLE",
1317};
1318
1319static const char *cmd0_opcode_str[] = {
1320 "CMD0_OPCODE_NPU_OP_STOP",
1321 "CMD0_OPCODE_NPU_OP_IRQ",
1322 "CMD0_OPCODE_NPU_OP_CONV",
1323 "CMD0_OPCODE_NPU_OP_DEPTHWISE",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001324 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001325 "CMD0_OPCODE_NPU_OP_POOL",
1326 "CMD0_OPCODE_NPU_OP_ELEMENTWISE",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001327 "****",
1328 "****",
1329 "****",
1330 "****",
1331 "****",
1332 "****",
1333 "****",
1334 "****",
1335 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001336 "CMD0_OPCODE_NPU_OP_DMA_START",
1337 "CMD0_OPCODE_NPU_OP_DMA_WAIT",
1338 "CMD0_OPCODE_NPU_OP_KERNEL_WAIT",
1339 "CMD0_OPCODE_NPU_OP_PMU_MASK",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001340 "****",
1341 "****",
1342 "****",
1343 "****",
1344 "****",
1345 "****",
1346 "****",
1347 "****",
1348 "****",
1349 "****",
1350 "****",
1351 "****",
1352 "****",
1353 "****",
1354 "****",
1355 "****",
1356 "****",
1357 "****",
1358 "****",
1359 "****",
1360 "****",
1361 "****",
1362 "****",
1363 "****",
1364 "****",
1365 "****",
1366 "****",
1367 "****",
1368 "****",
1369 "****",
1370 "****",
1371 "****",
1372 "****",
1373 "****",
1374 "****",
1375 "****",
1376 "****",
1377 "****",
1378 "****",
1379 "****",
1380 "****",
1381 "****",
1382 "****",
1383 "****",
1384 "****",
1385 "****",
1386 "****",
1387 "****",
1388 "****",
1389 "****",
1390 "****",
1391 "****",
1392 "****",
1393 "****",
1394 "****",
1395 "****",
1396 "****",
1397 "****",
1398 "****",
1399 "****",
1400 "****",
1401 "****",
1402 "****",
1403 "****",
1404 "****",
1405 "****",
1406 "****",
1407 "****",
1408 "****",
1409 "****",
1410 "****",
1411 "****",
1412 "****",
1413 "****",
1414 "****",
1415 "****",
1416 "****",
1417 "****",
1418 "****",
1419 "****",
1420 "****",
1421 "****",
1422 "****",
1423 "****",
1424 "****",
1425 "****",
1426 "****",
1427 "****",
1428 "****",
1429 "****",
1430 "****",
1431 "****",
1432 "****",
1433 "****",
1434 "****",
1435 "****",
1436 "****",
1437 "****",
1438 "****",
1439 "****",
1440 "****",
1441 "****",
1442 "****",
1443 "****",
1444 "****",
1445 "****",
1446 "****",
1447 "****",
1448 "****",
1449 "****",
1450 "****",
1451 "****",
1452 "****",
1453 "****",
1454 "****",
1455 "****",
1456 "****",
1457 "****",
1458 "****",
1459 "****",
1460 "****",
1461 "****",
1462 "****",
1463 "****",
1464 "****",
1465 "****",
1466 "****",
1467 "****",
1468 "****",
1469 "****",
1470 "****",
1471 "****",
1472 "****",
1473 "****",
1474 "****",
1475 "****",
1476 "****",
1477 "****",
1478 "****",
1479 "****",
1480 "****",
1481 "****",
1482 "****",
1483 "****",
1484 "****",
1485 "****",
1486 "****",
1487 "****",
1488 "****",
1489 "****",
1490 "****",
1491 "****",
1492 "****",
1493 "****",
1494 "****",
1495 "****",
1496 "****",
1497 "****",
1498 "****",
1499 "****",
1500 "****",
1501 "****",
1502 "****",
1503 "****",
1504 "****",
1505 "****",
1506 "****",
1507 "****",
1508 "****",
1509 "****",
1510 "****",
1511 "****",
1512 "****",
1513 "****",
1514 "****",
1515 "****",
1516 "****",
1517 "****",
1518 "****",
1519 "****",
1520 "****",
1521 "****",
1522 "****",
1523 "****",
1524 "****",
1525 "****",
1526 "****",
1527 "****",
1528 "****",
1529 "****",
1530 "****",
1531 "****",
1532 "****",
1533 "****",
1534 "****",
1535 "****",
1536 "****",
1537 "****",
1538 "****",
1539 "****",
1540 "****",
1541 "****",
1542 "****",
1543 "****",
1544 "****",
1545 "****",
1546 "****",
1547 "****",
1548 "****",
1549 "****",
1550 "****",
1551 "****",
1552 "****",
1553 "****",
1554 "****",
1555 "****",
1556 "****",
1557 "****",
1558 "****",
1559 "****",
1560 "****",
1561 "****",
1562 "****",
1563 "****",
1564 "****",
1565 "****",
1566 "****",
1567 "****",
1568 "****",
1569 "****",
1570 "****",
1571 "****",
1572 "****",
1573 "****",
1574 "****",
1575 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001576 "CMD0_OPCODE_NPU_SET_IFM_PAD_TOP",
1577 "CMD0_OPCODE_NPU_SET_IFM_PAD_LEFT",
1578 "CMD0_OPCODE_NPU_SET_IFM_PAD_RIGHT",
1579 "CMD0_OPCODE_NPU_SET_IFM_PAD_BOTTOM",
1580 "CMD0_OPCODE_NPU_SET_IFM_DEPTH_M1",
1581 "CMD0_OPCODE_NPU_SET_IFM_PRECISION",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001582 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001583 "CMD0_OPCODE_NPU_SET_IFM_UPSCALE",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001584 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001585 "CMD0_OPCODE_NPU_SET_IFM_ZERO_POINT",
1586 "CMD0_OPCODE_NPU_SET_IFM_WIDTH0_M1",
1587 "CMD0_OPCODE_NPU_SET_IFM_HEIGHT0_M1",
1588 "CMD0_OPCODE_NPU_SET_IFM_HEIGHT1_M1",
1589 "CMD0_OPCODE_NPU_SET_IFM_IB_END",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001590 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001591 "CMD0_OPCODE_NPU_SET_IFM_REGION",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001592 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001593 "CMD0_OPCODE_NPU_SET_OFM_WIDTH_M1",
1594 "CMD0_OPCODE_NPU_SET_OFM_HEIGHT_M1",
1595 "CMD0_OPCODE_NPU_SET_OFM_DEPTH_M1",
1596 "CMD0_OPCODE_NPU_SET_OFM_PRECISION",
1597 "CMD0_OPCODE_NPU_SET_OFM_BLK_WIDTH_M1",
1598 "CMD0_OPCODE_NPU_SET_OFM_BLK_HEIGHT_M1",
1599 "CMD0_OPCODE_NPU_SET_OFM_BLK_DEPTH_M1",
1600 "CMD0_OPCODE_NPU_SET_OFM_ZERO_POINT",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001601 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001602 "CMD0_OPCODE_NPU_SET_OFM_WIDTH0_M1",
1603 "CMD0_OPCODE_NPU_SET_OFM_HEIGHT0_M1",
1604 "CMD0_OPCODE_NPU_SET_OFM_HEIGHT1_M1",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001605 "****",
1606 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001607 "CMD0_OPCODE_NPU_SET_OFM_REGION",
1608 "CMD0_OPCODE_NPU_SET_KERNEL_WIDTH_M1",
1609 "CMD0_OPCODE_NPU_SET_KERNEL_HEIGHT_M1",
1610 "CMD0_OPCODE_NPU_SET_KERNEL_STRIDE",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001611 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001612 "CMD0_OPCODE_NPU_SET_ACC_FORMAT",
1613 "CMD0_OPCODE_NPU_SET_ACTIVATION",
1614 "CMD0_OPCODE_NPU_SET_ACTIVATION_MIN",
1615 "CMD0_OPCODE_NPU_SET_ACTIVATION_MAX",
1616 "CMD0_OPCODE_NPU_SET_WEIGHT_REGION",
1617 "CMD0_OPCODE_NPU_SET_SCALE_REGION",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001618 "****",
1619 "****",
1620 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001621 "CMD0_OPCODE_NPU_SET_AB_START",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001622 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001623 "CMD0_OPCODE_NPU_SET_BLOCKDEP",
1624 "CMD0_OPCODE_NPU_SET_DMA0_SRC_REGION",
1625 "CMD0_OPCODE_NPU_SET_DMA0_DST_REGION",
1626 "CMD0_OPCODE_NPU_SET_DMA0_SIZE0",
1627 "CMD0_OPCODE_NPU_SET_DMA0_SIZE1",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001628 "****",
1629 "****",
1630 "****",
1631 "****",
1632 "****",
1633 "****",
1634 "****",
1635 "****",
1636 "****",
1637 "****",
1638 "****",
1639 "****",
1640 "****",
1641 "****",
1642 "****",
1643 "****",
1644 "****",
1645 "****",
1646 "****",
1647 "****",
1648 "****",
1649 "****",
1650 "****",
1651 "****",
1652 "****",
1653 "****",
1654 "****",
1655 "****",
1656 "****",
1657 "****",
1658 "****",
1659 "****",
1660 "****",
1661 "****",
1662 "****",
1663 "****",
1664 "****",
1665 "****",
1666 "****",
1667 "****",
1668 "****",
1669 "****",
1670 "****",
1671 "****",
1672 "****",
1673 "****",
1674 "****",
1675 "****",
1676 "****",
1677 "****",
1678 "****",
1679 "****",
1680 "****",
1681 "****",
1682 "****",
1683 "****",
1684 "****",
1685 "****",
1686 "****",
1687 "****",
1688 "****",
1689 "****",
1690 "****",
1691 "****",
1692 "****",
1693 "****",
1694 "****",
1695 "****",
1696 "****",
1697 "****",
1698 "****",
1699 "****",
1700 "****",
1701 "****",
1702 "****",
1703 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001704 "CMD0_OPCODE_NPU_SET_IFM2_BROADCAST",
1705 "CMD0_OPCODE_NPU_SET_IFM2_SCALAR",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001706 "****",
1707 "****",
1708 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001709 "CMD0_OPCODE_NPU_SET_IFM2_PRECISION",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001710 "****",
1711 "****",
1712 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001713 "CMD0_OPCODE_NPU_SET_IFM2_ZERO_POINT",
1714 "CMD0_OPCODE_NPU_SET_IFM2_WIDTH0_M1",
1715 "CMD0_OPCODE_NPU_SET_IFM2_HEIGHT0_M1",
1716 "CMD0_OPCODE_NPU_SET_IFM2_HEIGHT1_M1",
1717 "CMD0_OPCODE_NPU_SET_IFM2_IB_START",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001718 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001719 "CMD0_OPCODE_NPU_SET_IFM2_REGION",
1720};
1721
1722static const char *cmd1_opcode_str[] = {
Jonny Svärd13cb0892021-11-16 18:43:04 +01001723 "CMD1_OPCODE_NPU_SET_IFM_BASE0",
1724 "CMD1_OPCODE_NPU_SET_IFM_BASE1",
1725 "CMD1_OPCODE_NPU_SET_IFM_BASE2",
1726 "CMD1_OPCODE_NPU_SET_IFM_BASE3",
1727 "CMD1_OPCODE_NPU_SET_IFM_STRIDE_X",
1728 "CMD1_OPCODE_NPU_SET_IFM_STRIDE_Y",
1729 "CMD1_OPCODE_NPU_SET_IFM_STRIDE_C",
1730 "****",
1731 "****",
1732 "****",
1733 "****",
1734 "****",
1735 "****",
1736 "****",
1737 "****",
1738 "****",
1739 "CMD1_OPCODE_NPU_SET_OFM_BASE0",
1740 "CMD1_OPCODE_NPU_SET_OFM_BASE1",
1741 "CMD1_OPCODE_NPU_SET_OFM_BASE2",
1742 "CMD1_OPCODE_NPU_SET_OFM_BASE3",
1743 "CMD1_OPCODE_NPU_SET_OFM_STRIDE_X",
1744 "CMD1_OPCODE_NPU_SET_OFM_STRIDE_Y",
1745 "CMD1_OPCODE_NPU_SET_OFM_STRIDE_C",
1746 "****",
1747 "****",
1748 "****",
1749 "****",
1750 "****",
1751 "****",
1752 "****",
1753 "****",
1754 "****",
1755 "CMD1_OPCODE_NPU_SET_WEIGHT_BASE",
1756 "CMD1_OPCODE_NPU_SET_WEIGHT_LENGTH",
1757 "CMD1_OPCODE_NPU_SET_SCALE_BASE",
1758 "CMD1_OPCODE_NPU_SET_SCALE_LENGTH",
1759 "CMD1_OPCODE_NPU_SET_OFM_SCALE",
1760 "CMD1_OPCODE_NPU_SET_OPA_SCALE",
1761 "CMD1_OPCODE_NPU_SET_OPB_SCALE",
1762 "****",
1763 "****",
1764 "****",
1765 "****",
1766 "****",
1767 "****",
1768 "****",
1769 "****",
1770 "****",
1771 "CMD1_OPCODE_NPU_SET_DMA0_SRC",
1772 "CMD1_OPCODE_NPU_SET_DMA0_DST",
1773 "CMD1_OPCODE_NPU_SET_DMA0_LEN",
1774 "****",
1775 "****",
1776 "****",
1777 "****",
1778 "****",
1779 "****",
1780 "****",
1781 "****",
1782 "****",
1783 "****",
1784 "****",
1785 "****",
1786 "****",
1787 "****",
1788 "****",
1789 "****",
1790 "****",
1791 "****",
1792 "****",
1793 "****",
1794 "****",
1795 "****",
1796 "****",
1797 "****",
1798 "****",
1799 "****",
1800 "****",
1801 "****",
1802 "****",
1803 "****",
1804 "****",
1805 "****",
1806 "****",
1807 "****",
1808 "****",
1809 "****",
1810 "****",
1811 "****",
1812 "****",
1813 "****",
1814 "****",
1815 "****",
1816 "****",
1817 "****",
1818 "****",
1819 "****",
1820 "****",
1821 "****",
1822 "****",
1823 "****",
1824 "****",
1825 "****",
1826 "****",
1827 "****",
1828 "****",
1829 "****",
1830 "****",
1831 "****",
1832 "****",
1833 "****",
1834 "****",
1835 "****",
1836 "****",
1837 "****",
1838 "****",
1839 "****",
1840 "****",
1841 "****",
1842 "****",
1843 "****",
1844 "****",
1845 "****",
1846 "****",
1847 "****",
1848 "****",
1849 "****",
1850 "****",
1851 "CMD1_OPCODE_NPU_SET_IFM2_BASE0",
1852 "CMD1_OPCODE_NPU_SET_IFM2_BASE1",
1853 "CMD1_OPCODE_NPU_SET_IFM2_BASE2",
1854 "CMD1_OPCODE_NPU_SET_IFM2_BASE3",
1855 "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_X",
1856 "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_Y",
1857 "CMD1_OPCODE_NPU_SET_IFM2_STRIDE_C",
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 "CMD1_OPCODE_NPU_SET_USER_DEFINED0",
1884 "CMD1_OPCODE_NPU_SET_USER_DEFINED1",
1885 "CMD1_OPCODE_NPU_SET_USER_DEFINED2",
1886 "CMD1_OPCODE_NPU_SET_USER_DEFINED3",
1887 "CMD1_OPCODE_NPU_SET_USER_DEFINED4",
1888 "CMD1_OPCODE_NPU_SET_USER_DEFINED5",
1889 "CMD1_OPCODE_NPU_SET_USER_DEFINED6",
1890 "CMD1_OPCODE_NPU_SET_USER_DEFINED7",
Jonny Svärd136810f2021-10-13 16:04:26 +02001891};
1892
1893static const char *cmd_ctrl_str[] = {
1894 "CMD_CTRL_CMD0_CTRL",
1895 "CMD_CTRL_CMD1_CTRL",
1896};
1897
1898static const char *custom_dma_cs_str[] = {
1899 "CUSTOM_DMA_CS_DISABLE",
1900 "CUSTOM_DMA_CS_ENABLE",
1901};
1902
1903static const char *custom_dma_str[] = {
1904 "CUSTOM_DMA_NOT_IMPLEMENTED",
1905 "CUSTOM_DMA_IMPLEMENTED",
1906};
1907
1908static const char *dma_fault_src_str[] = {
1909 "DMA_FAULT_SRC_AXI_M0",
1910 "DMA_FAULT_SRC_AXI_M1",
1911};
1912
1913static const char *dma_region_mode_str[] = {
1914 "DMA_REGION_MODE_EXTERNAL",
1915 "DMA_REGION_MODE_INTERNAL",
1916};
1917
1918static const char *dma_stride_mode_str[] = {
1919 "DMA_STRIDE_MODE_D1",
1920};
1921
1922static const char *elementwise_mode_str[] = {
1923 "ELEMENTWISE_MODE_MUL",
1924 "ELEMENTWISE_MODE_ADD",
1925 "ELEMENTWISE_MODE_SUB",
1926 "ELEMENTWISE_MODE_MIN",
1927 "ELEMENTWISE_MODE_MAX",
1928 "ELEMENTWISE_MODE_LRELU",
1929 "ELEMENTWISE_MODE_ABS",
1930 "ELEMENTWISE_MODE_CLZ",
1931 "ELEMENTWISE_MODE_SHR",
1932 "ELEMENTWISE_MODE_SHL",
1933};
1934
1935static const char *functional_safety_str[] = {
1936 "FUNCTIONAL_SAFETY_NOT_IMPLEMENTED",
1937 "FUNCTIONAL_SAFETY_IMPLEMENTED",
1938};
1939
1940static const char *ifm2_operand_order_str[] = {
1941 "IFM2_OPERAND_ORDER_ORDER_B",
1942 "IFM2_OPERAND_ORDER_ORDER_A",
1943};
1944
1945static const char *ifm_scale_mode_str[] = {
1946 "IFM_SCALE_MODE_OPA_OPB_16",
1947 "IFM_SCALE_MODE_OPA_32",
1948 "IFM_SCALE_MODE_OPB_32",
1949};
1950
1951static const char *ifm_upscale_mode_str[] = {
1952 "IFM_UPSCALE_MODE_NONE",
1953 "IFM_UPSCALE_MODE_NEAREST",
1954 "IFM_UPSCALE_MODE_ZEROS",
1955};
1956
1957static const char *kernel_decomposition_str[] = {
1958 "KERNEL_DECOMPOSITION_D8X8",
1959 "KERNEL_DECOMPOSITION_D4X4",
1960};
1961
1962static const char *kernel_dilation_str[] = {
1963 "KERNEL_DILATION_NONE",
1964 "KERNEL_DILATION_X2",
1965};
1966
1967static const char *max_beats_str[] = {
1968 "MAX_BEATS_B64",
1969 "MAX_BEATS_B128",
1970 "MAX_BEATS_B256",
1971};
1972
1973static const char *mem_attr_str[] = {
1974 "MEM_ATTR_AXI0_OUTSTANDING_COUNTER0",
1975 "MEM_ATTR_AXI0_OUTSTANDING_COUNTER1",
1976 "MEM_ATTR_AXI1_OUTSTANDING_COUNTER2",
1977 "MEM_ATTR_AXI1_OUTSTANDING_COUNTER3",
1978};
1979
1980static const char *ofm_scale_mode_str[] = {
1981 "OFM_SCALE_MODE_PER_CHANNEL",
1982 "OFM_SCALE_MODE_GLOBAL",
1983};
1984
1985static const char *pmu_axi_channel_str[] = {
1986 "PMU_AXI_CHANNEL_RD_CMD",
1987 "PMU_AXI_CHANNEL_RD_IFM",
1988 "PMU_AXI_CHANNEL_RD_WEIGHTS",
1989 "PMU_AXI_CHANNEL_RD_SCALE_BIAS",
1990 "PMU_AXI_CHANNEL_RD_MEM2MEM",
Jonny Svärd13cb0892021-11-16 18:43:04 +01001991 "****",
1992 "****",
1993 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02001994 "PMU_AXI_CHANNEL_WR_OFM",
1995 "PMU_AXI_CHANNEL_WR_MEM2MEM",
1996};
1997
1998static const char *pmu_event_str[] = {
1999 "PMU_EVENT_NO_EVENT",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002000 "****",
2001 "****",
2002 "****",
2003 "****",
2004 "****",
2005 "****",
2006 "****",
2007 "****",
2008 "****",
2009 "****",
2010 "****",
2011 "****",
2012 "****",
2013 "****",
2014 "****",
2015 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002016 "PMU_EVENT_CYCLE",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002017 "****",
2018 "****",
2019 "****",
2020 "****",
2021 "****",
2022 "****",
2023 "****",
2024 "****",
2025 "****",
2026 "****",
2027 "****",
2028 "****",
2029 "****",
2030 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002031 "PMU_EVENT_NPU_IDLE",
2032 "PMU_EVENT_CC_STALLED_ON_BLOCKDEP",
2033 "PMU_EVENT_CC_STALLED_ON_SHRAM_RECONFIG",
2034 "PMU_EVENT_NPU_ACTIVE",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002035 "****",
2036 "****",
2037 "****",
2038 "****",
2039 "****",
2040 "****",
2041 "****",
2042 "****",
2043 "****",
2044 "****",
2045 "****",
2046 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002047 "PMU_EVENT_MAC_ACTIVE",
2048 "PMU_EVENT_MAC_ACTIVE_8BIT",
2049 "PMU_EVENT_MAC_ACTIVE_16BIT",
2050 "PMU_EVENT_MAC_DPU_ACTIVE",
2051 "PMU_EVENT_MAC_STALLED_BY_WD_ACC",
2052 "PMU_EVENT_MAC_STALLED_BY_WD",
2053 "PMU_EVENT_MAC_STALLED_BY_ACC",
2054 "PMU_EVENT_MAC_STALLED_BY_IB",
2055 "PMU_EVENT_MAC_ACTIVE_32BIT",
2056 "PMU_EVENT_MAC_STALLED_BY_INT_W",
2057 "PMU_EVENT_MAC_STALLED_BY_INT_ACC",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002058 "****",
2059 "****",
2060 "****",
2061 "****",
2062 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002063 "PMU_EVENT_AO_ACTIVE",
2064 "PMU_EVENT_AO_ACTIVE_8BIT",
2065 "PMU_EVENT_AO_ACTIVE_16BIT",
2066 "PMU_EVENT_AO_STALLED_BY_OFMP_OB",
2067 "PMU_EVENT_AO_STALLED_BY_OFMP",
2068 "PMU_EVENT_AO_STALLED_BY_OB",
2069 "PMU_EVENT_AO_STALLED_BY_ACC_IB",
2070 "PMU_EVENT_AO_STALLED_BY_ACC",
2071 "PMU_EVENT_AO_STALLED_BY_IB",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002072 "****",
2073 "****",
2074 "****",
2075 "****",
2076 "****",
2077 "****",
2078 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002079 "PMU_EVENT_WD_ACTIVE",
2080 "PMU_EVENT_WD_STALLED",
2081 "PMU_EVENT_WD_STALLED_BY_WS",
2082 "PMU_EVENT_WD_STALLED_BY_WD_BUF",
2083 "PMU_EVENT_WD_PARSE_ACTIVE",
2084 "PMU_EVENT_WD_PARSE_STALLED",
2085 "PMU_EVENT_WD_PARSE_STALLED_IN",
2086 "PMU_EVENT_WD_PARSE_STALLED_OUT",
2087 "PMU_EVENT_WD_TRANS_WS",
2088 "PMU_EVENT_WD_TRANS_WB",
2089 "PMU_EVENT_WD_TRANS_DW0",
2090 "PMU_EVENT_WD_TRANS_DW1",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002091 "****",
2092 "****",
2093 "****",
2094 "****",
2095 "****",
2096 "****",
2097 "****",
2098 "****",
2099 "****",
2100 "****",
2101 "****",
2102 "****",
2103 "****",
2104 "****",
2105 "****",
2106 "****",
2107 "****",
2108 "****",
2109 "****",
2110 "****",
2111 "****",
2112 "****",
2113 "****",
2114 "****",
2115 "****",
2116 "****",
2117 "****",
2118 "****",
2119 "****",
2120 "****",
2121 "****",
2122 "****",
2123 "****",
2124 "****",
2125 "****",
2126 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002127 "PMU_EVENT_AXI0_RD_TRANS_ACCEPTED",
2128 "PMU_EVENT_AXI0_RD_TRANS_COMPLETED",
2129 "PMU_EVENT_AXI0_RD_DATA_BEAT_RECEIVED",
2130 "PMU_EVENT_AXI0_RD_TRAN_REQ_STALLED",
2131 "PMU_EVENT_AXI0_WR_TRANS_ACCEPTED",
2132 "PMU_EVENT_AXI0_WR_TRANS_COMPLETED_M",
2133 "PMU_EVENT_AXI0_WR_TRANS_COMPLETED_S",
2134 "PMU_EVENT_AXI0_WR_DATA_BEAT_WRITTEN",
2135 "PMU_EVENT_AXI0_WR_TRAN_REQ_STALLED",
2136 "PMU_EVENT_AXI0_WR_DATA_BEAT_STALLED",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002137 "****",
2138 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002139 "PMU_EVENT_AXI0_ENABLED_CYCLES",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002140 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002141 "PMU_EVENT_AXI0_RD_STALL_LIMIT",
2142 "PMU_EVENT_AXI0_WR_STALL_LIMIT",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002143 "****",
2144 "****",
2145 "****",
2146 "****",
2147 "****",
2148 "****",
2149 "****",
2150 "****",
2151 "****",
2152 "****",
2153 "****",
2154 "****",
2155 "****",
2156 "****",
2157 "****",
2158 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002159 "PMU_EVENT_AXI_LATENCY_ANY",
2160 "PMU_EVENT_AXI_LATENCY_32",
2161 "PMU_EVENT_AXI_LATENCY_64",
2162 "PMU_EVENT_AXI_LATENCY_128",
2163 "PMU_EVENT_AXI_LATENCY_256",
2164 "PMU_EVENT_AXI_LATENCY_512",
2165 "PMU_EVENT_AXI_LATENCY_1024",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002166 "****",
2167 "****",
2168 "****",
2169 "****",
2170 "****",
2171 "****",
2172 "****",
2173 "****",
2174 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002175 "PMU_EVENT_ECC_DMA",
2176 "PMU_EVENT_ECC_SB0",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002177 "****",
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 "****",
2223 "****",
2224 "****",
2225 "****",
2226 "****",
2227 "****",
2228 "****",
2229 "****",
2230 "****",
2231 "****",
2232 "****",
2233 "****",
2234 "****",
2235 "****",
2236 "****",
2237 "****",
2238 "****",
2239 "****",
2240 "****",
2241 "****",
2242 "****",
2243 "****",
2244 "****",
2245 "****",
2246 "****",
2247 "****",
2248 "****",
2249 "****",
2250 "****",
2251 "****",
2252 "****",
2253 "****",
2254 "****",
2255 "****",
2256 "****",
2257 "****",
2258 "****",
2259 "****",
2260 "****",
2261 "****",
2262 "****",
2263 "****",
2264 "****",
2265 "****",
2266 "****",
2267 "****",
2268 "****",
2269 "****",
2270 "****",
2271 "****",
2272 "****",
2273 "****",
2274 "****",
2275 "****",
2276 "****",
2277 "****",
2278 "****",
2279 "****",
2280 "****",
2281 "****",
2282 "****",
2283 "****",
2284 "****",
2285 "****",
2286 "****",
2287 "****",
2288 "****",
2289 "****",
2290 "****",
2291 "****",
2292 "****",
2293 "****",
2294 "****",
2295 "****",
2296 "****",
2297 "****",
2298 "****",
2299 "****",
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 "****",
2371 "****",
2372 "****",
2373 "****",
2374 "****",
2375 "****",
2376 "****",
2377 "****",
2378 "****",
2379 "****",
2380 "****",
2381 "****",
2382 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002383 "PMU_EVENT_AXI1_RD_TRANS_ACCEPTED",
2384 "PMU_EVENT_AXI1_RD_TRANS_COMPLETED",
2385 "PMU_EVENT_AXI1_RD_DATA_BEAT_RECEIVED",
2386 "PMU_EVENT_AXI1_RD_TRAN_REQ_STALLED",
2387 "PMU_EVENT_AXI1_WR_TRANS_ACCEPTED",
2388 "PMU_EVENT_AXI1_WR_TRANS_COMPLETED_M",
2389 "PMU_EVENT_AXI1_WR_TRANS_COMPLETED_S",
2390 "PMU_EVENT_AXI1_WR_DATA_BEAT_WRITTEN",
2391 "PMU_EVENT_AXI1_WR_TRAN_REQ_STALLED",
2392 "PMU_EVENT_AXI1_WR_DATA_BEAT_STALLED",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002393 "****",
2394 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002395 "PMU_EVENT_AXI1_ENABLED_CYCLES",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002396 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002397 "PMU_EVENT_AXI1_RD_STALL_LIMIT",
2398 "PMU_EVENT_AXI1_WR_STALL_LIMIT",
Jonny Svärd13cb0892021-11-16 18:43:04 +01002399 "****",
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 "****",
Jonny Svärd136810f2021-10-13 16:04:26 +02002432 "PMU_EVENT_ECC_SB1",
2433};
2434
2435static const char *pooling_mode_str[] = {
2436 "POOLING_MODE_MAX",
2437 "POOLING_MODE_AVERAGE",
2438 "POOLING_MODE_REDUCE_SUM",
2439};
2440
2441static const char *privilege_level_str[] = {
2442 "PRIVILEGE_LEVEL_USER",
2443 "PRIVILEGE_LEVEL_PRIVILEGED",
2444};
2445
2446static const char *round_mode_str[] = {
2447 "ROUND_MODE_DBL",
2448 "ROUND_MODE_TRUNCATE",
2449 "ROUND_MODE_NATURAL",
2450};
2451
2452static const char *security_level_str[] = {
2453 "SECURITY_LEVEL_SECURE",
2454 "SECURITY_LEVEL_NON_SECURE",
2455};
2456
2457static const char *state_str[] = {
2458 "STATE_STOPPED",
2459 "STATE_RUNNING",
2460};
2461
2462static const char *wd_core_slice_state_str[] = {
2463 "WD_CORE_SLICE_STATE_HEADER",
2464 "WD_CORE_SLICE_STATE_PALETTE",
2465 "WD_CORE_SLICE_STATE_WEIGHTS",
2466};
2467
2468static const char *wd_ctrl_state_str[] = {
2469 "WD_CTRL_STATE_IDLE",
2470 "WD_CTRL_STATE_DRAIN",
2471 "WD_CTRL_STATE_OFD_INIT",
2472 "WD_CTRL_STATE_OFD_RUN",
2473};
2474
2475static const char *weight_order_str[] = {
2476 "WEIGHT_ORDER_DEPTH_FIRST",
2477 "WEIGHT_ORDER_PART_KERNEL_FIRST",
2478};
2479
2480#endif
2481
2482// Register type structs
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002483// id_r - ID register
2484struct id_r
2485{
Jonny Svärd136810f2021-10-13 16:04:26 +02002486#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002487 union
2488 {
2489 struct
2490 {
2491 uint32_t version_status : 4; // This is the version of the product
2492 uint32_t version_minor : 4; // This is the n for the P part of an RnPn release number
2493 uint32_t version_major : 4; // This is the n for the R part of an RnPn release number
Jonny Svärd136810f2021-10-13 16:04:26 +02002494 uint32_t product_major : 4; // Product major ID number (unique per base product)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002495 uint32_t arch_patch_rev : 4; // This is the patch number of the architecture version a.b
2496 uint32_t
2497 arch_minor_rev : 8; // This is the minor architecture version number, b in the architecture version a.b
2498 uint32_t
2499 arch_major_rev : 4; // This is the major architecture version number, a in the architecture version a.b
2500 };
2501 uint32_t word;
2502 };
Jonny Svärd136810f2021-10-13 16:04:26 +02002503#else
2504 private:
2505 uint32_t word0;
2506
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002507 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02002508 CONSTEXPR id_r() : word0(269500929) {}
2509 CONSTEXPR id_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002510 CONSTEXPR void operator=(uint32_t value)
2511 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002512 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002513 }
2514 void operator=(uint32_t value) volatile
2515 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002516 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002517 }
2518 CONSTEXPR operator uint32_t()
2519 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002520 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002521 }
2522 operator uint32_t() volatile
2523 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002524 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002525 }
2526 id_r copy() volatile
2527 {
2528 return *this;
2529 }
2530 CONSTEXPR uint32_t get_version_status() const
2531 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002532 uint32_t value = ((1U << 4) - 1) & (word0 >> 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002533 return value;
2534 }
2535 uint32_t get_version_status() const volatile
2536 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002537 uint32_t value = ((1U << 4) - 1) & (word0 >> 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002538 return value;
2539 }
2540 CONSTEXPR id_r &set_version_status(uint32_t value)
2541 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002542 word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & value) << 0);
2543 return *this;
2544 }
2545 volatile id_r &set_version_status(uint32_t value) volatile
2546 {
2547 word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & value) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002548 return *this;
2549 }
2550 CONSTEXPR uint32_t get_version_minor() const
2551 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002552 uint32_t value = ((1U << 4) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002553 return value;
2554 }
2555 uint32_t get_version_minor() const volatile
2556 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002557 uint32_t value = ((1U << 4) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002558 return value;
2559 }
2560 CONSTEXPR id_r &set_version_minor(uint32_t value)
2561 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002562 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & value) << 4);
2563 return *this;
2564 }
2565 volatile id_r &set_version_minor(uint32_t value) volatile
2566 {
2567 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & value) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002568 return *this;
2569 }
2570 CONSTEXPR uint32_t get_version_major() const
2571 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002572 uint32_t value = ((1U << 4) - 1) & (word0 >> 8);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002573 return value;
2574 }
2575 uint32_t get_version_major() const volatile
2576 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002577 uint32_t value = ((1U << 4) - 1) & (word0 >> 8);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002578 return value;
2579 }
2580 CONSTEXPR id_r &set_version_major(uint32_t value)
2581 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002582 word0 = (((~((1U << 4) - 1)) << 8) & word0) | ((((1U << 4) - 1) & value) << 8);
2583 return *this;
2584 }
2585 volatile id_r &set_version_major(uint32_t value) volatile
2586 {
2587 word0 = (((~((1U << 4) - 1)) << 8) & word0) | ((((1U << 4) - 1) & value) << 8);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002588 return *this;
2589 }
2590 CONSTEXPR uint32_t get_product_major() const
2591 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002592 uint32_t value = ((1U << 4) - 1) & (word0 >> 12);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002593 return value;
2594 }
2595 uint32_t get_product_major() const volatile
2596 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002597 uint32_t value = ((1U << 4) - 1) & (word0 >> 12);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002598 return value;
2599 }
2600 CONSTEXPR id_r &set_product_major(uint32_t value)
2601 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002602 word0 = (((~((1U << 4) - 1)) << 12) & word0) | ((((1U << 4) - 1) & value) << 12);
2603 return *this;
2604 }
2605 volatile id_r &set_product_major(uint32_t value) volatile
2606 {
2607 word0 = (((~((1U << 4) - 1)) << 12) & word0) | ((((1U << 4) - 1) & value) << 12);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002608 return *this;
2609 }
2610 CONSTEXPR uint32_t get_arch_patch_rev() const
2611 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002612 uint32_t value = ((1U << 4) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002613 return value;
2614 }
2615 uint32_t get_arch_patch_rev() const volatile
2616 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002617 uint32_t value = ((1U << 4) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002618 return value;
2619 }
2620 CONSTEXPR id_r &set_arch_patch_rev(uint32_t value)
2621 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002622 word0 = (((~((1U << 4) - 1)) << 16) & word0) | ((((1U << 4) - 1) & value) << 16);
2623 return *this;
2624 }
2625 volatile id_r &set_arch_patch_rev(uint32_t value) volatile
2626 {
2627 word0 = (((~((1U << 4) - 1)) << 16) & word0) | ((((1U << 4) - 1) & value) << 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002628 return *this;
2629 }
2630 CONSTEXPR uint32_t get_arch_minor_rev() const
2631 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002632 uint32_t value = ((1U << 8) - 1) & (word0 >> 20);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002633 return value;
2634 }
2635 uint32_t get_arch_minor_rev() const volatile
2636 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002637 uint32_t value = ((1U << 8) - 1) & (word0 >> 20);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002638 return value;
2639 }
2640 CONSTEXPR id_r &set_arch_minor_rev(uint32_t value)
2641 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002642 word0 = (((~((1U << 8) - 1)) << 20) & word0) | ((((1U << 8) - 1) & value) << 20);
2643 return *this;
2644 }
2645 volatile id_r &set_arch_minor_rev(uint32_t value) volatile
2646 {
2647 word0 = (((~((1U << 8) - 1)) << 20) & word0) | ((((1U << 8) - 1) & value) << 20);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002648 return *this;
2649 }
2650 CONSTEXPR uint32_t get_arch_major_rev() const
2651 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002652 uint32_t value = ((1U << 4) - 1) & (word0 >> 28);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002653 return value;
2654 }
2655 uint32_t get_arch_major_rev() const volatile
2656 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002657 uint32_t value = ((1U << 4) - 1) & (word0 >> 28);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002658 return value;
2659 }
2660 CONSTEXPR id_r &set_arch_major_rev(uint32_t value)
2661 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002662 word0 = (((~((1U << 4) - 1)) << 28) & word0) | ((((1U << 4) - 1) & value) << 28);
2663 return *this;
2664 }
2665 volatile id_r &set_arch_major_rev(uint32_t value) volatile
2666 {
2667 word0 = (((~((1U << 4) - 1)) << 28) & word0) | ((((1U << 4) - 1) & value) << 28);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002668 return *this;
2669 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002670#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002671};
2672
2673// status_r - Register describes the current operating status of the NPU
2674struct status_r
2675{
Jonny Svärd136810f2021-10-13 16:04:26 +02002676#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002677 union
2678 {
2679 struct
2680 {
2681 uint32_t state : 1; // NPU state, 0 = Stopped, 1 = Running
2682 uint32_t irq_raised : 1; // Raw IRQ status, 0 = IRQ not raised, 1 = IRQ raised. IRQ is cleared using command
2683 // register bit 1
2684 uint32_t
2685 bus_status : 1; // 0=OK, 1=Bus abort detected and processing halted (NPU will reach IDLE state and not
2686 // to start process any more commands/AXI transactions). Can only be cleared by a reset
2687 uint32_t reset_status : 1; // Reset is ongoing and only this register can be read (other registers read as 0
2688 // and writes are ignored.) A value of 0 means NPU is not being reset and can be
2689 // accessed as normal
2690 uint32_t
2691 cmd_parse_error : 1; // 0=No error 1=Command stream parsing error detected. Can only be cleared by reset
2692 uint32_t cmd_end_reached : 1; // 0=Not reached, 1=Reached. Cleared by writing QBASE or QSIZE when NPU is in
2693 // stopped state
2694 uint32_t pmu_irq_raised : 1; // 0=No PMU IRQ, 1=PMU IRQ raised. Cleared by using command register bit 1
2695 uint32_t wd_fault : 1; // Weight decoder state: 0=no fault 1=weight decoder decompression fault. Can only be
2696 // cleared by reset
Stefan Nannessone2e70242020-08-19 16:01:29 +02002697 uint32_t ecc_fault : 1; // ECC state for internal RAMs: 0=no fault 1=ECC fault signalled. Can only be
2698 // cleared by reset
2699 uint32_t reserved0 : 2;
Jonny Svärd136810f2021-10-13 16:04:26 +02002700 uint32_t faulting_interface : 1; // Faulting interface on bus abort
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002701 uint32_t faulting_channel : 4; // Faulting channel on a bus abort. Read: 0=Cmd 1=IFM 2=Weights 3=Scale+Bias
2702 // 4=Mem2Mem; Write: 8=OFM 9=Mem2Mem
2703 uint32_t irq_history_mask : 16; // IRQ History mask
2704 };
2705 uint32_t word;
2706 };
Jonny Svärd136810f2021-10-13 16:04:26 +02002707#else
2708 private:
2709 uint32_t word0;
2710
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002711 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02002712 CONSTEXPR status_r() : word0(8) {}
2713 CONSTEXPR status_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002714 CONSTEXPR void operator=(uint32_t value)
2715 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002716 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002717 }
2718 void operator=(uint32_t value) volatile
2719 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002720 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002721 }
2722 CONSTEXPR operator uint32_t()
2723 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002724 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002725 }
2726 operator uint32_t() volatile
2727 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002728 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002729 }
2730 status_r copy() volatile
2731 {
2732 return *this;
2733 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002734 CONSTEXPR NPU_NAMESPACE::state get_state() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002735 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002736 NPU_NAMESPACE::state value = static_cast<NPU_NAMESPACE::state>(((1U << 1) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002737 return value;
2738 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002739 NPU_NAMESPACE::state get_state() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002740 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002741 NPU_NAMESPACE::state value = static_cast<NPU_NAMESPACE::state>(((1U << 1) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002742 return value;
2743 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002744 CONSTEXPR status_r &set_state(NPU_NAMESPACE::state value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002745 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002746 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002747 return *this;
2748 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01002749 volatile status_r &set_state(NPU_NAMESPACE::state value) volatile
2750 {
2751 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
2752 return *this;
2753 }
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002754 CONSTEXPR uint32_t get_irq_raised() const
2755 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002756 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002757 return value;
2758 }
2759 uint32_t get_irq_raised() const volatile
2760 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002761 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002762 return value;
2763 }
2764 CONSTEXPR status_r &set_irq_raised(uint32_t value)
2765 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002766 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
2767 return *this;
2768 }
2769 volatile status_r &set_irq_raised(uint32_t value) volatile
2770 {
2771 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002772 return *this;
2773 }
2774 CONSTEXPR uint32_t get_bus_status() const
2775 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002776 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002777 return value;
2778 }
2779 uint32_t get_bus_status() const volatile
2780 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002781 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002782 return value;
2783 }
2784 CONSTEXPR status_r &set_bus_status(uint32_t value)
2785 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002786 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
2787 return *this;
2788 }
2789 volatile status_r &set_bus_status(uint32_t value) volatile
2790 {
2791 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002792 return *this;
2793 }
2794 CONSTEXPR uint32_t get_reset_status() const
2795 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002796 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002797 return value;
2798 }
2799 uint32_t get_reset_status() const volatile
2800 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002801 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002802 return value;
2803 }
2804 CONSTEXPR status_r &set_reset_status(uint32_t value)
2805 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002806 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
2807 return *this;
2808 }
2809 volatile status_r &set_reset_status(uint32_t value) volatile
2810 {
2811 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002812 return *this;
2813 }
2814 CONSTEXPR uint32_t get_cmd_parse_error() const
2815 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002816 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002817 return value;
2818 }
2819 uint32_t get_cmd_parse_error() const volatile
2820 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002821 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002822 return value;
2823 }
2824 CONSTEXPR status_r &set_cmd_parse_error(uint32_t value)
2825 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002826 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
2827 return *this;
2828 }
2829 volatile status_r &set_cmd_parse_error(uint32_t value) volatile
2830 {
2831 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002832 return *this;
2833 }
2834 CONSTEXPR uint32_t get_cmd_end_reached() const
2835 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002836 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002837 return value;
2838 }
2839 uint32_t get_cmd_end_reached() const volatile
2840 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002841 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002842 return value;
2843 }
2844 CONSTEXPR status_r &set_cmd_end_reached(uint32_t value)
2845 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002846 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
2847 return *this;
2848 }
2849 volatile status_r &set_cmd_end_reached(uint32_t value) volatile
2850 {
2851 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002852 return *this;
2853 }
2854 CONSTEXPR uint32_t get_pmu_irq_raised() const
2855 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002856 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002857 return value;
2858 }
2859 uint32_t get_pmu_irq_raised() const volatile
2860 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002861 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002862 return value;
2863 }
2864 CONSTEXPR status_r &set_pmu_irq_raised(uint32_t value)
2865 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002866 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
2867 return *this;
2868 }
2869 volatile status_r &set_pmu_irq_raised(uint32_t value) volatile
2870 {
2871 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002872 return *this;
2873 }
2874 CONSTEXPR uint32_t get_wd_fault() const
2875 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002876 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002877 return value;
2878 }
2879 uint32_t get_wd_fault() const volatile
2880 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002881 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002882 return value;
2883 }
2884 CONSTEXPR status_r &set_wd_fault(uint32_t value)
2885 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002886 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
2887 return *this;
2888 }
2889 volatile status_r &set_wd_fault(uint32_t value) volatile
2890 {
2891 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002892 return *this;
2893 }
Stefan Nannessone2e70242020-08-19 16:01:29 +02002894 CONSTEXPR uint32_t get_ecc_fault() const
2895 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002896 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Stefan Nannessone2e70242020-08-19 16:01:29 +02002897 return value;
2898 }
2899 uint32_t get_ecc_fault() const volatile
2900 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002901 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Stefan Nannessone2e70242020-08-19 16:01:29 +02002902 return value;
2903 }
2904 CONSTEXPR status_r &set_ecc_fault(uint32_t value)
2905 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002906 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
2907 return *this;
2908 }
2909 volatile status_r &set_ecc_fault(uint32_t value) volatile
2910 {
2911 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
Stefan Nannessone2e70242020-08-19 16:01:29 +02002912 return *this;
2913 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002914 CONSTEXPR NPU_NAMESPACE::dma_fault_src get_faulting_interface() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002915 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002916 NPU_NAMESPACE::dma_fault_src value = static_cast<NPU_NAMESPACE::dma_fault_src>(((1U << 1) - 1) & (word0 >> 11));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002917 return value;
2918 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002919 NPU_NAMESPACE::dma_fault_src get_faulting_interface() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002920 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002921 NPU_NAMESPACE::dma_fault_src value = static_cast<NPU_NAMESPACE::dma_fault_src>(((1U << 1) - 1) & (word0 >> 11));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002922 return value;
2923 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002924 CONSTEXPR status_r &set_faulting_interface(NPU_NAMESPACE::dma_fault_src value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002925 {
Jonny Svärd136810f2021-10-13 16:04:26 +02002926 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 11);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002927 return *this;
2928 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01002929 volatile status_r &set_faulting_interface(NPU_NAMESPACE::dma_fault_src value) volatile
2930 {
2931 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 11);
2932 return *this;
2933 }
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002934 CONSTEXPR uint32_t get_faulting_channel() const
2935 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002936 uint32_t value = ((1U << 4) - 1) & (word0 >> 12);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002937 return value;
2938 }
2939 uint32_t get_faulting_channel() const volatile
2940 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002941 uint32_t value = ((1U << 4) - 1) & (word0 >> 12);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002942 return value;
2943 }
2944 CONSTEXPR status_r &set_faulting_channel(uint32_t value)
2945 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002946 word0 = (((~((1U << 4) - 1)) << 12) & word0) | ((((1U << 4) - 1) & value) << 12);
2947 return *this;
2948 }
2949 volatile status_r &set_faulting_channel(uint32_t value) volatile
2950 {
2951 word0 = (((~((1U << 4) - 1)) << 12) & word0) | ((((1U << 4) - 1) & value) << 12);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002952 return *this;
2953 }
2954 CONSTEXPR uint32_t get_irq_history_mask() const
2955 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002956 uint32_t value = ((1U << 16) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002957 return value;
2958 }
2959 uint32_t get_irq_history_mask() const volatile
2960 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002961 uint32_t value = ((1U << 16) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002962 return value;
2963 }
2964 CONSTEXPR status_r &set_irq_history_mask(uint32_t value)
2965 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01002966 word0 = (((~((1U << 16) - 1)) << 16) & word0) | ((((1U << 16) - 1) & value) << 16);
2967 return *this;
2968 }
2969 volatile status_r &set_irq_history_mask(uint32_t value) volatile
2970 {
2971 word0 = (((~((1U << 16) - 1)) << 16) & word0) | ((((1U << 16) - 1) & value) << 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002972 return *this;
2973 }
Jonny Svärd136810f2021-10-13 16:04:26 +02002974#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002975};
2976
2977// cmd_r - Command register, reads as last written command
2978struct cmd_r
2979{
Jonny Svärd136810f2021-10-13 16:04:26 +02002980#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002981 union
2982 {
2983 struct
2984 {
2985 uint32_t transition_to_running_state : 1; // Write 1 to transition the NPU to running state. Writing 0 has
2986 // no effect
2987 uint32_t clear_irq : 1; // Write 1 to clear the IRQ status in the STATUS register. Writing 0 has no effect
2988 uint32_t clock_q_enable : 1; // Write 1 to this bit to enable clock off using clock q-interface and enable
Jonny Svärd136810f2021-10-13 16:04:26 +02002989 // the requester clock gate
Douglas Troha2e7e3b72020-05-14 20:28:31 +02002990 uint32_t power_q_enable : 1; // Write 1 to this bit to enable power off using power q-interface
2991 uint32_t
2992 stop_request : 1; // Write 1 to this bit to request STOP after completing any already-started commands
2993 uint32_t reserved0 : 11;
2994 uint32_t clear_irq_history : 16; // Clears the IRQ history mask
2995 };
2996 uint32_t word;
2997 };
Jonny Svärd136810f2021-10-13 16:04:26 +02002998#else
2999 private:
3000 uint32_t word0;
3001
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003002 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003003 CONSTEXPR cmd_r() : word0(12) {}
3004 CONSTEXPR cmd_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003005 CONSTEXPR void operator=(uint32_t value)
3006 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003007 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003008 }
3009 void operator=(uint32_t value) volatile
3010 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003011 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003012 }
3013 CONSTEXPR operator uint32_t()
3014 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003015 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003016 }
3017 operator uint32_t() volatile
3018 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003019 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003020 }
3021 cmd_r copy() volatile
3022 {
3023 return *this;
3024 }
3025 CONSTEXPR uint32_t get_transition_to_running_state() const
3026 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003027 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003028 return value;
3029 }
3030 uint32_t get_transition_to_running_state() const volatile
3031 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003032 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003033 return value;
3034 }
3035 CONSTEXPR cmd_r &set_transition_to_running_state(uint32_t value)
3036 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003037 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
3038 return *this;
3039 }
3040 volatile cmd_r &set_transition_to_running_state(uint32_t value) volatile
3041 {
3042 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003043 return *this;
3044 }
3045 CONSTEXPR uint32_t get_clear_irq() const
3046 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003047 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003048 return value;
3049 }
3050 uint32_t get_clear_irq() const volatile
3051 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003052 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003053 return value;
3054 }
3055 CONSTEXPR cmd_r &set_clear_irq(uint32_t value)
3056 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003057 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
3058 return *this;
3059 }
3060 volatile cmd_r &set_clear_irq(uint32_t value) volatile
3061 {
3062 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003063 return *this;
3064 }
3065 CONSTEXPR uint32_t get_clock_q_enable() const
3066 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003067 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003068 return value;
3069 }
3070 uint32_t get_clock_q_enable() const volatile
3071 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003072 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003073 return value;
3074 }
3075 CONSTEXPR cmd_r &set_clock_q_enable(uint32_t value)
3076 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003077 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
3078 return *this;
3079 }
3080 volatile cmd_r &set_clock_q_enable(uint32_t value) volatile
3081 {
3082 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003083 return *this;
3084 }
3085 CONSTEXPR uint32_t get_power_q_enable() const
3086 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003087 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003088 return value;
3089 }
3090 uint32_t get_power_q_enable() const volatile
3091 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003092 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003093 return value;
3094 }
3095 CONSTEXPR cmd_r &set_power_q_enable(uint32_t value)
3096 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003097 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
3098 return *this;
3099 }
3100 volatile cmd_r &set_power_q_enable(uint32_t value) volatile
3101 {
3102 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003103 return *this;
3104 }
3105 CONSTEXPR uint32_t get_stop_request() const
3106 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003107 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003108 return value;
3109 }
3110 uint32_t get_stop_request() const volatile
3111 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003112 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003113 return value;
3114 }
3115 CONSTEXPR cmd_r &set_stop_request(uint32_t value)
3116 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003117 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
3118 return *this;
3119 }
3120 volatile cmd_r &set_stop_request(uint32_t value) volatile
3121 {
3122 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003123 return *this;
3124 }
3125 CONSTEXPR uint32_t get_clear_irq_history() const
3126 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003127 uint32_t value = ((1U << 16) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003128 return value;
3129 }
3130 uint32_t get_clear_irq_history() const volatile
3131 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003132 uint32_t value = ((1U << 16) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003133 return value;
3134 }
3135 CONSTEXPR cmd_r &set_clear_irq_history(uint32_t value)
3136 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003137 word0 = (((~((1U << 16) - 1)) << 16) & word0) | ((((1U << 16) - 1) & value) << 16);
3138 return *this;
3139 }
3140 volatile cmd_r &set_clear_irq_history(uint32_t value) volatile
3141 {
3142 word0 = (((~((1U << 16) - 1)) << 16) & word0) | ((((1U << 16) - 1) & value) << 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003143 return *this;
3144 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003145#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003146};
3147
3148// reset_r - Request Reset and new security mode
3149struct reset_r
3150{
Jonny Svärd136810f2021-10-13 16:04:26 +02003151#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003152 union
3153 {
3154 struct
3155 {
3156 uint32_t pending_CPL : 1; // Current privilege level 0=User 1=Privileged
3157 uint32_t pending_CSL : 1; // Current security level 0=Secure 1=Non secure
3158 uint32_t reserved0 : 30;
3159 };
3160 uint32_t word;
3161 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003162#else
3163 private:
3164 uint32_t word0;
3165
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003166 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003167 CONSTEXPR reset_r() : word0(0) {}
3168 CONSTEXPR reset_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003169 CONSTEXPR void operator=(uint32_t value)
3170 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003171 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003172 }
3173 void operator=(uint32_t value) volatile
3174 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003175 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003176 }
3177 CONSTEXPR operator uint32_t()
3178 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003179 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003180 }
3181 operator uint32_t() volatile
3182 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003183 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003184 }
3185 reset_r copy() volatile
3186 {
3187 return *this;
3188 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003189 CONSTEXPR NPU_NAMESPACE::privilege_level get_pending_CPL() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003190 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003191 NPU_NAMESPACE::privilege_level value =
3192 static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003193 return value;
3194 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003195 NPU_NAMESPACE::privilege_level get_pending_CPL() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003196 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003197 NPU_NAMESPACE::privilege_level value =
3198 static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003199 return value;
3200 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003201 CONSTEXPR reset_r &set_pending_CPL(NPU_NAMESPACE::privilege_level value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003202 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003203 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003204 return *this;
3205 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003206 volatile reset_r &set_pending_CPL(NPU_NAMESPACE::privilege_level value) volatile
3207 {
3208 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
3209 return *this;
3210 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003211 CONSTEXPR NPU_NAMESPACE::security_level get_pending_CSL() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003212 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003213 NPU_NAMESPACE::security_level value =
3214 static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003215 return value;
3216 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003217 NPU_NAMESPACE::security_level get_pending_CSL() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003218 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003219 NPU_NAMESPACE::security_level value =
3220 static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003221 return value;
3222 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003223 CONSTEXPR reset_r &set_pending_CSL(NPU_NAMESPACE::security_level value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003224 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003225 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003226 return *this;
3227 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003228 volatile reset_r &set_pending_CSL(NPU_NAMESPACE::security_level value) volatile
3229 {
3230 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
3231 return *this;
3232 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003233#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003234};
3235
Jonny Svärd13cb0892021-11-16 18:43:04 +01003236// qbase_r - Base address of the command stream in bytes
Jonny Svärd136810f2021-10-13 16:04:26 +02003237struct qbase_r
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003238{
Jonny Svärd136810f2021-10-13 16:04:26 +02003239#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003240 union
3241 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003242 struct
3243 {
3244 uint32_t offset : 32; // Offset
3245 uint32_t reserved0 : 32;
3246 };
3247 uint32_t word[2];
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003248 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003249#else
3250 private:
3251 uint32_t word0;
3252 uint32_t word1;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003253
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003254 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003255 CONSTEXPR qbase_r() : word0(0), word1(0) {}
3256 CONSTEXPR qbase_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01003257 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
3258 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003259 {
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003260 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003261 CONSTEXPR void operator=(uint64_t value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003262 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003263 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
3264 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003265 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003266 void operator=(uint64_t value) volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003267 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003268 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
3269 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003270 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003271 CONSTEXPR operator uint64_t()
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003272 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003273 return (static_cast<uint64_t>(word1) << 32) | word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003274 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003275 operator uint64_t() volatile
3276 {
3277 return (static_cast<uint64_t>(word1) << 32) | word0;
3278 }
3279 qbase_r copy() volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003280 {
3281 return *this;
3282 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003283#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003284};
3285
3286// qread_r - Read offset in the command stream in bytes. Multiple of 4 in the range 0 to 16 MB
3287struct qread_r
3288{
Jonny Svärd136810f2021-10-13 16:04:26 +02003289#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003290 union
3291 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003292 struct
3293 {
3294 uint32_t QREAD : 32; // The read offset of the current command under execution
3295 };
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003296 uint32_t word;
3297 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003298#else
3299 private:
3300 uint32_t word0;
3301
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003302 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003303 CONSTEXPR qread_r() : word0(0) {}
3304 CONSTEXPR qread_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003305 CONSTEXPR void operator=(uint32_t value)
3306 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003307 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003308 }
3309 void operator=(uint32_t value) volatile
3310 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003311 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003312 }
3313 CONSTEXPR operator uint32_t()
3314 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003315 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003316 }
3317 operator uint32_t() volatile
3318 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003319 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003320 }
3321 qread_r copy() volatile
3322 {
3323 return *this;
3324 }
3325 CONSTEXPR uint32_t get_QREAD() const
3326 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003327 uint32_t value = word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003328 return value;
3329 }
3330 uint32_t get_QREAD() const volatile
3331 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003332 uint32_t value = word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003333 return value;
3334 }
3335 CONSTEXPR qread_r &set_QREAD(uint32_t value)
3336 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003337 word0 = value;
3338 return *this;
3339 }
3340 volatile qread_r &set_QREAD(uint32_t value) volatile
3341 {
3342 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003343 return *this;
3344 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003345#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003346};
3347
3348// qconfig_r - AXI configuration for the command stream in the range 0-3. Same encoding as for REGIONCFG
3349struct qconfig_r
3350{
Jonny Svärd136810f2021-10-13 16:04:26 +02003351#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003352 union
3353 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003354 struct
3355 {
3356 uint32_t cmd_region0 : 2; // Command region configuration
3357 uint32_t reserved0 : 30;
3358 };
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003359 uint32_t word;
3360 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003361#else
3362 private:
3363 uint32_t word0;
3364
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003365 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003366 CONSTEXPR qconfig_r() : word0(0) {}
3367 CONSTEXPR qconfig_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003368 CONSTEXPR void operator=(uint32_t value)
3369 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003370 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003371 }
3372 void operator=(uint32_t value) volatile
3373 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003374 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003375 }
3376 CONSTEXPR operator uint32_t()
3377 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003378 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003379 }
3380 operator uint32_t() volatile
3381 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003382 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003383 }
3384 qconfig_r copy() volatile
3385 {
3386 return *this;
3387 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003388 CONSTEXPR NPU_NAMESPACE::mem_attr get_cmd_region0() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003389 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003390 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003391 return value;
3392 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003393 NPU_NAMESPACE::mem_attr get_cmd_region0() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003394 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003395 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003396 return value;
3397 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003398 CONSTEXPR qconfig_r &set_cmd_region0(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003399 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003400 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003401 return *this;
3402 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003403 volatile qconfig_r &set_cmd_region0(NPU_NAMESPACE::mem_attr value) volatile
3404 {
3405 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
3406 return *this;
3407 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003408#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003409};
3410
3411// qsize_r - Size of the command stream in bytes. Multiple of 4 in the range 0 to 16 MB
3412struct qsize_r
3413{
Jonny Svärd136810f2021-10-13 16:04:26 +02003414#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003415 union
3416 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003417 struct
3418 {
3419 uint32_t QSIZE : 32; // Size of the next command stream to be executed by the NPU
3420 };
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003421 uint32_t word;
3422 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003423#else
3424 private:
3425 uint32_t word0;
3426
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003427 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003428 CONSTEXPR qsize_r() : word0(0) {}
3429 CONSTEXPR qsize_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003430 CONSTEXPR void operator=(uint32_t value)
3431 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003432 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003433 }
3434 void operator=(uint32_t value) volatile
3435 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003436 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003437 }
3438 CONSTEXPR operator uint32_t()
3439 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003440 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003441 }
3442 operator uint32_t() volatile
3443 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003444 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003445 }
3446 qsize_r copy() volatile
3447 {
3448 return *this;
3449 }
3450 CONSTEXPR uint32_t get_QSIZE() const
3451 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003452 uint32_t value = word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003453 return value;
3454 }
3455 uint32_t get_QSIZE() const volatile
3456 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003457 uint32_t value = word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003458 return value;
3459 }
3460 CONSTEXPR qsize_r &set_QSIZE(uint32_t value)
3461 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003462 word0 = value;
3463 return *this;
3464 }
3465 volatile qsize_r &set_QSIZE(uint32_t value) volatile
3466 {
3467 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003468 return *this;
3469 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003470#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003471};
3472
Jonny Svärd136810f2021-10-13 16:04:26 +02003473// prot_r - Protection level configured for the NPU when acting as an AXI requester
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003474struct prot_r
3475{
Jonny Svärd136810f2021-10-13 16:04:26 +02003476#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003477 union
3478 {
3479 struct
3480 {
3481 uint32_t active_CPL : 1; // Current privilege level 0=User 1=Privileged
3482 uint32_t active_CSL : 1; // Current security level 0=Secure 1=Non secure
3483 uint32_t reserved0 : 30;
3484 };
3485 uint32_t word;
3486 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003487#else
3488 private:
3489 uint32_t word0;
3490
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003491 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003492 CONSTEXPR prot_r() : word0(0) {}
3493 CONSTEXPR prot_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003494 CONSTEXPR void operator=(uint32_t value)
3495 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003496 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003497 }
3498 void operator=(uint32_t value) volatile
3499 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003500 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003501 }
3502 CONSTEXPR operator uint32_t()
3503 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003504 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003505 }
3506 operator uint32_t() volatile
3507 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003508 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003509 }
3510 prot_r copy() volatile
3511 {
3512 return *this;
3513 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003514 CONSTEXPR NPU_NAMESPACE::privilege_level get_active_CPL() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003515 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003516 NPU_NAMESPACE::privilege_level value =
3517 static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003518 return value;
3519 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003520 NPU_NAMESPACE::privilege_level get_active_CPL() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003521 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003522 NPU_NAMESPACE::privilege_level value =
3523 static_cast<NPU_NAMESPACE::privilege_level>(((1U << 1) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003524 return value;
3525 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003526 CONSTEXPR prot_r &set_active_CPL(NPU_NAMESPACE::privilege_level value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003527 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003528 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003529 return *this;
3530 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003531 volatile prot_r &set_active_CPL(NPU_NAMESPACE::privilege_level value) volatile
3532 {
3533 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 0);
3534 return *this;
3535 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003536 CONSTEXPR NPU_NAMESPACE::security_level get_active_CSL() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003537 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003538 NPU_NAMESPACE::security_level value =
3539 static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003540 return value;
3541 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003542 NPU_NAMESPACE::security_level get_active_CSL() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003543 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003544 NPU_NAMESPACE::security_level value =
3545 static_cast<NPU_NAMESPACE::security_level>(((1U << 1) - 1) & (word0 >> 1));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003546 return value;
3547 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003548 CONSTEXPR prot_r &set_active_CSL(NPU_NAMESPACE::security_level value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003549 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003550 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003551 return *this;
3552 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003553 volatile prot_r &set_active_CSL(NPU_NAMESPACE::security_level value) volatile
3554 {
3555 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 1);
3556 return *this;
3557 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003558#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003559};
3560
3561// config_r - RTL configuration
3562struct config_r
3563{
Jonny Svärd136810f2021-10-13 16:04:26 +02003564#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003565 union
3566 {
3567 struct
3568 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003569 uint32_t macs_per_cc : 4; // The log2(macs/clock cycle)
3570 uint32_t cmd_stream_version : 4; // command stream version accepted by this NPU
3571 uint32_t shram_size : 8; // Total size in KB of internal SHRAM
3572 uint32_t reserved0 : 10;
3573 uint32_t functional_safety : 1; // Functional safety configuration
3574 uint32_t custom_dma : 1; // Custom DMA configuration
3575 uint32_t product : 4; // Product configuration
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003576 };
3577 uint32_t word;
3578 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003579#else
3580 private:
3581 uint32_t word0;
3582
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003583 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003584 CONSTEXPR config_r() : word0(0) {}
3585 CONSTEXPR config_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003586 CONSTEXPR void operator=(uint32_t value)
3587 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003588 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003589 }
3590 void operator=(uint32_t value) volatile
3591 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003592 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003593 }
3594 CONSTEXPR operator uint32_t()
3595 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003596 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003597 }
3598 operator uint32_t() volatile
3599 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003600 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003601 }
3602 config_r copy() volatile
3603 {
3604 return *this;
3605 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003606 CONSTEXPR uint32_t get_macs_per_cc() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003607 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003608 uint32_t value = ((1U << 4) - 1) & (word0 >> 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003609 return value;
3610 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003611 uint32_t get_macs_per_cc() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003612 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003613 uint32_t value = ((1U << 4) - 1) & (word0 >> 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003614 return value;
3615 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003616 CONSTEXPR config_r &set_macs_per_cc(uint32_t value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003617 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003618 word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & value) << 0);
3619 return *this;
3620 }
3621 volatile config_r &set_macs_per_cc(uint32_t value) volatile
3622 {
3623 word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & value) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003624 return *this;
3625 }
3626 CONSTEXPR uint32_t get_cmd_stream_version() const
3627 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003628 uint32_t value = ((1U << 4) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003629 return value;
3630 }
3631 uint32_t get_cmd_stream_version() const volatile
3632 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003633 uint32_t value = ((1U << 4) - 1) & (word0 >> 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003634 return value;
3635 }
3636 CONSTEXPR config_r &set_cmd_stream_version(uint32_t value)
3637 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003638 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & value) << 4);
3639 return *this;
3640 }
3641 volatile config_r &set_cmd_stream_version(uint32_t value) volatile
3642 {
3643 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & value) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003644 return *this;
3645 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003646 CONSTEXPR uint32_t get_shram_size() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003647 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003648 uint32_t value = ((1U << 8) - 1) & (word0 >> 8);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003649 return value;
3650 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003651 uint32_t get_shram_size() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003652 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003653 uint32_t value = ((1U << 8) - 1) & (word0 >> 8);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003654 return value;
3655 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003656 CONSTEXPR config_r &set_shram_size(uint32_t value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003657 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003658 word0 = (((~((1U << 8) - 1)) << 8) & word0) | ((((1U << 8) - 1) & value) << 8);
3659 return *this;
3660 }
3661 volatile config_r &set_shram_size(uint32_t value) volatile
3662 {
3663 word0 = (((~((1U << 8) - 1)) << 8) & word0) | ((((1U << 8) - 1) & value) << 8);
Jonny Svärd136810f2021-10-13 16:04:26 +02003664 return *this;
3665 }
3666 CONSTEXPR NPU_NAMESPACE::functional_safety get_functional_safety() const
3667 {
3668 NPU_NAMESPACE::functional_safety value =
3669 static_cast<NPU_NAMESPACE::functional_safety>(((1U << 1) - 1) & (word0 >> 26));
3670 return value;
3671 }
3672 NPU_NAMESPACE::functional_safety get_functional_safety() const volatile
3673 {
3674 NPU_NAMESPACE::functional_safety value =
3675 static_cast<NPU_NAMESPACE::functional_safety>(((1U << 1) - 1) & (word0 >> 26));
3676 return value;
3677 }
3678 CONSTEXPR config_r &set_functional_safety(NPU_NAMESPACE::functional_safety value)
3679 {
3680 word0 = (((~((1U << 1) - 1)) << 26) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 26);
3681 return *this;
3682 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003683 volatile config_r &set_functional_safety(NPU_NAMESPACE::functional_safety value) volatile
3684 {
3685 word0 = (((~((1U << 1) - 1)) << 26) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 26);
3686 return *this;
3687 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003688 CONSTEXPR NPU_NAMESPACE::custom_dma get_custom_dma() const
3689 {
3690 NPU_NAMESPACE::custom_dma value = static_cast<NPU_NAMESPACE::custom_dma>(((1U << 1) - 1) & (word0 >> 27));
3691 return value;
3692 }
3693 NPU_NAMESPACE::custom_dma get_custom_dma() const volatile
3694 {
3695 NPU_NAMESPACE::custom_dma value = static_cast<NPU_NAMESPACE::custom_dma>(((1U << 1) - 1) & (word0 >> 27));
3696 return value;
3697 }
3698 CONSTEXPR config_r &set_custom_dma(NPU_NAMESPACE::custom_dma value)
3699 {
3700 word0 = (((~((1U << 1) - 1)) << 27) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 27);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003701 return *this;
3702 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003703 volatile config_r &set_custom_dma(NPU_NAMESPACE::custom_dma value) volatile
3704 {
3705 word0 = (((~((1U << 1) - 1)) << 27) & word0) | ((((1U << 1) - 1) & static_cast<uint32_t>(value)) << 27);
3706 return *this;
3707 }
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003708 CONSTEXPR uint32_t get_product() const
3709 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003710 uint32_t value = ((1U << 4) - 1) & (word0 >> 28);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003711 return value;
3712 }
3713 uint32_t get_product() const volatile
3714 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003715 uint32_t value = ((1U << 4) - 1) & (word0 >> 28);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003716 return value;
3717 }
3718 CONSTEXPR config_r &set_product(uint32_t value)
3719 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003720 word0 = (((~((1U << 4) - 1)) << 28) & word0) | ((((1U << 4) - 1) & value) << 28);
3721 return *this;
3722 }
3723 volatile config_r &set_product(uint32_t value) volatile
3724 {
3725 word0 = (((~((1U << 4) - 1)) << 28) & word0) | ((((1U << 4) - 1) & value) << 28);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003726 return *this;
3727 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003728#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003729};
3730
3731// lock_r - Lock register. This register is designed for driver use and does not affect NPU functionality
3732struct lock_r
3733{
Jonny Svärd136810f2021-10-13 16:04:26 +02003734#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003735 union
3736 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003737 struct
3738 {
3739 uint32_t LOCK : 32; // 32 bit value for LOCK configuration
3740 };
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003741 uint32_t word;
3742 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003743#else
3744 private:
3745 uint32_t word0;
3746
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003747 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003748 CONSTEXPR lock_r() : word0(0) {}
3749 CONSTEXPR lock_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003750 CONSTEXPR void operator=(uint32_t value)
3751 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003752 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003753 }
3754 void operator=(uint32_t value) volatile
3755 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003756 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003757 }
3758 CONSTEXPR operator uint32_t()
3759 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003760 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003761 }
3762 operator uint32_t() volatile
3763 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003764 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003765 }
3766 lock_r copy() volatile
3767 {
3768 return *this;
3769 }
3770 CONSTEXPR uint32_t get_LOCK() const
3771 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003772 uint32_t value = word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003773 return value;
3774 }
3775 uint32_t get_LOCK() const volatile
3776 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003777 uint32_t value = word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003778 return value;
3779 }
3780 CONSTEXPR lock_r &set_LOCK(uint32_t value)
3781 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01003782 word0 = value;
3783 return *this;
3784 }
3785 volatile lock_r &set_LOCK(uint32_t value) volatile
3786 {
3787 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003788 return *this;
3789 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003790#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003791};
3792
Stefan Nannessone2e70242020-08-19 16:01:29 +02003793// regioncfg_r - Region memory type configuration. Bits[2*k+1:2*k] give the memory type for REGION[k]
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003794struct regioncfg_r
3795{
Jonny Svärd136810f2021-10-13 16:04:26 +02003796#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003797 union
3798 {
3799 struct
3800 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003801 uint32_t region0 : 2; // Bits for Region0 Configuration
3802 uint32_t region1 : 2; // Bits for Region1 Configuration
3803 uint32_t region2 : 2; // Bits for Region2 Configuration
3804 uint32_t region3 : 2; // Bits for Region3 Configuration
3805 uint32_t region4 : 2; // Bits for Region4 Configuration
3806 uint32_t region5 : 2; // Bits for Region5 Configuration
3807 uint32_t region6 : 2; // Bits for Region6 Configuration
3808 uint32_t region7 : 2; // Bits for Region7 Configuration
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003809 uint32_t reserved0 : 16;
3810 };
3811 uint32_t word;
3812 };
Jonny Svärd136810f2021-10-13 16:04:26 +02003813#else
3814 private:
3815 uint32_t word0;
3816
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003817 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02003818 CONSTEXPR regioncfg_r() : word0(0) {}
3819 CONSTEXPR regioncfg_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003820 CONSTEXPR void operator=(uint32_t value)
3821 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003822 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003823 }
3824 void operator=(uint32_t value) volatile
3825 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003826 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003827 }
3828 CONSTEXPR operator uint32_t()
3829 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003830 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003831 }
3832 operator uint32_t() volatile
3833 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003834 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003835 }
3836 regioncfg_r copy() volatile
3837 {
3838 return *this;
3839 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003840 CONSTEXPR NPU_NAMESPACE::mem_attr get_region0() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003841 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003842 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003843 return value;
3844 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003845 NPU_NAMESPACE::mem_attr get_region0() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003846 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003847 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003848 return value;
3849 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003850 CONSTEXPR regioncfg_r &set_region0(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003851 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003852 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003853 return *this;
3854 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003855 volatile regioncfg_r &set_region0(NPU_NAMESPACE::mem_attr value) volatile
3856 {
3857 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
3858 return *this;
3859 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003860 CONSTEXPR NPU_NAMESPACE::mem_attr get_region1() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003861 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003862 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 2));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003863 return value;
3864 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003865 NPU_NAMESPACE::mem_attr get_region1() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003866 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003867 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 2));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003868 return value;
3869 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003870 CONSTEXPR regioncfg_r &set_region1(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003871 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003872 word0 = (((~((1U << 2) - 1)) << 2) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 2);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003873 return *this;
3874 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003875 volatile regioncfg_r &set_region1(NPU_NAMESPACE::mem_attr value) volatile
3876 {
3877 word0 = (((~((1U << 2) - 1)) << 2) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 2);
3878 return *this;
3879 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003880 CONSTEXPR NPU_NAMESPACE::mem_attr get_region2() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003881 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003882 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003883 return value;
3884 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003885 NPU_NAMESPACE::mem_attr get_region2() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003886 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003887 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003888 return value;
3889 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003890 CONSTEXPR regioncfg_r &set_region2(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003891 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003892 word0 = (((~((1U << 2) - 1)) << 4) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003893 return *this;
3894 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003895 volatile regioncfg_r &set_region2(NPU_NAMESPACE::mem_attr value) volatile
3896 {
3897 word0 = (((~((1U << 2) - 1)) << 4) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 4);
3898 return *this;
3899 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003900 CONSTEXPR NPU_NAMESPACE::mem_attr get_region3() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003901 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003902 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 6));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003903 return value;
3904 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003905 NPU_NAMESPACE::mem_attr get_region3() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003906 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003907 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 6));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003908 return value;
3909 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003910 CONSTEXPR regioncfg_r &set_region3(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003911 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003912 word0 = (((~((1U << 2) - 1)) << 6) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 6);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003913 return *this;
3914 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003915 volatile regioncfg_r &set_region3(NPU_NAMESPACE::mem_attr value) volatile
3916 {
3917 word0 = (((~((1U << 2) - 1)) << 6) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 6);
3918 return *this;
3919 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003920 CONSTEXPR NPU_NAMESPACE::mem_attr get_region4() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003921 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003922 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 8));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003923 return value;
3924 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003925 NPU_NAMESPACE::mem_attr get_region4() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003926 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003927 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 8));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003928 return value;
3929 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003930 CONSTEXPR regioncfg_r &set_region4(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003931 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003932 word0 = (((~((1U << 2) - 1)) << 8) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 8);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003933 return *this;
3934 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003935 volatile regioncfg_r &set_region4(NPU_NAMESPACE::mem_attr value) volatile
3936 {
3937 word0 = (((~((1U << 2) - 1)) << 8) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 8);
3938 return *this;
3939 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003940 CONSTEXPR NPU_NAMESPACE::mem_attr get_region5() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003941 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003942 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 10));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003943 return value;
3944 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003945 NPU_NAMESPACE::mem_attr get_region5() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003946 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003947 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 10));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003948 return value;
3949 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003950 CONSTEXPR regioncfg_r &set_region5(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003951 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003952 word0 = (((~((1U << 2) - 1)) << 10) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 10);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003953 return *this;
3954 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003955 volatile regioncfg_r &set_region5(NPU_NAMESPACE::mem_attr value) volatile
3956 {
3957 word0 = (((~((1U << 2) - 1)) << 10) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 10);
3958 return *this;
3959 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003960 CONSTEXPR NPU_NAMESPACE::mem_attr get_region6() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003961 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003962 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 12));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003963 return value;
3964 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003965 NPU_NAMESPACE::mem_attr get_region6() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003966 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003967 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 12));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003968 return value;
3969 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003970 CONSTEXPR regioncfg_r &set_region6(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003971 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003972 word0 = (((~((1U << 2) - 1)) << 12) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 12);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003973 return *this;
3974 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003975 volatile regioncfg_r &set_region6(NPU_NAMESPACE::mem_attr value) volatile
3976 {
3977 word0 = (((~((1U << 2) - 1)) << 12) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 12);
3978 return *this;
3979 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003980 CONSTEXPR NPU_NAMESPACE::mem_attr get_region7() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003981 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003982 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 14));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003983 return value;
3984 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003985 NPU_NAMESPACE::mem_attr get_region7() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003986 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003987 NPU_NAMESPACE::mem_attr value = static_cast<NPU_NAMESPACE::mem_attr>(((1U << 2) - 1) & (word0 >> 14));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003988 return value;
3989 }
Jonny Svärd136810f2021-10-13 16:04:26 +02003990 CONSTEXPR regioncfg_r &set_region7(NPU_NAMESPACE::mem_attr value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003991 {
Jonny Svärd136810f2021-10-13 16:04:26 +02003992 word0 = (((~((1U << 2) - 1)) << 14) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 14);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02003993 return *this;
3994 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01003995 volatile regioncfg_r &set_region7(NPU_NAMESPACE::mem_attr value) volatile
3996 {
3997 word0 = (((~((1U << 2) - 1)) << 14) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 14);
3998 return *this;
3999 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004000#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004001};
4002
4003// axi_limit0_r - AXI limits for port 0 counter 0
4004struct axi_limit0_r
4005{
Jonny Svärd136810f2021-10-13 16:04:26 +02004006#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004007 union
4008 {
4009 struct
4010 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004011 uint32_t max_beats : 2; // Burst split alignment
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004012 uint32_t reserved0 : 2;
Stefan Nannessone2e70242020-08-19 16:01:29 +02004013 uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004014 uint32_t reserved1 : 8;
4015 uint32_t
Jonny Svärd136810f2021-10-13 16:04:26 +02004016 max_outstanding_read_m1 : 5; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
4017 uint32_t reserved2 : 3;
4018 uint32_t max_outstanding_write_m1 : 4; // Maximum number of outstanding AXI write transactions - 1 in range
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004019 // 0 to 15
Jonny Svärd136810f2021-10-13 16:04:26 +02004020 uint32_t reserved3 : 4;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004021 };
4022 uint32_t word;
4023 };
Jonny Svärd136810f2021-10-13 16:04:26 +02004024#else
4025 private:
4026 uint32_t word0;
4027
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004028 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02004029 CONSTEXPR axi_limit0_r() : word0(0) {}
4030 CONSTEXPR axi_limit0_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004031 CONSTEXPR void operator=(uint32_t value)
4032 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004033 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004034 }
4035 void operator=(uint32_t value) volatile
4036 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004037 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004038 }
4039 CONSTEXPR operator uint32_t()
4040 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004041 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004042 }
4043 operator uint32_t() volatile
4044 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004045 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004046 }
4047 axi_limit0_r copy() volatile
4048 {
4049 return *this;
4050 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004051 CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004052 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004053 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004054 return value;
4055 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004056 NPU_NAMESPACE::max_beats get_max_beats() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004057 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004058 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004059 return value;
4060 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004061 CONSTEXPR axi_limit0_r &set_max_beats(NPU_NAMESPACE::max_beats value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004062 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004063 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004064 return *this;
4065 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004066 volatile axi_limit0_r &set_max_beats(NPU_NAMESPACE::max_beats value) volatile
4067 {
4068 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
4069 return *this;
4070 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004071 CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004072 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004073 NPU_NAMESPACE::axi_mem_encoding value =
4074 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004075 return value;
4076 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004077 NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004078 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004079 NPU_NAMESPACE::axi_mem_encoding value =
4080 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004081 return value;
4082 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004083 CONSTEXPR axi_limit0_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004084 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004085 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004086 return *this;
4087 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004088 volatile axi_limit0_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value) volatile
4089 {
4090 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
4091 return *this;
4092 }
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004093 CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4094 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004095 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004096 return value;
4097 }
4098 uint32_t get_max_outstanding_read_m1() const volatile
4099 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004100 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004101 return value;
4102 }
4103 CONSTEXPR axi_limit0_r &set_max_outstanding_read_m1(uint32_t value)
4104 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004105 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
4106 return *this;
4107 }
4108 volatile axi_limit0_r &set_max_outstanding_read_m1(uint32_t value) volatile
4109 {
4110 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004111 return *this;
4112 }
4113 CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4114 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004115 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004116 return value;
4117 }
4118 uint32_t get_max_outstanding_write_m1() const volatile
4119 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004120 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004121 return value;
4122 }
4123 CONSTEXPR axi_limit0_r &set_max_outstanding_write_m1(uint32_t value)
4124 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004125 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
4126 return *this;
4127 }
4128 volatile axi_limit0_r &set_max_outstanding_write_m1(uint32_t value) volatile
4129 {
4130 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004131 return *this;
4132 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004133#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004134};
4135
4136// axi_limit1_r - AXI limits for port 0 counter 1
4137struct axi_limit1_r
4138{
Jonny Svärd136810f2021-10-13 16:04:26 +02004139#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004140 union
4141 {
4142 struct
4143 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004144 uint32_t max_beats : 2; // Burst split alignment
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004145 uint32_t reserved0 : 2;
Stefan Nannessone2e70242020-08-19 16:01:29 +02004146 uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004147 uint32_t reserved1 : 8;
4148 uint32_t
Jonny Svärd136810f2021-10-13 16:04:26 +02004149 max_outstanding_read_m1 : 5; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
4150 uint32_t reserved2 : 3;
4151 uint32_t max_outstanding_write_m1 : 4; // Maximum number of outstanding AXI write transactions - 1 in range
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004152 // 0 to 15
Jonny Svärd136810f2021-10-13 16:04:26 +02004153 uint32_t reserved3 : 4;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004154 };
4155 uint32_t word;
4156 };
Jonny Svärd136810f2021-10-13 16:04:26 +02004157#else
4158 private:
4159 uint32_t word0;
4160
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004161 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02004162 CONSTEXPR axi_limit1_r() : word0(0) {}
4163 CONSTEXPR axi_limit1_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004164 CONSTEXPR void operator=(uint32_t value)
4165 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004166 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004167 }
4168 void operator=(uint32_t value) volatile
4169 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004170 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004171 }
4172 CONSTEXPR operator uint32_t()
4173 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004174 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004175 }
4176 operator uint32_t() volatile
4177 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004178 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004179 }
4180 axi_limit1_r copy() volatile
4181 {
4182 return *this;
4183 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004184 CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004185 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004186 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004187 return value;
4188 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004189 NPU_NAMESPACE::max_beats get_max_beats() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004190 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004191 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004192 return value;
4193 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004194 CONSTEXPR axi_limit1_r &set_max_beats(NPU_NAMESPACE::max_beats value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004195 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004196 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004197 return *this;
4198 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004199 volatile axi_limit1_r &set_max_beats(NPU_NAMESPACE::max_beats value) volatile
4200 {
4201 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
4202 return *this;
4203 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004204 CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004205 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004206 NPU_NAMESPACE::axi_mem_encoding value =
4207 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004208 return value;
4209 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004210 NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004211 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004212 NPU_NAMESPACE::axi_mem_encoding value =
4213 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004214 return value;
4215 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004216 CONSTEXPR axi_limit1_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004217 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004218 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004219 return *this;
4220 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004221 volatile axi_limit1_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value) volatile
4222 {
4223 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
4224 return *this;
4225 }
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004226 CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4227 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004228 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004229 return value;
4230 }
4231 uint32_t get_max_outstanding_read_m1() const volatile
4232 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004233 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004234 return value;
4235 }
4236 CONSTEXPR axi_limit1_r &set_max_outstanding_read_m1(uint32_t value)
4237 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004238 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
4239 return *this;
4240 }
4241 volatile axi_limit1_r &set_max_outstanding_read_m1(uint32_t value) volatile
4242 {
4243 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004244 return *this;
4245 }
4246 CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4247 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004248 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004249 return value;
4250 }
4251 uint32_t get_max_outstanding_write_m1() const volatile
4252 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004253 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004254 return value;
4255 }
4256 CONSTEXPR axi_limit1_r &set_max_outstanding_write_m1(uint32_t value)
4257 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004258 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
4259 return *this;
4260 }
4261 volatile axi_limit1_r &set_max_outstanding_write_m1(uint32_t value) volatile
4262 {
4263 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004264 return *this;
4265 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004266#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004267};
4268
4269// axi_limit2_r - AXI limits for port 1 counter 2
4270struct axi_limit2_r
4271{
Jonny Svärd136810f2021-10-13 16:04:26 +02004272#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004273 union
4274 {
4275 struct
4276 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004277 uint32_t max_beats : 2; // Burst split alignment
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004278 uint32_t reserved0 : 2;
Stefan Nannessone2e70242020-08-19 16:01:29 +02004279 uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004280 uint32_t reserved1 : 8;
4281 uint32_t
Jonny Svärd136810f2021-10-13 16:04:26 +02004282 max_outstanding_read_m1 : 5; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
4283 uint32_t reserved2 : 3;
4284 uint32_t max_outstanding_write_m1 : 4; // Maximum number of outstanding AXI write transactions - 1 in range
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004285 // 0 to 15
Jonny Svärd136810f2021-10-13 16:04:26 +02004286 uint32_t reserved3 : 4;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004287 };
4288 uint32_t word;
4289 };
Jonny Svärd136810f2021-10-13 16:04:26 +02004290#else
4291 private:
4292 uint32_t word0;
4293
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004294 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02004295 CONSTEXPR axi_limit2_r() : word0(0) {}
4296 CONSTEXPR axi_limit2_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004297 CONSTEXPR void operator=(uint32_t value)
4298 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004299 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004300 }
4301 void operator=(uint32_t value) volatile
4302 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004303 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004304 }
4305 CONSTEXPR operator uint32_t()
4306 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004307 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004308 }
4309 operator uint32_t() volatile
4310 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004311 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004312 }
4313 axi_limit2_r copy() volatile
4314 {
4315 return *this;
4316 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004317 CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004318 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004319 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004320 return value;
4321 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004322 NPU_NAMESPACE::max_beats get_max_beats() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004323 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004324 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004325 return value;
4326 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004327 CONSTEXPR axi_limit2_r &set_max_beats(NPU_NAMESPACE::max_beats value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004328 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004329 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004330 return *this;
4331 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004332 volatile axi_limit2_r &set_max_beats(NPU_NAMESPACE::max_beats value) volatile
4333 {
4334 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
4335 return *this;
4336 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004337 CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004338 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004339 NPU_NAMESPACE::axi_mem_encoding value =
4340 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004341 return value;
4342 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004343 NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004344 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004345 NPU_NAMESPACE::axi_mem_encoding value =
4346 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004347 return value;
4348 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004349 CONSTEXPR axi_limit2_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004350 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004351 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004352 return *this;
4353 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004354 volatile axi_limit2_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value) volatile
4355 {
4356 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
4357 return *this;
4358 }
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004359 CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4360 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004361 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004362 return value;
4363 }
4364 uint32_t get_max_outstanding_read_m1() const volatile
4365 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004366 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004367 return value;
4368 }
4369 CONSTEXPR axi_limit2_r &set_max_outstanding_read_m1(uint32_t value)
4370 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004371 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
4372 return *this;
4373 }
4374 volatile axi_limit2_r &set_max_outstanding_read_m1(uint32_t value) volatile
4375 {
4376 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004377 return *this;
4378 }
4379 CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4380 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004381 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004382 return value;
4383 }
4384 uint32_t get_max_outstanding_write_m1() const volatile
4385 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004386 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004387 return value;
4388 }
4389 CONSTEXPR axi_limit2_r &set_max_outstanding_write_m1(uint32_t value)
4390 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004391 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
4392 return *this;
4393 }
4394 volatile axi_limit2_r &set_max_outstanding_write_m1(uint32_t value) volatile
4395 {
4396 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004397 return *this;
4398 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004399#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004400};
4401
4402// axi_limit3_r - AXI limits for port 1 counter 3
4403struct axi_limit3_r
4404{
Jonny Svärd136810f2021-10-13 16:04:26 +02004405#ifndef __cplusplus
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004406 union
4407 {
4408 struct
4409 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004410 uint32_t max_beats : 2; // Burst split alignment
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004411 uint32_t reserved0 : 2;
Stefan Nannessone2e70242020-08-19 16:01:29 +02004412 uint32_t memtype : 4; // Memtype to be used to encode AxCACHE signals
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004413 uint32_t reserved1 : 8;
4414 uint32_t
Jonny Svärd136810f2021-10-13 16:04:26 +02004415 max_outstanding_read_m1 : 5; // Maximum number of outstanding AXI read transactions - 1 in range 0 to 31
4416 uint32_t reserved2 : 3;
4417 uint32_t max_outstanding_write_m1 : 4; // Maximum number of outstanding AXI write transactions - 1 in range
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004418 // 0 to 15
Jonny Svärd136810f2021-10-13 16:04:26 +02004419 uint32_t reserved3 : 4;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004420 };
4421 uint32_t word;
4422 };
Jonny Svärd136810f2021-10-13 16:04:26 +02004423#else
4424 private:
4425 uint32_t word0;
4426
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004427 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02004428 CONSTEXPR axi_limit3_r() : word0(0) {}
4429 CONSTEXPR axi_limit3_r(uint32_t init) : word0(init) {}
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004430 CONSTEXPR void operator=(uint32_t value)
4431 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004432 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004433 }
4434 void operator=(uint32_t value) volatile
4435 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004436 word0 = value;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004437 }
4438 CONSTEXPR operator uint32_t()
4439 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004440 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004441 }
4442 operator uint32_t() volatile
4443 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004444 return word0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004445 }
4446 axi_limit3_r copy() volatile
4447 {
4448 return *this;
4449 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004450 CONSTEXPR NPU_NAMESPACE::max_beats get_max_beats() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004451 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004452 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004453 return value;
4454 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004455 NPU_NAMESPACE::max_beats get_max_beats() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004456 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004457 NPU_NAMESPACE::max_beats value = static_cast<NPU_NAMESPACE::max_beats>(((1U << 2) - 1) & (word0 >> 0));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004458 return value;
4459 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004460 CONSTEXPR axi_limit3_r &set_max_beats(NPU_NAMESPACE::max_beats value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004461 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004462 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004463 return *this;
4464 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004465 volatile axi_limit3_r &set_max_beats(NPU_NAMESPACE::max_beats value) volatile
4466 {
4467 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
4468 return *this;
4469 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004470 CONSTEXPR NPU_NAMESPACE::axi_mem_encoding get_memtype() const
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004471 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004472 NPU_NAMESPACE::axi_mem_encoding value =
4473 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004474 return value;
4475 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004476 NPU_NAMESPACE::axi_mem_encoding get_memtype() const volatile
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004477 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004478 NPU_NAMESPACE::axi_mem_encoding value =
4479 static_cast<NPU_NAMESPACE::axi_mem_encoding>(((1U << 4) - 1) & (word0 >> 4));
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004480 return value;
4481 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004482 CONSTEXPR axi_limit3_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value)
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004483 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004484 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004485 return *this;
4486 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004487 volatile axi_limit3_r &set_memtype(NPU_NAMESPACE::axi_mem_encoding value) volatile
4488 {
4489 word0 = (((~((1U << 4) - 1)) << 4) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 4);
4490 return *this;
4491 }
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004492 CONSTEXPR uint32_t get_max_outstanding_read_m1() const
4493 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004494 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004495 return value;
4496 }
4497 uint32_t get_max_outstanding_read_m1() const volatile
4498 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004499 uint32_t value = ((1U << 5) - 1) & (word0 >> 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004500 return value;
4501 }
4502 CONSTEXPR axi_limit3_r &set_max_outstanding_read_m1(uint32_t value)
4503 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004504 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
4505 return *this;
4506 }
4507 volatile axi_limit3_r &set_max_outstanding_read_m1(uint32_t value) volatile
4508 {
4509 word0 = (((~((1U << 5) - 1)) << 16) & word0) | ((((1U << 5) - 1) & value) << 16);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004510 return *this;
4511 }
4512 CONSTEXPR uint32_t get_max_outstanding_write_m1() const
4513 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004514 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004515 return value;
4516 }
4517 uint32_t get_max_outstanding_write_m1() const volatile
4518 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004519 uint32_t value = ((1U << 4) - 1) & (word0 >> 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004520 return value;
4521 }
4522 CONSTEXPR axi_limit3_r &set_max_outstanding_write_m1(uint32_t value)
4523 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004524 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
4525 return *this;
4526 }
4527 volatile axi_limit3_r &set_max_outstanding_write_m1(uint32_t value) volatile
4528 {
4529 word0 = (((~((1U << 4) - 1)) << 24) & word0) | ((((1U << 4) - 1) & value) << 24);
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004530 return *this;
4531 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004532#endif
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004533};
4534
Jonny Svärd13cb0892021-11-16 18:43:04 +01004535// basep_r - The driver can use this address to relocate the command stream on region 0. If the region contains data
4536// requiring A-byte alignment then the base must be a multiple of A
Jonny Svärd136810f2021-10-13 16:04:26 +02004537struct basep_r
Douglas Troha2e7e3b72020-05-14 20:28:31 +02004538{
Jonny Svärd136810f2021-10-13 16:04:26 +02004539#ifndef __cplusplus
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004540 union
4541 {
4542 struct
4543 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004544 uint32_t offset : 32; // Offset
4545 uint32_t reserved0 : 32;
4546 };
4547 uint32_t word[2];
4548 };
4549#else
4550 private:
4551 uint32_t word0;
4552 uint32_t word1;
4553
4554 public:
4555 CONSTEXPR basep_r() : word0(0), word1(0) {}
4556 CONSTEXPR basep_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01004557 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
4558 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02004559 {
4560 }
4561 CONSTEXPR void operator=(uint64_t value)
4562 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004563 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
4564 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02004565 }
4566 void operator=(uint64_t value) volatile
4567 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004568 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
4569 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02004570 }
4571 CONSTEXPR operator uint64_t()
4572 {
4573 return (static_cast<uint64_t>(word1) << 32) | word0;
4574 }
4575 operator uint64_t() volatile
4576 {
4577 return (static_cast<uint64_t>(word1) << 32) | word0;
4578 }
4579 basep_r copy() volatile
4580 {
4581 return *this;
4582 }
4583#endif
4584};
4585
4586// wd_status_r - WD_STATUS
4587struct wd_status_r
4588{
4589#ifndef __cplusplus
4590 union
4591 {
4592 struct
4593 {
4594 uint32_t core_slice_state : 2; // WD core slice parser state
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004595 uint32_t core_idle : 1; // Core idle
Jonny Svärd136810f2021-10-13 16:04:26 +02004596 uint32_t ctrl_state : 2; // WD control state
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004597 uint32_t ctrl_idle : 1; // All stripe jobs idle (all weights consumed)
4598 uint32_t write_buf_index0 : 3; // current write index for next data from core
4599 uint32_t write_buf_valid0 : 1; // write buf valid (full)
4600 uint32_t write_buf_idle0 : 1; // write buf idle (empty)
4601 uint32_t write_buf_index1 : 3; // current write index for next data from core
4602 uint32_t write_buf_valid1 : 1; // write buf valid (full)
4603 uint32_t write_buf_idle1 : 1; // write buf idle (empty)
4604 uint32_t events : 12; // WD events mapped as appendix A
4605 uint32_t reserved0 : 4;
4606 };
4607 uint32_t word;
4608 };
Jonny Svärd136810f2021-10-13 16:04:26 +02004609#else
4610 private:
4611 uint32_t word0;
4612
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004613 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02004614 CONSTEXPR wd_status_r() : word0(0) {}
4615 CONSTEXPR wd_status_r(uint32_t init) : word0(init) {}
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004616 CONSTEXPR void operator=(uint32_t value)
4617 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004618 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004619 }
4620 void operator=(uint32_t value) volatile
4621 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004622 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004623 }
4624 CONSTEXPR operator uint32_t()
4625 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004626 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004627 }
4628 operator uint32_t() volatile
4629 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004630 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004631 }
4632 wd_status_r copy() volatile
4633 {
4634 return *this;
4635 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004636 CONSTEXPR NPU_NAMESPACE::wd_core_slice_state get_core_slice_state() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004637 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004638 NPU_NAMESPACE::wd_core_slice_state value =
4639 static_cast<NPU_NAMESPACE::wd_core_slice_state>(((1U << 2) - 1) & (word0 >> 0));
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004640 return value;
4641 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004642 NPU_NAMESPACE::wd_core_slice_state get_core_slice_state() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004643 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004644 NPU_NAMESPACE::wd_core_slice_state value =
4645 static_cast<NPU_NAMESPACE::wd_core_slice_state>(((1U << 2) - 1) & (word0 >> 0));
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004646 return value;
4647 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004648 CONSTEXPR wd_status_r &set_core_slice_state(NPU_NAMESPACE::wd_core_slice_state value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004649 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004650 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004651 return *this;
4652 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004653 volatile wd_status_r &set_core_slice_state(NPU_NAMESPACE::wd_core_slice_state value) volatile
4654 {
4655 word0 = (((~((1U << 2) - 1)) << 0) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 0);
4656 return *this;
4657 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004658 CONSTEXPR uint32_t get_core_idle() const
4659 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004660 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004661 return value;
4662 }
4663 uint32_t get_core_idle() const volatile
4664 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004665 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004666 return value;
4667 }
4668 CONSTEXPR wd_status_r &set_core_idle(uint32_t value)
4669 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004670 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
4671 return *this;
4672 }
4673 volatile wd_status_r &set_core_idle(uint32_t value) volatile
4674 {
4675 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004676 return *this;
4677 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004678 CONSTEXPR NPU_NAMESPACE::wd_ctrl_state get_ctrl_state() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004679 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004680 NPU_NAMESPACE::wd_ctrl_state value = static_cast<NPU_NAMESPACE::wd_ctrl_state>(((1U << 2) - 1) & (word0 >> 3));
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004681 return value;
4682 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004683 NPU_NAMESPACE::wd_ctrl_state get_ctrl_state() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004684 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004685 NPU_NAMESPACE::wd_ctrl_state value = static_cast<NPU_NAMESPACE::wd_ctrl_state>(((1U << 2) - 1) & (word0 >> 3));
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004686 return value;
4687 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004688 CONSTEXPR wd_status_r &set_ctrl_state(NPU_NAMESPACE::wd_ctrl_state value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004689 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004690 word0 = (((~((1U << 2) - 1)) << 3) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004691 return *this;
4692 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01004693 volatile wd_status_r &set_ctrl_state(NPU_NAMESPACE::wd_ctrl_state value) volatile
4694 {
4695 word0 = (((~((1U << 2) - 1)) << 3) & word0) | ((((1U << 2) - 1) & static_cast<uint32_t>(value)) << 3);
4696 return *this;
4697 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004698 CONSTEXPR uint32_t get_ctrl_idle() const
4699 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004700 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004701 return value;
4702 }
4703 uint32_t get_ctrl_idle() const volatile
4704 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004705 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004706 return value;
4707 }
4708 CONSTEXPR wd_status_r &set_ctrl_idle(uint32_t value)
4709 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004710 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
4711 return *this;
4712 }
4713 volatile wd_status_r &set_ctrl_idle(uint32_t value) volatile
4714 {
4715 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004716 return *this;
4717 }
4718 CONSTEXPR uint32_t get_write_buf_index0() const
4719 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004720 uint32_t value = ((1U << 3) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004721 return value;
4722 }
4723 uint32_t get_write_buf_index0() const volatile
4724 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004725 uint32_t value = ((1U << 3) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004726 return value;
4727 }
4728 CONSTEXPR wd_status_r &set_write_buf_index0(uint32_t value)
4729 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004730 word0 = (((~((1U << 3) - 1)) << 6) & word0) | ((((1U << 3) - 1) & value) << 6);
4731 return *this;
4732 }
4733 volatile wd_status_r &set_write_buf_index0(uint32_t value) volatile
4734 {
4735 word0 = (((~((1U << 3) - 1)) << 6) & word0) | ((((1U << 3) - 1) & value) << 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004736 return *this;
4737 }
4738 CONSTEXPR uint32_t get_write_buf_valid0() const
4739 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004740 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004741 return value;
4742 }
4743 uint32_t get_write_buf_valid0() const volatile
4744 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004745 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004746 return value;
4747 }
4748 CONSTEXPR wd_status_r &set_write_buf_valid0(uint32_t value)
4749 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004750 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
4751 return *this;
4752 }
4753 volatile wd_status_r &set_write_buf_valid0(uint32_t value) volatile
4754 {
4755 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004756 return *this;
4757 }
4758 CONSTEXPR uint32_t get_write_buf_idle0() const
4759 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004760 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004761 return value;
4762 }
4763 uint32_t get_write_buf_idle0() const volatile
4764 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004765 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004766 return value;
4767 }
4768 CONSTEXPR wd_status_r &set_write_buf_idle0(uint32_t value)
4769 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004770 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
4771 return *this;
4772 }
4773 volatile wd_status_r &set_write_buf_idle0(uint32_t value) volatile
4774 {
4775 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004776 return *this;
4777 }
4778 CONSTEXPR uint32_t get_write_buf_index1() const
4779 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004780 uint32_t value = ((1U << 3) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004781 return value;
4782 }
4783 uint32_t get_write_buf_index1() const volatile
4784 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004785 uint32_t value = ((1U << 3) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004786 return value;
4787 }
4788 CONSTEXPR wd_status_r &set_write_buf_index1(uint32_t value)
4789 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004790 word0 = (((~((1U << 3) - 1)) << 11) & word0) | ((((1U << 3) - 1) & value) << 11);
4791 return *this;
4792 }
4793 volatile wd_status_r &set_write_buf_index1(uint32_t value) volatile
4794 {
4795 word0 = (((~((1U << 3) - 1)) << 11) & word0) | ((((1U << 3) - 1) & value) << 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004796 return *this;
4797 }
4798 CONSTEXPR uint32_t get_write_buf_valid1() const
4799 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004800 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004801 return value;
4802 }
4803 uint32_t get_write_buf_valid1() const volatile
4804 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004805 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004806 return value;
4807 }
4808 CONSTEXPR wd_status_r &set_write_buf_valid1(uint32_t value)
4809 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004810 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
4811 return *this;
4812 }
4813 volatile wd_status_r &set_write_buf_valid1(uint32_t value) volatile
4814 {
4815 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004816 return *this;
4817 }
4818 CONSTEXPR uint32_t get_write_buf_idle1() const
4819 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004820 uint32_t value = ((1U << 1) - 1) & (word0 >> 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004821 return value;
4822 }
4823 uint32_t get_write_buf_idle1() const volatile
4824 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004825 uint32_t value = ((1U << 1) - 1) & (word0 >> 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004826 return value;
4827 }
4828 CONSTEXPR wd_status_r &set_write_buf_idle1(uint32_t value)
4829 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004830 word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & value) << 15);
4831 return *this;
4832 }
4833 volatile wd_status_r &set_write_buf_idle1(uint32_t value) volatile
4834 {
4835 word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & value) << 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004836 return *this;
4837 }
4838 CONSTEXPR uint32_t get_events() const
4839 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004840 uint32_t value = ((1U << 12) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004841 return value;
4842 }
4843 uint32_t get_events() const volatile
4844 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004845 uint32_t value = ((1U << 12) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004846 return value;
4847 }
4848 CONSTEXPR wd_status_r &set_events(uint32_t value)
4849 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004850 word0 = (((~((1U << 12) - 1)) << 16) & word0) | ((((1U << 12) - 1) & value) << 16);
4851 return *this;
4852 }
4853 volatile wd_status_r &set_events(uint32_t value) volatile
4854 {
4855 word0 = (((~((1U << 12) - 1)) << 16) & word0) | ((((1U << 12) - 1) & value) << 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004856 return *this;
4857 }
Jonny Svärd136810f2021-10-13 16:04:26 +02004858#endif
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004859};
4860
Jonny Svärd136810f2021-10-13 16:04:26 +02004861// mac_status_r - MAC_STATUS
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004862struct mac_status_r
4863{
Jonny Svärd136810f2021-10-13 16:04:26 +02004864#ifndef __cplusplus
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004865 union
4866 {
4867 struct
4868 {
4869 uint32_t block_cfg_valid : 1; // MAC has a valid block configuration
4870 uint32_t trav_en : 1; // MAC is doing block traversal
4871 uint32_t wait_for_ib : 1; // MAC is waiting for an Input Buffer to become available
4872 uint32_t wait_for_acc_buf : 1; // MAC is waiting for an Accumulator Buffer to become available
4873 uint32_t wait_for_weights : 1; // MAC is waiting for a Weight Block to become available
4874 uint32_t stall_stripe : 1; // MAC is stalling between two stripes
4875 uint32_t dw_sel : 1; // Currently used weight interface in MAC AI
4876 uint32_t wait_for_dw0_ready : 1; // MAC AI is waiting for MAC DPU to send dw0_ready to WD
4877 uint32_t wait_for_dw1_ready : 1; // MAC AI is waiting for MAC DPU to send dw1_ready to WD
4878 uint32_t acc_buf_sel_ai : 1; // Currently used AccBuf interface in MAC AI
4879 uint32_t wait_for_acc0_ready : 1; // MAC AI is waiting for acc0_ready from AO
4880 uint32_t wait_for_acc1_ready : 1; // MAC AI is waiting for acc1_ready from AO
4881 uint32_t acc_buf_sel_aa : 1; // Currently used AccBuf interface in MAC ADDER_ARRAY
4882 uint32_t acc0_valid : 1; // MAC outgoing value of acc0_valid
4883 uint32_t acc1_valid : 1; // MAC outgoing value of acc1_valid
4884 uint32_t reserved0 : 1;
4885 uint32_t events : 11; // Mapped to MAC events described in Appendix A
4886 uint32_t reserved1 : 5;
4887 };
4888 uint32_t word;
4889 };
Jonny Svärd136810f2021-10-13 16:04:26 +02004890#else
4891 private:
4892 uint32_t word0;
4893
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004894 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02004895 CONSTEXPR mac_status_r() : word0(0) {}
4896 CONSTEXPR mac_status_r(uint32_t init) : word0(init) {}
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004897 CONSTEXPR void operator=(uint32_t value)
4898 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004899 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004900 }
4901 void operator=(uint32_t value) volatile
4902 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004903 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004904 }
4905 CONSTEXPR operator uint32_t()
4906 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004907 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004908 }
4909 operator uint32_t() volatile
4910 {
Jonny Svärd136810f2021-10-13 16:04:26 +02004911 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004912 }
4913 mac_status_r copy() volatile
4914 {
4915 return *this;
4916 }
4917 CONSTEXPR uint32_t get_block_cfg_valid() const
4918 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004919 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004920 return value;
4921 }
4922 uint32_t get_block_cfg_valid() const volatile
4923 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004924 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004925 return value;
4926 }
4927 CONSTEXPR mac_status_r &set_block_cfg_valid(uint32_t value)
4928 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004929 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
4930 return *this;
4931 }
4932 volatile mac_status_r &set_block_cfg_valid(uint32_t value) volatile
4933 {
4934 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004935 return *this;
4936 }
4937 CONSTEXPR uint32_t get_trav_en() const
4938 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004939 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004940 return value;
4941 }
4942 uint32_t get_trav_en() const volatile
4943 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004944 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004945 return value;
4946 }
4947 CONSTEXPR mac_status_r &set_trav_en(uint32_t value)
4948 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004949 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
4950 return *this;
4951 }
4952 volatile mac_status_r &set_trav_en(uint32_t value) volatile
4953 {
4954 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004955 return *this;
4956 }
4957 CONSTEXPR uint32_t get_wait_for_ib() const
4958 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004959 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004960 return value;
4961 }
4962 uint32_t get_wait_for_ib() const volatile
4963 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004964 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004965 return value;
4966 }
4967 CONSTEXPR mac_status_r &set_wait_for_ib(uint32_t value)
4968 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004969 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
4970 return *this;
4971 }
4972 volatile mac_status_r &set_wait_for_ib(uint32_t value) volatile
4973 {
4974 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004975 return *this;
4976 }
4977 CONSTEXPR uint32_t get_wait_for_acc_buf() const
4978 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004979 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004980 return value;
4981 }
4982 uint32_t get_wait_for_acc_buf() const volatile
4983 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004984 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004985 return value;
4986 }
4987 CONSTEXPR mac_status_r &set_wait_for_acc_buf(uint32_t value)
4988 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004989 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
4990 return *this;
4991 }
4992 volatile mac_status_r &set_wait_for_acc_buf(uint32_t value) volatile
4993 {
4994 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02004995 return *this;
4996 }
4997 CONSTEXPR uint32_t get_wait_for_weights() const
4998 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01004999 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005000 return value;
5001 }
5002 uint32_t get_wait_for_weights() const volatile
5003 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005004 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005005 return value;
5006 }
5007 CONSTEXPR mac_status_r &set_wait_for_weights(uint32_t value)
5008 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005009 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
5010 return *this;
5011 }
5012 volatile mac_status_r &set_wait_for_weights(uint32_t value) volatile
5013 {
5014 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005015 return *this;
5016 }
5017 CONSTEXPR uint32_t get_stall_stripe() const
5018 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005019 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005020 return value;
5021 }
5022 uint32_t get_stall_stripe() const volatile
5023 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005024 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005025 return value;
5026 }
5027 CONSTEXPR mac_status_r &set_stall_stripe(uint32_t value)
5028 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005029 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
5030 return *this;
5031 }
5032 volatile mac_status_r &set_stall_stripe(uint32_t value) volatile
5033 {
5034 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005035 return *this;
5036 }
5037 CONSTEXPR uint32_t get_dw_sel() const
5038 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005039 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005040 return value;
5041 }
5042 uint32_t get_dw_sel() const volatile
5043 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005044 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005045 return value;
5046 }
5047 CONSTEXPR mac_status_r &set_dw_sel(uint32_t value)
5048 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005049 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
5050 return *this;
5051 }
5052 volatile mac_status_r &set_dw_sel(uint32_t value) volatile
5053 {
5054 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005055 return *this;
5056 }
5057 CONSTEXPR uint32_t get_wait_for_dw0_ready() const
5058 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005059 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005060 return value;
5061 }
5062 uint32_t get_wait_for_dw0_ready() const volatile
5063 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005064 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005065 return value;
5066 }
5067 CONSTEXPR mac_status_r &set_wait_for_dw0_ready(uint32_t value)
5068 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005069 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
5070 return *this;
5071 }
5072 volatile mac_status_r &set_wait_for_dw0_ready(uint32_t value) volatile
5073 {
5074 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005075 return *this;
5076 }
5077 CONSTEXPR uint32_t get_wait_for_dw1_ready() const
5078 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005079 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005080 return value;
5081 }
5082 uint32_t get_wait_for_dw1_ready() const volatile
5083 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005084 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005085 return value;
5086 }
5087 CONSTEXPR mac_status_r &set_wait_for_dw1_ready(uint32_t value)
5088 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005089 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
5090 return *this;
5091 }
5092 volatile mac_status_r &set_wait_for_dw1_ready(uint32_t value) volatile
5093 {
5094 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005095 return *this;
5096 }
5097 CONSTEXPR uint32_t get_acc_buf_sel_ai() const
5098 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005099 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005100 return value;
5101 }
5102 uint32_t get_acc_buf_sel_ai() const volatile
5103 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005104 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005105 return value;
5106 }
5107 CONSTEXPR mac_status_r &set_acc_buf_sel_ai(uint32_t value)
5108 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005109 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
5110 return *this;
5111 }
5112 volatile mac_status_r &set_acc_buf_sel_ai(uint32_t value) volatile
5113 {
5114 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005115 return *this;
5116 }
5117 CONSTEXPR uint32_t get_wait_for_acc0_ready() const
5118 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005119 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005120 return value;
5121 }
5122 uint32_t get_wait_for_acc0_ready() const volatile
5123 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005124 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005125 return value;
5126 }
5127 CONSTEXPR mac_status_r &set_wait_for_acc0_ready(uint32_t value)
5128 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005129 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
5130 return *this;
5131 }
5132 volatile mac_status_r &set_wait_for_acc0_ready(uint32_t value) volatile
5133 {
5134 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005135 return *this;
5136 }
5137 CONSTEXPR uint32_t get_wait_for_acc1_ready() const
5138 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005139 uint32_t value = ((1U << 1) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005140 return value;
5141 }
5142 uint32_t get_wait_for_acc1_ready() const volatile
5143 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005144 uint32_t value = ((1U << 1) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005145 return value;
5146 }
5147 CONSTEXPR mac_status_r &set_wait_for_acc1_ready(uint32_t value)
5148 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005149 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & value) << 11);
5150 return *this;
5151 }
5152 volatile mac_status_r &set_wait_for_acc1_ready(uint32_t value) volatile
5153 {
5154 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & value) << 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005155 return *this;
5156 }
5157 CONSTEXPR uint32_t get_acc_buf_sel_aa() const
5158 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005159 uint32_t value = ((1U << 1) - 1) & (word0 >> 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005160 return value;
5161 }
5162 uint32_t get_acc_buf_sel_aa() const volatile
5163 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005164 uint32_t value = ((1U << 1) - 1) & (word0 >> 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005165 return value;
5166 }
5167 CONSTEXPR mac_status_r &set_acc_buf_sel_aa(uint32_t value)
5168 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005169 word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & value) << 12);
5170 return *this;
5171 }
5172 volatile mac_status_r &set_acc_buf_sel_aa(uint32_t value) volatile
5173 {
5174 word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & value) << 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005175 return *this;
5176 }
5177 CONSTEXPR uint32_t get_acc0_valid() const
5178 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005179 uint32_t value = ((1U << 1) - 1) & (word0 >> 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005180 return value;
5181 }
5182 uint32_t get_acc0_valid() const volatile
5183 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005184 uint32_t value = ((1U << 1) - 1) & (word0 >> 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005185 return value;
5186 }
5187 CONSTEXPR mac_status_r &set_acc0_valid(uint32_t value)
5188 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005189 word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & value) << 13);
5190 return *this;
5191 }
5192 volatile mac_status_r &set_acc0_valid(uint32_t value) volatile
5193 {
5194 word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & value) << 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005195 return *this;
5196 }
5197 CONSTEXPR uint32_t get_acc1_valid() const
5198 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005199 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005200 return value;
5201 }
5202 uint32_t get_acc1_valid() const volatile
5203 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005204 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005205 return value;
5206 }
5207 CONSTEXPR mac_status_r &set_acc1_valid(uint32_t value)
5208 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005209 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
5210 return *this;
5211 }
5212 volatile mac_status_r &set_acc1_valid(uint32_t value) volatile
5213 {
5214 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005215 return *this;
5216 }
5217 CONSTEXPR uint32_t get_events() const
5218 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005219 uint32_t value = ((1U << 11) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005220 return value;
5221 }
5222 uint32_t get_events() const volatile
5223 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005224 uint32_t value = ((1U << 11) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005225 return value;
5226 }
5227 CONSTEXPR mac_status_r &set_events(uint32_t value)
5228 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005229 word0 = (((~((1U << 11) - 1)) << 16) & word0) | ((((1U << 11) - 1) & value) << 16);
5230 return *this;
5231 }
5232 volatile mac_status_r &set_events(uint32_t value) volatile
5233 {
5234 word0 = (((~((1U << 11) - 1)) << 16) & word0) | ((((1U << 11) - 1) & value) << 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005235 return *this;
5236 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005237#endif
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005238};
5239
Jonny Svärd136810f2021-10-13 16:04:26 +02005240// ao_status_r - AO_STATUS
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005241struct ao_status_r
5242{
Jonny Svärd136810f2021-10-13 16:04:26 +02005243#ifndef __cplusplus
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005244 union
5245 {
5246 struct
5247 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005248 uint32_t cmd_sbw_valid : 1; // Block command to shared buffer write module is valid
5249 uint32_t cmd_act_valid : 1; // Block command to activation function module is valid
5250 uint32_t cmd_ctl_valid : 1; // Block command to control module is valid
5251 uint32_t cmd_scl_valid : 1; // Block command to scale module is valid
5252 uint32_t cmd_sbr_valid : 1; // Block command to shared buffer read module is valid
5253 uint32_t cmd_ofm_valid : 1; // Block command to ofm parameter module is valid
5254 uint32_t blk_cmd_ready : 1; // Ready to accept block command
5255 uint32_t blk_cmd_valid : 1; // Block command from CC is valid
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005256 uint32_t reserved0 : 8;
Jonny Svärd136810f2021-10-13 16:04:26 +02005257 uint32_t events : 8; // Mapped to AO events described in Appendix A
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005258 uint32_t reserved1 : 8;
5259 };
5260 uint32_t word;
5261 };
Jonny Svärd136810f2021-10-13 16:04:26 +02005262#else
5263 private:
5264 uint32_t word0;
5265
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005266 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02005267 CONSTEXPR ao_status_r() : word0(0) {}
5268 CONSTEXPR ao_status_r(uint32_t init) : word0(init) {}
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005269 CONSTEXPR void operator=(uint32_t value)
5270 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005271 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005272 }
5273 void operator=(uint32_t value) volatile
5274 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005275 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005276 }
5277 CONSTEXPR operator uint32_t()
5278 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005279 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005280 }
5281 operator uint32_t() volatile
5282 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005283 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005284 }
5285 ao_status_r copy() volatile
5286 {
5287 return *this;
5288 }
5289 CONSTEXPR uint32_t get_cmd_sbw_valid() const
5290 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005291 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005292 return value;
5293 }
5294 uint32_t get_cmd_sbw_valid() const volatile
5295 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005296 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005297 return value;
5298 }
5299 CONSTEXPR ao_status_r &set_cmd_sbw_valid(uint32_t value)
5300 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005301 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
5302 return *this;
5303 }
5304 volatile ao_status_r &set_cmd_sbw_valid(uint32_t value) volatile
5305 {
5306 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005307 return *this;
5308 }
5309 CONSTEXPR uint32_t get_cmd_act_valid() const
5310 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005311 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005312 return value;
5313 }
5314 uint32_t get_cmd_act_valid() const volatile
5315 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005316 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005317 return value;
5318 }
5319 CONSTEXPR ao_status_r &set_cmd_act_valid(uint32_t value)
5320 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005321 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
5322 return *this;
5323 }
5324 volatile ao_status_r &set_cmd_act_valid(uint32_t value) volatile
5325 {
5326 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005327 return *this;
5328 }
5329 CONSTEXPR uint32_t get_cmd_ctl_valid() const
5330 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005331 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005332 return value;
5333 }
5334 uint32_t get_cmd_ctl_valid() const volatile
5335 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005336 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005337 return value;
5338 }
5339 CONSTEXPR ao_status_r &set_cmd_ctl_valid(uint32_t value)
5340 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005341 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
5342 return *this;
5343 }
5344 volatile ao_status_r &set_cmd_ctl_valid(uint32_t value) volatile
5345 {
5346 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005347 return *this;
5348 }
5349 CONSTEXPR uint32_t get_cmd_scl_valid() const
5350 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005351 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005352 return value;
5353 }
5354 uint32_t get_cmd_scl_valid() const volatile
5355 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005356 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005357 return value;
5358 }
5359 CONSTEXPR ao_status_r &set_cmd_scl_valid(uint32_t value)
5360 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005361 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
5362 return *this;
5363 }
5364 volatile ao_status_r &set_cmd_scl_valid(uint32_t value) volatile
5365 {
5366 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005367 return *this;
5368 }
5369 CONSTEXPR uint32_t get_cmd_sbr_valid() const
5370 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005371 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005372 return value;
5373 }
5374 uint32_t get_cmd_sbr_valid() const volatile
5375 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005376 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005377 return value;
5378 }
5379 CONSTEXPR ao_status_r &set_cmd_sbr_valid(uint32_t value)
5380 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005381 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
5382 return *this;
5383 }
5384 volatile ao_status_r &set_cmd_sbr_valid(uint32_t value) volatile
5385 {
5386 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005387 return *this;
5388 }
5389 CONSTEXPR uint32_t get_cmd_ofm_valid() const
5390 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005391 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005392 return value;
5393 }
5394 uint32_t get_cmd_ofm_valid() const volatile
5395 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005396 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005397 return value;
5398 }
5399 CONSTEXPR ao_status_r &set_cmd_ofm_valid(uint32_t value)
5400 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005401 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
5402 return *this;
5403 }
5404 volatile ao_status_r &set_cmd_ofm_valid(uint32_t value) volatile
5405 {
5406 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005407 return *this;
5408 }
5409 CONSTEXPR uint32_t get_blk_cmd_ready() const
5410 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005411 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005412 return value;
5413 }
5414 uint32_t get_blk_cmd_ready() const volatile
5415 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005416 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005417 return value;
5418 }
5419 CONSTEXPR ao_status_r &set_blk_cmd_ready(uint32_t value)
5420 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005421 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
5422 return *this;
5423 }
5424 volatile ao_status_r &set_blk_cmd_ready(uint32_t value) volatile
5425 {
5426 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005427 return *this;
5428 }
5429 CONSTEXPR uint32_t get_blk_cmd_valid() const
5430 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005431 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005432 return value;
5433 }
5434 uint32_t get_blk_cmd_valid() const volatile
5435 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005436 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005437 return value;
5438 }
5439 CONSTEXPR ao_status_r &set_blk_cmd_valid(uint32_t value)
5440 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005441 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
5442 return *this;
5443 }
5444 volatile ao_status_r &set_blk_cmd_valid(uint32_t value) volatile
5445 {
5446 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005447 return *this;
5448 }
5449 CONSTEXPR uint32_t get_events() const
5450 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005451 uint32_t value = ((1U << 8) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005452 return value;
5453 }
5454 uint32_t get_events() const volatile
5455 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005456 uint32_t value = ((1U << 8) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005457 return value;
5458 }
5459 CONSTEXPR ao_status_r &set_events(uint32_t value)
5460 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005461 word0 = (((~((1U << 8) - 1)) << 16) & word0) | ((((1U << 8) - 1) & value) << 16);
5462 return *this;
5463 }
5464 volatile ao_status_r &set_events(uint32_t value) volatile
5465 {
5466 word0 = (((~((1U << 8) - 1)) << 16) & word0) | ((((1U << 8) - 1) & value) << 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005467 return *this;
5468 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005469#endif
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005470};
5471
Jonny Svärd136810f2021-10-13 16:04:26 +02005472// dma_status0_r - DMA_STATUS0
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005473struct dma_status0_r
5474{
Jonny Svärd136810f2021-10-13 16:04:26 +02005475#ifndef __cplusplus
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005476 union
5477 {
5478 struct
5479 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005480 uint32_t cmd_idle : 1; // When this bit is high means that the CMD block is not busy in generating addresses
5481 // for a CMD job
5482 uint32_t ifm_idle : 1; // When this bit is high means that there are no ongoing IFM jobs
5483 uint32_t wgt_idle_c0 : 1; // When this bit is high means that the WGT block is not busy in generating
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005484 // addresses for a WGT job
Jonny Svärd136810f2021-10-13 16:04:26 +02005485 uint32_t bas_idle_c0 : 1; // When this bit is high means that the BAS block is not busy in generating
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005486 // addresses for a BAS job
Jonny Svärd136810f2021-10-13 16:04:26 +02005487 uint32_t m2m_idle : 1; // When this bit is high means that there are no ongoing M2M jobs
5488 uint32_t ofm_idle : 1; // When this bit is high means that there are no ongoing OFM jobs
5489 uint32_t halt_req : 1; // CPM has requested to HALT AXI bus before soft reset
5490 uint32_t halt_ack : 1; // DMA is in condition to halt the AXI bus since there are no pending transactions
5491 uint32_t pause_req : 1; // CC has requested to pause the AXI
5492 uint32_t pause_ack : 1; // DMA is in condition to pause the AXI bus since there are no pending transactions
5493 uint32_t ib0_ai_valid_c0 : 1; // Data for AI to be read in IFM input buffer 0 - Core 0
5494 uint32_t ib0_ai_ready_c0 : 1; // Data consumed from AI in IFM input buffer 0 - Core 0
5495 uint32_t ib1_ai_valid_c0 : 1; // Data for AI to be read in IFM input buffer 1 - Core 0
5496 uint32_t ib1_ai_ready_c0 : 1; // Data consumed from AI in IFM input buffer 1 - Core 0
5497 uint32_t ib0_ao_valid_c0 : 1; // Data for AO to be read in IFM input buffer 0 - Core 0
5498 uint32_t ib0_ao_ready_c0 : 1; // Data consumed from AO in IFM input buffer 0 - Core 0
5499 uint32_t ib1_ao_valid_c0 : 1; // Data for AO to be read in IFM input buffer 0 - Core 0
5500 uint32_t ib1_ao_ready_c0 : 1; // Data consumed from AO in IFM input buffer 1 - Core 0
5501 uint32_t ob0_valid_c0 : 1; // Data for DMA ready to be consumed in OFM output buffer 0 - Core 0
5502 uint32_t ob0_ready_c0 : 1; // Data consumed from DMA in OFM output buffer 0 - Core 0
5503 uint32_t ob1_valid_c0 : 1; // Data for DMA ready to be consumed in OFM output buffer 1 - Core 0
5504 uint32_t ob1_ready_c0 : 1; // Data consumed from DMA in OFM output buffer 1 - Core 0
5505 uint32_t cmd_valid : 1; // New command word for CC to be consumed
5506 uint32_t cmd_ready : 1; // command word consumed by CC
5507 uint32_t wd_bitstream_valid_c0 : 1; // New weight word for WD to be consumed - Core 0
5508 uint32_t wd_bitstream_ready_c0 : 1; // Weight word consumed by WD - Core 0
5509 uint32_t bs_bitstream_valid_c0 : 1; // New BaS word for AO to be consumed - Core 0
5510 uint32_t bs_bitstream_ready_c0 : 1; // BaS word consumed by AO - Core 0
5511 uint32_t axi0_ar_stalled : 1; // Read transfer request stalled on arready low AXI0 (due to memory system)
5512 uint32_t axi0_rd_limit_stall : 1; // Read stalled due to one AXI0 limit counter being reached
5513 uint32_t axi0_aw_stalled : 1; // Write transfer request stalled on awready low AXI0 (due to memory system)
5514 uint32_t axi0_w_stalled : 1; // Write transfer stalled on awready low AXI0 (due to memory system)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005515 };
5516 uint32_t word;
5517 };
Jonny Svärd136810f2021-10-13 16:04:26 +02005518#else
5519 private:
5520 uint32_t word0;
5521
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005522 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02005523 CONSTEXPR dma_status0_r() : word0(0) {}
5524 CONSTEXPR dma_status0_r(uint32_t init) : word0(init) {}
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005525 CONSTEXPR void operator=(uint32_t value)
5526 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005527 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005528 }
5529 void operator=(uint32_t value) volatile
5530 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005531 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005532 }
5533 CONSTEXPR operator uint32_t()
5534 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005535 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005536 }
5537 operator uint32_t() volatile
5538 {
Jonny Svärd136810f2021-10-13 16:04:26 +02005539 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005540 }
5541 dma_status0_r copy() volatile
5542 {
5543 return *this;
5544 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005545 CONSTEXPR uint32_t get_cmd_idle() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005546 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005547 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005548 return value;
5549 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005550 uint32_t get_cmd_idle() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005551 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005552 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005553 return value;
5554 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005555 CONSTEXPR dma_status0_r &set_cmd_idle(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005556 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005557 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
5558 return *this;
5559 }
5560 volatile dma_status0_r &set_cmd_idle(uint32_t value) volatile
5561 {
5562 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005563 return *this;
5564 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005565 CONSTEXPR uint32_t get_ifm_idle() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005566 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005567 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005568 return value;
5569 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005570 uint32_t get_ifm_idle() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005571 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005572 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005573 return value;
5574 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005575 CONSTEXPR dma_status0_r &set_ifm_idle(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005576 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005577 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
5578 return *this;
5579 }
5580 volatile dma_status0_r &set_ifm_idle(uint32_t value) volatile
5581 {
5582 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005583 return *this;
5584 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005585 CONSTEXPR uint32_t get_wgt_idle_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005586 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005587 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005588 return value;
5589 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005590 uint32_t get_wgt_idle_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005591 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005592 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005593 return value;
5594 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005595 CONSTEXPR dma_status0_r &set_wgt_idle_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005596 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005597 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
5598 return *this;
5599 }
5600 volatile dma_status0_r &set_wgt_idle_c0(uint32_t value) volatile
5601 {
5602 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005603 return *this;
5604 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005605 CONSTEXPR uint32_t get_bas_idle_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005606 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005607 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005608 return value;
5609 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005610 uint32_t get_bas_idle_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005611 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005612 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005613 return value;
5614 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005615 CONSTEXPR dma_status0_r &set_bas_idle_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005616 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005617 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
5618 return *this;
5619 }
5620 volatile dma_status0_r &set_bas_idle_c0(uint32_t value) volatile
5621 {
5622 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005623 return *this;
5624 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005625 CONSTEXPR uint32_t get_m2m_idle() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005626 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005627 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005628 return value;
5629 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005630 uint32_t get_m2m_idle() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005631 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005632 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005633 return value;
5634 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005635 CONSTEXPR dma_status0_r &set_m2m_idle(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005636 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005637 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
5638 return *this;
5639 }
5640 volatile dma_status0_r &set_m2m_idle(uint32_t value) volatile
5641 {
5642 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005643 return *this;
5644 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005645 CONSTEXPR uint32_t get_ofm_idle() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005646 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005647 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005648 return value;
5649 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005650 uint32_t get_ofm_idle() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005651 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005652 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005653 return value;
5654 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005655 CONSTEXPR dma_status0_r &set_ofm_idle(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005656 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005657 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
5658 return *this;
5659 }
5660 volatile dma_status0_r &set_ofm_idle(uint32_t value) volatile
5661 {
5662 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005663 return *this;
5664 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005665 CONSTEXPR uint32_t get_halt_req() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005666 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005667 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005668 return value;
5669 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005670 uint32_t get_halt_req() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005671 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005672 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005673 return value;
5674 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005675 CONSTEXPR dma_status0_r &set_halt_req(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005676 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005677 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
5678 return *this;
5679 }
5680 volatile dma_status0_r &set_halt_req(uint32_t value) volatile
5681 {
5682 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005683 return *this;
5684 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005685 CONSTEXPR uint32_t get_halt_ack() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005686 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005687 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005688 return value;
5689 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005690 uint32_t get_halt_ack() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005691 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005692 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005693 return value;
5694 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005695 CONSTEXPR dma_status0_r &set_halt_ack(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005696 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005697 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
5698 return *this;
5699 }
5700 volatile dma_status0_r &set_halt_ack(uint32_t value) volatile
5701 {
5702 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005703 return *this;
5704 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005705 CONSTEXPR uint32_t get_pause_req() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005706 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005707 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005708 return value;
5709 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005710 uint32_t get_pause_req() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005711 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005712 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005713 return value;
5714 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005715 CONSTEXPR dma_status0_r &set_pause_req(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005716 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005717 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
5718 return *this;
5719 }
5720 volatile dma_status0_r &set_pause_req(uint32_t value) volatile
5721 {
5722 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005723 return *this;
5724 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005725 CONSTEXPR uint32_t get_pause_ack() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005726 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005727 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005728 return value;
5729 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005730 uint32_t get_pause_ack() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005731 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005732 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005733 return value;
5734 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005735 CONSTEXPR dma_status0_r &set_pause_ack(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005736 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005737 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
5738 return *this;
5739 }
5740 volatile dma_status0_r &set_pause_ack(uint32_t value) volatile
5741 {
5742 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005743 return *this;
5744 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005745 CONSTEXPR uint32_t get_ib0_ai_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005746 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005747 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005748 return value;
5749 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005750 uint32_t get_ib0_ai_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005751 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005752 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005753 return value;
5754 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005755 CONSTEXPR dma_status0_r &set_ib0_ai_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005756 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005757 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
5758 return *this;
5759 }
5760 volatile dma_status0_r &set_ib0_ai_valid_c0(uint32_t value) volatile
5761 {
5762 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005763 return *this;
5764 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005765 CONSTEXPR uint32_t get_ib0_ai_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005766 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005767 uint32_t value = ((1U << 1) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005768 return value;
5769 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005770 uint32_t get_ib0_ai_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005771 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005772 uint32_t value = ((1U << 1) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005773 return value;
5774 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005775 CONSTEXPR dma_status0_r &set_ib0_ai_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005776 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005777 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & value) << 11);
5778 return *this;
5779 }
5780 volatile dma_status0_r &set_ib0_ai_ready_c0(uint32_t value) volatile
5781 {
5782 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & value) << 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005783 return *this;
5784 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005785 CONSTEXPR uint32_t get_ib1_ai_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005786 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005787 uint32_t value = ((1U << 1) - 1) & (word0 >> 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005788 return value;
5789 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005790 uint32_t get_ib1_ai_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005791 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005792 uint32_t value = ((1U << 1) - 1) & (word0 >> 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005793 return value;
5794 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005795 CONSTEXPR dma_status0_r &set_ib1_ai_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005796 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005797 word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & value) << 12);
5798 return *this;
5799 }
5800 volatile dma_status0_r &set_ib1_ai_valid_c0(uint32_t value) volatile
5801 {
5802 word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & value) << 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005803 return *this;
5804 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005805 CONSTEXPR uint32_t get_ib1_ai_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005806 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005807 uint32_t value = ((1U << 1) - 1) & (word0 >> 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005808 return value;
5809 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005810 uint32_t get_ib1_ai_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005811 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005812 uint32_t value = ((1U << 1) - 1) & (word0 >> 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005813 return value;
5814 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005815 CONSTEXPR dma_status0_r &set_ib1_ai_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005816 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005817 word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & value) << 13);
5818 return *this;
5819 }
5820 volatile dma_status0_r &set_ib1_ai_ready_c0(uint32_t value) volatile
5821 {
5822 word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & value) << 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005823 return *this;
5824 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005825 CONSTEXPR uint32_t get_ib0_ao_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005826 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005827 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005828 return value;
5829 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005830 uint32_t get_ib0_ao_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005831 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005832 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005833 return value;
5834 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005835 CONSTEXPR dma_status0_r &set_ib0_ao_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005836 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005837 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
5838 return *this;
5839 }
5840 volatile dma_status0_r &set_ib0_ao_valid_c0(uint32_t value) volatile
5841 {
5842 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005843 return *this;
5844 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005845 CONSTEXPR uint32_t get_ib0_ao_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005846 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005847 uint32_t value = ((1U << 1) - 1) & (word0 >> 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005848 return value;
5849 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005850 uint32_t get_ib0_ao_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005851 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005852 uint32_t value = ((1U << 1) - 1) & (word0 >> 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005853 return value;
5854 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005855 CONSTEXPR dma_status0_r &set_ib0_ao_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005856 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005857 word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & value) << 15);
5858 return *this;
5859 }
5860 volatile dma_status0_r &set_ib0_ao_ready_c0(uint32_t value) volatile
5861 {
5862 word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & value) << 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005863 return *this;
5864 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005865 CONSTEXPR uint32_t get_ib1_ao_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005866 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005867 uint32_t value = ((1U << 1) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005868 return value;
5869 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005870 uint32_t get_ib1_ao_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005871 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005872 uint32_t value = ((1U << 1) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005873 return value;
5874 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005875 CONSTEXPR dma_status0_r &set_ib1_ao_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005876 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005877 word0 = (((~((1U << 1) - 1)) << 16) & word0) | ((((1U << 1) - 1) & value) << 16);
5878 return *this;
5879 }
5880 volatile dma_status0_r &set_ib1_ao_valid_c0(uint32_t value) volatile
5881 {
5882 word0 = (((~((1U << 1) - 1)) << 16) & word0) | ((((1U << 1) - 1) & value) << 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005883 return *this;
5884 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005885 CONSTEXPR uint32_t get_ib1_ao_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005886 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005887 uint32_t value = ((1U << 1) - 1) & (word0 >> 17);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005888 return value;
5889 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005890 uint32_t get_ib1_ao_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005891 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005892 uint32_t value = ((1U << 1) - 1) & (word0 >> 17);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005893 return value;
5894 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005895 CONSTEXPR dma_status0_r &set_ib1_ao_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005896 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005897 word0 = (((~((1U << 1) - 1)) << 17) & word0) | ((((1U << 1) - 1) & value) << 17);
5898 return *this;
5899 }
5900 volatile dma_status0_r &set_ib1_ao_ready_c0(uint32_t value) volatile
5901 {
5902 word0 = (((~((1U << 1) - 1)) << 17) & word0) | ((((1U << 1) - 1) & value) << 17);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005903 return *this;
5904 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005905 CONSTEXPR uint32_t get_ob0_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005906 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005907 uint32_t value = ((1U << 1) - 1) & (word0 >> 18);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005908 return value;
5909 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005910 uint32_t get_ob0_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005911 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005912 uint32_t value = ((1U << 1) - 1) & (word0 >> 18);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005913 return value;
5914 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005915 CONSTEXPR dma_status0_r &set_ob0_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005916 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005917 word0 = (((~((1U << 1) - 1)) << 18) & word0) | ((((1U << 1) - 1) & value) << 18);
5918 return *this;
5919 }
5920 volatile dma_status0_r &set_ob0_valid_c0(uint32_t value) volatile
5921 {
5922 word0 = (((~((1U << 1) - 1)) << 18) & word0) | ((((1U << 1) - 1) & value) << 18);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005923 return *this;
5924 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005925 CONSTEXPR uint32_t get_ob0_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005926 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005927 uint32_t value = ((1U << 1) - 1) & (word0 >> 19);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005928 return value;
5929 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005930 uint32_t get_ob0_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005931 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005932 uint32_t value = ((1U << 1) - 1) & (word0 >> 19);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005933 return value;
5934 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005935 CONSTEXPR dma_status0_r &set_ob0_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005936 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005937 word0 = (((~((1U << 1) - 1)) << 19) & word0) | ((((1U << 1) - 1) & value) << 19);
5938 return *this;
5939 }
5940 volatile dma_status0_r &set_ob0_ready_c0(uint32_t value) volatile
5941 {
5942 word0 = (((~((1U << 1) - 1)) << 19) & word0) | ((((1U << 1) - 1) & value) << 19);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005943 return *this;
5944 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005945 CONSTEXPR uint32_t get_ob1_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005946 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005947 uint32_t value = ((1U << 1) - 1) & (word0 >> 20);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005948 return value;
5949 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005950 uint32_t get_ob1_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005951 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005952 uint32_t value = ((1U << 1) - 1) & (word0 >> 20);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005953 return value;
5954 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005955 CONSTEXPR dma_status0_r &set_ob1_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005956 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005957 word0 = (((~((1U << 1) - 1)) << 20) & word0) | ((((1U << 1) - 1) & value) << 20);
5958 return *this;
5959 }
5960 volatile dma_status0_r &set_ob1_valid_c0(uint32_t value) volatile
5961 {
5962 word0 = (((~((1U << 1) - 1)) << 20) & word0) | ((((1U << 1) - 1) & value) << 20);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005963 return *this;
5964 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005965 CONSTEXPR uint32_t get_ob1_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005966 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005967 uint32_t value = ((1U << 1) - 1) & (word0 >> 21);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005968 return value;
5969 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005970 uint32_t get_ob1_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005971 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005972 uint32_t value = ((1U << 1) - 1) & (word0 >> 21);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005973 return value;
5974 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005975 CONSTEXPR dma_status0_r &set_ob1_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005976 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005977 word0 = (((~((1U << 1) - 1)) << 21) & word0) | ((((1U << 1) - 1) & value) << 21);
5978 return *this;
5979 }
5980 volatile dma_status0_r &set_ob1_ready_c0(uint32_t value) volatile
5981 {
5982 word0 = (((~((1U << 1) - 1)) << 21) & word0) | ((((1U << 1) - 1) & value) << 21);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005983 return *this;
5984 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005985 CONSTEXPR uint32_t get_cmd_valid() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005986 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005987 uint32_t value = ((1U << 1) - 1) & (word0 >> 22);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005988 return value;
5989 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005990 uint32_t get_cmd_valid() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005991 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005992 uint32_t value = ((1U << 1) - 1) & (word0 >> 22);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005993 return value;
5994 }
Jonny Svärd136810f2021-10-13 16:04:26 +02005995 CONSTEXPR dma_status0_r &set_cmd_valid(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02005996 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01005997 word0 = (((~((1U << 1) - 1)) << 22) & word0) | ((((1U << 1) - 1) & value) << 22);
5998 return *this;
5999 }
6000 volatile dma_status0_r &set_cmd_valid(uint32_t value) volatile
6001 {
6002 word0 = (((~((1U << 1) - 1)) << 22) & word0) | ((((1U << 1) - 1) & value) << 22);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006003 return *this;
6004 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006005 CONSTEXPR uint32_t get_cmd_ready() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006006 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006007 uint32_t value = ((1U << 1) - 1) & (word0 >> 23);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006008 return value;
6009 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006010 uint32_t get_cmd_ready() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006011 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006012 uint32_t value = ((1U << 1) - 1) & (word0 >> 23);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006013 return value;
6014 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006015 CONSTEXPR dma_status0_r &set_cmd_ready(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006016 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006017 word0 = (((~((1U << 1) - 1)) << 23) & word0) | ((((1U << 1) - 1) & value) << 23);
6018 return *this;
6019 }
6020 volatile dma_status0_r &set_cmd_ready(uint32_t value) volatile
6021 {
6022 word0 = (((~((1U << 1) - 1)) << 23) & word0) | ((((1U << 1) - 1) & value) << 23);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006023 return *this;
6024 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006025 CONSTEXPR uint32_t get_wd_bitstream_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006026 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006027 uint32_t value = ((1U << 1) - 1) & (word0 >> 24);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006028 return value;
6029 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006030 uint32_t get_wd_bitstream_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006031 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006032 uint32_t value = ((1U << 1) - 1) & (word0 >> 24);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006033 return value;
6034 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006035 CONSTEXPR dma_status0_r &set_wd_bitstream_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006036 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006037 word0 = (((~((1U << 1) - 1)) << 24) & word0) | ((((1U << 1) - 1) & value) << 24);
6038 return *this;
6039 }
6040 volatile dma_status0_r &set_wd_bitstream_valid_c0(uint32_t value) volatile
6041 {
6042 word0 = (((~((1U << 1) - 1)) << 24) & word0) | ((((1U << 1) - 1) & value) << 24);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006043 return *this;
6044 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006045 CONSTEXPR uint32_t get_wd_bitstream_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006046 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006047 uint32_t value = ((1U << 1) - 1) & (word0 >> 25);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006048 return value;
6049 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006050 uint32_t get_wd_bitstream_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006051 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006052 uint32_t value = ((1U << 1) - 1) & (word0 >> 25);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006053 return value;
6054 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006055 CONSTEXPR dma_status0_r &set_wd_bitstream_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006056 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006057 word0 = (((~((1U << 1) - 1)) << 25) & word0) | ((((1U << 1) - 1) & value) << 25);
6058 return *this;
6059 }
6060 volatile dma_status0_r &set_wd_bitstream_ready_c0(uint32_t value) volatile
6061 {
6062 word0 = (((~((1U << 1) - 1)) << 25) & word0) | ((((1U << 1) - 1) & value) << 25);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006063 return *this;
6064 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006065 CONSTEXPR uint32_t get_bs_bitstream_valid_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006066 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006067 uint32_t value = ((1U << 1) - 1) & (word0 >> 26);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006068 return value;
6069 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006070 uint32_t get_bs_bitstream_valid_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006071 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006072 uint32_t value = ((1U << 1) - 1) & (word0 >> 26);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006073 return value;
6074 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006075 CONSTEXPR dma_status0_r &set_bs_bitstream_valid_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006076 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006077 word0 = (((~((1U << 1) - 1)) << 26) & word0) | ((((1U << 1) - 1) & value) << 26);
6078 return *this;
6079 }
6080 volatile dma_status0_r &set_bs_bitstream_valid_c0(uint32_t value) volatile
6081 {
6082 word0 = (((~((1U << 1) - 1)) << 26) & word0) | ((((1U << 1) - 1) & value) << 26);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006083 return *this;
6084 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006085 CONSTEXPR uint32_t get_bs_bitstream_ready_c0() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006086 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006087 uint32_t value = ((1U << 1) - 1) & (word0 >> 27);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006088 return value;
6089 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006090 uint32_t get_bs_bitstream_ready_c0() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006091 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006092 uint32_t value = ((1U << 1) - 1) & (word0 >> 27);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006093 return value;
6094 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006095 CONSTEXPR dma_status0_r &set_bs_bitstream_ready_c0(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006096 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006097 word0 = (((~((1U << 1) - 1)) << 27) & word0) | ((((1U << 1) - 1) & value) << 27);
6098 return *this;
6099 }
6100 volatile dma_status0_r &set_bs_bitstream_ready_c0(uint32_t value) volatile
6101 {
6102 word0 = (((~((1U << 1) - 1)) << 27) & word0) | ((((1U << 1) - 1) & value) << 27);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006103 return *this;
6104 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006105 CONSTEXPR uint32_t get_axi0_ar_stalled() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006106 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006107 uint32_t value = ((1U << 1) - 1) & (word0 >> 28);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006108 return value;
6109 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006110 uint32_t get_axi0_ar_stalled() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006111 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006112 uint32_t value = ((1U << 1) - 1) & (word0 >> 28);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006113 return value;
6114 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006115 CONSTEXPR dma_status0_r &set_axi0_ar_stalled(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006116 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006117 word0 = (((~((1U << 1) - 1)) << 28) & word0) | ((((1U << 1) - 1) & value) << 28);
6118 return *this;
6119 }
6120 volatile dma_status0_r &set_axi0_ar_stalled(uint32_t value) volatile
6121 {
6122 word0 = (((~((1U << 1) - 1)) << 28) & word0) | ((((1U << 1) - 1) & value) << 28);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006123 return *this;
6124 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006125 CONSTEXPR uint32_t get_axi0_rd_limit_stall() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006126 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006127 uint32_t value = ((1U << 1) - 1) & (word0 >> 29);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006128 return value;
6129 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006130 uint32_t get_axi0_rd_limit_stall() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006131 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006132 uint32_t value = ((1U << 1) - 1) & (word0 >> 29);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006133 return value;
6134 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006135 CONSTEXPR dma_status0_r &set_axi0_rd_limit_stall(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006136 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006137 word0 = (((~((1U << 1) - 1)) << 29) & word0) | ((((1U << 1) - 1) & value) << 29);
6138 return *this;
6139 }
6140 volatile dma_status0_r &set_axi0_rd_limit_stall(uint32_t value) volatile
6141 {
6142 word0 = (((~((1U << 1) - 1)) << 29) & word0) | ((((1U << 1) - 1) & value) << 29);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006143 return *this;
6144 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006145 CONSTEXPR uint32_t get_axi0_aw_stalled() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006146 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006147 uint32_t value = ((1U << 1) - 1) & (word0 >> 30);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006148 return value;
6149 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006150 uint32_t get_axi0_aw_stalled() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006151 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006152 uint32_t value = ((1U << 1) - 1) & (word0 >> 30);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006153 return value;
6154 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006155 CONSTEXPR dma_status0_r &set_axi0_aw_stalled(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006156 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006157 word0 = (((~((1U << 1) - 1)) << 30) & word0) | ((((1U << 1) - 1) & value) << 30);
6158 return *this;
6159 }
6160 volatile dma_status0_r &set_axi0_aw_stalled(uint32_t value) volatile
6161 {
6162 word0 = (((~((1U << 1) - 1)) << 30) & word0) | ((((1U << 1) - 1) & value) << 30);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006163 return *this;
6164 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006165 CONSTEXPR uint32_t get_axi0_w_stalled() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006166 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006167 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006168 return value;
6169 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006170 uint32_t get_axi0_w_stalled() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006171 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006172 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006173 return value;
6174 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006175 CONSTEXPR dma_status0_r &set_axi0_w_stalled(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006176 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006177 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
6178 return *this;
6179 }
6180 volatile dma_status0_r &set_axi0_w_stalled(uint32_t value) volatile
6181 {
6182 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006183 return *this;
6184 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006185#endif
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006186};
6187
Jonny Svärd136810f2021-10-13 16:04:26 +02006188// dma_status1_r - DMA_STATUS1
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006189struct dma_status1_r
6190{
Jonny Svärd136810f2021-10-13 16:04:26 +02006191#ifndef __cplusplus
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006192 union
6193 {
6194 struct
6195 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006196 uint32_t axi0_wr_limit_stall : 1; // Write stalled due to one AXI0 limit counter being reached
6197 uint32_t axi1_ar_stalled : 1; // Read transfer request stalled on arready low AXI1 (due to memory system)
6198 uint32_t axi1_rd_limit_stall : 1; // Read stalled due to one AXI1 limit counter being reached
6199 uint32_t axi1_wr_stalled : 1; // Write transfer request stalled on awready low AXI1 (due to memory system)
6200 uint32_t axi1_w_stalled : 1; // Write transfer stalled on wready low AXI1 (due to memory system)
6201 uint32_t axi1_wr_limit_stall : 1; // Write stalled due to one AXI1 limit counter being reached
6202 uint32_t wgt_idle_c1 : 1; // When this bit is high means that the WGT block is not busy in generating
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006203 // addresses for a WGT job
Jonny Svärd136810f2021-10-13 16:04:26 +02006204 uint32_t bas_idle_c1 : 1; // When this bit is high means that the BAS block is not busy in generating
6205 // addresses for a BAS job
6206 uint32_t ib0_ai_valid_c1 : 1; // Data for AI to be read in IFM input buffer 0 - Core 1
6207 uint32_t ib0_ai_ready_c1 : 1; // Data consumed from AI in IFM input buffer 0 - Core 1
6208 uint32_t ib1_ai_valid_c1 : 1; // Data for AI to be read in IFM input buffer 1 - Core 1
6209 uint32_t ib1_ai_ready_c1 : 1; // Data consumed from AI in IFM input buffer 1 - Core 1
6210 uint32_t ib0_ao_valid_c1 : 1; // Data for AO to be read in IFM input buffer 0 - Core 1
6211 uint32_t ib0_ao_ready_c1 : 1; // Data consumed from AO in IFM input buffer 0 - Core 1
6212 uint32_t ib1_ao_valid_c1 : 1; // Data for AO to be read in IFM input buffer 0 - Core 1
6213 uint32_t ib1_ao_ready_c1 : 1; // Data consumed from AO in IFM input buffer 1 - Core 1
6214 uint32_t ob0_valid_c1 : 1; // Data for DMA ready to be consumed in OFM output buffer 0 - Core 1
6215 uint32_t ob0_ready_c1 : 1; // Data consumed from DMA in OFM output buffer 0 - Core 1
6216 uint32_t ob1_valid_c1 : 1; // Data for DMA ready to be consumed in OFM output buffer 1 - Core 1
6217 uint32_t ob1_ready_c1 : 1; // Data consumed from DMA in OFM output buffer 1 - Core 1
6218 uint32_t wd_bitstream_valid_c1 : 1; // New weight word for WD to be consumed - Core 1
6219 uint32_t wd_bitstream_ready_c1 : 1; // Weight word consumed by WD - Core 1
6220 uint32_t bs_bitstream_valid_c1 : 1; // New BaS word for AO to be consumed - Core 1
6221 uint32_t bs_bitstream_ready_c1 : 1; // BaS word consumed by AO - Core 1
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006222 uint32_t reserved0 : 8;
6223 };
6224 uint32_t word;
6225 };
Jonny Svärd136810f2021-10-13 16:04:26 +02006226#else
6227 private:
6228 uint32_t word0;
6229
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006230 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02006231 CONSTEXPR dma_status1_r() : word0(0) {}
6232 CONSTEXPR dma_status1_r(uint32_t init) : word0(init) {}
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006233 CONSTEXPR void operator=(uint32_t value)
6234 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006235 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006236 }
6237 void operator=(uint32_t value) volatile
6238 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006239 word0 = value;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006240 }
6241 CONSTEXPR operator uint32_t()
6242 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006243 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006244 }
6245 operator uint32_t() volatile
6246 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006247 return word0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006248 }
6249 dma_status1_r copy() volatile
6250 {
6251 return *this;
6252 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006253 CONSTEXPR uint32_t get_axi0_wr_limit_stall() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006254 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006255 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006256 return value;
6257 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006258 uint32_t get_axi0_wr_limit_stall() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006259 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006260 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006261 return value;
6262 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006263 CONSTEXPR dma_status1_r &set_axi0_wr_limit_stall(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006264 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006265 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
6266 return *this;
6267 }
6268 volatile dma_status1_r &set_axi0_wr_limit_stall(uint32_t value) volatile
6269 {
6270 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006271 return *this;
6272 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006273 CONSTEXPR uint32_t get_axi1_ar_stalled() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006274 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006275 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006276 return value;
6277 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006278 uint32_t get_axi1_ar_stalled() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006279 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006280 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006281 return value;
6282 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006283 CONSTEXPR dma_status1_r &set_axi1_ar_stalled(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006284 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006285 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
6286 return *this;
6287 }
6288 volatile dma_status1_r &set_axi1_ar_stalled(uint32_t value) volatile
6289 {
6290 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006291 return *this;
6292 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006293 CONSTEXPR uint32_t get_axi1_rd_limit_stall() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006294 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006295 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006296 return value;
6297 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006298 uint32_t get_axi1_rd_limit_stall() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006299 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006300 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006301 return value;
6302 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006303 CONSTEXPR dma_status1_r &set_axi1_rd_limit_stall(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006304 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006305 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
6306 return *this;
6307 }
6308 volatile dma_status1_r &set_axi1_rd_limit_stall(uint32_t value) volatile
6309 {
6310 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006311 return *this;
6312 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006313 CONSTEXPR uint32_t get_axi1_wr_stalled() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006314 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006315 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006316 return value;
6317 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006318 uint32_t get_axi1_wr_stalled() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006319 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006320 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006321 return value;
6322 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006323 CONSTEXPR dma_status1_r &set_axi1_wr_stalled(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006324 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006325 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
6326 return *this;
6327 }
6328 volatile dma_status1_r &set_axi1_wr_stalled(uint32_t value) volatile
6329 {
6330 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006331 return *this;
6332 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006333 CONSTEXPR uint32_t get_axi1_w_stalled() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006334 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006335 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006336 return value;
6337 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006338 uint32_t get_axi1_w_stalled() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006339 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006340 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006341 return value;
6342 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006343 CONSTEXPR dma_status1_r &set_axi1_w_stalled(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006344 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006345 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
6346 return *this;
6347 }
6348 volatile dma_status1_r &set_axi1_w_stalled(uint32_t value) volatile
6349 {
6350 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006351 return *this;
6352 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006353 CONSTEXPR uint32_t get_axi1_wr_limit_stall() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006354 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006355 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006356 return value;
6357 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006358 uint32_t get_axi1_wr_limit_stall() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006359 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006360 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006361 return value;
6362 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006363 CONSTEXPR dma_status1_r &set_axi1_wr_limit_stall(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006364 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006365 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
6366 return *this;
6367 }
6368 volatile dma_status1_r &set_axi1_wr_limit_stall(uint32_t value) volatile
6369 {
6370 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006371 return *this;
6372 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006373 CONSTEXPR uint32_t get_wgt_idle_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006374 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006375 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006376 return value;
6377 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006378 uint32_t get_wgt_idle_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006379 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006380 uint32_t value = ((1U << 1) - 1) & (word0 >> 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006381 return value;
6382 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006383 CONSTEXPR dma_status1_r &set_wgt_idle_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006384 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006385 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
6386 return *this;
6387 }
6388 volatile dma_status1_r &set_wgt_idle_c1(uint32_t value) volatile
6389 {
6390 word0 = (((~((1U << 1) - 1)) << 6) & word0) | ((((1U << 1) - 1) & value) << 6);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006391 return *this;
6392 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006393 CONSTEXPR uint32_t get_bas_idle_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006394 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006395 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006396 return value;
6397 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006398 uint32_t get_bas_idle_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006399 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006400 uint32_t value = ((1U << 1) - 1) & (word0 >> 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006401 return value;
6402 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006403 CONSTEXPR dma_status1_r &set_bas_idle_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006404 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006405 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
6406 return *this;
6407 }
6408 volatile dma_status1_r &set_bas_idle_c1(uint32_t value) volatile
6409 {
6410 word0 = (((~((1U << 1) - 1)) << 7) & word0) | ((((1U << 1) - 1) & value) << 7);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006411 return *this;
6412 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006413 CONSTEXPR uint32_t get_ib0_ai_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006414 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006415 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006416 return value;
6417 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006418 uint32_t get_ib0_ai_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006419 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006420 uint32_t value = ((1U << 1) - 1) & (word0 >> 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006421 return value;
6422 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006423 CONSTEXPR dma_status1_r &set_ib0_ai_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006424 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006425 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
6426 return *this;
6427 }
6428 volatile dma_status1_r &set_ib0_ai_valid_c1(uint32_t value) volatile
6429 {
6430 word0 = (((~((1U << 1) - 1)) << 8) & word0) | ((((1U << 1) - 1) & value) << 8);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006431 return *this;
6432 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006433 CONSTEXPR uint32_t get_ib0_ai_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006434 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006435 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006436 return value;
6437 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006438 uint32_t get_ib0_ai_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006439 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006440 uint32_t value = ((1U << 1) - 1) & (word0 >> 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006441 return value;
6442 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006443 CONSTEXPR dma_status1_r &set_ib0_ai_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006444 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006445 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
6446 return *this;
6447 }
6448 volatile dma_status1_r &set_ib0_ai_ready_c1(uint32_t value) volatile
6449 {
6450 word0 = (((~((1U << 1) - 1)) << 9) & word0) | ((((1U << 1) - 1) & value) << 9);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006451 return *this;
6452 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006453 CONSTEXPR uint32_t get_ib1_ai_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006454 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006455 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006456 return value;
6457 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006458 uint32_t get_ib1_ai_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006459 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006460 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006461 return value;
6462 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006463 CONSTEXPR dma_status1_r &set_ib1_ai_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006464 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006465 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
6466 return *this;
6467 }
6468 volatile dma_status1_r &set_ib1_ai_valid_c1(uint32_t value) volatile
6469 {
6470 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006471 return *this;
6472 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006473 CONSTEXPR uint32_t get_ib1_ai_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006474 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006475 uint32_t value = ((1U << 1) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006476 return value;
6477 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006478 uint32_t get_ib1_ai_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006479 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006480 uint32_t value = ((1U << 1) - 1) & (word0 >> 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006481 return value;
6482 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006483 CONSTEXPR dma_status1_r &set_ib1_ai_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006484 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006485 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & value) << 11);
6486 return *this;
6487 }
6488 volatile dma_status1_r &set_ib1_ai_ready_c1(uint32_t value) volatile
6489 {
6490 word0 = (((~((1U << 1) - 1)) << 11) & word0) | ((((1U << 1) - 1) & value) << 11);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006491 return *this;
6492 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006493 CONSTEXPR uint32_t get_ib0_ao_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006494 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006495 uint32_t value = ((1U << 1) - 1) & (word0 >> 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006496 return value;
6497 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006498 uint32_t get_ib0_ao_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006499 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006500 uint32_t value = ((1U << 1) - 1) & (word0 >> 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006501 return value;
6502 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006503 CONSTEXPR dma_status1_r &set_ib0_ao_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006504 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006505 word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & value) << 12);
6506 return *this;
6507 }
6508 volatile dma_status1_r &set_ib0_ao_valid_c1(uint32_t value) volatile
6509 {
6510 word0 = (((~((1U << 1) - 1)) << 12) & word0) | ((((1U << 1) - 1) & value) << 12);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006511 return *this;
6512 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006513 CONSTEXPR uint32_t get_ib0_ao_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006514 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006515 uint32_t value = ((1U << 1) - 1) & (word0 >> 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006516 return value;
6517 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006518 uint32_t get_ib0_ao_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006519 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006520 uint32_t value = ((1U << 1) - 1) & (word0 >> 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006521 return value;
6522 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006523 CONSTEXPR dma_status1_r &set_ib0_ao_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006524 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006525 word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & value) << 13);
6526 return *this;
6527 }
6528 volatile dma_status1_r &set_ib0_ao_ready_c1(uint32_t value) volatile
6529 {
6530 word0 = (((~((1U << 1) - 1)) << 13) & word0) | ((((1U << 1) - 1) & value) << 13);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006531 return *this;
6532 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006533 CONSTEXPR uint32_t get_ib1_ao_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006534 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006535 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006536 return value;
6537 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006538 uint32_t get_ib1_ao_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006539 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006540 uint32_t value = ((1U << 1) - 1) & (word0 >> 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006541 return value;
6542 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006543 CONSTEXPR dma_status1_r &set_ib1_ao_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006544 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006545 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
6546 return *this;
6547 }
6548 volatile dma_status1_r &set_ib1_ao_valid_c1(uint32_t value) volatile
6549 {
6550 word0 = (((~((1U << 1) - 1)) << 14) & word0) | ((((1U << 1) - 1) & value) << 14);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006551 return *this;
6552 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006553 CONSTEXPR uint32_t get_ib1_ao_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006554 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006555 uint32_t value = ((1U << 1) - 1) & (word0 >> 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006556 return value;
6557 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006558 uint32_t get_ib1_ao_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006559 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006560 uint32_t value = ((1U << 1) - 1) & (word0 >> 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006561 return value;
6562 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006563 CONSTEXPR dma_status1_r &set_ib1_ao_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006564 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006565 word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & value) << 15);
6566 return *this;
6567 }
6568 volatile dma_status1_r &set_ib1_ao_ready_c1(uint32_t value) volatile
6569 {
6570 word0 = (((~((1U << 1) - 1)) << 15) & word0) | ((((1U << 1) - 1) & value) << 15);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006571 return *this;
6572 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006573 CONSTEXPR uint32_t get_ob0_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006574 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006575 uint32_t value = ((1U << 1) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006576 return value;
6577 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006578 uint32_t get_ob0_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006579 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006580 uint32_t value = ((1U << 1) - 1) & (word0 >> 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006581 return value;
6582 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006583 CONSTEXPR dma_status1_r &set_ob0_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006584 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006585 word0 = (((~((1U << 1) - 1)) << 16) & word0) | ((((1U << 1) - 1) & value) << 16);
6586 return *this;
6587 }
6588 volatile dma_status1_r &set_ob0_valid_c1(uint32_t value) volatile
6589 {
6590 word0 = (((~((1U << 1) - 1)) << 16) & word0) | ((((1U << 1) - 1) & value) << 16);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006591 return *this;
6592 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006593 CONSTEXPR uint32_t get_ob0_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006594 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006595 uint32_t value = ((1U << 1) - 1) & (word0 >> 17);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006596 return value;
6597 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006598 uint32_t get_ob0_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006599 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006600 uint32_t value = ((1U << 1) - 1) & (word0 >> 17);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006601 return value;
6602 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006603 CONSTEXPR dma_status1_r &set_ob0_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006604 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006605 word0 = (((~((1U << 1) - 1)) << 17) & word0) | ((((1U << 1) - 1) & value) << 17);
6606 return *this;
6607 }
6608 volatile dma_status1_r &set_ob0_ready_c1(uint32_t value) volatile
6609 {
6610 word0 = (((~((1U << 1) - 1)) << 17) & word0) | ((((1U << 1) - 1) & value) << 17);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006611 return *this;
6612 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006613 CONSTEXPR uint32_t get_ob1_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006614 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006615 uint32_t value = ((1U << 1) - 1) & (word0 >> 18);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006616 return value;
6617 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006618 uint32_t get_ob1_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006619 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006620 uint32_t value = ((1U << 1) - 1) & (word0 >> 18);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006621 return value;
6622 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006623 CONSTEXPR dma_status1_r &set_ob1_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006624 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006625 word0 = (((~((1U << 1) - 1)) << 18) & word0) | ((((1U << 1) - 1) & value) << 18);
6626 return *this;
6627 }
6628 volatile dma_status1_r &set_ob1_valid_c1(uint32_t value) volatile
6629 {
6630 word0 = (((~((1U << 1) - 1)) << 18) & word0) | ((((1U << 1) - 1) & value) << 18);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006631 return *this;
6632 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006633 CONSTEXPR uint32_t get_ob1_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006634 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006635 uint32_t value = ((1U << 1) - 1) & (word0 >> 19);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006636 return value;
6637 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006638 uint32_t get_ob1_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006639 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006640 uint32_t value = ((1U << 1) - 1) & (word0 >> 19);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006641 return value;
6642 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006643 CONSTEXPR dma_status1_r &set_ob1_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006644 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006645 word0 = (((~((1U << 1) - 1)) << 19) & word0) | ((((1U << 1) - 1) & value) << 19);
6646 return *this;
6647 }
6648 volatile dma_status1_r &set_ob1_ready_c1(uint32_t value) volatile
6649 {
6650 word0 = (((~((1U << 1) - 1)) << 19) & word0) | ((((1U << 1) - 1) & value) << 19);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006651 return *this;
6652 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006653 CONSTEXPR uint32_t get_wd_bitstream_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006654 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006655 uint32_t value = ((1U << 1) - 1) & (word0 >> 20);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006656 return value;
6657 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006658 uint32_t get_wd_bitstream_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006659 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006660 uint32_t value = ((1U << 1) - 1) & (word0 >> 20);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006661 return value;
6662 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006663 CONSTEXPR dma_status1_r &set_wd_bitstream_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006664 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006665 word0 = (((~((1U << 1) - 1)) << 20) & word0) | ((((1U << 1) - 1) & value) << 20);
6666 return *this;
6667 }
6668 volatile dma_status1_r &set_wd_bitstream_valid_c1(uint32_t value) volatile
6669 {
6670 word0 = (((~((1U << 1) - 1)) << 20) & word0) | ((((1U << 1) - 1) & value) << 20);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006671 return *this;
6672 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006673 CONSTEXPR uint32_t get_wd_bitstream_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006674 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006675 uint32_t value = ((1U << 1) - 1) & (word0 >> 21);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006676 return value;
6677 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006678 uint32_t get_wd_bitstream_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006679 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006680 uint32_t value = ((1U << 1) - 1) & (word0 >> 21);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006681 return value;
6682 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006683 CONSTEXPR dma_status1_r &set_wd_bitstream_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006684 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006685 word0 = (((~((1U << 1) - 1)) << 21) & word0) | ((((1U << 1) - 1) & value) << 21);
6686 return *this;
6687 }
6688 volatile dma_status1_r &set_wd_bitstream_ready_c1(uint32_t value) volatile
6689 {
6690 word0 = (((~((1U << 1) - 1)) << 21) & word0) | ((((1U << 1) - 1) & value) << 21);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006691 return *this;
6692 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006693 CONSTEXPR uint32_t get_bs_bitstream_valid_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006694 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006695 uint32_t value = ((1U << 1) - 1) & (word0 >> 22);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006696 return value;
6697 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006698 uint32_t get_bs_bitstream_valid_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006699 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006700 uint32_t value = ((1U << 1) - 1) & (word0 >> 22);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006701 return value;
6702 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006703 CONSTEXPR dma_status1_r &set_bs_bitstream_valid_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006704 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006705 word0 = (((~((1U << 1) - 1)) << 22) & word0) | ((((1U << 1) - 1) & value) << 22);
6706 return *this;
6707 }
6708 volatile dma_status1_r &set_bs_bitstream_valid_c1(uint32_t value) volatile
6709 {
6710 word0 = (((~((1U << 1) - 1)) << 22) & word0) | ((((1U << 1) - 1) & value) << 22);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006711 return *this;
6712 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006713 CONSTEXPR uint32_t get_bs_bitstream_ready_c1() const
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006714 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006715 uint32_t value = ((1U << 1) - 1) & (word0 >> 23);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006716 return value;
6717 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006718 uint32_t get_bs_bitstream_ready_c1() const volatile
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006719 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006720 uint32_t value = ((1U << 1) - 1) & (word0 >> 23);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006721 return value;
6722 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006723 CONSTEXPR dma_status1_r &set_bs_bitstream_ready_c1(uint32_t value)
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006724 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006725 word0 = (((~((1U << 1) - 1)) << 23) & word0) | ((((1U << 1) - 1) & value) << 23);
6726 return *this;
6727 }
6728 volatile dma_status1_r &set_bs_bitstream_ready_c1(uint32_t value) volatile
6729 {
6730 word0 = (((~((1U << 1) - 1)) << 23) & word0) | ((((1U << 1) - 1) & value) << 23);
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006731 return *this;
6732 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006733#endif
Douglas Trohaf6a85da2020-05-11 11:45:28 +02006734};
6735
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006736// clkforce_r - Force clocks on for clock gating
6737struct clkforce_r
6738{
Jonny Svärd136810f2021-10-13 16:04:26 +02006739#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006740 union
6741 {
6742 struct
6743 {
6744 uint32_t top_level_clk : 1; // set to 1 to force on TOP level clock
6745 uint32_t cc_clk : 1; // set to 1 to force on CC clock
6746 uint32_t dma_clk : 1; // set to 1 to force on DMA clock
6747 uint32_t mac_clk : 1; // set to 1 to force on MAC clock
6748 uint32_t ao_clk : 1; // set to 1 to force on AO clock
6749 uint32_t wd_clk : 1; // set to 1 to force on WD clock
6750 uint32_t reserved0 : 26;
6751 };
6752 uint32_t word;
6753 };
Jonny Svärd136810f2021-10-13 16:04:26 +02006754#else
6755 private:
6756 uint32_t word0;
6757
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006758 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02006759 CONSTEXPR clkforce_r() : word0(0) {}
6760 CONSTEXPR clkforce_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006761 CONSTEXPR void operator=(uint32_t value)
6762 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006763 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006764 }
6765 void operator=(uint32_t value) volatile
6766 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006767 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006768 }
6769 CONSTEXPR operator uint32_t()
6770 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006771 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006772 }
6773 operator uint32_t() volatile
6774 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006775 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006776 }
6777 clkforce_r copy() volatile
6778 {
6779 return *this;
6780 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006781 CONSTEXPR uint32_t get_top_level_clk() const
6782 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006783 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006784 return value;
6785 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006786 uint32_t get_top_level_clk() const volatile
6787 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006788 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006789 return value;
6790 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006791 CONSTEXPR clkforce_r &set_top_level_clk(uint32_t value)
6792 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006793 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
6794 return *this;
6795 }
6796 volatile clkforce_r &set_top_level_clk(uint32_t value) volatile
6797 {
6798 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006799 return *this;
6800 }
6801 CONSTEXPR uint32_t get_cc_clk() const
6802 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006803 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006804 return value;
6805 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006806 uint32_t get_cc_clk() const volatile
6807 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006808 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006809 return value;
6810 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006811 CONSTEXPR clkforce_r &set_cc_clk(uint32_t value)
6812 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006813 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
6814 return *this;
6815 }
6816 volatile clkforce_r &set_cc_clk(uint32_t value) volatile
6817 {
6818 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006819 return *this;
6820 }
6821 CONSTEXPR uint32_t get_dma_clk() const
6822 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006823 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006824 return value;
6825 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006826 uint32_t get_dma_clk() const volatile
6827 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006828 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006829 return value;
6830 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006831 CONSTEXPR clkforce_r &set_dma_clk(uint32_t value)
6832 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006833 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
6834 return *this;
6835 }
6836 volatile clkforce_r &set_dma_clk(uint32_t value) volatile
6837 {
6838 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006839 return *this;
6840 }
6841 CONSTEXPR uint32_t get_mac_clk() const
6842 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006843 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006844 return value;
6845 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006846 uint32_t get_mac_clk() const volatile
6847 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006848 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006849 return value;
6850 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006851 CONSTEXPR clkforce_r &set_mac_clk(uint32_t value)
6852 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006853 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
6854 return *this;
6855 }
6856 volatile clkforce_r &set_mac_clk(uint32_t value) volatile
6857 {
6858 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006859 return *this;
6860 }
6861 CONSTEXPR uint32_t get_ao_clk() const
6862 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006863 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006864 return value;
6865 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006866 uint32_t get_ao_clk() const volatile
6867 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006868 uint32_t value = ((1U << 1) - 1) & (word0 >> 4);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006869 return value;
6870 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006871 CONSTEXPR clkforce_r &set_ao_clk(uint32_t value)
6872 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006873 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
6874 return *this;
6875 }
6876 volatile clkforce_r &set_ao_clk(uint32_t value) volatile
6877 {
6878 word0 = (((~((1U << 1) - 1)) << 4) & word0) | ((((1U << 1) - 1) & value) << 4);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006879 return *this;
6880 }
6881 CONSTEXPR uint32_t get_wd_clk() const
6882 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006883 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006884 return value;
6885 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006886 uint32_t get_wd_clk() const volatile
6887 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006888 uint32_t value = ((1U << 1) - 1) & (word0 >> 5);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006889 return value;
6890 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006891 CONSTEXPR clkforce_r &set_wd_clk(uint32_t value)
6892 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006893 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
6894 return *this;
6895 }
6896 volatile clkforce_r &set_wd_clk(uint32_t value) volatile
6897 {
6898 word0 = (((~((1U << 1) - 1)) << 5) & word0) | ((((1U << 1) - 1) & value) << 5);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006899 return *this;
6900 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006901#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006902};
6903
Jonny Svärd136810f2021-10-13 16:04:26 +02006904// debug_address_r - Set debug address for register reads 0x400-0x7FF. The address must be 1KB aligned
6905struct debug_address_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006906{
Jonny Svärd136810f2021-10-13 16:04:26 +02006907#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006908 union
6909 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006910 struct
6911 {
6912 uint32_t addr : 32; // Register address
6913 };
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006914 uint32_t word;
6915 };
Jonny Svärd136810f2021-10-13 16:04:26 +02006916#else
6917 private:
6918 uint32_t word0;
6919
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006920 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02006921 CONSTEXPR debug_address_r() : word0(0) {}
6922 CONSTEXPR debug_address_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006923 CONSTEXPR void operator=(uint32_t value)
6924 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006925 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006926 }
6927 void operator=(uint32_t value) volatile
6928 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006929 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006930 }
6931 CONSTEXPR operator uint32_t()
6932 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006933 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006934 }
6935 operator uint32_t() volatile
6936 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006937 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006938 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006939 debug_address_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006940 {
6941 return *this;
6942 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006943 CONSTEXPR uint32_t get_addr() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006944 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006945 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006946 return value;
6947 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006948 uint32_t get_addr() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006949 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006950 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006951 return value;
6952 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006953 CONSTEXPR debug_address_r &set_addr(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006954 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01006955 word0 = value;
6956 return *this;
6957 }
6958 volatile debug_address_r &set_addr(uint32_t value) volatile
6959 {
6960 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006961 return *this;
6962 }
Jonny Svärd136810f2021-10-13 16:04:26 +02006963#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006964};
6965
Jonny Svärd136810f2021-10-13 16:04:26 +02006966// debug_misc_r - 32-bit read/write register for driver debug use. This does not affect NPU function
6967struct debug_misc_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006968{
Jonny Svärd136810f2021-10-13 16:04:26 +02006969#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006970 union
6971 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006972 struct
6973 {
6974 uint32_t misc : 32; // Debug misc
6975 };
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006976 uint32_t word;
6977 };
Jonny Svärd136810f2021-10-13 16:04:26 +02006978#else
6979 private:
6980 uint32_t word0;
6981
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006982 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02006983 CONSTEXPR debug_misc_r() : word0(0) {}
6984 CONSTEXPR debug_misc_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006985 CONSTEXPR void operator=(uint32_t value)
6986 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006987 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006988 }
6989 void operator=(uint32_t value) volatile
6990 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006991 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006992 }
6993 CONSTEXPR operator uint32_t()
6994 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006995 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02006996 }
6997 operator uint32_t() volatile
6998 {
Jonny Svärd136810f2021-10-13 16:04:26 +02006999 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007000 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007001 debug_misc_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007002 {
7003 return *this;
7004 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007005 CONSTEXPR uint32_t get_misc() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007006 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007007 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007008 return value;
7009 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007010 uint32_t get_misc() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007011 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007012 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007013 return value;
7014 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007015 CONSTEXPR debug_misc_r &set_misc(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007016 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007017 word0 = value;
7018 return *this;
7019 }
7020 volatile debug_misc_r &set_misc(uint32_t value) volatile
7021 {
7022 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007023 return *this;
7024 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007025#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007026};
7027
Jonny Svärd136810f2021-10-13 16:04:26 +02007028// debug_block_r - Set from which of four block banks the TSU registers are read. 0 = read from the current bank 256+n =
7029// force to read from bank n where n is in the range 0 to 3
7030struct debug_block_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007031{
Jonny Svärd136810f2021-10-13 16:04:26 +02007032#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007033 union
7034 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007035 struct
7036 {
7037 uint32_t block : 32; // Debug block
7038 };
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007039 uint32_t word;
7040 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007041#else
7042 private:
7043 uint32_t word0;
7044
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007045 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007046 CONSTEXPR debug_block_r() : word0(0) {}
7047 CONSTEXPR debug_block_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007048 CONSTEXPR void operator=(uint32_t value)
7049 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007050 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007051 }
7052 void operator=(uint32_t value) volatile
7053 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007054 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007055 }
7056 CONSTEXPR operator uint32_t()
7057 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007058 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007059 }
7060 operator uint32_t() volatile
7061 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007062 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007063 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007064 debug_block_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007065 {
7066 return *this;
7067 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007068 CONSTEXPR uint32_t get_block() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007069 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007070 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007071 return value;
7072 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007073 uint32_t get_block() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007074 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007075 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007076 return value;
7077 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007078 CONSTEXPR debug_block_r &set_block(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007079 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007080 word0 = value;
7081 return *this;
7082 }
7083 volatile debug_block_r &set_block(uint32_t value) volatile
7084 {
7085 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007086 return *this;
7087 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007088#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007089};
7090
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007091// pmcr_r - PMU Register control
7092struct pmcr_r
7093{
Jonny Svärd136810f2021-10-13 16:04:26 +02007094#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007095 union
7096 {
7097 struct
7098 {
Douglas Trohaf6a85da2020-05-11 11:45:28 +02007099 uint32_t cnt_en : 1; // Enable counter
7100 uint32_t event_cnt_rst : 1; // Reset event counter
7101 uint32_t cycle_cnt_rst : 1; // Reset cycle counter
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007102 uint32_t mask_en : 1; // PMU can be enabled/disabled by command stream operation NPU_OP_PMU_MASK
7103 uint32_t reserved0 : 7;
Douglas Trohaf6a85da2020-05-11 11:45:28 +02007104 uint32_t num_event_cnt : 5; // Number of event counters
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007105 uint32_t reserved1 : 16;
7106 };
7107 uint32_t word;
7108 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007109#else
7110 private:
7111 uint32_t word0;
7112
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007113 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007114 CONSTEXPR pmcr_r() : word0(8192) {}
7115 CONSTEXPR pmcr_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007116 CONSTEXPR void operator=(uint32_t value)
7117 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007118 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007119 }
7120 void operator=(uint32_t value) volatile
7121 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007122 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007123 }
7124 CONSTEXPR operator uint32_t()
7125 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007126 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007127 }
7128 operator uint32_t() volatile
7129 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007130 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007131 }
7132 pmcr_r copy() volatile
7133 {
7134 return *this;
7135 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007136 CONSTEXPR uint32_t get_cnt_en() const
7137 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007138 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007139 return value;
7140 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007141 uint32_t get_cnt_en() const volatile
7142 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007143 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007144 return value;
7145 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007146 CONSTEXPR pmcr_r &set_cnt_en(uint32_t value)
7147 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007148 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
7149 return *this;
7150 }
7151 volatile pmcr_r &set_cnt_en(uint32_t value) volatile
7152 {
7153 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007154 return *this;
7155 }
7156 CONSTEXPR uint32_t get_event_cnt_rst() const
7157 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007158 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007159 return value;
7160 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007161 uint32_t get_event_cnt_rst() const volatile
7162 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007163 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007164 return value;
7165 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007166 CONSTEXPR pmcr_r &set_event_cnt_rst(uint32_t value)
7167 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007168 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
7169 return *this;
7170 }
7171 volatile pmcr_r &set_event_cnt_rst(uint32_t value) volatile
7172 {
7173 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007174 return *this;
7175 }
7176 CONSTEXPR uint32_t get_cycle_cnt_rst() const
7177 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007178 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007179 return value;
7180 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007181 uint32_t get_cycle_cnt_rst() const volatile
7182 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007183 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007184 return value;
7185 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007186 CONSTEXPR pmcr_r &set_cycle_cnt_rst(uint32_t value)
7187 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007188 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
7189 return *this;
7190 }
7191 volatile pmcr_r &set_cycle_cnt_rst(uint32_t value) volatile
7192 {
7193 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007194 return *this;
7195 }
7196 CONSTEXPR uint32_t get_mask_en() const
7197 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007198 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007199 return value;
7200 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007201 uint32_t get_mask_en() const volatile
7202 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007203 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007204 return value;
7205 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007206 CONSTEXPR pmcr_r &set_mask_en(uint32_t value)
7207 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007208 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
7209 return *this;
7210 }
7211 volatile pmcr_r &set_mask_en(uint32_t value) volatile
7212 {
7213 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007214 return *this;
7215 }
7216 CONSTEXPR uint32_t get_num_event_cnt() const
7217 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007218 uint32_t value = ((1U << 5) - 1) & (word0 >> 11);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007219 return value;
7220 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007221 uint32_t get_num_event_cnt() const volatile
7222 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007223 uint32_t value = ((1U << 5) - 1) & (word0 >> 11);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007224 return value;
7225 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007226 CONSTEXPR pmcr_r &set_num_event_cnt(uint32_t value)
7227 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007228 word0 = (((~((1U << 5) - 1)) << 11) & word0) | ((((1U << 5) - 1) & value) << 11);
7229 return *this;
7230 }
7231 volatile pmcr_r &set_num_event_cnt(uint32_t value) volatile
7232 {
7233 word0 = (((~((1U << 5) - 1)) << 11) & word0) | ((((1U << 5) - 1) & value) << 11);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007234 return *this;
7235 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007236#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007237};
7238
7239// pmcntenset_r - Count enable set register
7240struct pmcntenset_r
7241{
Jonny Svärd136810f2021-10-13 16:04:26 +02007242#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007243 union
7244 {
7245 struct
7246 {
7247 uint32_t EVENT_CNT_0 : 1; // Event counter enable bit for PMEVCNTR0
7248 uint32_t EVENT_CNT_1 : 1; // Event counter enable bit for PMEVCNTR1
7249 uint32_t EVENT_CNT_2 : 1; // Event counter enable bit for PMEVCNTR2
7250 uint32_t EVENT_CNT_3 : 1; // Event counter enable bit for PMEVCNTR3
7251 uint32_t reserved0 : 27;
7252 uint32_t CYCLE_CNT : 1; // PMCCNTR enable bit
7253 };
7254 uint32_t word;
7255 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007256#else
7257 private:
7258 uint32_t word0;
7259
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007260 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007261 CONSTEXPR pmcntenset_r() : word0(0) {}
7262 CONSTEXPR pmcntenset_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007263 CONSTEXPR void operator=(uint32_t value)
7264 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007265 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007266 }
7267 void operator=(uint32_t value) volatile
7268 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007269 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007270 }
7271 CONSTEXPR operator uint32_t()
7272 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007273 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007274 }
7275 operator uint32_t() volatile
7276 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007277 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007278 }
7279 pmcntenset_r copy() volatile
7280 {
7281 return *this;
7282 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007283 CONSTEXPR uint32_t get_EVENT_CNT_0() const
7284 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007285 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007286 return value;
7287 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007288 uint32_t get_EVENT_CNT_0() const volatile
7289 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007290 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007291 return value;
7292 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007293 CONSTEXPR pmcntenset_r &set_EVENT_CNT_0(uint32_t value)
7294 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007295 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
7296 return *this;
7297 }
7298 volatile pmcntenset_r &set_EVENT_CNT_0(uint32_t value) volatile
7299 {
7300 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007301 return *this;
7302 }
7303 CONSTEXPR uint32_t get_EVENT_CNT_1() const
7304 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007305 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007306 return value;
7307 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007308 uint32_t get_EVENT_CNT_1() const volatile
7309 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007310 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007311 return value;
7312 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007313 CONSTEXPR pmcntenset_r &set_EVENT_CNT_1(uint32_t value)
7314 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007315 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
7316 return *this;
7317 }
7318 volatile pmcntenset_r &set_EVENT_CNT_1(uint32_t value) volatile
7319 {
7320 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007321 return *this;
7322 }
7323 CONSTEXPR uint32_t get_EVENT_CNT_2() const
7324 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007325 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007326 return value;
7327 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007328 uint32_t get_EVENT_CNT_2() const volatile
7329 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007330 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007331 return value;
7332 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007333 CONSTEXPR pmcntenset_r &set_EVENT_CNT_2(uint32_t value)
7334 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007335 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
7336 return *this;
7337 }
7338 volatile pmcntenset_r &set_EVENT_CNT_2(uint32_t value) volatile
7339 {
7340 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007341 return *this;
7342 }
7343 CONSTEXPR uint32_t get_EVENT_CNT_3() const
7344 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007345 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007346 return value;
7347 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007348 uint32_t get_EVENT_CNT_3() const volatile
7349 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007350 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007351 return value;
7352 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007353 CONSTEXPR pmcntenset_r &set_EVENT_CNT_3(uint32_t value)
7354 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007355 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
7356 return *this;
7357 }
7358 volatile pmcntenset_r &set_EVENT_CNT_3(uint32_t value) volatile
7359 {
7360 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007361 return *this;
7362 }
7363 CONSTEXPR uint32_t get_CYCLE_CNT() const
7364 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007365 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007366 return value;
7367 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007368 uint32_t get_CYCLE_CNT() const volatile
7369 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007370 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007371 return value;
7372 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007373 CONSTEXPR pmcntenset_r &set_CYCLE_CNT(uint32_t value)
7374 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007375 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
7376 return *this;
7377 }
7378 volatile pmcntenset_r &set_CYCLE_CNT(uint32_t value) volatile
7379 {
7380 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007381 return *this;
7382 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007383#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007384};
7385
7386// pmcntenclr_r - Count enable clear register
7387struct pmcntenclr_r
7388{
Jonny Svärd136810f2021-10-13 16:04:26 +02007389#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007390 union
7391 {
7392 struct
7393 {
7394 uint32_t EVENT_CNT_0 : 1; // Event counter disable bit for PMEVCNTR0
7395 uint32_t EVENT_CNT_1 : 1; // Event counter disable bit for PMEVCNTR1
7396 uint32_t EVENT_CNT_2 : 1; // Event counter disable bit for PMEVCNTR2
7397 uint32_t EVENT_CNT_3 : 1; // Event counter disable bit for PMEVCNTR3
7398 uint32_t reserved0 : 27;
7399 uint32_t CYCLE_CNT : 1; // PMCCNTR disable bit
7400 };
7401 uint32_t word;
7402 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007403#else
7404 private:
7405 uint32_t word0;
7406
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007407 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007408 CONSTEXPR pmcntenclr_r() : word0(0) {}
7409 CONSTEXPR pmcntenclr_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007410 CONSTEXPR void operator=(uint32_t value)
7411 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007412 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007413 }
7414 void operator=(uint32_t value) volatile
7415 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007416 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007417 }
7418 CONSTEXPR operator uint32_t()
7419 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007420 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007421 }
7422 operator uint32_t() volatile
7423 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007424 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007425 }
7426 pmcntenclr_r copy() volatile
7427 {
7428 return *this;
7429 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007430 CONSTEXPR uint32_t get_EVENT_CNT_0() const
7431 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007432 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007433 return value;
7434 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007435 uint32_t get_EVENT_CNT_0() const volatile
7436 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007437 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007438 return value;
7439 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007440 CONSTEXPR pmcntenclr_r &set_EVENT_CNT_0(uint32_t value)
7441 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007442 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
7443 return *this;
7444 }
7445 volatile pmcntenclr_r &set_EVENT_CNT_0(uint32_t value) volatile
7446 {
7447 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007448 return *this;
7449 }
7450 CONSTEXPR uint32_t get_EVENT_CNT_1() const
7451 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007452 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007453 return value;
7454 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007455 uint32_t get_EVENT_CNT_1() const volatile
7456 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007457 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007458 return value;
7459 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007460 CONSTEXPR pmcntenclr_r &set_EVENT_CNT_1(uint32_t value)
7461 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007462 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
7463 return *this;
7464 }
7465 volatile pmcntenclr_r &set_EVENT_CNT_1(uint32_t value) volatile
7466 {
7467 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007468 return *this;
7469 }
7470 CONSTEXPR uint32_t get_EVENT_CNT_2() const
7471 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007472 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007473 return value;
7474 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007475 uint32_t get_EVENT_CNT_2() const volatile
7476 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007477 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007478 return value;
7479 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007480 CONSTEXPR pmcntenclr_r &set_EVENT_CNT_2(uint32_t value)
7481 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007482 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
7483 return *this;
7484 }
7485 volatile pmcntenclr_r &set_EVENT_CNT_2(uint32_t value) volatile
7486 {
7487 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007488 return *this;
7489 }
7490 CONSTEXPR uint32_t get_EVENT_CNT_3() const
7491 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007492 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007493 return value;
7494 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007495 uint32_t get_EVENT_CNT_3() const volatile
7496 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007497 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007498 return value;
7499 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007500 CONSTEXPR pmcntenclr_r &set_EVENT_CNT_3(uint32_t value)
7501 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007502 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
7503 return *this;
7504 }
7505 volatile pmcntenclr_r &set_EVENT_CNT_3(uint32_t value) volatile
7506 {
7507 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007508 return *this;
7509 }
7510 CONSTEXPR uint32_t get_CYCLE_CNT() const
7511 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007512 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007513 return value;
7514 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007515 uint32_t get_CYCLE_CNT() const volatile
7516 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007517 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007518 return value;
7519 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007520 CONSTEXPR pmcntenclr_r &set_CYCLE_CNT(uint32_t value)
7521 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007522 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
7523 return *this;
7524 }
7525 volatile pmcntenclr_r &set_CYCLE_CNT(uint32_t value) volatile
7526 {
7527 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007528 return *this;
7529 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007530#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007531};
7532
7533// pmovsset_r - Overflow flag status set register
7534struct pmovsset_r
7535{
Jonny Svärd136810f2021-10-13 16:04:26 +02007536#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007537 union
7538 {
7539 struct
7540 {
7541 uint32_t EVENT_CNT_0_OVF : 1; // Event counter overflow set bit for PMEVCNTR0
7542 uint32_t EVENT_CNT_1_OVF : 1; // Event counter overflow set bit for PMEVCNTR1
7543 uint32_t EVENT_CNT_2_OVF : 1; // Event counter overflow set bit for PMEVCNTR2
7544 uint32_t EVENT_CNT_3_OVF : 1; // Event counter overflow set bit for PMEVCNTR3
7545 uint32_t reserved0 : 27;
7546 uint32_t CYCLE_CNT_OVF : 1; // PMCCNTR overflow set bit
7547 };
7548 uint32_t word;
7549 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007550#else
7551 private:
7552 uint32_t word0;
7553
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007554 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007555 CONSTEXPR pmovsset_r() : word0(0) {}
7556 CONSTEXPR pmovsset_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007557 CONSTEXPR void operator=(uint32_t value)
7558 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007559 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007560 }
7561 void operator=(uint32_t value) volatile
7562 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007563 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007564 }
7565 CONSTEXPR operator uint32_t()
7566 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007567 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007568 }
7569 operator uint32_t() volatile
7570 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007571 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007572 }
7573 pmovsset_r copy() volatile
7574 {
7575 return *this;
7576 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007577 CONSTEXPR uint32_t get_EVENT_CNT_0_OVF() const
7578 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007579 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007580 return value;
7581 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007582 uint32_t get_EVENT_CNT_0_OVF() const volatile
7583 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007584 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007585 return value;
7586 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007587 CONSTEXPR pmovsset_r &set_EVENT_CNT_0_OVF(uint32_t value)
7588 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007589 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
7590 return *this;
7591 }
7592 volatile pmovsset_r &set_EVENT_CNT_0_OVF(uint32_t value) volatile
7593 {
7594 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007595 return *this;
7596 }
7597 CONSTEXPR uint32_t get_EVENT_CNT_1_OVF() const
7598 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007599 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007600 return value;
7601 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007602 uint32_t get_EVENT_CNT_1_OVF() const volatile
7603 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007604 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007605 return value;
7606 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007607 CONSTEXPR pmovsset_r &set_EVENT_CNT_1_OVF(uint32_t value)
7608 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007609 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
7610 return *this;
7611 }
7612 volatile pmovsset_r &set_EVENT_CNT_1_OVF(uint32_t value) volatile
7613 {
7614 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007615 return *this;
7616 }
7617 CONSTEXPR uint32_t get_EVENT_CNT_2_OVF() const
7618 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007619 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007620 return value;
7621 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007622 uint32_t get_EVENT_CNT_2_OVF() const volatile
7623 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007624 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007625 return value;
7626 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007627 CONSTEXPR pmovsset_r &set_EVENT_CNT_2_OVF(uint32_t value)
7628 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007629 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
7630 return *this;
7631 }
7632 volatile pmovsset_r &set_EVENT_CNT_2_OVF(uint32_t value) volatile
7633 {
7634 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007635 return *this;
7636 }
7637 CONSTEXPR uint32_t get_EVENT_CNT_3_OVF() const
7638 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007639 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007640 return value;
7641 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007642 uint32_t get_EVENT_CNT_3_OVF() const volatile
7643 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007644 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007645 return value;
7646 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007647 CONSTEXPR pmovsset_r &set_EVENT_CNT_3_OVF(uint32_t value)
7648 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007649 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
7650 return *this;
7651 }
7652 volatile pmovsset_r &set_EVENT_CNT_3_OVF(uint32_t value) volatile
7653 {
7654 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007655 return *this;
7656 }
7657 CONSTEXPR uint32_t get_CYCLE_CNT_OVF() const
7658 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007659 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007660 return value;
7661 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007662 uint32_t get_CYCLE_CNT_OVF() const volatile
7663 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007664 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007665 return value;
7666 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007667 CONSTEXPR pmovsset_r &set_CYCLE_CNT_OVF(uint32_t value)
7668 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007669 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
7670 return *this;
7671 }
7672 volatile pmovsset_r &set_CYCLE_CNT_OVF(uint32_t value) volatile
7673 {
7674 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007675 return *this;
7676 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007677#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007678};
7679
7680// pmovsclr_r - Overflow flag status clear register
7681struct pmovsclr_r
7682{
Jonny Svärd136810f2021-10-13 16:04:26 +02007683#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007684 union
7685 {
7686 struct
7687 {
7688 uint32_t EVENT_CNT_0_OVF : 1; // Event counter overflow clear bit for PMEVCNTR0
7689 uint32_t EVENT_CNT_1_OVF : 1; // Event counter overflow clear bit for PMEVCNTR1
7690 uint32_t EVENT_CNT_2_OVF : 1; // Event counter overflow clear bit for PMEVCNTR2
7691 uint32_t EVENT_CNT_3_OVF : 1; // Event counter overflow clear bit for PMEVCNTR3
7692 uint32_t reserved0 : 27;
7693 uint32_t CYCLE_CNT_OVF : 1; // PMCCNTR overflow clear bit
7694 };
7695 uint32_t word;
7696 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007697#else
7698 private:
7699 uint32_t word0;
7700
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007701 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007702 CONSTEXPR pmovsclr_r() : word0(0) {}
7703 CONSTEXPR pmovsclr_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007704 CONSTEXPR void operator=(uint32_t value)
7705 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007706 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007707 }
7708 void operator=(uint32_t value) volatile
7709 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007710 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007711 }
7712 CONSTEXPR operator uint32_t()
7713 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007714 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007715 }
7716 operator uint32_t() volatile
7717 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007718 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007719 }
7720 pmovsclr_r copy() volatile
7721 {
7722 return *this;
7723 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007724 CONSTEXPR uint32_t get_EVENT_CNT_0_OVF() const
7725 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007726 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007727 return value;
7728 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007729 uint32_t get_EVENT_CNT_0_OVF() const volatile
7730 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007731 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007732 return value;
7733 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007734 CONSTEXPR pmovsclr_r &set_EVENT_CNT_0_OVF(uint32_t value)
7735 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007736 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
7737 return *this;
7738 }
7739 volatile pmovsclr_r &set_EVENT_CNT_0_OVF(uint32_t value) volatile
7740 {
7741 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007742 return *this;
7743 }
7744 CONSTEXPR uint32_t get_EVENT_CNT_1_OVF() const
7745 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007746 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007747 return value;
7748 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007749 uint32_t get_EVENT_CNT_1_OVF() const volatile
7750 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007751 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007752 return value;
7753 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007754 CONSTEXPR pmovsclr_r &set_EVENT_CNT_1_OVF(uint32_t value)
7755 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007756 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
7757 return *this;
7758 }
7759 volatile pmovsclr_r &set_EVENT_CNT_1_OVF(uint32_t value) volatile
7760 {
7761 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007762 return *this;
7763 }
7764 CONSTEXPR uint32_t get_EVENT_CNT_2_OVF() const
7765 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007766 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007767 return value;
7768 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007769 uint32_t get_EVENT_CNT_2_OVF() const volatile
7770 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007771 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007772 return value;
7773 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007774 CONSTEXPR pmovsclr_r &set_EVENT_CNT_2_OVF(uint32_t value)
7775 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007776 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
7777 return *this;
7778 }
7779 volatile pmovsclr_r &set_EVENT_CNT_2_OVF(uint32_t value) volatile
7780 {
7781 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007782 return *this;
7783 }
7784 CONSTEXPR uint32_t get_EVENT_CNT_3_OVF() const
7785 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007786 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007787 return value;
7788 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007789 uint32_t get_EVENT_CNT_3_OVF() const volatile
7790 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007791 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007792 return value;
7793 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007794 CONSTEXPR pmovsclr_r &set_EVENT_CNT_3_OVF(uint32_t value)
7795 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007796 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
7797 return *this;
7798 }
7799 volatile pmovsclr_r &set_EVENT_CNT_3_OVF(uint32_t value) volatile
7800 {
7801 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007802 return *this;
7803 }
7804 CONSTEXPR uint32_t get_CYCLE_CNT_OVF() const
7805 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007806 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007807 return value;
7808 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007809 uint32_t get_CYCLE_CNT_OVF() const volatile
7810 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007811 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007812 return value;
7813 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007814 CONSTEXPR pmovsclr_r &set_CYCLE_CNT_OVF(uint32_t value)
7815 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007816 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
7817 return *this;
7818 }
7819 volatile pmovsclr_r &set_CYCLE_CNT_OVF(uint32_t value) volatile
7820 {
7821 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007822 return *this;
7823 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007824#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007825};
7826
7827// pmintset_r - Interrupt enable set register
7828struct pmintset_r
7829{
Jonny Svärd136810f2021-10-13 16:04:26 +02007830#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007831 union
7832 {
7833 struct
7834 {
7835 uint32_t EVENT_CNT_0_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR0
7836 uint32_t EVENT_CNT_1_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR1
7837 uint32_t EVENT_CNT_2_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR2
7838 uint32_t EVENT_CNT_3_INT : 1; // Event counter overflow interrupt request enable bit for PMEVCNTR3
7839 uint32_t reserved0 : 27;
7840 uint32_t CYCLE_CNT_INT : 1; // PMCCNTR overflow interrupt request enable bit
7841 };
7842 uint32_t word;
7843 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007844#else
7845 private:
7846 uint32_t word0;
7847
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007848 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007849 CONSTEXPR pmintset_r() : word0(0) {}
7850 CONSTEXPR pmintset_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007851 CONSTEXPR void operator=(uint32_t value)
7852 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007853 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007854 }
7855 void operator=(uint32_t value) volatile
7856 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007857 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007858 }
7859 CONSTEXPR operator uint32_t()
7860 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007861 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007862 }
7863 operator uint32_t() volatile
7864 {
Jonny Svärd136810f2021-10-13 16:04:26 +02007865 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007866 }
7867 pmintset_r copy() volatile
7868 {
7869 return *this;
7870 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007871 CONSTEXPR uint32_t get_EVENT_CNT_0_INT() const
7872 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007873 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007874 return value;
7875 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007876 uint32_t get_EVENT_CNT_0_INT() const volatile
7877 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007878 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007879 return value;
7880 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007881 CONSTEXPR pmintset_r &set_EVENT_CNT_0_INT(uint32_t value)
7882 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007883 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
7884 return *this;
7885 }
7886 volatile pmintset_r &set_EVENT_CNT_0_INT(uint32_t value) volatile
7887 {
7888 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007889 return *this;
7890 }
7891 CONSTEXPR uint32_t get_EVENT_CNT_1_INT() const
7892 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007893 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007894 return value;
7895 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007896 uint32_t get_EVENT_CNT_1_INT() const volatile
7897 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007898 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007899 return value;
7900 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007901 CONSTEXPR pmintset_r &set_EVENT_CNT_1_INT(uint32_t value)
7902 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007903 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
7904 return *this;
7905 }
7906 volatile pmintset_r &set_EVENT_CNT_1_INT(uint32_t value) volatile
7907 {
7908 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007909 return *this;
7910 }
7911 CONSTEXPR uint32_t get_EVENT_CNT_2_INT() const
7912 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007913 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007914 return value;
7915 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007916 uint32_t get_EVENT_CNT_2_INT() const volatile
7917 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007918 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007919 return value;
7920 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007921 CONSTEXPR pmintset_r &set_EVENT_CNT_2_INT(uint32_t value)
7922 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007923 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
7924 return *this;
7925 }
7926 volatile pmintset_r &set_EVENT_CNT_2_INT(uint32_t value) volatile
7927 {
7928 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007929 return *this;
7930 }
7931 CONSTEXPR uint32_t get_EVENT_CNT_3_INT() const
7932 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007933 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007934 return value;
7935 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007936 uint32_t get_EVENT_CNT_3_INT() const volatile
7937 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007938 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007939 return value;
7940 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007941 CONSTEXPR pmintset_r &set_EVENT_CNT_3_INT(uint32_t value)
7942 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007943 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
7944 return *this;
7945 }
7946 volatile pmintset_r &set_EVENT_CNT_3_INT(uint32_t value) volatile
7947 {
7948 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007949 return *this;
7950 }
7951 CONSTEXPR uint32_t get_CYCLE_CNT_INT() const
7952 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007953 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007954 return value;
7955 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007956 uint32_t get_CYCLE_CNT_INT() const volatile
7957 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007958 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007959 return value;
7960 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007961 CONSTEXPR pmintset_r &set_CYCLE_CNT_INT(uint32_t value)
7962 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01007963 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
7964 return *this;
7965 }
7966 volatile pmintset_r &set_CYCLE_CNT_INT(uint32_t value) volatile
7967 {
7968 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007969 return *this;
7970 }
Jonny Svärd136810f2021-10-13 16:04:26 +02007971#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007972};
7973
7974// pmintclr_r - Interrupt enable clear register
7975struct pmintclr_r
7976{
Jonny Svärd136810f2021-10-13 16:04:26 +02007977#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007978 union
7979 {
7980 struct
7981 {
7982 uint32_t EVENT_CNT_0_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR0
7983 uint32_t EVENT_CNT_1_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR1
7984 uint32_t EVENT_CNT_2_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR2
7985 uint32_t EVENT_CNT_3_INT : 1; // Event counter overflow interrupt request disable bit for PMEVCNTR3
7986 uint32_t reserved0 : 27;
7987 uint32_t CYCLE_CNT_INT : 1; // PMCCNTR overflow interrupt request disable bit
7988 };
7989 uint32_t word;
7990 };
Jonny Svärd136810f2021-10-13 16:04:26 +02007991#else
7992 private:
7993 uint32_t word0;
7994
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007995 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02007996 CONSTEXPR pmintclr_r() : word0(0) {}
7997 CONSTEXPR pmintclr_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02007998 CONSTEXPR void operator=(uint32_t value)
7999 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008000 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008001 }
8002 void operator=(uint32_t value) volatile
8003 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008004 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008005 }
8006 CONSTEXPR operator uint32_t()
8007 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008008 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008009 }
8010 operator uint32_t() volatile
8011 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008012 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008013 }
8014 pmintclr_r copy() volatile
8015 {
8016 return *this;
8017 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008018 CONSTEXPR uint32_t get_EVENT_CNT_0_INT() const
8019 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008020 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008021 return value;
8022 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008023 uint32_t get_EVENT_CNT_0_INT() const volatile
8024 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008025 uint32_t value = ((1U << 1) - 1) & (word0 >> 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008026 return value;
8027 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008028 CONSTEXPR pmintclr_r &set_EVENT_CNT_0_INT(uint32_t value)
8029 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008030 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
8031 return *this;
8032 }
8033 volatile pmintclr_r &set_EVENT_CNT_0_INT(uint32_t value) volatile
8034 {
8035 word0 = (((~((1U << 1) - 1)) << 0) & word0) | ((((1U << 1) - 1) & value) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008036 return *this;
8037 }
8038 CONSTEXPR uint32_t get_EVENT_CNT_1_INT() const
8039 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008040 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008041 return value;
8042 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008043 uint32_t get_EVENT_CNT_1_INT() const volatile
8044 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008045 uint32_t value = ((1U << 1) - 1) & (word0 >> 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008046 return value;
8047 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008048 CONSTEXPR pmintclr_r &set_EVENT_CNT_1_INT(uint32_t value)
8049 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008050 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
8051 return *this;
8052 }
8053 volatile pmintclr_r &set_EVENT_CNT_1_INT(uint32_t value) volatile
8054 {
8055 word0 = (((~((1U << 1) - 1)) << 1) & word0) | ((((1U << 1) - 1) & value) << 1);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008056 return *this;
8057 }
8058 CONSTEXPR uint32_t get_EVENT_CNT_2_INT() const
8059 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008060 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008061 return value;
8062 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008063 uint32_t get_EVENT_CNT_2_INT() const volatile
8064 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008065 uint32_t value = ((1U << 1) - 1) & (word0 >> 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008066 return value;
8067 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008068 CONSTEXPR pmintclr_r &set_EVENT_CNT_2_INT(uint32_t value)
8069 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008070 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
8071 return *this;
8072 }
8073 volatile pmintclr_r &set_EVENT_CNT_2_INT(uint32_t value) volatile
8074 {
8075 word0 = (((~((1U << 1) - 1)) << 2) & word0) | ((((1U << 1) - 1) & value) << 2);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008076 return *this;
8077 }
8078 CONSTEXPR uint32_t get_EVENT_CNT_3_INT() const
8079 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008080 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008081 return value;
8082 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008083 uint32_t get_EVENT_CNT_3_INT() const volatile
8084 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008085 uint32_t value = ((1U << 1) - 1) & (word0 >> 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008086 return value;
8087 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008088 CONSTEXPR pmintclr_r &set_EVENT_CNT_3_INT(uint32_t value)
8089 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008090 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
8091 return *this;
8092 }
8093 volatile pmintclr_r &set_EVENT_CNT_3_INT(uint32_t value) volatile
8094 {
8095 word0 = (((~((1U << 1) - 1)) << 3) & word0) | ((((1U << 1) - 1) & value) << 3);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008096 return *this;
8097 }
8098 CONSTEXPR uint32_t get_CYCLE_CNT_INT() const
8099 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008100 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008101 return value;
8102 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008103 uint32_t get_CYCLE_CNT_INT() const volatile
8104 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008105 uint32_t value = ((1U << 1) - 1) & (word0 >> 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008106 return value;
8107 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008108 CONSTEXPR pmintclr_r &set_CYCLE_CNT_INT(uint32_t value)
8109 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008110 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
8111 return *this;
8112 }
8113 volatile pmintclr_r &set_CYCLE_CNT_INT(uint32_t value) volatile
8114 {
8115 word0 = (((~((1U << 1) - 1)) << 31) & word0) | ((((1U << 1) - 1) & value) << 31);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008116 return *this;
8117 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008118#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008119};
8120
Jonny Svärd136810f2021-10-13 16:04:26 +02008121// pmccntr_r - Performance monitor cycle count register
8122struct pmccntr_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008123{
Jonny Svärd136810f2021-10-13 16:04:26 +02008124#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008125 union
8126 {
8127 struct
8128 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008129 uint32_t CYCLE_CNT_LO : 32; // Cycle count - LSB
8130 uint32_t CYCLE_CNT_HI : 16; // Cycle count - MSB
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008131 uint32_t reserved0 : 16;
8132 };
Jonny Svärd136810f2021-10-13 16:04:26 +02008133 uint32_t word[2];
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008134 };
Jonny Svärd136810f2021-10-13 16:04:26 +02008135#else
8136 private:
8137 uint32_t word0;
8138 uint32_t word1;
8139
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008140 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02008141 CONSTEXPR pmccntr_r() : word0(0), word1(0) {}
8142 CONSTEXPR pmccntr_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01008143 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
8144 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008145 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008146 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008147 CONSTEXPR void operator=(uint64_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008148 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008149 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
8150 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008151 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008152 void operator=(uint64_t value) volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008153 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008154 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
8155 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008156 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008157 CONSTEXPR operator uint64_t()
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008158 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008159 return (static_cast<uint64_t>(word1) << 32) | word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008160 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008161 operator uint64_t() volatile
8162 {
8163 return (static_cast<uint64_t>(word1) << 32) | word0;
8164 }
8165 pmccntr_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008166 {
8167 return *this;
8168 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008169#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008170};
8171
8172// pmccntr_cfg_r - Set start/stop event on the cycle counter
8173struct pmccntr_cfg_r
8174{
Jonny Svärd136810f2021-10-13 16:04:26 +02008175#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008176 union
8177 {
8178 struct
8179 {
8180 uint32_t CYCLE_CNT_CFG_START : 10; // Cycle counter start event
8181 uint32_t reserved0 : 6;
8182 uint32_t CYCLE_CNT_CFG_STOP : 10; // Cycle counter stop event
8183 uint32_t reserved1 : 6;
8184 };
8185 uint32_t word;
8186 };
Jonny Svärd136810f2021-10-13 16:04:26 +02008187#else
8188 private:
8189 uint32_t word0;
8190
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008191 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02008192 CONSTEXPR pmccntr_cfg_r() : word0(0) {}
8193 CONSTEXPR pmccntr_cfg_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008194 CONSTEXPR void operator=(uint32_t value)
8195 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008196 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008197 }
8198 void operator=(uint32_t value) volatile
8199 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008200 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008201 }
8202 CONSTEXPR operator uint32_t()
8203 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008204 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008205 }
8206 operator uint32_t() volatile
8207 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008208 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008209 }
8210 pmccntr_cfg_r copy() volatile
8211 {
8212 return *this;
8213 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008214 CONSTEXPR NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_START() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008215 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008216 NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008217 return value;
8218 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008219 NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_START() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008220 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008221 NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008222 return value;
8223 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008224 CONSTEXPR pmccntr_cfg_r &set_CYCLE_CNT_CFG_START(NPU_NAMESPACE::pmu_event value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008225 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008226 word0 = (((~((1U << 10) - 1)) << 0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008227 return *this;
8228 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01008229 volatile pmccntr_cfg_r &set_CYCLE_CNT_CFG_START(NPU_NAMESPACE::pmu_event value) volatile
8230 {
8231 word0 = (((~((1U << 10) - 1)) << 0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
8232 return *this;
8233 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008234 CONSTEXPR NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_STOP() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008235 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008236 NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 16));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008237 return value;
8238 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008239 NPU_NAMESPACE::pmu_event get_CYCLE_CNT_CFG_STOP() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008240 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008241 NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 16));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008242 return value;
8243 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008244 CONSTEXPR pmccntr_cfg_r &set_CYCLE_CNT_CFG_STOP(NPU_NAMESPACE::pmu_event value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008245 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008246 word0 = (((~((1U << 10) - 1)) << 16) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 16);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008247 return *this;
8248 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01008249 volatile pmccntr_cfg_r &set_CYCLE_CNT_CFG_STOP(NPU_NAMESPACE::pmu_event value) volatile
8250 {
8251 word0 = (((~((1U << 10) - 1)) << 16) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 16);
8252 return *this;
8253 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008254#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008255};
8256
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008257// pmcaxi_chan_r - Set which AXI channel to monitor for latency measurements in PMU
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008258struct pmcaxi_chan_r
8259{
Jonny Svärd136810f2021-10-13 16:04:26 +02008260#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008261 union
8262 {
8263 struct
8264 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008265 uint32_t CH_SEL : 4; // Channel select for latency measurements
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008266 uint32_t reserved0 : 4;
Jonny Svärd136810f2021-10-13 16:04:26 +02008267 uint32_t AXI_CNT_SEL : 2; // AXI counter to monitor for latency measurements
8268 uint32_t BW_CH_SEL_EN : 1; // Bandwidth channel selector
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008269 uint32_t reserved1 : 21;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008270 };
8271 uint32_t word;
8272 };
Jonny Svärd136810f2021-10-13 16:04:26 +02008273#else
8274 private:
8275 uint32_t word0;
8276
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008277 public:
Jonny Svärd136810f2021-10-13 16:04:26 +02008278 CONSTEXPR pmcaxi_chan_r() : word0(0) {}
8279 CONSTEXPR pmcaxi_chan_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008280 CONSTEXPR void operator=(uint32_t value)
8281 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008282 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008283 }
8284 void operator=(uint32_t value) volatile
8285 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008286 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008287 }
8288 CONSTEXPR operator uint32_t()
8289 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008290 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008291 }
8292 operator uint32_t() volatile
8293 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008294 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008295 }
8296 pmcaxi_chan_r copy() volatile
8297 {
8298 return *this;
8299 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008300 CONSTEXPR NPU_NAMESPACE::pmu_axi_channel get_CH_SEL() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008301 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008302 NPU_NAMESPACE::pmu_axi_channel value =
8303 static_cast<NPU_NAMESPACE::pmu_axi_channel>(((1U << 4) - 1) & (word0 >> 0));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008304 return value;
8305 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008306 NPU_NAMESPACE::pmu_axi_channel get_CH_SEL() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008307 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008308 NPU_NAMESPACE::pmu_axi_channel value =
8309 static_cast<NPU_NAMESPACE::pmu_axi_channel>(((1U << 4) - 1) & (word0 >> 0));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008310 return value;
8311 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008312 CONSTEXPR pmcaxi_chan_r &set_CH_SEL(NPU_NAMESPACE::pmu_axi_channel value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008313 {
Jonny Svärd136810f2021-10-13 16:04:26 +02008314 word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008315 return *this;
8316 }
Jonny Svärd13cb0892021-11-16 18:43:04 +01008317 volatile pmcaxi_chan_r &set_CH_SEL(NPU_NAMESPACE::pmu_axi_channel value) volatile
8318 {
8319 word0 = (((~((1U << 4) - 1)) << 0) & word0) | ((((1U << 4) - 1) & static_cast<uint32_t>(value)) << 0);
8320 return *this;
8321 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008322 CONSTEXPR uint32_t get_AXI_CNT_SEL() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008323 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008324 uint32_t value = ((1U << 2) - 1) & (word0 >> 8);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008325 return value;
8326 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008327 uint32_t get_AXI_CNT_SEL() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008328 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008329 uint32_t value = ((1U << 2) - 1) & (word0 >> 8);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008330 return value;
8331 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008332 CONSTEXPR pmcaxi_chan_r &set_AXI_CNT_SEL(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008333 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008334 word0 = (((~((1U << 2) - 1)) << 8) & word0) | ((((1U << 2) - 1) & value) << 8);
8335 return *this;
8336 }
8337 volatile pmcaxi_chan_r &set_AXI_CNT_SEL(uint32_t value) volatile
8338 {
8339 word0 = (((~((1U << 2) - 1)) << 8) & word0) | ((((1U << 2) - 1) & value) << 8);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008340 return *this;
8341 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008342 CONSTEXPR uint32_t get_BW_CH_SEL_EN() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008343 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008344 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008345 return value;
8346 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008347 uint32_t get_BW_CH_SEL_EN() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008348 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008349 uint32_t value = ((1U << 1) - 1) & (word0 >> 10);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008350 return value;
8351 }
Douglas Trohaf6a85da2020-05-11 11:45:28 +02008352 CONSTEXPR pmcaxi_chan_r &set_BW_CH_SEL_EN(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008353 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008354 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
8355 return *this;
8356 }
8357 volatile pmcaxi_chan_r &set_BW_CH_SEL_EN(uint32_t value) volatile
8358 {
8359 word0 = (((~((1U << 1) - 1)) << 10) & word0) | ((((1U << 1) - 1) & value) << 10);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008360 return *this;
8361 }
Jonny Svärd136810f2021-10-13 16:04:26 +02008362#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008363};
8364
Jonny Svärd136810f2021-10-13 16:04:26 +02008365// kernel_x_r - Kernel X offset of in kernel decomposition
8366struct kernel_x_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008367{
Jonny Svärd136810f2021-10-13 16:04:26 +02008368#ifndef __cplusplus
8369 union
8370 {
8371 struct
8372 {
8373 uint32_t value : 32; // 32-bit register value
8374 };
8375 uint32_t word;
8376 };
8377#else
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02008378 private:
Jonny Svärd136810f2021-10-13 16:04:26 +02008379 uint32_t word0;
8380
8381 public:
8382 CONSTEXPR kernel_x_r() : word0(0) {}
8383 CONSTEXPR kernel_x_r(uint32_t init) : word0(init) {}
8384 CONSTEXPR void operator=(uint32_t value)
8385 {
8386 word0 = value;
8387 }
8388 void operator=(uint32_t value) volatile
8389 {
8390 word0 = value;
8391 }
8392 CONSTEXPR operator uint32_t()
8393 {
8394 return word0;
8395 }
8396 operator uint32_t() volatile
8397 {
8398 return word0;
8399 }
8400 kernel_x_r copy() volatile
8401 {
8402 return *this;
8403 }
8404 CONSTEXPR uint32_t get_value() const
8405 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008406 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008407 return value;
8408 }
8409 uint32_t get_value() const volatile
8410 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008411 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008412 return value;
8413 }
8414 CONSTEXPR kernel_x_r &set_value(uint32_t value)
8415 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008416 word0 = value;
8417 return *this;
8418 }
8419 volatile kernel_x_r &set_value(uint32_t value) volatile
8420 {
8421 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008422 return *this;
8423 }
8424#endif
8425};
8426
8427// kernel_y_r - Kernel Y offset of in kernel decomposition
8428struct kernel_y_r
8429{
8430#ifndef __cplusplus
8431 union
8432 {
8433 struct
8434 {
8435 uint32_t value : 32; // 32-bit register value
8436 };
8437 uint32_t word;
8438 };
8439#else
8440 private:
8441 uint32_t word0;
8442
8443 public:
8444 CONSTEXPR kernel_y_r() : word0(0) {}
8445 CONSTEXPR kernel_y_r(uint32_t init) : word0(init) {}
8446 CONSTEXPR void operator=(uint32_t value)
8447 {
8448 word0 = value;
8449 }
8450 void operator=(uint32_t value) volatile
8451 {
8452 word0 = value;
8453 }
8454 CONSTEXPR operator uint32_t()
8455 {
8456 return word0;
8457 }
8458 operator uint32_t() volatile
8459 {
8460 return word0;
8461 }
8462 kernel_y_r copy() volatile
8463 {
8464 return *this;
8465 }
8466 CONSTEXPR uint32_t get_value() const
8467 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008468 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008469 return value;
8470 }
8471 uint32_t get_value() const volatile
8472 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008473 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008474 return value;
8475 }
8476 CONSTEXPR kernel_y_r &set_value(uint32_t value)
8477 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008478 word0 = value;
8479 return *this;
8480 }
8481 volatile kernel_y_r &set_value(uint32_t value) volatile
8482 {
8483 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008484 return *this;
8485 }
8486#endif
8487};
8488
8489// kernel_w_m1_r - Kernel (width-1) of current block
8490struct kernel_w_m1_r
8491{
8492#ifndef __cplusplus
8493 union
8494 {
8495 struct
8496 {
8497 uint32_t value : 32; // 32-bit register value
8498 };
8499 uint32_t word;
8500 };
8501#else
8502 private:
8503 uint32_t word0;
8504
8505 public:
8506 CONSTEXPR kernel_w_m1_r() : word0(0) {}
8507 CONSTEXPR kernel_w_m1_r(uint32_t init) : word0(init) {}
8508 CONSTEXPR void operator=(uint32_t value)
8509 {
8510 word0 = value;
8511 }
8512 void operator=(uint32_t value) volatile
8513 {
8514 word0 = value;
8515 }
8516 CONSTEXPR operator uint32_t()
8517 {
8518 return word0;
8519 }
8520 operator uint32_t() volatile
8521 {
8522 return word0;
8523 }
8524 kernel_w_m1_r copy() volatile
8525 {
8526 return *this;
8527 }
8528 CONSTEXPR uint32_t get_value() const
8529 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008530 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008531 return value;
8532 }
8533 uint32_t get_value() const volatile
8534 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008535 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008536 return value;
8537 }
8538 CONSTEXPR kernel_w_m1_r &set_value(uint32_t value)
8539 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008540 word0 = value;
8541 return *this;
8542 }
8543 volatile kernel_w_m1_r &set_value(uint32_t value) volatile
8544 {
8545 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008546 return *this;
8547 }
8548#endif
8549};
8550
8551// kernel_h_m1_r - Kernel (height-1) of current block
8552struct kernel_h_m1_r
8553{
8554#ifndef __cplusplus
8555 union
8556 {
8557 struct
8558 {
8559 uint32_t value : 32; // 32-bit register value
8560 };
8561 uint32_t word;
8562 };
8563#else
8564 private:
8565 uint32_t word0;
8566
8567 public:
8568 CONSTEXPR kernel_h_m1_r() : word0(0) {}
8569 CONSTEXPR kernel_h_m1_r(uint32_t init) : word0(init) {}
8570 CONSTEXPR void operator=(uint32_t value)
8571 {
8572 word0 = value;
8573 }
8574 void operator=(uint32_t value) volatile
8575 {
8576 word0 = value;
8577 }
8578 CONSTEXPR operator uint32_t()
8579 {
8580 return word0;
8581 }
8582 operator uint32_t() volatile
8583 {
8584 return word0;
8585 }
8586 kernel_h_m1_r copy() volatile
8587 {
8588 return *this;
8589 }
8590 CONSTEXPR uint32_t get_value() const
8591 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008592 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008593 return value;
8594 }
8595 uint32_t get_value() const volatile
8596 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008597 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008598 return value;
8599 }
8600 CONSTEXPR kernel_h_m1_r &set_value(uint32_t value)
8601 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008602 word0 = value;
8603 return *this;
8604 }
8605 volatile kernel_h_m1_r &set_value(uint32_t value) volatile
8606 {
8607 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008608 return *this;
8609 }
8610#endif
8611};
8612
8613// ofm_cblk_width_m1_r - OFM current block (width-1)
8614struct ofm_cblk_width_m1_r
8615{
8616#ifndef __cplusplus
8617 union
8618 {
8619 struct
8620 {
8621 uint32_t value : 32; // 32-bit register value
8622 };
8623 uint32_t word;
8624 };
8625#else
8626 private:
8627 uint32_t word0;
8628
8629 public:
8630 CONSTEXPR ofm_cblk_width_m1_r() : word0(0) {}
8631 CONSTEXPR ofm_cblk_width_m1_r(uint32_t init) : word0(init) {}
8632 CONSTEXPR void operator=(uint32_t value)
8633 {
8634 word0 = value;
8635 }
8636 void operator=(uint32_t value) volatile
8637 {
8638 word0 = value;
8639 }
8640 CONSTEXPR operator uint32_t()
8641 {
8642 return word0;
8643 }
8644 operator uint32_t() volatile
8645 {
8646 return word0;
8647 }
8648 ofm_cblk_width_m1_r copy() volatile
8649 {
8650 return *this;
8651 }
8652 CONSTEXPR uint32_t get_value() const
8653 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008654 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008655 return value;
8656 }
8657 uint32_t get_value() const volatile
8658 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008659 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008660 return value;
8661 }
8662 CONSTEXPR ofm_cblk_width_m1_r &set_value(uint32_t value)
8663 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008664 word0 = value;
8665 return *this;
8666 }
8667 volatile ofm_cblk_width_m1_r &set_value(uint32_t value) volatile
8668 {
8669 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008670 return *this;
8671 }
8672#endif
8673};
8674
8675// ofm_cblk_height_m1_r - OFM current block (height-1)
8676struct ofm_cblk_height_m1_r
8677{
8678#ifndef __cplusplus
8679 union
8680 {
8681 struct
8682 {
8683 uint32_t value : 32; // 32-bit register value
8684 };
8685 uint32_t word;
8686 };
8687#else
8688 private:
8689 uint32_t word0;
8690
8691 public:
8692 CONSTEXPR ofm_cblk_height_m1_r() : word0(0) {}
8693 CONSTEXPR ofm_cblk_height_m1_r(uint32_t init) : word0(init) {}
8694 CONSTEXPR void operator=(uint32_t value)
8695 {
8696 word0 = value;
8697 }
8698 void operator=(uint32_t value) volatile
8699 {
8700 word0 = value;
8701 }
8702 CONSTEXPR operator uint32_t()
8703 {
8704 return word0;
8705 }
8706 operator uint32_t() volatile
8707 {
8708 return word0;
8709 }
8710 ofm_cblk_height_m1_r copy() volatile
8711 {
8712 return *this;
8713 }
8714 CONSTEXPR uint32_t get_value() const
8715 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008716 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008717 return value;
8718 }
8719 uint32_t get_value() const volatile
8720 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008721 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008722 return value;
8723 }
8724 CONSTEXPR ofm_cblk_height_m1_r &set_value(uint32_t value)
8725 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008726 word0 = value;
8727 return *this;
8728 }
8729 volatile ofm_cblk_height_m1_r &set_value(uint32_t value) volatile
8730 {
8731 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008732 return *this;
8733 }
8734#endif
8735};
8736
8737// ofm_cblk_depth_m1_r - OFM current block (depth-1)
8738struct ofm_cblk_depth_m1_r
8739{
8740#ifndef __cplusplus
8741 union
8742 {
8743 struct
8744 {
8745 uint32_t value : 32; // 32-bit register value
8746 };
8747 uint32_t word;
8748 };
8749#else
8750 private:
8751 uint32_t word0;
8752
8753 public:
8754 CONSTEXPR ofm_cblk_depth_m1_r() : word0(0) {}
8755 CONSTEXPR ofm_cblk_depth_m1_r(uint32_t init) : word0(init) {}
8756 CONSTEXPR void operator=(uint32_t value)
8757 {
8758 word0 = value;
8759 }
8760 void operator=(uint32_t value) volatile
8761 {
8762 word0 = value;
8763 }
8764 CONSTEXPR operator uint32_t()
8765 {
8766 return word0;
8767 }
8768 operator uint32_t() volatile
8769 {
8770 return word0;
8771 }
8772 ofm_cblk_depth_m1_r copy() volatile
8773 {
8774 return *this;
8775 }
8776 CONSTEXPR uint32_t get_value() const
8777 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008778 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008779 return value;
8780 }
8781 uint32_t get_value() const volatile
8782 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008783 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008784 return value;
8785 }
8786 CONSTEXPR ofm_cblk_depth_m1_r &set_value(uint32_t value)
8787 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008788 word0 = value;
8789 return *this;
8790 }
8791 volatile ofm_cblk_depth_m1_r &set_value(uint32_t value) volatile
8792 {
8793 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008794 return *this;
8795 }
8796#endif
8797};
8798
8799// ifm_cblk_depth_m1_r - IFM current block (depth-1)
8800struct ifm_cblk_depth_m1_r
8801{
8802#ifndef __cplusplus
8803 union
8804 {
8805 struct
8806 {
8807 uint32_t value : 32; // 32-bit register value
8808 };
8809 uint32_t word;
8810 };
8811#else
8812 private:
8813 uint32_t word0;
8814
8815 public:
8816 CONSTEXPR ifm_cblk_depth_m1_r() : word0(0) {}
8817 CONSTEXPR ifm_cblk_depth_m1_r(uint32_t init) : word0(init) {}
8818 CONSTEXPR void operator=(uint32_t value)
8819 {
8820 word0 = value;
8821 }
8822 void operator=(uint32_t value) volatile
8823 {
8824 word0 = value;
8825 }
8826 CONSTEXPR operator uint32_t()
8827 {
8828 return word0;
8829 }
8830 operator uint32_t() volatile
8831 {
8832 return word0;
8833 }
8834 ifm_cblk_depth_m1_r copy() volatile
8835 {
8836 return *this;
8837 }
8838 CONSTEXPR uint32_t get_value() const
8839 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008840 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008841 return value;
8842 }
8843 uint32_t get_value() const volatile
8844 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008845 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008846 return value;
8847 }
8848 CONSTEXPR ifm_cblk_depth_m1_r &set_value(uint32_t value)
8849 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008850 word0 = value;
8851 return *this;
8852 }
8853 volatile ifm_cblk_depth_m1_r &set_value(uint32_t value) volatile
8854 {
8855 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008856 return *this;
8857 }
8858#endif
8859};
8860
8861// ofm_x_r - Block X coordinate in OFM
8862struct ofm_x_r
8863{
8864#ifndef __cplusplus
8865 union
8866 {
8867 struct
8868 {
8869 uint32_t value : 32; // 32-bit register value
8870 };
8871 uint32_t word;
8872 };
8873#else
8874 private:
8875 uint32_t word0;
8876
8877 public:
8878 CONSTEXPR ofm_x_r() : word0(0) {}
8879 CONSTEXPR ofm_x_r(uint32_t init) : word0(init) {}
8880 CONSTEXPR void operator=(uint32_t value)
8881 {
8882 word0 = value;
8883 }
8884 void operator=(uint32_t value) volatile
8885 {
8886 word0 = value;
8887 }
8888 CONSTEXPR operator uint32_t()
8889 {
8890 return word0;
8891 }
8892 operator uint32_t() volatile
8893 {
8894 return word0;
8895 }
8896 ofm_x_r copy() volatile
8897 {
8898 return *this;
8899 }
8900 CONSTEXPR uint32_t get_value() const
8901 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008902 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008903 return value;
8904 }
8905 uint32_t get_value() const volatile
8906 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008907 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008908 return value;
8909 }
8910 CONSTEXPR ofm_x_r &set_value(uint32_t value)
8911 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008912 word0 = value;
8913 return *this;
8914 }
8915 volatile ofm_x_r &set_value(uint32_t value) volatile
8916 {
8917 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008918 return *this;
8919 }
8920#endif
8921};
8922
8923// ofm_y_r - Block Y coordinate in OFM
8924struct ofm_y_r
8925{
8926#ifndef __cplusplus
8927 union
8928 {
8929 struct
8930 {
8931 uint32_t value : 32; // 32-bit register value
8932 };
8933 uint32_t word;
8934 };
8935#else
8936 private:
8937 uint32_t word0;
8938
8939 public:
8940 CONSTEXPR ofm_y_r() : word0(0) {}
8941 CONSTEXPR ofm_y_r(uint32_t init) : word0(init) {}
8942 CONSTEXPR void operator=(uint32_t value)
8943 {
8944 word0 = value;
8945 }
8946 void operator=(uint32_t value) volatile
8947 {
8948 word0 = value;
8949 }
8950 CONSTEXPR operator uint32_t()
8951 {
8952 return word0;
8953 }
8954 operator uint32_t() volatile
8955 {
8956 return word0;
8957 }
8958 ofm_y_r copy() volatile
8959 {
8960 return *this;
8961 }
8962 CONSTEXPR uint32_t get_value() const
8963 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008964 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008965 return value;
8966 }
8967 uint32_t get_value() const volatile
8968 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008969 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02008970 return value;
8971 }
8972 CONSTEXPR ofm_y_r &set_value(uint32_t value)
8973 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01008974 word0 = value;
8975 return *this;
8976 }
8977 volatile ofm_y_r &set_value(uint32_t value) volatile
8978 {
8979 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02008980 return *this;
8981 }
8982#endif
8983};
8984
8985// ofm_z_r - Block Z (channel) coordinate in OFM
8986struct ofm_z_r
8987{
8988#ifndef __cplusplus
8989 union
8990 {
8991 struct
8992 {
8993 uint32_t value : 32; // 32-bit register value
8994 };
8995 uint32_t word;
8996 };
8997#else
8998 private:
8999 uint32_t word0;
9000
9001 public:
9002 CONSTEXPR ofm_z_r() : word0(0) {}
9003 CONSTEXPR ofm_z_r(uint32_t init) : word0(init) {}
9004 CONSTEXPR void operator=(uint32_t value)
9005 {
9006 word0 = value;
9007 }
9008 void operator=(uint32_t value) volatile
9009 {
9010 word0 = value;
9011 }
9012 CONSTEXPR operator uint32_t()
9013 {
9014 return word0;
9015 }
9016 operator uint32_t() volatile
9017 {
9018 return word0;
9019 }
9020 ofm_z_r copy() volatile
9021 {
9022 return *this;
9023 }
9024 CONSTEXPR uint32_t get_value() const
9025 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009026 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009027 return value;
9028 }
9029 uint32_t get_value() const volatile
9030 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009031 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009032 return value;
9033 }
9034 CONSTEXPR ofm_z_r &set_value(uint32_t value)
9035 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009036 word0 = value;
9037 return *this;
9038 }
9039 volatile ofm_z_r &set_value(uint32_t value) volatile
9040 {
9041 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009042 return *this;
9043 }
9044#endif
9045};
9046
9047// ifm_z_r - Block Z (channel) coordinate in IFM
9048struct ifm_z_r
9049{
9050#ifndef __cplusplus
9051 union
9052 {
9053 struct
9054 {
9055 uint32_t value : 32; // 32-bit register value
9056 };
9057 uint32_t word;
9058 };
9059#else
9060 private:
9061 uint32_t word0;
9062
9063 public:
9064 CONSTEXPR ifm_z_r() : word0(0) {}
9065 CONSTEXPR ifm_z_r(uint32_t init) : word0(init) {}
9066 CONSTEXPR void operator=(uint32_t value)
9067 {
9068 word0 = value;
9069 }
9070 void operator=(uint32_t value) volatile
9071 {
9072 word0 = value;
9073 }
9074 CONSTEXPR operator uint32_t()
9075 {
9076 return word0;
9077 }
9078 operator uint32_t() volatile
9079 {
9080 return word0;
9081 }
9082 ifm_z_r copy() volatile
9083 {
9084 return *this;
9085 }
9086 CONSTEXPR uint32_t get_value() const
9087 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009088 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009089 return value;
9090 }
9091 uint32_t get_value() const volatile
9092 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009093 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009094 return value;
9095 }
9096 CONSTEXPR ifm_z_r &set_value(uint32_t value)
9097 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009098 word0 = value;
9099 return *this;
9100 }
9101 volatile ifm_z_r &set_value(uint32_t value) volatile
9102 {
9103 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009104 return *this;
9105 }
9106#endif
9107};
9108
9109// pad_top_r - Block top pad
9110struct pad_top_r
9111{
9112#ifndef __cplusplus
9113 union
9114 {
9115 struct
9116 {
9117 uint32_t value : 32; // 32-bit register value
9118 };
9119 uint32_t word;
9120 };
9121#else
9122 private:
9123 uint32_t word0;
9124
9125 public:
9126 CONSTEXPR pad_top_r() : word0(0) {}
9127 CONSTEXPR pad_top_r(uint32_t init) : word0(init) {}
9128 CONSTEXPR void operator=(uint32_t value)
9129 {
9130 word0 = value;
9131 }
9132 void operator=(uint32_t value) volatile
9133 {
9134 word0 = value;
9135 }
9136 CONSTEXPR operator uint32_t()
9137 {
9138 return word0;
9139 }
9140 operator uint32_t() volatile
9141 {
9142 return word0;
9143 }
9144 pad_top_r copy() volatile
9145 {
9146 return *this;
9147 }
9148 CONSTEXPR uint32_t get_value() const
9149 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009150 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009151 return value;
9152 }
9153 uint32_t get_value() const volatile
9154 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009155 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009156 return value;
9157 }
9158 CONSTEXPR pad_top_r &set_value(uint32_t value)
9159 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009160 word0 = value;
9161 return *this;
9162 }
9163 volatile pad_top_r &set_value(uint32_t value) volatile
9164 {
9165 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009166 return *this;
9167 }
9168#endif
9169};
9170
9171// pad_left_r - Block left pad
9172struct pad_left_r
9173{
9174#ifndef __cplusplus
9175 union
9176 {
9177 struct
9178 {
9179 uint32_t value : 32; // 32-bit register value
9180 };
9181 uint32_t word;
9182 };
9183#else
9184 private:
9185 uint32_t word0;
9186
9187 public:
9188 CONSTEXPR pad_left_r() : word0(0) {}
9189 CONSTEXPR pad_left_r(uint32_t init) : word0(init) {}
9190 CONSTEXPR void operator=(uint32_t value)
9191 {
9192 word0 = value;
9193 }
9194 void operator=(uint32_t value) volatile
9195 {
9196 word0 = value;
9197 }
9198 CONSTEXPR operator uint32_t()
9199 {
9200 return word0;
9201 }
9202 operator uint32_t() volatile
9203 {
9204 return word0;
9205 }
9206 pad_left_r copy() volatile
9207 {
9208 return *this;
9209 }
9210 CONSTEXPR uint32_t get_value() const
9211 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009212 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009213 return value;
9214 }
9215 uint32_t get_value() const volatile
9216 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009217 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009218 return value;
9219 }
9220 CONSTEXPR pad_left_r &set_value(uint32_t value)
9221 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009222 word0 = value;
9223 return *this;
9224 }
9225 volatile pad_left_r &set_value(uint32_t value) volatile
9226 {
9227 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009228 return *this;
9229 }
9230#endif
9231};
9232
9233// ifm_cblk_width_r - IFM current block derived width
9234struct ifm_cblk_width_r
9235{
9236#ifndef __cplusplus
9237 union
9238 {
9239 struct
9240 {
9241 uint32_t value : 32; // 32-bit register value
9242 };
9243 uint32_t word;
9244 };
9245#else
9246 private:
9247 uint32_t word0;
9248
9249 public:
9250 CONSTEXPR ifm_cblk_width_r() : word0(0) {}
9251 CONSTEXPR ifm_cblk_width_r(uint32_t init) : word0(init) {}
9252 CONSTEXPR void operator=(uint32_t value)
9253 {
9254 word0 = value;
9255 }
9256 void operator=(uint32_t value) volatile
9257 {
9258 word0 = value;
9259 }
9260 CONSTEXPR operator uint32_t()
9261 {
9262 return word0;
9263 }
9264 operator uint32_t() volatile
9265 {
9266 return word0;
9267 }
9268 ifm_cblk_width_r copy() volatile
9269 {
9270 return *this;
9271 }
9272 CONSTEXPR uint32_t get_value() const
9273 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009274 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009275 return value;
9276 }
9277 uint32_t get_value() const volatile
9278 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009279 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009280 return value;
9281 }
9282 CONSTEXPR ifm_cblk_width_r &set_value(uint32_t value)
9283 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009284 word0 = value;
9285 return *this;
9286 }
9287 volatile ifm_cblk_width_r &set_value(uint32_t value) volatile
9288 {
9289 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009290 return *this;
9291 }
9292#endif
9293};
9294
9295// ifm_cblk_height_r - IFM current block derived height
9296struct ifm_cblk_height_r
9297{
9298#ifndef __cplusplus
9299 union
9300 {
9301 struct
9302 {
9303 uint32_t value : 32; // 32-bit register value
9304 };
9305 uint32_t word;
9306 };
9307#else
9308 private:
9309 uint32_t word0;
9310
9311 public:
9312 CONSTEXPR ifm_cblk_height_r() : word0(0) {}
9313 CONSTEXPR ifm_cblk_height_r(uint32_t init) : word0(init) {}
9314 CONSTEXPR void operator=(uint32_t value)
9315 {
9316 word0 = value;
9317 }
9318 void operator=(uint32_t value) volatile
9319 {
9320 word0 = value;
9321 }
9322 CONSTEXPR operator uint32_t()
9323 {
9324 return word0;
9325 }
9326 operator uint32_t() volatile
9327 {
9328 return word0;
9329 }
9330 ifm_cblk_height_r copy() volatile
9331 {
9332 return *this;
9333 }
9334 CONSTEXPR uint32_t get_value() const
9335 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009336 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009337 return value;
9338 }
9339 uint32_t get_value() const volatile
9340 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009341 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009342 return value;
9343 }
9344 CONSTEXPR ifm_cblk_height_r &set_value(uint32_t value)
9345 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009346 word0 = value;
9347 return *this;
9348 }
9349 volatile ifm_cblk_height_r &set_value(uint32_t value) volatile
9350 {
9351 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009352 return *this;
9353 }
9354#endif
9355};
9356
9357// dma_ifm_src_r - DMA IFM channel source position on AXI
9358struct dma_ifm_src_r
9359{
9360#ifndef __cplusplus
9361 union
9362 {
9363 struct
9364 {
9365 uint32_t offset : 32; // Offset
9366 uint32_t reserved0 : 32;
9367 };
9368 uint32_t word[2];
9369 };
9370#else
9371 private:
9372 uint32_t word0;
9373 uint32_t word1;
9374
9375 public:
9376 CONSTEXPR dma_ifm_src_r() : word0(0), word1(0) {}
9377 CONSTEXPR dma_ifm_src_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01009378 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
9379 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02009380 {
9381 }
9382 CONSTEXPR void operator=(uint64_t value)
9383 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009384 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9385 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009386 }
9387 void operator=(uint64_t value) volatile
9388 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009389 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9390 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009391 }
9392 CONSTEXPR operator uint64_t()
9393 {
9394 return (static_cast<uint64_t>(word1) << 32) | word0;
9395 }
9396 operator uint64_t() volatile
9397 {
9398 return (static_cast<uint64_t>(word1) << 32) | word0;
9399 }
9400 dma_ifm_src_r copy() volatile
9401 {
9402 return *this;
9403 }
9404#endif
9405};
9406
9407// dma_ifm_dst_r - DMA IFM channel destination position in SHRAM
9408struct dma_ifm_dst_r
9409{
9410#ifndef __cplusplus
9411 union
9412 {
9413 struct
9414 {
9415 uint32_t value : 32; // 32-bit register value
9416 };
9417 uint32_t word;
9418 };
9419#else
9420 private:
9421 uint32_t word0;
9422
9423 public:
9424 CONSTEXPR dma_ifm_dst_r() : word0(0) {}
9425 CONSTEXPR dma_ifm_dst_r(uint32_t init) : word0(init) {}
9426 CONSTEXPR void operator=(uint32_t value)
9427 {
9428 word0 = value;
9429 }
9430 void operator=(uint32_t value) volatile
9431 {
9432 word0 = value;
9433 }
9434 CONSTEXPR operator uint32_t()
9435 {
9436 return word0;
9437 }
9438 operator uint32_t() volatile
9439 {
9440 return word0;
9441 }
9442 dma_ifm_dst_r copy() volatile
9443 {
9444 return *this;
9445 }
9446 CONSTEXPR uint32_t get_value() const
9447 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009448 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009449 return value;
9450 }
9451 uint32_t get_value() const volatile
9452 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009453 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009454 return value;
9455 }
9456 CONSTEXPR dma_ifm_dst_r &set_value(uint32_t value)
9457 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009458 word0 = value;
9459 return *this;
9460 }
9461 volatile dma_ifm_dst_r &set_value(uint32_t value) volatile
9462 {
9463 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009464 return *this;
9465 }
9466#endif
9467};
9468
9469// dma_ofm_src_r - DMA OFM channel source position in SHRAM
9470struct dma_ofm_src_r
9471{
9472#ifndef __cplusplus
9473 union
9474 {
9475 struct
9476 {
9477 uint32_t value : 32; // 32-bit register value
9478 };
9479 uint32_t word;
9480 };
9481#else
9482 private:
9483 uint32_t word0;
9484
9485 public:
9486 CONSTEXPR dma_ofm_src_r() : word0(0) {}
9487 CONSTEXPR dma_ofm_src_r(uint32_t init) : word0(init) {}
9488 CONSTEXPR void operator=(uint32_t value)
9489 {
9490 word0 = value;
9491 }
9492 void operator=(uint32_t value) volatile
9493 {
9494 word0 = value;
9495 }
9496 CONSTEXPR operator uint32_t()
9497 {
9498 return word0;
9499 }
9500 operator uint32_t() volatile
9501 {
9502 return word0;
9503 }
9504 dma_ofm_src_r copy() volatile
9505 {
9506 return *this;
9507 }
9508 CONSTEXPR uint32_t get_value() const
9509 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009510 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009511 return value;
9512 }
9513 uint32_t get_value() const volatile
9514 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009515 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009516 return value;
9517 }
9518 CONSTEXPR dma_ofm_src_r &set_value(uint32_t value)
9519 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009520 word0 = value;
9521 return *this;
9522 }
9523 volatile dma_ofm_src_r &set_value(uint32_t value) volatile
9524 {
9525 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009526 return *this;
9527 }
9528#endif
9529};
9530
9531// dma_ofm_dst_r - DMA OFM channel destination position on AXI
9532struct dma_ofm_dst_r
9533{
9534#ifndef __cplusplus
9535 union
9536 {
9537 struct
9538 {
9539 uint32_t offset : 32; // Offset
9540 uint32_t reserved0 : 32;
9541 };
9542 uint32_t word[2];
9543 };
9544#else
9545 private:
9546 uint32_t word0;
9547 uint32_t word1;
9548
9549 public:
9550 CONSTEXPR dma_ofm_dst_r() : word0(0), word1(0) {}
9551 CONSTEXPR dma_ofm_dst_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01009552 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
9553 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02009554 {
9555 }
9556 CONSTEXPR void operator=(uint64_t value)
9557 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009558 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9559 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009560 }
9561 void operator=(uint64_t value) volatile
9562 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009563 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9564 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009565 }
9566 CONSTEXPR operator uint64_t()
9567 {
9568 return (static_cast<uint64_t>(word1) << 32) | word0;
9569 }
9570 operator uint64_t() volatile
9571 {
9572 return (static_cast<uint64_t>(word1) << 32) | word0;
9573 }
9574 dma_ofm_dst_r copy() volatile
9575 {
9576 return *this;
9577 }
9578#endif
9579};
9580
9581// dma_weight_src_r - DMA weight channel source position on AXI
9582struct dma_weight_src_r
9583{
9584#ifndef __cplusplus
9585 union
9586 {
9587 struct
9588 {
9589 uint32_t offset : 32; // Offset
9590 uint32_t reserved0 : 32;
9591 };
9592 uint32_t word[2];
9593 };
9594#else
9595 private:
9596 uint32_t word0;
9597 uint32_t word1;
9598
9599 public:
9600 CONSTEXPR dma_weight_src_r() : word0(0), word1(0) {}
9601 CONSTEXPR dma_weight_src_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01009602 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
9603 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02009604 {
9605 }
9606 CONSTEXPR void operator=(uint64_t value)
9607 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009608 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9609 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009610 }
9611 void operator=(uint64_t value) volatile
9612 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009613 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9614 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009615 }
9616 CONSTEXPR operator uint64_t()
9617 {
9618 return (static_cast<uint64_t>(word1) << 32) | word0;
9619 }
9620 operator uint64_t() volatile
9621 {
9622 return (static_cast<uint64_t>(word1) << 32) | word0;
9623 }
9624 dma_weight_src_r copy() volatile
9625 {
9626 return *this;
9627 }
9628#endif
9629};
9630
9631// dma_cmd_src_r - DMA command channel source position on AXI
9632struct dma_cmd_src_r
9633{
9634#ifndef __cplusplus
9635 union
9636 {
9637 struct
9638 {
9639 uint32_t offset : 32; // Offset
9640 uint32_t reserved0 : 32;
9641 };
9642 uint32_t word[2];
9643 };
9644#else
9645 private:
9646 uint32_t word0;
9647 uint32_t word1;
9648
9649 public:
9650 CONSTEXPR dma_cmd_src_r() : word0(0), word1(0) {}
9651 CONSTEXPR dma_cmd_src_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01009652 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
9653 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02009654 {
9655 }
9656 CONSTEXPR void operator=(uint64_t value)
9657 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009658 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9659 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009660 }
9661 void operator=(uint64_t value) volatile
9662 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009663 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9664 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009665 }
9666 CONSTEXPR operator uint64_t()
9667 {
9668 return (static_cast<uint64_t>(word1) << 32) | word0;
9669 }
9670 operator uint64_t() volatile
9671 {
9672 return (static_cast<uint64_t>(word1) << 32) | word0;
9673 }
9674 dma_cmd_src_r copy() volatile
9675 {
9676 return *this;
9677 }
9678#endif
9679};
9680
9681// dma_cmd_size_r - DMA command channel number of bytes buffered
9682struct dma_cmd_size_r
9683{
9684#ifndef __cplusplus
9685 union
9686 {
9687 struct
9688 {
9689 uint32_t value : 32; // 32-bit register value
9690 };
9691 uint32_t word;
9692 };
9693#else
9694 private:
9695 uint32_t word0;
9696
9697 public:
9698 CONSTEXPR dma_cmd_size_r() : word0(0) {}
9699 CONSTEXPR dma_cmd_size_r(uint32_t init) : word0(init) {}
9700 CONSTEXPR void operator=(uint32_t value)
9701 {
9702 word0 = value;
9703 }
9704 void operator=(uint32_t value) volatile
9705 {
9706 word0 = value;
9707 }
9708 CONSTEXPR operator uint32_t()
9709 {
9710 return word0;
9711 }
9712 operator uint32_t() volatile
9713 {
9714 return word0;
9715 }
9716 dma_cmd_size_r copy() volatile
9717 {
9718 return *this;
9719 }
9720 CONSTEXPR uint32_t get_value() const
9721 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009722 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009723 return value;
9724 }
9725 uint32_t get_value() const volatile
9726 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009727 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009728 return value;
9729 }
9730 CONSTEXPR dma_cmd_size_r &set_value(uint32_t value)
9731 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009732 word0 = value;
9733 return *this;
9734 }
9735 volatile dma_cmd_size_r &set_value(uint32_t value) volatile
9736 {
9737 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009738 return *this;
9739 }
9740#endif
9741};
9742
9743// dma_m2m_src_r - DMA memory to memory source position on AXI
9744struct dma_m2m_src_r
9745{
9746#ifndef __cplusplus
9747 union
9748 {
9749 struct
9750 {
9751 uint32_t offset : 32; // Offset
9752 uint32_t reserved0 : 32;
9753 };
9754 uint32_t word[2];
9755 };
9756#else
9757 private:
9758 uint32_t word0;
9759 uint32_t word1;
9760
9761 public:
9762 CONSTEXPR dma_m2m_src_r() : word0(0), word1(0) {}
9763 CONSTEXPR dma_m2m_src_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01009764 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
9765 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02009766 {
9767 }
9768 CONSTEXPR void operator=(uint64_t value)
9769 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009770 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9771 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009772 }
9773 void operator=(uint64_t value) volatile
9774 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009775 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9776 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009777 }
9778 CONSTEXPR operator uint64_t()
9779 {
9780 return (static_cast<uint64_t>(word1) << 32) | word0;
9781 }
9782 operator uint64_t() volatile
9783 {
9784 return (static_cast<uint64_t>(word1) << 32) | word0;
9785 }
9786 dma_m2m_src_r copy() volatile
9787 {
9788 return *this;
9789 }
9790#endif
9791};
9792
9793// dma_m2m_dst_r - DMA memory to memory destination position on AXI
9794struct dma_m2m_dst_r
9795{
9796#ifndef __cplusplus
9797 union
9798 {
9799 struct
9800 {
9801 uint32_t offset : 32; // Offset
9802 uint32_t reserved0 : 32;
9803 };
9804 uint32_t word[2];
9805 };
9806#else
9807 private:
9808 uint32_t word0;
9809 uint32_t word1;
9810
9811 public:
9812 CONSTEXPR dma_m2m_dst_r() : word0(0), word1(0) {}
9813 CONSTEXPR dma_m2m_dst_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01009814 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
9815 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02009816 {
9817 }
9818 CONSTEXPR void operator=(uint64_t value)
9819 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009820 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9821 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009822 }
9823 void operator=(uint64_t value) volatile
9824 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009825 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9826 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009827 }
9828 CONSTEXPR operator uint64_t()
9829 {
9830 return (static_cast<uint64_t>(word1) << 32) | word0;
9831 }
9832 operator uint64_t() volatile
9833 {
9834 return (static_cast<uint64_t>(word1) << 32) | word0;
9835 }
9836 dma_m2m_dst_r copy() volatile
9837 {
9838 return *this;
9839 }
9840#endif
9841};
9842
9843// current_qread_r - QREAD position being issued (rather than completed)
9844struct current_qread_r
9845{
9846#ifndef __cplusplus
9847 union
9848 {
9849 struct
9850 {
9851 uint32_t value : 32; // 32-bit register value
9852 };
9853 uint32_t word;
9854 };
9855#else
9856 private:
9857 uint32_t word0;
9858
9859 public:
9860 CONSTEXPR current_qread_r() : word0(0) {}
9861 CONSTEXPR current_qread_r(uint32_t init) : word0(init) {}
9862 CONSTEXPR void operator=(uint32_t value)
9863 {
9864 word0 = value;
9865 }
9866 void operator=(uint32_t value) volatile
9867 {
9868 word0 = value;
9869 }
9870 CONSTEXPR operator uint32_t()
9871 {
9872 return word0;
9873 }
9874 operator uint32_t() volatile
9875 {
9876 return word0;
9877 }
9878 current_qread_r copy() volatile
9879 {
9880 return *this;
9881 }
9882 CONSTEXPR uint32_t get_value() const
9883 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009884 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009885 return value;
9886 }
9887 uint32_t get_value() const volatile
9888 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009889 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009890 return value;
9891 }
9892 CONSTEXPR current_qread_r &set_value(uint32_t value)
9893 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009894 word0 = value;
9895 return *this;
9896 }
9897 volatile current_qread_r &set_value(uint32_t value) volatile
9898 {
9899 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +02009900 return *this;
9901 }
9902#endif
9903};
9904
9905// dma_scale_src_r - DMA scale and bias channel source position on AXI
9906struct dma_scale_src_r
9907{
9908#ifndef __cplusplus
9909 union
9910 {
9911 struct
9912 {
9913 uint32_t offset : 32; // Offset
9914 uint32_t reserved0 : 32;
9915 };
9916 uint32_t word[2];
9917 };
9918#else
9919 private:
9920 uint32_t word0;
9921 uint32_t word1;
9922
9923 public:
9924 CONSTEXPR dma_scale_src_r() : word0(0), word1(0) {}
9925 CONSTEXPR dma_scale_src_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +01009926 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
9927 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +02009928 {
9929 }
9930 CONSTEXPR void operator=(uint64_t value)
9931 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009932 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9933 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009934 }
9935 void operator=(uint64_t value) volatile
9936 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009937 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
9938 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +02009939 }
9940 CONSTEXPR operator uint64_t()
9941 {
9942 return (static_cast<uint64_t>(word1) << 32) | word0;
9943 }
9944 operator uint64_t() volatile
9945 {
9946 return (static_cast<uint64_t>(word1) << 32) | word0;
9947 }
9948 dma_scale_src_r copy() volatile
9949 {
9950 return *this;
9951 }
9952#endif
9953};
9954
9955// current_block_r - 0-3. Current block bank being executed by the TSU or last one executed if TSU is stopped
9956struct current_block_r
9957{
9958#ifndef __cplusplus
9959 union
9960 {
9961 struct
9962 {
9963 uint32_t value : 32; // 32-bit register value
9964 };
9965 uint32_t word;
9966 };
9967#else
9968 private:
9969 uint32_t word0;
9970
9971 public:
9972 CONSTEXPR current_block_r() : word0(0) {}
9973 CONSTEXPR current_block_r(uint32_t init) : word0(init) {}
9974 CONSTEXPR void operator=(uint32_t value)
9975 {
9976 word0 = value;
9977 }
9978 void operator=(uint32_t value) volatile
9979 {
9980 word0 = value;
9981 }
9982 CONSTEXPR operator uint32_t()
9983 {
9984 return word0;
9985 }
9986 operator uint32_t() volatile
9987 {
9988 return word0;
9989 }
9990 current_block_r copy() volatile
9991 {
9992 return *this;
9993 }
9994 CONSTEXPR uint32_t get_value() const
9995 {
Jonny Svärd13cb0892021-11-16 18:43:04 +01009996 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +02009997 return value;
9998 }
9999 uint32_t get_value() const volatile
10000 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010001 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010002 return value;
10003 }
10004 CONSTEXPR current_block_r &set_value(uint32_t value)
10005 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010006 word0 = value;
10007 return *this;
10008 }
10009 volatile current_block_r &set_value(uint32_t value) volatile
10010 {
10011 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010012 return *this;
10013 }
10014#endif
10015};
10016
10017// current_op_r - Current NPU OP command being executed by the TSU
10018struct current_op_r
10019{
10020#ifndef __cplusplus
10021 union
10022 {
10023 struct
10024 {
10025 uint32_t value : 32; // 32-bit register value
10026 };
10027 uint32_t word;
10028 };
10029#else
10030 private:
10031 uint32_t word0;
10032
10033 public:
10034 CONSTEXPR current_op_r() : word0(0) {}
10035 CONSTEXPR current_op_r(uint32_t init) : word0(init) {}
10036 CONSTEXPR void operator=(uint32_t value)
10037 {
10038 word0 = value;
10039 }
10040 void operator=(uint32_t value) volatile
10041 {
10042 word0 = value;
10043 }
10044 CONSTEXPR operator uint32_t()
10045 {
10046 return word0;
10047 }
10048 operator uint32_t() volatile
10049 {
10050 return word0;
10051 }
10052 current_op_r copy() volatile
10053 {
10054 return *this;
10055 }
10056 CONSTEXPR uint32_t get_value() const
10057 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010058 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010059 return value;
10060 }
10061 uint32_t get_value() const volatile
10062 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010063 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010064 return value;
10065 }
10066 CONSTEXPR current_op_r &set_value(uint32_t value)
10067 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010068 word0 = value;
10069 return *this;
10070 }
10071 volatile current_op_r &set_value(uint32_t value) volatile
10072 {
10073 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010074 return *this;
10075 }
10076#endif
10077};
10078
10079// current_cmd_r - Current 32-bit command being parsed by the command stream parser
10080struct current_cmd_r
10081{
10082#ifndef __cplusplus
10083 union
10084 {
10085 struct
10086 {
10087 uint32_t value : 32; // 32-bit register value
10088 };
10089 uint32_t word;
10090 };
10091#else
10092 private:
10093 uint32_t word0;
10094
10095 public:
10096 CONSTEXPR current_cmd_r() : word0(0) {}
10097 CONSTEXPR current_cmd_r(uint32_t init) : word0(init) {}
10098 CONSTEXPR void operator=(uint32_t value)
10099 {
10100 word0 = value;
10101 }
10102 void operator=(uint32_t value) volatile
10103 {
10104 word0 = value;
10105 }
10106 CONSTEXPR operator uint32_t()
10107 {
10108 return word0;
10109 }
10110 operator uint32_t() volatile
10111 {
10112 return word0;
10113 }
10114 current_cmd_r copy() volatile
10115 {
10116 return *this;
10117 }
10118 CONSTEXPR uint32_t get_value() const
10119 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010120 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010121 return value;
10122 }
10123 uint32_t get_value() const volatile
10124 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010125 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010126 return value;
10127 }
10128 CONSTEXPR current_cmd_r &set_value(uint32_t value)
10129 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010130 word0 = value;
10131 return *this;
10132 }
10133 volatile current_cmd_r &set_value(uint32_t value) volatile
10134 {
10135 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010136 return *this;
10137 }
10138#endif
10139};
10140
10141// pmevcntr_r - Performance monitor event 0 count register
10142struct pmevcntr_r
10143{
10144#ifndef __cplusplus
10145 union
10146 {
10147 struct
10148 {
10149 uint32_t count : 32; // Count word
10150 };
10151 uint32_t word;
10152 };
10153#else
10154 private:
10155 uint32_t word0;
10156
10157 public:
10158 CONSTEXPR pmevcntr_r() : word0(0) {}
10159 CONSTEXPR pmevcntr_r(uint32_t init) : word0(init) {}
10160 CONSTEXPR void operator=(uint32_t value)
10161 {
10162 word0 = value;
10163 }
10164 void operator=(uint32_t value) volatile
10165 {
10166 word0 = value;
10167 }
10168 CONSTEXPR operator uint32_t()
10169 {
10170 return word0;
10171 }
10172 operator uint32_t() volatile
10173 {
10174 return word0;
10175 }
10176 pmevcntr_r copy() volatile
10177 {
10178 return *this;
10179 }
10180 CONSTEXPR uint32_t get_count() const
10181 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010182 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010183 return value;
10184 }
10185 uint32_t get_count() const volatile
10186 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010187 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010188 return value;
10189 }
10190 CONSTEXPR pmevcntr_r &set_count(uint32_t value)
10191 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010192 word0 = value;
10193 return *this;
10194 }
10195 volatile pmevcntr_r &set_count(uint32_t value) volatile
10196 {
10197 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010198 return *this;
10199 }
10200#endif
10201};
10202
10203// pmevtyper_r - Performance monitor event type register 0
10204struct pmevtyper_r
10205{
10206#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010207 union
10208 {
10209 struct
10210 {
10211 uint32_t EV_TYPE : 10; // Event Type
10212 uint32_t reserved0 : 22;
10213 };
10214 uint32_t word;
10215 };
Jonny Svärd136810f2021-10-13 16:04:26 +020010216#else
10217 private:
10218 uint32_t word0;
10219
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010220 public:
Jonny Svärd136810f2021-10-13 16:04:26 +020010221 CONSTEXPR pmevtyper_r() : word0(0) {}
10222 CONSTEXPR pmevtyper_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010223 CONSTEXPR void operator=(uint32_t value)
10224 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010225 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010226 }
10227 void operator=(uint32_t value) volatile
10228 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010229 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010230 }
10231 CONSTEXPR operator uint32_t()
10232 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010233 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010234 }
10235 operator uint32_t() volatile
10236 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010237 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010238 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010239 pmevtyper_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010240 {
10241 return *this;
10242 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010243 CONSTEXPR NPU_NAMESPACE::pmu_event get_EV_TYPE() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010244 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010245 NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010246 return value;
10247 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010248 NPU_NAMESPACE::pmu_event get_EV_TYPE() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010249 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010250 NPU_NAMESPACE::pmu_event value = static_cast<NPU_NAMESPACE::pmu_event>(((1U << 10) - 1) & (word0 >> 0));
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010251 return value;
10252 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010253 CONSTEXPR pmevtyper_r &set_EV_TYPE(NPU_NAMESPACE::pmu_event value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010254 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010255 word0 = (((~((1U << 10) - 1)) << 0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010256 return *this;
10257 }
Jonny Svärd13cb0892021-11-16 18:43:04 +010010258 volatile pmevtyper_r &set_EV_TYPE(NPU_NAMESPACE::pmu_event value) volatile
10259 {
10260 word0 = (((~((1U << 10) - 1)) << 0) & word0) | ((((1U << 10) - 1) & static_cast<uint32_t>(value)) << 0);
10261 return *this;
10262 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010263#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010264};
10265
Jonny Svärd136810f2021-10-13 16:04:26 +020010266// shared_buffer_r - Shared buffer debug access. Only valid in STOPPED state
10267struct shared_buffer_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010268{
Jonny Svärd136810f2021-10-13 16:04:26 +020010269#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010270 union
10271 {
10272 struct
10273 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010274 uint32_t mem_word : 32; // Memory word
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010275 };
10276 uint32_t word;
10277 };
Jonny Svärd136810f2021-10-13 16:04:26 +020010278#else
10279 private:
10280 uint32_t word0;
10281
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010282 public:
Jonny Svärd136810f2021-10-13 16:04:26 +020010283 CONSTEXPR shared_buffer_r() : word0(0) {}
10284 CONSTEXPR shared_buffer_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010285 CONSTEXPR void operator=(uint32_t value)
10286 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010287 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010288 }
10289 void operator=(uint32_t value) volatile
10290 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010291 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010292 }
10293 CONSTEXPR operator uint32_t()
10294 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010295 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010296 }
10297 operator uint32_t() volatile
10298 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010299 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010300 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010301 shared_buffer_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010302 {
10303 return *this;
10304 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010305 CONSTEXPR uint32_t get_mem_word() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010306 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010307 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010308 return value;
10309 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010310 uint32_t get_mem_word() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010311 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010312 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010313 return value;
10314 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010315 CONSTEXPR shared_buffer_r &set_mem_word(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010316 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010317 word0 = value;
10318 return *this;
10319 }
10320 volatile shared_buffer_r &set_mem_word(uint32_t value) volatile
10321 {
10322 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010323 return *this;
10324 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010325#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010326};
10327
Jonny Svärd136810f2021-10-13 16:04:26 +020010328// ifm_pad_top_r - None
10329struct ifm_pad_top_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010330{
Jonny Svärd136810f2021-10-13 16:04:26 +020010331#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010332 union
10333 {
10334 struct
10335 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010336 uint32_t value : 32; // 32-bit register value
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010337 };
10338 uint32_t word;
10339 };
Jonny Svärd136810f2021-10-13 16:04:26 +020010340#else
10341 private:
10342 uint32_t word0;
10343
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010344 public:
Jonny Svärd136810f2021-10-13 16:04:26 +020010345 CONSTEXPR ifm_pad_top_r() : word0(0) {}
10346 CONSTEXPR ifm_pad_top_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010347 CONSTEXPR void operator=(uint32_t value)
10348 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010349 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010350 }
10351 void operator=(uint32_t value) volatile
10352 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010353 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010354 }
10355 CONSTEXPR operator uint32_t()
10356 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010357 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010358 }
10359 operator uint32_t() volatile
10360 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010361 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010362 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010363 ifm_pad_top_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010364 {
10365 return *this;
10366 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010367 CONSTEXPR uint32_t get_value() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010368 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010369 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010370 return value;
10371 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010372 uint32_t get_value() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010373 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010374 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010375 return value;
10376 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010377 CONSTEXPR ifm_pad_top_r &set_value(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010378 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010379 word0 = value;
10380 return *this;
10381 }
10382 volatile ifm_pad_top_r &set_value(uint32_t value) volatile
10383 {
10384 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010385 return *this;
10386 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010387#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010388};
10389
Jonny Svärd136810f2021-10-13 16:04:26 +020010390// ifm_pad_left_r - None
10391struct ifm_pad_left_r
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010392{
Jonny Svärd136810f2021-10-13 16:04:26 +020010393#ifndef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010394 union
10395 {
10396 struct
10397 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010398 uint32_t value : 32; // 32-bit register value
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010399 };
10400 uint32_t word;
10401 };
Jonny Svärd136810f2021-10-13 16:04:26 +020010402#else
10403 private:
10404 uint32_t word0;
10405
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010406 public:
Jonny Svärd136810f2021-10-13 16:04:26 +020010407 CONSTEXPR ifm_pad_left_r() : word0(0) {}
10408 CONSTEXPR ifm_pad_left_r(uint32_t init) : word0(init) {}
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010409 CONSTEXPR void operator=(uint32_t value)
10410 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010411 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010412 }
10413 void operator=(uint32_t value) volatile
10414 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010415 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010416 }
10417 CONSTEXPR operator uint32_t()
10418 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010419 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010420 }
10421 operator uint32_t() volatile
10422 {
Jonny Svärd136810f2021-10-13 16:04:26 +020010423 return word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010424 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010425 ifm_pad_left_r copy() volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010426 {
10427 return *this;
10428 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010429 CONSTEXPR uint32_t get_value() const
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010430 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010431 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010432 return value;
10433 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010434 uint32_t get_value() const volatile
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010435 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010436 uint32_t value = word0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010437 return value;
10438 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010439 CONSTEXPR ifm_pad_left_r &set_value(uint32_t value)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010440 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010441 word0 = value;
10442 return *this;
10443 }
10444 volatile ifm_pad_left_r &set_value(uint32_t value) volatile
10445 {
10446 word0 = value;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020010447 return *this;
10448 }
Jonny Svärd136810f2021-10-13 16:04:26 +020010449#endif
10450};
10451
10452// ifm_pad_right_r - None
10453struct ifm_pad_right_r
10454{
10455#ifndef __cplusplus
10456 union
10457 {
10458 struct
10459 {
10460 uint32_t value : 32; // 32-bit register value
10461 };
10462 uint32_t word;
10463 };
10464#else
10465 private:
10466 uint32_t word0;
10467
10468 public:
10469 CONSTEXPR ifm_pad_right_r() : word0(0) {}
10470 CONSTEXPR ifm_pad_right_r(uint32_t init) : word0(init) {}
10471 CONSTEXPR void operator=(uint32_t value)
10472 {
10473 word0 = value;
10474 }
10475 void operator=(uint32_t value) volatile
10476 {
10477 word0 = value;
10478 }
10479 CONSTEXPR operator uint32_t()
10480 {
10481 return word0;
10482 }
10483 operator uint32_t() volatile
10484 {
10485 return word0;
10486 }
10487 ifm_pad_right_r copy() volatile
10488 {
10489 return *this;
10490 }
10491 CONSTEXPR uint32_t get_value() const
10492 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010493 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010494 return value;
10495 }
10496 uint32_t get_value() const volatile
10497 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010498 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010499 return value;
10500 }
10501 CONSTEXPR ifm_pad_right_r &set_value(uint32_t value)
10502 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010503 word0 = value;
10504 return *this;
10505 }
10506 volatile ifm_pad_right_r &set_value(uint32_t value) volatile
10507 {
10508 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010509 return *this;
10510 }
10511#endif
10512};
10513
10514// ifm_pad_bottom_r - None
10515struct ifm_pad_bottom_r
10516{
10517#ifndef __cplusplus
10518 union
10519 {
10520 struct
10521 {
10522 uint32_t value : 32; // 32-bit register value
10523 };
10524 uint32_t word;
10525 };
10526#else
10527 private:
10528 uint32_t word0;
10529
10530 public:
10531 CONSTEXPR ifm_pad_bottom_r() : word0(0) {}
10532 CONSTEXPR ifm_pad_bottom_r(uint32_t init) : word0(init) {}
10533 CONSTEXPR void operator=(uint32_t value)
10534 {
10535 word0 = value;
10536 }
10537 void operator=(uint32_t value) volatile
10538 {
10539 word0 = value;
10540 }
10541 CONSTEXPR operator uint32_t()
10542 {
10543 return word0;
10544 }
10545 operator uint32_t() volatile
10546 {
10547 return word0;
10548 }
10549 ifm_pad_bottom_r copy() volatile
10550 {
10551 return *this;
10552 }
10553 CONSTEXPR uint32_t get_value() const
10554 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010555 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010556 return value;
10557 }
10558 uint32_t get_value() const volatile
10559 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010560 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010561 return value;
10562 }
10563 CONSTEXPR ifm_pad_bottom_r &set_value(uint32_t value)
10564 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010565 word0 = value;
10566 return *this;
10567 }
10568 volatile ifm_pad_bottom_r &set_value(uint32_t value) volatile
10569 {
10570 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010571 return *this;
10572 }
10573#endif
10574};
10575
10576// ifm_depth_m1_r - None
10577struct ifm_depth_m1_r
10578{
10579#ifndef __cplusplus
10580 union
10581 {
10582 struct
10583 {
10584 uint32_t value : 32; // 32-bit register value
10585 };
10586 uint32_t word;
10587 };
10588#else
10589 private:
10590 uint32_t word0;
10591
10592 public:
10593 CONSTEXPR ifm_depth_m1_r() : word0(0) {}
10594 CONSTEXPR ifm_depth_m1_r(uint32_t init) : word0(init) {}
10595 CONSTEXPR void operator=(uint32_t value)
10596 {
10597 word0 = value;
10598 }
10599 void operator=(uint32_t value) volatile
10600 {
10601 word0 = value;
10602 }
10603 CONSTEXPR operator uint32_t()
10604 {
10605 return word0;
10606 }
10607 operator uint32_t() volatile
10608 {
10609 return word0;
10610 }
10611 ifm_depth_m1_r copy() volatile
10612 {
10613 return *this;
10614 }
10615 CONSTEXPR uint32_t get_value() const
10616 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010617 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010618 return value;
10619 }
10620 uint32_t get_value() const volatile
10621 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010622 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010623 return value;
10624 }
10625 CONSTEXPR ifm_depth_m1_r &set_value(uint32_t value)
10626 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010627 word0 = value;
10628 return *this;
10629 }
10630 volatile ifm_depth_m1_r &set_value(uint32_t value) volatile
10631 {
10632 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010633 return *this;
10634 }
10635#endif
10636};
10637
10638// ifm_precision_r - None
10639struct ifm_precision_r
10640{
10641#ifndef __cplusplus
10642 union
10643 {
10644 struct
10645 {
10646 uint32_t value : 32; // 32-bit register value
10647 };
10648 uint32_t word;
10649 };
10650#else
10651 private:
10652 uint32_t word0;
10653
10654 public:
10655 CONSTEXPR ifm_precision_r() : word0(0) {}
10656 CONSTEXPR ifm_precision_r(uint32_t init) : word0(init) {}
10657 CONSTEXPR void operator=(uint32_t value)
10658 {
10659 word0 = value;
10660 }
10661 void operator=(uint32_t value) volatile
10662 {
10663 word0 = value;
10664 }
10665 CONSTEXPR operator uint32_t()
10666 {
10667 return word0;
10668 }
10669 operator uint32_t() volatile
10670 {
10671 return word0;
10672 }
10673 ifm_precision_r copy() volatile
10674 {
10675 return *this;
10676 }
10677 CONSTEXPR uint32_t get_value() const
10678 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010679 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010680 return value;
10681 }
10682 uint32_t get_value() const volatile
10683 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010684 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010685 return value;
10686 }
10687 CONSTEXPR ifm_precision_r &set_value(uint32_t value)
10688 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010689 word0 = value;
10690 return *this;
10691 }
10692 volatile ifm_precision_r &set_value(uint32_t value) volatile
10693 {
10694 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010695 return *this;
10696 }
10697#endif
10698};
10699
10700// ifm_upscale_r - None
10701struct ifm_upscale_r
10702{
10703#ifndef __cplusplus
10704 union
10705 {
10706 struct
10707 {
10708 uint32_t value : 32; // 32-bit register value
10709 };
10710 uint32_t word;
10711 };
10712#else
10713 private:
10714 uint32_t word0;
10715
10716 public:
10717 CONSTEXPR ifm_upscale_r() : word0(0) {}
10718 CONSTEXPR ifm_upscale_r(uint32_t init) : word0(init) {}
10719 CONSTEXPR void operator=(uint32_t value)
10720 {
10721 word0 = value;
10722 }
10723 void operator=(uint32_t value) volatile
10724 {
10725 word0 = value;
10726 }
10727 CONSTEXPR operator uint32_t()
10728 {
10729 return word0;
10730 }
10731 operator uint32_t() volatile
10732 {
10733 return word0;
10734 }
10735 ifm_upscale_r copy() volatile
10736 {
10737 return *this;
10738 }
10739 CONSTEXPR uint32_t get_value() const
10740 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010741 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010742 return value;
10743 }
10744 uint32_t get_value() const volatile
10745 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010746 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010747 return value;
10748 }
10749 CONSTEXPR ifm_upscale_r &set_value(uint32_t value)
10750 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010751 word0 = value;
10752 return *this;
10753 }
10754 volatile ifm_upscale_r &set_value(uint32_t value) volatile
10755 {
10756 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010757 return *this;
10758 }
10759#endif
10760};
10761
10762// ifm_zero_point_r - None
10763struct ifm_zero_point_r
10764{
10765#ifndef __cplusplus
10766 union
10767 {
10768 struct
10769 {
10770 uint32_t value : 32; // 32-bit register value
10771 };
10772 uint32_t word;
10773 };
10774#else
10775 private:
10776 uint32_t word0;
10777
10778 public:
10779 CONSTEXPR ifm_zero_point_r() : word0(0) {}
10780 CONSTEXPR ifm_zero_point_r(uint32_t init) : word0(init) {}
10781 CONSTEXPR void operator=(uint32_t value)
10782 {
10783 word0 = value;
10784 }
10785 void operator=(uint32_t value) volatile
10786 {
10787 word0 = value;
10788 }
10789 CONSTEXPR operator uint32_t()
10790 {
10791 return word0;
10792 }
10793 operator uint32_t() volatile
10794 {
10795 return word0;
10796 }
10797 ifm_zero_point_r copy() volatile
10798 {
10799 return *this;
10800 }
10801 CONSTEXPR uint32_t get_value() const
10802 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010803 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010804 return value;
10805 }
10806 uint32_t get_value() const volatile
10807 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010808 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010809 return value;
10810 }
10811 CONSTEXPR ifm_zero_point_r &set_value(uint32_t value)
10812 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010813 word0 = value;
10814 return *this;
10815 }
10816 volatile ifm_zero_point_r &set_value(uint32_t value) volatile
10817 {
10818 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010819 return *this;
10820 }
10821#endif
10822};
10823
10824// ifm_width0_m1_r - None
10825struct ifm_width0_m1_r
10826{
10827#ifndef __cplusplus
10828 union
10829 {
10830 struct
10831 {
10832 uint32_t value : 32; // 32-bit register value
10833 };
10834 uint32_t word;
10835 };
10836#else
10837 private:
10838 uint32_t word0;
10839
10840 public:
10841 CONSTEXPR ifm_width0_m1_r() : word0(0) {}
10842 CONSTEXPR ifm_width0_m1_r(uint32_t init) : word0(init) {}
10843 CONSTEXPR void operator=(uint32_t value)
10844 {
10845 word0 = value;
10846 }
10847 void operator=(uint32_t value) volatile
10848 {
10849 word0 = value;
10850 }
10851 CONSTEXPR operator uint32_t()
10852 {
10853 return word0;
10854 }
10855 operator uint32_t() volatile
10856 {
10857 return word0;
10858 }
10859 ifm_width0_m1_r copy() volatile
10860 {
10861 return *this;
10862 }
10863 CONSTEXPR uint32_t get_value() const
10864 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010865 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010866 return value;
10867 }
10868 uint32_t get_value() const volatile
10869 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010870 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010871 return value;
10872 }
10873 CONSTEXPR ifm_width0_m1_r &set_value(uint32_t value)
10874 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010875 word0 = value;
10876 return *this;
10877 }
10878 volatile ifm_width0_m1_r &set_value(uint32_t value) volatile
10879 {
10880 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010881 return *this;
10882 }
10883#endif
10884};
10885
10886// ifm_height0_m1_r - None
10887struct ifm_height0_m1_r
10888{
10889#ifndef __cplusplus
10890 union
10891 {
10892 struct
10893 {
10894 uint32_t value : 32; // 32-bit register value
10895 };
10896 uint32_t word;
10897 };
10898#else
10899 private:
10900 uint32_t word0;
10901
10902 public:
10903 CONSTEXPR ifm_height0_m1_r() : word0(0) {}
10904 CONSTEXPR ifm_height0_m1_r(uint32_t init) : word0(init) {}
10905 CONSTEXPR void operator=(uint32_t value)
10906 {
10907 word0 = value;
10908 }
10909 void operator=(uint32_t value) volatile
10910 {
10911 word0 = value;
10912 }
10913 CONSTEXPR operator uint32_t()
10914 {
10915 return word0;
10916 }
10917 operator uint32_t() volatile
10918 {
10919 return word0;
10920 }
10921 ifm_height0_m1_r copy() volatile
10922 {
10923 return *this;
10924 }
10925 CONSTEXPR uint32_t get_value() const
10926 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010927 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010928 return value;
10929 }
10930 uint32_t get_value() const volatile
10931 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010932 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010933 return value;
10934 }
10935 CONSTEXPR ifm_height0_m1_r &set_value(uint32_t value)
10936 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010937 word0 = value;
10938 return *this;
10939 }
10940 volatile ifm_height0_m1_r &set_value(uint32_t value) volatile
10941 {
10942 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020010943 return *this;
10944 }
10945#endif
10946};
10947
10948// ifm_height1_m1_r - None
10949struct ifm_height1_m1_r
10950{
10951#ifndef __cplusplus
10952 union
10953 {
10954 struct
10955 {
10956 uint32_t value : 32; // 32-bit register value
10957 };
10958 uint32_t word;
10959 };
10960#else
10961 private:
10962 uint32_t word0;
10963
10964 public:
10965 CONSTEXPR ifm_height1_m1_r() : word0(0) {}
10966 CONSTEXPR ifm_height1_m1_r(uint32_t init) : word0(init) {}
10967 CONSTEXPR void operator=(uint32_t value)
10968 {
10969 word0 = value;
10970 }
10971 void operator=(uint32_t value) volatile
10972 {
10973 word0 = value;
10974 }
10975 CONSTEXPR operator uint32_t()
10976 {
10977 return word0;
10978 }
10979 operator uint32_t() volatile
10980 {
10981 return word0;
10982 }
10983 ifm_height1_m1_r copy() volatile
10984 {
10985 return *this;
10986 }
10987 CONSTEXPR uint32_t get_value() const
10988 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010989 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010990 return value;
10991 }
10992 uint32_t get_value() const volatile
10993 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010994 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020010995 return value;
10996 }
10997 CONSTEXPR ifm_height1_m1_r &set_value(uint32_t value)
10998 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010010999 word0 = value;
11000 return *this;
11001 }
11002 volatile ifm_height1_m1_r &set_value(uint32_t value) volatile
11003 {
11004 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011005 return *this;
11006 }
11007#endif
11008};
11009
11010// ifm_ib_end_r - None
11011struct ifm_ib_end_r
11012{
11013#ifndef __cplusplus
11014 union
11015 {
11016 struct
11017 {
11018 uint32_t value : 32; // 32-bit register value
11019 };
11020 uint32_t word;
11021 };
11022#else
11023 private:
11024 uint32_t word0;
11025
11026 public:
11027 CONSTEXPR ifm_ib_end_r() : word0(0) {}
11028 CONSTEXPR ifm_ib_end_r(uint32_t init) : word0(init) {}
11029 CONSTEXPR void operator=(uint32_t value)
11030 {
11031 word0 = value;
11032 }
11033 void operator=(uint32_t value) volatile
11034 {
11035 word0 = value;
11036 }
11037 CONSTEXPR operator uint32_t()
11038 {
11039 return word0;
11040 }
11041 operator uint32_t() volatile
11042 {
11043 return word0;
11044 }
11045 ifm_ib_end_r copy() volatile
11046 {
11047 return *this;
11048 }
11049 CONSTEXPR uint32_t get_value() const
11050 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011051 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011052 return value;
11053 }
11054 uint32_t get_value() const volatile
11055 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011056 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011057 return value;
11058 }
11059 CONSTEXPR ifm_ib_end_r &set_value(uint32_t value)
11060 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011061 word0 = value;
11062 return *this;
11063 }
11064 volatile ifm_ib_end_r &set_value(uint32_t value) volatile
11065 {
11066 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011067 return *this;
11068 }
11069#endif
11070};
11071
11072// ifm_region_r - None
11073struct ifm_region_r
11074{
11075#ifndef __cplusplus
11076 union
11077 {
11078 struct
11079 {
11080 uint32_t value : 32; // 32-bit register value
11081 };
11082 uint32_t word;
11083 };
11084#else
11085 private:
11086 uint32_t word0;
11087
11088 public:
11089 CONSTEXPR ifm_region_r() : word0(0) {}
11090 CONSTEXPR ifm_region_r(uint32_t init) : word0(init) {}
11091 CONSTEXPR void operator=(uint32_t value)
11092 {
11093 word0 = value;
11094 }
11095 void operator=(uint32_t value) volatile
11096 {
11097 word0 = value;
11098 }
11099 CONSTEXPR operator uint32_t()
11100 {
11101 return word0;
11102 }
11103 operator uint32_t() volatile
11104 {
11105 return word0;
11106 }
11107 ifm_region_r copy() volatile
11108 {
11109 return *this;
11110 }
11111 CONSTEXPR uint32_t get_value() const
11112 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011113 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011114 return value;
11115 }
11116 uint32_t get_value() const volatile
11117 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011118 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011119 return value;
11120 }
11121 CONSTEXPR ifm_region_r &set_value(uint32_t value)
11122 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011123 word0 = value;
11124 return *this;
11125 }
11126 volatile ifm_region_r &set_value(uint32_t value) volatile
11127 {
11128 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011129 return *this;
11130 }
11131#endif
11132};
11133
11134// ofm_width_m1_r - None
11135struct ofm_width_m1_r
11136{
11137#ifndef __cplusplus
11138 union
11139 {
11140 struct
11141 {
11142 uint32_t value : 32; // 32-bit register value
11143 };
11144 uint32_t word;
11145 };
11146#else
11147 private:
11148 uint32_t word0;
11149
11150 public:
11151 CONSTEXPR ofm_width_m1_r() : word0(0) {}
11152 CONSTEXPR ofm_width_m1_r(uint32_t init) : word0(init) {}
11153 CONSTEXPR void operator=(uint32_t value)
11154 {
11155 word0 = value;
11156 }
11157 void operator=(uint32_t value) volatile
11158 {
11159 word0 = value;
11160 }
11161 CONSTEXPR operator uint32_t()
11162 {
11163 return word0;
11164 }
11165 operator uint32_t() volatile
11166 {
11167 return word0;
11168 }
11169 ofm_width_m1_r copy() volatile
11170 {
11171 return *this;
11172 }
11173 CONSTEXPR uint32_t get_value() const
11174 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011175 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011176 return value;
11177 }
11178 uint32_t get_value() const volatile
11179 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011180 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011181 return value;
11182 }
11183 CONSTEXPR ofm_width_m1_r &set_value(uint32_t value)
11184 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011185 word0 = value;
11186 return *this;
11187 }
11188 volatile ofm_width_m1_r &set_value(uint32_t value) volatile
11189 {
11190 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011191 return *this;
11192 }
11193#endif
11194};
11195
11196// ofm_height_m1_r - None
11197struct ofm_height_m1_r
11198{
11199#ifndef __cplusplus
11200 union
11201 {
11202 struct
11203 {
11204 uint32_t value : 32; // 32-bit register value
11205 };
11206 uint32_t word;
11207 };
11208#else
11209 private:
11210 uint32_t word0;
11211
11212 public:
11213 CONSTEXPR ofm_height_m1_r() : word0(0) {}
11214 CONSTEXPR ofm_height_m1_r(uint32_t init) : word0(init) {}
11215 CONSTEXPR void operator=(uint32_t value)
11216 {
11217 word0 = value;
11218 }
11219 void operator=(uint32_t value) volatile
11220 {
11221 word0 = value;
11222 }
11223 CONSTEXPR operator uint32_t()
11224 {
11225 return word0;
11226 }
11227 operator uint32_t() volatile
11228 {
11229 return word0;
11230 }
11231 ofm_height_m1_r copy() volatile
11232 {
11233 return *this;
11234 }
11235 CONSTEXPR uint32_t get_value() const
11236 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011237 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011238 return value;
11239 }
11240 uint32_t get_value() const volatile
11241 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011242 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011243 return value;
11244 }
11245 CONSTEXPR ofm_height_m1_r &set_value(uint32_t value)
11246 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011247 word0 = value;
11248 return *this;
11249 }
11250 volatile ofm_height_m1_r &set_value(uint32_t value) volatile
11251 {
11252 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011253 return *this;
11254 }
11255#endif
11256};
11257
11258// ofm_depth_m1_r - None
11259struct ofm_depth_m1_r
11260{
11261#ifndef __cplusplus
11262 union
11263 {
11264 struct
11265 {
11266 uint32_t value : 32; // 32-bit register value
11267 };
11268 uint32_t word;
11269 };
11270#else
11271 private:
11272 uint32_t word0;
11273
11274 public:
11275 CONSTEXPR ofm_depth_m1_r() : word0(0) {}
11276 CONSTEXPR ofm_depth_m1_r(uint32_t init) : word0(init) {}
11277 CONSTEXPR void operator=(uint32_t value)
11278 {
11279 word0 = value;
11280 }
11281 void operator=(uint32_t value) volatile
11282 {
11283 word0 = value;
11284 }
11285 CONSTEXPR operator uint32_t()
11286 {
11287 return word0;
11288 }
11289 operator uint32_t() volatile
11290 {
11291 return word0;
11292 }
11293 ofm_depth_m1_r copy() volatile
11294 {
11295 return *this;
11296 }
11297 CONSTEXPR uint32_t get_value() const
11298 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011299 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011300 return value;
11301 }
11302 uint32_t get_value() const volatile
11303 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011304 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011305 return value;
11306 }
11307 CONSTEXPR ofm_depth_m1_r &set_value(uint32_t value)
11308 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011309 word0 = value;
11310 return *this;
11311 }
11312 volatile ofm_depth_m1_r &set_value(uint32_t value) volatile
11313 {
11314 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011315 return *this;
11316 }
11317#endif
11318};
11319
11320// ofm_precision_r - None
11321struct ofm_precision_r
11322{
11323#ifndef __cplusplus
11324 union
11325 {
11326 struct
11327 {
11328 uint32_t value : 32; // 32-bit register value
11329 };
11330 uint32_t word;
11331 };
11332#else
11333 private:
11334 uint32_t word0;
11335
11336 public:
11337 CONSTEXPR ofm_precision_r() : word0(0) {}
11338 CONSTEXPR ofm_precision_r(uint32_t init) : word0(init) {}
11339 CONSTEXPR void operator=(uint32_t value)
11340 {
11341 word0 = value;
11342 }
11343 void operator=(uint32_t value) volatile
11344 {
11345 word0 = value;
11346 }
11347 CONSTEXPR operator uint32_t()
11348 {
11349 return word0;
11350 }
11351 operator uint32_t() volatile
11352 {
11353 return word0;
11354 }
11355 ofm_precision_r copy() volatile
11356 {
11357 return *this;
11358 }
11359 CONSTEXPR uint32_t get_value() const
11360 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011361 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011362 return value;
11363 }
11364 uint32_t get_value() const volatile
11365 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011366 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011367 return value;
11368 }
11369 CONSTEXPR ofm_precision_r &set_value(uint32_t value)
11370 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011371 word0 = value;
11372 return *this;
11373 }
11374 volatile ofm_precision_r &set_value(uint32_t value) volatile
11375 {
11376 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011377 return *this;
11378 }
11379#endif
11380};
11381
11382// ofm_blk_width_m1_r - None
11383struct ofm_blk_width_m1_r
11384{
11385#ifndef __cplusplus
11386 union
11387 {
11388 struct
11389 {
11390 uint32_t value : 32; // 32-bit register value
11391 };
11392 uint32_t word;
11393 };
11394#else
11395 private:
11396 uint32_t word0;
11397
11398 public:
11399 CONSTEXPR ofm_blk_width_m1_r() : word0(0) {}
11400 CONSTEXPR ofm_blk_width_m1_r(uint32_t init) : word0(init) {}
11401 CONSTEXPR void operator=(uint32_t value)
11402 {
11403 word0 = value;
11404 }
11405 void operator=(uint32_t value) volatile
11406 {
11407 word0 = value;
11408 }
11409 CONSTEXPR operator uint32_t()
11410 {
11411 return word0;
11412 }
11413 operator uint32_t() volatile
11414 {
11415 return word0;
11416 }
11417 ofm_blk_width_m1_r copy() volatile
11418 {
11419 return *this;
11420 }
11421 CONSTEXPR uint32_t get_value() const
11422 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011423 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011424 return value;
11425 }
11426 uint32_t get_value() const volatile
11427 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011428 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011429 return value;
11430 }
11431 CONSTEXPR ofm_blk_width_m1_r &set_value(uint32_t value)
11432 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011433 word0 = value;
11434 return *this;
11435 }
11436 volatile ofm_blk_width_m1_r &set_value(uint32_t value) volatile
11437 {
11438 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011439 return *this;
11440 }
11441#endif
11442};
11443
11444// ofm_blk_height_m1_r - None
11445struct ofm_blk_height_m1_r
11446{
11447#ifndef __cplusplus
11448 union
11449 {
11450 struct
11451 {
11452 uint32_t value : 32; // 32-bit register value
11453 };
11454 uint32_t word;
11455 };
11456#else
11457 private:
11458 uint32_t word0;
11459
11460 public:
11461 CONSTEXPR ofm_blk_height_m1_r() : word0(0) {}
11462 CONSTEXPR ofm_blk_height_m1_r(uint32_t init) : word0(init) {}
11463 CONSTEXPR void operator=(uint32_t value)
11464 {
11465 word0 = value;
11466 }
11467 void operator=(uint32_t value) volatile
11468 {
11469 word0 = value;
11470 }
11471 CONSTEXPR operator uint32_t()
11472 {
11473 return word0;
11474 }
11475 operator uint32_t() volatile
11476 {
11477 return word0;
11478 }
11479 ofm_blk_height_m1_r copy() volatile
11480 {
11481 return *this;
11482 }
11483 CONSTEXPR uint32_t get_value() const
11484 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011485 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011486 return value;
11487 }
11488 uint32_t get_value() const volatile
11489 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011490 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011491 return value;
11492 }
11493 CONSTEXPR ofm_blk_height_m1_r &set_value(uint32_t value)
11494 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011495 word0 = value;
11496 return *this;
11497 }
11498 volatile ofm_blk_height_m1_r &set_value(uint32_t value) volatile
11499 {
11500 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011501 return *this;
11502 }
11503#endif
11504};
11505
11506// ofm_blk_depth_m1_r - None
11507struct ofm_blk_depth_m1_r
11508{
11509#ifndef __cplusplus
11510 union
11511 {
11512 struct
11513 {
11514 uint32_t value : 32; // 32-bit register value
11515 };
11516 uint32_t word;
11517 };
11518#else
11519 private:
11520 uint32_t word0;
11521
11522 public:
11523 CONSTEXPR ofm_blk_depth_m1_r() : word0(0) {}
11524 CONSTEXPR ofm_blk_depth_m1_r(uint32_t init) : word0(init) {}
11525 CONSTEXPR void operator=(uint32_t value)
11526 {
11527 word0 = value;
11528 }
11529 void operator=(uint32_t value) volatile
11530 {
11531 word0 = value;
11532 }
11533 CONSTEXPR operator uint32_t()
11534 {
11535 return word0;
11536 }
11537 operator uint32_t() volatile
11538 {
11539 return word0;
11540 }
11541 ofm_blk_depth_m1_r copy() volatile
11542 {
11543 return *this;
11544 }
11545 CONSTEXPR uint32_t get_value() const
11546 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011547 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011548 return value;
11549 }
11550 uint32_t get_value() const volatile
11551 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011552 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011553 return value;
11554 }
11555 CONSTEXPR ofm_blk_depth_m1_r &set_value(uint32_t value)
11556 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011557 word0 = value;
11558 return *this;
11559 }
11560 volatile ofm_blk_depth_m1_r &set_value(uint32_t value) volatile
11561 {
11562 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011563 return *this;
11564 }
11565#endif
11566};
11567
11568// ofm_zero_point_r - None
11569struct ofm_zero_point_r
11570{
11571#ifndef __cplusplus
11572 union
11573 {
11574 struct
11575 {
11576 uint32_t value : 32; // 32-bit register value
11577 };
11578 uint32_t word;
11579 };
11580#else
11581 private:
11582 uint32_t word0;
11583
11584 public:
11585 CONSTEXPR ofm_zero_point_r() : word0(0) {}
11586 CONSTEXPR ofm_zero_point_r(uint32_t init) : word0(init) {}
11587 CONSTEXPR void operator=(uint32_t value)
11588 {
11589 word0 = value;
11590 }
11591 void operator=(uint32_t value) volatile
11592 {
11593 word0 = value;
11594 }
11595 CONSTEXPR operator uint32_t()
11596 {
11597 return word0;
11598 }
11599 operator uint32_t() volatile
11600 {
11601 return word0;
11602 }
11603 ofm_zero_point_r copy() volatile
11604 {
11605 return *this;
11606 }
11607 CONSTEXPR uint32_t get_value() const
11608 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011609 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011610 return value;
11611 }
11612 uint32_t get_value() const volatile
11613 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011614 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011615 return value;
11616 }
11617 CONSTEXPR ofm_zero_point_r &set_value(uint32_t value)
11618 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011619 word0 = value;
11620 return *this;
11621 }
11622 volatile ofm_zero_point_r &set_value(uint32_t value) volatile
11623 {
11624 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011625 return *this;
11626 }
11627#endif
11628};
11629
11630// ofm_width0_m1_r - None
11631struct ofm_width0_m1_r
11632{
11633#ifndef __cplusplus
11634 union
11635 {
11636 struct
11637 {
11638 uint32_t value : 32; // 32-bit register value
11639 };
11640 uint32_t word;
11641 };
11642#else
11643 private:
11644 uint32_t word0;
11645
11646 public:
11647 CONSTEXPR ofm_width0_m1_r() : word0(0) {}
11648 CONSTEXPR ofm_width0_m1_r(uint32_t init) : word0(init) {}
11649 CONSTEXPR void operator=(uint32_t value)
11650 {
11651 word0 = value;
11652 }
11653 void operator=(uint32_t value) volatile
11654 {
11655 word0 = value;
11656 }
11657 CONSTEXPR operator uint32_t()
11658 {
11659 return word0;
11660 }
11661 operator uint32_t() volatile
11662 {
11663 return word0;
11664 }
11665 ofm_width0_m1_r copy() volatile
11666 {
11667 return *this;
11668 }
11669 CONSTEXPR uint32_t get_value() const
11670 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011671 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011672 return value;
11673 }
11674 uint32_t get_value() const volatile
11675 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011676 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011677 return value;
11678 }
11679 CONSTEXPR ofm_width0_m1_r &set_value(uint32_t value)
11680 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011681 word0 = value;
11682 return *this;
11683 }
11684 volatile ofm_width0_m1_r &set_value(uint32_t value) volatile
11685 {
11686 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011687 return *this;
11688 }
11689#endif
11690};
11691
11692// ofm_height0_m1_r - None
11693struct ofm_height0_m1_r
11694{
11695#ifndef __cplusplus
11696 union
11697 {
11698 struct
11699 {
11700 uint32_t value : 32; // 32-bit register value
11701 };
11702 uint32_t word;
11703 };
11704#else
11705 private:
11706 uint32_t word0;
11707
11708 public:
11709 CONSTEXPR ofm_height0_m1_r() : word0(0) {}
11710 CONSTEXPR ofm_height0_m1_r(uint32_t init) : word0(init) {}
11711 CONSTEXPR void operator=(uint32_t value)
11712 {
11713 word0 = value;
11714 }
11715 void operator=(uint32_t value) volatile
11716 {
11717 word0 = value;
11718 }
11719 CONSTEXPR operator uint32_t()
11720 {
11721 return word0;
11722 }
11723 operator uint32_t() volatile
11724 {
11725 return word0;
11726 }
11727 ofm_height0_m1_r copy() volatile
11728 {
11729 return *this;
11730 }
11731 CONSTEXPR uint32_t get_value() const
11732 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011733 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011734 return value;
11735 }
11736 uint32_t get_value() const volatile
11737 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011738 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011739 return value;
11740 }
11741 CONSTEXPR ofm_height0_m1_r &set_value(uint32_t value)
11742 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011743 word0 = value;
11744 return *this;
11745 }
11746 volatile ofm_height0_m1_r &set_value(uint32_t value) volatile
11747 {
11748 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011749 return *this;
11750 }
11751#endif
11752};
11753
11754// ofm_height1_m1_r - None
11755struct ofm_height1_m1_r
11756{
11757#ifndef __cplusplus
11758 union
11759 {
11760 struct
11761 {
11762 uint32_t value : 32; // 32-bit register value
11763 };
11764 uint32_t word;
11765 };
11766#else
11767 private:
11768 uint32_t word0;
11769
11770 public:
11771 CONSTEXPR ofm_height1_m1_r() : word0(0) {}
11772 CONSTEXPR ofm_height1_m1_r(uint32_t init) : word0(init) {}
11773 CONSTEXPR void operator=(uint32_t value)
11774 {
11775 word0 = value;
11776 }
11777 void operator=(uint32_t value) volatile
11778 {
11779 word0 = value;
11780 }
11781 CONSTEXPR operator uint32_t()
11782 {
11783 return word0;
11784 }
11785 operator uint32_t() volatile
11786 {
11787 return word0;
11788 }
11789 ofm_height1_m1_r copy() volatile
11790 {
11791 return *this;
11792 }
11793 CONSTEXPR uint32_t get_value() const
11794 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011795 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011796 return value;
11797 }
11798 uint32_t get_value() const volatile
11799 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011800 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011801 return value;
11802 }
11803 CONSTEXPR ofm_height1_m1_r &set_value(uint32_t value)
11804 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011805 word0 = value;
11806 return *this;
11807 }
11808 volatile ofm_height1_m1_r &set_value(uint32_t value) volatile
11809 {
11810 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011811 return *this;
11812 }
11813#endif
11814};
11815
11816// ofm_region_r - None
11817struct ofm_region_r
11818{
11819#ifndef __cplusplus
11820 union
11821 {
11822 struct
11823 {
11824 uint32_t value : 32; // 32-bit register value
11825 };
11826 uint32_t word;
11827 };
11828#else
11829 private:
11830 uint32_t word0;
11831
11832 public:
11833 CONSTEXPR ofm_region_r() : word0(0) {}
11834 CONSTEXPR ofm_region_r(uint32_t init) : word0(init) {}
11835 CONSTEXPR void operator=(uint32_t value)
11836 {
11837 word0 = value;
11838 }
11839 void operator=(uint32_t value) volatile
11840 {
11841 word0 = value;
11842 }
11843 CONSTEXPR operator uint32_t()
11844 {
11845 return word0;
11846 }
11847 operator uint32_t() volatile
11848 {
11849 return word0;
11850 }
11851 ofm_region_r copy() volatile
11852 {
11853 return *this;
11854 }
11855 CONSTEXPR uint32_t get_value() const
11856 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011857 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011858 return value;
11859 }
11860 uint32_t get_value() const volatile
11861 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011862 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011863 return value;
11864 }
11865 CONSTEXPR ofm_region_r &set_value(uint32_t value)
11866 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011867 word0 = value;
11868 return *this;
11869 }
11870 volatile ofm_region_r &set_value(uint32_t value) volatile
11871 {
11872 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011873 return *this;
11874 }
11875#endif
11876};
11877
11878// kernel_width_m1_r - None
11879struct kernel_width_m1_r
11880{
11881#ifndef __cplusplus
11882 union
11883 {
11884 struct
11885 {
11886 uint32_t value : 32; // 32-bit register value
11887 };
11888 uint32_t word;
11889 };
11890#else
11891 private:
11892 uint32_t word0;
11893
11894 public:
11895 CONSTEXPR kernel_width_m1_r() : word0(0) {}
11896 CONSTEXPR kernel_width_m1_r(uint32_t init) : word0(init) {}
11897 CONSTEXPR void operator=(uint32_t value)
11898 {
11899 word0 = value;
11900 }
11901 void operator=(uint32_t value) volatile
11902 {
11903 word0 = value;
11904 }
11905 CONSTEXPR operator uint32_t()
11906 {
11907 return word0;
11908 }
11909 operator uint32_t() volatile
11910 {
11911 return word0;
11912 }
11913 kernel_width_m1_r copy() volatile
11914 {
11915 return *this;
11916 }
11917 CONSTEXPR uint32_t get_value() const
11918 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011919 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011920 return value;
11921 }
11922 uint32_t get_value() const volatile
11923 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011924 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011925 return value;
11926 }
11927 CONSTEXPR kernel_width_m1_r &set_value(uint32_t value)
11928 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011929 word0 = value;
11930 return *this;
11931 }
11932 volatile kernel_width_m1_r &set_value(uint32_t value) volatile
11933 {
11934 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011935 return *this;
11936 }
11937#endif
11938};
11939
11940// kernel_height_m1_r - None
11941struct kernel_height_m1_r
11942{
11943#ifndef __cplusplus
11944 union
11945 {
11946 struct
11947 {
11948 uint32_t value : 32; // 32-bit register value
11949 };
11950 uint32_t word;
11951 };
11952#else
11953 private:
11954 uint32_t word0;
11955
11956 public:
11957 CONSTEXPR kernel_height_m1_r() : word0(0) {}
11958 CONSTEXPR kernel_height_m1_r(uint32_t init) : word0(init) {}
11959 CONSTEXPR void operator=(uint32_t value)
11960 {
11961 word0 = value;
11962 }
11963 void operator=(uint32_t value) volatile
11964 {
11965 word0 = value;
11966 }
11967 CONSTEXPR operator uint32_t()
11968 {
11969 return word0;
11970 }
11971 operator uint32_t() volatile
11972 {
11973 return word0;
11974 }
11975 kernel_height_m1_r copy() volatile
11976 {
11977 return *this;
11978 }
11979 CONSTEXPR uint32_t get_value() const
11980 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011981 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011982 return value;
11983 }
11984 uint32_t get_value() const volatile
11985 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011986 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020011987 return value;
11988 }
11989 CONSTEXPR kernel_height_m1_r &set_value(uint32_t value)
11990 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010011991 word0 = value;
11992 return *this;
11993 }
11994 volatile kernel_height_m1_r &set_value(uint32_t value) volatile
11995 {
11996 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020011997 return *this;
11998 }
11999#endif
12000};
12001
12002// kernel_stride_r - None
12003struct kernel_stride_r
12004{
12005#ifndef __cplusplus
12006 union
12007 {
12008 struct
12009 {
12010 uint32_t value : 32; // 32-bit register value
12011 };
12012 uint32_t word;
12013 };
12014#else
12015 private:
12016 uint32_t word0;
12017
12018 public:
12019 CONSTEXPR kernel_stride_r() : word0(0) {}
12020 CONSTEXPR kernel_stride_r(uint32_t init) : word0(init) {}
12021 CONSTEXPR void operator=(uint32_t value)
12022 {
12023 word0 = value;
12024 }
12025 void operator=(uint32_t value) volatile
12026 {
12027 word0 = value;
12028 }
12029 CONSTEXPR operator uint32_t()
12030 {
12031 return word0;
12032 }
12033 operator uint32_t() volatile
12034 {
12035 return word0;
12036 }
12037 kernel_stride_r copy() volatile
12038 {
12039 return *this;
12040 }
12041 CONSTEXPR uint32_t get_value() const
12042 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012043 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012044 return value;
12045 }
12046 uint32_t get_value() const volatile
12047 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012048 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012049 return value;
12050 }
12051 CONSTEXPR kernel_stride_r &set_value(uint32_t value)
12052 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012053 word0 = value;
12054 return *this;
12055 }
12056 volatile kernel_stride_r &set_value(uint32_t value) volatile
12057 {
12058 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012059 return *this;
12060 }
12061#endif
12062};
12063
12064// acc_format_r - None
12065struct acc_format_r
12066{
12067#ifndef __cplusplus
12068 union
12069 {
12070 struct
12071 {
12072 uint32_t value : 32; // 32-bit register value
12073 };
12074 uint32_t word;
12075 };
12076#else
12077 private:
12078 uint32_t word0;
12079
12080 public:
12081 CONSTEXPR acc_format_r() : word0(0) {}
12082 CONSTEXPR acc_format_r(uint32_t init) : word0(init) {}
12083 CONSTEXPR void operator=(uint32_t value)
12084 {
12085 word0 = value;
12086 }
12087 void operator=(uint32_t value) volatile
12088 {
12089 word0 = value;
12090 }
12091 CONSTEXPR operator uint32_t()
12092 {
12093 return word0;
12094 }
12095 operator uint32_t() volatile
12096 {
12097 return word0;
12098 }
12099 acc_format_r copy() volatile
12100 {
12101 return *this;
12102 }
12103 CONSTEXPR uint32_t get_value() const
12104 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012105 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012106 return value;
12107 }
12108 uint32_t get_value() const volatile
12109 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012110 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012111 return value;
12112 }
12113 CONSTEXPR acc_format_r &set_value(uint32_t value)
12114 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012115 word0 = value;
12116 return *this;
12117 }
12118 volatile acc_format_r &set_value(uint32_t value) volatile
12119 {
12120 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012121 return *this;
12122 }
12123#endif
12124};
12125
12126// activation_r - None
12127struct activation_r
12128{
12129#ifndef __cplusplus
12130 union
12131 {
12132 struct
12133 {
12134 uint32_t value : 32; // 32-bit register value
12135 };
12136 uint32_t word;
12137 };
12138#else
12139 private:
12140 uint32_t word0;
12141
12142 public:
12143 CONSTEXPR activation_r() : word0(0) {}
12144 CONSTEXPR activation_r(uint32_t init) : word0(init) {}
12145 CONSTEXPR void operator=(uint32_t value)
12146 {
12147 word0 = value;
12148 }
12149 void operator=(uint32_t value) volatile
12150 {
12151 word0 = value;
12152 }
12153 CONSTEXPR operator uint32_t()
12154 {
12155 return word0;
12156 }
12157 operator uint32_t() volatile
12158 {
12159 return word0;
12160 }
12161 activation_r copy() volatile
12162 {
12163 return *this;
12164 }
12165 CONSTEXPR uint32_t get_value() const
12166 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012167 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012168 return value;
12169 }
12170 uint32_t get_value() const volatile
12171 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012172 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012173 return value;
12174 }
12175 CONSTEXPR activation_r &set_value(uint32_t value)
12176 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012177 word0 = value;
12178 return *this;
12179 }
12180 volatile activation_r &set_value(uint32_t value) volatile
12181 {
12182 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012183 return *this;
12184 }
12185#endif
12186};
12187
12188// activation_min_r - None
12189struct activation_min_r
12190{
12191#ifndef __cplusplus
12192 union
12193 {
12194 struct
12195 {
12196 uint32_t value : 32; // 32-bit register value
12197 };
12198 uint32_t word;
12199 };
12200#else
12201 private:
12202 uint32_t word0;
12203
12204 public:
12205 CONSTEXPR activation_min_r() : word0(0) {}
12206 CONSTEXPR activation_min_r(uint32_t init) : word0(init) {}
12207 CONSTEXPR void operator=(uint32_t value)
12208 {
12209 word0 = value;
12210 }
12211 void operator=(uint32_t value) volatile
12212 {
12213 word0 = value;
12214 }
12215 CONSTEXPR operator uint32_t()
12216 {
12217 return word0;
12218 }
12219 operator uint32_t() volatile
12220 {
12221 return word0;
12222 }
12223 activation_min_r copy() volatile
12224 {
12225 return *this;
12226 }
12227 CONSTEXPR uint32_t get_value() const
12228 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012229 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012230 return value;
12231 }
12232 uint32_t get_value() const volatile
12233 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012234 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012235 return value;
12236 }
12237 CONSTEXPR activation_min_r &set_value(uint32_t value)
12238 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012239 word0 = value;
12240 return *this;
12241 }
12242 volatile activation_min_r &set_value(uint32_t value) volatile
12243 {
12244 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012245 return *this;
12246 }
12247#endif
12248};
12249
12250// activation_max_r - None
12251struct activation_max_r
12252{
12253#ifndef __cplusplus
12254 union
12255 {
12256 struct
12257 {
12258 uint32_t value : 32; // 32-bit register value
12259 };
12260 uint32_t word;
12261 };
12262#else
12263 private:
12264 uint32_t word0;
12265
12266 public:
12267 CONSTEXPR activation_max_r() : word0(0) {}
12268 CONSTEXPR activation_max_r(uint32_t init) : word0(init) {}
12269 CONSTEXPR void operator=(uint32_t value)
12270 {
12271 word0 = value;
12272 }
12273 void operator=(uint32_t value) volatile
12274 {
12275 word0 = value;
12276 }
12277 CONSTEXPR operator uint32_t()
12278 {
12279 return word0;
12280 }
12281 operator uint32_t() volatile
12282 {
12283 return word0;
12284 }
12285 activation_max_r copy() volatile
12286 {
12287 return *this;
12288 }
12289 CONSTEXPR uint32_t get_value() const
12290 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012291 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012292 return value;
12293 }
12294 uint32_t get_value() const volatile
12295 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012296 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012297 return value;
12298 }
12299 CONSTEXPR activation_max_r &set_value(uint32_t value)
12300 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012301 word0 = value;
12302 return *this;
12303 }
12304 volatile activation_max_r &set_value(uint32_t value) volatile
12305 {
12306 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012307 return *this;
12308 }
12309#endif
12310};
12311
12312// weight_region_r - None
12313struct weight_region_r
12314{
12315#ifndef __cplusplus
12316 union
12317 {
12318 struct
12319 {
12320 uint32_t value : 32; // 32-bit register value
12321 };
12322 uint32_t word;
12323 };
12324#else
12325 private:
12326 uint32_t word0;
12327
12328 public:
12329 CONSTEXPR weight_region_r() : word0(0) {}
12330 CONSTEXPR weight_region_r(uint32_t init) : word0(init) {}
12331 CONSTEXPR void operator=(uint32_t value)
12332 {
12333 word0 = value;
12334 }
12335 void operator=(uint32_t value) volatile
12336 {
12337 word0 = value;
12338 }
12339 CONSTEXPR operator uint32_t()
12340 {
12341 return word0;
12342 }
12343 operator uint32_t() volatile
12344 {
12345 return word0;
12346 }
12347 weight_region_r copy() volatile
12348 {
12349 return *this;
12350 }
12351 CONSTEXPR uint32_t get_value() const
12352 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012353 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012354 return value;
12355 }
12356 uint32_t get_value() const volatile
12357 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012358 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012359 return value;
12360 }
12361 CONSTEXPR weight_region_r &set_value(uint32_t value)
12362 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012363 word0 = value;
12364 return *this;
12365 }
12366 volatile weight_region_r &set_value(uint32_t value) volatile
12367 {
12368 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012369 return *this;
12370 }
12371#endif
12372};
12373
12374// scale_region_r - None
12375struct scale_region_r
12376{
12377#ifndef __cplusplus
12378 union
12379 {
12380 struct
12381 {
12382 uint32_t value : 32; // 32-bit register value
12383 };
12384 uint32_t word;
12385 };
12386#else
12387 private:
12388 uint32_t word0;
12389
12390 public:
12391 CONSTEXPR scale_region_r() : word0(0) {}
12392 CONSTEXPR scale_region_r(uint32_t init) : word0(init) {}
12393 CONSTEXPR void operator=(uint32_t value)
12394 {
12395 word0 = value;
12396 }
12397 void operator=(uint32_t value) volatile
12398 {
12399 word0 = value;
12400 }
12401 CONSTEXPR operator uint32_t()
12402 {
12403 return word0;
12404 }
12405 operator uint32_t() volatile
12406 {
12407 return word0;
12408 }
12409 scale_region_r copy() volatile
12410 {
12411 return *this;
12412 }
12413 CONSTEXPR uint32_t get_value() const
12414 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012415 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012416 return value;
12417 }
12418 uint32_t get_value() const volatile
12419 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012420 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012421 return value;
12422 }
12423 CONSTEXPR scale_region_r &set_value(uint32_t value)
12424 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012425 word0 = value;
12426 return *this;
12427 }
12428 volatile scale_region_r &set_value(uint32_t value) volatile
12429 {
12430 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012431 return *this;
12432 }
12433#endif
12434};
12435
12436// ab_start_r - None
12437struct ab_start_r
12438{
12439#ifndef __cplusplus
12440 union
12441 {
12442 struct
12443 {
12444 uint32_t value : 32; // 32-bit register value
12445 };
12446 uint32_t word;
12447 };
12448#else
12449 private:
12450 uint32_t word0;
12451
12452 public:
12453 CONSTEXPR ab_start_r() : word0(0) {}
12454 CONSTEXPR ab_start_r(uint32_t init) : word0(init) {}
12455 CONSTEXPR void operator=(uint32_t value)
12456 {
12457 word0 = value;
12458 }
12459 void operator=(uint32_t value) volatile
12460 {
12461 word0 = value;
12462 }
12463 CONSTEXPR operator uint32_t()
12464 {
12465 return word0;
12466 }
12467 operator uint32_t() volatile
12468 {
12469 return word0;
12470 }
12471 ab_start_r copy() volatile
12472 {
12473 return *this;
12474 }
12475 CONSTEXPR uint32_t get_value() const
12476 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012477 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012478 return value;
12479 }
12480 uint32_t get_value() const volatile
12481 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012482 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012483 return value;
12484 }
12485 CONSTEXPR ab_start_r &set_value(uint32_t value)
12486 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012487 word0 = value;
12488 return *this;
12489 }
12490 volatile ab_start_r &set_value(uint32_t value) volatile
12491 {
12492 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012493 return *this;
12494 }
12495#endif
12496};
12497
12498// blockdep_r - None
12499struct blockdep_r
12500{
12501#ifndef __cplusplus
12502 union
12503 {
12504 struct
12505 {
12506 uint32_t value : 32; // 32-bit register value
12507 };
12508 uint32_t word;
12509 };
12510#else
12511 private:
12512 uint32_t word0;
12513
12514 public:
12515 CONSTEXPR blockdep_r() : word0(0) {}
12516 CONSTEXPR blockdep_r(uint32_t init) : word0(init) {}
12517 CONSTEXPR void operator=(uint32_t value)
12518 {
12519 word0 = value;
12520 }
12521 void operator=(uint32_t value) volatile
12522 {
12523 word0 = value;
12524 }
12525 CONSTEXPR operator uint32_t()
12526 {
12527 return word0;
12528 }
12529 operator uint32_t() volatile
12530 {
12531 return word0;
12532 }
12533 blockdep_r copy() volatile
12534 {
12535 return *this;
12536 }
12537 CONSTEXPR uint32_t get_value() const
12538 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012539 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012540 return value;
12541 }
12542 uint32_t get_value() const volatile
12543 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012544 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012545 return value;
12546 }
12547 CONSTEXPR blockdep_r &set_value(uint32_t value)
12548 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012549 word0 = value;
12550 return *this;
12551 }
12552 volatile blockdep_r &set_value(uint32_t value) volatile
12553 {
12554 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012555 return *this;
12556 }
12557#endif
12558};
12559
12560// dma0_src_region_r - None
12561struct dma0_src_region_r
12562{
12563#ifndef __cplusplus
12564 union
12565 {
12566 struct
12567 {
12568 uint32_t value : 32; // 32-bit register value
12569 };
12570 uint32_t word;
12571 };
12572#else
12573 private:
12574 uint32_t word0;
12575
12576 public:
12577 CONSTEXPR dma0_src_region_r() : word0(0) {}
12578 CONSTEXPR dma0_src_region_r(uint32_t init) : word0(init) {}
12579 CONSTEXPR void operator=(uint32_t value)
12580 {
12581 word0 = value;
12582 }
12583 void operator=(uint32_t value) volatile
12584 {
12585 word0 = value;
12586 }
12587 CONSTEXPR operator uint32_t()
12588 {
12589 return word0;
12590 }
12591 operator uint32_t() volatile
12592 {
12593 return word0;
12594 }
12595 dma0_src_region_r copy() volatile
12596 {
12597 return *this;
12598 }
12599 CONSTEXPR uint32_t get_value() const
12600 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012601 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012602 return value;
12603 }
12604 uint32_t get_value() const volatile
12605 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012606 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012607 return value;
12608 }
12609 CONSTEXPR dma0_src_region_r &set_value(uint32_t value)
12610 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012611 word0 = value;
12612 return *this;
12613 }
12614 volatile dma0_src_region_r &set_value(uint32_t value) volatile
12615 {
12616 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012617 return *this;
12618 }
12619#endif
12620};
12621
12622// dma0_dst_region_r - None
12623struct dma0_dst_region_r
12624{
12625#ifndef __cplusplus
12626 union
12627 {
12628 struct
12629 {
12630 uint32_t value : 32; // 32-bit register value
12631 };
12632 uint32_t word;
12633 };
12634#else
12635 private:
12636 uint32_t word0;
12637
12638 public:
12639 CONSTEXPR dma0_dst_region_r() : word0(0) {}
12640 CONSTEXPR dma0_dst_region_r(uint32_t init) : word0(init) {}
12641 CONSTEXPR void operator=(uint32_t value)
12642 {
12643 word0 = value;
12644 }
12645 void operator=(uint32_t value) volatile
12646 {
12647 word0 = value;
12648 }
12649 CONSTEXPR operator uint32_t()
12650 {
12651 return word0;
12652 }
12653 operator uint32_t() volatile
12654 {
12655 return word0;
12656 }
12657 dma0_dst_region_r copy() volatile
12658 {
12659 return *this;
12660 }
12661 CONSTEXPR uint32_t get_value() const
12662 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012663 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012664 return value;
12665 }
12666 uint32_t get_value() const volatile
12667 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012668 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012669 return value;
12670 }
12671 CONSTEXPR dma0_dst_region_r &set_value(uint32_t value)
12672 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012673 word0 = value;
12674 return *this;
12675 }
12676 volatile dma0_dst_region_r &set_value(uint32_t value) volatile
12677 {
12678 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012679 return *this;
12680 }
12681#endif
12682};
12683
12684// dma0_size0_r - None
12685struct dma0_size0_r
12686{
12687#ifndef __cplusplus
12688 union
12689 {
12690 struct
12691 {
12692 uint32_t value : 32; // 32-bit register value
12693 };
12694 uint32_t word;
12695 };
12696#else
12697 private:
12698 uint32_t word0;
12699
12700 public:
12701 CONSTEXPR dma0_size0_r() : word0(0) {}
12702 CONSTEXPR dma0_size0_r(uint32_t init) : word0(init) {}
12703 CONSTEXPR void operator=(uint32_t value)
12704 {
12705 word0 = value;
12706 }
12707 void operator=(uint32_t value) volatile
12708 {
12709 word0 = value;
12710 }
12711 CONSTEXPR operator uint32_t()
12712 {
12713 return word0;
12714 }
12715 operator uint32_t() volatile
12716 {
12717 return word0;
12718 }
12719 dma0_size0_r copy() volatile
12720 {
12721 return *this;
12722 }
12723 CONSTEXPR uint32_t get_value() const
12724 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012725 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012726 return value;
12727 }
12728 uint32_t get_value() const volatile
12729 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012730 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012731 return value;
12732 }
12733 CONSTEXPR dma0_size0_r &set_value(uint32_t value)
12734 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012735 word0 = value;
12736 return *this;
12737 }
12738 volatile dma0_size0_r &set_value(uint32_t value) volatile
12739 {
12740 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012741 return *this;
12742 }
12743#endif
12744};
12745
12746// dma0_size1_r - None
12747struct dma0_size1_r
12748{
12749#ifndef __cplusplus
12750 union
12751 {
12752 struct
12753 {
12754 uint32_t value : 32; // 32-bit register value
12755 };
12756 uint32_t word;
12757 };
12758#else
12759 private:
12760 uint32_t word0;
12761
12762 public:
12763 CONSTEXPR dma0_size1_r() : word0(0) {}
12764 CONSTEXPR dma0_size1_r(uint32_t init) : word0(init) {}
12765 CONSTEXPR void operator=(uint32_t value)
12766 {
12767 word0 = value;
12768 }
12769 void operator=(uint32_t value) volatile
12770 {
12771 word0 = value;
12772 }
12773 CONSTEXPR operator uint32_t()
12774 {
12775 return word0;
12776 }
12777 operator uint32_t() volatile
12778 {
12779 return word0;
12780 }
12781 dma0_size1_r copy() volatile
12782 {
12783 return *this;
12784 }
12785 CONSTEXPR uint32_t get_value() const
12786 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012787 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012788 return value;
12789 }
12790 uint32_t get_value() const volatile
12791 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012792 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012793 return value;
12794 }
12795 CONSTEXPR dma0_size1_r &set_value(uint32_t value)
12796 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012797 word0 = value;
12798 return *this;
12799 }
12800 volatile dma0_size1_r &set_value(uint32_t value) volatile
12801 {
12802 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012803 return *this;
12804 }
12805#endif
12806};
12807
12808// ifm2_broadcast_r - None
12809struct ifm2_broadcast_r
12810{
12811#ifndef __cplusplus
12812 union
12813 {
12814 struct
12815 {
12816 uint32_t value : 32; // 32-bit register value
12817 };
12818 uint32_t word;
12819 };
12820#else
12821 private:
12822 uint32_t word0;
12823
12824 public:
12825 CONSTEXPR ifm2_broadcast_r() : word0(0) {}
12826 CONSTEXPR ifm2_broadcast_r(uint32_t init) : word0(init) {}
12827 CONSTEXPR void operator=(uint32_t value)
12828 {
12829 word0 = value;
12830 }
12831 void operator=(uint32_t value) volatile
12832 {
12833 word0 = value;
12834 }
12835 CONSTEXPR operator uint32_t()
12836 {
12837 return word0;
12838 }
12839 operator uint32_t() volatile
12840 {
12841 return word0;
12842 }
12843 ifm2_broadcast_r copy() volatile
12844 {
12845 return *this;
12846 }
12847 CONSTEXPR uint32_t get_value() const
12848 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012849 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012850 return value;
12851 }
12852 uint32_t get_value() const volatile
12853 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012854 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012855 return value;
12856 }
12857 CONSTEXPR ifm2_broadcast_r &set_value(uint32_t value)
12858 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012859 word0 = value;
12860 return *this;
12861 }
12862 volatile ifm2_broadcast_r &set_value(uint32_t value) volatile
12863 {
12864 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012865 return *this;
12866 }
12867#endif
12868};
12869
12870// ifm2_scalar_r - None
12871struct ifm2_scalar_r
12872{
12873#ifndef __cplusplus
12874 union
12875 {
12876 struct
12877 {
12878 uint32_t value : 32; // 32-bit register value
12879 };
12880 uint32_t word;
12881 };
12882#else
12883 private:
12884 uint32_t word0;
12885
12886 public:
12887 CONSTEXPR ifm2_scalar_r() : word0(0) {}
12888 CONSTEXPR ifm2_scalar_r(uint32_t init) : word0(init) {}
12889 CONSTEXPR void operator=(uint32_t value)
12890 {
12891 word0 = value;
12892 }
12893 void operator=(uint32_t value) volatile
12894 {
12895 word0 = value;
12896 }
12897 CONSTEXPR operator uint32_t()
12898 {
12899 return word0;
12900 }
12901 operator uint32_t() volatile
12902 {
12903 return word0;
12904 }
12905 ifm2_scalar_r copy() volatile
12906 {
12907 return *this;
12908 }
12909 CONSTEXPR uint32_t get_value() const
12910 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012911 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012912 return value;
12913 }
12914 uint32_t get_value() const volatile
12915 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012916 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012917 return value;
12918 }
12919 CONSTEXPR ifm2_scalar_r &set_value(uint32_t value)
12920 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012921 word0 = value;
12922 return *this;
12923 }
12924 volatile ifm2_scalar_r &set_value(uint32_t value) volatile
12925 {
12926 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012927 return *this;
12928 }
12929#endif
12930};
12931
12932// ifm2_precision_r - None
12933struct ifm2_precision_r
12934{
12935#ifndef __cplusplus
12936 union
12937 {
12938 struct
12939 {
12940 uint32_t value : 32; // 32-bit register value
12941 };
12942 uint32_t word;
12943 };
12944#else
12945 private:
12946 uint32_t word0;
12947
12948 public:
12949 CONSTEXPR ifm2_precision_r() : word0(0) {}
12950 CONSTEXPR ifm2_precision_r(uint32_t init) : word0(init) {}
12951 CONSTEXPR void operator=(uint32_t value)
12952 {
12953 word0 = value;
12954 }
12955 void operator=(uint32_t value) volatile
12956 {
12957 word0 = value;
12958 }
12959 CONSTEXPR operator uint32_t()
12960 {
12961 return word0;
12962 }
12963 operator uint32_t() volatile
12964 {
12965 return word0;
12966 }
12967 ifm2_precision_r copy() volatile
12968 {
12969 return *this;
12970 }
12971 CONSTEXPR uint32_t get_value() const
12972 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012973 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012974 return value;
12975 }
12976 uint32_t get_value() const volatile
12977 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012978 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020012979 return value;
12980 }
12981 CONSTEXPR ifm2_precision_r &set_value(uint32_t value)
12982 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010012983 word0 = value;
12984 return *this;
12985 }
12986 volatile ifm2_precision_r &set_value(uint32_t value) volatile
12987 {
12988 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020012989 return *this;
12990 }
12991#endif
12992};
12993
12994// ifm2_zero_point_r - None
12995struct ifm2_zero_point_r
12996{
12997#ifndef __cplusplus
12998 union
12999 {
13000 struct
13001 {
13002 uint32_t value : 32; // 32-bit register value
13003 };
13004 uint32_t word;
13005 };
13006#else
13007 private:
13008 uint32_t word0;
13009
13010 public:
13011 CONSTEXPR ifm2_zero_point_r() : word0(0) {}
13012 CONSTEXPR ifm2_zero_point_r(uint32_t init) : word0(init) {}
13013 CONSTEXPR void operator=(uint32_t value)
13014 {
13015 word0 = value;
13016 }
13017 void operator=(uint32_t value) volatile
13018 {
13019 word0 = value;
13020 }
13021 CONSTEXPR operator uint32_t()
13022 {
13023 return word0;
13024 }
13025 operator uint32_t() volatile
13026 {
13027 return word0;
13028 }
13029 ifm2_zero_point_r copy() volatile
13030 {
13031 return *this;
13032 }
13033 CONSTEXPR uint32_t get_value() const
13034 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013035 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013036 return value;
13037 }
13038 uint32_t get_value() const volatile
13039 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013040 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013041 return value;
13042 }
13043 CONSTEXPR ifm2_zero_point_r &set_value(uint32_t value)
13044 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013045 word0 = value;
13046 return *this;
13047 }
13048 volatile ifm2_zero_point_r &set_value(uint32_t value) volatile
13049 {
13050 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020013051 return *this;
13052 }
13053#endif
13054};
13055
13056// ifm2_width0_m1_r - None
13057struct ifm2_width0_m1_r
13058{
13059#ifndef __cplusplus
13060 union
13061 {
13062 struct
13063 {
13064 uint32_t value : 32; // 32-bit register value
13065 };
13066 uint32_t word;
13067 };
13068#else
13069 private:
13070 uint32_t word0;
13071
13072 public:
13073 CONSTEXPR ifm2_width0_m1_r() : word0(0) {}
13074 CONSTEXPR ifm2_width0_m1_r(uint32_t init) : word0(init) {}
13075 CONSTEXPR void operator=(uint32_t value)
13076 {
13077 word0 = value;
13078 }
13079 void operator=(uint32_t value) volatile
13080 {
13081 word0 = value;
13082 }
13083 CONSTEXPR operator uint32_t()
13084 {
13085 return word0;
13086 }
13087 operator uint32_t() volatile
13088 {
13089 return word0;
13090 }
13091 ifm2_width0_m1_r copy() volatile
13092 {
13093 return *this;
13094 }
13095 CONSTEXPR uint32_t get_value() const
13096 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013097 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013098 return value;
13099 }
13100 uint32_t get_value() const volatile
13101 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013102 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013103 return value;
13104 }
13105 CONSTEXPR ifm2_width0_m1_r &set_value(uint32_t value)
13106 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013107 word0 = value;
13108 return *this;
13109 }
13110 volatile ifm2_width0_m1_r &set_value(uint32_t value) volatile
13111 {
13112 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020013113 return *this;
13114 }
13115#endif
13116};
13117
13118// ifm2_height0_m1_r - None
13119struct ifm2_height0_m1_r
13120{
13121#ifndef __cplusplus
13122 union
13123 {
13124 struct
13125 {
13126 uint32_t value : 32; // 32-bit register value
13127 };
13128 uint32_t word;
13129 };
13130#else
13131 private:
13132 uint32_t word0;
13133
13134 public:
13135 CONSTEXPR ifm2_height0_m1_r() : word0(0) {}
13136 CONSTEXPR ifm2_height0_m1_r(uint32_t init) : word0(init) {}
13137 CONSTEXPR void operator=(uint32_t value)
13138 {
13139 word0 = value;
13140 }
13141 void operator=(uint32_t value) volatile
13142 {
13143 word0 = value;
13144 }
13145 CONSTEXPR operator uint32_t()
13146 {
13147 return word0;
13148 }
13149 operator uint32_t() volatile
13150 {
13151 return word0;
13152 }
13153 ifm2_height0_m1_r copy() volatile
13154 {
13155 return *this;
13156 }
13157 CONSTEXPR uint32_t get_value() const
13158 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013159 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013160 return value;
13161 }
13162 uint32_t get_value() const volatile
13163 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013164 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013165 return value;
13166 }
13167 CONSTEXPR ifm2_height0_m1_r &set_value(uint32_t value)
13168 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013169 word0 = value;
13170 return *this;
13171 }
13172 volatile ifm2_height0_m1_r &set_value(uint32_t value) volatile
13173 {
13174 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020013175 return *this;
13176 }
13177#endif
13178};
13179
13180// ifm2_height1_m1_r - None
13181struct ifm2_height1_m1_r
13182{
13183#ifndef __cplusplus
13184 union
13185 {
13186 struct
13187 {
13188 uint32_t value : 32; // 32-bit register value
13189 };
13190 uint32_t word;
13191 };
13192#else
13193 private:
13194 uint32_t word0;
13195
13196 public:
13197 CONSTEXPR ifm2_height1_m1_r() : word0(0) {}
13198 CONSTEXPR ifm2_height1_m1_r(uint32_t init) : word0(init) {}
13199 CONSTEXPR void operator=(uint32_t value)
13200 {
13201 word0 = value;
13202 }
13203 void operator=(uint32_t value) volatile
13204 {
13205 word0 = value;
13206 }
13207 CONSTEXPR operator uint32_t()
13208 {
13209 return word0;
13210 }
13211 operator uint32_t() volatile
13212 {
13213 return word0;
13214 }
13215 ifm2_height1_m1_r copy() volatile
13216 {
13217 return *this;
13218 }
13219 CONSTEXPR uint32_t get_value() const
13220 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013221 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013222 return value;
13223 }
13224 uint32_t get_value() const volatile
13225 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013226 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013227 return value;
13228 }
13229 CONSTEXPR ifm2_height1_m1_r &set_value(uint32_t value)
13230 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013231 word0 = value;
13232 return *this;
13233 }
13234 volatile ifm2_height1_m1_r &set_value(uint32_t value) volatile
13235 {
13236 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020013237 return *this;
13238 }
13239#endif
13240};
13241
13242// ifm2_ib_start_r - None
13243struct ifm2_ib_start_r
13244{
13245#ifndef __cplusplus
13246 union
13247 {
13248 struct
13249 {
13250 uint32_t value : 32; // 32-bit register value
13251 };
13252 uint32_t word;
13253 };
13254#else
13255 private:
13256 uint32_t word0;
13257
13258 public:
13259 CONSTEXPR ifm2_ib_start_r() : word0(0) {}
13260 CONSTEXPR ifm2_ib_start_r(uint32_t init) : word0(init) {}
13261 CONSTEXPR void operator=(uint32_t value)
13262 {
13263 word0 = value;
13264 }
13265 void operator=(uint32_t value) volatile
13266 {
13267 word0 = value;
13268 }
13269 CONSTEXPR operator uint32_t()
13270 {
13271 return word0;
13272 }
13273 operator uint32_t() volatile
13274 {
13275 return word0;
13276 }
13277 ifm2_ib_start_r copy() volatile
13278 {
13279 return *this;
13280 }
13281 CONSTEXPR uint32_t get_value() const
13282 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013283 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013284 return value;
13285 }
13286 uint32_t get_value() const volatile
13287 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013288 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013289 return value;
13290 }
13291 CONSTEXPR ifm2_ib_start_r &set_value(uint32_t value)
13292 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013293 word0 = value;
13294 return *this;
13295 }
13296 volatile ifm2_ib_start_r &set_value(uint32_t value) volatile
13297 {
13298 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020013299 return *this;
13300 }
13301#endif
13302};
13303
13304// ifm2_region_r - None
13305struct ifm2_region_r
13306{
13307#ifndef __cplusplus
13308 union
13309 {
13310 struct
13311 {
13312 uint32_t value : 32; // 32-bit register value
13313 };
13314 uint32_t word;
13315 };
13316#else
13317 private:
13318 uint32_t word0;
13319
13320 public:
13321 CONSTEXPR ifm2_region_r() : word0(0) {}
13322 CONSTEXPR ifm2_region_r(uint32_t init) : word0(init) {}
13323 CONSTEXPR void operator=(uint32_t value)
13324 {
13325 word0 = value;
13326 }
13327 void operator=(uint32_t value) volatile
13328 {
13329 word0 = value;
13330 }
13331 CONSTEXPR operator uint32_t()
13332 {
13333 return word0;
13334 }
13335 operator uint32_t() volatile
13336 {
13337 return word0;
13338 }
13339 ifm2_region_r copy() volatile
13340 {
13341 return *this;
13342 }
13343 CONSTEXPR uint32_t get_value() const
13344 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013345 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013346 return value;
13347 }
13348 uint32_t get_value() const volatile
13349 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013350 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020013351 return value;
13352 }
13353 CONSTEXPR ifm2_region_r &set_value(uint32_t value)
13354 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013355 word0 = value;
13356 return *this;
13357 }
13358 volatile ifm2_region_r &set_value(uint32_t value) volatile
13359 {
13360 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020013361 return *this;
13362 }
13363#endif
13364};
13365
13366// ifm_base0_r - None
13367struct ifm_base0_r
13368{
13369#ifndef __cplusplus
13370 union
13371 {
13372 struct
13373 {
13374 uint32_t value_LO : 32; // 64-bit register value - LSB
13375 uint32_t value_HI : 32; // 64-bit register value - MSB
13376 };
13377 uint32_t word[2];
13378 };
13379#else
13380 private:
13381 uint32_t word0;
13382 uint32_t word1;
13383
13384 public:
13385 CONSTEXPR ifm_base0_r() : word0(0), word1(0) {}
13386 CONSTEXPR ifm_base0_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013387 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13388 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013389 {
13390 }
13391 CONSTEXPR void operator=(uint64_t value)
13392 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013393 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13394 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013395 }
13396 void operator=(uint64_t value) volatile
13397 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013398 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13399 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013400 }
13401 CONSTEXPR operator uint64_t()
13402 {
13403 return (static_cast<uint64_t>(word1) << 32) | word0;
13404 }
13405 operator uint64_t() volatile
13406 {
13407 return (static_cast<uint64_t>(word1) << 32) | word0;
13408 }
13409 ifm_base0_r copy() volatile
13410 {
13411 return *this;
13412 }
13413#endif
13414};
13415
13416// ifm_base1_r - None
13417struct ifm_base1_r
13418{
13419#ifndef __cplusplus
13420 union
13421 {
13422 struct
13423 {
13424 uint32_t value_LO : 32; // 64-bit register value - LSB
13425 uint32_t value_HI : 32; // 64-bit register value - MSB
13426 };
13427 uint32_t word[2];
13428 };
13429#else
13430 private:
13431 uint32_t word0;
13432 uint32_t word1;
13433
13434 public:
13435 CONSTEXPR ifm_base1_r() : word0(0), word1(0) {}
13436 CONSTEXPR ifm_base1_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013437 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13438 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013439 {
13440 }
13441 CONSTEXPR void operator=(uint64_t value)
13442 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013443 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13444 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013445 }
13446 void operator=(uint64_t value) volatile
13447 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013448 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13449 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013450 }
13451 CONSTEXPR operator uint64_t()
13452 {
13453 return (static_cast<uint64_t>(word1) << 32) | word0;
13454 }
13455 operator uint64_t() volatile
13456 {
13457 return (static_cast<uint64_t>(word1) << 32) | word0;
13458 }
13459 ifm_base1_r copy() volatile
13460 {
13461 return *this;
13462 }
13463#endif
13464};
13465
13466// ifm_base2_r - None
13467struct ifm_base2_r
13468{
13469#ifndef __cplusplus
13470 union
13471 {
13472 struct
13473 {
13474 uint32_t value_LO : 32; // 64-bit register value - LSB
13475 uint32_t value_HI : 32; // 64-bit register value - MSB
13476 };
13477 uint32_t word[2];
13478 };
13479#else
13480 private:
13481 uint32_t word0;
13482 uint32_t word1;
13483
13484 public:
13485 CONSTEXPR ifm_base2_r() : word0(0), word1(0) {}
13486 CONSTEXPR ifm_base2_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013487 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13488 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013489 {
13490 }
13491 CONSTEXPR void operator=(uint64_t value)
13492 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013493 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13494 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013495 }
13496 void operator=(uint64_t value) volatile
13497 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013498 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13499 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013500 }
13501 CONSTEXPR operator uint64_t()
13502 {
13503 return (static_cast<uint64_t>(word1) << 32) | word0;
13504 }
13505 operator uint64_t() volatile
13506 {
13507 return (static_cast<uint64_t>(word1) << 32) | word0;
13508 }
13509 ifm_base2_r copy() volatile
13510 {
13511 return *this;
13512 }
13513#endif
13514};
13515
13516// ifm_base3_r - None
13517struct ifm_base3_r
13518{
13519#ifndef __cplusplus
13520 union
13521 {
13522 struct
13523 {
13524 uint32_t value_LO : 32; // 64-bit register value - LSB
13525 uint32_t value_HI : 32; // 64-bit register value - MSB
13526 };
13527 uint32_t word[2];
13528 };
13529#else
13530 private:
13531 uint32_t word0;
13532 uint32_t word1;
13533
13534 public:
13535 CONSTEXPR ifm_base3_r() : word0(0), word1(0) {}
13536 CONSTEXPR ifm_base3_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013537 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13538 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013539 {
13540 }
13541 CONSTEXPR void operator=(uint64_t value)
13542 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013543 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13544 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013545 }
13546 void operator=(uint64_t value) volatile
13547 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013548 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13549 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013550 }
13551 CONSTEXPR operator uint64_t()
13552 {
13553 return (static_cast<uint64_t>(word1) << 32) | word0;
13554 }
13555 operator uint64_t() volatile
13556 {
13557 return (static_cast<uint64_t>(word1) << 32) | word0;
13558 }
13559 ifm_base3_r copy() volatile
13560 {
13561 return *this;
13562 }
13563#endif
13564};
13565
13566// ifm_stride_x_r - None
13567struct ifm_stride_x_r
13568{
13569#ifndef __cplusplus
13570 union
13571 {
13572 struct
13573 {
13574 uint32_t value_LO : 32; // 64-bit register value - LSB
13575 uint32_t value_HI : 32; // 64-bit register value - MSB
13576 };
13577 uint32_t word[2];
13578 };
13579#else
13580 private:
13581 uint32_t word0;
13582 uint32_t word1;
13583
13584 public:
13585 CONSTEXPR ifm_stride_x_r() : word0(0), word1(0) {}
13586 CONSTEXPR ifm_stride_x_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013587 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13588 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013589 {
13590 }
13591 CONSTEXPR void operator=(uint64_t value)
13592 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013593 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13594 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013595 }
13596 void operator=(uint64_t value) volatile
13597 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013598 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13599 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013600 }
13601 CONSTEXPR operator uint64_t()
13602 {
13603 return (static_cast<uint64_t>(word1) << 32) | word0;
13604 }
13605 operator uint64_t() volatile
13606 {
13607 return (static_cast<uint64_t>(word1) << 32) | word0;
13608 }
13609 ifm_stride_x_r copy() volatile
13610 {
13611 return *this;
13612 }
13613#endif
13614};
13615
13616// ifm_stride_y_r - None
13617struct ifm_stride_y_r
13618{
13619#ifndef __cplusplus
13620 union
13621 {
13622 struct
13623 {
13624 uint32_t value_LO : 32; // 64-bit register value - LSB
13625 uint32_t value_HI : 32; // 64-bit register value - MSB
13626 };
13627 uint32_t word[2];
13628 };
13629#else
13630 private:
13631 uint32_t word0;
13632 uint32_t word1;
13633
13634 public:
13635 CONSTEXPR ifm_stride_y_r() : word0(0), word1(0) {}
13636 CONSTEXPR ifm_stride_y_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013637 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13638 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013639 {
13640 }
13641 CONSTEXPR void operator=(uint64_t value)
13642 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013643 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13644 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013645 }
13646 void operator=(uint64_t value) volatile
13647 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013648 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13649 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013650 }
13651 CONSTEXPR operator uint64_t()
13652 {
13653 return (static_cast<uint64_t>(word1) << 32) | word0;
13654 }
13655 operator uint64_t() volatile
13656 {
13657 return (static_cast<uint64_t>(word1) << 32) | word0;
13658 }
13659 ifm_stride_y_r copy() volatile
13660 {
13661 return *this;
13662 }
13663#endif
13664};
13665
13666// ifm_stride_c_r - None
13667struct ifm_stride_c_r
13668{
13669#ifndef __cplusplus
13670 union
13671 {
13672 struct
13673 {
13674 uint32_t value_LO : 32; // 64-bit register value - LSB
13675 uint32_t value_HI : 32; // 64-bit register value - MSB
13676 };
13677 uint32_t word[2];
13678 };
13679#else
13680 private:
13681 uint32_t word0;
13682 uint32_t word1;
13683
13684 public:
13685 CONSTEXPR ifm_stride_c_r() : word0(0), word1(0) {}
13686 CONSTEXPR ifm_stride_c_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013687 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13688 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013689 {
13690 }
13691 CONSTEXPR void operator=(uint64_t value)
13692 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013693 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13694 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013695 }
13696 void operator=(uint64_t value) volatile
13697 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013698 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13699 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013700 }
13701 CONSTEXPR operator uint64_t()
13702 {
13703 return (static_cast<uint64_t>(word1) << 32) | word0;
13704 }
13705 operator uint64_t() volatile
13706 {
13707 return (static_cast<uint64_t>(word1) << 32) | word0;
13708 }
13709 ifm_stride_c_r copy() volatile
13710 {
13711 return *this;
13712 }
13713#endif
13714};
13715
13716// ofm_base0_r - None
13717struct ofm_base0_r
13718{
13719#ifndef __cplusplus
13720 union
13721 {
13722 struct
13723 {
13724 uint32_t value_LO : 32; // 64-bit register value - LSB
13725 uint32_t value_HI : 32; // 64-bit register value - MSB
13726 };
13727 uint32_t word[2];
13728 };
13729#else
13730 private:
13731 uint32_t word0;
13732 uint32_t word1;
13733
13734 public:
13735 CONSTEXPR ofm_base0_r() : word0(0), word1(0) {}
13736 CONSTEXPR ofm_base0_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013737 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13738 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013739 {
13740 }
13741 CONSTEXPR void operator=(uint64_t value)
13742 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013743 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13744 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013745 }
13746 void operator=(uint64_t value) volatile
13747 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013748 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13749 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013750 }
13751 CONSTEXPR operator uint64_t()
13752 {
13753 return (static_cast<uint64_t>(word1) << 32) | word0;
13754 }
13755 operator uint64_t() volatile
13756 {
13757 return (static_cast<uint64_t>(word1) << 32) | word0;
13758 }
13759 ofm_base0_r copy() volatile
13760 {
13761 return *this;
13762 }
13763#endif
13764};
13765
13766// ofm_base1_r - None
13767struct ofm_base1_r
13768{
13769#ifndef __cplusplus
13770 union
13771 {
13772 struct
13773 {
13774 uint32_t value_LO : 32; // 64-bit register value - LSB
13775 uint32_t value_HI : 32; // 64-bit register value - MSB
13776 };
13777 uint32_t word[2];
13778 };
13779#else
13780 private:
13781 uint32_t word0;
13782 uint32_t word1;
13783
13784 public:
13785 CONSTEXPR ofm_base1_r() : word0(0), word1(0) {}
13786 CONSTEXPR ofm_base1_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013787 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13788 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013789 {
13790 }
13791 CONSTEXPR void operator=(uint64_t value)
13792 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013793 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13794 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013795 }
13796 void operator=(uint64_t value) volatile
13797 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013798 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13799 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013800 }
13801 CONSTEXPR operator uint64_t()
13802 {
13803 return (static_cast<uint64_t>(word1) << 32) | word0;
13804 }
13805 operator uint64_t() volatile
13806 {
13807 return (static_cast<uint64_t>(word1) << 32) | word0;
13808 }
13809 ofm_base1_r copy() volatile
13810 {
13811 return *this;
13812 }
13813#endif
13814};
13815
13816// ofm_base2_r - None
13817struct ofm_base2_r
13818{
13819#ifndef __cplusplus
13820 union
13821 {
13822 struct
13823 {
13824 uint32_t value_LO : 32; // 64-bit register value - LSB
13825 uint32_t value_HI : 32; // 64-bit register value - MSB
13826 };
13827 uint32_t word[2];
13828 };
13829#else
13830 private:
13831 uint32_t word0;
13832 uint32_t word1;
13833
13834 public:
13835 CONSTEXPR ofm_base2_r() : word0(0), word1(0) {}
13836 CONSTEXPR ofm_base2_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013837 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13838 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013839 {
13840 }
13841 CONSTEXPR void operator=(uint64_t value)
13842 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013843 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13844 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013845 }
13846 void operator=(uint64_t value) volatile
13847 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013848 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13849 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013850 }
13851 CONSTEXPR operator uint64_t()
13852 {
13853 return (static_cast<uint64_t>(word1) << 32) | word0;
13854 }
13855 operator uint64_t() volatile
13856 {
13857 return (static_cast<uint64_t>(word1) << 32) | word0;
13858 }
13859 ofm_base2_r copy() volatile
13860 {
13861 return *this;
13862 }
13863#endif
13864};
13865
13866// ofm_base3_r - None
13867struct ofm_base3_r
13868{
13869#ifndef __cplusplus
13870 union
13871 {
13872 struct
13873 {
13874 uint32_t value_LO : 32; // 64-bit register value - LSB
13875 uint32_t value_HI : 32; // 64-bit register value - MSB
13876 };
13877 uint32_t word[2];
13878 };
13879#else
13880 private:
13881 uint32_t word0;
13882 uint32_t word1;
13883
13884 public:
13885 CONSTEXPR ofm_base3_r() : word0(0), word1(0) {}
13886 CONSTEXPR ofm_base3_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013887 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13888 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013889 {
13890 }
13891 CONSTEXPR void operator=(uint64_t value)
13892 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013893 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13894 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013895 }
13896 void operator=(uint64_t value) volatile
13897 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013898 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13899 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013900 }
13901 CONSTEXPR operator uint64_t()
13902 {
13903 return (static_cast<uint64_t>(word1) << 32) | word0;
13904 }
13905 operator uint64_t() volatile
13906 {
13907 return (static_cast<uint64_t>(word1) << 32) | word0;
13908 }
13909 ofm_base3_r copy() volatile
13910 {
13911 return *this;
13912 }
13913#endif
13914};
13915
13916// ofm_stride_x_r - None
13917struct ofm_stride_x_r
13918{
13919#ifndef __cplusplus
13920 union
13921 {
13922 struct
13923 {
13924 uint32_t value_LO : 32; // 64-bit register value - LSB
13925 uint32_t value_HI : 32; // 64-bit register value - MSB
13926 };
13927 uint32_t word[2];
13928 };
13929#else
13930 private:
13931 uint32_t word0;
13932 uint32_t word1;
13933
13934 public:
13935 CONSTEXPR ofm_stride_x_r() : word0(0), word1(0) {}
13936 CONSTEXPR ofm_stride_x_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013937 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13938 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013939 {
13940 }
13941 CONSTEXPR void operator=(uint64_t value)
13942 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013943 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13944 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013945 }
13946 void operator=(uint64_t value) volatile
13947 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013948 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13949 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013950 }
13951 CONSTEXPR operator uint64_t()
13952 {
13953 return (static_cast<uint64_t>(word1) << 32) | word0;
13954 }
13955 operator uint64_t() volatile
13956 {
13957 return (static_cast<uint64_t>(word1) << 32) | word0;
13958 }
13959 ofm_stride_x_r copy() volatile
13960 {
13961 return *this;
13962 }
13963#endif
13964};
13965
13966// ofm_stride_y_r - None
13967struct ofm_stride_y_r
13968{
13969#ifndef __cplusplus
13970 union
13971 {
13972 struct
13973 {
13974 uint32_t value_LO : 32; // 64-bit register value - LSB
13975 uint32_t value_HI : 32; // 64-bit register value - MSB
13976 };
13977 uint32_t word[2];
13978 };
13979#else
13980 private:
13981 uint32_t word0;
13982 uint32_t word1;
13983
13984 public:
13985 CONSTEXPR ofm_stride_y_r() : word0(0), word1(0) {}
13986 CONSTEXPR ofm_stride_y_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010013987 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
13988 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020013989 {
13990 }
13991 CONSTEXPR void operator=(uint64_t value)
13992 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013993 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13994 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020013995 }
13996 void operator=(uint64_t value) volatile
13997 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010013998 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
13999 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014000 }
14001 CONSTEXPR operator uint64_t()
14002 {
14003 return (static_cast<uint64_t>(word1) << 32) | word0;
14004 }
14005 operator uint64_t() volatile
14006 {
14007 return (static_cast<uint64_t>(word1) << 32) | word0;
14008 }
14009 ofm_stride_y_r copy() volatile
14010 {
14011 return *this;
14012 }
14013#endif
14014};
14015
14016// ofm_stride_c_r - None
14017struct ofm_stride_c_r
14018{
14019#ifndef __cplusplus
14020 union
14021 {
14022 struct
14023 {
14024 uint32_t value_LO : 32; // 64-bit register value - LSB
14025 uint32_t value_HI : 32; // 64-bit register value - MSB
14026 };
14027 uint32_t word[2];
14028 };
14029#else
14030 private:
14031 uint32_t word0;
14032 uint32_t word1;
14033
14034 public:
14035 CONSTEXPR ofm_stride_c_r() : word0(0), word1(0) {}
14036 CONSTEXPR ofm_stride_c_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014037 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14038 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014039 {
14040 }
14041 CONSTEXPR void operator=(uint64_t value)
14042 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014043 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14044 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014045 }
14046 void operator=(uint64_t value) volatile
14047 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014048 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14049 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014050 }
14051 CONSTEXPR operator uint64_t()
14052 {
14053 return (static_cast<uint64_t>(word1) << 32) | word0;
14054 }
14055 operator uint64_t() volatile
14056 {
14057 return (static_cast<uint64_t>(word1) << 32) | word0;
14058 }
14059 ofm_stride_c_r copy() volatile
14060 {
14061 return *this;
14062 }
14063#endif
14064};
14065
14066// weight_base_r - None
14067struct weight_base_r
14068{
14069#ifndef __cplusplus
14070 union
14071 {
14072 struct
14073 {
14074 uint32_t value_LO : 32; // 64-bit register value - LSB
14075 uint32_t value_HI : 32; // 64-bit register value - MSB
14076 };
14077 uint32_t word[2];
14078 };
14079#else
14080 private:
14081 uint32_t word0;
14082 uint32_t word1;
14083
14084 public:
14085 CONSTEXPR weight_base_r() : word0(0), word1(0) {}
14086 CONSTEXPR weight_base_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014087 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14088 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014089 {
14090 }
14091 CONSTEXPR void operator=(uint64_t value)
14092 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014093 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14094 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014095 }
14096 void operator=(uint64_t value) volatile
14097 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014098 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14099 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014100 }
14101 CONSTEXPR operator uint64_t()
14102 {
14103 return (static_cast<uint64_t>(word1) << 32) | word0;
14104 }
14105 operator uint64_t() volatile
14106 {
14107 return (static_cast<uint64_t>(word1) << 32) | word0;
14108 }
14109 weight_base_r copy() volatile
14110 {
14111 return *this;
14112 }
14113#endif
14114};
14115
14116// weight_length_r - None
14117struct weight_length_r
14118{
14119#ifndef __cplusplus
14120 union
14121 {
14122 struct
14123 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014124 uint32_t value_LO : 32; // 64-bit register value - LSB
14125 uint32_t value_HI : 32; // 64-bit register value - MSB
Jonny Svärd136810f2021-10-13 16:04:26 +020014126 };
Jonny Svärd13cb0892021-11-16 18:43:04 +010014127 uint32_t word[2];
Jonny Svärd136810f2021-10-13 16:04:26 +020014128 };
14129#else
14130 private:
14131 uint32_t word0;
Jonny Svärd13cb0892021-11-16 18:43:04 +010014132 uint32_t word1;
Jonny Svärd136810f2021-10-13 16:04:26 +020014133
14134 public:
Jonny Svärd13cb0892021-11-16 18:43:04 +010014135 CONSTEXPR weight_length_r() : word0(0), word1(0) {}
14136 CONSTEXPR weight_length_r(uint64_t init) :
14137 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14138 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014139 {
Jonny Svärd136810f2021-10-13 16:04:26 +020014140 }
Jonny Svärd13cb0892021-11-16 18:43:04 +010014141 CONSTEXPR void operator=(uint64_t value)
Jonny Svärd136810f2021-10-13 16:04:26 +020014142 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014143 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14144 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014145 }
Jonny Svärd13cb0892021-11-16 18:43:04 +010014146 void operator=(uint64_t value) volatile
Jonny Svärd136810f2021-10-13 16:04:26 +020014147 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014148 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14149 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014150 }
Jonny Svärd13cb0892021-11-16 18:43:04 +010014151 CONSTEXPR operator uint64_t()
Jonny Svärd136810f2021-10-13 16:04:26 +020014152 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014153 return (static_cast<uint64_t>(word1) << 32) | word0;
14154 }
14155 operator uint64_t() volatile
14156 {
14157 return (static_cast<uint64_t>(word1) << 32) | word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014158 }
14159 weight_length_r copy() volatile
14160 {
14161 return *this;
14162 }
Jonny Svärd136810f2021-10-13 16:04:26 +020014163#endif
14164};
14165
14166// scale_base_r - None
14167struct scale_base_r
14168{
14169#ifndef __cplusplus
14170 union
14171 {
14172 struct
14173 {
14174 uint32_t value_LO : 32; // 64-bit register value - LSB
14175 uint32_t value_HI : 32; // 64-bit register value - MSB
14176 };
14177 uint32_t word[2];
14178 };
14179#else
14180 private:
14181 uint32_t word0;
14182 uint32_t word1;
14183
14184 public:
14185 CONSTEXPR scale_base_r() : word0(0), word1(0) {}
14186 CONSTEXPR scale_base_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014187 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14188 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014189 {
14190 }
14191 CONSTEXPR void operator=(uint64_t value)
14192 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014193 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14194 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014195 }
14196 void operator=(uint64_t value) volatile
14197 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014198 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14199 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014200 }
14201 CONSTEXPR operator uint64_t()
14202 {
14203 return (static_cast<uint64_t>(word1) << 32) | word0;
14204 }
14205 operator uint64_t() volatile
14206 {
14207 return (static_cast<uint64_t>(word1) << 32) | word0;
14208 }
14209 scale_base_r copy() volatile
14210 {
14211 return *this;
14212 }
14213#endif
14214};
14215
14216// scale_length_r - None
14217struct scale_length_r
14218{
14219#ifndef __cplusplus
14220 union
14221 {
14222 struct
14223 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014224 uint32_t value_LO : 32; // 64-bit register value - LSB
14225 uint32_t value_HI : 32; // 64-bit register value - MSB
Jonny Svärd136810f2021-10-13 16:04:26 +020014226 };
Jonny Svärd13cb0892021-11-16 18:43:04 +010014227 uint32_t word[2];
Jonny Svärd136810f2021-10-13 16:04:26 +020014228 };
14229#else
14230 private:
14231 uint32_t word0;
Jonny Svärd13cb0892021-11-16 18:43:04 +010014232 uint32_t word1;
Jonny Svärd136810f2021-10-13 16:04:26 +020014233
14234 public:
Jonny Svärd13cb0892021-11-16 18:43:04 +010014235 CONSTEXPR scale_length_r() : word0(0), word1(0) {}
14236 CONSTEXPR scale_length_r(uint64_t init) :
14237 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14238 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014239 {
Jonny Svärd136810f2021-10-13 16:04:26 +020014240 }
Jonny Svärd13cb0892021-11-16 18:43:04 +010014241 CONSTEXPR void operator=(uint64_t value)
Jonny Svärd136810f2021-10-13 16:04:26 +020014242 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014243 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14244 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014245 }
Jonny Svärd13cb0892021-11-16 18:43:04 +010014246 void operator=(uint64_t value) volatile
Jonny Svärd136810f2021-10-13 16:04:26 +020014247 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014248 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14249 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014250 }
Jonny Svärd13cb0892021-11-16 18:43:04 +010014251 CONSTEXPR operator uint64_t()
Jonny Svärd136810f2021-10-13 16:04:26 +020014252 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014253 return (static_cast<uint64_t>(word1) << 32) | word0;
14254 }
14255 operator uint64_t() volatile
14256 {
14257 return (static_cast<uint64_t>(word1) << 32) | word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014258 }
14259 scale_length_r copy() volatile
14260 {
14261 return *this;
14262 }
Jonny Svärd136810f2021-10-13 16:04:26 +020014263#endif
14264};
14265
14266// ofm_scale_r - None
14267struct ofm_scale_r
14268{
14269#ifndef __cplusplus
14270 union
14271 {
14272 struct
14273 {
14274 uint32_t value : 32; // 32-bit register value
14275 };
14276 uint32_t word;
14277 };
14278#else
14279 private:
14280 uint32_t word0;
14281
14282 public:
14283 CONSTEXPR ofm_scale_r() : word0(0) {}
14284 CONSTEXPR ofm_scale_r(uint32_t init) : word0(init) {}
14285 CONSTEXPR void operator=(uint32_t value)
14286 {
14287 word0 = value;
14288 }
14289 void operator=(uint32_t value) volatile
14290 {
14291 word0 = value;
14292 }
14293 CONSTEXPR operator uint32_t()
14294 {
14295 return word0;
14296 }
14297 operator uint32_t() volatile
14298 {
14299 return word0;
14300 }
14301 ofm_scale_r copy() volatile
14302 {
14303 return *this;
14304 }
14305 CONSTEXPR uint32_t get_value() const
14306 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014307 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014308 return value;
14309 }
14310 uint32_t get_value() const volatile
14311 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014312 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014313 return value;
14314 }
14315 CONSTEXPR ofm_scale_r &set_value(uint32_t value)
14316 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014317 word0 = value;
14318 return *this;
14319 }
14320 volatile ofm_scale_r &set_value(uint32_t value) volatile
14321 {
14322 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020014323 return *this;
14324 }
14325#endif
14326};
14327
14328// ofm_scale_shift_r - None
14329struct ofm_scale_shift_r
14330{
14331#ifndef __cplusplus
14332 union
14333 {
14334 struct
14335 {
14336 uint32_t value : 32; // 32-bit register value
14337 };
14338 uint32_t word;
14339 };
14340#else
14341 private:
14342 uint32_t word0;
14343
14344 public:
14345 CONSTEXPR ofm_scale_shift_r() : word0(0) {}
14346 CONSTEXPR ofm_scale_shift_r(uint32_t init) : word0(init) {}
14347 CONSTEXPR void operator=(uint32_t value)
14348 {
14349 word0 = value;
14350 }
14351 void operator=(uint32_t value) volatile
14352 {
14353 word0 = value;
14354 }
14355 CONSTEXPR operator uint32_t()
14356 {
14357 return word0;
14358 }
14359 operator uint32_t() volatile
14360 {
14361 return word0;
14362 }
14363 ofm_scale_shift_r copy() volatile
14364 {
14365 return *this;
14366 }
14367 CONSTEXPR uint32_t get_value() const
14368 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014369 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014370 return value;
14371 }
14372 uint32_t get_value() const volatile
14373 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014374 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014375 return value;
14376 }
14377 CONSTEXPR ofm_scale_shift_r &set_value(uint32_t value)
14378 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014379 word0 = value;
14380 return *this;
14381 }
14382 volatile ofm_scale_shift_r &set_value(uint32_t value) volatile
14383 {
14384 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020014385 return *this;
14386 }
14387#endif
14388};
14389
14390// opa_scale_r - None
14391struct opa_scale_r
14392{
14393#ifndef __cplusplus
14394 union
14395 {
14396 struct
14397 {
14398 uint32_t value : 32; // 32-bit register value
14399 };
14400 uint32_t word;
14401 };
14402#else
14403 private:
14404 uint32_t word0;
14405
14406 public:
14407 CONSTEXPR opa_scale_r() : word0(0) {}
14408 CONSTEXPR opa_scale_r(uint32_t init) : word0(init) {}
14409 CONSTEXPR void operator=(uint32_t value)
14410 {
14411 word0 = value;
14412 }
14413 void operator=(uint32_t value) volatile
14414 {
14415 word0 = value;
14416 }
14417 CONSTEXPR operator uint32_t()
14418 {
14419 return word0;
14420 }
14421 operator uint32_t() volatile
14422 {
14423 return word0;
14424 }
14425 opa_scale_r copy() volatile
14426 {
14427 return *this;
14428 }
14429 CONSTEXPR uint32_t get_value() const
14430 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014431 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014432 return value;
14433 }
14434 uint32_t get_value() const volatile
14435 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014436 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014437 return value;
14438 }
14439 CONSTEXPR opa_scale_r &set_value(uint32_t value)
14440 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014441 word0 = value;
14442 return *this;
14443 }
14444 volatile opa_scale_r &set_value(uint32_t value) volatile
14445 {
14446 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020014447 return *this;
14448 }
14449#endif
14450};
14451
14452// opa_scale_shift_r - None
14453struct opa_scale_shift_r
14454{
14455#ifndef __cplusplus
14456 union
14457 {
14458 struct
14459 {
14460 uint32_t value : 32; // 32-bit register value
14461 };
14462 uint32_t word;
14463 };
14464#else
14465 private:
14466 uint32_t word0;
14467
14468 public:
14469 CONSTEXPR opa_scale_shift_r() : word0(0) {}
14470 CONSTEXPR opa_scale_shift_r(uint32_t init) : word0(init) {}
14471 CONSTEXPR void operator=(uint32_t value)
14472 {
14473 word0 = value;
14474 }
14475 void operator=(uint32_t value) volatile
14476 {
14477 word0 = value;
14478 }
14479 CONSTEXPR operator uint32_t()
14480 {
14481 return word0;
14482 }
14483 operator uint32_t() volatile
14484 {
14485 return word0;
14486 }
14487 opa_scale_shift_r copy() volatile
14488 {
14489 return *this;
14490 }
14491 CONSTEXPR uint32_t get_value() const
14492 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014493 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014494 return value;
14495 }
14496 uint32_t get_value() const volatile
14497 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014498 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014499 return value;
14500 }
14501 CONSTEXPR opa_scale_shift_r &set_value(uint32_t value)
14502 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014503 word0 = value;
14504 return *this;
14505 }
14506 volatile opa_scale_shift_r &set_value(uint32_t value) volatile
14507 {
14508 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020014509 return *this;
14510 }
14511#endif
14512};
14513
14514// opb_scale_r - None
14515struct opb_scale_r
14516{
14517#ifndef __cplusplus
14518 union
14519 {
14520 struct
14521 {
14522 uint32_t value : 32; // 32-bit register value
14523 };
14524 uint32_t word;
14525 };
14526#else
14527 private:
14528 uint32_t word0;
14529
14530 public:
14531 CONSTEXPR opb_scale_r() : word0(0) {}
14532 CONSTEXPR opb_scale_r(uint32_t init) : word0(init) {}
14533 CONSTEXPR void operator=(uint32_t value)
14534 {
14535 word0 = value;
14536 }
14537 void operator=(uint32_t value) volatile
14538 {
14539 word0 = value;
14540 }
14541 CONSTEXPR operator uint32_t()
14542 {
14543 return word0;
14544 }
14545 operator uint32_t() volatile
14546 {
14547 return word0;
14548 }
14549 opb_scale_r copy() volatile
14550 {
14551 return *this;
14552 }
14553 CONSTEXPR uint32_t get_value() const
14554 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014555 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014556 return value;
14557 }
14558 uint32_t get_value() const volatile
14559 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014560 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020014561 return value;
14562 }
14563 CONSTEXPR opb_scale_r &set_value(uint32_t value)
14564 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014565 word0 = value;
14566 return *this;
14567 }
14568 volatile opb_scale_r &set_value(uint32_t value) volatile
14569 {
14570 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020014571 return *this;
14572 }
14573#endif
14574};
14575
14576// dma0_src_r - None
14577struct dma0_src_r
14578{
14579#ifndef __cplusplus
14580 union
14581 {
14582 struct
14583 {
14584 uint32_t value_LO : 32; // 64-bit register value - LSB
14585 uint32_t value_HI : 32; // 64-bit register value - MSB
14586 };
14587 uint32_t word[2];
14588 };
14589#else
14590 private:
14591 uint32_t word0;
14592 uint32_t word1;
14593
14594 public:
14595 CONSTEXPR dma0_src_r() : word0(0), word1(0) {}
14596 CONSTEXPR dma0_src_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014597 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14598 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014599 {
14600 }
14601 CONSTEXPR void operator=(uint64_t value)
14602 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014603 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14604 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014605 }
14606 void operator=(uint64_t value) volatile
14607 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014608 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14609 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014610 }
14611 CONSTEXPR operator uint64_t()
14612 {
14613 return (static_cast<uint64_t>(word1) << 32) | word0;
14614 }
14615 operator uint64_t() volatile
14616 {
14617 return (static_cast<uint64_t>(word1) << 32) | word0;
14618 }
14619 dma0_src_r copy() volatile
14620 {
14621 return *this;
14622 }
14623#endif
14624};
14625
14626// dma0_dst_r - None
14627struct dma0_dst_r
14628{
14629#ifndef __cplusplus
14630 union
14631 {
14632 struct
14633 {
14634 uint32_t value_LO : 32; // 64-bit register value - LSB
14635 uint32_t value_HI : 32; // 64-bit register value - MSB
14636 };
14637 uint32_t word[2];
14638 };
14639#else
14640 private:
14641 uint32_t word0;
14642 uint32_t word1;
14643
14644 public:
14645 CONSTEXPR dma0_dst_r() : word0(0), word1(0) {}
14646 CONSTEXPR dma0_dst_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014647 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14648 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014649 {
14650 }
14651 CONSTEXPR void operator=(uint64_t value)
14652 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014653 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14654 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014655 }
14656 void operator=(uint64_t value) volatile
14657 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014658 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14659 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014660 }
14661 CONSTEXPR operator uint64_t()
14662 {
14663 return (static_cast<uint64_t>(word1) << 32) | word0;
14664 }
14665 operator uint64_t() volatile
14666 {
14667 return (static_cast<uint64_t>(word1) << 32) | word0;
14668 }
14669 dma0_dst_r copy() volatile
14670 {
14671 return *this;
14672 }
14673#endif
14674};
14675
14676// dma0_len_r - None
14677struct dma0_len_r
14678{
14679#ifndef __cplusplus
14680 union
14681 {
14682 struct
14683 {
14684 uint32_t value_LO : 32; // 64-bit register value - LSB
14685 uint32_t value_HI : 32; // 64-bit register value - MSB
14686 };
14687 uint32_t word[2];
14688 };
14689#else
14690 private:
14691 uint32_t word0;
14692 uint32_t word1;
14693
14694 public:
14695 CONSTEXPR dma0_len_r() : word0(0), word1(0) {}
14696 CONSTEXPR dma0_len_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014697 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14698 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014699 {
14700 }
14701 CONSTEXPR void operator=(uint64_t value)
14702 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014703 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14704 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014705 }
14706 void operator=(uint64_t value) volatile
14707 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014708 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14709 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014710 }
14711 CONSTEXPR operator uint64_t()
14712 {
14713 return (static_cast<uint64_t>(word1) << 32) | word0;
14714 }
14715 operator uint64_t() volatile
14716 {
14717 return (static_cast<uint64_t>(word1) << 32) | word0;
14718 }
14719 dma0_len_r copy() volatile
14720 {
14721 return *this;
14722 }
14723#endif
14724};
14725
14726// ifm2_base0_r - None
14727struct ifm2_base0_r
14728{
14729#ifndef __cplusplus
14730 union
14731 {
14732 struct
14733 {
14734 uint32_t value_LO : 32; // 64-bit register value - LSB
14735 uint32_t value_HI : 32; // 64-bit register value - MSB
14736 };
14737 uint32_t word[2];
14738 };
14739#else
14740 private:
14741 uint32_t word0;
14742 uint32_t word1;
14743
14744 public:
14745 CONSTEXPR ifm2_base0_r() : word0(0), word1(0) {}
14746 CONSTEXPR ifm2_base0_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014747 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14748 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014749 {
14750 }
14751 CONSTEXPR void operator=(uint64_t value)
14752 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014753 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14754 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014755 }
14756 void operator=(uint64_t value) volatile
14757 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014758 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14759 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014760 }
14761 CONSTEXPR operator uint64_t()
14762 {
14763 return (static_cast<uint64_t>(word1) << 32) | word0;
14764 }
14765 operator uint64_t() volatile
14766 {
14767 return (static_cast<uint64_t>(word1) << 32) | word0;
14768 }
14769 ifm2_base0_r copy() volatile
14770 {
14771 return *this;
14772 }
14773#endif
14774};
14775
14776// ifm2_base1_r - None
14777struct ifm2_base1_r
14778{
14779#ifndef __cplusplus
14780 union
14781 {
14782 struct
14783 {
14784 uint32_t value_LO : 32; // 64-bit register value - LSB
14785 uint32_t value_HI : 32; // 64-bit register value - MSB
14786 };
14787 uint32_t word[2];
14788 };
14789#else
14790 private:
14791 uint32_t word0;
14792 uint32_t word1;
14793
14794 public:
14795 CONSTEXPR ifm2_base1_r() : word0(0), word1(0) {}
14796 CONSTEXPR ifm2_base1_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014797 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14798 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014799 {
14800 }
14801 CONSTEXPR void operator=(uint64_t value)
14802 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014803 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14804 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014805 }
14806 void operator=(uint64_t value) volatile
14807 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014808 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14809 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014810 }
14811 CONSTEXPR operator uint64_t()
14812 {
14813 return (static_cast<uint64_t>(word1) << 32) | word0;
14814 }
14815 operator uint64_t() volatile
14816 {
14817 return (static_cast<uint64_t>(word1) << 32) | word0;
14818 }
14819 ifm2_base1_r copy() volatile
14820 {
14821 return *this;
14822 }
14823#endif
14824};
14825
14826// ifm2_base2_r - None
14827struct ifm2_base2_r
14828{
14829#ifndef __cplusplus
14830 union
14831 {
14832 struct
14833 {
14834 uint32_t value_LO : 32; // 64-bit register value - LSB
14835 uint32_t value_HI : 32; // 64-bit register value - MSB
14836 };
14837 uint32_t word[2];
14838 };
14839#else
14840 private:
14841 uint32_t word0;
14842 uint32_t word1;
14843
14844 public:
14845 CONSTEXPR ifm2_base2_r() : word0(0), word1(0) {}
14846 CONSTEXPR ifm2_base2_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014847 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14848 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014849 {
14850 }
14851 CONSTEXPR void operator=(uint64_t value)
14852 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014853 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14854 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014855 }
14856 void operator=(uint64_t value) volatile
14857 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014858 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14859 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014860 }
14861 CONSTEXPR operator uint64_t()
14862 {
14863 return (static_cast<uint64_t>(word1) << 32) | word0;
14864 }
14865 operator uint64_t() volatile
14866 {
14867 return (static_cast<uint64_t>(word1) << 32) | word0;
14868 }
14869 ifm2_base2_r copy() volatile
14870 {
14871 return *this;
14872 }
14873#endif
14874};
14875
14876// ifm2_base3_r - None
14877struct ifm2_base3_r
14878{
14879#ifndef __cplusplus
14880 union
14881 {
14882 struct
14883 {
14884 uint32_t value_LO : 32; // 64-bit register value - LSB
14885 uint32_t value_HI : 32; // 64-bit register value - MSB
14886 };
14887 uint32_t word[2];
14888 };
14889#else
14890 private:
14891 uint32_t word0;
14892 uint32_t word1;
14893
14894 public:
14895 CONSTEXPR ifm2_base3_r() : word0(0), word1(0) {}
14896 CONSTEXPR ifm2_base3_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014897 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14898 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014899 {
14900 }
14901 CONSTEXPR void operator=(uint64_t value)
14902 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014903 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14904 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014905 }
14906 void operator=(uint64_t value) volatile
14907 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014908 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14909 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014910 }
14911 CONSTEXPR operator uint64_t()
14912 {
14913 return (static_cast<uint64_t>(word1) << 32) | word0;
14914 }
14915 operator uint64_t() volatile
14916 {
14917 return (static_cast<uint64_t>(word1) << 32) | word0;
14918 }
14919 ifm2_base3_r copy() volatile
14920 {
14921 return *this;
14922 }
14923#endif
14924};
14925
14926// ifm2_stride_x_r - None
14927struct ifm2_stride_x_r
14928{
14929#ifndef __cplusplus
14930 union
14931 {
14932 struct
14933 {
14934 uint32_t value_LO : 32; // 64-bit register value - LSB
14935 uint32_t value_HI : 32; // 64-bit register value - MSB
14936 };
14937 uint32_t word[2];
14938 };
14939#else
14940 private:
14941 uint32_t word0;
14942 uint32_t word1;
14943
14944 public:
14945 CONSTEXPR ifm2_stride_x_r() : word0(0), word1(0) {}
14946 CONSTEXPR ifm2_stride_x_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014947 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14948 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014949 {
14950 }
14951 CONSTEXPR void operator=(uint64_t value)
14952 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014953 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14954 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014955 }
14956 void operator=(uint64_t value) volatile
14957 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010014958 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
14959 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020014960 }
14961 CONSTEXPR operator uint64_t()
14962 {
14963 return (static_cast<uint64_t>(word1) << 32) | word0;
14964 }
14965 operator uint64_t() volatile
14966 {
14967 return (static_cast<uint64_t>(word1) << 32) | word0;
14968 }
14969 ifm2_stride_x_r copy() volatile
14970 {
14971 return *this;
14972 }
14973#endif
14974};
14975
14976// ifm2_stride_y_r - None
14977struct ifm2_stride_y_r
14978{
14979#ifndef __cplusplus
14980 union
14981 {
14982 struct
14983 {
14984 uint32_t value_LO : 32; // 64-bit register value - LSB
14985 uint32_t value_HI : 32; // 64-bit register value - MSB
14986 };
14987 uint32_t word[2];
14988 };
14989#else
14990 private:
14991 uint32_t word0;
14992 uint32_t word1;
14993
14994 public:
14995 CONSTEXPR ifm2_stride_y_r() : word0(0), word1(0) {}
14996 CONSTEXPR ifm2_stride_y_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010014997 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
14998 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020014999 {
15000 }
15001 CONSTEXPR void operator=(uint64_t value)
15002 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015003 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
15004 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020015005 }
15006 void operator=(uint64_t value) volatile
15007 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015008 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
15009 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020015010 }
15011 CONSTEXPR operator uint64_t()
15012 {
15013 return (static_cast<uint64_t>(word1) << 32) | word0;
15014 }
15015 operator uint64_t() volatile
15016 {
15017 return (static_cast<uint64_t>(word1) << 32) | word0;
15018 }
15019 ifm2_stride_y_r copy() volatile
15020 {
15021 return *this;
15022 }
15023#endif
15024};
15025
15026// ifm2_stride_c_r - None
15027struct ifm2_stride_c_r
15028{
15029#ifndef __cplusplus
15030 union
15031 {
15032 struct
15033 {
15034 uint32_t value_LO : 32; // 64-bit register value - LSB
15035 uint32_t value_HI : 32; // 64-bit register value - MSB
15036 };
15037 uint32_t word[2];
15038 };
15039#else
15040 private:
15041 uint32_t word0;
15042 uint32_t word1;
15043
15044 public:
15045 CONSTEXPR ifm2_stride_c_r() : word0(0), word1(0) {}
15046 CONSTEXPR ifm2_stride_c_r(uint64_t init) :
Jonny Svärd13cb0892021-11-16 18:43:04 +010015047 word0(static_cast<uint32_t>((init)&std::numeric_limits<uint64_t>::max())),
15048 word1(static_cast<uint32_t>((init >> 32) & std::numeric_limits<uint64_t>::max()))
Jonny Svärd136810f2021-10-13 16:04:26 +020015049 {
15050 }
15051 CONSTEXPR void operator=(uint64_t value)
15052 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015053 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
15054 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020015055 }
15056 void operator=(uint64_t value) volatile
15057 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015058 word0 = static_cast<uint32_t>((value)&std::numeric_limits<uint64_t>::max());
15059 word1 = static_cast<uint32_t>((value >> 32) & std::numeric_limits<uint64_t>::max());
Jonny Svärd136810f2021-10-13 16:04:26 +020015060 }
15061 CONSTEXPR operator uint64_t()
15062 {
15063 return (static_cast<uint64_t>(word1) << 32) | word0;
15064 }
15065 operator uint64_t() volatile
15066 {
15067 return (static_cast<uint64_t>(word1) << 32) | word0;
15068 }
15069 ifm2_stride_c_r copy() volatile
15070 {
15071 return *this;
15072 }
15073#endif
15074};
15075
15076// revision_r - Internal FPGA build revision: first 32-bits of the Ultan Git hash used for the build
15077struct revision_r
15078{
15079#ifndef __cplusplus
15080 union
15081 {
15082 struct
15083 {
15084 uint32_t value : 32; // 32-bit register value
15085 };
15086 uint32_t word;
15087 };
15088#else
15089 private:
15090 uint32_t word0;
15091
15092 public:
15093 CONSTEXPR revision_r() : word0(0) {}
15094 CONSTEXPR revision_r(uint32_t init) : word0(init) {}
15095 CONSTEXPR void operator=(uint32_t value)
15096 {
15097 word0 = value;
15098 }
15099 void operator=(uint32_t value) volatile
15100 {
15101 word0 = value;
15102 }
15103 CONSTEXPR operator uint32_t()
15104 {
15105 return word0;
15106 }
15107 operator uint32_t() volatile
15108 {
15109 return word0;
15110 }
15111 revision_r copy() volatile
15112 {
15113 return *this;
15114 }
15115 CONSTEXPR uint32_t get_value() const
15116 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015117 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015118 return value;
15119 }
15120 uint32_t get_value() const volatile
15121 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015122 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015123 return value;
15124 }
15125 CONSTEXPR revision_r &set_value(uint32_t value)
15126 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015127 word0 = value;
15128 return *this;
15129 }
15130 volatile revision_r &set_value(uint32_t value) volatile
15131 {
15132 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015133 return *this;
15134 }
15135#endif
15136};
15137
15138// pid4_r - Peripheral ID byte 4 (Arm=code 4)
15139struct pid4_r
15140{
15141#ifndef __cplusplus
15142 union
15143 {
15144 struct
15145 {
15146 uint32_t PID4 : 32; // Byte 4 of Peripheral ID (Lower 8 bits valid)
15147 };
15148 uint32_t word;
15149 };
15150#else
15151 private:
15152 uint32_t word0;
15153
15154 public:
15155 CONSTEXPR pid4_r() : word0(4) {}
15156 CONSTEXPR pid4_r(uint32_t init) : word0(init) {}
15157 CONSTEXPR void operator=(uint32_t value)
15158 {
15159 word0 = value;
15160 }
15161 void operator=(uint32_t value) volatile
15162 {
15163 word0 = value;
15164 }
15165 CONSTEXPR operator uint32_t()
15166 {
15167 return word0;
15168 }
15169 operator uint32_t() volatile
15170 {
15171 return word0;
15172 }
15173 pid4_r copy() volatile
15174 {
15175 return *this;
15176 }
15177 CONSTEXPR uint32_t get_PID4() const
15178 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015179 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015180 return value;
15181 }
15182 uint32_t get_PID4() const volatile
15183 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015184 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015185 return value;
15186 }
15187 CONSTEXPR pid4_r &set_PID4(uint32_t value)
15188 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015189 word0 = value;
15190 return *this;
15191 }
15192 volatile pid4_r &set_PID4(uint32_t value) volatile
15193 {
15194 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015195 return *this;
15196 }
15197#endif
15198};
15199
15200// pid5_r - Peripheral ID byte 5 (reserved)
15201struct pid5_r
15202{
15203#ifndef __cplusplus
15204 union
15205 {
15206 struct
15207 {
15208 uint32_t PID5 : 32; // Byte 5 of Peripheral ID (Lower 8 bits valid)
15209 };
15210 uint32_t word;
15211 };
15212#else
15213 private:
15214 uint32_t word0;
15215
15216 public:
15217 CONSTEXPR pid5_r() : word0(0) {}
15218 CONSTEXPR pid5_r(uint32_t init) : word0(init) {}
15219 CONSTEXPR void operator=(uint32_t value)
15220 {
15221 word0 = value;
15222 }
15223 void operator=(uint32_t value) volatile
15224 {
15225 word0 = value;
15226 }
15227 CONSTEXPR operator uint32_t()
15228 {
15229 return word0;
15230 }
15231 operator uint32_t() volatile
15232 {
15233 return word0;
15234 }
15235 pid5_r copy() volatile
15236 {
15237 return *this;
15238 }
15239 CONSTEXPR uint32_t get_PID5() const
15240 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015241 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015242 return value;
15243 }
15244 uint32_t get_PID5() const volatile
15245 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015246 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015247 return value;
15248 }
15249 CONSTEXPR pid5_r &set_PID5(uint32_t value)
15250 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015251 word0 = value;
15252 return *this;
15253 }
15254 volatile pid5_r &set_PID5(uint32_t value) volatile
15255 {
15256 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015257 return *this;
15258 }
15259#endif
15260};
15261
15262// pid6_r - Peripheral ID byte 6 (reserved)
15263struct pid6_r
15264{
15265#ifndef __cplusplus
15266 union
15267 {
15268 struct
15269 {
15270 uint32_t PID6 : 32; // Byte 6 of Peripheral ID (Lower 8 bits valid)
15271 };
15272 uint32_t word;
15273 };
15274#else
15275 private:
15276 uint32_t word0;
15277
15278 public:
15279 CONSTEXPR pid6_r() : word0(0) {}
15280 CONSTEXPR pid6_r(uint32_t init) : word0(init) {}
15281 CONSTEXPR void operator=(uint32_t value)
15282 {
15283 word0 = value;
15284 }
15285 void operator=(uint32_t value) volatile
15286 {
15287 word0 = value;
15288 }
15289 CONSTEXPR operator uint32_t()
15290 {
15291 return word0;
15292 }
15293 operator uint32_t() volatile
15294 {
15295 return word0;
15296 }
15297 pid6_r copy() volatile
15298 {
15299 return *this;
15300 }
15301 CONSTEXPR uint32_t get_PID6() const
15302 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015303 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015304 return value;
15305 }
15306 uint32_t get_PID6() const volatile
15307 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015308 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015309 return value;
15310 }
15311 CONSTEXPR pid6_r &set_PID6(uint32_t value)
15312 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015313 word0 = value;
15314 return *this;
15315 }
15316 volatile pid6_r &set_PID6(uint32_t value) volatile
15317 {
15318 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015319 return *this;
15320 }
15321#endif
15322};
15323
15324// pid7_r - Peripheral ID byte 7 (reserved)
15325struct pid7_r
15326{
15327#ifndef __cplusplus
15328 union
15329 {
15330 struct
15331 {
15332 uint32_t PID7 : 32; // Byte 7 of Peripheral ID (Lower 8 bits valid)
15333 };
15334 uint32_t word;
15335 };
15336#else
15337 private:
15338 uint32_t word0;
15339
15340 public:
15341 CONSTEXPR pid7_r() : word0(0) {}
15342 CONSTEXPR pid7_r(uint32_t init) : word0(init) {}
15343 CONSTEXPR void operator=(uint32_t value)
15344 {
15345 word0 = value;
15346 }
15347 void operator=(uint32_t value) volatile
15348 {
15349 word0 = value;
15350 }
15351 CONSTEXPR operator uint32_t()
15352 {
15353 return word0;
15354 }
15355 operator uint32_t() volatile
15356 {
15357 return word0;
15358 }
15359 pid7_r copy() volatile
15360 {
15361 return *this;
15362 }
15363 CONSTEXPR uint32_t get_PID7() const
15364 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015365 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015366 return value;
15367 }
15368 uint32_t get_PID7() const volatile
15369 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015370 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015371 return value;
15372 }
15373 CONSTEXPR pid7_r &set_PID7(uint32_t value)
15374 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015375 word0 = value;
15376 return *this;
15377 }
15378 volatile pid7_r &set_PID7(uint32_t value) volatile
15379 {
15380 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015381 return *this;
15382 }
15383#endif
15384};
15385
15386// pid0_r - Peripheral ID byte 0. This is bits[7:0] of the part number
15387struct pid0_r
15388{
15389#ifndef __cplusplus
15390 union
15391 {
15392 struct
15393 {
15394 uint32_t PID0 : 32; // Byte 0 of Peripheral ID (Lower 8 bits valid)
15395 };
15396 uint32_t word;
15397 };
15398#else
15399 private:
15400 uint32_t word0;
15401
15402 public:
15403 CONSTEXPR pid0_r() : word0(128) {}
15404 CONSTEXPR pid0_r(uint32_t init) : word0(init) {}
15405 CONSTEXPR void operator=(uint32_t value)
15406 {
15407 word0 = value;
15408 }
15409 void operator=(uint32_t value) volatile
15410 {
15411 word0 = value;
15412 }
15413 CONSTEXPR operator uint32_t()
15414 {
15415 return word0;
15416 }
15417 operator uint32_t() volatile
15418 {
15419 return word0;
15420 }
15421 pid0_r copy() volatile
15422 {
15423 return *this;
15424 }
15425 CONSTEXPR uint32_t get_PID0() const
15426 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015427 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015428 return value;
15429 }
15430 uint32_t get_PID0() const volatile
15431 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015432 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015433 return value;
15434 }
15435 CONSTEXPR pid0_r &set_PID0(uint32_t value)
15436 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015437 word0 = value;
15438 return *this;
15439 }
15440 volatile pid0_r &set_PID0(uint32_t value) volatile
15441 {
15442 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015443 return *this;
15444 }
15445#endif
15446};
15447
15448// 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
15449// bits[7:4]
15450struct pid1_r
15451{
15452#ifndef __cplusplus
15453 union
15454 {
15455 struct
15456 {
15457 uint32_t PID1 : 32; // Byte 1 of Peripheral ID (Lower 8 bits valid)
15458 };
15459 uint32_t word;
15460 };
15461#else
15462 private:
15463 uint32_t word0;
15464
15465 public:
15466 CONSTEXPR pid1_r() : word0(181) {}
15467 CONSTEXPR pid1_r(uint32_t init) : word0(init) {}
15468 CONSTEXPR void operator=(uint32_t value)
15469 {
15470 word0 = value;
15471 }
15472 void operator=(uint32_t value) volatile
15473 {
15474 word0 = value;
15475 }
15476 CONSTEXPR operator uint32_t()
15477 {
15478 return word0;
15479 }
15480 operator uint32_t() volatile
15481 {
15482 return word0;
15483 }
15484 pid1_r copy() volatile
15485 {
15486 return *this;
15487 }
15488 CONSTEXPR uint32_t get_PID1() const
15489 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015490 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015491 return value;
15492 }
15493 uint32_t get_PID1() const volatile
15494 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015495 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015496 return value;
15497 }
15498 CONSTEXPR pid1_r &set_PID1(uint32_t value)
15499 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015500 word0 = value;
15501 return *this;
15502 }
15503 volatile pid1_r &set_PID1(uint32_t value) volatile
15504 {
15505 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015506 return *this;
15507 }
15508#endif
15509};
15510
15511// 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
15512struct pid2_r
15513{
15514#ifndef __cplusplus
15515 union
15516 {
15517 struct
15518 {
15519 uint32_t PID2 : 32; // Byte 2 of Peripheral ID (Lower 8 bits valid)
15520 };
15521 uint32_t word;
15522 };
15523#else
15524 private:
15525 uint32_t word0;
15526
15527 public:
15528 CONSTEXPR pid2_r() : word0(11) {}
15529 CONSTEXPR pid2_r(uint32_t init) : word0(init) {}
15530 CONSTEXPR void operator=(uint32_t value)
15531 {
15532 word0 = value;
15533 }
15534 void operator=(uint32_t value) volatile
15535 {
15536 word0 = value;
15537 }
15538 CONSTEXPR operator uint32_t()
15539 {
15540 return word0;
15541 }
15542 operator uint32_t() volatile
15543 {
15544 return word0;
15545 }
15546 pid2_r copy() volatile
15547 {
15548 return *this;
15549 }
15550 CONSTEXPR uint32_t get_PID2() const
15551 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015552 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015553 return value;
15554 }
15555 uint32_t get_PID2() const volatile
15556 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015557 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015558 return value;
15559 }
15560 CONSTEXPR pid2_r &set_PID2(uint32_t value)
15561 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015562 word0 = value;
15563 return *this;
15564 }
15565 volatile pid2_r &set_PID2(uint32_t value) volatile
15566 {
15567 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015568 return *this;
15569 }
15570#endif
15571};
15572
15573// pid3_r - Peripheral ID byte 3
15574struct pid3_r
15575{
15576#ifndef __cplusplus
15577 union
15578 {
15579 struct
15580 {
15581 uint32_t PID3 : 32; // Byte 1 of Peripheral ID (Lower 8 bits valid)
15582 };
15583 uint32_t word;
15584 };
15585#else
15586 private:
15587 uint32_t word0;
15588
15589 public:
15590 CONSTEXPR pid3_r() : word0(0) {}
15591 CONSTEXPR pid3_r(uint32_t init) : word0(init) {}
15592 CONSTEXPR void operator=(uint32_t value)
15593 {
15594 word0 = value;
15595 }
15596 void operator=(uint32_t value) volatile
15597 {
15598 word0 = value;
15599 }
15600 CONSTEXPR operator uint32_t()
15601 {
15602 return word0;
15603 }
15604 operator uint32_t() volatile
15605 {
15606 return word0;
15607 }
15608 pid3_r copy() volatile
15609 {
15610 return *this;
15611 }
15612 CONSTEXPR uint32_t get_PID3() const
15613 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015614 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015615 return value;
15616 }
15617 uint32_t get_PID3() const volatile
15618 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015619 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015620 return value;
15621 }
15622 CONSTEXPR pid3_r &set_PID3(uint32_t value)
15623 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015624 word0 = value;
15625 return *this;
15626 }
15627 volatile pid3_r &set_PID3(uint32_t value) volatile
15628 {
15629 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015630 return *this;
15631 }
15632#endif
15633};
15634
15635// cid0_r - Component ID byte 0
15636struct cid0_r
15637{
15638#ifndef __cplusplus
15639 union
15640 {
15641 struct
15642 {
15643 uint32_t CID0 : 32; // Byte 0 of Component ID (Lower 8 bits valid)
15644 };
15645 uint32_t word;
15646 };
15647#else
15648 private:
15649 uint32_t word0;
15650
15651 public:
15652 CONSTEXPR cid0_r() : word0(13) {}
15653 CONSTEXPR cid0_r(uint32_t init) : word0(init) {}
15654 CONSTEXPR void operator=(uint32_t value)
15655 {
15656 word0 = value;
15657 }
15658 void operator=(uint32_t value) volatile
15659 {
15660 word0 = value;
15661 }
15662 CONSTEXPR operator uint32_t()
15663 {
15664 return word0;
15665 }
15666 operator uint32_t() volatile
15667 {
15668 return word0;
15669 }
15670 cid0_r copy() volatile
15671 {
15672 return *this;
15673 }
15674 CONSTEXPR uint32_t get_CID0() const
15675 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015676 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015677 return value;
15678 }
15679 uint32_t get_CID0() const volatile
15680 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015681 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015682 return value;
15683 }
15684 CONSTEXPR cid0_r &set_CID0(uint32_t value)
15685 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015686 word0 = value;
15687 return *this;
15688 }
15689 volatile cid0_r &set_CID0(uint32_t value) volatile
15690 {
15691 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015692 return *this;
15693 }
15694#endif
15695};
15696
15697// cid1_r - Component ID byte 1
15698struct cid1_r
15699{
15700#ifndef __cplusplus
15701 union
15702 {
15703 struct
15704 {
15705 uint32_t CID1 : 32; // Byte 1 of Component ID (Lower 8 bits valid)
15706 };
15707 uint32_t word;
15708 };
15709#else
15710 private:
15711 uint32_t word0;
15712
15713 public:
15714 CONSTEXPR cid1_r() : word0(240) {}
15715 CONSTEXPR cid1_r(uint32_t init) : word0(init) {}
15716 CONSTEXPR void operator=(uint32_t value)
15717 {
15718 word0 = value;
15719 }
15720 void operator=(uint32_t value) volatile
15721 {
15722 word0 = value;
15723 }
15724 CONSTEXPR operator uint32_t()
15725 {
15726 return word0;
15727 }
15728 operator uint32_t() volatile
15729 {
15730 return word0;
15731 }
15732 cid1_r copy() volatile
15733 {
15734 return *this;
15735 }
15736 CONSTEXPR uint32_t get_CID1() const
15737 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015738 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015739 return value;
15740 }
15741 uint32_t get_CID1() const volatile
15742 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015743 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015744 return value;
15745 }
15746 CONSTEXPR cid1_r &set_CID1(uint32_t value)
15747 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015748 word0 = value;
15749 return *this;
15750 }
15751 volatile cid1_r &set_CID1(uint32_t value) volatile
15752 {
15753 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015754 return *this;
15755 }
15756#endif
15757};
15758
15759// cid2_r - Component ID byte 2
15760struct cid2_r
15761{
15762#ifndef __cplusplus
15763 union
15764 {
15765 struct
15766 {
15767 uint32_t CID2 : 32; // Byte 2 of Component ID (Lower 8 bits valid)
15768 };
15769 uint32_t word;
15770 };
15771#else
15772 private:
15773 uint32_t word0;
15774
15775 public:
15776 CONSTEXPR cid2_r() : word0(5) {}
15777 CONSTEXPR cid2_r(uint32_t init) : word0(init) {}
15778 CONSTEXPR void operator=(uint32_t value)
15779 {
15780 word0 = value;
15781 }
15782 void operator=(uint32_t value) volatile
15783 {
15784 word0 = value;
15785 }
15786 CONSTEXPR operator uint32_t()
15787 {
15788 return word0;
15789 }
15790 operator uint32_t() volatile
15791 {
15792 return word0;
15793 }
15794 cid2_r copy() volatile
15795 {
15796 return *this;
15797 }
15798 CONSTEXPR uint32_t get_CID2() const
15799 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015800 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015801 return value;
15802 }
15803 uint32_t get_CID2() const volatile
15804 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015805 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015806 return value;
15807 }
15808 CONSTEXPR cid2_r &set_CID2(uint32_t value)
15809 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015810 word0 = value;
15811 return *this;
15812 }
15813 volatile cid2_r &set_CID2(uint32_t value) volatile
15814 {
15815 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015816 return *this;
15817 }
15818#endif
15819};
15820
15821// cid3_r - Component ID byte 3
15822struct cid3_r
15823{
15824#ifndef __cplusplus
15825 union
15826 {
15827 struct
15828 {
15829 uint32_t CID3 : 32; // Byte 3 of Component ID (Lower 8 bits valid)
15830 };
15831 uint32_t word;
15832 };
15833#else
15834 private:
15835 uint32_t word0;
15836
15837 public:
15838 CONSTEXPR cid3_r() : word0(177) {}
15839 CONSTEXPR cid3_r(uint32_t init) : word0(init) {}
15840 CONSTEXPR void operator=(uint32_t value)
15841 {
15842 word0 = value;
15843 }
15844 void operator=(uint32_t value) volatile
15845 {
15846 word0 = value;
15847 }
15848 CONSTEXPR operator uint32_t()
15849 {
15850 return word0;
15851 }
15852 operator uint32_t() volatile
15853 {
15854 return word0;
15855 }
15856 cid3_r copy() volatile
15857 {
15858 return *this;
15859 }
15860 CONSTEXPR uint32_t get_CID3() const
15861 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015862 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015863 return value;
15864 }
15865 uint32_t get_CID3() const volatile
15866 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015867 uint32_t value = word0;
Jonny Svärd136810f2021-10-13 16:04:26 +020015868 return value;
15869 }
15870 CONSTEXPR cid3_r &set_CID3(uint32_t value)
15871 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010015872 word0 = value;
15873 return *this;
15874 }
15875 volatile cid3_r &set_CID3(uint32_t value) volatile
15876 {
15877 word0 = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020015878 return *this;
15879 }
15880#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020015881};
15882
15883struct NPU_REG
15884{
Jonny Svärd136810f2021-10-13 16:04:26 +020015885 STRUCT id_r ID; // 0x0000
15886 STRUCT status_r STATUS; // 0x0004
15887 STRUCT cmd_r CMD; // 0x0008
15888 STRUCT reset_r RESET; // 0x000C
15889 STRUCT qbase_r QBASE; // 0x0010
15890 STRUCT qread_r QREAD; // 0x0018
15891 STRUCT qconfig_r QCONFIG; // 0x001C
15892 STRUCT qsize_r QSIZE; // 0x0020
15893 STRUCT prot_r PROT; // 0x0024
15894 STRUCT config_r CONFIG; // 0x0028
15895 STRUCT lock_r LOCK; // 0x002C
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020015896 uint32_t unused0[3];
Jonny Svärd136810f2021-10-13 16:04:26 +020015897 STRUCT regioncfg_r REGIONCFG; // 0x003C
15898 STRUCT axi_limit0_r AXI_LIMIT0; // 0x0040
15899 STRUCT axi_limit1_r AXI_LIMIT1; // 0x0044
15900 STRUCT axi_limit2_r AXI_LIMIT2; // 0x0048
15901 STRUCT axi_limit3_r AXI_LIMIT3; // 0x004C
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020015902 uint32_t unused1[12];
Jonny Svärd136810f2021-10-13 16:04:26 +020015903 STRUCT basep_r BASEP[8]; // 0x0080
Diqing Zhong04118062020-04-15 01:19:12 +020015904 uint32_t unused2[16];
Jonny Svärd136810f2021-10-13 16:04:26 +020015905 STRUCT wd_status_r WD_STATUS; // 0x0100
15906 STRUCT mac_status_r MAC_STATUS; // 0x0104
15907 STRUCT ao_status_r AO_STATUS; // 0x0108
Diqing Zhong04118062020-04-15 01:19:12 +020015908 uint32_t unused3[1];
Jonny Svärd136810f2021-10-13 16:04:26 +020015909 STRUCT dma_status0_r DMA_STATUS0; // 0x0110
15910 STRUCT dma_status1_r DMA_STATUS1; // 0x0114
Douglas Trohaf6a85da2020-05-11 11:45:28 +020015911 uint32_t unused4[10];
Jonny Svärd136810f2021-10-13 16:04:26 +020015912 STRUCT clkforce_r CLKFORCE; // 0x0140
15913 STRUCT debug_address_r DEBUG_ADDRESS; // 0x0144
15914 STRUCT debug_misc_r DEBUG_MISC; // 0x0148
15915 uint32_t unused5[1];
15916 STRUCT debug_block_r DEBUG_BLOCK; // 0x0150
15917 uint32_t unused6[11];
15918 STRUCT pmcr_r PMCR; // 0x0180
15919 STRUCT pmcntenset_r PMCNTENSET; // 0x0184
15920 STRUCT pmcntenclr_r PMCNTENCLR; // 0x0188
15921 STRUCT pmovsset_r PMOVSSET; // 0x018C
15922 STRUCT pmovsclr_r PMOVSCLR; // 0x0190
15923 STRUCT pmintset_r PMINTSET; // 0x0194
15924 STRUCT pmintclr_r PMINTCLR; // 0x0198
15925 uint32_t unused7[1];
15926 STRUCT pmccntr_r PMCCNTR; // 0x01A0
15927 STRUCT pmccntr_cfg_r PMCCNTR_CFG; // 0x01A8
15928 STRUCT pmcaxi_chan_r PMCAXI_CHAN; // 0x01AC
15929 uint32_t unused8[20];
15930 STRUCT kernel_x_r KERNEL_X; // 0x0200
15931 STRUCT kernel_y_r KERNEL_Y; // 0x0204
15932 STRUCT kernel_w_m1_r KERNEL_W_M1; // 0x0208
15933 STRUCT kernel_h_m1_r KERNEL_H_M1; // 0x020C
15934 STRUCT ofm_cblk_width_m1_r OFM_CBLK_WIDTH_M1; // 0x0210
15935 STRUCT ofm_cblk_height_m1_r OFM_CBLK_HEIGHT_M1; // 0x0214
15936 STRUCT ofm_cblk_depth_m1_r OFM_CBLK_DEPTH_M1; // 0x0218
15937 STRUCT ifm_cblk_depth_m1_r IFM_CBLK_DEPTH_M1; // 0x021C
15938 STRUCT ofm_x_r OFM_X; // 0x0220
15939 STRUCT ofm_y_r OFM_Y; // 0x0224
15940 STRUCT ofm_z_r OFM_Z; // 0x0228
15941 STRUCT ifm_z_r IFM_Z; // 0x022C
15942 STRUCT pad_top_r PAD_TOP; // 0x0230
15943 STRUCT pad_left_r PAD_LEFT; // 0x0234
15944 STRUCT ifm_cblk_width_r IFM_CBLK_WIDTH; // 0x0238
15945 STRUCT ifm_cblk_height_r IFM_CBLK_HEIGHT; // 0x023C
15946 STRUCT dma_ifm_src_r DMA_IFM_SRC; // 0x0240
15947 STRUCT dma_ifm_dst_r DMA_IFM_DST; // 0x0248
15948 STRUCT dma_ofm_src_r DMA_OFM_SRC; // 0x024C
15949 STRUCT dma_ofm_dst_r DMA_OFM_DST; // 0x0250
15950 STRUCT dma_weight_src_r DMA_WEIGHT_SRC; // 0x0258
15951 STRUCT dma_cmd_src_r DMA_CMD_SRC; // 0x0260
15952 STRUCT dma_cmd_size_r DMA_CMD_SIZE; // 0x0268
15953 STRUCT dma_m2m_src_r DMA_M2M_SRC; // 0x026C
15954 STRUCT dma_m2m_dst_r DMA_M2M_DST; // 0x0274
15955 STRUCT current_qread_r CURRENT_QREAD; // 0x027C
15956 STRUCT dma_scale_src_r DMA_SCALE_SRC; // 0x0280
15957 uint32_t unused9[11];
15958 STRUCT current_block_r CURRENT_BLOCK; // 0x02B4
15959 STRUCT current_op_r CURRENT_OP; // 0x02B8
15960 STRUCT current_cmd_r CURRENT_CMD; // 0x02BC
15961 uint32_t unused10[16];
15962 STRUCT pmevcntr_r PMEVCNTR[4]; // 0x0300
Diqing Zhong04118062020-04-15 01:19:12 +020015963 uint32_t unused11[28];
Jonny Svärd136810f2021-10-13 16:04:26 +020015964 STRUCT pmevtyper_r PMEVTYPER[4]; // 0x0380
15965 uint32_t unused12[28];
15966 STRUCT shared_buffer_r SHARED_BUFFER[256]; // 0x0400
15967 STRUCT ifm_pad_top_r IFM_PAD_TOP; // 0x0800
15968 STRUCT ifm_pad_left_r IFM_PAD_LEFT; // 0x0804
15969 STRUCT ifm_pad_right_r IFM_PAD_RIGHT; // 0x0808
15970 STRUCT ifm_pad_bottom_r IFM_PAD_BOTTOM; // 0x080C
15971 STRUCT ifm_depth_m1_r IFM_DEPTH_M1; // 0x0810
15972 STRUCT ifm_precision_r IFM_PRECISION; // 0x0814
Diqing Zhong04118062020-04-15 01:19:12 +020015973 uint32_t unused13[1];
Jonny Svärd136810f2021-10-13 16:04:26 +020015974 STRUCT ifm_upscale_r IFM_UPSCALE; // 0x081C
Diqing Zhong04118062020-04-15 01:19:12 +020015975 uint32_t unused14[1];
Jonny Svärd136810f2021-10-13 16:04:26 +020015976 STRUCT ifm_zero_point_r IFM_ZERO_POINT; // 0x0824
15977 STRUCT ifm_width0_m1_r IFM_WIDTH0_M1; // 0x0828
15978 STRUCT ifm_height0_m1_r IFM_HEIGHT0_M1; // 0x082C
15979 STRUCT ifm_height1_m1_r IFM_HEIGHT1_M1; // 0x0830
15980 STRUCT ifm_ib_end_r IFM_IB_END; // 0x0834
Diqing Zhong04118062020-04-15 01:19:12 +020015981 uint32_t unused15[1];
Jonny Svärd136810f2021-10-13 16:04:26 +020015982 STRUCT ifm_region_r IFM_REGION; // 0x083C
Diqing Zhong04118062020-04-15 01:19:12 +020015983 uint32_t unused16[1];
Jonny Svärd136810f2021-10-13 16:04:26 +020015984 STRUCT ofm_width_m1_r OFM_WIDTH_M1; // 0x0844
15985 STRUCT ofm_height_m1_r OFM_HEIGHT_M1; // 0x0848
15986 STRUCT ofm_depth_m1_r OFM_DEPTH_M1; // 0x084C
15987 STRUCT ofm_precision_r OFM_PRECISION; // 0x0850
15988 STRUCT ofm_blk_width_m1_r OFM_BLK_WIDTH_M1; // 0x0854
15989 STRUCT ofm_blk_height_m1_r OFM_BLK_HEIGHT_M1; // 0x0858
15990 STRUCT ofm_blk_depth_m1_r OFM_BLK_DEPTH_M1; // 0x085C
15991 STRUCT ofm_zero_point_r OFM_ZERO_POINT; // 0x0860
15992 uint32_t unused17[1];
15993 STRUCT ofm_width0_m1_r OFM_WIDTH0_M1; // 0x0868
15994 STRUCT ofm_height0_m1_r OFM_HEIGHT0_M1; // 0x086C
15995 STRUCT ofm_height1_m1_r OFM_HEIGHT1_M1; // 0x0870
15996 uint32_t unused18[2];
15997 STRUCT ofm_region_r OFM_REGION; // 0x087C
15998 STRUCT kernel_width_m1_r KERNEL_WIDTH_M1; // 0x0880
15999 STRUCT kernel_height_m1_r KERNEL_HEIGHT_M1; // 0x0884
16000 STRUCT kernel_stride_r KERNEL_STRIDE; // 0x0888
Diqing Zhong04118062020-04-15 01:19:12 +020016001 uint32_t unused19[1];
Jonny Svärd136810f2021-10-13 16:04:26 +020016002 STRUCT acc_format_r ACC_FORMAT; // 0x0890
16003 STRUCT activation_r ACTIVATION; // 0x0894
16004 STRUCT activation_min_r ACTIVATION_MIN; // 0x0898
16005 STRUCT activation_max_r ACTIVATION_MAX; // 0x089C
16006 STRUCT weight_region_r WEIGHT_REGION; // 0x08A0
16007 STRUCT scale_region_r SCALE_REGION; // 0x08A4
16008 uint32_t unused20[3];
16009 STRUCT ab_start_r AB_START; // 0x08B4
16010 uint32_t unused21[1];
16011 STRUCT blockdep_r BLOCKDEP; // 0x08BC
16012 STRUCT dma0_src_region_r DMA0_SRC_REGION; // 0x08C0
16013 STRUCT dma0_dst_region_r DMA0_DST_REGION; // 0x08C4
16014 STRUCT dma0_size0_r DMA0_SIZE0; // 0x08C8
16015 STRUCT dma0_size1_r DMA0_SIZE1; // 0x08CC
16016 uint32_t unused22[12];
16017 STRUCT ifm2_broadcast_r IFM2_BROADCAST; // 0x0900
16018 STRUCT ifm2_scalar_r IFM2_SCALAR; // 0x0904
16019 uint32_t unused23[3];
16020 STRUCT ifm2_precision_r IFM2_PRECISION; // 0x0914
16021 uint32_t unused24[3];
16022 STRUCT ifm2_zero_point_r IFM2_ZERO_POINT; // 0x0924
16023 STRUCT ifm2_width0_m1_r IFM2_WIDTH0_M1; // 0x0928
16024 STRUCT ifm2_height0_m1_r IFM2_HEIGHT0_M1; // 0x092C
16025 STRUCT ifm2_height1_m1_r IFM2_HEIGHT1_M1; // 0x0930
16026 STRUCT ifm2_ib_start_r IFM2_IB_START; // 0x0934
16027 uint32_t unused25[1];
16028 STRUCT ifm2_region_r IFM2_REGION; // 0x093C
16029 uint32_t unused26[48];
16030 STRUCT ifm_base0_r IFM_BASE0; // 0x0A00
16031 STRUCT ifm_base1_r IFM_BASE1; // 0x0A08
16032 STRUCT ifm_base2_r IFM_BASE2; // 0x0A10
16033 STRUCT ifm_base3_r IFM_BASE3; // 0x0A18
16034 STRUCT ifm_stride_x_r IFM_STRIDE_X; // 0x0A20
16035 STRUCT ifm_stride_y_r IFM_STRIDE_Y; // 0x0A28
16036 STRUCT ifm_stride_c_r IFM_STRIDE_C; // 0x0A30
16037 uint32_t unused27[2];
16038 STRUCT ofm_base0_r OFM_BASE0; // 0x0A40
16039 STRUCT ofm_base1_r OFM_BASE1; // 0x0A48
16040 STRUCT ofm_base2_r OFM_BASE2; // 0x0A50
16041 STRUCT ofm_base3_r OFM_BASE3; // 0x0A58
16042 STRUCT ofm_stride_x_r OFM_STRIDE_X; // 0x0A60
16043 STRUCT ofm_stride_y_r OFM_STRIDE_Y; // 0x0A68
16044 STRUCT ofm_stride_c_r OFM_STRIDE_C; // 0x0A70
16045 uint32_t unused28[2];
Jonny Svärd13cb0892021-11-16 18:43:04 +010016046 STRUCT weight_base_r WEIGHT_BASE; // 0x0A80
16047 STRUCT weight_length_r WEIGHT_LENGTH; // 0x0A88
16048 STRUCT scale_base_r SCALE_BASE; // 0x0A90
16049 STRUCT scale_length_r SCALE_LENGTH; // 0x0A98
Jonny Svärd136810f2021-10-13 16:04:26 +020016050 STRUCT ofm_scale_r OFM_SCALE; // 0x0AA0
16051 STRUCT ofm_scale_shift_r OFM_SCALE_SHIFT; // 0x0AA4
16052 STRUCT opa_scale_r OPA_SCALE; // 0x0AA8
16053 STRUCT opa_scale_shift_r OPA_SCALE_SHIFT; // 0x0AAC
16054 STRUCT opb_scale_r OPB_SCALE; // 0x0AB0
Jonny Svärd13cb0892021-11-16 18:43:04 +010016055 uint32_t unused29[3];
Jonny Svärd136810f2021-10-13 16:04:26 +020016056 STRUCT dma0_src_r DMA0_SRC; // 0x0AC0
16057 STRUCT dma0_dst_r DMA0_DST; // 0x0AC8
16058 STRUCT dma0_len_r DMA0_LEN; // 0x0AD0
Jonny Svärd13cb0892021-11-16 18:43:04 +010016059 uint32_t unused30[10];
Jonny Svärd136810f2021-10-13 16:04:26 +020016060 STRUCT ifm2_base0_r IFM2_BASE0; // 0x0B00
16061 STRUCT ifm2_base1_r IFM2_BASE1; // 0x0B08
16062 STRUCT ifm2_base2_r IFM2_BASE2; // 0x0B10
16063 STRUCT ifm2_base3_r IFM2_BASE3; // 0x0B18
16064 STRUCT ifm2_stride_x_r IFM2_STRIDE_X; // 0x0B20
16065 STRUCT ifm2_stride_y_r IFM2_STRIDE_Y; // 0x0B28
16066 STRUCT ifm2_stride_c_r IFM2_STRIDE_C; // 0x0B30
Jonny Svärd13cb0892021-11-16 18:43:04 +010016067 uint32_t unused31[18];
Jonny Svärd136810f2021-10-13 16:04:26 +020016068 uint32_t USER_DEFINED[16]; // 0x0B80
Jonny Svärd13cb0892021-11-16 18:43:04 +010016069 uint32_t unused32[256];
Jonny Svärd136810f2021-10-13 16:04:26 +020016070 STRUCT revision_r REVISION; // 0x0FC0
Jonny Svärd13cb0892021-11-16 18:43:04 +010016071 uint32_t unused33[3];
Jonny Svärd136810f2021-10-13 16:04:26 +020016072 STRUCT pid4_r PID4; // 0x0FD0
16073 STRUCT pid5_r PID5; // 0x0FD4
16074 STRUCT pid6_r PID6; // 0x0FD8
16075 STRUCT pid7_r PID7; // 0x0FDC
16076 STRUCT pid0_r PID0; // 0x0FE0
16077 STRUCT pid1_r PID1; // 0x0FE4
16078 STRUCT pid2_r PID2; // 0x0FE8
16079 STRUCT pid3_r PID3; // 0x0FEC
16080 STRUCT cid0_r CID0; // 0x0FF0
16081 STRUCT cid1_r CID1; // 0x0FF4
16082 STRUCT cid2_r CID2; // 0x0FF8
16083 STRUCT cid3_r CID3; // 0x0FFC
16084
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016085#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020016086 enum class access_type_t : uint8_t
16087 {
16088 RW,
16089 RO,
16090 WO
16091 };
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016092 NPU_REG()
16093 {
16094 reset();
16095 }
16096 void reset()
16097 {
Jonny Svärd136810f2021-10-13 16:04:26 +020016098 ID = 269500929;
16099 STATUS = 8;
16100 CMD = 12;
16101 RESET = 0;
16102 QBASE = 0;
16103 QREAD = 0;
16104 QCONFIG = 0;
16105 QSIZE = 0;
16106 PROT = 0;
16107 CONFIG = 0;
16108 LOCK = 0;
16109 REGIONCFG = 0;
16110 AXI_LIMIT0 = 0;
16111 AXI_LIMIT1 = 0;
16112 AXI_LIMIT2 = 0;
16113 AXI_LIMIT3 = 0;
16114 for (size_t i = 0; i < (sizeof(BASEP) / sizeof(BASEP[0])); ++i)
16115 BASEP[i] = 0;
Diqing Zhong04118062020-04-15 01:19:12 +020016116 WD_STATUS = 0;
16117 MAC_STATUS = 0;
Diqing Zhong04118062020-04-15 01:19:12 +020016118 AO_STATUS = 0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +020016119 DMA_STATUS0 = 0;
16120 DMA_STATUS1 = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016121 CLKFORCE = 0;
Douglas Troha2e7e3b72020-05-14 20:28:31 +020016122 DEBUG_ADDRESS = 0;
Douglas Trohaf6a85da2020-05-11 11:45:28 +020016123 DEBUG_MISC = 0;
Stefan Nannessone2e70242020-08-19 16:01:29 +020016124 DEBUG_BLOCK = 0;
Jonny Svärd136810f2021-10-13 16:04:26 +020016125 PMCR = 8192;
16126 PMCNTENSET = 0;
16127 PMCNTENCLR = 0;
16128 PMOVSSET = 0;
16129 PMOVSCLR = 0;
16130 PMINTSET = 0;
16131 PMINTCLR = 0;
16132 PMCCNTR = 0;
16133 PMCCNTR_CFG = 0;
16134 PMCAXI_CHAN = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016135 KERNEL_X = 0;
16136 KERNEL_Y = 0;
16137 KERNEL_W_M1 = 0;
16138 KERNEL_H_M1 = 0;
16139 OFM_CBLK_WIDTH_M1 = 0;
16140 OFM_CBLK_HEIGHT_M1 = 0;
16141 OFM_CBLK_DEPTH_M1 = 0;
16142 IFM_CBLK_DEPTH_M1 = 0;
16143 OFM_X = 0;
16144 OFM_Y = 0;
16145 OFM_Z = 0;
16146 IFM_Z = 0;
16147 PAD_TOP = 0;
16148 PAD_LEFT = 0;
16149 IFM_CBLK_WIDTH = 0;
16150 IFM_CBLK_HEIGHT = 0;
16151 DMA_IFM_SRC = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016152 DMA_IFM_DST = 0;
16153 DMA_OFM_SRC = 0;
16154 DMA_OFM_DST = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016155 DMA_WEIGHT_SRC = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016156 DMA_CMD_SRC = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016157 DMA_CMD_SIZE = 0;
16158 DMA_M2M_SRC = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016159 DMA_M2M_DST = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016160 CURRENT_QREAD = 0;
16161 DMA_SCALE_SRC = 0;
Stefan Nannessone2e70242020-08-19 16:01:29 +020016162 CURRENT_BLOCK = 0;
16163 CURRENT_OP = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016164 CURRENT_CMD = 0;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016165 for (size_t i = 0; i < (sizeof(PMEVCNTR) / sizeof(PMEVCNTR[0])); ++i)
16166 PMEVCNTR[i] = 0;
16167 for (size_t i = 0; i < (sizeof(PMEVTYPER) / sizeof(PMEVTYPER[0])); ++i)
16168 PMEVTYPER[i] = 0;
16169 for (size_t i = 0; i < (sizeof(SHARED_BUFFER) / sizeof(SHARED_BUFFER[0])); ++i)
16170 SHARED_BUFFER[i] = 0;
Jonny Svärd136810f2021-10-13 16:04:26 +020016171 IFM_PAD_TOP = 0;
16172 IFM_PAD_LEFT = 0;
16173 IFM_PAD_RIGHT = 0;
16174 IFM_PAD_BOTTOM = 0;
16175 IFM_DEPTH_M1 = 0;
16176 IFM_PRECISION = 0;
16177 IFM_UPSCALE = 0;
16178 IFM_ZERO_POINT = 0;
16179 IFM_WIDTH0_M1 = 0;
16180 IFM_HEIGHT0_M1 = 0;
16181 IFM_HEIGHT1_M1 = 0;
16182 IFM_IB_END = 0;
16183 IFM_REGION = 0;
16184 OFM_WIDTH_M1 = 0;
16185 OFM_HEIGHT_M1 = 0;
16186 OFM_DEPTH_M1 = 0;
16187 OFM_PRECISION = 0;
16188 OFM_BLK_WIDTH_M1 = 0;
16189 OFM_BLK_HEIGHT_M1 = 0;
16190 OFM_BLK_DEPTH_M1 = 0;
16191 OFM_ZERO_POINT = 0;
16192 OFM_WIDTH0_M1 = 0;
16193 OFM_HEIGHT0_M1 = 0;
16194 OFM_HEIGHT1_M1 = 0;
16195 OFM_REGION = 0;
16196 KERNEL_WIDTH_M1 = 0;
16197 KERNEL_HEIGHT_M1 = 0;
16198 KERNEL_STRIDE = 0;
16199 ACC_FORMAT = 0;
16200 ACTIVATION = 0;
16201 ACTIVATION_MIN = 0;
16202 ACTIVATION_MAX = 0;
16203 WEIGHT_REGION = 0;
16204 SCALE_REGION = 0;
16205 AB_START = 0;
16206 BLOCKDEP = 0;
16207 DMA0_SRC_REGION = 0;
16208 DMA0_DST_REGION = 0;
16209 DMA0_SIZE0 = 0;
16210 DMA0_SIZE1 = 0;
16211 IFM2_BROADCAST = 0;
16212 IFM2_SCALAR = 0;
16213 IFM2_PRECISION = 0;
16214 IFM2_ZERO_POINT = 0;
16215 IFM2_WIDTH0_M1 = 0;
16216 IFM2_HEIGHT0_M1 = 0;
16217 IFM2_HEIGHT1_M1 = 0;
16218 IFM2_IB_START = 0;
16219 IFM2_REGION = 0;
16220 IFM_BASE0 = 0;
16221 IFM_BASE1 = 0;
16222 IFM_BASE2 = 0;
16223 IFM_BASE3 = 0;
16224 IFM_STRIDE_X = 0;
16225 IFM_STRIDE_Y = 0;
16226 IFM_STRIDE_C = 0;
16227 OFM_BASE0 = 0;
16228 OFM_BASE1 = 0;
16229 OFM_BASE2 = 0;
16230 OFM_BASE3 = 0;
16231 OFM_STRIDE_X = 0;
16232 OFM_STRIDE_Y = 0;
16233 OFM_STRIDE_C = 0;
16234 WEIGHT_BASE = 0;
16235 WEIGHT_LENGTH = 0;
16236 SCALE_BASE = 0;
16237 SCALE_LENGTH = 0;
16238 OFM_SCALE = 0;
16239 OFM_SCALE_SHIFT = 0;
16240 OPA_SCALE = 0;
16241 OPA_SCALE_SHIFT = 0;
16242 OPB_SCALE = 0;
16243 DMA0_SRC = 0;
16244 DMA0_DST = 0;
16245 DMA0_LEN = 0;
16246 IFM2_BASE0 = 0;
16247 IFM2_BASE1 = 0;
16248 IFM2_BASE2 = 0;
16249 IFM2_BASE3 = 0;
16250 IFM2_STRIDE_X = 0;
16251 IFM2_STRIDE_Y = 0;
16252 IFM2_STRIDE_C = 0;
16253 for (size_t i = 0; i < (sizeof(USER_DEFINED) / sizeof(USER_DEFINED[0])); ++i)
16254 USER_DEFINED[i] = 0;
16255 REVISION = 0;
16256 PID4 = 4;
16257 PID5 = 0;
16258 PID6 = 0;
16259 PID7 = 0;
16260 PID0 = 128;
16261 PID1 = 181;
16262 PID2 = 11;
16263 PID3 = 0;
16264 CID0 = 13;
16265 CID1 = 240;
16266 CID2 = 5;
16267 CID3 = 177;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016268 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016269 uint32_t &operator[](const int addr_offset)
16270 {
16271 return reinterpret_cast<uint32_t *>(this)[addr_offset / 4];
16272 }
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016273 access_type_t get_access_type(uint32_t offset)
16274 {
16275 switch (offset)
16276 {
16277 case 0:
16278 return access_type_t::RO;
16279 case 4:
16280 return access_type_t::RO;
16281 case 8:
16282 return access_type_t::RW;
16283 case 12:
16284 return access_type_t::RW;
16285 case 16:
16286 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016287 case 24:
16288 return access_type_t::RO;
16289 case 28:
16290 return access_type_t::RW;
16291 case 32:
16292 return access_type_t::RW;
16293 case 36:
16294 return access_type_t::RO;
16295 case 40:
16296 return access_type_t::RO;
16297 case 44:
16298 return access_type_t::RW;
16299 case 60:
16300 return access_type_t::RW;
16301 case 64:
16302 return access_type_t::RW;
16303 case 68:
16304 return access_type_t::RW;
16305 case 72:
16306 return access_type_t::RW;
16307 case 76:
16308 return access_type_t::RW;
16309 case 128:
16310 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016311 case 136:
16312 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016313 case 144:
16314 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016315 case 152:
16316 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016317 case 160:
16318 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016319 case 168:
16320 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016321 case 176:
16322 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016323 case 184:
16324 return access_type_t::RW;
Diqing Zhong04118062020-04-15 01:19:12 +020016325 case 256:
16326 return access_type_t::RO;
16327 case 260:
16328 return access_type_t::RO;
16329 case 264:
16330 return access_type_t::RO;
16331 case 272:
16332 return access_type_t::RO;
Douglas Trohaf6a85da2020-05-11 11:45:28 +020016333 case 276:
16334 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016335 case 320:
16336 return access_type_t::RW;
16337 case 324:
16338 return access_type_t::RW;
16339 case 328:
16340 return access_type_t::RW;
Stefan Nannessone2e70242020-08-19 16:01:29 +020016341 case 336:
16342 return access_type_t::RW;
Jonny Svärd136810f2021-10-13 16:04:26 +020016343 case 384:
16344 return access_type_t::RW;
16345 case 388:
16346 return access_type_t::RW;
16347 case 392:
16348 return access_type_t::RW;
16349 case 396:
16350 return access_type_t::RW;
16351 case 400:
16352 return access_type_t::RW;
16353 case 404:
16354 return access_type_t::RW;
16355 case 408:
16356 return access_type_t::RW;
16357 case 416:
16358 return access_type_t::RW;
16359 case 424:
16360 return access_type_t::RW;
16361 case 428:
16362 return access_type_t::RW;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016363 case 512:
16364 return access_type_t::RO;
16365 case 516:
16366 return access_type_t::RO;
16367 case 520:
16368 return access_type_t::RO;
16369 case 524:
16370 return access_type_t::RO;
16371 case 528:
16372 return access_type_t::RO;
16373 case 532:
16374 return access_type_t::RO;
16375 case 536:
16376 return access_type_t::RO;
16377 case 540:
16378 return access_type_t::RO;
16379 case 544:
16380 return access_type_t::RO;
16381 case 548:
16382 return access_type_t::RO;
16383 case 552:
16384 return access_type_t::RO;
16385 case 556:
16386 return access_type_t::RO;
16387 case 560:
16388 return access_type_t::RO;
16389 case 564:
16390 return access_type_t::RO;
16391 case 568:
16392 return access_type_t::RO;
16393 case 572:
16394 return access_type_t::RO;
16395 case 576:
16396 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016397 case 584:
16398 return access_type_t::RO;
16399 case 588:
16400 return access_type_t::RO;
16401 case 592:
16402 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016403 case 600:
16404 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016405 case 608:
16406 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016407 case 616:
16408 return access_type_t::RO;
16409 case 620:
16410 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016411 case 628:
16412 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016413 case 636:
16414 return access_type_t::RO;
16415 case 640:
16416 return access_type_t::RO;
Stefan Nannessone2e70242020-08-19 16:01:29 +020016417 case 692:
16418 return access_type_t::RO;
16419 case 696:
16420 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016421 case 700:
16422 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020016423 case 768:
16424 return access_type_t::RW;
16425 case 772:
16426 return access_type_t::RW;
16427 case 776:
16428 return access_type_t::RW;
16429 case 780:
16430 return access_type_t::RW;
16431 case 896:
16432 return access_type_t::RW;
16433 case 900:
16434 return access_type_t::RW;
16435 case 904:
16436 return access_type_t::RW;
16437 case 908:
16438 return access_type_t::RW;
16439 case 1024:
16440 return access_type_t::RW;
16441 case 1028:
16442 return access_type_t::RW;
16443 case 1032:
16444 return access_type_t::RW;
16445 case 1036:
16446 return access_type_t::RW;
16447 case 1040:
16448 return access_type_t::RW;
16449 case 1044:
16450 return access_type_t::RW;
16451 case 1048:
16452 return access_type_t::RW;
16453 case 1052:
16454 return access_type_t::RW;
16455 case 1056:
16456 return access_type_t::RW;
16457 case 1060:
16458 return access_type_t::RW;
16459 case 1064:
16460 return access_type_t::RW;
16461 case 1068:
16462 return access_type_t::RW;
16463 case 1072:
16464 return access_type_t::RW;
16465 case 1076:
16466 return access_type_t::RW;
16467 case 1080:
16468 return access_type_t::RW;
16469 case 1084:
16470 return access_type_t::RW;
16471 case 1088:
16472 return access_type_t::RW;
16473 case 1092:
16474 return access_type_t::RW;
16475 case 1096:
16476 return access_type_t::RW;
16477 case 1100:
16478 return access_type_t::RW;
16479 case 1104:
16480 return access_type_t::RW;
16481 case 1108:
16482 return access_type_t::RW;
16483 case 1112:
16484 return access_type_t::RW;
16485 case 1116:
16486 return access_type_t::RW;
16487 case 1120:
16488 return access_type_t::RW;
16489 case 1124:
16490 return access_type_t::RW;
16491 case 1128:
16492 return access_type_t::RW;
16493 case 1132:
16494 return access_type_t::RW;
16495 case 1136:
16496 return access_type_t::RW;
16497 case 1140:
16498 return access_type_t::RW;
16499 case 1144:
16500 return access_type_t::RW;
16501 case 1148:
16502 return access_type_t::RW;
16503 case 1152:
16504 return access_type_t::RW;
16505 case 1156:
16506 return access_type_t::RW;
16507 case 1160:
16508 return access_type_t::RW;
16509 case 1164:
16510 return access_type_t::RW;
16511 case 1168:
16512 return access_type_t::RW;
16513 case 1172:
16514 return access_type_t::RW;
16515 case 1176:
16516 return access_type_t::RW;
16517 case 1180:
16518 return access_type_t::RW;
16519 case 1184:
16520 return access_type_t::RW;
16521 case 1188:
16522 return access_type_t::RW;
16523 case 1192:
16524 return access_type_t::RW;
16525 case 1196:
16526 return access_type_t::RW;
16527 case 1200:
16528 return access_type_t::RW;
16529 case 1204:
16530 return access_type_t::RW;
16531 case 1208:
16532 return access_type_t::RW;
16533 case 1212:
16534 return access_type_t::RW;
16535 case 1216:
16536 return access_type_t::RW;
16537 case 1220:
16538 return access_type_t::RW;
16539 case 1224:
16540 return access_type_t::RW;
16541 case 1228:
16542 return access_type_t::RW;
16543 case 1232:
16544 return access_type_t::RW;
16545 case 1236:
16546 return access_type_t::RW;
16547 case 1240:
16548 return access_type_t::RW;
16549 case 1244:
16550 return access_type_t::RW;
16551 case 1248:
16552 return access_type_t::RW;
16553 case 1252:
16554 return access_type_t::RW;
16555 case 1256:
16556 return access_type_t::RW;
16557 case 1260:
16558 return access_type_t::RW;
16559 case 1264:
16560 return access_type_t::RW;
16561 case 1268:
16562 return access_type_t::RW;
16563 case 1272:
16564 return access_type_t::RW;
16565 case 1276:
16566 return access_type_t::RW;
16567 case 1280:
16568 return access_type_t::RW;
16569 case 1284:
16570 return access_type_t::RW;
16571 case 1288:
16572 return access_type_t::RW;
16573 case 1292:
16574 return access_type_t::RW;
16575 case 1296:
16576 return access_type_t::RW;
16577 case 1300:
16578 return access_type_t::RW;
16579 case 1304:
16580 return access_type_t::RW;
16581 case 1308:
16582 return access_type_t::RW;
16583 case 1312:
16584 return access_type_t::RW;
16585 case 1316:
16586 return access_type_t::RW;
16587 case 1320:
16588 return access_type_t::RW;
16589 case 1324:
16590 return access_type_t::RW;
16591 case 1328:
16592 return access_type_t::RW;
16593 case 1332:
16594 return access_type_t::RW;
16595 case 1336:
16596 return access_type_t::RW;
16597 case 1340:
16598 return access_type_t::RW;
16599 case 1344:
16600 return access_type_t::RW;
16601 case 1348:
16602 return access_type_t::RW;
16603 case 1352:
16604 return access_type_t::RW;
16605 case 1356:
16606 return access_type_t::RW;
16607 case 1360:
16608 return access_type_t::RW;
16609 case 1364:
16610 return access_type_t::RW;
16611 case 1368:
16612 return access_type_t::RW;
16613 case 1372:
16614 return access_type_t::RW;
16615 case 1376:
16616 return access_type_t::RW;
16617 case 1380:
16618 return access_type_t::RW;
16619 case 1384:
16620 return access_type_t::RW;
16621 case 1388:
16622 return access_type_t::RW;
16623 case 1392:
16624 return access_type_t::RW;
16625 case 1396:
16626 return access_type_t::RW;
16627 case 1400:
16628 return access_type_t::RW;
16629 case 1404:
16630 return access_type_t::RW;
16631 case 1408:
16632 return access_type_t::RW;
16633 case 1412:
16634 return access_type_t::RW;
16635 case 1416:
16636 return access_type_t::RW;
16637 case 1420:
16638 return access_type_t::RW;
16639 case 1424:
16640 return access_type_t::RW;
16641 case 1428:
16642 return access_type_t::RW;
16643 case 1432:
16644 return access_type_t::RW;
16645 case 1436:
16646 return access_type_t::RW;
16647 case 1440:
16648 return access_type_t::RW;
16649 case 1444:
16650 return access_type_t::RW;
16651 case 1448:
16652 return access_type_t::RW;
16653 case 1452:
16654 return access_type_t::RW;
16655 case 1456:
16656 return access_type_t::RW;
16657 case 1460:
16658 return access_type_t::RW;
16659 case 1464:
16660 return access_type_t::RW;
16661 case 1468:
16662 return access_type_t::RW;
16663 case 1472:
16664 return access_type_t::RW;
16665 case 1476:
16666 return access_type_t::RW;
16667 case 1480:
16668 return access_type_t::RW;
16669 case 1484:
16670 return access_type_t::RW;
16671 case 1488:
16672 return access_type_t::RW;
16673 case 1492:
16674 return access_type_t::RW;
16675 case 1496:
16676 return access_type_t::RW;
16677 case 1500:
16678 return access_type_t::RW;
16679 case 1504:
16680 return access_type_t::RW;
16681 case 1508:
16682 return access_type_t::RW;
16683 case 1512:
16684 return access_type_t::RW;
16685 case 1516:
16686 return access_type_t::RW;
16687 case 1520:
16688 return access_type_t::RW;
16689 case 1524:
16690 return access_type_t::RW;
16691 case 1528:
16692 return access_type_t::RW;
16693 case 1532:
16694 return access_type_t::RW;
16695 case 1536:
16696 return access_type_t::RW;
16697 case 1540:
16698 return access_type_t::RW;
16699 case 1544:
16700 return access_type_t::RW;
16701 case 1548:
16702 return access_type_t::RW;
16703 case 1552:
16704 return access_type_t::RW;
16705 case 1556:
16706 return access_type_t::RW;
16707 case 1560:
16708 return access_type_t::RW;
16709 case 1564:
16710 return access_type_t::RW;
16711 case 1568:
16712 return access_type_t::RW;
16713 case 1572:
16714 return access_type_t::RW;
16715 case 1576:
16716 return access_type_t::RW;
16717 case 1580:
16718 return access_type_t::RW;
16719 case 1584:
16720 return access_type_t::RW;
16721 case 1588:
16722 return access_type_t::RW;
16723 case 1592:
16724 return access_type_t::RW;
16725 case 1596:
16726 return access_type_t::RW;
16727 case 1600:
16728 return access_type_t::RW;
16729 case 1604:
16730 return access_type_t::RW;
16731 case 1608:
16732 return access_type_t::RW;
16733 case 1612:
16734 return access_type_t::RW;
16735 case 1616:
16736 return access_type_t::RW;
16737 case 1620:
16738 return access_type_t::RW;
16739 case 1624:
16740 return access_type_t::RW;
16741 case 1628:
16742 return access_type_t::RW;
16743 case 1632:
16744 return access_type_t::RW;
16745 case 1636:
16746 return access_type_t::RW;
16747 case 1640:
16748 return access_type_t::RW;
16749 case 1644:
16750 return access_type_t::RW;
16751 case 1648:
16752 return access_type_t::RW;
16753 case 1652:
16754 return access_type_t::RW;
16755 case 1656:
16756 return access_type_t::RW;
16757 case 1660:
16758 return access_type_t::RW;
16759 case 1664:
16760 return access_type_t::RW;
16761 case 1668:
16762 return access_type_t::RW;
16763 case 1672:
16764 return access_type_t::RW;
16765 case 1676:
16766 return access_type_t::RW;
16767 case 1680:
16768 return access_type_t::RW;
16769 case 1684:
16770 return access_type_t::RW;
16771 case 1688:
16772 return access_type_t::RW;
16773 case 1692:
16774 return access_type_t::RW;
16775 case 1696:
16776 return access_type_t::RW;
16777 case 1700:
16778 return access_type_t::RW;
16779 case 1704:
16780 return access_type_t::RW;
16781 case 1708:
16782 return access_type_t::RW;
16783 case 1712:
16784 return access_type_t::RW;
16785 case 1716:
16786 return access_type_t::RW;
16787 case 1720:
16788 return access_type_t::RW;
16789 case 1724:
16790 return access_type_t::RW;
16791 case 1728:
16792 return access_type_t::RW;
16793 case 1732:
16794 return access_type_t::RW;
16795 case 1736:
16796 return access_type_t::RW;
16797 case 1740:
16798 return access_type_t::RW;
16799 case 1744:
16800 return access_type_t::RW;
16801 case 1748:
16802 return access_type_t::RW;
16803 case 1752:
16804 return access_type_t::RW;
16805 case 1756:
16806 return access_type_t::RW;
16807 case 1760:
16808 return access_type_t::RW;
16809 case 1764:
16810 return access_type_t::RW;
16811 case 1768:
16812 return access_type_t::RW;
16813 case 1772:
16814 return access_type_t::RW;
16815 case 1776:
16816 return access_type_t::RW;
16817 case 1780:
16818 return access_type_t::RW;
16819 case 1784:
16820 return access_type_t::RW;
16821 case 1788:
16822 return access_type_t::RW;
16823 case 1792:
16824 return access_type_t::RW;
16825 case 1796:
16826 return access_type_t::RW;
16827 case 1800:
16828 return access_type_t::RW;
16829 case 1804:
16830 return access_type_t::RW;
16831 case 1808:
16832 return access_type_t::RW;
16833 case 1812:
16834 return access_type_t::RW;
16835 case 1816:
16836 return access_type_t::RW;
16837 case 1820:
16838 return access_type_t::RW;
16839 case 1824:
16840 return access_type_t::RW;
16841 case 1828:
16842 return access_type_t::RW;
16843 case 1832:
16844 return access_type_t::RW;
16845 case 1836:
16846 return access_type_t::RW;
16847 case 1840:
16848 return access_type_t::RW;
16849 case 1844:
16850 return access_type_t::RW;
16851 case 1848:
16852 return access_type_t::RW;
16853 case 1852:
16854 return access_type_t::RW;
16855 case 1856:
16856 return access_type_t::RW;
16857 case 1860:
16858 return access_type_t::RW;
16859 case 1864:
16860 return access_type_t::RW;
16861 case 1868:
16862 return access_type_t::RW;
16863 case 1872:
16864 return access_type_t::RW;
16865 case 1876:
16866 return access_type_t::RW;
16867 case 1880:
16868 return access_type_t::RW;
16869 case 1884:
16870 return access_type_t::RW;
16871 case 1888:
16872 return access_type_t::RW;
16873 case 1892:
16874 return access_type_t::RW;
16875 case 1896:
16876 return access_type_t::RW;
16877 case 1900:
16878 return access_type_t::RW;
16879 case 1904:
16880 return access_type_t::RW;
16881 case 1908:
16882 return access_type_t::RW;
16883 case 1912:
16884 return access_type_t::RW;
16885 case 1916:
16886 return access_type_t::RW;
16887 case 1920:
16888 return access_type_t::RW;
16889 case 1924:
16890 return access_type_t::RW;
16891 case 1928:
16892 return access_type_t::RW;
16893 case 1932:
16894 return access_type_t::RW;
16895 case 1936:
16896 return access_type_t::RW;
16897 case 1940:
16898 return access_type_t::RW;
16899 case 1944:
16900 return access_type_t::RW;
16901 case 1948:
16902 return access_type_t::RW;
16903 case 1952:
16904 return access_type_t::RW;
16905 case 1956:
16906 return access_type_t::RW;
16907 case 1960:
16908 return access_type_t::RW;
16909 case 1964:
16910 return access_type_t::RW;
16911 case 1968:
16912 return access_type_t::RW;
16913 case 1972:
16914 return access_type_t::RW;
16915 case 1976:
16916 return access_type_t::RW;
16917 case 1980:
16918 return access_type_t::RW;
16919 case 1984:
16920 return access_type_t::RW;
16921 case 1988:
16922 return access_type_t::RW;
16923 case 1992:
16924 return access_type_t::RW;
16925 case 1996:
16926 return access_type_t::RW;
16927 case 2000:
16928 return access_type_t::RW;
16929 case 2004:
16930 return access_type_t::RW;
16931 case 2008:
16932 return access_type_t::RW;
16933 case 2012:
16934 return access_type_t::RW;
16935 case 2016:
16936 return access_type_t::RW;
16937 case 2020:
16938 return access_type_t::RW;
16939 case 2024:
16940 return access_type_t::RW;
16941 case 2028:
16942 return access_type_t::RW;
16943 case 2032:
16944 return access_type_t::RW;
16945 case 2036:
16946 return access_type_t::RW;
16947 case 2040:
16948 return access_type_t::RW;
16949 case 2044:
16950 return access_type_t::RW;
Jonny Svärd136810f2021-10-13 16:04:26 +020016951 case 2048:
16952 return access_type_t::RW;
16953 case 2052:
16954 return access_type_t::RW;
16955 case 2056:
16956 return access_type_t::RW;
16957 case 2060:
16958 return access_type_t::RW;
16959 case 2064:
16960 return access_type_t::RW;
16961 case 2068:
16962 return access_type_t::RW;
16963 case 2076:
16964 return access_type_t::RW;
16965 case 2084:
16966 return access_type_t::RW;
16967 case 2088:
16968 return access_type_t::RW;
16969 case 2092:
16970 return access_type_t::RW;
16971 case 2096:
16972 return access_type_t::RW;
16973 case 2100:
16974 return access_type_t::RW;
16975 case 2108:
16976 return access_type_t::RW;
16977 case 2116:
16978 return access_type_t::RW;
16979 case 2120:
16980 return access_type_t::RW;
16981 case 2124:
16982 return access_type_t::RW;
16983 case 2128:
16984 return access_type_t::RW;
16985 case 2132:
16986 return access_type_t::RW;
16987 case 2136:
16988 return access_type_t::RW;
16989 case 2140:
16990 return access_type_t::RW;
16991 case 2144:
16992 return access_type_t::RW;
16993 case 2152:
16994 return access_type_t::RW;
16995 case 2156:
16996 return access_type_t::RW;
16997 case 2160:
16998 return access_type_t::RW;
16999 case 2172:
17000 return access_type_t::RW;
17001 case 2176:
17002 return access_type_t::RW;
17003 case 2180:
17004 return access_type_t::RW;
17005 case 2184:
17006 return access_type_t::RW;
17007 case 2192:
17008 return access_type_t::RW;
17009 case 2196:
17010 return access_type_t::RW;
17011 case 2200:
17012 return access_type_t::RW;
17013 case 2204:
17014 return access_type_t::RW;
17015 case 2208:
17016 return access_type_t::RW;
17017 case 2212:
17018 return access_type_t::RW;
17019 case 2228:
17020 return access_type_t::RW;
17021 case 2236:
17022 return access_type_t::RW;
17023 case 2240:
17024 return access_type_t::RW;
17025 case 2244:
17026 return access_type_t::RW;
17027 case 2248:
17028 return access_type_t::RW;
17029 case 2252:
17030 return access_type_t::RW;
17031 case 2304:
17032 return access_type_t::RW;
17033 case 2308:
17034 return access_type_t::RW;
17035 case 2324:
17036 return access_type_t::RW;
17037 case 2340:
17038 return access_type_t::RW;
17039 case 2344:
17040 return access_type_t::RW;
17041 case 2348:
17042 return access_type_t::RW;
17043 case 2352:
17044 return access_type_t::RW;
17045 case 2356:
17046 return access_type_t::RW;
17047 case 2364:
17048 return access_type_t::RW;
17049 case 2560:
17050 return access_type_t::RW;
17051 case 2568:
17052 return access_type_t::RW;
17053 case 2576:
17054 return access_type_t::RW;
17055 case 2584:
17056 return access_type_t::RW;
17057 case 2592:
17058 return access_type_t::RW;
17059 case 2600:
17060 return access_type_t::RW;
17061 case 2608:
17062 return access_type_t::RW;
17063 case 2624:
17064 return access_type_t::RW;
17065 case 2632:
17066 return access_type_t::RW;
17067 case 2640:
17068 return access_type_t::RW;
17069 case 2648:
17070 return access_type_t::RW;
17071 case 2656:
17072 return access_type_t::RW;
17073 case 2664:
17074 return access_type_t::RW;
17075 case 2672:
17076 return access_type_t::RW;
17077 case 2688:
17078 return access_type_t::RW;
17079 case 2696:
17080 return access_type_t::RW;
17081 case 2704:
17082 return access_type_t::RW;
17083 case 2712:
17084 return access_type_t::RW;
17085 case 2720:
17086 return access_type_t::RW;
17087 case 2724:
17088 return access_type_t::RW;
17089 case 2728:
17090 return access_type_t::RW;
17091 case 2732:
17092 return access_type_t::RW;
17093 case 2736:
17094 return access_type_t::RW;
17095 case 2752:
17096 return access_type_t::RW;
17097 case 2760:
17098 return access_type_t::RW;
17099 case 2768:
17100 return access_type_t::RW;
17101 case 2816:
17102 return access_type_t::RW;
17103 case 2824:
17104 return access_type_t::RW;
17105 case 2832:
17106 return access_type_t::RW;
17107 case 2840:
17108 return access_type_t::RW;
17109 case 2848:
17110 return access_type_t::RW;
17111 case 2856:
17112 return access_type_t::RW;
17113 case 2864:
17114 return access_type_t::RW;
17115 case 2944:
17116 return access_type_t::RW;
17117 case 2952:
17118 return access_type_t::RW;
17119 case 2960:
17120 return access_type_t::RW;
17121 case 2968:
17122 return access_type_t::RW;
17123 case 2976:
17124 return access_type_t::RW;
17125 case 2984:
17126 return access_type_t::RW;
17127 case 2992:
17128 return access_type_t::RW;
17129 case 3000:
17130 return access_type_t::RW;
17131 case 4032:
17132 return access_type_t::RO;
17133 case 4048:
17134 return access_type_t::RO;
17135 case 4052:
17136 return access_type_t::RO;
17137 case 4056:
17138 return access_type_t::RO;
17139 case 4060:
17140 return access_type_t::RO;
17141 case 4064:
17142 return access_type_t::RO;
17143 case 4068:
17144 return access_type_t::RO;
17145 case 4072:
17146 return access_type_t::RO;
17147 case 4076:
17148 return access_type_t::RO;
17149 case 4080:
17150 return access_type_t::RO;
17151 case 4084:
17152 return access_type_t::RO;
17153 case 4088:
17154 return access_type_t::RO;
17155 case 4092:
17156 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020017157 default:
Jonny Svärd136810f2021-10-13 16:04:26 +020017158 return access_type_t::RO;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020017159 }
17160 }
Jonny Svärd136810f2021-10-13 16:04:26 +020017161#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020017162};
17163
Jonny Svärd136810f2021-10-13 16:04:26 +020017164#ifdef __cplusplus
17165struct isa
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020017166{
Jonny Svärd136810f2021-10-13 16:04:26 +020017167#ifdef NPU_DISASSEMBLE
17168 static int disassemble(const uint32_t *in,
17169 std::string &op,
17170 std::vector<std::pair<std::string, std::string>> &fields)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020017171 {
Jonny Svärd136810f2021-10-13 16:04:26 +020017172 switch (*in & 0xffff)
17173 {
17174 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17175 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP):
17176 {
17177 const npu_op_stop_t &v = *reinterpret_cast<const npu_op_stop_t *>(in);
17178 op = "NPU_OP_STOP";
17179 v.disassemble(fields);
17180 break;
17181 }
17182 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17183 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ):
17184 {
17185 const npu_op_irq_t &v = *reinterpret_cast<const npu_op_irq_t *>(in);
17186 op = "NPU_OP_IRQ";
17187 v.disassemble(fields);
17188 break;
17189 }
17190 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17191 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV):
17192 {
17193 const npu_op_conv_t &v = *reinterpret_cast<const npu_op_conv_t *>(in);
17194 op = "NPU_OP_CONV";
17195 v.disassemble(fields);
17196 break;
17197 }
17198 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17199 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE):
17200 {
17201 const npu_op_depthwise_t &v = *reinterpret_cast<const npu_op_depthwise_t *>(in);
17202 op = "NPU_OP_DEPTHWISE";
17203 v.disassemble(fields);
17204 break;
17205 }
17206 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17207 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL):
17208 {
17209 const npu_op_pool_t &v = *reinterpret_cast<const npu_op_pool_t *>(in);
17210 op = "NPU_OP_POOL";
17211 v.disassemble(fields);
17212 break;
17213 }
17214 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17215 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE):
17216 {
17217 const npu_op_elementwise_t &v = *reinterpret_cast<const npu_op_elementwise_t *>(in);
17218 op = "NPU_OP_ELEMENTWISE";
17219 v.disassemble(fields);
17220 break;
17221 }
17222 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17223 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START):
17224 {
17225 const npu_op_dma_start_t &v = *reinterpret_cast<const npu_op_dma_start_t *>(in);
17226 op = "NPU_OP_DMA_START";
17227 v.disassemble(fields);
17228 break;
17229 }
17230 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17231 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT):
17232 {
17233 const npu_op_dma_wait_t &v = *reinterpret_cast<const npu_op_dma_wait_t *>(in);
17234 op = "NPU_OP_DMA_WAIT";
17235 v.disassemble(fields);
17236 break;
17237 }
17238 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17239 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT):
17240 {
17241 const npu_op_kernel_wait_t &v = *reinterpret_cast<const npu_op_kernel_wait_t *>(in);
17242 op = "NPU_OP_KERNEL_WAIT";
17243 v.disassemble(fields);
17244 break;
17245 }
17246 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17247 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK):
17248 {
17249 const npu_op_pmu_mask_t &v = *reinterpret_cast<const npu_op_pmu_mask_t *>(in);
17250 op = "NPU_OP_PMU_MASK";
17251 v.disassemble(fields);
17252 break;
17253 }
17254 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17255 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP):
17256 {
17257 const npu_set_ifm_pad_top_t &v = *reinterpret_cast<const npu_set_ifm_pad_top_t *>(in);
17258 op = "NPU_SET_IFM_PAD_TOP";
17259 v.disassemble(fields);
17260 break;
17261 }
17262 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17263 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT):
17264 {
17265 const npu_set_ifm_pad_left_t &v = *reinterpret_cast<const npu_set_ifm_pad_left_t *>(in);
17266 op = "NPU_SET_IFM_PAD_LEFT";
17267 v.disassemble(fields);
17268 break;
17269 }
17270 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17271 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT):
17272 {
17273 const npu_set_ifm_pad_right_t &v = *reinterpret_cast<const npu_set_ifm_pad_right_t *>(in);
17274 op = "NPU_SET_IFM_PAD_RIGHT";
17275 v.disassemble(fields);
17276 break;
17277 }
17278 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17279 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM):
17280 {
17281 const npu_set_ifm_pad_bottom_t &v = *reinterpret_cast<const npu_set_ifm_pad_bottom_t *>(in);
17282 op = "NPU_SET_IFM_PAD_BOTTOM";
17283 v.disassemble(fields);
17284 break;
17285 }
17286 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17287 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1):
17288 {
17289 const npu_set_ifm_depth_m1_t &v = *reinterpret_cast<const npu_set_ifm_depth_m1_t *>(in);
17290 op = "NPU_SET_IFM_DEPTH_M1";
17291 v.disassemble(fields);
17292 break;
17293 }
17294 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17295 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION):
17296 {
17297 const npu_set_ifm_precision_t &v = *reinterpret_cast<const npu_set_ifm_precision_t *>(in);
17298 op = "NPU_SET_IFM_PRECISION";
17299 v.disassemble(fields);
17300 break;
17301 }
17302 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17303 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE):
17304 {
17305 const npu_set_ifm_upscale_t &v = *reinterpret_cast<const npu_set_ifm_upscale_t *>(in);
17306 op = "NPU_SET_IFM_UPSCALE";
17307 v.disassemble(fields);
17308 break;
17309 }
17310 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17311 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT):
17312 {
17313 const npu_set_ifm_zero_point_t &v = *reinterpret_cast<const npu_set_ifm_zero_point_t *>(in);
17314 op = "NPU_SET_IFM_ZERO_POINT";
17315 v.disassemble(fields);
17316 break;
17317 }
17318 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17319 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1):
17320 {
17321 const npu_set_ifm_width0_m1_t &v = *reinterpret_cast<const npu_set_ifm_width0_m1_t *>(in);
17322 op = "NPU_SET_IFM_WIDTH0_M1";
17323 v.disassemble(fields);
17324 break;
17325 }
17326 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17327 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1):
17328 {
17329 const npu_set_ifm_height0_m1_t &v = *reinterpret_cast<const npu_set_ifm_height0_m1_t *>(in);
17330 op = "NPU_SET_IFM_HEIGHT0_M1";
17331 v.disassemble(fields);
17332 break;
17333 }
17334 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17335 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1):
17336 {
17337 const npu_set_ifm_height1_m1_t &v = *reinterpret_cast<const npu_set_ifm_height1_m1_t *>(in);
17338 op = "NPU_SET_IFM_HEIGHT1_M1";
17339 v.disassemble(fields);
17340 break;
17341 }
17342 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17343 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END):
17344 {
17345 const npu_set_ifm_ib_end_t &v = *reinterpret_cast<const npu_set_ifm_ib_end_t *>(in);
17346 op = "NPU_SET_IFM_IB_END";
17347 v.disassemble(fields);
17348 break;
17349 }
17350 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17351 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION):
17352 {
17353 const npu_set_ifm_region_t &v = *reinterpret_cast<const npu_set_ifm_region_t *>(in);
17354 op = "NPU_SET_IFM_REGION";
17355 v.disassemble(fields);
17356 break;
17357 }
17358 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17359 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1):
17360 {
17361 const npu_set_ofm_width_m1_t &v = *reinterpret_cast<const npu_set_ofm_width_m1_t *>(in);
17362 op = "NPU_SET_OFM_WIDTH_M1";
17363 v.disassemble(fields);
17364 break;
17365 }
17366 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17367 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1):
17368 {
17369 const npu_set_ofm_height_m1_t &v = *reinterpret_cast<const npu_set_ofm_height_m1_t *>(in);
17370 op = "NPU_SET_OFM_HEIGHT_M1";
17371 v.disassemble(fields);
17372 break;
17373 }
17374 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17375 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1):
17376 {
17377 const npu_set_ofm_depth_m1_t &v = *reinterpret_cast<const npu_set_ofm_depth_m1_t *>(in);
17378 op = "NPU_SET_OFM_DEPTH_M1";
17379 v.disassemble(fields);
17380 break;
17381 }
17382 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17383 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION):
17384 {
17385 const npu_set_ofm_precision_t &v = *reinterpret_cast<const npu_set_ofm_precision_t *>(in);
17386 op = "NPU_SET_OFM_PRECISION";
17387 v.disassemble(fields);
17388 break;
17389 }
17390 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17391 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1):
17392 {
17393 const npu_set_ofm_blk_width_m1_t &v = *reinterpret_cast<const npu_set_ofm_blk_width_m1_t *>(in);
17394 op = "NPU_SET_OFM_BLK_WIDTH_M1";
17395 v.disassemble(fields);
17396 break;
17397 }
17398 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17399 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1):
17400 {
17401 const npu_set_ofm_blk_height_m1_t &v = *reinterpret_cast<const npu_set_ofm_blk_height_m1_t *>(in);
17402 op = "NPU_SET_OFM_BLK_HEIGHT_M1";
17403 v.disassemble(fields);
17404 break;
17405 }
17406 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17407 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1):
17408 {
17409 const npu_set_ofm_blk_depth_m1_t &v = *reinterpret_cast<const npu_set_ofm_blk_depth_m1_t *>(in);
17410 op = "NPU_SET_OFM_BLK_DEPTH_M1";
17411 v.disassemble(fields);
17412 break;
17413 }
17414 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17415 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT):
17416 {
17417 const npu_set_ofm_zero_point_t &v = *reinterpret_cast<const npu_set_ofm_zero_point_t *>(in);
17418 op = "NPU_SET_OFM_ZERO_POINT";
17419 v.disassemble(fields);
17420 break;
17421 }
17422 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17423 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1):
17424 {
17425 const npu_set_ofm_width0_m1_t &v = *reinterpret_cast<const npu_set_ofm_width0_m1_t *>(in);
17426 op = "NPU_SET_OFM_WIDTH0_M1";
17427 v.disassemble(fields);
17428 break;
17429 }
17430 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17431 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1):
17432 {
17433 const npu_set_ofm_height0_m1_t &v = *reinterpret_cast<const npu_set_ofm_height0_m1_t *>(in);
17434 op = "NPU_SET_OFM_HEIGHT0_M1";
17435 v.disassemble(fields);
17436 break;
17437 }
17438 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17439 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1):
17440 {
17441 const npu_set_ofm_height1_m1_t &v = *reinterpret_cast<const npu_set_ofm_height1_m1_t *>(in);
17442 op = "NPU_SET_OFM_HEIGHT1_M1";
17443 v.disassemble(fields);
17444 break;
17445 }
17446 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17447 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION):
17448 {
17449 const npu_set_ofm_region_t &v = *reinterpret_cast<const npu_set_ofm_region_t *>(in);
17450 op = "NPU_SET_OFM_REGION";
17451 v.disassemble(fields);
17452 break;
17453 }
17454 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17455 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1):
17456 {
17457 const npu_set_kernel_width_m1_t &v = *reinterpret_cast<const npu_set_kernel_width_m1_t *>(in);
17458 op = "NPU_SET_KERNEL_WIDTH_M1";
17459 v.disassemble(fields);
17460 break;
17461 }
17462 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17463 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1):
17464 {
17465 const npu_set_kernel_height_m1_t &v = *reinterpret_cast<const npu_set_kernel_height_m1_t *>(in);
17466 op = "NPU_SET_KERNEL_HEIGHT_M1";
17467 v.disassemble(fields);
17468 break;
17469 }
17470 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17471 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE):
17472 {
17473 const npu_set_kernel_stride_t &v = *reinterpret_cast<const npu_set_kernel_stride_t *>(in);
17474 op = "NPU_SET_KERNEL_STRIDE";
17475 v.disassemble(fields);
17476 break;
17477 }
17478 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17479 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT):
17480 {
17481 const npu_set_acc_format_t &v = *reinterpret_cast<const npu_set_acc_format_t *>(in);
17482 op = "NPU_SET_ACC_FORMAT";
17483 v.disassemble(fields);
17484 break;
17485 }
17486 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17487 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION):
17488 {
17489 const npu_set_activation_t &v = *reinterpret_cast<const npu_set_activation_t *>(in);
17490 op = "NPU_SET_ACTIVATION";
17491 v.disassemble(fields);
17492 break;
17493 }
17494 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17495 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN):
17496 {
17497 const npu_set_activation_min_t &v = *reinterpret_cast<const npu_set_activation_min_t *>(in);
17498 op = "NPU_SET_ACTIVATION_MIN";
17499 v.disassemble(fields);
17500 break;
17501 }
17502 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17503 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX):
17504 {
17505 const npu_set_activation_max_t &v = *reinterpret_cast<const npu_set_activation_max_t *>(in);
17506 op = "NPU_SET_ACTIVATION_MAX";
17507 v.disassemble(fields);
17508 break;
17509 }
17510 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17511 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION):
17512 {
17513 const npu_set_weight_region_t &v = *reinterpret_cast<const npu_set_weight_region_t *>(in);
17514 op = "NPU_SET_WEIGHT_REGION";
17515 v.disassemble(fields);
17516 break;
17517 }
17518 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17519 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION):
17520 {
17521 const npu_set_scale_region_t &v = *reinterpret_cast<const npu_set_scale_region_t *>(in);
17522 op = "NPU_SET_SCALE_REGION";
17523 v.disassemble(fields);
17524 break;
17525 }
17526 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17527 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START):
17528 {
17529 const npu_set_ab_start_t &v = *reinterpret_cast<const npu_set_ab_start_t *>(in);
17530 op = "NPU_SET_AB_START";
17531 v.disassemble(fields);
17532 break;
17533 }
17534 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17535 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP):
17536 {
17537 const npu_set_blockdep_t &v = *reinterpret_cast<const npu_set_blockdep_t *>(in);
17538 op = "NPU_SET_BLOCKDEP";
17539 v.disassemble(fields);
17540 break;
17541 }
17542 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17543 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION):
17544 {
17545 const npu_set_dma0_src_region_t &v = *reinterpret_cast<const npu_set_dma0_src_region_t *>(in);
17546 op = "NPU_SET_DMA0_SRC_REGION";
17547 v.disassemble(fields);
17548 break;
17549 }
17550 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17551 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION):
17552 {
17553 const npu_set_dma0_dst_region_t &v = *reinterpret_cast<const npu_set_dma0_dst_region_t *>(in);
17554 op = "NPU_SET_DMA0_DST_REGION";
17555 v.disassemble(fields);
17556 break;
17557 }
17558 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17559 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0):
17560 {
17561 const npu_set_dma0_size0_t &v = *reinterpret_cast<const npu_set_dma0_size0_t *>(in);
17562 op = "NPU_SET_DMA0_SIZE0";
17563 v.disassemble(fields);
17564 break;
17565 }
17566 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17567 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1):
17568 {
17569 const npu_set_dma0_size1_t &v = *reinterpret_cast<const npu_set_dma0_size1_t *>(in);
17570 op = "NPU_SET_DMA0_SIZE1";
17571 v.disassemble(fields);
17572 break;
17573 }
17574 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17575 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST):
17576 {
17577 const npu_set_ifm2_broadcast_t &v = *reinterpret_cast<const npu_set_ifm2_broadcast_t *>(in);
17578 op = "NPU_SET_IFM2_BROADCAST";
17579 v.disassemble(fields);
17580 break;
17581 }
17582 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17583 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR):
17584 {
17585 const npu_set_ifm2_scalar_t &v = *reinterpret_cast<const npu_set_ifm2_scalar_t *>(in);
17586 op = "NPU_SET_IFM2_SCALAR";
17587 v.disassemble(fields);
17588 break;
17589 }
17590 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17591 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION):
17592 {
17593 const npu_set_ifm2_precision_t &v = *reinterpret_cast<const npu_set_ifm2_precision_t *>(in);
17594 op = "NPU_SET_IFM2_PRECISION";
17595 v.disassemble(fields);
17596 break;
17597 }
17598 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17599 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT):
17600 {
17601 const npu_set_ifm2_zero_point_t &v = *reinterpret_cast<const npu_set_ifm2_zero_point_t *>(in);
17602 op = "NPU_SET_IFM2_ZERO_POINT";
17603 v.disassemble(fields);
17604 break;
17605 }
17606 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17607 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1):
17608 {
17609 const npu_set_ifm2_width0_m1_t &v = *reinterpret_cast<const npu_set_ifm2_width0_m1_t *>(in);
17610 op = "NPU_SET_IFM2_WIDTH0_M1";
17611 v.disassemble(fields);
17612 break;
17613 }
17614 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17615 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1):
17616 {
17617 const npu_set_ifm2_height0_m1_t &v = *reinterpret_cast<const npu_set_ifm2_height0_m1_t *>(in);
17618 op = "NPU_SET_IFM2_HEIGHT0_M1";
17619 v.disassemble(fields);
17620 break;
17621 }
17622 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17623 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1):
17624 {
17625 const npu_set_ifm2_height1_m1_t &v = *reinterpret_cast<const npu_set_ifm2_height1_m1_t *>(in);
17626 op = "NPU_SET_IFM2_HEIGHT1_M1";
17627 v.disassemble(fields);
17628 break;
17629 }
17630 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17631 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START):
17632 {
17633 const npu_set_ifm2_ib_start_t &v = *reinterpret_cast<const npu_set_ifm2_ib_start_t *>(in);
17634 op = "NPU_SET_IFM2_IB_START";
17635 v.disassemble(fields);
17636 break;
17637 }
17638 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL) << 14) |
17639 static_cast<uint32_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION):
17640 {
17641 const npu_set_ifm2_region_t &v = *reinterpret_cast<const npu_set_ifm2_region_t *>(in);
17642 op = "NPU_SET_IFM2_REGION";
17643 v.disassemble(fields);
17644 break;
17645 }
17646 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17647 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0):
17648 {
17649 const npu_set_ifm_base0_t &v = *reinterpret_cast<const npu_set_ifm_base0_t *>(in);
17650 op = "NPU_SET_IFM_BASE0";
17651 v.disassemble(fields);
17652 break;
17653 }
17654 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17655 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1):
17656 {
17657 const npu_set_ifm_base1_t &v = *reinterpret_cast<const npu_set_ifm_base1_t *>(in);
17658 op = "NPU_SET_IFM_BASE1";
17659 v.disassemble(fields);
17660 break;
17661 }
17662 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17663 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2):
17664 {
17665 const npu_set_ifm_base2_t &v = *reinterpret_cast<const npu_set_ifm_base2_t *>(in);
17666 op = "NPU_SET_IFM_BASE2";
17667 v.disassemble(fields);
17668 break;
17669 }
17670 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17671 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3):
17672 {
17673 const npu_set_ifm_base3_t &v = *reinterpret_cast<const npu_set_ifm_base3_t *>(in);
17674 op = "NPU_SET_IFM_BASE3";
17675 v.disassemble(fields);
17676 break;
17677 }
17678 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17679 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X):
17680 {
17681 const npu_set_ifm_stride_x_t &v = *reinterpret_cast<const npu_set_ifm_stride_x_t *>(in);
17682 op = "NPU_SET_IFM_STRIDE_X";
17683 v.disassemble(fields);
17684 break;
17685 }
17686 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17687 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y):
17688 {
17689 const npu_set_ifm_stride_y_t &v = *reinterpret_cast<const npu_set_ifm_stride_y_t *>(in);
17690 op = "NPU_SET_IFM_STRIDE_Y";
17691 v.disassemble(fields);
17692 break;
17693 }
17694 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17695 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C):
17696 {
17697 const npu_set_ifm_stride_c_t &v = *reinterpret_cast<const npu_set_ifm_stride_c_t *>(in);
17698 op = "NPU_SET_IFM_STRIDE_C";
17699 v.disassemble(fields);
17700 break;
17701 }
17702 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17703 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0):
17704 {
17705 const npu_set_ofm_base0_t &v = *reinterpret_cast<const npu_set_ofm_base0_t *>(in);
17706 op = "NPU_SET_OFM_BASE0";
17707 v.disassemble(fields);
17708 break;
17709 }
17710 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17711 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1):
17712 {
17713 const npu_set_ofm_base1_t &v = *reinterpret_cast<const npu_set_ofm_base1_t *>(in);
17714 op = "NPU_SET_OFM_BASE1";
17715 v.disassemble(fields);
17716 break;
17717 }
17718 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17719 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2):
17720 {
17721 const npu_set_ofm_base2_t &v = *reinterpret_cast<const npu_set_ofm_base2_t *>(in);
17722 op = "NPU_SET_OFM_BASE2";
17723 v.disassemble(fields);
17724 break;
17725 }
17726 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17727 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3):
17728 {
17729 const npu_set_ofm_base3_t &v = *reinterpret_cast<const npu_set_ofm_base3_t *>(in);
17730 op = "NPU_SET_OFM_BASE3";
17731 v.disassemble(fields);
17732 break;
17733 }
17734 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17735 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X):
17736 {
17737 const npu_set_ofm_stride_x_t &v = *reinterpret_cast<const npu_set_ofm_stride_x_t *>(in);
17738 op = "NPU_SET_OFM_STRIDE_X";
17739 v.disassemble(fields);
17740 break;
17741 }
17742 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17743 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y):
17744 {
17745 const npu_set_ofm_stride_y_t &v = *reinterpret_cast<const npu_set_ofm_stride_y_t *>(in);
17746 op = "NPU_SET_OFM_STRIDE_Y";
17747 v.disassemble(fields);
17748 break;
17749 }
17750 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17751 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C):
17752 {
17753 const npu_set_ofm_stride_c_t &v = *reinterpret_cast<const npu_set_ofm_stride_c_t *>(in);
17754 op = "NPU_SET_OFM_STRIDE_C";
17755 v.disassemble(fields);
17756 break;
17757 }
17758 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17759 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE):
17760 {
17761 const npu_set_weight_base_t &v = *reinterpret_cast<const npu_set_weight_base_t *>(in);
17762 op = "NPU_SET_WEIGHT_BASE";
17763 v.disassemble(fields);
17764 break;
17765 }
17766 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17767 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH):
17768 {
17769 const npu_set_weight_length_t &v = *reinterpret_cast<const npu_set_weight_length_t *>(in);
17770 op = "NPU_SET_WEIGHT_LENGTH";
17771 v.disassemble(fields);
17772 break;
17773 }
17774 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17775 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE):
17776 {
17777 const npu_set_scale_base_t &v = *reinterpret_cast<const npu_set_scale_base_t *>(in);
17778 op = "NPU_SET_SCALE_BASE";
17779 v.disassemble(fields);
17780 break;
17781 }
17782 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17783 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH):
17784 {
17785 const npu_set_scale_length_t &v = *reinterpret_cast<const npu_set_scale_length_t *>(in);
17786 op = "NPU_SET_SCALE_LENGTH";
17787 v.disassemble(fields);
17788 break;
17789 }
17790 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17791 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE):
17792 {
17793 const npu_set_ofm_scale_t &v = *reinterpret_cast<const npu_set_ofm_scale_t *>(in);
17794 op = "NPU_SET_OFM_SCALE";
17795 v.disassemble(fields);
17796 break;
17797 }
17798 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17799 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE):
17800 {
17801 const npu_set_opa_scale_t &v = *reinterpret_cast<const npu_set_opa_scale_t *>(in);
17802 op = "NPU_SET_OPA_SCALE";
17803 v.disassemble(fields);
17804 break;
17805 }
17806 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17807 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE):
17808 {
17809 const npu_set_opb_scale_t &v = *reinterpret_cast<const npu_set_opb_scale_t *>(in);
17810 op = "NPU_SET_OPB_SCALE";
17811 v.disassemble(fields);
17812 break;
17813 }
17814 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17815 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC):
17816 {
17817 const npu_set_dma0_src_t &v = *reinterpret_cast<const npu_set_dma0_src_t *>(in);
17818 op = "NPU_SET_DMA0_SRC";
17819 v.disassemble(fields);
17820 break;
17821 }
17822 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17823 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST):
17824 {
17825 const npu_set_dma0_dst_t &v = *reinterpret_cast<const npu_set_dma0_dst_t *>(in);
17826 op = "NPU_SET_DMA0_DST";
17827 v.disassemble(fields);
17828 break;
17829 }
17830 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17831 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN):
17832 {
17833 const npu_set_dma0_len_t &v = *reinterpret_cast<const npu_set_dma0_len_t *>(in);
17834 op = "NPU_SET_DMA0_LEN";
17835 v.disassemble(fields);
17836 break;
17837 }
17838 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17839 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0):
17840 {
17841 const npu_set_ifm2_base0_t &v = *reinterpret_cast<const npu_set_ifm2_base0_t *>(in);
17842 op = "NPU_SET_IFM2_BASE0";
17843 v.disassemble(fields);
17844 break;
17845 }
17846 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17847 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1):
17848 {
17849 const npu_set_ifm2_base1_t &v = *reinterpret_cast<const npu_set_ifm2_base1_t *>(in);
17850 op = "NPU_SET_IFM2_BASE1";
17851 v.disassemble(fields);
17852 break;
17853 }
17854 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17855 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2):
17856 {
17857 const npu_set_ifm2_base2_t &v = *reinterpret_cast<const npu_set_ifm2_base2_t *>(in);
17858 op = "NPU_SET_IFM2_BASE2";
17859 v.disassemble(fields);
17860 break;
17861 }
17862 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17863 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3):
17864 {
17865 const npu_set_ifm2_base3_t &v = *reinterpret_cast<const npu_set_ifm2_base3_t *>(in);
17866 op = "NPU_SET_IFM2_BASE3";
17867 v.disassemble(fields);
17868 break;
17869 }
17870 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17871 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X):
17872 {
17873 const npu_set_ifm2_stride_x_t &v = *reinterpret_cast<const npu_set_ifm2_stride_x_t *>(in);
17874 op = "NPU_SET_IFM2_STRIDE_X";
17875 v.disassemble(fields);
17876 break;
17877 }
17878 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17879 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y):
17880 {
17881 const npu_set_ifm2_stride_y_t &v = *reinterpret_cast<const npu_set_ifm2_stride_y_t *>(in);
17882 op = "NPU_SET_IFM2_STRIDE_Y";
17883 v.disassemble(fields);
17884 break;
17885 }
17886 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17887 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C):
17888 {
17889 const npu_set_ifm2_stride_c_t &v = *reinterpret_cast<const npu_set_ifm2_stride_c_t *>(in);
17890 op = "NPU_SET_IFM2_STRIDE_C";
17891 v.disassemble(fields);
17892 break;
17893 }
17894 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17895 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED0):
17896 {
17897 const npu_set_user_defined0_t &v = *reinterpret_cast<const npu_set_user_defined0_t *>(in);
17898 op = "NPU_SET_USER_DEFINED0";
17899 v.disassemble(fields);
17900 break;
17901 }
17902 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17903 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED1):
17904 {
17905 const npu_set_user_defined1_t &v = *reinterpret_cast<const npu_set_user_defined1_t *>(in);
17906 op = "NPU_SET_USER_DEFINED1";
17907 v.disassemble(fields);
17908 break;
17909 }
17910 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17911 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED2):
17912 {
17913 const npu_set_user_defined2_t &v = *reinterpret_cast<const npu_set_user_defined2_t *>(in);
17914 op = "NPU_SET_USER_DEFINED2";
17915 v.disassemble(fields);
17916 break;
17917 }
17918 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17919 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED3):
17920 {
17921 const npu_set_user_defined3_t &v = *reinterpret_cast<const npu_set_user_defined3_t *>(in);
17922 op = "NPU_SET_USER_DEFINED3";
17923 v.disassemble(fields);
17924 break;
17925 }
17926 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17927 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED4):
17928 {
17929 const npu_set_user_defined4_t &v = *reinterpret_cast<const npu_set_user_defined4_t *>(in);
17930 op = "NPU_SET_USER_DEFINED4";
17931 v.disassemble(fields);
17932 break;
17933 }
17934 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17935 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED5):
17936 {
17937 const npu_set_user_defined5_t &v = *reinterpret_cast<const npu_set_user_defined5_t *>(in);
17938 op = "NPU_SET_USER_DEFINED5";
17939 v.disassemble(fields);
17940 break;
17941 }
17942 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17943 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED6):
17944 {
17945 const npu_set_user_defined6_t &v = *reinterpret_cast<const npu_set_user_defined6_t *>(in);
17946 op = "NPU_SET_USER_DEFINED6";
17947 v.disassemble(fields);
17948 break;
17949 }
17950 case (static_cast<uint32_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL) << 14) |
17951 static_cast<uint32_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED7):
17952 {
17953 const npu_set_user_defined7_t &v = *reinterpret_cast<const npu_set_user_defined7_t *>(in);
17954 op = "NPU_SET_USER_DEFINED7";
17955 v.disassemble(fields);
17956 break;
17957 }
17958 }
17959 return (*in & (3 << 14)) != 0 ? 2 : 1;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020017960 }
Jonny Svärd136810f2021-10-13 16:04:26 +020017961#endif
17962#endif
17963 // Signal the end of command stream
17964 struct npu_op_stop_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020017965 {
Jonny Svärd136810f2021-10-13 16:04:26 +020017966#ifdef __cplusplus
17967 private:
17968#endif
17969 uint32_t opcode : 10; // opcode
17970 uint32_t reserved0 : 4;
17971 uint32_t control : 2; // control
17972 uint32_t mask : 16; // Encoding for 16-bit mask value
17973#ifdef __cplusplus
17974 public:
17975 npu_op_stop_t(uint32_t _mask) :
17976 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010017977 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mask(_mask & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020017978 {
17979 }
17980 CONSTEXPR npu_op_stop_t() :
17981 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP)), reserved0(0),
17982 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mask(0)
17983 {
17984 }
17985 CONSTEXPR bool valid() const
17986 {
17987 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP) &&
17988 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17989 }
17990 CONSTEXPR void init()
17991 {
17992 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_STOP);
17993 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
17994 }
17995 operator uint32_t()
17996 {
17997 uint32_t word;
17998 std::memcpy(&word, this, sizeof(word));
17999 return word;
18000 }
18001 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18002 {
18003 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18004 }
18005 CONSTEXPR npu_op_stop_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18006 {
18007 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18008 return *this;
18009 }
18010 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18011 {
18012 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18013 }
18014 CONSTEXPR npu_op_stop_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18015 {
18016 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18017 return *this;
18018 }
18019 CONSTEXPR uint32_t get_mask() const
18020 {
18021 return static_cast<uint32_t>(mask);
18022 }
18023 CONSTEXPR npu_op_stop_t &set_mask(uint32_t value)
18024 {
18025 mask = static_cast<uint16_t>(value) & ((1U << 16) - 1);
18026 return *this;
18027 }
18028#ifdef NPU_DISASSEMBLE
18029 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18030 {
18031 fields.push_back(std::make_pair<std::string, std::string>("mask", std::to_string(mask)));
18032 }
18033#endif
18034#endif
18035 };
18036 // Raises an IRQ to the host
18037 struct npu_op_irq_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018038 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018039#ifdef __cplusplus
18040 private:
18041#endif
18042 uint32_t opcode : 10; // opcode
18043 uint32_t reserved0 : 4;
18044 uint32_t control : 2; // control
18045 uint32_t mask : 16; // Encoding for 16-bit mask value
18046#ifdef __cplusplus
18047 public:
18048 npu_op_irq_t(uint32_t _mask) :
18049 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018050 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mask(_mask & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020018051 {
18052 }
18053 CONSTEXPR npu_op_irq_t() :
18054 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ)), reserved0(0),
18055 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mask(0)
18056 {
18057 }
18058 CONSTEXPR bool valid() const
18059 {
18060 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ) &&
18061 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18062 }
18063 CONSTEXPR void init()
18064 {
18065 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_IRQ);
18066 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18067 }
18068 operator uint32_t()
18069 {
18070 uint32_t word;
18071 std::memcpy(&word, this, sizeof(word));
18072 return word;
18073 }
18074 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18075 {
18076 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18077 }
18078 CONSTEXPR npu_op_irq_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18079 {
18080 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18081 return *this;
18082 }
18083 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18084 {
18085 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18086 }
18087 CONSTEXPR npu_op_irq_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18088 {
18089 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18090 return *this;
18091 }
18092 CONSTEXPR uint32_t get_mask() const
18093 {
18094 return static_cast<uint32_t>(mask);
18095 }
18096 CONSTEXPR npu_op_irq_t &set_mask(uint32_t value)
18097 {
18098 mask = static_cast<uint16_t>(value) & ((1U << 16) - 1);
18099 return *this;
18100 }
18101#ifdef NPU_DISASSEMBLE
18102 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18103 {
18104 fields.push_back(std::make_pair<std::string, std::string>("mask", std::to_string(mask)));
18105 }
18106#endif
18107#endif
18108 };
18109 // 2D convolution
18110 struct npu_op_conv_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018111 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018112#ifdef __cplusplus
18113 private:
18114#endif
18115 uint32_t opcode : 10; // opcode
18116 uint32_t reserved0 : 4;
18117 uint32_t control : 2; // control
18118 uint32_t reserved1 : 16;
18119#ifdef __cplusplus
18120 public:
18121 CONSTEXPR npu_op_conv_t() :
18122 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV)), reserved0(0),
18123 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), reserved1(0)
18124 {
18125 }
18126 CONSTEXPR bool valid() const
18127 {
18128 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV) &&
18129 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18130 }
18131 CONSTEXPR void init()
18132 {
18133 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_CONV);
18134 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18135 }
18136 operator uint32_t()
18137 {
18138 uint32_t word;
18139 std::memcpy(&word, this, sizeof(word));
18140 return word;
18141 }
18142 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18143 {
18144 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18145 }
18146 CONSTEXPR npu_op_conv_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18147 {
18148 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18149 return *this;
18150 }
18151 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18152 {
18153 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18154 }
18155 CONSTEXPR npu_op_conv_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18156 {
18157 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18158 return *this;
18159 }
18160#ifdef NPU_DISASSEMBLE
18161 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const {}
18162#endif
18163#endif
18164 };
18165 // Depth-wise 2D convolution
18166 struct npu_op_depthwise_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018167 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018168#ifdef __cplusplus
18169 private:
18170#endif
18171 uint32_t opcode : 10; // opcode
18172 uint32_t reserved0 : 4;
18173 uint32_t control : 2; // control
18174 uint32_t reserved1 : 16;
18175#ifdef __cplusplus
18176 public:
18177 CONSTEXPR npu_op_depthwise_t() :
18178 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE)), reserved0(0),
18179 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), reserved1(0)
18180 {
18181 }
18182 CONSTEXPR bool valid() const
18183 {
18184 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE) &&
18185 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18186 }
18187 CONSTEXPR void init()
18188 {
18189 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DEPTHWISE);
18190 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18191 }
18192 operator uint32_t()
18193 {
18194 uint32_t word;
18195 std::memcpy(&word, this, sizeof(word));
18196 return word;
18197 }
18198 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18199 {
18200 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18201 }
18202 CONSTEXPR npu_op_depthwise_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18203 {
18204 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18205 return *this;
18206 }
18207 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18208 {
18209 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18210 }
18211 CONSTEXPR npu_op_depthwise_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18212 {
18213 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18214 return *this;
18215 }
18216#ifdef NPU_DISASSEMBLE
18217 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const {}
18218#endif
18219#endif
18220 };
18221 // Pooling
18222 struct npu_op_pool_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018223 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018224#ifdef __cplusplus
18225 private:
18226#endif
18227 uint32_t opcode : 10; // opcode
18228 uint32_t reserved0 : 4;
18229 uint32_t control : 2; // control
18230 uint32_t pooling_mode : 3; // Pooling mode
18231 uint32_t reserved1 : 13;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018232#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020018233 public:
18234 npu_op_pool_t(NPU_NAMESPACE::pooling_mode _pooling_mode) :
18235 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL)), reserved0(0),
18236 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18237 pooling_mode(static_cast<uint8_t>(_pooling_mode) & ((1U << 3) - 1)), reserved1(0)
18238 {
18239 }
18240 CONSTEXPR npu_op_pool_t() :
18241 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL)), reserved0(0),
18242 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pooling_mode(0), reserved1(0)
18243 {
18244 }
18245 CONSTEXPR bool valid() const
18246 {
18247 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL) &&
18248 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18249 }
18250 CONSTEXPR void init()
18251 {
18252 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_POOL);
18253 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18254 }
18255 operator uint32_t()
18256 {
18257 uint32_t word;
18258 std::memcpy(&word, this, sizeof(word));
18259 return word;
18260 }
18261 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18262 {
18263 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18264 }
18265 CONSTEXPR npu_op_pool_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18266 {
18267 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18268 return *this;
18269 }
18270 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18271 {
18272 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18273 }
18274 CONSTEXPR npu_op_pool_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18275 {
18276 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18277 return *this;
18278 }
18279 CONSTEXPR NPU_NAMESPACE::pooling_mode get_pooling_mode() const
18280 {
18281 return static_cast<NPU_NAMESPACE::pooling_mode>(pooling_mode);
18282 }
18283 CONSTEXPR npu_op_pool_t &set_pooling_mode(NPU_NAMESPACE::pooling_mode value)
18284 {
18285 pooling_mode = static_cast<uint8_t>(value) & ((1U << 3) - 1);
18286 return *this;
18287 }
18288#ifdef NPU_DISASSEMBLE
18289 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18290 {
18291 fields.push_back(std::make_pair<std::string, std::string>(
18292 "pooling_mode",
18293 (pooling_mode < (sizeof(pooling_mode_str) / sizeof(pooling_mode_str[0])) ?
18294 pooling_mode_str[pooling_mode] :
18295 "****")));
18296 }
18297#endif
18298#endif
18299 };
18300 // Elementwise operation
18301 struct npu_op_elementwise_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018302 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018303#ifdef __cplusplus
18304 private:
18305#endif
18306 uint32_t opcode : 10; // opcode
18307 uint32_t reserved0 : 4;
18308 uint32_t control : 2; // control
18309 uint32_t elementwise_mode : 6; // Elementwise mode
18310 uint32_t reserved1 : 10;
18311#ifdef __cplusplus
18312 public:
18313 npu_op_elementwise_t(NPU_NAMESPACE::elementwise_mode _elementwise_mode) :
18314 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE)), reserved0(0),
18315 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
18316 elementwise_mode(static_cast<uint8_t>(_elementwise_mode) & ((1U << 6) - 1)), reserved1(0)
18317 {
18318 }
18319 CONSTEXPR npu_op_elementwise_t() :
18320 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE)), reserved0(0),
18321 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), elementwise_mode(0), reserved1(0)
18322 {
18323 }
18324 CONSTEXPR bool valid() const
18325 {
18326 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE) &&
18327 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18328 }
18329 CONSTEXPR void init()
18330 {
18331 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_ELEMENTWISE);
18332 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18333 }
18334 operator uint32_t()
18335 {
18336 uint32_t word;
18337 std::memcpy(&word, this, sizeof(word));
18338 return word;
18339 }
18340 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18341 {
18342 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18343 }
18344 CONSTEXPR npu_op_elementwise_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18345 {
18346 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18347 return *this;
18348 }
18349 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18350 {
18351 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18352 }
18353 CONSTEXPR npu_op_elementwise_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18354 {
18355 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18356 return *this;
18357 }
18358 CONSTEXPR NPU_NAMESPACE::elementwise_mode get_elementwise_mode() const
18359 {
18360 return static_cast<NPU_NAMESPACE::elementwise_mode>(elementwise_mode);
18361 }
18362 CONSTEXPR npu_op_elementwise_t &set_elementwise_mode(NPU_NAMESPACE::elementwise_mode value)
18363 {
18364 elementwise_mode = static_cast<uint8_t>(value) & ((1U << 6) - 1);
18365 return *this;
18366 }
18367#ifdef NPU_DISASSEMBLE
18368 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18369 {
18370 fields.push_back(std::make_pair<std::string, std::string>(
18371 "elementwise_mode",
18372 (elementwise_mode < (sizeof(elementwise_mode_str) / sizeof(elementwise_mode_str[0])) ?
18373 elementwise_mode_str[elementwise_mode] :
18374 "****")));
18375 }
18376#endif
18377#endif
18378 };
18379 // Queue new DMA for the given channel
18380 struct npu_op_dma_start_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018381 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018382#ifdef __cplusplus
18383 private:
18384#endif
18385 uint32_t opcode : 10; // opcode
18386 uint32_t reserved0 : 4;
18387 uint32_t control : 2; // control
18388 uint32_t reserved1 : 16;
18389#ifdef __cplusplus
18390 public:
18391 CONSTEXPR npu_op_dma_start_t() :
18392 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START)), reserved0(0),
18393 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), reserved1(0)
18394 {
18395 }
18396 CONSTEXPR bool valid() const
18397 {
18398 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START) &&
18399 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18400 }
18401 CONSTEXPR void init()
18402 {
18403 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_START);
18404 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18405 }
18406 operator uint32_t()
18407 {
18408 uint32_t word;
18409 std::memcpy(&word, this, sizeof(word));
18410 return word;
18411 }
18412 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18413 {
18414 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18415 }
18416 CONSTEXPR npu_op_dma_start_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18417 {
18418 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18419 return *this;
18420 }
18421 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18422 {
18423 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18424 }
18425 CONSTEXPR npu_op_dma_start_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18426 {
18427 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18428 return *this;
18429 }
18430#ifdef NPU_DISASSEMBLE
18431 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const {}
18432#endif
18433#endif
18434 };
18435 // Wait for the DMA channel to have k or fewer active descriptors outstanding
18436 struct npu_op_dma_wait_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018437 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018438#ifdef __cplusplus
18439 private:
18440#endif
18441 uint32_t opcode : 10; // opcode
18442 uint32_t reserved0 : 4;
18443 uint32_t control : 2; // control
18444 uint32_t k : 4; // Number of outstanding descriptors
18445 uint32_t reserved1 : 12;
18446#ifdef __cplusplus
18447 public:
18448 npu_op_dma_wait_t(uint32_t _k) :
18449 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018450 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), k(_k & ((1U << 4) - 1)), reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020018451 {
18452 }
18453 CONSTEXPR npu_op_dma_wait_t() :
18454 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT)), reserved0(0),
18455 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), k(0), reserved1(0)
18456 {
18457 }
18458 CONSTEXPR bool valid() const
18459 {
18460 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT) &&
18461 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18462 }
18463 CONSTEXPR void init()
18464 {
18465 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_DMA_WAIT);
18466 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18467 }
18468 operator uint32_t()
18469 {
18470 uint32_t word;
18471 std::memcpy(&word, this, sizeof(word));
18472 return word;
18473 }
18474 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18475 {
18476 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18477 }
18478 CONSTEXPR npu_op_dma_wait_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18479 {
18480 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18481 return *this;
18482 }
18483 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18484 {
18485 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18486 }
18487 CONSTEXPR npu_op_dma_wait_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18488 {
18489 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18490 return *this;
18491 }
18492 CONSTEXPR uint32_t get_k() const
18493 {
18494 return static_cast<uint32_t>(k);
18495 }
18496 CONSTEXPR npu_op_dma_wait_t &set_k(uint32_t value)
18497 {
18498 k = static_cast<uint8_t>(value) & ((1U << 4) - 1);
18499 return *this;
18500 }
18501#ifdef NPU_DISASSEMBLE
18502 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18503 {
18504 fields.push_back(std::make_pair<std::string, std::string>("k", std::to_string(k)));
18505 }
18506#endif
18507#endif
18508 };
18509 // Wait for n or fewer kernel operations to be remaining
18510 struct npu_op_kernel_wait_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018511 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018512#ifdef __cplusplus
18513 private:
18514#endif
18515 uint32_t opcode : 10; // opcode
18516 uint32_t reserved0 : 4;
18517 uint32_t control : 2; // control
18518 uint32_t n : 2; // Number of kernel operations in range 0-3
18519 uint32_t reserved1 : 14;
18520#ifdef __cplusplus
18521 public:
18522 npu_op_kernel_wait_t(uint32_t _n) :
18523 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018524 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), n(_n & ((1U << 2) - 1)), reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020018525 {
18526 }
18527 CONSTEXPR npu_op_kernel_wait_t() :
18528 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT)), reserved0(0),
18529 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), n(0), reserved1(0)
18530 {
18531 }
18532 CONSTEXPR bool valid() const
18533 {
18534 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT) &&
18535 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18536 }
18537 CONSTEXPR void init()
18538 {
18539 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_KERNEL_WAIT);
18540 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18541 }
18542 operator uint32_t()
18543 {
18544 uint32_t word;
18545 std::memcpy(&word, this, sizeof(word));
18546 return word;
18547 }
18548 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18549 {
18550 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18551 }
18552 CONSTEXPR npu_op_kernel_wait_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18553 {
18554 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18555 return *this;
18556 }
18557 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18558 {
18559 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18560 }
18561 CONSTEXPR npu_op_kernel_wait_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18562 {
18563 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18564 return *this;
18565 }
18566 CONSTEXPR uint32_t get_n() const
18567 {
18568 return static_cast<uint32_t>(n);
18569 }
18570 CONSTEXPR npu_op_kernel_wait_t &set_n(uint32_t value)
18571 {
18572 n = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18573 return *this;
18574 }
18575#ifdef NPU_DISASSEMBLE
18576 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18577 {
18578 fields.push_back(std::make_pair<std::string, std::string>("n", std::to_string(n)));
18579 }
18580#endif
18581#endif
18582 };
18583 // Enable or disable PMU counting (debug feature only)
18584 struct npu_op_pmu_mask_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018585 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018586#ifdef __cplusplus
18587 private:
18588#endif
18589 uint32_t opcode : 10; // opcode
18590 uint32_t reserved0 : 4;
18591 uint32_t control : 2; // control
18592 uint32_t enable : 1; // Enable or disable PMU mask
18593 uint32_t reserved1 : 15;
18594#ifdef __cplusplus
18595 public:
18596 npu_op_pmu_mask_t(uint32_t _enable) :
18597 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018598 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), enable(_enable & ((1U << 1) - 1)),
18599 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020018600 {
18601 }
18602 CONSTEXPR npu_op_pmu_mask_t() :
18603 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK)), reserved0(0),
18604 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), enable(0), reserved1(0)
18605 {
18606 }
18607 CONSTEXPR bool valid() const
18608 {
18609 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK) &&
18610 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18611 }
18612 CONSTEXPR void init()
18613 {
18614 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_OP_PMU_MASK);
18615 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18616 }
18617 operator uint32_t()
18618 {
18619 uint32_t word;
18620 std::memcpy(&word, this, sizeof(word));
18621 return word;
18622 }
18623 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18624 {
18625 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18626 }
18627 CONSTEXPR npu_op_pmu_mask_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18628 {
18629 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18630 return *this;
18631 }
18632 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18633 {
18634 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18635 }
18636 CONSTEXPR npu_op_pmu_mask_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18637 {
18638 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18639 return *this;
18640 }
18641 CONSTEXPR uint32_t get_enable() const
18642 {
18643 return static_cast<uint32_t>(enable);
18644 }
18645 CONSTEXPR npu_op_pmu_mask_t &set_enable(uint32_t value)
18646 {
18647 enable = static_cast<uint8_t>(value) & ((1U << 1) - 1);
18648 return *this;
18649 }
18650#ifdef NPU_DISASSEMBLE
18651 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18652 {
18653 fields.push_back(std::make_pair<std::string, std::string>("enable", std::to_string(enable)));
18654 }
18655#endif
18656#endif
18657 };
18658 // IFM top pad
18659 struct npu_set_ifm_pad_top_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018660 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018661#ifdef __cplusplus
18662 private:
18663#endif
18664 uint32_t opcode : 10; // opcode
18665 uint32_t reserved0 : 4;
18666 uint32_t control : 2; // control
18667 uint32_t pad : 7; // IFM top pad
18668 uint32_t reserved1 : 9;
18669#ifdef __cplusplus
18670 public:
18671 npu_set_ifm_pad_top_t(uint32_t _pad) :
18672 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018673 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(_pad & ((1U << 7) - 1)), reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020018674 {
18675 }
18676 CONSTEXPR npu_set_ifm_pad_top_t() :
18677 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP)), reserved0(0),
18678 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
18679 {
18680 }
18681 CONSTEXPR bool valid() const
18682 {
18683 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP) &&
18684 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18685 }
18686 CONSTEXPR void init()
18687 {
18688 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_TOP);
18689 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18690 }
18691 operator uint32_t()
18692 {
18693 uint32_t word;
18694 std::memcpy(&word, this, sizeof(word));
18695 return word;
18696 }
18697 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18698 {
18699 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18700 }
18701 CONSTEXPR npu_set_ifm_pad_top_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18702 {
18703 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18704 return *this;
18705 }
18706 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18707 {
18708 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18709 }
18710 CONSTEXPR npu_set_ifm_pad_top_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18711 {
18712 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18713 return *this;
18714 }
18715 CONSTEXPR uint32_t get_pad() const
18716 {
18717 return static_cast<uint32_t>(pad);
18718 }
18719 CONSTEXPR npu_set_ifm_pad_top_t &set_pad(uint32_t value)
18720 {
18721 pad = static_cast<uint8_t>(value) & ((1U << 7) - 1);
18722 return *this;
18723 }
18724#ifdef NPU_DISASSEMBLE
18725 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18726 {
18727 fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
18728 }
18729#endif
18730#endif
18731 };
18732 // IFM left pad
18733 struct npu_set_ifm_pad_left_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018734 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018735#ifdef __cplusplus
18736 private:
18737#endif
18738 uint32_t opcode : 10; // opcode
18739 uint32_t reserved0 : 4;
18740 uint32_t control : 2; // control
18741 uint32_t pad : 7; // IFM left pad
18742 uint32_t reserved1 : 9;
18743#ifdef __cplusplus
18744 public:
18745 npu_set_ifm_pad_left_t(uint32_t _pad) :
18746 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018747 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(_pad & ((1U << 7) - 1)), reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020018748 {
18749 }
18750 CONSTEXPR npu_set_ifm_pad_left_t() :
18751 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT)), reserved0(0),
18752 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
18753 {
18754 }
18755 CONSTEXPR bool valid() const
18756 {
18757 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT) &&
18758 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18759 }
18760 CONSTEXPR void init()
18761 {
18762 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_LEFT);
18763 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18764 }
18765 operator uint32_t()
18766 {
18767 uint32_t word;
18768 std::memcpy(&word, this, sizeof(word));
18769 return word;
18770 }
18771 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18772 {
18773 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18774 }
18775 CONSTEXPR npu_set_ifm_pad_left_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18776 {
18777 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18778 return *this;
18779 }
18780 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18781 {
18782 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18783 }
18784 CONSTEXPR npu_set_ifm_pad_left_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18785 {
18786 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18787 return *this;
18788 }
18789 CONSTEXPR uint32_t get_pad() const
18790 {
18791 return static_cast<uint32_t>(pad);
18792 }
18793 CONSTEXPR npu_set_ifm_pad_left_t &set_pad(uint32_t value)
18794 {
18795 pad = static_cast<uint8_t>(value) & ((1U << 7) - 1);
18796 return *this;
18797 }
18798#ifdef NPU_DISASSEMBLE
18799 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18800 {
18801 fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
18802 }
18803#endif
18804#endif
18805 };
18806 // IFM right pad
18807 struct npu_set_ifm_pad_right_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018808 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018809#ifdef __cplusplus
18810 private:
18811#endif
18812 uint32_t opcode : 10; // opcode
18813 uint32_t reserved0 : 4;
18814 uint32_t control : 2; // control
18815 uint32_t pad : 8; // IFM right pad. Max value is 128
18816 uint32_t reserved1 : 8;
18817#ifdef __cplusplus
18818 public:
18819 npu_set_ifm_pad_right_t(uint32_t _pad) :
18820 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018821 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(_pad & ((1U << 8) - 1)), reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020018822 {
18823 }
18824 CONSTEXPR npu_set_ifm_pad_right_t() :
18825 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT)), reserved0(0),
18826 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
18827 {
18828 }
18829 CONSTEXPR bool valid() const
18830 {
18831 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT) &&
18832 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18833 }
18834 CONSTEXPR void init()
18835 {
18836 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_RIGHT);
18837 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18838 }
18839 operator uint32_t()
18840 {
18841 uint32_t word;
18842 std::memcpy(&word, this, sizeof(word));
18843 return word;
18844 }
18845 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18846 {
18847 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18848 }
18849 CONSTEXPR npu_set_ifm_pad_right_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18850 {
18851 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18852 return *this;
18853 }
18854 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18855 {
18856 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18857 }
18858 CONSTEXPR npu_set_ifm_pad_right_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18859 {
18860 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18861 return *this;
18862 }
18863 CONSTEXPR uint32_t get_pad() const
18864 {
18865 return static_cast<uint32_t>(pad);
18866 }
18867 CONSTEXPR npu_set_ifm_pad_right_t &set_pad(uint32_t value)
18868 {
18869 pad = static_cast<uint8_t>(value) & ((1U << 8) - 1);
18870 return *this;
18871 }
18872#ifdef NPU_DISASSEMBLE
18873 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18874 {
18875 fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
18876 }
18877#endif
18878#endif
18879 };
18880 // IFM bottom pad
18881 struct npu_set_ifm_pad_bottom_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018882 {
Jonny Svärd136810f2021-10-13 16:04:26 +020018883#ifdef __cplusplus
18884 private:
18885#endif
18886 uint32_t opcode : 10; // opcode
18887 uint32_t reserved0 : 4;
18888 uint32_t control : 2; // control
18889 uint32_t pad : 8; // IFM bottom pad. Max value is 128
18890 uint32_t reserved1 : 8;
18891#ifdef __cplusplus
18892 public:
18893 npu_set_ifm_pad_bottom_t(uint32_t _pad) :
18894 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018895 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(_pad & ((1U << 8) - 1)), reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020018896 {
18897 }
18898 CONSTEXPR npu_set_ifm_pad_bottom_t() :
18899 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM)), reserved0(0),
18900 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), pad(0), reserved1(0)
18901 {
18902 }
18903 CONSTEXPR bool valid() const
18904 {
18905 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM) &&
18906 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18907 }
18908 CONSTEXPR void init()
18909 {
18910 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PAD_BOTTOM);
18911 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18912 }
18913 operator uint32_t()
18914 {
18915 uint32_t word;
18916 std::memcpy(&word, this, sizeof(word));
18917 return word;
18918 }
18919 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18920 {
18921 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18922 }
18923 CONSTEXPR npu_set_ifm_pad_bottom_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18924 {
18925 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18926 return *this;
18927 }
18928 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
18929 {
18930 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
18931 }
18932 CONSTEXPR npu_set_ifm_pad_bottom_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
18933 {
18934 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
18935 return *this;
18936 }
18937 CONSTEXPR uint32_t get_pad() const
18938 {
18939 return static_cast<uint32_t>(pad);
18940 }
18941 CONSTEXPR npu_set_ifm_pad_bottom_t &set_pad(uint32_t value)
18942 {
18943 pad = static_cast<uint8_t>(value) & ((1U << 8) - 1);
18944 return *this;
18945 }
18946#ifdef NPU_DISASSEMBLE
18947 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
18948 {
18949 fields.push_back(std::make_pair<std::string, std::string>("pad", std::to_string(pad)));
18950 }
18951#endif
18952#endif
18953 };
18954 // Number of input channels for convolution
18955 struct npu_set_ifm_depth_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018956 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020018957#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020018958 private:
18959#endif
18960 uint32_t opcode : 10; // opcode
18961 uint32_t reserved0 : 4;
18962 uint32_t control : 2; // control
18963 uint32_t depth_m1 : 16; // Number of input channels for convolution
18964#ifdef __cplusplus
18965 public:
18966 npu_set_ifm_depth_m1_t(uint32_t _depth_m1) :
18967 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010018968 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(_depth_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020018969 {
18970 }
18971 CONSTEXPR npu_set_ifm_depth_m1_t() :
18972 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1)), reserved0(0),
18973 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(0)
18974 {
18975 }
18976 CONSTEXPR bool valid() const
18977 {
18978 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1) &&
18979 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18980 }
18981 CONSTEXPR void init()
18982 {
18983 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_DEPTH_M1);
18984 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
18985 }
18986 operator uint32_t()
18987 {
18988 uint32_t word;
18989 std::memcpy(&word, this, sizeof(word));
18990 return word;
18991 }
18992 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
18993 {
18994 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
18995 }
18996 CONSTEXPR npu_set_ifm_depth_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
18997 {
18998 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
18999 return *this;
19000 }
19001 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19002 {
19003 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19004 }
19005 CONSTEXPR npu_set_ifm_depth_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19006 {
19007 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19008 return *this;
19009 }
19010 CONSTEXPR uint32_t get_depth_m1() const
19011 {
19012 return static_cast<uint32_t>(depth_m1);
19013 }
19014 CONSTEXPR npu_set_ifm_depth_m1_t &set_depth_m1(uint32_t value)
19015 {
19016 depth_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19017 return *this;
19018 }
19019#ifdef NPU_DISASSEMBLE
19020 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19021 {
19022 fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
19023 }
19024#endif
19025#endif
19026 };
19027 // IFM Precision
19028 struct npu_set_ifm_precision_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019029 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019030#ifdef __cplusplus
19031 private:
19032#endif
19033 uint32_t opcode : 10; // opcode
19034 uint32_t reserved0 : 4;
19035 uint32_t control : 2; // control
19036 uint32_t activation_type : 1; // IFM type
19037 uint32_t reserved1 : 1;
19038 uint32_t activation_precision : 2; // IFM precision
19039 uint32_t reserved2 : 2;
19040 uint32_t activation_format : 2; // IFM format
19041 uint32_t scale_mode : 2; // IFM scale mode
19042 uint32_t reserved3 : 4;
19043 uint32_t round_mode : 2; // IFM round mode
19044#ifdef __cplusplus
19045 public:
19046 npu_set_ifm_precision_t(NPU_NAMESPACE::activation_type _activation_type,
19047 NPU_NAMESPACE::activation_precision _activation_precision,
19048 NPU_NAMESPACE::activation_format _activation_format,
19049 NPU_NAMESPACE::ifm_scale_mode _scale_mode,
19050 NPU_NAMESPACE::round_mode _round_mode) :
19051 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION)),
19052 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19053 activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1) - 1)), reserved1(0),
19054 activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2) - 1)), reserved2(0),
19055 activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2) - 1)),
19056 scale_mode(static_cast<uint8_t>(_scale_mode) & ((1U << 2) - 1)), reserved3(0),
19057 round_mode(static_cast<uint8_t>(_round_mode) & ((1U << 2) - 1))
19058 {
19059 }
19060 CONSTEXPR npu_set_ifm_precision_t() :
19061 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION)), reserved0(0),
19062 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_type(0), reserved1(0),
19063 activation_precision(0), reserved2(0), activation_format(0), scale_mode(0), reserved3(0), round_mode(0)
19064 {
19065 }
19066 CONSTEXPR bool valid() const
19067 {
19068 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION) &&
19069 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19070 }
19071 CONSTEXPR void init()
19072 {
19073 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_PRECISION);
19074 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19075 }
19076 operator uint32_t()
19077 {
19078 uint32_t word;
19079 std::memcpy(&word, this, sizeof(word));
19080 return word;
19081 }
19082 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19083 {
19084 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19085 }
19086 CONSTEXPR npu_set_ifm_precision_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19087 {
19088 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19089 return *this;
19090 }
19091 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19092 {
19093 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19094 }
19095 CONSTEXPR npu_set_ifm_precision_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19096 {
19097 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19098 return *this;
19099 }
19100 CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
19101 {
19102 return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
19103 }
19104 CONSTEXPR npu_set_ifm_precision_t &set_activation_type(NPU_NAMESPACE::activation_type value)
19105 {
19106 activation_type = static_cast<uint8_t>(value) & ((1U << 1) - 1);
19107 return *this;
19108 }
19109 CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
19110 {
19111 return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
19112 }
19113 CONSTEXPR npu_set_ifm_precision_t &set_activation_precision(NPU_NAMESPACE::activation_precision value)
19114 {
19115 activation_precision = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19116 return *this;
19117 }
19118 CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
19119 {
19120 return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
19121 }
19122 CONSTEXPR npu_set_ifm_precision_t &set_activation_format(NPU_NAMESPACE::activation_format value)
19123 {
19124 activation_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19125 return *this;
19126 }
19127 CONSTEXPR NPU_NAMESPACE::ifm_scale_mode get_scale_mode() const
19128 {
19129 return static_cast<NPU_NAMESPACE::ifm_scale_mode>(scale_mode);
19130 }
19131 CONSTEXPR npu_set_ifm_precision_t &set_scale_mode(NPU_NAMESPACE::ifm_scale_mode value)
19132 {
19133 scale_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19134 return *this;
19135 }
19136 CONSTEXPR NPU_NAMESPACE::round_mode get_round_mode() const
19137 {
19138 return static_cast<NPU_NAMESPACE::round_mode>(round_mode);
19139 }
19140 CONSTEXPR npu_set_ifm_precision_t &set_round_mode(NPU_NAMESPACE::round_mode value)
19141 {
19142 round_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19143 return *this;
19144 }
19145#ifdef NPU_DISASSEMBLE
19146 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19147 {
19148 fields.push_back(std::make_pair<std::string, std::string>(
19149 "activation_type",
19150 (activation_type < (sizeof(activation_type_str) / sizeof(activation_type_str[0])) ?
19151 activation_type_str[activation_type] :
19152 "****")));
19153 fields.push_back(std::make_pair<std::string, std::string>(
19154 "activation_precision",
19155 (activation_precision < (sizeof(activation_precision_str) / sizeof(activation_precision_str[0])) ?
19156 activation_precision_str[activation_precision] :
19157 "****")));
19158 fields.push_back(std::make_pair<std::string, std::string>(
19159 "activation_format",
19160 (activation_format < (sizeof(activation_format_str) / sizeof(activation_format_str[0])) ?
19161 activation_format_str[activation_format] :
19162 "****")));
19163 fields.push_back(std::make_pair<std::string, std::string>(
19164 "scale_mode",
19165 (scale_mode < (sizeof(ifm_scale_mode_str) / sizeof(ifm_scale_mode_str[0])) ?
19166 ifm_scale_mode_str[scale_mode] :
19167 "****")));
19168 fields.push_back(std::make_pair<std::string, std::string>(
19169 "round_mode",
19170 (round_mode < (sizeof(round_mode_str) / sizeof(round_mode_str[0])) ? round_mode_str[round_mode] :
19171 "****")));
19172 }
19173#endif
19174#endif
19175 };
19176 // IFM upscale mode
19177 struct npu_set_ifm_upscale_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019178 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019179#ifdef __cplusplus
19180 private:
19181#endif
19182 uint32_t opcode : 10; // opcode
19183 uint32_t reserved0 : 4;
19184 uint32_t control : 2; // control
19185 uint32_t mode : 2; // IFM upscale mode
19186 uint32_t reserved1 : 14;
19187#ifdef __cplusplus
19188 public:
19189 npu_set_ifm_upscale_t(NPU_NAMESPACE::ifm_upscale_mode _mode) :
19190 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE)), reserved0(0),
19191 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19192 mode(static_cast<uint8_t>(_mode) & ((1U << 2) - 1)), reserved1(0)
19193 {
19194 }
19195 CONSTEXPR npu_set_ifm_upscale_t() :
19196 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE)), reserved0(0),
19197 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), mode(0), reserved1(0)
19198 {
19199 }
19200 CONSTEXPR bool valid() const
19201 {
19202 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE) &&
19203 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19204 }
19205 CONSTEXPR void init()
19206 {
19207 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_UPSCALE);
19208 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19209 }
19210 operator uint32_t()
19211 {
19212 uint32_t word;
19213 std::memcpy(&word, this, sizeof(word));
19214 return word;
19215 }
19216 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19217 {
19218 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19219 }
19220 CONSTEXPR npu_set_ifm_upscale_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19221 {
19222 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19223 return *this;
19224 }
19225 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19226 {
19227 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19228 }
19229 CONSTEXPR npu_set_ifm_upscale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19230 {
19231 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19232 return *this;
19233 }
19234 CONSTEXPR NPU_NAMESPACE::ifm_upscale_mode get_mode() const
19235 {
19236 return static_cast<NPU_NAMESPACE::ifm_upscale_mode>(mode);
19237 }
19238 CONSTEXPR npu_set_ifm_upscale_t &set_mode(NPU_NAMESPACE::ifm_upscale_mode value)
19239 {
19240 mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19241 return *this;
19242 }
19243#ifdef NPU_DISASSEMBLE
19244 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19245 {
19246 fields.push_back(std::make_pair<std::string, std::string>(
19247 "mode",
19248 (mode < (sizeof(ifm_upscale_mode_str) / sizeof(ifm_upscale_mode_str[0])) ? ifm_upscale_mode_str[mode] :
19249 "****")));
19250 }
19251#endif
19252#endif
19253 };
19254 // IFM zero point
19255 struct npu_set_ifm_zero_point_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019256 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019257#ifdef __cplusplus
19258 private:
19259#endif
19260 uint32_t opcode : 10; // opcode
19261 uint32_t reserved0 : 4;
19262 uint32_t control : 2; // control
19263 uint32_t zero_point : 16; // Zero point offset
19264#ifdef __cplusplus
19265 public:
19266 npu_set_ifm_zero_point_t(uint32_t _zero_point) :
19267 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT)), reserved0(0),
19268 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019269 zero_point(_zero_point & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019270 {
19271 }
19272 CONSTEXPR npu_set_ifm_zero_point_t() :
19273 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT)), reserved0(0),
19274 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), zero_point(0)
19275 {
19276 }
19277 CONSTEXPR bool valid() const
19278 {
19279 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT) &&
19280 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19281 }
19282 CONSTEXPR void init()
19283 {
19284 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_ZERO_POINT);
19285 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19286 }
19287 operator uint32_t()
19288 {
19289 uint32_t word;
19290 std::memcpy(&word, this, sizeof(word));
19291 return word;
19292 }
19293 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19294 {
19295 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19296 }
19297 CONSTEXPR npu_set_ifm_zero_point_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19298 {
19299 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19300 return *this;
19301 }
19302 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19303 {
19304 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19305 }
19306 CONSTEXPR npu_set_ifm_zero_point_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19307 {
19308 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19309 return *this;
19310 }
19311 CONSTEXPR uint32_t get_zero_point() const
19312 {
19313 return static_cast<uint32_t>(zero_point);
19314 }
19315 CONSTEXPR npu_set_ifm_zero_point_t &set_zero_point(uint32_t value)
19316 {
19317 zero_point = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19318 return *this;
19319 }
19320#ifdef NPU_DISASSEMBLE
19321 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19322 {
19323 fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
19324 }
19325#endif
19326#endif
19327 };
19328 // IFM Tile 0 and tile 2 width
19329 struct npu_set_ifm_width0_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019330 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019331#ifdef __cplusplus
19332 private:
19333#endif
19334 uint32_t opcode : 10; // opcode
19335 uint32_t reserved0 : 4;
19336 uint32_t control : 2; // control
19337 uint32_t width_m1 : 16; // IFM Tile 0 and tile 2 width
19338#ifdef __cplusplus
19339 public:
19340 npu_set_ifm_width0_m1_t(uint32_t _width_m1) :
19341 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019342 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(_width_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019343 {
19344 }
19345 CONSTEXPR npu_set_ifm_width0_m1_t() :
19346 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1)), reserved0(0),
19347 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
19348 {
19349 }
19350 CONSTEXPR bool valid() const
19351 {
19352 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1) &&
19353 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19354 }
19355 CONSTEXPR void init()
19356 {
19357 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_WIDTH0_M1);
19358 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19359 }
19360 operator uint32_t()
19361 {
19362 uint32_t word;
19363 std::memcpy(&word, this, sizeof(word));
19364 return word;
19365 }
19366 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19367 {
19368 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19369 }
19370 CONSTEXPR npu_set_ifm_width0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19371 {
19372 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19373 return *this;
19374 }
19375 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19376 {
19377 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19378 }
19379 CONSTEXPR npu_set_ifm_width0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19380 {
19381 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19382 return *this;
19383 }
19384 CONSTEXPR uint32_t get_width_m1() const
19385 {
19386 return static_cast<uint32_t>(width_m1);
19387 }
19388 CONSTEXPR npu_set_ifm_width0_m1_t &set_width_m1(uint32_t value)
19389 {
19390 width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19391 return *this;
19392 }
19393#ifdef NPU_DISASSEMBLE
19394 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19395 {
19396 fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
19397 }
19398#endif
19399#endif
19400 };
19401 // IFM Tile 0 height
19402 struct npu_set_ifm_height0_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019403 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019404#ifdef __cplusplus
19405 private:
19406#endif
19407 uint32_t opcode : 10; // opcode
19408 uint32_t reserved0 : 4;
19409 uint32_t control : 2; // control
19410 uint32_t height_m1 : 16; // IFM Tile 0 height
19411#ifdef __cplusplus
19412 public:
19413 npu_set_ifm_height0_m1_t(uint32_t _height_m1) :
19414 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019415 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019416 {
19417 }
19418 CONSTEXPR npu_set_ifm_height0_m1_t() :
19419 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1)), reserved0(0),
19420 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
19421 {
19422 }
19423 CONSTEXPR bool valid() const
19424 {
19425 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1) &&
19426 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19427 }
19428 CONSTEXPR void init()
19429 {
19430 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT0_M1);
19431 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19432 }
19433 operator uint32_t()
19434 {
19435 uint32_t word;
19436 std::memcpy(&word, this, sizeof(word));
19437 return word;
19438 }
19439 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19440 {
19441 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19442 }
19443 CONSTEXPR npu_set_ifm_height0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19444 {
19445 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19446 return *this;
19447 }
19448 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19449 {
19450 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19451 }
19452 CONSTEXPR npu_set_ifm_height0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19453 {
19454 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19455 return *this;
19456 }
19457 CONSTEXPR uint32_t get_height_m1() const
19458 {
19459 return static_cast<uint32_t>(height_m1);
19460 }
19461 CONSTEXPR npu_set_ifm_height0_m1_t &set_height_m1(uint32_t value)
19462 {
19463 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19464 return *this;
19465 }
19466#ifdef NPU_DISASSEMBLE
19467 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19468 {
19469 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
19470 }
19471#endif
19472#endif
19473 };
19474 // IFM Tile 1 height
19475 struct npu_set_ifm_height1_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019476 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019477#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020019478 private:
19479#endif
19480 uint32_t opcode : 10; // opcode
19481 uint32_t reserved0 : 4;
19482 uint32_t control : 2; // control
19483 uint32_t height_m1 : 16; // IFM Tile 1 height
19484#ifdef __cplusplus
19485 public:
19486 npu_set_ifm_height1_m1_t(uint32_t _height_m1) :
19487 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019488 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019489 {
19490 }
19491 CONSTEXPR npu_set_ifm_height1_m1_t() :
19492 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1)), reserved0(0),
19493 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
19494 {
19495 }
19496 CONSTEXPR bool valid() const
19497 {
19498 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1) &&
19499 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19500 }
19501 CONSTEXPR void init()
19502 {
19503 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_HEIGHT1_M1);
19504 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19505 }
19506 operator uint32_t()
19507 {
19508 uint32_t word;
19509 std::memcpy(&word, this, sizeof(word));
19510 return word;
19511 }
19512 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19513 {
19514 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19515 }
19516 CONSTEXPR npu_set_ifm_height1_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19517 {
19518 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19519 return *this;
19520 }
19521 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19522 {
19523 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19524 }
19525 CONSTEXPR npu_set_ifm_height1_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19526 {
19527 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19528 return *this;
19529 }
19530 CONSTEXPR uint32_t get_height_m1() const
19531 {
19532 return static_cast<uint32_t>(height_m1);
19533 }
19534 CONSTEXPR npu_set_ifm_height1_m1_t &set_height_m1(uint32_t value)
19535 {
19536 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19537 return *this;
19538 }
19539#ifdef NPU_DISASSEMBLE
19540 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19541 {
19542 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
19543 }
19544#endif
19545#endif
19546 };
19547 // End of IB0,IB1 buffers
19548 struct npu_set_ifm_ib_end_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019549 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019550#ifdef __cplusplus
19551 private:
19552#endif
19553 uint32_t opcode : 10; // opcode
19554 uint32_t reserved0 : 4;
19555 uint32_t control : 2; // control
19556 uint32_t ib_end : 6; // End of IB0,IB1 buffers in the SHRAM in KB units. Multiple of 2
19557 uint32_t reserved1 : 10;
19558#ifdef __cplusplus
19559 public:
19560 npu_set_ifm_ib_end_t(uint32_t _ib_end) :
19561 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019562 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ib_end(_ib_end & ((1U << 6) - 1)),
19563 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020019564 {
19565 }
19566 CONSTEXPR npu_set_ifm_ib_end_t() :
19567 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END)), reserved0(0),
19568 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ib_end(0), reserved1(0)
19569 {
19570 }
19571 CONSTEXPR bool valid() const
19572 {
19573 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END) &&
19574 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19575 }
19576 CONSTEXPR void init()
19577 {
19578 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_IB_END);
19579 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19580 }
19581 operator uint32_t()
19582 {
19583 uint32_t word;
19584 std::memcpy(&word, this, sizeof(word));
19585 return word;
19586 }
19587 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19588 {
19589 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19590 }
19591 CONSTEXPR npu_set_ifm_ib_end_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19592 {
19593 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19594 return *this;
19595 }
19596 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19597 {
19598 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19599 }
19600 CONSTEXPR npu_set_ifm_ib_end_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19601 {
19602 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19603 return *this;
19604 }
19605 CONSTEXPR uint32_t get_ib_end() const
19606 {
19607 return static_cast<uint32_t>(ib_end);
19608 }
19609 CONSTEXPR npu_set_ifm_ib_end_t &set_ib_end(uint32_t value)
19610 {
19611 ib_end = static_cast<uint8_t>(value) & ((1U << 6) - 1);
19612 return *this;
19613 }
19614#ifdef NPU_DISASSEMBLE
19615 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19616 {
19617 fields.push_back(std::make_pair<std::string, std::string>("ib_end", std::to_string(ib_end)));
19618 }
19619#endif
19620#endif
19621 };
19622 // Index n for IFM access
19623 struct npu_set_ifm_region_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019624 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019625#ifdef __cplusplus
19626 private:
19627#endif
19628 uint32_t opcode : 10; // opcode
19629 uint32_t reserved0 : 4;
19630 uint32_t control : 2; // control
19631 uint32_t region : 3; // Region number n
19632 uint32_t reserved1 : 12;
19633 uint32_t custom_dma_cs : 1; // Custom DMA select
19634#ifdef __cplusplus
19635 public:
19636 npu_set_ifm_region_t(uint32_t _region, NPU_NAMESPACE::custom_dma_cs _custom_dma_cs) :
19637 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019638 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(_region & ((1U << 3) - 1)),
19639 reserved1(0), custom_dma_cs(static_cast<uint8_t>(_custom_dma_cs) & ((1U << 1) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019640 {
19641 }
19642 CONSTEXPR npu_set_ifm_region_t() :
19643 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION)), reserved0(0),
19644 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), custom_dma_cs(0)
19645 {
19646 }
19647 CONSTEXPR bool valid() const
19648 {
19649 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION) &&
19650 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19651 }
19652 CONSTEXPR void init()
19653 {
19654 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM_REGION);
19655 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19656 }
19657 operator uint32_t()
19658 {
19659 uint32_t word;
19660 std::memcpy(&word, this, sizeof(word));
19661 return word;
19662 }
19663 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19664 {
19665 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19666 }
19667 CONSTEXPR npu_set_ifm_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19668 {
19669 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19670 return *this;
19671 }
19672 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19673 {
19674 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19675 }
19676 CONSTEXPR npu_set_ifm_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19677 {
19678 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19679 return *this;
19680 }
19681 CONSTEXPR uint32_t get_region() const
19682 {
19683 return static_cast<uint32_t>(region);
19684 }
19685 CONSTEXPR npu_set_ifm_region_t &set_region(uint32_t value)
19686 {
19687 region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
19688 return *this;
19689 }
19690 CONSTEXPR NPU_NAMESPACE::custom_dma_cs get_custom_dma_cs() const
19691 {
19692 return static_cast<NPU_NAMESPACE::custom_dma_cs>(custom_dma_cs);
19693 }
19694 CONSTEXPR npu_set_ifm_region_t &set_custom_dma_cs(NPU_NAMESPACE::custom_dma_cs value)
19695 {
19696 custom_dma_cs = static_cast<uint8_t>(value) & ((1U << 1) - 1);
19697 return *this;
19698 }
19699#ifdef NPU_DISASSEMBLE
19700 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19701 {
19702 fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
19703 fields.push_back(std::make_pair<std::string, std::string>(
19704 "custom_dma_cs",
19705 (custom_dma_cs < (sizeof(custom_dma_cs_str) / sizeof(custom_dma_cs_str[0])) ?
19706 custom_dma_cs_str[custom_dma_cs] :
19707 "****")));
19708 }
19709#endif
19710#endif
19711 };
19712 // Output feature map width
19713 struct npu_set_ofm_width_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019714 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019715#ifdef __cplusplus
19716 private:
19717#endif
19718 uint32_t opcode : 10; // opcode
19719 uint32_t reserved0 : 4;
19720 uint32_t control : 2; // control
19721 uint32_t width_m1 : 16; // Output feature map width
19722#ifdef __cplusplus
19723 public:
19724 npu_set_ofm_width_m1_t(uint32_t _width_m1) :
19725 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019726 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(_width_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019727 {
19728 }
19729 CONSTEXPR npu_set_ofm_width_m1_t() :
19730 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1)), reserved0(0),
19731 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
19732 {
19733 }
19734 CONSTEXPR bool valid() const
19735 {
19736 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1) &&
19737 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19738 }
19739 CONSTEXPR void init()
19740 {
19741 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH_M1);
19742 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19743 }
19744 operator uint32_t()
19745 {
19746 uint32_t word;
19747 std::memcpy(&word, this, sizeof(word));
19748 return word;
19749 }
19750 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19751 {
19752 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19753 }
19754 CONSTEXPR npu_set_ofm_width_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19755 {
19756 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19757 return *this;
19758 }
19759 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19760 {
19761 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19762 }
19763 CONSTEXPR npu_set_ofm_width_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19764 {
19765 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19766 return *this;
19767 }
19768 CONSTEXPR uint32_t get_width_m1() const
19769 {
19770 return static_cast<uint32_t>(width_m1);
19771 }
19772 CONSTEXPR npu_set_ofm_width_m1_t &set_width_m1(uint32_t value)
19773 {
19774 width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19775 return *this;
19776 }
19777#ifdef NPU_DISASSEMBLE
19778 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19779 {
19780 fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
19781 }
19782#endif
19783#endif
19784 };
19785 // Output feature map height
19786 struct npu_set_ofm_height_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019787 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019788#ifdef __cplusplus
19789 private:
19790#endif
19791 uint32_t opcode : 10; // opcode
19792 uint32_t reserved0 : 4;
19793 uint32_t control : 2; // control
19794 uint32_t height_m1 : 16; // Output feature map height
19795#ifdef __cplusplus
19796 public:
19797 npu_set_ofm_height_m1_t(uint32_t _height_m1) :
19798 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019799 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019800 {
19801 }
19802 CONSTEXPR npu_set_ofm_height_m1_t() :
19803 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1)), reserved0(0),
19804 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
19805 {
19806 }
19807 CONSTEXPR bool valid() const
19808 {
19809 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1) &&
19810 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19811 }
19812 CONSTEXPR void init()
19813 {
19814 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT_M1);
19815 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19816 }
19817 operator uint32_t()
19818 {
19819 uint32_t word;
19820 std::memcpy(&word, this, sizeof(word));
19821 return word;
19822 }
19823 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19824 {
19825 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19826 }
19827 CONSTEXPR npu_set_ofm_height_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19828 {
19829 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19830 return *this;
19831 }
19832 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19833 {
19834 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19835 }
19836 CONSTEXPR npu_set_ofm_height_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19837 {
19838 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19839 return *this;
19840 }
19841 CONSTEXPR uint32_t get_height_m1() const
19842 {
19843 return static_cast<uint32_t>(height_m1);
19844 }
19845 CONSTEXPR npu_set_ofm_height_m1_t &set_height_m1(uint32_t value)
19846 {
19847 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19848 return *this;
19849 }
19850#ifdef NPU_DISASSEMBLE
19851 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19852 {
19853 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
19854 }
19855#endif
19856#endif
19857 };
19858 // Output feature map depth
19859 struct npu_set_ofm_depth_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019860 {
Jonny Svärd136810f2021-10-13 16:04:26 +020019861#ifdef __cplusplus
19862 private:
19863#endif
19864 uint32_t opcode : 10; // opcode
19865 uint32_t reserved0 : 4;
19866 uint32_t control : 2; // control
19867 uint32_t depth_m1 : 16; // Output feature map depth
19868#ifdef __cplusplus
19869 public:
19870 npu_set_ofm_depth_m1_t(uint32_t _depth_m1) :
19871 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010019872 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(_depth_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020019873 {
19874 }
19875 CONSTEXPR npu_set_ofm_depth_m1_t() :
19876 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1)), reserved0(0),
19877 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(0)
19878 {
19879 }
19880 CONSTEXPR bool valid() const
19881 {
19882 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1) &&
19883 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19884 }
19885 CONSTEXPR void init()
19886 {
19887 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_DEPTH_M1);
19888 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19889 }
19890 operator uint32_t()
19891 {
19892 uint32_t word;
19893 std::memcpy(&word, this, sizeof(word));
19894 return word;
19895 }
19896 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19897 {
19898 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19899 }
19900 CONSTEXPR npu_set_ofm_depth_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19901 {
19902 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19903 return *this;
19904 }
19905 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19906 {
19907 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19908 }
19909 CONSTEXPR npu_set_ofm_depth_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19910 {
19911 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
19912 return *this;
19913 }
19914 CONSTEXPR uint32_t get_depth_m1() const
19915 {
19916 return static_cast<uint32_t>(depth_m1);
19917 }
19918 CONSTEXPR npu_set_ofm_depth_m1_t &set_depth_m1(uint32_t value)
19919 {
19920 depth_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
19921 return *this;
19922 }
19923#ifdef NPU_DISASSEMBLE
19924 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
19925 {
19926 fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
19927 }
19928#endif
19929#endif
19930 };
19931 // OFM Precision
19932 struct npu_set_ofm_precision_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019933 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019934#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020019935 private:
19936#endif
19937 uint32_t opcode : 10; // opcode
19938 uint32_t reserved0 : 4;
19939 uint32_t control : 2; // control
19940 uint32_t activation_type : 1; // OFM type
19941 uint32_t activation_precision : 2; // OFM precision
19942 uint32_t reserved1 : 3;
19943 uint32_t activation_format : 2; // OFM format
19944 uint32_t scale_mode : 1; // OFM scale mode
19945 uint32_t reserved2 : 5;
19946 uint32_t round_mode : 2; // OFM round mode
19947#ifdef __cplusplus
19948 public:
19949 npu_set_ofm_precision_t(NPU_NAMESPACE::activation_type _activation_type,
19950 NPU_NAMESPACE::activation_precision _activation_precision,
19951 NPU_NAMESPACE::activation_format _activation_format,
19952 NPU_NAMESPACE::ofm_scale_mode _scale_mode,
19953 NPU_NAMESPACE::round_mode _round_mode) :
19954 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION)),
19955 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
19956 activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1) - 1)),
19957 activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2) - 1)), reserved1(0),
19958 activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2) - 1)),
19959 scale_mode(static_cast<uint8_t>(_scale_mode) & ((1U << 1) - 1)), reserved2(0),
19960 round_mode(static_cast<uint8_t>(_round_mode) & ((1U << 2) - 1))
19961 {
19962 }
19963 CONSTEXPR npu_set_ofm_precision_t() :
19964 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION)), reserved0(0),
19965 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_type(0),
19966 activation_precision(0), reserved1(0), activation_format(0), scale_mode(0), reserved2(0), round_mode(0)
19967 {
19968 }
19969 CONSTEXPR bool valid() const
19970 {
19971 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION) &&
19972 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19973 }
19974 CONSTEXPR void init()
19975 {
19976 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_PRECISION);
19977 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
19978 }
19979 operator uint32_t()
19980 {
19981 uint32_t word;
19982 std::memcpy(&word, this, sizeof(word));
19983 return word;
19984 }
19985 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
19986 {
19987 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
19988 }
19989 CONSTEXPR npu_set_ofm_precision_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
19990 {
19991 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
19992 return *this;
19993 }
19994 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
19995 {
19996 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
19997 }
19998 CONSTEXPR npu_set_ofm_precision_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
19999 {
20000 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20001 return *this;
20002 }
20003 CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
20004 {
20005 return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
20006 }
20007 CONSTEXPR npu_set_ofm_precision_t &set_activation_type(NPU_NAMESPACE::activation_type value)
20008 {
20009 activation_type = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20010 return *this;
20011 }
20012 CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
20013 {
20014 return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
20015 }
20016 CONSTEXPR npu_set_ofm_precision_t &set_activation_precision(NPU_NAMESPACE::activation_precision value)
20017 {
20018 activation_precision = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20019 return *this;
20020 }
20021 CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
20022 {
20023 return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
20024 }
20025 CONSTEXPR npu_set_ofm_precision_t &set_activation_format(NPU_NAMESPACE::activation_format value)
20026 {
20027 activation_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20028 return *this;
20029 }
20030 CONSTEXPR NPU_NAMESPACE::ofm_scale_mode get_scale_mode() const
20031 {
20032 return static_cast<NPU_NAMESPACE::ofm_scale_mode>(scale_mode);
20033 }
20034 CONSTEXPR npu_set_ofm_precision_t &set_scale_mode(NPU_NAMESPACE::ofm_scale_mode value)
20035 {
20036 scale_mode = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20037 return *this;
20038 }
20039 CONSTEXPR NPU_NAMESPACE::round_mode get_round_mode() const
20040 {
20041 return static_cast<NPU_NAMESPACE::round_mode>(round_mode);
20042 }
20043 CONSTEXPR npu_set_ofm_precision_t &set_round_mode(NPU_NAMESPACE::round_mode value)
20044 {
20045 round_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20046 return *this;
20047 }
20048#ifdef NPU_DISASSEMBLE
20049 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20050 {
20051 fields.push_back(std::make_pair<std::string, std::string>(
20052 "activation_type",
20053 (activation_type < (sizeof(activation_type_str) / sizeof(activation_type_str[0])) ?
20054 activation_type_str[activation_type] :
20055 "****")));
20056 fields.push_back(std::make_pair<std::string, std::string>(
20057 "activation_precision",
20058 (activation_precision < (sizeof(activation_precision_str) / sizeof(activation_precision_str[0])) ?
20059 activation_precision_str[activation_precision] :
20060 "****")));
20061 fields.push_back(std::make_pair<std::string, std::string>(
20062 "activation_format",
20063 (activation_format < (sizeof(activation_format_str) / sizeof(activation_format_str[0])) ?
20064 activation_format_str[activation_format] :
20065 "****")));
20066 fields.push_back(std::make_pair<std::string, std::string>(
20067 "scale_mode",
20068 (scale_mode < (sizeof(ofm_scale_mode_str) / sizeof(ofm_scale_mode_str[0])) ?
20069 ofm_scale_mode_str[scale_mode] :
20070 "****")));
20071 fields.push_back(std::make_pair<std::string, std::string>(
20072 "round_mode",
20073 (round_mode < (sizeof(round_mode_str) / sizeof(round_mode_str[0])) ? round_mode_str[round_mode] :
20074 "****")));
20075 }
20076#endif
20077#endif
20078 };
20079 // OFM block width
20080 struct npu_set_ofm_blk_width_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020081 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020082#ifdef __cplusplus
20083 private:
20084#endif
20085 uint32_t opcode : 10; // opcode
20086 uint32_t reserved0 : 4;
20087 uint32_t control : 2; // control
20088 uint32_t width_m1 : 6; // OFM block width
20089 uint32_t reserved1 : 10;
20090#ifdef __cplusplus
20091 public:
20092 npu_set_ofm_blk_width_m1_t(uint32_t _width_m1) :
20093 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020094 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(_width_m1 & ((1U << 6) - 1)),
20095 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020020096 {
20097 }
20098 CONSTEXPR npu_set_ofm_blk_width_m1_t() :
20099 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1)), reserved0(0),
20100 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0), reserved1(0)
20101 {
20102 }
20103 CONSTEXPR bool valid() const
20104 {
20105 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1) &&
20106 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20107 }
20108 CONSTEXPR void init()
20109 {
20110 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_WIDTH_M1);
20111 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20112 }
20113 operator uint32_t()
20114 {
20115 uint32_t word;
20116 std::memcpy(&word, this, sizeof(word));
20117 return word;
20118 }
20119 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20120 {
20121 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20122 }
20123 CONSTEXPR npu_set_ofm_blk_width_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20124 {
20125 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20126 return *this;
20127 }
20128 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20129 {
20130 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20131 }
20132 CONSTEXPR npu_set_ofm_blk_width_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20133 {
20134 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20135 return *this;
20136 }
20137 CONSTEXPR uint32_t get_width_m1() const
20138 {
20139 return static_cast<uint32_t>(width_m1);
20140 }
20141 CONSTEXPR npu_set_ofm_blk_width_m1_t &set_width_m1(uint32_t value)
20142 {
20143 width_m1 = static_cast<uint8_t>(value) & ((1U << 6) - 1);
20144 return *this;
20145 }
20146#ifdef NPU_DISASSEMBLE
20147 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20148 {
20149 fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
20150 }
20151#endif
20152#endif
20153 };
20154 // OFM block height
20155 struct npu_set_ofm_blk_height_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020156 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020157#ifdef __cplusplus
20158 private:
20159#endif
20160 uint32_t opcode : 10; // opcode
20161 uint32_t reserved0 : 4;
20162 uint32_t control : 2; // control
20163 uint32_t height_m1 : 5; // OFM block height
20164 uint32_t reserved1 : 11;
20165#ifdef __cplusplus
20166 public:
20167 npu_set_ofm_blk_height_m1_t(uint32_t _height_m1) :
20168 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020169 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 5) - 1)),
20170 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020020171 {
20172 }
20173 CONSTEXPR npu_set_ofm_blk_height_m1_t() :
20174 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1)), reserved0(0),
20175 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0), reserved1(0)
20176 {
20177 }
20178 CONSTEXPR bool valid() const
20179 {
20180 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1) &&
20181 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20182 }
20183 CONSTEXPR void init()
20184 {
20185 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_HEIGHT_M1);
20186 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20187 }
20188 operator uint32_t()
20189 {
20190 uint32_t word;
20191 std::memcpy(&word, this, sizeof(word));
20192 return word;
20193 }
20194 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20195 {
20196 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20197 }
20198 CONSTEXPR npu_set_ofm_blk_height_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20199 {
20200 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20201 return *this;
20202 }
20203 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20204 {
20205 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20206 }
20207 CONSTEXPR npu_set_ofm_blk_height_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20208 {
20209 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20210 return *this;
20211 }
20212 CONSTEXPR uint32_t get_height_m1() const
20213 {
20214 return static_cast<uint32_t>(height_m1);
20215 }
20216 CONSTEXPR npu_set_ofm_blk_height_m1_t &set_height_m1(uint32_t value)
20217 {
20218 height_m1 = static_cast<uint8_t>(value) & ((1U << 5) - 1);
20219 return *this;
20220 }
20221#ifdef NPU_DISASSEMBLE
20222 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20223 {
20224 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
20225 }
20226#endif
20227#endif
20228 };
20229 // OFM block depth
20230 struct npu_set_ofm_blk_depth_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020231 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020232#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020020233 private:
20234#endif
20235 uint32_t opcode : 10; // opcode
20236 uint32_t reserved0 : 4;
20237 uint32_t control : 2; // control
20238 uint32_t depth_m1 : 7; // OFM block depth
20239 uint32_t reserved1 : 9;
20240#ifdef __cplusplus
20241 public:
20242 npu_set_ofm_blk_depth_m1_t(uint32_t _depth_m1) :
20243 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020244 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(_depth_m1 & ((1U << 7) - 1)),
20245 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020020246 {
20247 }
20248 CONSTEXPR npu_set_ofm_blk_depth_m1_t() :
20249 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1)), reserved0(0),
20250 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), depth_m1(0), reserved1(0)
20251 {
20252 }
20253 CONSTEXPR bool valid() const
20254 {
20255 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1) &&
20256 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20257 }
20258 CONSTEXPR void init()
20259 {
20260 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_BLK_DEPTH_M1);
20261 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20262 }
20263 operator uint32_t()
20264 {
20265 uint32_t word;
20266 std::memcpy(&word, this, sizeof(word));
20267 return word;
20268 }
20269 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20270 {
20271 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20272 }
20273 CONSTEXPR npu_set_ofm_blk_depth_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20274 {
20275 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20276 return *this;
20277 }
20278 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20279 {
20280 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20281 }
20282 CONSTEXPR npu_set_ofm_blk_depth_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20283 {
20284 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20285 return *this;
20286 }
20287 CONSTEXPR uint32_t get_depth_m1() const
20288 {
20289 return static_cast<uint32_t>(depth_m1);
20290 }
20291 CONSTEXPR npu_set_ofm_blk_depth_m1_t &set_depth_m1(uint32_t value)
20292 {
20293 depth_m1 = static_cast<uint8_t>(value) & ((1U << 7) - 1);
20294 return *this;
20295 }
20296#ifdef NPU_DISASSEMBLE
20297 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20298 {
20299 fields.push_back(std::make_pair<std::string, std::string>("depth_m1", std::to_string(depth_m1)));
20300 }
20301#endif
20302#endif
20303 };
20304 // OFM zero point
20305 struct npu_set_ofm_zero_point_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020306 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020307#ifdef __cplusplus
20308 private:
20309#endif
20310 uint32_t opcode : 10; // opcode
20311 uint32_t reserved0 : 4;
20312 uint32_t control : 2; // control
20313 uint32_t zero_point : 16; // Zero point offset
20314#ifdef __cplusplus
20315 public:
20316 npu_set_ofm_zero_point_t(uint32_t _zero_point) :
20317 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT)), reserved0(0),
20318 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020319 zero_point(_zero_point & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020020320 {
20321 }
20322 CONSTEXPR npu_set_ofm_zero_point_t() :
20323 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT)), reserved0(0),
20324 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), zero_point(0)
20325 {
20326 }
20327 CONSTEXPR bool valid() const
20328 {
20329 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT) &&
20330 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20331 }
20332 CONSTEXPR void init()
20333 {
20334 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_ZERO_POINT);
20335 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20336 }
20337 operator uint32_t()
20338 {
20339 uint32_t word;
20340 std::memcpy(&word, this, sizeof(word));
20341 return word;
20342 }
20343 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20344 {
20345 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20346 }
20347 CONSTEXPR npu_set_ofm_zero_point_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20348 {
20349 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20350 return *this;
20351 }
20352 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20353 {
20354 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20355 }
20356 CONSTEXPR npu_set_ofm_zero_point_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20357 {
20358 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20359 return *this;
20360 }
20361 CONSTEXPR uint32_t get_zero_point() const
20362 {
20363 return static_cast<uint32_t>(zero_point);
20364 }
20365 CONSTEXPR npu_set_ofm_zero_point_t &set_zero_point(uint32_t value)
20366 {
20367 zero_point = static_cast<uint16_t>(value) & ((1U << 16) - 1);
20368 return *this;
20369 }
20370#ifdef NPU_DISASSEMBLE
20371 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20372 {
20373 fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
20374 }
20375#endif
20376#endif
20377 };
20378 // OFM Tile 0 and tile 2 width
20379 struct npu_set_ofm_width0_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020380 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020381#ifdef __cplusplus
20382 private:
20383#endif
20384 uint32_t opcode : 10; // opcode
20385 uint32_t reserved0 : 4;
20386 uint32_t control : 2; // control
20387 uint32_t width_m1 : 16; // OFM Tile 0 and tile 2 width
20388#ifdef __cplusplus
20389 public:
20390 npu_set_ofm_width0_m1_t(uint32_t _width_m1) :
20391 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020392 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(_width_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020020393 {
20394 }
20395 CONSTEXPR npu_set_ofm_width0_m1_t() :
20396 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1)), reserved0(0),
20397 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
20398 {
20399 }
20400 CONSTEXPR bool valid() const
20401 {
20402 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1) &&
20403 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20404 }
20405 CONSTEXPR void init()
20406 {
20407 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_WIDTH0_M1);
20408 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20409 }
20410 operator uint32_t()
20411 {
20412 uint32_t word;
20413 std::memcpy(&word, this, sizeof(word));
20414 return word;
20415 }
20416 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20417 {
20418 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20419 }
20420 CONSTEXPR npu_set_ofm_width0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20421 {
20422 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20423 return *this;
20424 }
20425 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20426 {
20427 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20428 }
20429 CONSTEXPR npu_set_ofm_width0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20430 {
20431 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20432 return *this;
20433 }
20434 CONSTEXPR uint32_t get_width_m1() const
20435 {
20436 return static_cast<uint32_t>(width_m1);
20437 }
20438 CONSTEXPR npu_set_ofm_width0_m1_t &set_width_m1(uint32_t value)
20439 {
20440 width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
20441 return *this;
20442 }
20443#ifdef NPU_DISASSEMBLE
20444 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20445 {
20446 fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
20447 }
20448#endif
20449#endif
20450 };
20451 // OFM Tile 0 height
20452 struct npu_set_ofm_height0_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020453 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020454#ifdef __cplusplus
20455 private:
20456#endif
20457 uint32_t opcode : 10; // opcode
20458 uint32_t reserved0 : 4;
20459 uint32_t control : 2; // control
20460 uint32_t height_m1 : 16; // OFM Tile 0 height
20461#ifdef __cplusplus
20462 public:
20463 npu_set_ofm_height0_m1_t(uint32_t _height_m1) :
20464 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020465 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020020466 {
20467 }
20468 CONSTEXPR npu_set_ofm_height0_m1_t() :
20469 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1)), reserved0(0),
20470 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
20471 {
20472 }
20473 CONSTEXPR bool valid() const
20474 {
20475 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1) &&
20476 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20477 }
20478 CONSTEXPR void init()
20479 {
20480 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT0_M1);
20481 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20482 }
20483 operator uint32_t()
20484 {
20485 uint32_t word;
20486 std::memcpy(&word, this, sizeof(word));
20487 return word;
20488 }
20489 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20490 {
20491 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20492 }
20493 CONSTEXPR npu_set_ofm_height0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20494 {
20495 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20496 return *this;
20497 }
20498 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20499 {
20500 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20501 }
20502 CONSTEXPR npu_set_ofm_height0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20503 {
20504 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20505 return *this;
20506 }
20507 CONSTEXPR uint32_t get_height_m1() const
20508 {
20509 return static_cast<uint32_t>(height_m1);
20510 }
20511 CONSTEXPR npu_set_ofm_height0_m1_t &set_height_m1(uint32_t value)
20512 {
20513 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
20514 return *this;
20515 }
20516#ifdef NPU_DISASSEMBLE
20517 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20518 {
20519 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
20520 }
20521#endif
20522#endif
20523 };
20524 // OFM Tile 1 height
20525 struct npu_set_ofm_height1_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020526 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020527#ifdef __cplusplus
20528 private:
20529#endif
20530 uint32_t opcode : 10; // opcode
20531 uint32_t reserved0 : 4;
20532 uint32_t control : 2; // control
20533 uint32_t height_m1 : 16; // OFM Tile 1 height
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020534#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020020535 public:
20536 npu_set_ofm_height1_m1_t(uint32_t _height_m1) :
20537 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020538 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020020539 {
20540 }
20541 CONSTEXPR npu_set_ofm_height1_m1_t() :
20542 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1)), reserved0(0),
20543 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
20544 {
20545 }
20546 CONSTEXPR bool valid() const
20547 {
20548 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1) &&
20549 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20550 }
20551 CONSTEXPR void init()
20552 {
20553 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_HEIGHT1_M1);
20554 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20555 }
20556 operator uint32_t()
20557 {
20558 uint32_t word;
20559 std::memcpy(&word, this, sizeof(word));
20560 return word;
20561 }
20562 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20563 {
20564 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20565 }
20566 CONSTEXPR npu_set_ofm_height1_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20567 {
20568 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20569 return *this;
20570 }
20571 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20572 {
20573 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20574 }
20575 CONSTEXPR npu_set_ofm_height1_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20576 {
20577 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20578 return *this;
20579 }
20580 CONSTEXPR uint32_t get_height_m1() const
20581 {
20582 return static_cast<uint32_t>(height_m1);
20583 }
20584 CONSTEXPR npu_set_ofm_height1_m1_t &set_height_m1(uint32_t value)
20585 {
20586 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
20587 return *this;
20588 }
20589#ifdef NPU_DISASSEMBLE
20590 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20591 {
20592 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
20593 }
20594#endif
20595#endif
20596 };
20597 // Index n for OFM access
20598 struct npu_set_ofm_region_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020599 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020600#ifdef __cplusplus
20601 private:
20602#endif
20603 uint32_t opcode : 10; // opcode
20604 uint32_t reserved0 : 4;
20605 uint32_t control : 2; // control
20606 uint32_t region : 3; // Index n for OFM access
20607 uint32_t reserved1 : 12;
20608 uint32_t custom_dma_cs : 1; // Custom DMA select
20609#ifdef __cplusplus
20610 public:
20611 npu_set_ofm_region_t(uint32_t _region, NPU_NAMESPACE::custom_dma_cs _custom_dma_cs) :
20612 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020613 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(_region & ((1U << 3) - 1)),
20614 reserved1(0), custom_dma_cs(static_cast<uint8_t>(_custom_dma_cs) & ((1U << 1) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020020615 {
20616 }
20617 CONSTEXPR npu_set_ofm_region_t() :
20618 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION)), reserved0(0),
20619 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), custom_dma_cs(0)
20620 {
20621 }
20622 CONSTEXPR bool valid() const
20623 {
20624 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION) &&
20625 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20626 }
20627 CONSTEXPR void init()
20628 {
20629 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_OFM_REGION);
20630 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20631 }
20632 operator uint32_t()
20633 {
20634 uint32_t word;
20635 std::memcpy(&word, this, sizeof(word));
20636 return word;
20637 }
20638 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20639 {
20640 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20641 }
20642 CONSTEXPR npu_set_ofm_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20643 {
20644 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20645 return *this;
20646 }
20647 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20648 {
20649 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20650 }
20651 CONSTEXPR npu_set_ofm_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20652 {
20653 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20654 return *this;
20655 }
20656 CONSTEXPR uint32_t get_region() const
20657 {
20658 return static_cast<uint32_t>(region);
20659 }
20660 CONSTEXPR npu_set_ofm_region_t &set_region(uint32_t value)
20661 {
20662 region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
20663 return *this;
20664 }
20665 CONSTEXPR NPU_NAMESPACE::custom_dma_cs get_custom_dma_cs() const
20666 {
20667 return static_cast<NPU_NAMESPACE::custom_dma_cs>(custom_dma_cs);
20668 }
20669 CONSTEXPR npu_set_ofm_region_t &set_custom_dma_cs(NPU_NAMESPACE::custom_dma_cs value)
20670 {
20671 custom_dma_cs = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20672 return *this;
20673 }
20674#ifdef NPU_DISASSEMBLE
20675 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20676 {
20677 fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
20678 fields.push_back(std::make_pair<std::string, std::string>(
20679 "custom_dma_cs",
20680 (custom_dma_cs < (sizeof(custom_dma_cs_str) / sizeof(custom_dma_cs_str[0])) ?
20681 custom_dma_cs_str[custom_dma_cs] :
20682 "****")));
20683 }
20684#endif
20685#endif
20686 };
20687 // Kernel width
20688 struct npu_set_kernel_width_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020689 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020690#ifdef __cplusplus
20691 private:
20692#endif
20693 uint32_t opcode : 10; // opcode
20694 uint32_t reserved0 : 4;
20695 uint32_t control : 2; // control
20696 uint32_t width_m1 : 16; // Kernel width
20697#ifdef __cplusplus
20698 public:
20699 npu_set_kernel_width_m1_t(uint32_t _width_m1) :
20700 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020701 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(_width_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020020702 {
20703 }
20704 CONSTEXPR npu_set_kernel_width_m1_t() :
20705 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1)), reserved0(0),
20706 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
20707 {
20708 }
20709 CONSTEXPR bool valid() const
20710 {
20711 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1) &&
20712 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20713 }
20714 CONSTEXPR void init()
20715 {
20716 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_WIDTH_M1);
20717 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20718 }
20719 operator uint32_t()
20720 {
20721 uint32_t word;
20722 std::memcpy(&word, this, sizeof(word));
20723 return word;
20724 }
20725 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20726 {
20727 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20728 }
20729 CONSTEXPR npu_set_kernel_width_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20730 {
20731 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20732 return *this;
20733 }
20734 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20735 {
20736 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20737 }
20738 CONSTEXPR npu_set_kernel_width_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20739 {
20740 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20741 return *this;
20742 }
20743 CONSTEXPR uint32_t get_width_m1() const
20744 {
20745 return static_cast<uint32_t>(width_m1);
20746 }
20747 CONSTEXPR npu_set_kernel_width_m1_t &set_width_m1(uint32_t value)
20748 {
20749 width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
20750 return *this;
20751 }
20752#ifdef NPU_DISASSEMBLE
20753 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20754 {
20755 fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
20756 }
20757#endif
20758#endif
20759 };
20760 // Kernel height
20761 struct npu_set_kernel_height_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020762 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020763#ifdef __cplusplus
20764 private:
20765#endif
20766 uint32_t opcode : 10; // opcode
20767 uint32_t reserved0 : 4;
20768 uint32_t control : 2; // control
20769 uint32_t height_m1 : 16; // Kernel height
20770#ifdef __cplusplus
20771 public:
20772 npu_set_kernel_height_m1_t(uint32_t _height_m1) :
20773 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020774 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020020775 {
20776 }
20777 CONSTEXPR npu_set_kernel_height_m1_t() :
20778 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1)), reserved0(0),
20779 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
20780 {
20781 }
20782 CONSTEXPR bool valid() const
20783 {
20784 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1) &&
20785 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20786 }
20787 CONSTEXPR void init()
20788 {
20789 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_HEIGHT_M1);
20790 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20791 }
20792 operator uint32_t()
20793 {
20794 uint32_t word;
20795 std::memcpy(&word, this, sizeof(word));
20796 return word;
20797 }
20798 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20799 {
20800 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20801 }
20802 CONSTEXPR npu_set_kernel_height_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20803 {
20804 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20805 return *this;
20806 }
20807 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20808 {
20809 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20810 }
20811 CONSTEXPR npu_set_kernel_height_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20812 {
20813 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20814 return *this;
20815 }
20816 CONSTEXPR uint32_t get_height_m1() const
20817 {
20818 return static_cast<uint32_t>(height_m1);
20819 }
20820 CONSTEXPR npu_set_kernel_height_m1_t &set_height_m1(uint32_t value)
20821 {
20822 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
20823 return *this;
20824 }
20825#ifdef NPU_DISASSEMBLE
20826 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20827 {
20828 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
20829 }
20830#endif
20831#endif
20832 };
20833 // Kernel stride
20834 struct npu_set_kernel_stride_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020020835 {
Jonny Svärd136810f2021-10-13 16:04:26 +020020836#ifdef __cplusplus
20837 private:
20838#endif
20839 uint32_t opcode : 10; // opcode
20840 uint32_t reserved0 : 4;
20841 uint32_t control : 2; // control
20842 uint32_t stride_x_lsb : 1; // Stride x LSB. (kernel_x_stride - 1)[0]
20843 uint32_t stride_y_lsb : 1; // Stride y LSB. (kernel_y_stride - 1)[0]
20844 uint32_t weight_order : 1; // Weight ordering mode
20845 uint32_t dilation_x : 1; // Kernel x dilation
20846 uint32_t dilation_y : 1; // Kernel y dilation
20847 uint32_t decomposition : 1; // Kernel decomposition
20848 uint32_t stride_x_msb : 1; // Stride x MSB. (kernel_x_stride - 1) >> 1
20849 uint32_t reserved1 : 2;
20850 uint32_t stride_y_msb : 1; // Stride y MSB. (kernel_y_stride - 1) >> 1
20851 uint32_t reserved2 : 6;
20852#ifdef __cplusplus
20853 public:
20854 npu_set_kernel_stride_t(uint32_t _stride_x_lsb,
20855 uint32_t _stride_y_lsb,
20856 NPU_NAMESPACE::weight_order _weight_order,
20857 NPU_NAMESPACE::kernel_dilation _dilation_x,
20858 NPU_NAMESPACE::kernel_dilation _dilation_y,
20859 NPU_NAMESPACE::kernel_decomposition _decomposition,
20860 uint32_t _stride_x_msb,
20861 uint32_t _stride_y_msb) :
20862 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE)),
20863 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020864 stride_x_lsb(_stride_x_lsb & ((1U << 1) - 1)), stride_y_lsb(_stride_y_lsb & ((1U << 1) - 1)),
Jonny Svärd136810f2021-10-13 16:04:26 +020020865 weight_order(static_cast<uint8_t>(_weight_order) & ((1U << 1) - 1)),
20866 dilation_x(static_cast<uint8_t>(_dilation_x) & ((1U << 1) - 1)),
20867 dilation_y(static_cast<uint8_t>(_dilation_y) & ((1U << 1) - 1)),
20868 decomposition(static_cast<uint8_t>(_decomposition) & ((1U << 1) - 1)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010020869 stride_x_msb(_stride_x_msb & ((1U << 1) - 1)), reserved1(0), stride_y_msb(_stride_y_msb & ((1U << 1) - 1)),
20870 reserved2(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020020871 {
20872 }
20873 CONSTEXPR npu_set_kernel_stride_t() :
20874 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE)), reserved0(0),
20875 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), stride_x_lsb(0), stride_y_lsb(0),
20876 weight_order(0), dilation_x(0), dilation_y(0), decomposition(0), stride_x_msb(0), reserved1(0),
20877 stride_y_msb(0), reserved2(0)
20878 {
20879 }
20880 CONSTEXPR bool valid() const
20881 {
20882 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE) &&
20883 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20884 }
20885 CONSTEXPR void init()
20886 {
20887 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_KERNEL_STRIDE);
20888 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
20889 }
20890 operator uint32_t()
20891 {
20892 uint32_t word;
20893 std::memcpy(&word, this, sizeof(word));
20894 return word;
20895 }
20896 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
20897 {
20898 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
20899 }
20900 CONSTEXPR npu_set_kernel_stride_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
20901 {
20902 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
20903 return *this;
20904 }
20905 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
20906 {
20907 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
20908 }
20909 CONSTEXPR npu_set_kernel_stride_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
20910 {
20911 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
20912 return *this;
20913 }
20914 CONSTEXPR uint32_t get_stride_x_lsb() const
20915 {
20916 return static_cast<uint32_t>(stride_x_lsb);
20917 }
20918 CONSTEXPR npu_set_kernel_stride_t &set_stride_x_lsb(uint32_t value)
20919 {
20920 stride_x_lsb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20921 return *this;
20922 }
20923 CONSTEXPR uint32_t get_stride_y_lsb() const
20924 {
20925 return static_cast<uint32_t>(stride_y_lsb);
20926 }
20927 CONSTEXPR npu_set_kernel_stride_t &set_stride_y_lsb(uint32_t value)
20928 {
20929 stride_y_lsb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20930 return *this;
20931 }
20932 CONSTEXPR NPU_NAMESPACE::weight_order get_weight_order() const
20933 {
20934 return static_cast<NPU_NAMESPACE::weight_order>(weight_order);
20935 }
20936 CONSTEXPR npu_set_kernel_stride_t &set_weight_order(NPU_NAMESPACE::weight_order value)
20937 {
20938 weight_order = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20939 return *this;
20940 }
20941 CONSTEXPR NPU_NAMESPACE::kernel_dilation get_dilation_x() const
20942 {
20943 return static_cast<NPU_NAMESPACE::kernel_dilation>(dilation_x);
20944 }
20945 CONSTEXPR npu_set_kernel_stride_t &set_dilation_x(NPU_NAMESPACE::kernel_dilation value)
20946 {
20947 dilation_x = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20948 return *this;
20949 }
20950 CONSTEXPR NPU_NAMESPACE::kernel_dilation get_dilation_y() const
20951 {
20952 return static_cast<NPU_NAMESPACE::kernel_dilation>(dilation_y);
20953 }
20954 CONSTEXPR npu_set_kernel_stride_t &set_dilation_y(NPU_NAMESPACE::kernel_dilation value)
20955 {
20956 dilation_y = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20957 return *this;
20958 }
20959 CONSTEXPR NPU_NAMESPACE::kernel_decomposition get_decomposition() const
20960 {
20961 return static_cast<NPU_NAMESPACE::kernel_decomposition>(decomposition);
20962 }
20963 CONSTEXPR npu_set_kernel_stride_t &set_decomposition(NPU_NAMESPACE::kernel_decomposition value)
20964 {
20965 decomposition = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20966 return *this;
20967 }
20968 CONSTEXPR uint32_t get_stride_x_msb() const
20969 {
20970 return static_cast<uint32_t>(stride_x_msb);
20971 }
20972 CONSTEXPR npu_set_kernel_stride_t &set_stride_x_msb(uint32_t value)
20973 {
20974 stride_x_msb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20975 return *this;
20976 }
20977 CONSTEXPR uint32_t get_stride_y_msb() const
20978 {
20979 return static_cast<uint32_t>(stride_y_msb);
20980 }
20981 CONSTEXPR npu_set_kernel_stride_t &set_stride_y_msb(uint32_t value)
20982 {
20983 stride_y_msb = static_cast<uint8_t>(value) & ((1U << 1) - 1);
20984 return *this;
20985 }
20986#ifdef NPU_DISASSEMBLE
20987 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
20988 {
20989 fields.push_back(std::make_pair<std::string, std::string>("stride_x_lsb", std::to_string(stride_x_lsb)));
20990 fields.push_back(std::make_pair<std::string, std::string>("stride_y_lsb", std::to_string(stride_y_lsb)));
20991 fields.push_back(std::make_pair<std::string, std::string>(
20992 "weight_order",
20993 (weight_order < (sizeof(weight_order_str) / sizeof(weight_order_str[0])) ?
20994 weight_order_str[weight_order] :
20995 "****")));
20996 fields.push_back(std::make_pair<std::string, std::string>(
20997 "dilation_x",
20998 (dilation_x < (sizeof(kernel_dilation_str) / sizeof(kernel_dilation_str[0])) ?
20999 kernel_dilation_str[dilation_x] :
21000 "****")));
21001 fields.push_back(std::make_pair<std::string, std::string>(
21002 "dilation_y",
21003 (dilation_y < (sizeof(kernel_dilation_str) / sizeof(kernel_dilation_str[0])) ?
21004 kernel_dilation_str[dilation_y] :
21005 "****")));
21006 fields.push_back(std::make_pair<std::string, std::string>(
21007 "decomposition",
21008 (decomposition < (sizeof(kernel_decomposition_str) / sizeof(kernel_decomposition_str[0])) ?
21009 kernel_decomposition_str[decomposition] :
21010 "****")));
21011 fields.push_back(std::make_pair<std::string, std::string>("stride_x_msb", std::to_string(stride_x_msb)));
21012 fields.push_back(std::make_pair<std::string, std::string>("stride_y_msb", std::to_string(stride_y_msb)));
21013 }
21014#endif
21015#endif
21016 };
21017 // Accumulator format
21018 struct npu_set_acc_format_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021019 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021020#ifdef __cplusplus
21021 private:
21022#endif
21023 uint32_t opcode : 10; // opcode
21024 uint32_t reserved0 : 4;
21025 uint32_t control : 2; // control
21026 uint32_t acc_format : 2; // Accumulator format
21027 uint32_t reserved1 : 14;
21028#ifdef __cplusplus
21029 public:
21030 npu_set_acc_format_t(NPU_NAMESPACE::acc_format _acc_format) :
21031 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT)), reserved0(0),
21032 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
21033 acc_format(static_cast<uint8_t>(_acc_format) & ((1U << 2) - 1)), reserved1(0)
21034 {
21035 }
21036 CONSTEXPR npu_set_acc_format_t() :
21037 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT)), reserved0(0),
21038 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), acc_format(0), reserved1(0)
21039 {
21040 }
21041 CONSTEXPR bool valid() const
21042 {
21043 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT) &&
21044 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21045 }
21046 CONSTEXPR void init()
21047 {
21048 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACC_FORMAT);
21049 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21050 }
21051 operator uint32_t()
21052 {
21053 uint32_t word;
21054 std::memcpy(&word, this, sizeof(word));
21055 return word;
21056 }
21057 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21058 {
21059 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21060 }
21061 CONSTEXPR npu_set_acc_format_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21062 {
21063 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21064 return *this;
21065 }
21066 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21067 {
21068 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21069 }
21070 CONSTEXPR npu_set_acc_format_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21071 {
21072 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21073 return *this;
21074 }
21075 CONSTEXPR NPU_NAMESPACE::acc_format get_acc_format() const
21076 {
21077 return static_cast<NPU_NAMESPACE::acc_format>(acc_format);
21078 }
21079 CONSTEXPR npu_set_acc_format_t &set_acc_format(NPU_NAMESPACE::acc_format value)
21080 {
21081 acc_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21082 return *this;
21083 }
21084#ifdef NPU_DISASSEMBLE
21085 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21086 {
21087 fields.push_back(std::make_pair<std::string, std::string>(
21088 "acc_format",
21089 (acc_format < (sizeof(acc_format_str) / sizeof(acc_format_str[0])) ? acc_format_str[acc_format] :
21090 "****")));
21091 }
21092#endif
21093#endif
21094 };
21095 // Activation function and clip range
21096 struct npu_set_activation_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021097 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021098#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020021099 private:
21100#endif
21101 uint32_t opcode : 10; // opcode
21102 uint32_t reserved0 : 4;
21103 uint32_t control : 2; // control
21104 uint32_t activation_function : 5; // Activation function (before table lookup)
21105 uint32_t reserved1 : 7;
21106 uint32_t activation_clip_range : 3; // Activation clip range. This must be set to 0 if table lookup is not used
21107 uint32_t reserved2 : 1;
21108#ifdef __cplusplus
21109 public:
21110 npu_set_activation_t(NPU_NAMESPACE::activation_function _activation_function,
21111 NPU_NAMESPACE::activation_clip_range _activation_clip_range) :
21112 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION)),
21113 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
21114 activation_function(static_cast<uint8_t>(_activation_function) & ((1U << 5) - 1)), reserved1(0),
21115 activation_clip_range(static_cast<uint8_t>(_activation_clip_range) & ((1U << 3) - 1)), reserved2(0)
21116 {
21117 }
21118 CONSTEXPR npu_set_activation_t() :
21119 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION)), reserved0(0),
21120 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_function(0), reserved1(0),
21121 activation_clip_range(0), reserved2(0)
21122 {
21123 }
21124 CONSTEXPR bool valid() const
21125 {
21126 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION) &&
21127 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21128 }
21129 CONSTEXPR void init()
21130 {
21131 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION);
21132 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21133 }
21134 operator uint32_t()
21135 {
21136 uint32_t word;
21137 std::memcpy(&word, this, sizeof(word));
21138 return word;
21139 }
21140 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21141 {
21142 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21143 }
21144 CONSTEXPR npu_set_activation_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21145 {
21146 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21147 return *this;
21148 }
21149 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21150 {
21151 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21152 }
21153 CONSTEXPR npu_set_activation_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21154 {
21155 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21156 return *this;
21157 }
21158 CONSTEXPR NPU_NAMESPACE::activation_function get_activation_function() const
21159 {
21160 return static_cast<NPU_NAMESPACE::activation_function>(activation_function);
21161 }
21162 CONSTEXPR npu_set_activation_t &set_activation_function(NPU_NAMESPACE::activation_function value)
21163 {
21164 activation_function = static_cast<uint8_t>(value) & ((1U << 5) - 1);
21165 return *this;
21166 }
21167 CONSTEXPR NPU_NAMESPACE::activation_clip_range get_activation_clip_range() const
21168 {
21169 return static_cast<NPU_NAMESPACE::activation_clip_range>(activation_clip_range);
21170 }
21171 CONSTEXPR npu_set_activation_t &set_activation_clip_range(NPU_NAMESPACE::activation_clip_range value)
21172 {
21173 activation_clip_range = static_cast<uint8_t>(value) & ((1U << 3) - 1);
21174 return *this;
21175 }
21176#ifdef NPU_DISASSEMBLE
21177 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21178 {
21179 fields.push_back(std::make_pair<std::string, std::string>(
21180 "activation_function",
21181 (activation_function < (sizeof(activation_function_str) / sizeof(activation_function_str[0])) ?
21182 activation_function_str[activation_function] :
21183 "****")));
21184 fields.push_back(std::make_pair<std::string, std::string>(
21185 "activation_clip_range",
21186 (activation_clip_range < (sizeof(activation_clip_range_str) / sizeof(activation_clip_range_str[0])) ?
21187 activation_clip_range_str[activation_clip_range] :
21188 "****")));
21189 }
21190#endif
21191#endif
21192 };
21193 // Lower bound clip
21194 struct npu_set_activation_min_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021195 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021196#ifdef __cplusplus
21197 private:
21198#endif
21199 uint32_t opcode : 10; // opcode
21200 uint32_t reserved0 : 4;
21201 uint32_t control : 2; // control
21202 uint32_t clip_boundary : 16; // Clip boundary for OFM activations
21203#ifdef __cplusplus
21204 public:
21205 npu_set_activation_min_t(uint32_t _clip_boundary) :
21206 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN)), reserved0(0),
21207 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021208 clip_boundary(_clip_boundary & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020021209 {
21210 }
21211 CONSTEXPR npu_set_activation_min_t() :
21212 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN)), reserved0(0),
21213 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), clip_boundary(0)
21214 {
21215 }
21216 CONSTEXPR bool valid() const
21217 {
21218 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN) &&
21219 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21220 }
21221 CONSTEXPR void init()
21222 {
21223 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MIN);
21224 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21225 }
21226 operator uint32_t()
21227 {
21228 uint32_t word;
21229 std::memcpy(&word, this, sizeof(word));
21230 return word;
21231 }
21232 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21233 {
21234 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21235 }
21236 CONSTEXPR npu_set_activation_min_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21237 {
21238 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21239 return *this;
21240 }
21241 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21242 {
21243 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21244 }
21245 CONSTEXPR npu_set_activation_min_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21246 {
21247 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21248 return *this;
21249 }
21250 CONSTEXPR uint32_t get_clip_boundary() const
21251 {
21252 return static_cast<uint32_t>(clip_boundary);
21253 }
21254 CONSTEXPR npu_set_activation_min_t &set_clip_boundary(uint32_t value)
21255 {
21256 clip_boundary = static_cast<uint16_t>(value) & ((1U << 16) - 1);
21257 return *this;
21258 }
21259#ifdef NPU_DISASSEMBLE
21260 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21261 {
21262 fields.push_back(std::make_pair<std::string, std::string>("clip_boundary", std::to_string(clip_boundary)));
21263 }
21264#endif
21265#endif
21266 };
21267 // Upper bound clip
21268 struct npu_set_activation_max_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021269 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021270#ifdef __cplusplus
21271 private:
21272#endif
21273 uint32_t opcode : 10; // opcode
21274 uint32_t reserved0 : 4;
21275 uint32_t control : 2; // control
21276 uint32_t clip_boundary : 16; // Clip boundary for OFM activations
21277#ifdef __cplusplus
21278 public:
21279 npu_set_activation_max_t(uint32_t _clip_boundary) :
21280 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX)), reserved0(0),
21281 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021282 clip_boundary(_clip_boundary & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020021283 {
21284 }
21285 CONSTEXPR npu_set_activation_max_t() :
21286 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX)), reserved0(0),
21287 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), clip_boundary(0)
21288 {
21289 }
21290 CONSTEXPR bool valid() const
21291 {
21292 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX) &&
21293 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21294 }
21295 CONSTEXPR void init()
21296 {
21297 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_ACTIVATION_MAX);
21298 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21299 }
21300 operator uint32_t()
21301 {
21302 uint32_t word;
21303 std::memcpy(&word, this, sizeof(word));
21304 return word;
21305 }
21306 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21307 {
21308 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21309 }
21310 CONSTEXPR npu_set_activation_max_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21311 {
21312 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21313 return *this;
21314 }
21315 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21316 {
21317 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21318 }
21319 CONSTEXPR npu_set_activation_max_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21320 {
21321 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21322 return *this;
21323 }
21324 CONSTEXPR uint32_t get_clip_boundary() const
21325 {
21326 return static_cast<uint32_t>(clip_boundary);
21327 }
21328 CONSTEXPR npu_set_activation_max_t &set_clip_boundary(uint32_t value)
21329 {
21330 clip_boundary = static_cast<uint16_t>(value) & ((1U << 16) - 1);
21331 return *this;
21332 }
21333#ifdef NPU_DISASSEMBLE
21334 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21335 {
21336 fields.push_back(std::make_pair<std::string, std::string>("clip_boundary", std::to_string(clip_boundary)));
21337 }
21338#endif
21339#endif
21340 };
21341 // Index n for weight stream access
21342 struct npu_set_weight_region_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021343 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021344#ifdef __cplusplus
21345 private:
21346#endif
21347 uint32_t opcode : 10; // opcode
21348 uint32_t reserved0 : 4;
21349 uint32_t control : 2; // control
21350 uint32_t region : 3; // Index n for weight stream access
21351 uint32_t reserved1 : 12;
21352 uint32_t custom_dma_cs : 1; // Custom DMA select
21353#ifdef __cplusplus
21354 public:
21355 npu_set_weight_region_t(uint32_t _region, NPU_NAMESPACE::custom_dma_cs _custom_dma_cs) :
21356 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021357 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(_region & ((1U << 3) - 1)),
21358 reserved1(0), custom_dma_cs(static_cast<uint8_t>(_custom_dma_cs) & ((1U << 1) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020021359 {
21360 }
21361 CONSTEXPR npu_set_weight_region_t() :
21362 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION)), reserved0(0),
21363 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), custom_dma_cs(0)
21364 {
21365 }
21366 CONSTEXPR bool valid() const
21367 {
21368 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION) &&
21369 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21370 }
21371 CONSTEXPR void init()
21372 {
21373 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_WEIGHT_REGION);
21374 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21375 }
21376 operator uint32_t()
21377 {
21378 uint32_t word;
21379 std::memcpy(&word, this, sizeof(word));
21380 return word;
21381 }
21382 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21383 {
21384 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21385 }
21386 CONSTEXPR npu_set_weight_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21387 {
21388 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21389 return *this;
21390 }
21391 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21392 {
21393 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21394 }
21395 CONSTEXPR npu_set_weight_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21396 {
21397 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21398 return *this;
21399 }
21400 CONSTEXPR uint32_t get_region() const
21401 {
21402 return static_cast<uint32_t>(region);
21403 }
21404 CONSTEXPR npu_set_weight_region_t &set_region(uint32_t value)
21405 {
21406 region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
21407 return *this;
21408 }
21409 CONSTEXPR NPU_NAMESPACE::custom_dma_cs get_custom_dma_cs() const
21410 {
21411 return static_cast<NPU_NAMESPACE::custom_dma_cs>(custom_dma_cs);
21412 }
21413 CONSTEXPR npu_set_weight_region_t &set_custom_dma_cs(NPU_NAMESPACE::custom_dma_cs value)
21414 {
21415 custom_dma_cs = static_cast<uint8_t>(value) & ((1U << 1) - 1);
21416 return *this;
21417 }
21418#ifdef NPU_DISASSEMBLE
21419 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21420 {
21421 fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
21422 fields.push_back(std::make_pair<std::string, std::string>(
21423 "custom_dma_cs",
21424 (custom_dma_cs < (sizeof(custom_dma_cs_str) / sizeof(custom_dma_cs_str[0])) ?
21425 custom_dma_cs_str[custom_dma_cs] :
21426 "****")));
21427 }
21428#endif
21429#endif
21430 };
21431 // Index n for scale stream access
21432 struct npu_set_scale_region_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021433 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021434#ifdef __cplusplus
21435 private:
21436#endif
21437 uint32_t opcode : 10; // opcode
21438 uint32_t reserved0 : 4;
21439 uint32_t control : 2; // control
21440 uint32_t region : 3; // Index n for scale stream access
21441 uint32_t reserved1 : 12;
21442 uint32_t custom_dma_cs : 1; // Custom DMA select
21443#ifdef __cplusplus
21444 public:
21445 npu_set_scale_region_t(uint32_t _region, NPU_NAMESPACE::custom_dma_cs _custom_dma_cs) :
21446 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021447 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(_region & ((1U << 3) - 1)),
21448 reserved1(0), custom_dma_cs(static_cast<uint8_t>(_custom_dma_cs) & ((1U << 1) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020021449 {
21450 }
21451 CONSTEXPR npu_set_scale_region_t() :
21452 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION)), reserved0(0),
21453 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), custom_dma_cs(0)
21454 {
21455 }
21456 CONSTEXPR bool valid() const
21457 {
21458 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION) &&
21459 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21460 }
21461 CONSTEXPR void init()
21462 {
21463 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_SCALE_REGION);
21464 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21465 }
21466 operator uint32_t()
21467 {
21468 uint32_t word;
21469 std::memcpy(&word, this, sizeof(word));
21470 return word;
21471 }
21472 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21473 {
21474 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21475 }
21476 CONSTEXPR npu_set_scale_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21477 {
21478 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21479 return *this;
21480 }
21481 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21482 {
21483 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21484 }
21485 CONSTEXPR npu_set_scale_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21486 {
21487 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21488 return *this;
21489 }
21490 CONSTEXPR uint32_t get_region() const
21491 {
21492 return static_cast<uint32_t>(region);
21493 }
21494 CONSTEXPR npu_set_scale_region_t &set_region(uint32_t value)
21495 {
21496 region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
21497 return *this;
21498 }
21499 CONSTEXPR NPU_NAMESPACE::custom_dma_cs get_custom_dma_cs() const
21500 {
21501 return static_cast<NPU_NAMESPACE::custom_dma_cs>(custom_dma_cs);
21502 }
21503 CONSTEXPR npu_set_scale_region_t &set_custom_dma_cs(NPU_NAMESPACE::custom_dma_cs value)
21504 {
21505 custom_dma_cs = static_cast<uint8_t>(value) & ((1U << 1) - 1);
21506 return *this;
21507 }
21508#ifdef NPU_DISASSEMBLE
21509 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21510 {
21511 fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
21512 fields.push_back(std::make_pair<std::string, std::string>(
21513 "custom_dma_cs",
21514 (custom_dma_cs < (sizeof(custom_dma_cs_str) / sizeof(custom_dma_cs_str[0])) ?
21515 custom_dma_cs_str[custom_dma_cs] :
21516 "****")));
21517 }
21518#endif
21519#endif
21520 };
21521 // Start of ACC0,ACC1 buffers
21522 struct npu_set_ab_start_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021523 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021524#ifdef __cplusplus
21525 private:
21526#endif
21527 uint32_t opcode : 10; // opcode
21528 uint32_t reserved0 : 4;
21529 uint32_t control : 2; // control
21530 uint32_t ab_start : 6; // Start of ACC0,ACC1 buffers in the SHRAM in KB units. Multiple of 2
21531 uint32_t reserved1 : 10;
21532#ifdef __cplusplus
21533 public:
21534 npu_set_ab_start_t(uint32_t _ab_start) :
21535 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021536 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ab_start(_ab_start & ((1U << 6) - 1)),
21537 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020021538 {
21539 }
21540 CONSTEXPR npu_set_ab_start_t() :
21541 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START)), reserved0(0),
21542 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ab_start(0), reserved1(0)
21543 {
21544 }
21545 CONSTEXPR bool valid() const
21546 {
21547 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START) &&
21548 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21549 }
21550 CONSTEXPR void init()
21551 {
21552 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_AB_START);
21553 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21554 }
21555 operator uint32_t()
21556 {
21557 uint32_t word;
21558 std::memcpy(&word, this, sizeof(word));
21559 return word;
21560 }
21561 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21562 {
21563 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21564 }
21565 CONSTEXPR npu_set_ab_start_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21566 {
21567 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21568 return *this;
21569 }
21570 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21571 {
21572 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21573 }
21574 CONSTEXPR npu_set_ab_start_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21575 {
21576 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21577 return *this;
21578 }
21579 CONSTEXPR uint32_t get_ab_start() const
21580 {
21581 return static_cast<uint32_t>(ab_start);
21582 }
21583 CONSTEXPR npu_set_ab_start_t &set_ab_start(uint32_t value)
21584 {
21585 ab_start = static_cast<uint8_t>(value) & ((1U << 6) - 1);
21586 return *this;
21587 }
21588#ifdef NPU_DISASSEMBLE
21589 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21590 {
21591 fields.push_back(std::make_pair<std::string, std::string>("ab_start", std::to_string(ab_start)));
21592 }
21593#endif
21594#endif
21595 };
21596 // Block number of blocks dependency
21597 struct npu_set_blockdep_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021598 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021599#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020021600 private:
21601#endif
21602 uint32_t opcode : 10; // opcode
21603 uint32_t reserved0 : 4;
21604 uint32_t control : 2; // control
21605 uint32_t blockdep : 2; // Block number of blocks dependency between kernel operations
21606 uint32_t reserved1 : 14;
21607#ifdef __cplusplus
21608 public:
21609 npu_set_blockdep_t(uint32_t _blockdep) :
21610 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021611 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), blockdep(_blockdep & ((1U << 2) - 1)),
21612 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020021613 {
21614 }
21615 CONSTEXPR npu_set_blockdep_t() :
21616 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP)), reserved0(0),
21617 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), blockdep(0), reserved1(0)
21618 {
21619 }
21620 CONSTEXPR bool valid() const
21621 {
21622 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP) &&
21623 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21624 }
21625 CONSTEXPR void init()
21626 {
21627 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_BLOCKDEP);
21628 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21629 }
21630 operator uint32_t()
21631 {
21632 uint32_t word;
21633 std::memcpy(&word, this, sizeof(word));
21634 return word;
21635 }
21636 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21637 {
21638 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21639 }
21640 CONSTEXPR npu_set_blockdep_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21641 {
21642 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21643 return *this;
21644 }
21645 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21646 {
21647 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21648 }
21649 CONSTEXPR npu_set_blockdep_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21650 {
21651 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21652 return *this;
21653 }
21654 CONSTEXPR uint32_t get_blockdep() const
21655 {
21656 return static_cast<uint32_t>(blockdep);
21657 }
21658 CONSTEXPR npu_set_blockdep_t &set_blockdep(uint32_t value)
21659 {
21660 blockdep = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21661 return *this;
21662 }
21663#ifdef NPU_DISASSEMBLE
21664 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21665 {
21666 fields.push_back(std::make_pair<std::string, std::string>("blockdep", std::to_string(blockdep)));
21667 }
21668#endif
21669#endif
21670 };
21671 // DMA0 source region
21672 struct npu_set_dma0_src_region_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021673 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021674#ifdef __cplusplus
21675 private:
21676#endif
21677 uint32_t opcode : 10; // opcode
21678 uint32_t reserved0 : 4;
21679 uint32_t control : 2; // control
21680 uint32_t region : 3; // Region number
21681 uint32_t reserved1 : 5;
21682 uint32_t region_mode : 1; // Region mode
21683 uint32_t stride_mode : 2; // Stride mode
21684 uint32_t reserved2 : 4;
21685 uint32_t custom_dma_cs : 1; // Custom DMA select
21686#ifdef __cplusplus
21687 public:
21688 npu_set_dma0_src_region_t(uint32_t _region,
21689 NPU_NAMESPACE::dma_region_mode _region_mode,
21690 NPU_NAMESPACE::dma_stride_mode _stride_mode,
21691 NPU_NAMESPACE::custom_dma_cs _custom_dma_cs) :
21692 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION)),
21693 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021694 region(_region & ((1U << 3) - 1)), reserved1(0),
Jonny Svärd136810f2021-10-13 16:04:26 +020021695 region_mode(static_cast<uint8_t>(_region_mode) & ((1U << 1) - 1)),
21696 stride_mode(static_cast<uint8_t>(_stride_mode) & ((1U << 2) - 1)), reserved2(0),
21697 custom_dma_cs(static_cast<uint8_t>(_custom_dma_cs) & ((1U << 1) - 1))
21698 {
21699 }
21700 CONSTEXPR npu_set_dma0_src_region_t() :
21701 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION)), reserved0(0),
21702 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), region_mode(0),
21703 stride_mode(0), reserved2(0), custom_dma_cs(0)
21704 {
21705 }
21706 CONSTEXPR bool valid() const
21707 {
21708 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION) &&
21709 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21710 }
21711 CONSTEXPR void init()
21712 {
21713 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SRC_REGION);
21714 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21715 }
21716 operator uint32_t()
21717 {
21718 uint32_t word;
21719 std::memcpy(&word, this, sizeof(word));
21720 return word;
21721 }
21722 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21723 {
21724 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21725 }
21726 CONSTEXPR npu_set_dma0_src_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21727 {
21728 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21729 return *this;
21730 }
21731 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21732 {
21733 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21734 }
21735 CONSTEXPR npu_set_dma0_src_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21736 {
21737 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21738 return *this;
21739 }
21740 CONSTEXPR uint32_t get_region() const
21741 {
21742 return static_cast<uint32_t>(region);
21743 }
21744 CONSTEXPR npu_set_dma0_src_region_t &set_region(uint32_t value)
21745 {
21746 region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
21747 return *this;
21748 }
21749 CONSTEXPR NPU_NAMESPACE::dma_region_mode get_region_mode() const
21750 {
21751 return static_cast<NPU_NAMESPACE::dma_region_mode>(region_mode);
21752 }
21753 CONSTEXPR npu_set_dma0_src_region_t &set_region_mode(NPU_NAMESPACE::dma_region_mode value)
21754 {
21755 region_mode = static_cast<uint8_t>(value) & ((1U << 1) - 1);
21756 return *this;
21757 }
21758 CONSTEXPR NPU_NAMESPACE::dma_stride_mode get_stride_mode() const
21759 {
21760 return static_cast<NPU_NAMESPACE::dma_stride_mode>(stride_mode);
21761 }
21762 CONSTEXPR npu_set_dma0_src_region_t &set_stride_mode(NPU_NAMESPACE::dma_stride_mode value)
21763 {
21764 stride_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21765 return *this;
21766 }
21767 CONSTEXPR NPU_NAMESPACE::custom_dma_cs get_custom_dma_cs() const
21768 {
21769 return static_cast<NPU_NAMESPACE::custom_dma_cs>(custom_dma_cs);
21770 }
21771 CONSTEXPR npu_set_dma0_src_region_t &set_custom_dma_cs(NPU_NAMESPACE::custom_dma_cs value)
21772 {
21773 custom_dma_cs = static_cast<uint8_t>(value) & ((1U << 1) - 1);
21774 return *this;
21775 }
21776#ifdef NPU_DISASSEMBLE
21777 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21778 {
21779 fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
21780 fields.push_back(std::make_pair<std::string, std::string>(
21781 "region_mode",
21782 (region_mode < (sizeof(dma_region_mode_str) / sizeof(dma_region_mode_str[0])) ?
21783 dma_region_mode_str[region_mode] :
21784 "****")));
21785 fields.push_back(std::make_pair<std::string, std::string>(
21786 "stride_mode",
21787 (stride_mode < (sizeof(dma_stride_mode_str) / sizeof(dma_stride_mode_str[0])) ?
21788 dma_stride_mode_str[stride_mode] :
21789 "****")));
21790 fields.push_back(std::make_pair<std::string, std::string>(
21791 "custom_dma_cs",
21792 (custom_dma_cs < (sizeof(custom_dma_cs_str) / sizeof(custom_dma_cs_str[0])) ?
21793 custom_dma_cs_str[custom_dma_cs] :
21794 "****")));
21795 }
21796#endif
21797#endif
21798 };
21799 // DMA0 destination region
21800 struct npu_set_dma0_dst_region_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021801 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021802#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020021803 private:
21804#endif
21805 uint32_t opcode : 10; // opcode
21806 uint32_t reserved0 : 4;
21807 uint32_t control : 2; // control
21808 uint32_t region : 3; // Region number if region_mode is region_mode_external. Else core mask to write to (bit k
21809 // set for core k=0,1)
21810 uint32_t reserved1 : 5;
21811 uint32_t region_mode : 1; // Region mode
21812 uint32_t stride_mode : 2; // Stride mode
21813 uint32_t reserved2 : 4;
21814 uint32_t custom_dma_cs : 1; // Custom DMA select
21815#ifdef __cplusplus
21816 public:
21817 npu_set_dma0_dst_region_t(uint32_t _region,
21818 NPU_NAMESPACE::dma_region_mode _region_mode,
21819 NPU_NAMESPACE::dma_stride_mode _stride_mode,
21820 NPU_NAMESPACE::custom_dma_cs _custom_dma_cs) :
21821 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION)),
21822 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021823 region(_region & ((1U << 3) - 1)), reserved1(0),
Jonny Svärd136810f2021-10-13 16:04:26 +020021824 region_mode(static_cast<uint8_t>(_region_mode) & ((1U << 1) - 1)),
21825 stride_mode(static_cast<uint8_t>(_stride_mode) & ((1U << 2) - 1)), reserved2(0),
21826 custom_dma_cs(static_cast<uint8_t>(_custom_dma_cs) & ((1U << 1) - 1))
21827 {
21828 }
21829 CONSTEXPR npu_set_dma0_dst_region_t() :
21830 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION)), reserved0(0),
21831 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0), region_mode(0),
21832 stride_mode(0), reserved2(0), custom_dma_cs(0)
21833 {
21834 }
21835 CONSTEXPR bool valid() const
21836 {
21837 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION) &&
21838 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21839 }
21840 CONSTEXPR void init()
21841 {
21842 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_DST_REGION);
21843 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21844 }
21845 operator uint32_t()
21846 {
21847 uint32_t word;
21848 std::memcpy(&word, this, sizeof(word));
21849 return word;
21850 }
21851 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21852 {
21853 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21854 }
21855 CONSTEXPR npu_set_dma0_dst_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21856 {
21857 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21858 return *this;
21859 }
21860 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21861 {
21862 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21863 }
21864 CONSTEXPR npu_set_dma0_dst_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21865 {
21866 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21867 return *this;
21868 }
21869 CONSTEXPR uint32_t get_region() const
21870 {
21871 return static_cast<uint32_t>(region);
21872 }
21873 CONSTEXPR npu_set_dma0_dst_region_t &set_region(uint32_t value)
21874 {
21875 region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
21876 return *this;
21877 }
21878 CONSTEXPR NPU_NAMESPACE::dma_region_mode get_region_mode() const
21879 {
21880 return static_cast<NPU_NAMESPACE::dma_region_mode>(region_mode);
21881 }
21882 CONSTEXPR npu_set_dma0_dst_region_t &set_region_mode(NPU_NAMESPACE::dma_region_mode value)
21883 {
21884 region_mode = static_cast<uint8_t>(value) & ((1U << 1) - 1);
21885 return *this;
21886 }
21887 CONSTEXPR NPU_NAMESPACE::dma_stride_mode get_stride_mode() const
21888 {
21889 return static_cast<NPU_NAMESPACE::dma_stride_mode>(stride_mode);
21890 }
21891 CONSTEXPR npu_set_dma0_dst_region_t &set_stride_mode(NPU_NAMESPACE::dma_stride_mode value)
21892 {
21893 stride_mode = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21894 return *this;
21895 }
21896 CONSTEXPR NPU_NAMESPACE::custom_dma_cs get_custom_dma_cs() const
21897 {
21898 return static_cast<NPU_NAMESPACE::custom_dma_cs>(custom_dma_cs);
21899 }
21900 CONSTEXPR npu_set_dma0_dst_region_t &set_custom_dma_cs(NPU_NAMESPACE::custom_dma_cs value)
21901 {
21902 custom_dma_cs = static_cast<uint8_t>(value) & ((1U << 1) - 1);
21903 return *this;
21904 }
21905#ifdef NPU_DISASSEMBLE
21906 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21907 {
21908 fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
21909 fields.push_back(std::make_pair<std::string, std::string>(
21910 "region_mode",
21911 (region_mode < (sizeof(dma_region_mode_str) / sizeof(dma_region_mode_str[0])) ?
21912 dma_region_mode_str[region_mode] :
21913 "****")));
21914 fields.push_back(std::make_pair<std::string, std::string>(
21915 "stride_mode",
21916 (stride_mode < (sizeof(dma_stride_mode_str) / sizeof(dma_stride_mode_str[0])) ?
21917 dma_stride_mode_str[stride_mode] :
21918 "****")));
21919 fields.push_back(std::make_pair<std::string, std::string>(
21920 "custom_dma_cs",
21921 (custom_dma_cs < (sizeof(custom_dma_cs_str) / sizeof(custom_dma_cs_str[0])) ?
21922 custom_dma_cs_str[custom_dma_cs] :
21923 "****")));
21924 }
21925#endif
21926#endif
21927 };
21928 // Size of second dimension for 2D/3D transfers
21929 struct npu_set_dma0_size0_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021930 {
Jonny Svärd136810f2021-10-13 16:04:26 +020021931#ifdef __cplusplus
21932 private:
21933#endif
21934 uint32_t opcode : 10; // opcode
21935 uint32_t reserved0 : 4;
21936 uint32_t control : 2; // control
21937 uint32_t size : 16; // Size of second dimension for 2D/3D transfers
21938#ifdef __cplusplus
21939 public:
21940 npu_set_dma0_size0_t(uint32_t _size) :
21941 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010021942 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), size(_size & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020021943 {
21944 }
21945 CONSTEXPR npu_set_dma0_size0_t() :
21946 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0)), reserved0(0),
21947 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), size(0)
21948 {
21949 }
21950 CONSTEXPR bool valid() const
21951 {
21952 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0) &&
21953 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21954 }
21955 CONSTEXPR void init()
21956 {
21957 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE0);
21958 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
21959 }
21960 operator uint32_t()
21961 {
21962 uint32_t word;
21963 std::memcpy(&word, this, sizeof(word));
21964 return word;
21965 }
21966 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
21967 {
21968 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
21969 }
21970 CONSTEXPR npu_set_dma0_size0_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
21971 {
21972 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
21973 return *this;
21974 }
21975 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
21976 {
21977 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
21978 }
21979 CONSTEXPR npu_set_dma0_size0_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
21980 {
21981 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
21982 return *this;
21983 }
21984 CONSTEXPR uint32_t get_size() const
21985 {
21986 return static_cast<uint32_t>(size);
21987 }
21988 CONSTEXPR npu_set_dma0_size0_t &set_size(uint32_t value)
21989 {
21990 size = static_cast<uint16_t>(value) & ((1U << 16) - 1);
21991 return *this;
21992 }
21993#ifdef NPU_DISASSEMBLE
21994 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
21995 {
21996 fields.push_back(std::make_pair<std::string, std::string>("size", std::to_string(size)));
21997 }
21998#endif
21999#endif
22000 };
22001 // Size of third dimension for 3D transfers
22002 struct npu_set_dma0_size1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022003 {
Jonny Svärd136810f2021-10-13 16:04:26 +020022004#ifdef __cplusplus
22005 private:
22006#endif
22007 uint32_t opcode : 10; // opcode
22008 uint32_t reserved0 : 4;
22009 uint32_t control : 2; // control
22010 uint32_t size : 16; // Size of third dimension for 3D transfers
22011#ifdef __cplusplus
22012 public:
22013 npu_set_dma0_size1_t(uint32_t _size) :
22014 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022015 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), size(_size & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020022016 {
22017 }
22018 CONSTEXPR npu_set_dma0_size1_t() :
22019 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1)), reserved0(0),
22020 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), size(0)
22021 {
22022 }
22023 CONSTEXPR bool valid() const
22024 {
22025 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1) &&
22026 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22027 }
22028 CONSTEXPR void init()
22029 {
22030 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_DMA0_SIZE1);
22031 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22032 }
22033 operator uint32_t()
22034 {
22035 uint32_t word;
22036 std::memcpy(&word, this, sizeof(word));
22037 return word;
22038 }
22039 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22040 {
22041 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22042 }
22043 CONSTEXPR npu_set_dma0_size1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22044 {
22045 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22046 return *this;
22047 }
22048 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22049 {
22050 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22051 }
22052 CONSTEXPR npu_set_dma0_size1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22053 {
22054 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22055 return *this;
22056 }
22057 CONSTEXPR uint32_t get_size() const
22058 {
22059 return static_cast<uint32_t>(size);
22060 }
22061 CONSTEXPR npu_set_dma0_size1_t &set_size(uint32_t value)
22062 {
22063 size = static_cast<uint16_t>(value) & ((1U << 16) - 1);
22064 return *this;
22065 }
22066#ifdef NPU_DISASSEMBLE
22067 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22068 {
22069 fields.push_back(std::make_pair<std::string, std::string>("size", std::to_string(size)));
22070 }
22071#endif
22072#endif
22073 };
22074 // IFM2 broadcast configuration
22075 struct npu_set_ifm2_broadcast_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022076 {
Jonny Svärd136810f2021-10-13 16:04:26 +020022077#ifdef __cplusplus
22078 private:
22079#endif
22080 uint32_t opcode : 10; // opcode
22081 uint32_t reserved0 : 4;
22082 uint32_t control : 2; // control
22083 uint32_t
22084 broadcast_h : 1; // Broadcast H dimension (if set then any accesses to IFM2 sets y=0 and IFM2 height=1)
22085 uint32_t broadcast_w : 1; // Broadcast W dimension (if set then any accesses to IFM2 sets x=0 and IFM2 width=1)
22086 uint32_t broadcast_c : 1; // Broadcast C dimension (if set then any accesses to IFM2 sets c=0 and IFM2 depth=1)
22087 uint32_t reserved1 : 3;
22088 uint32_t operand_order : 1; // Operand order
22089 uint32_t broadcast_constant : 1; // Broadcast constant given by NPU_SET_IFM2_SCALAR and so ignore BH, BW and BC
22090 uint32_t reserved2 : 8;
22091#ifdef __cplusplus
22092 public:
22093 npu_set_ifm2_broadcast_t(NPU_NAMESPACE::broadcast_mode _broadcast_h,
22094 NPU_NAMESPACE::broadcast_mode _broadcast_w,
22095 NPU_NAMESPACE::broadcast_mode _broadcast_c,
22096 NPU_NAMESPACE::ifm2_operand_order _operand_order,
22097 NPU_NAMESPACE::broadcast_mode _broadcast_constant) :
22098 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST)),
22099 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
22100 broadcast_h(static_cast<uint8_t>(_broadcast_h) & ((1U << 1) - 1)),
22101 broadcast_w(static_cast<uint8_t>(_broadcast_w) & ((1U << 1) - 1)),
22102 broadcast_c(static_cast<uint8_t>(_broadcast_c) & ((1U << 1) - 1)), reserved1(0),
22103 operand_order(static_cast<uint8_t>(_operand_order) & ((1U << 1) - 1)),
22104 broadcast_constant(static_cast<uint8_t>(_broadcast_constant) & ((1U << 1) - 1)), reserved2(0)
22105 {
22106 }
22107 CONSTEXPR npu_set_ifm2_broadcast_t() :
22108 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST)), reserved0(0),
22109 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), broadcast_h(0), broadcast_w(0),
22110 broadcast_c(0), reserved1(0), operand_order(0), broadcast_constant(0), reserved2(0)
22111 {
22112 }
22113 CONSTEXPR bool valid() const
22114 {
22115 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST) &&
22116 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22117 }
22118 CONSTEXPR void init()
22119 {
22120 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_BROADCAST);
22121 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22122 }
22123 operator uint32_t()
22124 {
22125 uint32_t word;
22126 std::memcpy(&word, this, sizeof(word));
22127 return word;
22128 }
22129 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22130 {
22131 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22132 }
22133 CONSTEXPR npu_set_ifm2_broadcast_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22134 {
22135 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22136 return *this;
22137 }
22138 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22139 {
22140 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22141 }
22142 CONSTEXPR npu_set_ifm2_broadcast_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22143 {
22144 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22145 return *this;
22146 }
22147 CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_h() const
22148 {
22149 return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_h);
22150 }
22151 CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_h(NPU_NAMESPACE::broadcast_mode value)
22152 {
22153 broadcast_h = static_cast<uint8_t>(value) & ((1U << 1) - 1);
22154 return *this;
22155 }
22156 CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_w() const
22157 {
22158 return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_w);
22159 }
22160 CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_w(NPU_NAMESPACE::broadcast_mode value)
22161 {
22162 broadcast_w = static_cast<uint8_t>(value) & ((1U << 1) - 1);
22163 return *this;
22164 }
22165 CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_c() const
22166 {
22167 return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_c);
22168 }
22169 CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_c(NPU_NAMESPACE::broadcast_mode value)
22170 {
22171 broadcast_c = static_cast<uint8_t>(value) & ((1U << 1) - 1);
22172 return *this;
22173 }
22174 CONSTEXPR NPU_NAMESPACE::ifm2_operand_order get_operand_order() const
22175 {
22176 return static_cast<NPU_NAMESPACE::ifm2_operand_order>(operand_order);
22177 }
22178 CONSTEXPR npu_set_ifm2_broadcast_t &set_operand_order(NPU_NAMESPACE::ifm2_operand_order value)
22179 {
22180 operand_order = static_cast<uint8_t>(value) & ((1U << 1) - 1);
22181 return *this;
22182 }
22183 CONSTEXPR NPU_NAMESPACE::broadcast_mode get_broadcast_constant() const
22184 {
22185 return static_cast<NPU_NAMESPACE::broadcast_mode>(broadcast_constant);
22186 }
22187 CONSTEXPR npu_set_ifm2_broadcast_t &set_broadcast_constant(NPU_NAMESPACE::broadcast_mode value)
22188 {
22189 broadcast_constant = static_cast<uint8_t>(value) & ((1U << 1) - 1);
22190 return *this;
22191 }
22192#ifdef NPU_DISASSEMBLE
22193 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22194 {
22195 fields.push_back(std::make_pair<std::string, std::string>(
22196 "broadcast_h",
22197 (broadcast_h < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
22198 broadcast_mode_str[broadcast_h] :
22199 "****")));
22200 fields.push_back(std::make_pair<std::string, std::string>(
22201 "broadcast_w",
22202 (broadcast_w < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
22203 broadcast_mode_str[broadcast_w] :
22204 "****")));
22205 fields.push_back(std::make_pair<std::string, std::string>(
22206 "broadcast_c",
22207 (broadcast_c < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
22208 broadcast_mode_str[broadcast_c] :
22209 "****")));
22210 fields.push_back(std::make_pair<std::string, std::string>(
22211 "operand_order",
22212 (operand_order < (sizeof(ifm2_operand_order_str) / sizeof(ifm2_operand_order_str[0])) ?
22213 ifm2_operand_order_str[operand_order] :
22214 "****")));
22215 fields.push_back(std::make_pair<std::string, std::string>(
22216 "broadcast_constant",
22217 (broadcast_constant < (sizeof(broadcast_mode_str) / sizeof(broadcast_mode_str[0])) ?
22218 broadcast_mode_str[broadcast_constant] :
22219 "****")));
22220 }
22221#endif
22222#endif
22223 };
22224 // IFM2 scalar value
22225 struct npu_set_ifm2_scalar_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022226 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022227#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022228 private:
22229#endif
22230 uint32_t opcode : 10; // opcode
22231 uint32_t reserved0 : 4;
22232 uint32_t control : 2; // control
22233 uint32_t scalar : 16; // int16 or uint16 depending on ifm2_precision.type
22234#ifdef __cplusplus
22235 public:
22236 npu_set_ifm2_scalar_t(uint32_t _scalar) :
22237 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022238 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), scalar(_scalar & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020022239 {
22240 }
22241 CONSTEXPR npu_set_ifm2_scalar_t() :
22242 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR)), reserved0(0),
22243 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), scalar(0)
22244 {
22245 }
22246 CONSTEXPR bool valid() const
22247 {
22248 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR) &&
22249 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22250 }
22251 CONSTEXPR void init()
22252 {
22253 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_SCALAR);
22254 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22255 }
22256 operator uint32_t()
22257 {
22258 uint32_t word;
22259 std::memcpy(&word, this, sizeof(word));
22260 return word;
22261 }
22262 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22263 {
22264 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22265 }
22266 CONSTEXPR npu_set_ifm2_scalar_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22267 {
22268 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22269 return *this;
22270 }
22271 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22272 {
22273 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22274 }
22275 CONSTEXPR npu_set_ifm2_scalar_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22276 {
22277 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22278 return *this;
22279 }
22280 CONSTEXPR uint32_t get_scalar() const
22281 {
22282 return static_cast<uint32_t>(scalar);
22283 }
22284 CONSTEXPR npu_set_ifm2_scalar_t &set_scalar(uint32_t value)
22285 {
22286 scalar = static_cast<uint16_t>(value) & ((1U << 16) - 1);
22287 return *this;
22288 }
22289#ifdef NPU_DISASSEMBLE
22290 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22291 {
22292 fields.push_back(std::make_pair<std::string, std::string>("scalar", std::to_string(scalar)));
22293 }
22294#endif
22295#endif
22296 };
22297 // IFM2 Precision
22298 struct npu_set_ifm2_precision_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022299 {
Jonny Svärd136810f2021-10-13 16:04:26 +020022300#ifdef __cplusplus
22301 private:
22302#endif
22303 uint32_t opcode : 10; // opcode
22304 uint32_t reserved0 : 4;
22305 uint32_t control : 2; // control
22306 uint32_t activation_type : 1; // IFM type - MUST MATCH IFM
22307 uint32_t reserved1 : 1;
22308 uint32_t activation_precision : 2; // IFM precision - MUST MATCH IFM
22309 uint32_t reserved2 : 2;
22310 uint32_t activation_format : 2; // IFM format
22311 uint32_t reserved3 : 8;
22312#ifdef __cplusplus
22313 public:
22314 npu_set_ifm2_precision_t(NPU_NAMESPACE::activation_type _activation_type,
22315 NPU_NAMESPACE::activation_precision _activation_precision,
22316 NPU_NAMESPACE::activation_format _activation_format) :
22317 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION)),
22318 reserved0(0), control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
22319 activation_type(static_cast<uint8_t>(_activation_type) & ((1U << 1) - 1)), reserved1(0),
22320 activation_precision(static_cast<uint8_t>(_activation_precision) & ((1U << 2) - 1)), reserved2(0),
22321 activation_format(static_cast<uint8_t>(_activation_format) & ((1U << 2) - 1)), reserved3(0)
22322 {
22323 }
22324 CONSTEXPR npu_set_ifm2_precision_t() :
22325 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION)), reserved0(0),
22326 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), activation_type(0), reserved1(0),
22327 activation_precision(0), reserved2(0), activation_format(0), reserved3(0)
22328 {
22329 }
22330 CONSTEXPR bool valid() const
22331 {
22332 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION) &&
22333 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22334 }
22335 CONSTEXPR void init()
22336 {
22337 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_PRECISION);
22338 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22339 }
22340 operator uint32_t()
22341 {
22342 uint32_t word;
22343 std::memcpy(&word, this, sizeof(word));
22344 return word;
22345 }
22346 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22347 {
22348 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22349 }
22350 CONSTEXPR npu_set_ifm2_precision_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22351 {
22352 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22353 return *this;
22354 }
22355 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22356 {
22357 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22358 }
22359 CONSTEXPR npu_set_ifm2_precision_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22360 {
22361 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22362 return *this;
22363 }
22364 CONSTEXPR NPU_NAMESPACE::activation_type get_activation_type() const
22365 {
22366 return static_cast<NPU_NAMESPACE::activation_type>(activation_type);
22367 }
22368 CONSTEXPR npu_set_ifm2_precision_t &set_activation_type(NPU_NAMESPACE::activation_type value)
22369 {
22370 activation_type = static_cast<uint8_t>(value) & ((1U << 1) - 1);
22371 return *this;
22372 }
22373 CONSTEXPR NPU_NAMESPACE::activation_precision get_activation_precision() const
22374 {
22375 return static_cast<NPU_NAMESPACE::activation_precision>(activation_precision);
22376 }
22377 CONSTEXPR npu_set_ifm2_precision_t &set_activation_precision(NPU_NAMESPACE::activation_precision value)
22378 {
22379 activation_precision = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22380 return *this;
22381 }
22382 CONSTEXPR NPU_NAMESPACE::activation_format get_activation_format() const
22383 {
22384 return static_cast<NPU_NAMESPACE::activation_format>(activation_format);
22385 }
22386 CONSTEXPR npu_set_ifm2_precision_t &set_activation_format(NPU_NAMESPACE::activation_format value)
22387 {
22388 activation_format = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22389 return *this;
22390 }
22391#ifdef NPU_DISASSEMBLE
22392 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22393 {
22394 fields.push_back(std::make_pair<std::string, std::string>(
22395 "activation_type",
22396 (activation_type < (sizeof(activation_type_str) / sizeof(activation_type_str[0])) ?
22397 activation_type_str[activation_type] :
22398 "****")));
22399 fields.push_back(std::make_pair<std::string, std::string>(
22400 "activation_precision",
22401 (activation_precision < (sizeof(activation_precision_str) / sizeof(activation_precision_str[0])) ?
22402 activation_precision_str[activation_precision] :
22403 "****")));
22404 fields.push_back(std::make_pair<std::string, std::string>(
22405 "activation_format",
22406 (activation_format < (sizeof(activation_format_str) / sizeof(activation_format_str[0])) ?
22407 activation_format_str[activation_format] :
22408 "****")));
22409 }
22410#endif
22411#endif
22412 };
22413 // IFM2 zero point
22414 struct npu_set_ifm2_zero_point_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022415 {
Jonny Svärd136810f2021-10-13 16:04:26 +020022416#ifdef __cplusplus
22417 private:
22418#endif
22419 uint32_t opcode : 10; // opcode
22420 uint32_t reserved0 : 4;
22421 uint32_t control : 2; // control
22422 uint32_t zero_point : 16; // Zero point offset
22423#ifdef __cplusplus
22424 public:
22425 npu_set_ifm2_zero_point_t(uint32_t _zero_point) :
22426 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT)), reserved0(0),
22427 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022428 zero_point(_zero_point & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020022429 {
22430 }
22431 CONSTEXPR npu_set_ifm2_zero_point_t() :
22432 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT)), reserved0(0),
22433 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), zero_point(0)
22434 {
22435 }
22436 CONSTEXPR bool valid() const
22437 {
22438 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT) &&
22439 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22440 }
22441 CONSTEXPR void init()
22442 {
22443 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_ZERO_POINT);
22444 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22445 }
22446 operator uint32_t()
22447 {
22448 uint32_t word;
22449 std::memcpy(&word, this, sizeof(word));
22450 return word;
22451 }
22452 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22453 {
22454 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22455 }
22456 CONSTEXPR npu_set_ifm2_zero_point_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22457 {
22458 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22459 return *this;
22460 }
22461 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22462 {
22463 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22464 }
22465 CONSTEXPR npu_set_ifm2_zero_point_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22466 {
22467 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22468 return *this;
22469 }
22470 CONSTEXPR uint32_t get_zero_point() const
22471 {
22472 return static_cast<uint32_t>(zero_point);
22473 }
22474 CONSTEXPR npu_set_ifm2_zero_point_t &set_zero_point(uint32_t value)
22475 {
22476 zero_point = static_cast<uint16_t>(value) & ((1U << 16) - 1);
22477 return *this;
22478 }
22479#ifdef NPU_DISASSEMBLE
22480 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22481 {
22482 fields.push_back(std::make_pair<std::string, std::string>("zero_point", std::to_string(zero_point)));
22483 }
22484#endif
22485#endif
22486 };
22487 // IFM2 Tile 0 and tile 2 width
22488 struct npu_set_ifm2_width0_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022489 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022490#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022491 private:
22492#endif
22493 uint32_t opcode : 10; // opcode
22494 uint32_t reserved0 : 4;
22495 uint32_t control : 2; // control
22496 uint32_t width_m1 : 16; // IFM2 Tile 0 and tile 2 width
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022497#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022498 public:
22499 npu_set_ifm2_width0_m1_t(uint32_t _width_m1) :
22500 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022501 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(_width_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020022502 {
22503 }
22504 CONSTEXPR npu_set_ifm2_width0_m1_t() :
22505 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1)), reserved0(0),
22506 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), width_m1(0)
22507 {
22508 }
22509 CONSTEXPR bool valid() const
22510 {
22511 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1) &&
22512 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22513 }
22514 CONSTEXPR void init()
22515 {
22516 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_WIDTH0_M1);
22517 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22518 }
22519 operator uint32_t()
22520 {
22521 uint32_t word;
22522 std::memcpy(&word, this, sizeof(word));
22523 return word;
22524 }
22525 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22526 {
22527 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22528 }
22529 CONSTEXPR npu_set_ifm2_width0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22530 {
22531 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22532 return *this;
22533 }
22534 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22535 {
22536 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22537 }
22538 CONSTEXPR npu_set_ifm2_width0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22539 {
22540 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22541 return *this;
22542 }
22543 CONSTEXPR uint32_t get_width_m1() const
22544 {
22545 return static_cast<uint32_t>(width_m1);
22546 }
22547 CONSTEXPR npu_set_ifm2_width0_m1_t &set_width_m1(uint32_t value)
22548 {
22549 width_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
22550 return *this;
22551 }
22552#ifdef NPU_DISASSEMBLE
22553 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22554 {
22555 fields.push_back(std::make_pair<std::string, std::string>("width_m1", std::to_string(width_m1)));
22556 }
22557#endif
22558#endif
22559 };
22560 // IFM2 Tile 0 height
22561 struct npu_set_ifm2_height0_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022562 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022563#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022564 private:
22565#endif
22566 uint32_t opcode : 10; // opcode
22567 uint32_t reserved0 : 4;
22568 uint32_t control : 2; // control
22569 uint32_t height_m1 : 16; // IFM2 Tile 0 height
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022570#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022571 public:
22572 npu_set_ifm2_height0_m1_t(uint32_t _height_m1) :
22573 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022574 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020022575 {
22576 }
22577 CONSTEXPR npu_set_ifm2_height0_m1_t() :
22578 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1)), reserved0(0),
22579 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
22580 {
22581 }
22582 CONSTEXPR bool valid() const
22583 {
22584 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1) &&
22585 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22586 }
22587 CONSTEXPR void init()
22588 {
22589 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT0_M1);
22590 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22591 }
22592 operator uint32_t()
22593 {
22594 uint32_t word;
22595 std::memcpy(&word, this, sizeof(word));
22596 return word;
22597 }
22598 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22599 {
22600 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22601 }
22602 CONSTEXPR npu_set_ifm2_height0_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22603 {
22604 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22605 return *this;
22606 }
22607 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22608 {
22609 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22610 }
22611 CONSTEXPR npu_set_ifm2_height0_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22612 {
22613 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22614 return *this;
22615 }
22616 CONSTEXPR uint32_t get_height_m1() const
22617 {
22618 return static_cast<uint32_t>(height_m1);
22619 }
22620 CONSTEXPR npu_set_ifm2_height0_m1_t &set_height_m1(uint32_t value)
22621 {
22622 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
22623 return *this;
22624 }
22625#ifdef NPU_DISASSEMBLE
22626 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22627 {
22628 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
22629 }
22630#endif
22631#endif
22632 };
22633 // IFM2 Tile 1 height
22634 struct npu_set_ifm2_height1_m1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022635 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022636#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022637 private:
22638#endif
22639 uint32_t opcode : 10; // opcode
22640 uint32_t reserved0 : 4;
22641 uint32_t control : 2; // control
22642 uint32_t height_m1 : 16; // IFM2 Tile 1 height
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022643#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022644 public:
22645 npu_set_ifm2_height1_m1_t(uint32_t _height_m1) :
22646 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022647 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(_height_m1 & ((1U << 16) - 1))
Jonny Svärd136810f2021-10-13 16:04:26 +020022648 {
22649 }
22650 CONSTEXPR npu_set_ifm2_height1_m1_t() :
22651 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1)), reserved0(0),
22652 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), height_m1(0)
22653 {
22654 }
22655 CONSTEXPR bool valid() const
22656 {
22657 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1) &&
22658 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22659 }
22660 CONSTEXPR void init()
22661 {
22662 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_HEIGHT1_M1);
22663 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22664 }
22665 operator uint32_t()
22666 {
22667 uint32_t word;
22668 std::memcpy(&word, this, sizeof(word));
22669 return word;
22670 }
22671 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22672 {
22673 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22674 }
22675 CONSTEXPR npu_set_ifm2_height1_m1_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22676 {
22677 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22678 return *this;
22679 }
22680 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22681 {
22682 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22683 }
22684 CONSTEXPR npu_set_ifm2_height1_m1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22685 {
22686 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22687 return *this;
22688 }
22689 CONSTEXPR uint32_t get_height_m1() const
22690 {
22691 return static_cast<uint32_t>(height_m1);
22692 }
22693 CONSTEXPR npu_set_ifm2_height1_m1_t &set_height_m1(uint32_t value)
22694 {
22695 height_m1 = static_cast<uint16_t>(value) & ((1U << 16) - 1);
22696 return *this;
22697 }
22698#ifdef NPU_DISASSEMBLE
22699 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22700 {
22701 fields.push_back(std::make_pair<std::string, std::string>("height_m1", std::to_string(height_m1)));
22702 }
22703#endif
22704#endif
22705 };
22706 // Start of IB0,IB1 buffers for IFM2
22707 struct npu_set_ifm2_ib_start_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022708 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022709#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022710 private:
22711#endif
22712 uint32_t opcode : 10; // opcode
22713 uint32_t reserved0 : 4;
22714 uint32_t control : 2; // control
22715 uint32_t ib_start : 6; // Start of IB0,IB1 buffers for IFM2 in the SHRAM in KB units. Multiple of 2
22716 uint32_t reserved1 : 10;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022717#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022718 public:
22719 npu_set_ifm2_ib_start_t(uint32_t _ib_start) :
22720 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022721 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ib_start(_ib_start & ((1U << 6) - 1)),
22722 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020022723 {
22724 }
22725 CONSTEXPR npu_set_ifm2_ib_start_t() :
22726 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START)), reserved0(0),
22727 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), ib_start(0), reserved1(0)
22728 {
22729 }
22730 CONSTEXPR bool valid() const
22731 {
22732 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START) &&
22733 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22734 }
22735 CONSTEXPR void init()
22736 {
22737 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_IB_START);
22738 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22739 }
22740 operator uint32_t()
22741 {
22742 uint32_t word;
22743 std::memcpy(&word, this, sizeof(word));
22744 return word;
22745 }
22746 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22747 {
22748 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22749 }
22750 CONSTEXPR npu_set_ifm2_ib_start_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22751 {
22752 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22753 return *this;
22754 }
22755 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22756 {
22757 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22758 }
22759 CONSTEXPR npu_set_ifm2_ib_start_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22760 {
22761 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22762 return *this;
22763 }
22764 CONSTEXPR uint32_t get_ib_start() const
22765 {
22766 return static_cast<uint32_t>(ib_start);
22767 }
22768 CONSTEXPR npu_set_ifm2_ib_start_t &set_ib_start(uint32_t value)
22769 {
22770 ib_start = static_cast<uint8_t>(value) & ((1U << 6) - 1);
22771 return *this;
22772 }
22773#ifdef NPU_DISASSEMBLE
22774 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22775 {
22776 fields.push_back(std::make_pair<std::string, std::string>("ib_start", std::to_string(ib_start)));
22777 }
22778#endif
22779#endif
22780 };
22781 // Index n for IFM2 access
22782 struct npu_set_ifm2_region_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022783 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022784#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022785 private:
22786#endif
22787 uint32_t opcode : 10; // opcode
22788 uint32_t reserved0 : 4;
22789 uint32_t control : 2; // control
22790 uint32_t region : 3; // Index n for IFM2 access
22791 uint32_t reserved1 : 13;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022792#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022793 public:
22794 npu_set_ifm2_region_t(uint32_t _region) :
22795 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022796 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(_region & ((1U << 3) - 1)),
22797 reserved1(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020022798 {
22799 }
22800 CONSTEXPR npu_set_ifm2_region_t() :
22801 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION)), reserved0(0),
22802 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL)), region(0), reserved1(0)
22803 {
22804 }
22805 CONSTEXPR bool valid() const
22806 {
22807 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION) &&
22808 control == static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22809 }
22810 CONSTEXPR void init()
22811 {
22812 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd0_opcode::NPU_SET_IFM2_REGION);
22813 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD0_CTRL);
22814 }
22815 operator uint32_t()
22816 {
22817 uint32_t word;
22818 std::memcpy(&word, this, sizeof(word));
22819 return word;
22820 }
22821 CONSTEXPR NPU_NAMESPACE::cmd0_opcode get_opcode() const
22822 {
22823 return static_cast<NPU_NAMESPACE::cmd0_opcode>(opcode);
22824 }
22825 CONSTEXPR npu_set_ifm2_region_t &set_opcode(NPU_NAMESPACE::cmd0_opcode value)
22826 {
22827 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22828 return *this;
22829 }
22830 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22831 {
22832 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22833 }
22834 CONSTEXPR npu_set_ifm2_region_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22835 {
22836 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22837 return *this;
22838 }
22839 CONSTEXPR uint32_t get_region() const
22840 {
22841 return static_cast<uint32_t>(region);
22842 }
22843 CONSTEXPR npu_set_ifm2_region_t &set_region(uint32_t value)
22844 {
22845 region = static_cast<uint8_t>(value) & ((1U << 3) - 1);
22846 return *this;
22847 }
22848#ifdef NPU_DISASSEMBLE
22849 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22850 {
22851 fields.push_back(std::make_pair<std::string, std::string>("region", std::to_string(region)));
22852 }
22853#endif
22854#endif
22855 };
22856 // IFM Tile 0 address
22857 struct npu_set_ifm_base0_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022858 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022859#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022860 private:
22861#endif
22862 uint32_t opcode : 10; // opcode
22863 uint32_t reserved0 : 4;
22864 uint32_t control : 2; // control
22865 uint32_t reserved1 : 16;
22866 uint32_t addr : 32; // address offset
22867#ifdef __cplusplus
22868 public:
22869 npu_set_ifm_base0_t(uint32_t _addr) :
22870 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022871 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020022872 {
22873 }
22874 CONSTEXPR npu_set_ifm_base0_t() :
22875 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0)), reserved0(0),
22876 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
22877 {
22878 }
22879 CONSTEXPR bool valid() const
22880 {
22881 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0) && control >= 1 &&
22882 control <= 2;
22883 }
22884 CONSTEXPR void init()
22885 {
22886 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE0);
22887 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22888 }
22889 operator uint64_t()
22890 {
22891 uint64_t word;
22892 std::memcpy(&word, this, sizeof(word));
22893 return word;
22894 }
22895 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
22896 {
22897 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
22898 }
22899 CONSTEXPR npu_set_ifm_base0_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
22900 {
22901 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22902 return *this;
22903 }
22904 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22905 {
22906 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22907 }
22908 CONSTEXPR npu_set_ifm_base0_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22909 {
22910 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22911 return *this;
22912 }
22913 CONSTEXPR uint32_t get_addr() const
22914 {
22915 return static_cast<uint32_t>(addr);
22916 }
22917 CONSTEXPR npu_set_ifm_base0_t &set_addr(uint32_t value)
22918 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010022919 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020022920 return *this;
22921 }
22922#ifdef NPU_DISASSEMBLE
22923 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
22924 {
22925 std::stringstream saddr;
22926 saddr << std::hex << "0x" << get_addr();
22927 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
22928 }
22929#endif
22930#endif
22931 };
22932 // IFM Tile 1 address
22933 struct npu_set_ifm_base1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022934 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022935#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022936 private:
22937#endif
22938 uint32_t opcode : 10; // opcode
22939 uint32_t reserved0 : 4;
22940 uint32_t control : 2; // control
22941 uint32_t reserved1 : 16;
22942 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020022943#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020022944 public:
22945 npu_set_ifm_base1_t(uint32_t _addr) :
22946 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010022947 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020022948 {
22949 }
22950 CONSTEXPR npu_set_ifm_base1_t() :
22951 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1)), reserved0(0),
22952 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
22953 {
22954 }
22955 CONSTEXPR bool valid() const
22956 {
22957 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1) && control >= 1 &&
22958 control <= 2;
22959 }
22960 CONSTEXPR void init()
22961 {
22962 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE1);
22963 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
22964 }
22965 operator uint64_t()
22966 {
22967 uint64_t word;
22968 std::memcpy(&word, this, sizeof(word));
22969 return word;
22970 }
22971 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
22972 {
22973 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
22974 }
22975 CONSTEXPR npu_set_ifm_base1_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
22976 {
22977 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
22978 return *this;
22979 }
22980 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
22981 {
22982 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
22983 }
22984 CONSTEXPR npu_set_ifm_base1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
22985 {
22986 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
22987 return *this;
22988 }
22989 CONSTEXPR uint32_t get_addr() const
22990 {
22991 return static_cast<uint32_t>(addr);
22992 }
22993 CONSTEXPR npu_set_ifm_base1_t &set_addr(uint32_t value)
22994 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010022995 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020022996 return *this;
22997 }
22998#ifdef NPU_DISASSEMBLE
22999 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23000 {
23001 std::stringstream saddr;
23002 saddr << std::hex << "0x" << get_addr();
23003 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23004 }
23005#endif
23006#endif
23007 };
23008 // IFM Tile 2 address
23009 struct npu_set_ifm_base2_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023010 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023011#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023012 private:
23013#endif
23014 uint32_t opcode : 10; // opcode
23015 uint32_t reserved0 : 4;
23016 uint32_t control : 2; // control
23017 uint32_t reserved1 : 16;
23018 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023019#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023020 public:
23021 npu_set_ifm_base2_t(uint32_t _addr) :
23022 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023023 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023024 {
23025 }
23026 CONSTEXPR npu_set_ifm_base2_t() :
23027 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2)), reserved0(0),
23028 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23029 {
23030 }
23031 CONSTEXPR bool valid() const
23032 {
23033 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2) && control >= 1 &&
23034 control <= 2;
23035 }
23036 CONSTEXPR void init()
23037 {
23038 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE2);
23039 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23040 }
23041 operator uint64_t()
23042 {
23043 uint64_t word;
23044 std::memcpy(&word, this, sizeof(word));
23045 return word;
23046 }
23047 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23048 {
23049 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23050 }
23051 CONSTEXPR npu_set_ifm_base2_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23052 {
23053 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23054 return *this;
23055 }
23056 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23057 {
23058 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23059 }
23060 CONSTEXPR npu_set_ifm_base2_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23061 {
23062 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23063 return *this;
23064 }
23065 CONSTEXPR uint32_t get_addr() const
23066 {
23067 return static_cast<uint32_t>(addr);
23068 }
23069 CONSTEXPR npu_set_ifm_base2_t &set_addr(uint32_t value)
23070 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023071 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023072 return *this;
23073 }
23074#ifdef NPU_DISASSEMBLE
23075 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23076 {
23077 std::stringstream saddr;
23078 saddr << std::hex << "0x" << get_addr();
23079 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23080 }
23081#endif
23082#endif
23083 };
23084 // IFM Tile 3 address
23085 struct npu_set_ifm_base3_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023086 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023087#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023088 private:
23089#endif
23090 uint32_t opcode : 10; // opcode
23091 uint32_t reserved0 : 4;
23092 uint32_t control : 2; // control
23093 uint32_t reserved1 : 16;
23094 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023095#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023096 public:
23097 npu_set_ifm_base3_t(uint32_t _addr) :
23098 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023099 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023100 {
23101 }
23102 CONSTEXPR npu_set_ifm_base3_t() :
23103 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3)), reserved0(0),
23104 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23105 {
23106 }
23107 CONSTEXPR bool valid() const
23108 {
23109 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3) && control >= 1 &&
23110 control <= 2;
23111 }
23112 CONSTEXPR void init()
23113 {
23114 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_BASE3);
23115 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23116 }
23117 operator uint64_t()
23118 {
23119 uint64_t word;
23120 std::memcpy(&word, this, sizeof(word));
23121 return word;
23122 }
23123 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23124 {
23125 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23126 }
23127 CONSTEXPR npu_set_ifm_base3_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23128 {
23129 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23130 return *this;
23131 }
23132 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23133 {
23134 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23135 }
23136 CONSTEXPR npu_set_ifm_base3_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23137 {
23138 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23139 return *this;
23140 }
23141 CONSTEXPR uint32_t get_addr() const
23142 {
23143 return static_cast<uint32_t>(addr);
23144 }
23145 CONSTEXPR npu_set_ifm_base3_t &set_addr(uint32_t value)
23146 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023147 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023148 return *this;
23149 }
23150#ifdef NPU_DISASSEMBLE
23151 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23152 {
23153 std::stringstream saddr;
23154 saddr << std::hex << "0x" << get_addr();
23155 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23156 }
23157#endif
23158#endif
23159 };
23160 // IFM byte stride between horizontal values
23161 struct npu_set_ifm_stride_x_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023162 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023163#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023164 private:
23165#endif
23166 uint32_t opcode : 10; // opcode
23167 uint32_t reserved0 : 4;
23168 uint32_t control : 2; // control
23169 uint32_t reserved1 : 16;
23170 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023171#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023172 public:
23173 npu_set_ifm_stride_x_t(uint32_t _addr) :
23174 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023175 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023176 {
23177 }
23178 CONSTEXPR npu_set_ifm_stride_x_t() :
23179 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X)), reserved0(0),
23180 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23181 {
23182 }
23183 CONSTEXPR bool valid() const
23184 {
23185 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X) && control >= 1 &&
23186 control <= 2;
23187 }
23188 CONSTEXPR void init()
23189 {
23190 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_X);
23191 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23192 }
23193 operator uint64_t()
23194 {
23195 uint64_t word;
23196 std::memcpy(&word, this, sizeof(word));
23197 return word;
23198 }
23199 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23200 {
23201 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23202 }
23203 CONSTEXPR npu_set_ifm_stride_x_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23204 {
23205 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23206 return *this;
23207 }
23208 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23209 {
23210 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23211 }
23212 CONSTEXPR npu_set_ifm_stride_x_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23213 {
23214 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23215 return *this;
23216 }
23217 CONSTEXPR uint32_t get_addr() const
23218 {
23219 return static_cast<uint32_t>(addr);
23220 }
23221 CONSTEXPR npu_set_ifm_stride_x_t &set_addr(uint32_t value)
23222 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023223 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023224 return *this;
23225 }
23226#ifdef NPU_DISASSEMBLE
23227 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23228 {
23229 std::stringstream saddr;
23230 saddr << std::hex << "0x" << get_addr();
23231 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23232 }
23233#endif
23234#endif
23235 };
23236 // IFM byte stride between vertical values
23237 struct npu_set_ifm_stride_y_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023238 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023239#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023240 private:
23241#endif
23242 uint32_t opcode : 10; // opcode
23243 uint32_t reserved0 : 4;
23244 uint32_t control : 2; // control
23245 uint32_t reserved1 : 16;
23246 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023247#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023248 public:
23249 npu_set_ifm_stride_y_t(uint32_t _addr) :
23250 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023251 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023252 {
23253 }
23254 CONSTEXPR npu_set_ifm_stride_y_t() :
23255 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y)), reserved0(0),
23256 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23257 {
23258 }
23259 CONSTEXPR bool valid() const
23260 {
23261 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y) && control >= 1 &&
23262 control <= 2;
23263 }
23264 CONSTEXPR void init()
23265 {
23266 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_Y);
23267 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23268 }
23269 operator uint64_t()
23270 {
23271 uint64_t word;
23272 std::memcpy(&word, this, sizeof(word));
23273 return word;
23274 }
23275 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23276 {
23277 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23278 }
23279 CONSTEXPR npu_set_ifm_stride_y_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23280 {
23281 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23282 return *this;
23283 }
23284 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23285 {
23286 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23287 }
23288 CONSTEXPR npu_set_ifm_stride_y_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23289 {
23290 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23291 return *this;
23292 }
23293 CONSTEXPR uint32_t get_addr() const
23294 {
23295 return static_cast<uint32_t>(addr);
23296 }
23297 CONSTEXPR npu_set_ifm_stride_y_t &set_addr(uint32_t value)
23298 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023299 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023300 return *this;
23301 }
23302#ifdef NPU_DISASSEMBLE
23303 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23304 {
23305 std::stringstream saddr;
23306 saddr << std::hex << "0x" << get_addr();
23307 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23308 }
23309#endif
23310#endif
23311 };
23312 // IFM byte stride between channel blocks (of 16 bytes each block)
23313 struct npu_set_ifm_stride_c_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023314 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023315#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023316 private:
23317#endif
23318 uint32_t opcode : 10; // opcode
23319 uint32_t reserved0 : 4;
23320 uint32_t control : 2; // control
23321 uint32_t reserved1 : 16;
23322 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023323#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023324 public:
23325 npu_set_ifm_stride_c_t(uint32_t _addr) :
23326 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023327 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023328 {
23329 }
23330 CONSTEXPR npu_set_ifm_stride_c_t() :
23331 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C)), reserved0(0),
23332 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23333 {
23334 }
23335 CONSTEXPR bool valid() const
23336 {
23337 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C) && control >= 1 &&
23338 control <= 2;
23339 }
23340 CONSTEXPR void init()
23341 {
23342 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM_STRIDE_C);
23343 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23344 }
23345 operator uint64_t()
23346 {
23347 uint64_t word;
23348 std::memcpy(&word, this, sizeof(word));
23349 return word;
23350 }
23351 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23352 {
23353 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23354 }
23355 CONSTEXPR npu_set_ifm_stride_c_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23356 {
23357 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23358 return *this;
23359 }
23360 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23361 {
23362 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23363 }
23364 CONSTEXPR npu_set_ifm_stride_c_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23365 {
23366 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23367 return *this;
23368 }
23369 CONSTEXPR uint32_t get_addr() const
23370 {
23371 return static_cast<uint32_t>(addr);
23372 }
23373 CONSTEXPR npu_set_ifm_stride_c_t &set_addr(uint32_t value)
23374 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023375 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023376 return *this;
23377 }
23378#ifdef NPU_DISASSEMBLE
23379 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23380 {
23381 std::stringstream saddr;
23382 saddr << std::hex << "0x" << get_addr();
23383 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23384 }
23385#endif
23386#endif
23387 };
23388 // OFM Tile 0 address
23389 struct npu_set_ofm_base0_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023390 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023391#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023392 private:
23393#endif
23394 uint32_t opcode : 10; // opcode
23395 uint32_t reserved0 : 4;
23396 uint32_t control : 2; // control
23397 uint32_t reserved1 : 16;
23398 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023399#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023400 public:
23401 npu_set_ofm_base0_t(uint32_t _addr) :
23402 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023403 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023404 {
23405 }
23406 CONSTEXPR npu_set_ofm_base0_t() :
23407 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0)), reserved0(0),
23408 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23409 {
23410 }
23411 CONSTEXPR bool valid() const
23412 {
23413 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0) && control >= 1 &&
23414 control <= 2;
23415 }
23416 CONSTEXPR void init()
23417 {
23418 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE0);
23419 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23420 }
23421 operator uint64_t()
23422 {
23423 uint64_t word;
23424 std::memcpy(&word, this, sizeof(word));
23425 return word;
23426 }
23427 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23428 {
23429 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23430 }
23431 CONSTEXPR npu_set_ofm_base0_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23432 {
23433 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23434 return *this;
23435 }
23436 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23437 {
23438 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23439 }
23440 CONSTEXPR npu_set_ofm_base0_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23441 {
23442 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23443 return *this;
23444 }
23445 CONSTEXPR uint32_t get_addr() const
23446 {
23447 return static_cast<uint32_t>(addr);
23448 }
23449 CONSTEXPR npu_set_ofm_base0_t &set_addr(uint32_t value)
23450 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023451 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023452 return *this;
23453 }
23454#ifdef NPU_DISASSEMBLE
23455 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23456 {
23457 std::stringstream saddr;
23458 saddr << std::hex << "0x" << get_addr();
23459 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23460 }
23461#endif
23462#endif
23463 };
23464 // OFM Tile 1 address
23465 struct npu_set_ofm_base1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023466 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023467#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023468 private:
23469#endif
23470 uint32_t opcode : 10; // opcode
23471 uint32_t reserved0 : 4;
23472 uint32_t control : 2; // control
23473 uint32_t reserved1 : 16;
23474 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023475#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023476 public:
23477 npu_set_ofm_base1_t(uint32_t _addr) :
23478 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023479 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023480 {
23481 }
23482 CONSTEXPR npu_set_ofm_base1_t() :
23483 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1)), reserved0(0),
23484 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23485 {
23486 }
23487 CONSTEXPR bool valid() const
23488 {
23489 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1) && control >= 1 &&
23490 control <= 2;
23491 }
23492 CONSTEXPR void init()
23493 {
23494 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE1);
23495 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23496 }
23497 operator uint64_t()
23498 {
23499 uint64_t word;
23500 std::memcpy(&word, this, sizeof(word));
23501 return word;
23502 }
23503 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23504 {
23505 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23506 }
23507 CONSTEXPR npu_set_ofm_base1_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23508 {
23509 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23510 return *this;
23511 }
23512 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23513 {
23514 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23515 }
23516 CONSTEXPR npu_set_ofm_base1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23517 {
23518 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23519 return *this;
23520 }
23521 CONSTEXPR uint32_t get_addr() const
23522 {
23523 return static_cast<uint32_t>(addr);
23524 }
23525 CONSTEXPR npu_set_ofm_base1_t &set_addr(uint32_t value)
23526 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023527 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023528 return *this;
23529 }
23530#ifdef NPU_DISASSEMBLE
23531 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23532 {
23533 std::stringstream saddr;
23534 saddr << std::hex << "0x" << get_addr();
23535 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23536 }
23537#endif
23538#endif
23539 };
23540 // OFM Tile 2 address
23541 struct npu_set_ofm_base2_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023542 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023543#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023544 private:
23545#endif
23546 uint32_t opcode : 10; // opcode
23547 uint32_t reserved0 : 4;
23548 uint32_t control : 2; // control
23549 uint32_t reserved1 : 16;
23550 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023551#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023552 public:
23553 npu_set_ofm_base2_t(uint32_t _addr) :
23554 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023555 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023556 {
23557 }
23558 CONSTEXPR npu_set_ofm_base2_t() :
23559 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2)), reserved0(0),
23560 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23561 {
23562 }
23563 CONSTEXPR bool valid() const
23564 {
23565 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2) && control >= 1 &&
23566 control <= 2;
23567 }
23568 CONSTEXPR void init()
23569 {
23570 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE2);
23571 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23572 }
23573 operator uint64_t()
23574 {
23575 uint64_t word;
23576 std::memcpy(&word, this, sizeof(word));
23577 return word;
23578 }
23579 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23580 {
23581 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23582 }
23583 CONSTEXPR npu_set_ofm_base2_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23584 {
23585 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23586 return *this;
23587 }
23588 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23589 {
23590 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23591 }
23592 CONSTEXPR npu_set_ofm_base2_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23593 {
23594 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23595 return *this;
23596 }
23597 CONSTEXPR uint32_t get_addr() const
23598 {
23599 return static_cast<uint32_t>(addr);
23600 }
23601 CONSTEXPR npu_set_ofm_base2_t &set_addr(uint32_t value)
23602 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023603 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023604 return *this;
23605 }
23606#ifdef NPU_DISASSEMBLE
23607 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23608 {
23609 std::stringstream saddr;
23610 saddr << std::hex << "0x" << get_addr();
23611 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23612 }
23613#endif
23614#endif
23615 };
23616 // OFM Tile 3 address
23617 struct npu_set_ofm_base3_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023618 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023619#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023620 private:
23621#endif
23622 uint32_t opcode : 10; // opcode
23623 uint32_t reserved0 : 4;
23624 uint32_t control : 2; // control
23625 uint32_t reserved1 : 16;
23626 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023627#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023628 public:
23629 npu_set_ofm_base3_t(uint32_t _addr) :
23630 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023631 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023632 {
23633 }
23634 CONSTEXPR npu_set_ofm_base3_t() :
23635 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3)), reserved0(0),
23636 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23637 {
23638 }
23639 CONSTEXPR bool valid() const
23640 {
23641 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3) && control >= 1 &&
23642 control <= 2;
23643 }
23644 CONSTEXPR void init()
23645 {
23646 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_BASE3);
23647 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23648 }
23649 operator uint64_t()
23650 {
23651 uint64_t word;
23652 std::memcpy(&word, this, sizeof(word));
23653 return word;
23654 }
23655 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23656 {
23657 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23658 }
23659 CONSTEXPR npu_set_ofm_base3_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23660 {
23661 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23662 return *this;
23663 }
23664 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23665 {
23666 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23667 }
23668 CONSTEXPR npu_set_ofm_base3_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23669 {
23670 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23671 return *this;
23672 }
23673 CONSTEXPR uint32_t get_addr() const
23674 {
23675 return static_cast<uint32_t>(addr);
23676 }
23677 CONSTEXPR npu_set_ofm_base3_t &set_addr(uint32_t value)
23678 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023679 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023680 return *this;
23681 }
23682#ifdef NPU_DISASSEMBLE
23683 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23684 {
23685 std::stringstream saddr;
23686 saddr << std::hex << "0x" << get_addr();
23687 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23688 }
23689#endif
23690#endif
23691 };
23692 // OFM byte stride between horizontal values
23693 struct npu_set_ofm_stride_x_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023694 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023695#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023696 private:
23697#endif
23698 uint32_t opcode : 10; // opcode
23699 uint32_t reserved0 : 4;
23700 uint32_t control : 2; // control
23701 uint32_t reserved1 : 16;
23702 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023703#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023704 public:
23705 npu_set_ofm_stride_x_t(uint32_t _addr) :
23706 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023707 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023708 {
23709 }
23710 CONSTEXPR npu_set_ofm_stride_x_t() :
23711 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X)), reserved0(0),
23712 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23713 {
23714 }
23715 CONSTEXPR bool valid() const
23716 {
23717 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X) && control >= 1 &&
23718 control <= 2;
23719 }
23720 CONSTEXPR void init()
23721 {
23722 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_X);
23723 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23724 }
23725 operator uint64_t()
23726 {
23727 uint64_t word;
23728 std::memcpy(&word, this, sizeof(word));
23729 return word;
23730 }
23731 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23732 {
23733 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23734 }
23735 CONSTEXPR npu_set_ofm_stride_x_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23736 {
23737 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23738 return *this;
23739 }
23740 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23741 {
23742 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23743 }
23744 CONSTEXPR npu_set_ofm_stride_x_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23745 {
23746 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23747 return *this;
23748 }
23749 CONSTEXPR uint32_t get_addr() const
23750 {
23751 return static_cast<uint32_t>(addr);
23752 }
23753 CONSTEXPR npu_set_ofm_stride_x_t &set_addr(uint32_t value)
23754 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023755 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023756 return *this;
23757 }
23758#ifdef NPU_DISASSEMBLE
23759 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23760 {
23761 std::stringstream saddr;
23762 saddr << std::hex << "0x" << get_addr();
23763 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23764 }
23765#endif
23766#endif
23767 };
23768 // OFM byte stride between vertical values
23769 struct npu_set_ofm_stride_y_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023770 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023771#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023772 private:
23773#endif
23774 uint32_t opcode : 10; // opcode
23775 uint32_t reserved0 : 4;
23776 uint32_t control : 2; // control
23777 uint32_t reserved1 : 16;
23778 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023779#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023780 public:
23781 npu_set_ofm_stride_y_t(uint32_t _addr) :
23782 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023783 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023784 {
23785 }
23786 CONSTEXPR npu_set_ofm_stride_y_t() :
23787 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y)), reserved0(0),
23788 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23789 {
23790 }
23791 CONSTEXPR bool valid() const
23792 {
23793 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y) && control >= 1 &&
23794 control <= 2;
23795 }
23796 CONSTEXPR void init()
23797 {
23798 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_Y);
23799 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23800 }
23801 operator uint64_t()
23802 {
23803 uint64_t word;
23804 std::memcpy(&word, this, sizeof(word));
23805 return word;
23806 }
23807 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23808 {
23809 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23810 }
23811 CONSTEXPR npu_set_ofm_stride_y_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23812 {
23813 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23814 return *this;
23815 }
23816 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23817 {
23818 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23819 }
23820 CONSTEXPR npu_set_ofm_stride_y_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23821 {
23822 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23823 return *this;
23824 }
23825 CONSTEXPR uint32_t get_addr() const
23826 {
23827 return static_cast<uint32_t>(addr);
23828 }
23829 CONSTEXPR npu_set_ofm_stride_y_t &set_addr(uint32_t value)
23830 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023831 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023832 return *this;
23833 }
23834#ifdef NPU_DISASSEMBLE
23835 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23836 {
23837 std::stringstream saddr;
23838 saddr << std::hex << "0x" << get_addr();
23839 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23840 }
23841#endif
23842#endif
23843 };
23844 // OFM byte stride between channel blocks (of 16 bytes each block)
23845 struct npu_set_ofm_stride_c_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023846 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023847#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023848 private:
23849#endif
23850 uint32_t opcode : 10; // opcode
23851 uint32_t reserved0 : 4;
23852 uint32_t control : 2; // control
23853 uint32_t reserved1 : 16;
23854 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023855#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023856 public:
23857 npu_set_ofm_stride_c_t(uint32_t _addr) :
23858 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023859 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023860 {
23861 }
23862 CONSTEXPR npu_set_ofm_stride_c_t() :
23863 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C)), reserved0(0),
23864 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23865 {
23866 }
23867 CONSTEXPR bool valid() const
23868 {
23869 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C) && control >= 1 &&
23870 control <= 2;
23871 }
23872 CONSTEXPR void init()
23873 {
23874 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_STRIDE_C);
23875 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23876 }
23877 operator uint64_t()
23878 {
23879 uint64_t word;
23880 std::memcpy(&word, this, sizeof(word));
23881 return word;
23882 }
23883 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23884 {
23885 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23886 }
23887 CONSTEXPR npu_set_ofm_stride_c_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23888 {
23889 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23890 return *this;
23891 }
23892 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23893 {
23894 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23895 }
23896 CONSTEXPR npu_set_ofm_stride_c_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23897 {
23898 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23899 return *this;
23900 }
23901 CONSTEXPR uint32_t get_addr() const
23902 {
23903 return static_cast<uint32_t>(addr);
23904 }
23905 CONSTEXPR npu_set_ofm_stride_c_t &set_addr(uint32_t value)
23906 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023907 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023908 return *this;
23909 }
23910#ifdef NPU_DISASSEMBLE
23911 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23912 {
23913 std::stringstream saddr;
23914 saddr << std::hex << "0x" << get_addr();
23915 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23916 }
23917#endif
23918#endif
23919 };
23920 // Weight stream byte offset in WEIGHT_REGION
23921 struct npu_set_weight_base_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023922 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023923#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023924 private:
23925#endif
23926 uint32_t opcode : 10; // opcode
23927 uint32_t reserved0 : 4;
23928 uint32_t control : 2; // control
23929 uint32_t reserved1 : 16;
23930 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023931#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020023932 public:
23933 npu_set_weight_base_t(uint32_t _addr) :
23934 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010023935 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020023936 {
23937 }
23938 CONSTEXPR npu_set_weight_base_t() :
23939 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE)), reserved0(0),
23940 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
23941 {
23942 }
23943 CONSTEXPR bool valid() const
23944 {
23945 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE) && control >= 1 &&
23946 control <= 2;
23947 }
23948 CONSTEXPR void init()
23949 {
23950 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_BASE);
23951 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
23952 }
23953 operator uint64_t()
23954 {
23955 uint64_t word;
23956 std::memcpy(&word, this, sizeof(word));
23957 return word;
23958 }
23959 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
23960 {
23961 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
23962 }
23963 CONSTEXPR npu_set_weight_base_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
23964 {
23965 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
23966 return *this;
23967 }
23968 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
23969 {
23970 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
23971 }
23972 CONSTEXPR npu_set_weight_base_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
23973 {
23974 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
23975 return *this;
23976 }
23977 CONSTEXPR uint32_t get_addr() const
23978 {
23979 return static_cast<uint32_t>(addr);
23980 }
23981 CONSTEXPR npu_set_weight_base_t &set_addr(uint32_t value)
23982 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010023983 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020023984 return *this;
23985 }
23986#ifdef NPU_DISASSEMBLE
23987 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
23988 {
23989 std::stringstream saddr;
23990 saddr << std::hex << "0x" << get_addr();
23991 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
23992 }
23993#endif
23994#endif
23995 };
23996 // Weight stream byte length
23997 struct npu_set_weight_length_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023998 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020023999#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024000 private:
24001#endif
24002 uint32_t opcode : 10; // opcode
24003 uint32_t reserved0 : 4;
24004 uint32_t control : 2; // control
24005 uint32_t reserved1 : 16;
24006 uint32_t length : 32; // Weight stream byte length
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024007#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024008 public:
24009 npu_set_weight_length_t(uint32_t _length) :
24010 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024011 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), length(_length)
Jonny Svärd136810f2021-10-13 16:04:26 +020024012 {
24013 }
24014 CONSTEXPR npu_set_weight_length_t() :
24015 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH)), reserved0(0),
24016 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), length(0)
24017 {
24018 }
24019 CONSTEXPR bool valid() const
24020 {
24021 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH) && control >= 1 &&
24022 control <= 2;
24023 }
24024 CONSTEXPR void init()
24025 {
24026 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_WEIGHT_LENGTH);
24027 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24028 }
24029 operator uint64_t()
24030 {
24031 uint64_t word;
24032 std::memcpy(&word, this, sizeof(word));
24033 return word;
24034 }
24035 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24036 {
24037 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24038 }
24039 CONSTEXPR npu_set_weight_length_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24040 {
24041 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24042 return *this;
24043 }
24044 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24045 {
24046 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24047 }
24048 CONSTEXPR npu_set_weight_length_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24049 {
24050 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24051 return *this;
24052 }
24053 CONSTEXPR uint32_t get_length() const
24054 {
24055 return static_cast<uint32_t>(length);
24056 }
24057 CONSTEXPR npu_set_weight_length_t &set_length(uint32_t value)
24058 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024059 length = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024060 return *this;
24061 }
24062#ifdef NPU_DISASSEMBLE
24063 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24064 {
24065 fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
24066 }
24067#endif
24068#endif
24069 };
24070 // Scale and bias stream input byte offset from SCALE_REGION
24071 struct npu_set_scale_base_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024072 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024073#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024074 private:
24075#endif
24076 uint32_t opcode : 10; // opcode
24077 uint32_t reserved0 : 4;
24078 uint32_t control : 2; // control
24079 uint32_t reserved1 : 16;
24080 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024081#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024082 public:
24083 npu_set_scale_base_t(uint32_t _addr) :
24084 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024085 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024086 {
24087 }
24088 CONSTEXPR npu_set_scale_base_t() :
24089 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE)), reserved0(0),
24090 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24091 {
24092 }
24093 CONSTEXPR bool valid() const
24094 {
24095 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE) && control >= 1 &&
24096 control <= 2;
24097 }
24098 CONSTEXPR void init()
24099 {
24100 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_BASE);
24101 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24102 }
24103 operator uint64_t()
24104 {
24105 uint64_t word;
24106 std::memcpy(&word, this, sizeof(word));
24107 return word;
24108 }
24109 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24110 {
24111 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24112 }
24113 CONSTEXPR npu_set_scale_base_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24114 {
24115 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24116 return *this;
24117 }
24118 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24119 {
24120 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24121 }
24122 CONSTEXPR npu_set_scale_base_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24123 {
24124 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24125 return *this;
24126 }
24127 CONSTEXPR uint32_t get_addr() const
24128 {
24129 return static_cast<uint32_t>(addr);
24130 }
24131 CONSTEXPR npu_set_scale_base_t &set_addr(uint32_t value)
24132 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024133 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024134 return *this;
24135 }
24136#ifdef NPU_DISASSEMBLE
24137 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24138 {
24139 std::stringstream saddr;
24140 saddr << std::hex << "0x" << get_addr();
24141 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24142 }
24143#endif
24144#endif
24145 };
24146 // Scale and bias stream input byte length
24147 struct npu_set_scale_length_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024148 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024149#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024150 private:
24151#endif
24152 uint32_t opcode : 10; // opcode
24153 uint32_t reserved0 : 4;
24154 uint32_t control : 2; // control
24155 uint32_t reserved1 : 16;
24156 uint32_t length : 20; // Scale and bias stream byte length
24157 uint32_t reserved2 : 12;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024158#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024159 public:
24160 npu_set_scale_length_t(uint32_t _length) :
24161 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH)), reserved0(0),
24162 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024163 length(_length & ((1U << 20) - 1)), reserved2(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020024164 {
24165 }
24166 CONSTEXPR npu_set_scale_length_t() :
24167 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH)), reserved0(0),
24168 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), length(0), reserved2(0)
24169 {
24170 }
24171 CONSTEXPR bool valid() const
24172 {
24173 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH) && control >= 1 &&
24174 control <= 2;
24175 }
24176 CONSTEXPR void init()
24177 {
24178 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_SCALE_LENGTH);
24179 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24180 }
24181 operator uint64_t()
24182 {
24183 uint64_t word;
24184 std::memcpy(&word, this, sizeof(word));
24185 return word;
24186 }
24187 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24188 {
24189 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24190 }
24191 CONSTEXPR npu_set_scale_length_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24192 {
24193 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24194 return *this;
24195 }
24196 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24197 {
24198 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24199 }
24200 CONSTEXPR npu_set_scale_length_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24201 {
24202 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24203 return *this;
24204 }
24205 CONSTEXPR uint32_t get_length() const
24206 {
24207 return static_cast<uint32_t>(length);
24208 }
24209 CONSTEXPR npu_set_scale_length_t &set_length(uint32_t value)
24210 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024211 length = value & ((1U << 20) - 1);
Jonny Svärd136810f2021-10-13 16:04:26 +020024212 return *this;
24213 }
24214#ifdef NPU_DISASSEMBLE
24215 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24216 {
24217 fields.push_back(std::make_pair<std::string, std::string>("length", std::to_string(length)));
24218 }
24219#endif
24220#endif
24221 };
24222 // OFM scale
24223 struct npu_set_ofm_scale_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024224 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024225#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024226 private:
24227#endif
24228 uint32_t opcode : 10; // opcode
24229 uint32_t reserved0 : 4;
24230 uint32_t control : 2; // control
24231 uint32_t shift : 6; // Shift
24232 uint32_t reserved1 : 10;
24233 uint32_t scale : 32; // Scale. Not applied for 32-bit operations
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024234#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024235 public:
24236 npu_set_ofm_scale_t(uint32_t _shift, uint32_t _scale) :
24237 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024238 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), shift(_shift & ((1U << 6) - 1)),
24239 reserved1(0), scale(_scale)
Jonny Svärd136810f2021-10-13 16:04:26 +020024240 {
24241 }
24242 CONSTEXPR npu_set_ofm_scale_t() :
24243 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE)), reserved0(0),
24244 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), shift(0), reserved1(0), scale(0)
24245 {
24246 }
24247 CONSTEXPR bool valid() const
24248 {
24249 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE) && control >= 1 &&
24250 control <= 2;
24251 }
24252 CONSTEXPR void init()
24253 {
24254 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OFM_SCALE);
24255 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24256 }
24257 operator uint64_t()
24258 {
24259 uint64_t word;
24260 std::memcpy(&word, this, sizeof(word));
24261 return word;
24262 }
24263 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24264 {
24265 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24266 }
24267 CONSTEXPR npu_set_ofm_scale_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24268 {
24269 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24270 return *this;
24271 }
24272 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24273 {
24274 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24275 }
24276 CONSTEXPR npu_set_ofm_scale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24277 {
24278 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24279 return *this;
24280 }
24281 CONSTEXPR uint32_t get_shift() const
24282 {
24283 return static_cast<uint32_t>(shift);
24284 }
24285 CONSTEXPR npu_set_ofm_scale_t &set_shift(uint32_t value)
24286 {
24287 shift = static_cast<uint8_t>(value) & ((1U << 6) - 1);
24288 return *this;
24289 }
24290 CONSTEXPR uint32_t get_scale() const
24291 {
24292 return static_cast<uint32_t>(scale);
24293 }
24294 CONSTEXPR npu_set_ofm_scale_t &set_scale(uint32_t value)
24295 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024296 scale = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024297 return *this;
24298 }
24299#ifdef NPU_DISASSEMBLE
24300 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24301 {
24302 fields.push_back(std::make_pair<std::string, std::string>("shift", std::to_string(shift)));
24303 fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
24304 }
24305#endif
24306#endif
24307 };
24308 // Input operand A scale
24309 struct npu_set_opa_scale_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024310 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024311#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024312 private:
24313#endif
24314 uint32_t opcode : 10; // opcode
24315 uint32_t reserved0 : 4;
24316 uint32_t control : 2; // control
24317 uint32_t shift : 6; // Shift. Ignored if IFM scale mode is 0
24318 uint32_t reserved1 : 10;
24319 uint32_t scale : 32; // Scale. 16-bit if IFM scale mode is 0
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024320#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024321 public:
24322 npu_set_opa_scale_t(uint32_t _shift, uint32_t _scale) :
24323 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024324 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), shift(_shift & ((1U << 6) - 1)),
24325 reserved1(0), scale(_scale)
Jonny Svärd136810f2021-10-13 16:04:26 +020024326 {
24327 }
24328 CONSTEXPR npu_set_opa_scale_t() :
24329 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE)), reserved0(0),
24330 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), shift(0), reserved1(0), scale(0)
24331 {
24332 }
24333 CONSTEXPR bool valid() const
24334 {
24335 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE) && control >= 1 &&
24336 control <= 2;
24337 }
24338 CONSTEXPR void init()
24339 {
24340 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPA_SCALE);
24341 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24342 }
24343 operator uint64_t()
24344 {
24345 uint64_t word;
24346 std::memcpy(&word, this, sizeof(word));
24347 return word;
24348 }
24349 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24350 {
24351 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24352 }
24353 CONSTEXPR npu_set_opa_scale_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24354 {
24355 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24356 return *this;
24357 }
24358 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24359 {
24360 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24361 }
24362 CONSTEXPR npu_set_opa_scale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24363 {
24364 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24365 return *this;
24366 }
24367 CONSTEXPR uint32_t get_shift() const
24368 {
24369 return static_cast<uint32_t>(shift);
24370 }
24371 CONSTEXPR npu_set_opa_scale_t &set_shift(uint32_t value)
24372 {
24373 shift = static_cast<uint8_t>(value) & ((1U << 6) - 1);
24374 return *this;
24375 }
24376 CONSTEXPR uint32_t get_scale() const
24377 {
24378 return static_cast<uint32_t>(scale);
24379 }
24380 CONSTEXPR npu_set_opa_scale_t &set_scale(uint32_t value)
24381 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024382 scale = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024383 return *this;
24384 }
24385#ifdef NPU_DISASSEMBLE
24386 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24387 {
24388 fields.push_back(std::make_pair<std::string, std::string>("shift", std::to_string(shift)));
24389 fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
24390 }
24391#endif
24392#endif
24393 };
24394 // Input operand B scale
24395 struct npu_set_opb_scale_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024396 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024397#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024398 private:
24399#endif
24400 uint32_t opcode : 10; // opcode
24401 uint32_t reserved0 : 4;
24402 uint32_t control : 2; // control
24403 uint32_t reserved1 : 16;
24404 uint32_t scale : 16; // Scale. Not used if IFM scale mode is 1 or 2
24405 uint32_t reserved2 : 16;
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024406#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024407 public:
24408 npu_set_opb_scale_t(uint32_t _scale) :
24409 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE)), reserved0(0),
24410 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024411 scale(_scale & ((1U << 16) - 1)), reserved2(0)
Jonny Svärd136810f2021-10-13 16:04:26 +020024412 {
24413 }
24414 CONSTEXPR npu_set_opb_scale_t() :
24415 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE)), reserved0(0),
24416 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), scale(0), reserved2(0)
24417 {
24418 }
24419 CONSTEXPR bool valid() const
24420 {
24421 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE) && control >= 1 &&
24422 control <= 2;
24423 }
24424 CONSTEXPR void init()
24425 {
24426 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_OPB_SCALE);
24427 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24428 }
24429 operator uint64_t()
24430 {
24431 uint64_t word;
24432 std::memcpy(&word, this, sizeof(word));
24433 return word;
24434 }
24435 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24436 {
24437 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24438 }
24439 CONSTEXPR npu_set_opb_scale_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24440 {
24441 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24442 return *this;
24443 }
24444 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24445 {
24446 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24447 }
24448 CONSTEXPR npu_set_opb_scale_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24449 {
24450 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24451 return *this;
24452 }
24453 CONSTEXPR uint32_t get_scale() const
24454 {
24455 return static_cast<uint32_t>(scale);
24456 }
24457 CONSTEXPR npu_set_opb_scale_t &set_scale(uint32_t value)
24458 {
24459 scale = static_cast<uint16_t>(value) & ((1U << 16) - 1);
24460 return *this;
24461 }
24462#ifdef NPU_DISASSEMBLE
24463 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24464 {
24465 fields.push_back(std::make_pair<std::string, std::string>("scale", std::to_string(scale)));
24466 }
24467#endif
24468#endif
24469 };
24470 // DMA user channel 0 source byte offset from DMA0_SRC_REGION
24471 struct npu_set_dma0_src_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024472 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024473#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024474 private:
24475#endif
24476 uint32_t opcode : 10; // opcode
24477 uint32_t reserved0 : 4;
24478 uint32_t control : 2; // control
24479 uint32_t reserved1 : 16;
24480 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024481#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024482 public:
24483 npu_set_dma0_src_t(uint32_t _addr) :
24484 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024485 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024486 {
24487 }
24488 CONSTEXPR npu_set_dma0_src_t() :
24489 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC)), reserved0(0),
24490 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24491 {
24492 }
24493 CONSTEXPR bool valid() const
24494 {
24495 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC) && control >= 1 &&
24496 control <= 2;
24497 }
24498 CONSTEXPR void init()
24499 {
24500 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_SRC);
24501 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24502 }
24503 operator uint64_t()
24504 {
24505 uint64_t word;
24506 std::memcpy(&word, this, sizeof(word));
24507 return word;
24508 }
24509 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24510 {
24511 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24512 }
24513 CONSTEXPR npu_set_dma0_src_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24514 {
24515 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24516 return *this;
24517 }
24518 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24519 {
24520 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24521 }
24522 CONSTEXPR npu_set_dma0_src_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24523 {
24524 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24525 return *this;
24526 }
24527 CONSTEXPR uint32_t get_addr() const
24528 {
24529 return static_cast<uint32_t>(addr);
24530 }
24531 CONSTEXPR npu_set_dma0_src_t &set_addr(uint32_t value)
24532 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024533 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024534 return *this;
24535 }
24536#ifdef NPU_DISASSEMBLE
24537 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24538 {
24539 std::stringstream saddr;
24540 saddr << std::hex << "0x" << get_addr();
24541 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24542 }
24543#endif
24544#endif
24545 };
24546 // DMA user channel 0 destination byte offset from DMA0_DST_REGION
24547 struct npu_set_dma0_dst_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024548 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024549#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024550 private:
24551#endif
24552 uint32_t opcode : 10; // opcode
24553 uint32_t reserved0 : 4;
24554 uint32_t control : 2; // control
24555 uint32_t reserved1 : 16;
24556 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024557#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024558 public:
24559 npu_set_dma0_dst_t(uint32_t _addr) :
24560 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024561 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024562 {
24563 }
24564 CONSTEXPR npu_set_dma0_dst_t() :
24565 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST)), reserved0(0),
24566 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24567 {
24568 }
24569 CONSTEXPR bool valid() const
24570 {
24571 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST) && control >= 1 &&
24572 control <= 2;
24573 }
24574 CONSTEXPR void init()
24575 {
24576 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_DST);
24577 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24578 }
24579 operator uint64_t()
24580 {
24581 uint64_t word;
24582 std::memcpy(&word, this, sizeof(word));
24583 return word;
24584 }
24585 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24586 {
24587 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24588 }
24589 CONSTEXPR npu_set_dma0_dst_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24590 {
24591 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24592 return *this;
24593 }
24594 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24595 {
24596 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24597 }
24598 CONSTEXPR npu_set_dma0_dst_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24599 {
24600 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24601 return *this;
24602 }
24603 CONSTEXPR uint32_t get_addr() const
24604 {
24605 return static_cast<uint32_t>(addr);
24606 }
24607 CONSTEXPR npu_set_dma0_dst_t &set_addr(uint32_t value)
24608 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024609 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024610 return *this;
24611 }
24612#ifdef NPU_DISASSEMBLE
24613 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24614 {
24615 std::stringstream saddr;
24616 saddr << std::hex << "0x" << get_addr();
24617 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24618 }
24619#endif
24620#endif
24621 };
Jonny Svärd13cb0892021-11-16 18:43:04 +010024622 // DMA user channel 0 transfer length in bytes for each 1D transfer
Jonny Svärd136810f2021-10-13 16:04:26 +020024623 struct npu_set_dma0_len_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024624 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024625#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024626 private:
24627#endif
24628 uint32_t opcode : 10; // opcode
24629 uint32_t reserved0 : 4;
24630 uint32_t control : 2; // control
24631 uint32_t reserved1 : 16;
24632 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024633#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024634 public:
24635 npu_set_dma0_len_t(uint32_t _addr) :
24636 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024637 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024638 {
24639 }
24640 CONSTEXPR npu_set_dma0_len_t() :
24641 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN)), reserved0(0),
24642 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24643 {
24644 }
24645 CONSTEXPR bool valid() const
24646 {
24647 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN) && control >= 1 &&
24648 control <= 2;
24649 }
24650 CONSTEXPR void init()
24651 {
24652 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_DMA0_LEN);
24653 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24654 }
24655 operator uint64_t()
24656 {
24657 uint64_t word;
24658 std::memcpy(&word, this, sizeof(word));
24659 return word;
24660 }
24661 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24662 {
24663 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24664 }
24665 CONSTEXPR npu_set_dma0_len_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24666 {
24667 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24668 return *this;
24669 }
24670 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24671 {
24672 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24673 }
24674 CONSTEXPR npu_set_dma0_len_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24675 {
24676 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24677 return *this;
24678 }
24679 CONSTEXPR uint32_t get_addr() const
24680 {
24681 return static_cast<uint32_t>(addr);
24682 }
24683 CONSTEXPR npu_set_dma0_len_t &set_addr(uint32_t value)
24684 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024685 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024686 return *this;
24687 }
24688#ifdef NPU_DISASSEMBLE
24689 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24690 {
24691 std::stringstream saddr;
24692 saddr << std::hex << "0x" << get_addr();
24693 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24694 }
24695#endif
24696#endif
24697 };
24698 // IFM2 Tile 0 address
24699 struct npu_set_ifm2_base0_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024700 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024701#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024702 private:
24703#endif
24704 uint32_t opcode : 10; // opcode
24705 uint32_t reserved0 : 4;
24706 uint32_t control : 2; // control
24707 uint32_t reserved1 : 16;
24708 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024709#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024710 public:
24711 npu_set_ifm2_base0_t(uint32_t _addr) :
24712 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024713 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024714 {
24715 }
24716 CONSTEXPR npu_set_ifm2_base0_t() :
24717 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0)), reserved0(0),
24718 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24719 {
24720 }
24721 CONSTEXPR bool valid() const
24722 {
24723 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0) && control >= 1 &&
24724 control <= 2;
24725 }
24726 CONSTEXPR void init()
24727 {
24728 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE0);
24729 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24730 }
24731 operator uint64_t()
24732 {
24733 uint64_t word;
24734 std::memcpy(&word, this, sizeof(word));
24735 return word;
24736 }
24737 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24738 {
24739 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24740 }
24741 CONSTEXPR npu_set_ifm2_base0_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24742 {
24743 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24744 return *this;
24745 }
24746 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24747 {
24748 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24749 }
24750 CONSTEXPR npu_set_ifm2_base0_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24751 {
24752 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24753 return *this;
24754 }
24755 CONSTEXPR uint32_t get_addr() const
24756 {
24757 return static_cast<uint32_t>(addr);
24758 }
24759 CONSTEXPR npu_set_ifm2_base0_t &set_addr(uint32_t value)
24760 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024761 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024762 return *this;
24763 }
24764#ifdef NPU_DISASSEMBLE
24765 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24766 {
24767 std::stringstream saddr;
24768 saddr << std::hex << "0x" << get_addr();
24769 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24770 }
24771#endif
24772#endif
24773 };
24774 // IFM2 Tile 1 address
24775 struct npu_set_ifm2_base1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024776 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024777#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024778 private:
24779#endif
24780 uint32_t opcode : 10; // opcode
24781 uint32_t reserved0 : 4;
24782 uint32_t control : 2; // control
24783 uint32_t reserved1 : 16;
24784 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024785#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024786 public:
24787 npu_set_ifm2_base1_t(uint32_t _addr) :
24788 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024789 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024790 {
24791 }
24792 CONSTEXPR npu_set_ifm2_base1_t() :
24793 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1)), reserved0(0),
24794 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24795 {
24796 }
24797 CONSTEXPR bool valid() const
24798 {
24799 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1) && control >= 1 &&
24800 control <= 2;
24801 }
24802 CONSTEXPR void init()
24803 {
24804 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE1);
24805 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24806 }
24807 operator uint64_t()
24808 {
24809 uint64_t word;
24810 std::memcpy(&word, this, sizeof(word));
24811 return word;
24812 }
24813 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24814 {
24815 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24816 }
24817 CONSTEXPR npu_set_ifm2_base1_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24818 {
24819 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24820 return *this;
24821 }
24822 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24823 {
24824 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24825 }
24826 CONSTEXPR npu_set_ifm2_base1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24827 {
24828 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24829 return *this;
24830 }
24831 CONSTEXPR uint32_t get_addr() const
24832 {
24833 return static_cast<uint32_t>(addr);
24834 }
24835 CONSTEXPR npu_set_ifm2_base1_t &set_addr(uint32_t value)
24836 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024837 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024838 return *this;
24839 }
24840#ifdef NPU_DISASSEMBLE
24841 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24842 {
24843 std::stringstream saddr;
24844 saddr << std::hex << "0x" << get_addr();
24845 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24846 }
24847#endif
24848#endif
24849 };
24850 // IFM2 Tile 2 address
24851 struct npu_set_ifm2_base2_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024852 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024853#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024854 private:
24855#endif
24856 uint32_t opcode : 10; // opcode
24857 uint32_t reserved0 : 4;
24858 uint32_t control : 2; // control
24859 uint32_t reserved1 : 16;
24860 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024861#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024862 public:
24863 npu_set_ifm2_base2_t(uint32_t _addr) :
24864 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024865 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024866 {
24867 }
24868 CONSTEXPR npu_set_ifm2_base2_t() :
24869 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2)), reserved0(0),
24870 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24871 {
24872 }
24873 CONSTEXPR bool valid() const
24874 {
24875 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2) && control >= 1 &&
24876 control <= 2;
24877 }
24878 CONSTEXPR void init()
24879 {
24880 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE2);
24881 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24882 }
24883 operator uint64_t()
24884 {
24885 uint64_t word;
24886 std::memcpy(&word, this, sizeof(word));
24887 return word;
24888 }
24889 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24890 {
24891 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24892 }
24893 CONSTEXPR npu_set_ifm2_base2_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24894 {
24895 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24896 return *this;
24897 }
24898 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24899 {
24900 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24901 }
24902 CONSTEXPR npu_set_ifm2_base2_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24903 {
24904 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24905 return *this;
24906 }
24907 CONSTEXPR uint32_t get_addr() const
24908 {
24909 return static_cast<uint32_t>(addr);
24910 }
24911 CONSTEXPR npu_set_ifm2_base2_t &set_addr(uint32_t value)
24912 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024913 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024914 return *this;
24915 }
24916#ifdef NPU_DISASSEMBLE
24917 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24918 {
24919 std::stringstream saddr;
24920 saddr << std::hex << "0x" << get_addr();
24921 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24922 }
24923#endif
24924#endif
24925 };
24926 // IFM2 Tile 3 address
24927 struct npu_set_ifm2_base3_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024928 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024929#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024930 private:
24931#endif
24932 uint32_t opcode : 10; // opcode
24933 uint32_t reserved0 : 4;
24934 uint32_t control : 2; // control
24935 uint32_t reserved1 : 16;
24936 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020024937#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020024938 public:
24939 npu_set_ifm2_base3_t(uint32_t _addr) :
24940 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010024941 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020024942 {
24943 }
24944 CONSTEXPR npu_set_ifm2_base3_t() :
24945 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3)), reserved0(0),
24946 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
24947 {
24948 }
24949 CONSTEXPR bool valid() const
24950 {
24951 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3) && control >= 1 &&
24952 control <= 2;
24953 }
24954 CONSTEXPR void init()
24955 {
24956 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_BASE3);
24957 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
24958 }
24959 operator uint64_t()
24960 {
24961 uint64_t word;
24962 std::memcpy(&word, this, sizeof(word));
24963 return word;
24964 }
24965 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
24966 {
24967 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
24968 }
24969 CONSTEXPR npu_set_ifm2_base3_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
24970 {
24971 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
24972 return *this;
24973 }
24974 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
24975 {
24976 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
24977 }
24978 CONSTEXPR npu_set_ifm2_base3_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
24979 {
24980 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
24981 return *this;
24982 }
24983 CONSTEXPR uint32_t get_addr() const
24984 {
24985 return static_cast<uint32_t>(addr);
24986 }
24987 CONSTEXPR npu_set_ifm2_base3_t &set_addr(uint32_t value)
24988 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010024989 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020024990 return *this;
24991 }
24992#ifdef NPU_DISASSEMBLE
24993 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
24994 {
24995 std::stringstream saddr;
24996 saddr << std::hex << "0x" << get_addr();
24997 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
24998 }
24999#endif
25000#endif
25001 };
25002 // IFM2 byte stride between horizontal values
25003 struct npu_set_ifm2_stride_x_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025004 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025005#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025006 private:
25007#endif
25008 uint32_t opcode : 10; // opcode
25009 uint32_t reserved0 : 4;
25010 uint32_t control : 2; // control
25011 uint32_t reserved1 : 16;
25012 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025013#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025014 public:
25015 npu_set_ifm2_stride_x_t(uint32_t _addr) :
25016 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025017 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020025018 {
25019 }
25020 CONSTEXPR npu_set_ifm2_stride_x_t() :
25021 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X)), reserved0(0),
25022 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
25023 {
25024 }
25025 CONSTEXPR bool valid() const
25026 {
25027 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X) && control >= 1 &&
25028 control <= 2;
25029 }
25030 CONSTEXPR void init()
25031 {
25032 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_X);
25033 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25034 }
25035 operator uint64_t()
25036 {
25037 uint64_t word;
25038 std::memcpy(&word, this, sizeof(word));
25039 return word;
25040 }
25041 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25042 {
25043 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25044 }
25045 CONSTEXPR npu_set_ifm2_stride_x_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25046 {
25047 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25048 return *this;
25049 }
25050 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25051 {
25052 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25053 }
25054 CONSTEXPR npu_set_ifm2_stride_x_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25055 {
25056 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25057 return *this;
25058 }
25059 CONSTEXPR uint32_t get_addr() const
25060 {
25061 return static_cast<uint32_t>(addr);
25062 }
25063 CONSTEXPR npu_set_ifm2_stride_x_t &set_addr(uint32_t value)
25064 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025065 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025066 return *this;
25067 }
25068#ifdef NPU_DISASSEMBLE
25069 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25070 {
25071 std::stringstream saddr;
25072 saddr << std::hex << "0x" << get_addr();
25073 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
25074 }
25075#endif
25076#endif
25077 };
25078 // IFM2 byte stride between vertical values
25079 struct npu_set_ifm2_stride_y_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025080 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025081#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025082 private:
25083#endif
25084 uint32_t opcode : 10; // opcode
25085 uint32_t reserved0 : 4;
25086 uint32_t control : 2; // control
25087 uint32_t reserved1 : 16;
25088 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025089#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025090 public:
25091 npu_set_ifm2_stride_y_t(uint32_t _addr) :
25092 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025093 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020025094 {
25095 }
25096 CONSTEXPR npu_set_ifm2_stride_y_t() :
25097 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y)), reserved0(0),
25098 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
25099 {
25100 }
25101 CONSTEXPR bool valid() const
25102 {
25103 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y) && control >= 1 &&
25104 control <= 2;
25105 }
25106 CONSTEXPR void init()
25107 {
25108 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_Y);
25109 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25110 }
25111 operator uint64_t()
25112 {
25113 uint64_t word;
25114 std::memcpy(&word, this, sizeof(word));
25115 return word;
25116 }
25117 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25118 {
25119 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25120 }
25121 CONSTEXPR npu_set_ifm2_stride_y_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25122 {
25123 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25124 return *this;
25125 }
25126 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25127 {
25128 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25129 }
25130 CONSTEXPR npu_set_ifm2_stride_y_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25131 {
25132 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25133 return *this;
25134 }
25135 CONSTEXPR uint32_t get_addr() const
25136 {
25137 return static_cast<uint32_t>(addr);
25138 }
25139 CONSTEXPR npu_set_ifm2_stride_y_t &set_addr(uint32_t value)
25140 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025141 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025142 return *this;
25143 }
25144#ifdef NPU_DISASSEMBLE
25145 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25146 {
25147 std::stringstream saddr;
25148 saddr << std::hex << "0x" << get_addr();
25149 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
25150 }
25151#endif
25152#endif
25153 };
25154 // IFM2 byte stride between channel blocks (of 16 bytes each block)
25155 struct npu_set_ifm2_stride_c_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025156 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025157#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025158 private:
25159#endif
25160 uint32_t opcode : 10; // opcode
25161 uint32_t reserved0 : 4;
25162 uint32_t control : 2; // control
25163 uint32_t reserved1 : 16;
25164 uint32_t addr : 32; // address offset
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025165#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025166 public:
25167 npu_set_ifm2_stride_c_t(uint32_t _addr) :
25168 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025169 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(_addr)
Jonny Svärd136810f2021-10-13 16:04:26 +020025170 {
25171 }
25172 CONSTEXPR npu_set_ifm2_stride_c_t() :
25173 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C)), reserved0(0),
25174 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), addr(0)
25175 {
25176 }
25177 CONSTEXPR bool valid() const
25178 {
25179 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C) && control >= 1 &&
25180 control <= 2;
25181 }
25182 CONSTEXPR void init()
25183 {
25184 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_IFM2_STRIDE_C);
25185 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25186 }
25187 operator uint64_t()
25188 {
25189 uint64_t word;
25190 std::memcpy(&word, this, sizeof(word));
25191 return word;
25192 }
25193 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25194 {
25195 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25196 }
25197 CONSTEXPR npu_set_ifm2_stride_c_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25198 {
25199 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25200 return *this;
25201 }
25202 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25203 {
25204 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25205 }
25206 CONSTEXPR npu_set_ifm2_stride_c_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25207 {
25208 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25209 return *this;
25210 }
25211 CONSTEXPR uint32_t get_addr() const
25212 {
25213 return static_cast<uint32_t>(addr);
25214 }
25215 CONSTEXPR npu_set_ifm2_stride_c_t &set_addr(uint32_t value)
25216 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025217 addr = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025218 return *this;
25219 }
25220#ifdef NPU_DISASSEMBLE
25221 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25222 {
25223 std::stringstream saddr;
25224 saddr << std::hex << "0x" << get_addr();
25225 fields.push_back(std::make_pair<std::string, std::string>("addr", saddr.str()));
25226 }
25227#endif
25228#endif
25229 };
25230 // User defined register 0
25231 struct npu_set_user_defined0_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025232 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025233#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025234 private:
25235#endif
25236 uint32_t opcode : 10; // opcode
25237 uint32_t reserved0 : 4;
25238 uint32_t control : 2; // control
25239 uint32_t reserved1 : 16;
25240 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025241#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025242 public:
25243 npu_set_user_defined0_t(uint32_t _user_reg) :
25244 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED0)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025245 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025246 {
25247 }
25248 CONSTEXPR npu_set_user_defined0_t() :
25249 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED0)), reserved0(0),
25250 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25251 {
25252 }
25253 CONSTEXPR bool valid() const
25254 {
25255 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED0) && control >= 1 &&
25256 control <= 2;
25257 }
25258 CONSTEXPR void init()
25259 {
25260 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED0);
25261 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25262 }
25263 operator uint64_t()
25264 {
25265 uint64_t word;
25266 std::memcpy(&word, this, sizeof(word));
25267 return word;
25268 }
25269 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25270 {
25271 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25272 }
25273 CONSTEXPR npu_set_user_defined0_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25274 {
25275 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25276 return *this;
25277 }
25278 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25279 {
25280 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25281 }
25282 CONSTEXPR npu_set_user_defined0_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25283 {
25284 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25285 return *this;
25286 }
25287 CONSTEXPR uint32_t get_user_reg() const
25288 {
25289 return static_cast<uint32_t>(user_reg);
25290 }
25291 CONSTEXPR npu_set_user_defined0_t &set_user_reg(uint32_t value)
25292 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025293 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025294 return *this;
25295 }
25296#ifdef NPU_DISASSEMBLE
25297 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25298 {
25299 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25300 }
25301#endif
25302#endif
25303 };
25304 // User defined register 1
25305 struct npu_set_user_defined1_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025306 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025307#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025308 private:
25309#endif
25310 uint32_t opcode : 10; // opcode
25311 uint32_t reserved0 : 4;
25312 uint32_t control : 2; // control
25313 uint32_t reserved1 : 16;
25314 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025315#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025316 public:
25317 npu_set_user_defined1_t(uint32_t _user_reg) :
25318 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED1)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025319 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025320 {
25321 }
25322 CONSTEXPR npu_set_user_defined1_t() :
25323 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED1)), reserved0(0),
25324 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25325 {
25326 }
25327 CONSTEXPR bool valid() const
25328 {
25329 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED1) && control >= 1 &&
25330 control <= 2;
25331 }
25332 CONSTEXPR void init()
25333 {
25334 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED1);
25335 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25336 }
25337 operator uint64_t()
25338 {
25339 uint64_t word;
25340 std::memcpy(&word, this, sizeof(word));
25341 return word;
25342 }
25343 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25344 {
25345 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25346 }
25347 CONSTEXPR npu_set_user_defined1_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25348 {
25349 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25350 return *this;
25351 }
25352 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25353 {
25354 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25355 }
25356 CONSTEXPR npu_set_user_defined1_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25357 {
25358 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25359 return *this;
25360 }
25361 CONSTEXPR uint32_t get_user_reg() const
25362 {
25363 return static_cast<uint32_t>(user_reg);
25364 }
25365 CONSTEXPR npu_set_user_defined1_t &set_user_reg(uint32_t value)
25366 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025367 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025368 return *this;
25369 }
25370#ifdef NPU_DISASSEMBLE
25371 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25372 {
25373 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25374 }
25375#endif
25376#endif
25377 };
25378 // User defined register 2
25379 struct npu_set_user_defined2_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025380 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025381#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025382 private:
25383#endif
25384 uint32_t opcode : 10; // opcode
25385 uint32_t reserved0 : 4;
25386 uint32_t control : 2; // control
25387 uint32_t reserved1 : 16;
25388 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025389#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025390 public:
25391 npu_set_user_defined2_t(uint32_t _user_reg) :
25392 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED2)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025393 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025394 {
25395 }
25396 CONSTEXPR npu_set_user_defined2_t() :
25397 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED2)), reserved0(0),
25398 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25399 {
25400 }
25401 CONSTEXPR bool valid() const
25402 {
25403 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED2) && control >= 1 &&
25404 control <= 2;
25405 }
25406 CONSTEXPR void init()
25407 {
25408 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED2);
25409 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25410 }
25411 operator uint64_t()
25412 {
25413 uint64_t word;
25414 std::memcpy(&word, this, sizeof(word));
25415 return word;
25416 }
25417 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25418 {
25419 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25420 }
25421 CONSTEXPR npu_set_user_defined2_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25422 {
25423 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25424 return *this;
25425 }
25426 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25427 {
25428 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25429 }
25430 CONSTEXPR npu_set_user_defined2_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25431 {
25432 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25433 return *this;
25434 }
25435 CONSTEXPR uint32_t get_user_reg() const
25436 {
25437 return static_cast<uint32_t>(user_reg);
25438 }
25439 CONSTEXPR npu_set_user_defined2_t &set_user_reg(uint32_t value)
25440 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025441 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025442 return *this;
25443 }
25444#ifdef NPU_DISASSEMBLE
25445 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25446 {
25447 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25448 }
25449#endif
25450#endif
25451 };
25452 // User defined register 3
25453 struct npu_set_user_defined3_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025454 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025455#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025456 private:
25457#endif
25458 uint32_t opcode : 10; // opcode
25459 uint32_t reserved0 : 4;
25460 uint32_t control : 2; // control
25461 uint32_t reserved1 : 16;
25462 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025463#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025464 public:
25465 npu_set_user_defined3_t(uint32_t _user_reg) :
25466 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED3)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025467 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025468 {
25469 }
25470 CONSTEXPR npu_set_user_defined3_t() :
25471 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED3)), reserved0(0),
25472 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25473 {
25474 }
25475 CONSTEXPR bool valid() const
25476 {
25477 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED3) && control >= 1 &&
25478 control <= 2;
25479 }
25480 CONSTEXPR void init()
25481 {
25482 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED3);
25483 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25484 }
25485 operator uint64_t()
25486 {
25487 uint64_t word;
25488 std::memcpy(&word, this, sizeof(word));
25489 return word;
25490 }
25491 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25492 {
25493 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25494 }
25495 CONSTEXPR npu_set_user_defined3_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25496 {
25497 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25498 return *this;
25499 }
25500 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25501 {
25502 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25503 }
25504 CONSTEXPR npu_set_user_defined3_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25505 {
25506 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25507 return *this;
25508 }
25509 CONSTEXPR uint32_t get_user_reg() const
25510 {
25511 return static_cast<uint32_t>(user_reg);
25512 }
25513 CONSTEXPR npu_set_user_defined3_t &set_user_reg(uint32_t value)
25514 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025515 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025516 return *this;
25517 }
25518#ifdef NPU_DISASSEMBLE
25519 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25520 {
25521 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25522 }
25523#endif
25524#endif
25525 };
25526 // User defined register 4
25527 struct npu_set_user_defined4_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025528 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025529#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025530 private:
25531#endif
25532 uint32_t opcode : 10; // opcode
25533 uint32_t reserved0 : 4;
25534 uint32_t control : 2; // control
25535 uint32_t reserved1 : 16;
25536 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025537#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025538 public:
25539 npu_set_user_defined4_t(uint32_t _user_reg) :
25540 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED4)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025541 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025542 {
25543 }
25544 CONSTEXPR npu_set_user_defined4_t() :
25545 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED4)), reserved0(0),
25546 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25547 {
25548 }
25549 CONSTEXPR bool valid() const
25550 {
25551 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED4) && control >= 1 &&
25552 control <= 2;
25553 }
25554 CONSTEXPR void init()
25555 {
25556 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED4);
25557 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25558 }
25559 operator uint64_t()
25560 {
25561 uint64_t word;
25562 std::memcpy(&word, this, sizeof(word));
25563 return word;
25564 }
25565 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25566 {
25567 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25568 }
25569 CONSTEXPR npu_set_user_defined4_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25570 {
25571 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25572 return *this;
25573 }
25574 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25575 {
25576 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25577 }
25578 CONSTEXPR npu_set_user_defined4_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25579 {
25580 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25581 return *this;
25582 }
25583 CONSTEXPR uint32_t get_user_reg() const
25584 {
25585 return static_cast<uint32_t>(user_reg);
25586 }
25587 CONSTEXPR npu_set_user_defined4_t &set_user_reg(uint32_t value)
25588 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025589 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025590 return *this;
25591 }
25592#ifdef NPU_DISASSEMBLE
25593 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25594 {
25595 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25596 }
25597#endif
25598#endif
25599 };
25600 // User defined register 5
25601 struct npu_set_user_defined5_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025602 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025603#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025604 private:
25605#endif
25606 uint32_t opcode : 10; // opcode
25607 uint32_t reserved0 : 4;
25608 uint32_t control : 2; // control
25609 uint32_t reserved1 : 16;
25610 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025611#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025612 public:
25613 npu_set_user_defined5_t(uint32_t _user_reg) :
25614 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED5)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025615 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025616 {
25617 }
25618 CONSTEXPR npu_set_user_defined5_t() :
25619 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED5)), reserved0(0),
25620 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25621 {
25622 }
25623 CONSTEXPR bool valid() const
25624 {
25625 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED5) && control >= 1 &&
25626 control <= 2;
25627 }
25628 CONSTEXPR void init()
25629 {
25630 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED5);
25631 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25632 }
25633 operator uint64_t()
25634 {
25635 uint64_t word;
25636 std::memcpy(&word, this, sizeof(word));
25637 return word;
25638 }
25639 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25640 {
25641 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25642 }
25643 CONSTEXPR npu_set_user_defined5_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25644 {
25645 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25646 return *this;
25647 }
25648 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25649 {
25650 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25651 }
25652 CONSTEXPR npu_set_user_defined5_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25653 {
25654 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25655 return *this;
25656 }
25657 CONSTEXPR uint32_t get_user_reg() const
25658 {
25659 return static_cast<uint32_t>(user_reg);
25660 }
25661 CONSTEXPR npu_set_user_defined5_t &set_user_reg(uint32_t value)
25662 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025663 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025664 return *this;
25665 }
25666#ifdef NPU_DISASSEMBLE
25667 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25668 {
25669 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25670 }
25671#endif
25672#endif
25673 };
25674 // User defined register 6
25675 struct npu_set_user_defined6_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025676 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025677#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025678 private:
25679#endif
25680 uint32_t opcode : 10; // opcode
25681 uint32_t reserved0 : 4;
25682 uint32_t control : 2; // control
25683 uint32_t reserved1 : 16;
25684 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025685#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025686 public:
25687 npu_set_user_defined6_t(uint32_t _user_reg) :
25688 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED6)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025689 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025690 {
25691 }
25692 CONSTEXPR npu_set_user_defined6_t() :
25693 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED6)), reserved0(0),
25694 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25695 {
25696 }
25697 CONSTEXPR bool valid() const
25698 {
25699 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED6) && control >= 1 &&
25700 control <= 2;
25701 }
25702 CONSTEXPR void init()
25703 {
25704 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED6);
25705 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25706 }
25707 operator uint64_t()
25708 {
25709 uint64_t word;
25710 std::memcpy(&word, this, sizeof(word));
25711 return word;
25712 }
25713 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25714 {
25715 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25716 }
25717 CONSTEXPR npu_set_user_defined6_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25718 {
25719 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25720 return *this;
25721 }
25722 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25723 {
25724 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25725 }
25726 CONSTEXPR npu_set_user_defined6_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25727 {
25728 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25729 return *this;
25730 }
25731 CONSTEXPR uint32_t get_user_reg() const
25732 {
25733 return static_cast<uint32_t>(user_reg);
25734 }
25735 CONSTEXPR npu_set_user_defined6_t &set_user_reg(uint32_t value)
25736 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025737 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025738 return *this;
25739 }
25740#ifdef NPU_DISASSEMBLE
25741 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25742 {
25743 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25744 }
25745#endif
25746#endif
25747 };
25748 // User defined register 7
25749 struct npu_set_user_defined7_t
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025750 {
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025751#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025752 private:
25753#endif
25754 uint32_t opcode : 10; // opcode
25755 uint32_t reserved0 : 4;
25756 uint32_t control : 2; // control
25757 uint32_t reserved1 : 16;
25758 uint32_t user_reg : 32; // User defined register
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025759#ifdef __cplusplus
Jonny Svärd136810f2021-10-13 16:04:26 +020025760 public:
25761 npu_set_user_defined7_t(uint32_t _user_reg) :
25762 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED7)), reserved0(0),
Jonny Svärd13cb0892021-11-16 18:43:04 +010025763 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(_user_reg)
Jonny Svärd136810f2021-10-13 16:04:26 +020025764 {
25765 }
25766 CONSTEXPR npu_set_user_defined7_t() :
25767 opcode(static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED7)), reserved0(0),
25768 control(static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL)), reserved1(0), user_reg(0)
25769 {
25770 }
25771 CONSTEXPR bool valid() const
25772 {
25773 return opcode == static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED7) && control >= 1 &&
25774 control <= 2;
25775 }
25776 CONSTEXPR void init()
25777 {
25778 opcode = static_cast<uint16_t>(NPU_NAMESPACE::cmd1_opcode::NPU_SET_USER_DEFINED7);
25779 control = static_cast<uint8_t>(NPU_NAMESPACE::cmd_ctrl::CMD1_CTRL);
25780 }
25781 operator uint64_t()
25782 {
25783 uint64_t word;
25784 std::memcpy(&word, this, sizeof(word));
25785 return word;
25786 }
25787 CONSTEXPR NPU_NAMESPACE::cmd1_opcode get_opcode() const
25788 {
25789 return static_cast<NPU_NAMESPACE::cmd1_opcode>(opcode);
25790 }
25791 CONSTEXPR npu_set_user_defined7_t &set_opcode(NPU_NAMESPACE::cmd1_opcode value)
25792 {
25793 opcode = static_cast<uint16_t>(value) & ((1U << 10) - 1);
25794 return *this;
25795 }
25796 CONSTEXPR NPU_NAMESPACE::cmd_ctrl get_control() const
25797 {
25798 return static_cast<NPU_NAMESPACE::cmd_ctrl>(control);
25799 }
25800 CONSTEXPR npu_set_user_defined7_t &set_control(NPU_NAMESPACE::cmd_ctrl value)
25801 {
25802 control = static_cast<uint8_t>(value) & ((1U << 2) - 1);
25803 return *this;
25804 }
25805 CONSTEXPR uint32_t get_user_reg() const
25806 {
25807 return static_cast<uint32_t>(user_reg);
25808 }
25809 CONSTEXPR npu_set_user_defined7_t &set_user_reg(uint32_t value)
25810 {
Jonny Svärd13cb0892021-11-16 18:43:04 +010025811 user_reg = value;
Jonny Svärd136810f2021-10-13 16:04:26 +020025812 return *this;
25813 }
25814#ifdef NPU_DISASSEMBLE
25815 void disassemble(std::vector<std::pair<std::string, std::string>> &fields) const
25816 {
25817 fields.push_back(std::make_pair<std::string, std::string>("user_reg", std::to_string(user_reg)));
25818 }
25819#endif
25820#endif
25821 };
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025822#ifdef __cplusplus
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025823};
Jonny Svärd136810f2021-10-13 16:04:26 +020025824#endif
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025825#define NPU_OP_STRUCTS \
25826 NPU_OP_(stop) \
25827 NPU_OP_(irq) \
25828 NPU_OP_(conv) \
25829 NPU_OP_(depthwise) \
25830 NPU_OP_(pool) \
25831 NPU_OP_(elementwise) \
25832 NPU_OP_(dma_start) \
25833 NPU_OP_(dma_wait) \
25834 NPU_OP_(kernel_wait) \
25835 NPU_OP_(pmu_mask)
Jonny Svärd136810f2021-10-13 16:04:26 +020025836
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025837#define NPU_SET_STRUCTS \
25838 NPU_SET_(ifm_pad_top) \
25839 NPU_SET_(ifm_pad_left) \
25840 NPU_SET_(ifm_pad_right) \
25841 NPU_SET_(ifm_pad_bottom) \
25842 NPU_SET_(ifm_depth_m1) \
25843 NPU_SET_(ifm_precision) \
25844 NPU_SET_(ifm_upscale) \
25845 NPU_SET_(ifm_zero_point) \
25846 NPU_SET_(ifm_width0_m1) \
25847 NPU_SET_(ifm_height0_m1) \
25848 NPU_SET_(ifm_height1_m1) \
25849 NPU_SET_(ifm_ib_end) \
25850 NPU_SET_(ifm_region) \
25851 NPU_SET_(ofm_width_m1) \
25852 NPU_SET_(ofm_height_m1) \
25853 NPU_SET_(ofm_depth_m1) \
25854 NPU_SET_(ofm_precision) \
25855 NPU_SET_(ofm_blk_width_m1) \
25856 NPU_SET_(ofm_blk_height_m1) \
25857 NPU_SET_(ofm_blk_depth_m1) \
25858 NPU_SET_(ofm_zero_point) \
25859 NPU_SET_(ofm_width0_m1) \
25860 NPU_SET_(ofm_height0_m1) \
25861 NPU_SET_(ofm_height1_m1) \
25862 NPU_SET_(ofm_region) \
25863 NPU_SET_(kernel_width_m1) \
25864 NPU_SET_(kernel_height_m1) \
25865 NPU_SET_(kernel_stride) \
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025866 NPU_SET_(acc_format) \
25867 NPU_SET_(activation) \
25868 NPU_SET_(activation_min) \
25869 NPU_SET_(activation_max) \
25870 NPU_SET_(weight_region) \
25871 NPU_SET_(scale_region) \
25872 NPU_SET_(ab_start) \
25873 NPU_SET_(blockdep) \
25874 NPU_SET_(dma0_src_region) \
25875 NPU_SET_(dma0_dst_region) \
25876 NPU_SET_(dma0_size0) \
25877 NPU_SET_(dma0_size1) \
25878 NPU_SET_(ifm2_broadcast) \
25879 NPU_SET_(ifm2_scalar) \
25880 NPU_SET_(ifm2_precision) \
25881 NPU_SET_(ifm2_zero_point) \
25882 NPU_SET_(ifm2_width0_m1) \
25883 NPU_SET_(ifm2_height0_m1) \
25884 NPU_SET_(ifm2_height1_m1) \
25885 NPU_SET_(ifm2_ib_start) \
25886 NPU_SET_(ifm2_region) \
25887 NPU_SET_(ifm_base0) \
25888 NPU_SET_(ifm_base1) \
25889 NPU_SET_(ifm_base2) \
25890 NPU_SET_(ifm_base3) \
25891 NPU_SET_(ifm_stride_x) \
25892 NPU_SET_(ifm_stride_y) \
25893 NPU_SET_(ifm_stride_c) \
25894 NPU_SET_(ofm_base0) \
25895 NPU_SET_(ofm_base1) \
25896 NPU_SET_(ofm_base2) \
25897 NPU_SET_(ofm_base3) \
25898 NPU_SET_(ofm_stride_x) \
25899 NPU_SET_(ofm_stride_y) \
25900 NPU_SET_(ofm_stride_c) \
25901 NPU_SET_(weight_base) \
25902 NPU_SET_(weight_length) \
25903 NPU_SET_(scale_base) \
25904 NPU_SET_(scale_length) \
25905 NPU_SET_(ofm_scale) \
25906 NPU_SET_(opa_scale) \
25907 NPU_SET_(opb_scale) \
25908 NPU_SET_(dma0_src) \
25909 NPU_SET_(dma0_dst) \
25910 NPU_SET_(dma0_len) \
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025911 NPU_SET_(ifm2_base0) \
25912 NPU_SET_(ifm2_base1) \
25913 NPU_SET_(ifm2_base2) \
25914 NPU_SET_(ifm2_base3) \
25915 NPU_SET_(ifm2_stride_x) \
25916 NPU_SET_(ifm2_stride_y) \
25917 NPU_SET_(ifm2_stride_c) \
Jonny Svärd136810f2021-10-13 16:04:26 +020025918 NPU_SET_(user_defined0) \
25919 NPU_SET_(user_defined1) \
25920 NPU_SET_(user_defined2) \
25921 NPU_SET_(user_defined3) \
25922 NPU_SET_(user_defined4) \
25923 NPU_SET_(user_defined5) \
25924 NPU_SET_(user_defined6) \
25925 NPU_SET_(user_defined7)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025926
Jonny Svärd136810f2021-10-13 16:04:26 +020025927#define EXPAND_ACC_FORMAT(FUNC, SEP) FUNC(acc_format, I32) SEP FUNC(acc_format, I40) SEP FUNC(acc_format, F16)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025928
Jonny Svärd136810f2021-10-13 16:04:26 +020025929#define EXPAND_ACTIVATION_CLIP_RANGE(FUNC, SEP) \
25930 FUNC(activation_clip_range, OFM_PRECISION) \
25931 SEP FUNC(activation_clip_range, FORCE_UINT8) SEP FUNC(activation_clip_range, FORCE_INT8) \
25932 SEP FUNC(activation_clip_range, FORCE_INT16)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025933
Jonny Svärd136810f2021-10-13 16:04:26 +020025934#define EXPAND_ACTIVATION_FORMAT(FUNC, SEP) FUNC(activation_format, NHWC) SEP FUNC(activation_format, NHCWB16)
Stefan Nannessone2e70242020-08-19 16:01:29 +020025935
Jonny Svärd136810f2021-10-13 16:04:26 +020025936#define EXPAND_ACTIVATION_FUNCTION(FUNC, SEP) \
25937 FUNC(activation_function, RELU) \
25938 SEP FUNC(activation_function, TANH) SEP FUNC(activation_function, SIGMOID) SEP FUNC(activation_function, TABLE_0) \
25939 SEP FUNC(activation_function, TABLE_1) SEP FUNC(activation_function, TABLE_2) \
25940 SEP FUNC(activation_function, TABLE_3) SEP FUNC(activation_function, TABLE_4) \
25941 SEP FUNC(activation_function, TABLE_5) SEP FUNC(activation_function, TABLE_6) \
25942 SEP FUNC(activation_function, TABLE_7)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025943
Jonny Svärd136810f2021-10-13 16:04:26 +020025944#define EXPAND_ACTIVATION_PRECISION(FUNC, SEP) \
25945 FUNC(activation_precision, B8) \
25946 SEP FUNC(activation_precision, B16) SEP FUNC(activation_precision, B32) SEP FUNC(activation_precision, B64)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025947
Jonny Svärd136810f2021-10-13 16:04:26 +020025948#define EXPAND_ACTIVATION_TYPE(FUNC, SEP) FUNC(activation_type, UNSIGNED) SEP FUNC(activation_type, SIGNED)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020025949
Jonny Svärd136810f2021-10-13 16:04:26 +020025950#define EXPAND_AXI_MEM_ENCODING(FUNC, SEP) \
25951 FUNC(axi_mem_encoding, DEVICE_NON_BUFFERABLE) \
25952 SEP FUNC(axi_mem_encoding, DEVICE_BUFFERABLE) SEP FUNC(axi_mem_encoding, NORMAL_NON_CACHEABLE_NON_BUFFERABLE) \
25953 SEP FUNC(axi_mem_encoding, NORMAL_NON_CACHEABLE_BUFFERABLE) \
25954 SEP FUNC(axi_mem_encoding, WRITE_THROUGH_NO_ALLOCATE) \
25955 SEP FUNC(axi_mem_encoding, WRITE_THROUGH_READ_ALLOCATE) \
25956 SEP FUNC(axi_mem_encoding, WRITE_THROUGH_WRITE_ALLOCATE) \
25957 SEP FUNC(axi_mem_encoding, WRITE_THROUGH_READ_AND_WRITE_ALLOCATE) \
25958 SEP FUNC(axi_mem_encoding, WRITE_BACK_NO_ALLOCATE) \
25959 SEP FUNC(axi_mem_encoding, WRITE_BACK_READ_ALLOCATE) \
25960 SEP FUNC(axi_mem_encoding, WRITE_BACK_WRITE_ALLOCATE) \
25961 SEP FUNC(axi_mem_encoding, WRITE_BACK_READ_AND_WRITE_ALLOCATE)
25962
25963#define EXPAND_BROADCAST_MODE(FUNC, SEP) FUNC(broadcast_mode, DISABLE) SEP FUNC(broadcast_mode, ENABLE)
25964
25965#define EXPAND_CMD0_OPCODE(FUNC, SEP) \
25966 FUNC(cmd0_opcode, NPU_OP_STOP) \
25967 SEP FUNC(cmd0_opcode, NPU_OP_IRQ) SEP FUNC(cmd0_opcode, NPU_OP_CONV) SEP FUNC( \
25968 cmd0_opcode, NPU_OP_DEPTHWISE) SEP FUNC(cmd0_opcode, NPU_OP_POOL) SEP FUNC(cmd0_opcode, NPU_OP_ELEMENTWISE) \
25969 SEP FUNC(cmd0_opcode, NPU_OP_DMA_START) SEP FUNC(cmd0_opcode, NPU_OP_DMA_WAIT) SEP FUNC( \
25970 cmd0_opcode, NPU_OP_KERNEL_WAIT) SEP FUNC(cmd0_opcode, NPU_OP_PMU_MASK) SEP FUNC(cmd0_opcode, \
25971 NPU_SET_IFM_PAD_TOP) \
25972 SEP FUNC(cmd0_opcode, NPU_SET_IFM_PAD_LEFT) SEP FUNC(cmd0_opcode, NPU_SET_IFM_PAD_RIGHT) SEP FUNC( \
25973 cmd0_opcode, NPU_SET_IFM_PAD_BOTTOM) SEP FUNC(cmd0_opcode, \
25974 NPU_SET_IFM_DEPTH_M1) SEP FUNC(cmd0_opcode, \
25975 NPU_SET_IFM_PRECISION) \
25976 SEP FUNC(cmd0_opcode, NPU_SET_IFM_UPSCALE) SEP FUNC(cmd0_opcode, NPU_SET_IFM_ZERO_POINT) SEP FUNC( \
25977 cmd0_opcode, NPU_SET_IFM_WIDTH0_M1) SEP FUNC(cmd0_opcode, NPU_SET_IFM_HEIGHT0_M1) \
25978 SEP FUNC(cmd0_opcode, NPU_SET_IFM_HEIGHT1_M1) SEP FUNC(cmd0_opcode, NPU_SET_IFM_IB_END) SEP FUNC( \
25979 cmd0_opcode, NPU_SET_IFM_REGION) SEP FUNC(cmd0_opcode, NPU_SET_OFM_WIDTH_M1) \
25980 SEP FUNC(cmd0_opcode, NPU_SET_OFM_HEIGHT_M1) SEP FUNC(cmd0_opcode, NPU_SET_OFM_DEPTH_M1) \
25981 SEP FUNC(cmd0_opcode, NPU_SET_OFM_PRECISION) SEP FUNC( \
25982 cmd0_opcode, NPU_SET_OFM_BLK_WIDTH_M1) SEP FUNC(cmd0_opcode, \
25983 NPU_SET_OFM_BLK_HEIGHT_M1) \
25984 SEP FUNC(cmd0_opcode, NPU_SET_OFM_BLK_DEPTH_M1) SEP FUNC( \
25985 cmd0_opcode, NPU_SET_OFM_ZERO_POINT) SEP FUNC(cmd0_opcode, NPU_SET_OFM_WIDTH0_M1) \
25986 SEP FUNC(cmd0_opcode, NPU_SET_OFM_HEIGHT0_M1) SEP FUNC( \
25987 cmd0_opcode, \
25988 NPU_SET_OFM_HEIGHT1_M1) SEP FUNC(cmd0_opcode, NPU_SET_OFM_REGION) \
25989 SEP FUNC(cmd0_opcode, NPU_SET_KERNEL_WIDTH_M1) SEP FUNC( \
25990 cmd0_opcode, \
25991 NPU_SET_KERNEL_HEIGHT_M1) SEP FUNC(cmd0_opcode, NPU_SET_KERNEL_STRIDE) \
25992 SEP FUNC(cmd0_opcode, NPU_SET_ACC_FORMAT) SEP FUNC( \
25993 cmd0_opcode, \
25994 NPU_SET_ACTIVATION) SEP FUNC(cmd0_opcode, NPU_SET_ACTIVATION_MIN) \
25995 SEP FUNC(cmd0_opcode, NPU_SET_ACTIVATION_MAX) SEP FUNC( \
25996 cmd0_opcode, \
25997 NPU_SET_WEIGHT_REGION) SEP FUNC(cmd0_opcode, NPU_SET_SCALE_REGION) \
25998 SEP FUNC(cmd0_opcode, \
25999 NPU_SET_AB_START) SEP FUNC(cmd0_opcode, NPU_SET_BLOCKDEP) \
26000 SEP FUNC(cmd0_opcode, NPU_SET_DMA0_SRC_REGION) SEP FUNC( \
26001 cmd0_opcode, \
26002 NPU_SET_DMA0_DST_REGION) SEP FUNC(cmd0_opcode, \
26003 NPU_SET_DMA0_SIZE0) \
26004 SEP FUNC(cmd0_opcode, NPU_SET_DMA0_SIZE1) SEP FUNC( \
26005 cmd0_opcode, \
26006 NPU_SET_IFM2_BROADCAST) \
26007 SEP FUNC(cmd0_opcode, NPU_SET_IFM2_SCALAR) SEP FUNC( \
26008 cmd0_opcode, \
26009 NPU_SET_IFM2_PRECISION) \
26010 SEP FUNC(cmd0_opcode, NPU_SET_IFM2_ZERO_POINT) \
26011 SEP FUNC(cmd0_opcode, NPU_SET_IFM2_WIDTH0_M1) \
26012 SEP FUNC(cmd0_opcode, \
26013 NPU_SET_IFM2_HEIGHT0_M1) \
26014 SEP FUNC(cmd0_opcode, \
26015 NPU_SET_IFM2_HEIGHT1_M1) \
26016 SEP FUNC(cmd0_opcode, \
26017 NPU_SET_IFM2_IB_START) \
26018 SEP FUNC(cmd0_opcode, \
26019 NPU_SET_IFM2_REGION)
26020
26021#define EXPAND_CMD1_OPCODE(FUNC, SEP) \
26022 FUNC(cmd1_opcode, NPU_SET_IFM_BASE0) \
26023 SEP FUNC(cmd1_opcode, NPU_SET_IFM_BASE1) SEP FUNC(cmd1_opcode, NPU_SET_IFM_BASE2) SEP FUNC( \
26024 cmd1_opcode, NPU_SET_IFM_BASE3) SEP FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_X) \
26025 SEP FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_Y) SEP FUNC(cmd1_opcode, NPU_SET_IFM_STRIDE_C) SEP FUNC( \
26026 cmd1_opcode, NPU_SET_OFM_BASE0) SEP FUNC(cmd1_opcode, NPU_SET_OFM_BASE1) \
26027 SEP FUNC(cmd1_opcode, NPU_SET_OFM_BASE2) SEP FUNC(cmd1_opcode, NPU_SET_OFM_BASE3) SEP FUNC( \
26028 cmd1_opcode, NPU_SET_OFM_STRIDE_X) SEP FUNC(cmd1_opcode, NPU_SET_OFM_STRIDE_Y) \
26029 SEP FUNC(cmd1_opcode, NPU_SET_OFM_STRIDE_C) SEP FUNC(cmd1_opcode, NPU_SET_WEIGHT_BASE) SEP FUNC( \
26030 cmd1_opcode, NPU_SET_WEIGHT_LENGTH) SEP FUNC(cmd1_opcode, NPU_SET_SCALE_BASE) \
26031 SEP FUNC(cmd1_opcode, NPU_SET_SCALE_LENGTH) SEP FUNC(cmd1_opcode, NPU_SET_OFM_SCALE) SEP FUNC( \
26032 cmd1_opcode, NPU_SET_OPA_SCALE) SEP FUNC(cmd1_opcode, NPU_SET_OPB_SCALE) \
26033 SEP FUNC(cmd1_opcode, NPU_SET_DMA0_SRC) SEP FUNC(cmd1_opcode, NPU_SET_DMA0_DST) SEP FUNC( \
26034 cmd1_opcode, NPU_SET_DMA0_LEN) SEP FUNC(cmd1_opcode, NPU_SET_IFM2_BASE0) \
26035 SEP FUNC(cmd1_opcode, NPU_SET_IFM2_BASE1) SEP FUNC(cmd1_opcode, NPU_SET_IFM2_BASE2) \
26036 SEP FUNC(cmd1_opcode, NPU_SET_IFM2_BASE3) SEP FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_X) \
26037 SEP FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_Y) \
26038 SEP FUNC(cmd1_opcode, NPU_SET_IFM2_STRIDE_C) \
26039 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED0) \
26040 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED1) \
26041 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED2) \
26042 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED3) \
26043 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED4) \
26044 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED5) \
26045 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED6) \
26046 SEP FUNC(cmd1_opcode, NPU_SET_USER_DEFINED7)
26047
26048#define EXPAND_CMD_CTRL(FUNC, SEP) FUNC(cmd_ctrl, CMD0_CTRL) SEP FUNC(cmd_ctrl, CMD1_CTRL)
26049
26050#define EXPAND_CUSTOM_DMA_CS(FUNC, SEP) FUNC(custom_dma_cs, DISABLE) SEP FUNC(custom_dma_cs, ENABLE)
26051
26052#define EXPAND_CUSTOM_DMA(FUNC, SEP) FUNC(custom_dma, NOT_IMPLEMENTED) SEP FUNC(custom_dma, IMPLEMENTED)
26053
26054#define EXPAND_DMA_FAULT_SRC(FUNC, SEP) FUNC(dma_fault_src, AXI_M0) SEP FUNC(dma_fault_src, AXI_M1)
26055
26056#define EXPAND_DMA_REGION_MODE(FUNC, SEP) FUNC(dma_region_mode, EXTERNAL) SEP FUNC(dma_region_mode, INTERNAL)
26057
26058#define EXPAND_DMA_STRIDE_MODE(FUNC, SEP) FUNC(dma_stride_mode, D1)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026059
26060#define EXPAND_ELEMENTWISE_MODE(FUNC, SEP) \
26061 FUNC(elementwise_mode, MUL) \
26062 SEP FUNC(elementwise_mode, ADD) SEP FUNC(elementwise_mode, SUB) SEP FUNC(elementwise_mode, MIN) \
26063 SEP FUNC(elementwise_mode, MAX) SEP FUNC(elementwise_mode, LRELU) SEP FUNC(elementwise_mode, ABS) \
26064 SEP FUNC(elementwise_mode, CLZ) SEP FUNC(elementwise_mode, SHR) SEP FUNC(elementwise_mode, SHL)
26065
Jonny Svärd136810f2021-10-13 16:04:26 +020026066#define EXPAND_FUNCTIONAL_SAFETY(FUNC, SEP) \
26067 FUNC(functional_safety, NOT_IMPLEMENTED) SEP FUNC(functional_safety, IMPLEMENTED)
26068
26069#define EXPAND_IFM2_OPERAND_ORDER(FUNC, SEP) FUNC(ifm2_operand_order, ORDER_B) SEP FUNC(ifm2_operand_order, ORDER_A)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026070
26071#define EXPAND_IFM_SCALE_MODE(FUNC, SEP) \
Jonny Svärd136810f2021-10-13 16:04:26 +020026072 FUNC(ifm_scale_mode, OPA_OPB_16) SEP FUNC(ifm_scale_mode, OPA_32) SEP FUNC(ifm_scale_mode, OPB_32)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026073
Jonny Svärd136810f2021-10-13 16:04:26 +020026074#define EXPAND_IFM_UPSCALE_MODE(FUNC, SEP) \
26075 FUNC(ifm_upscale_mode, NONE) SEP FUNC(ifm_upscale_mode, NEAREST) SEP FUNC(ifm_upscale_mode, ZEROS)
Diqing Zhong04118062020-04-15 01:19:12 +020026076
Jonny Svärd136810f2021-10-13 16:04:26 +020026077#define EXPAND_KERNEL_DECOMPOSITION(FUNC, SEP) FUNC(kernel_decomposition, D8X8) SEP FUNC(kernel_decomposition, D4X4)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026078
Jonny Svärd136810f2021-10-13 16:04:26 +020026079#define EXPAND_KERNEL_DILATION(FUNC, SEP) FUNC(kernel_dilation, NONE) SEP FUNC(kernel_dilation, X2)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026080
Jonny Svärd136810f2021-10-13 16:04:26 +020026081#define EXPAND_MAX_BEATS(FUNC, SEP) FUNC(max_beats, B64) SEP FUNC(max_beats, B128) SEP FUNC(max_beats, B256)
26082
26083#define EXPAND_MEM_ATTR(FUNC, SEP) \
26084 FUNC(mem_attr, AXI0_OUTSTANDING_COUNTER0) \
26085 SEP FUNC(mem_attr, AXI0_OUTSTANDING_COUNTER1) SEP FUNC(mem_attr, AXI1_OUTSTANDING_COUNTER2) \
26086 SEP FUNC(mem_attr, AXI1_OUTSTANDING_COUNTER3)
26087
26088#define EXPAND_OFM_SCALE_MODE(FUNC, SEP) FUNC(ofm_scale_mode, PER_CHANNEL) SEP FUNC(ofm_scale_mode, GLOBAL)
26089
26090#define EXPAND_PMU_AXI_CHANNEL(FUNC, SEP) \
26091 FUNC(pmu_axi_channel, RD_CMD) \
26092 SEP FUNC(pmu_axi_channel, RD_IFM) SEP FUNC(pmu_axi_channel, RD_WEIGHTS) SEP FUNC(pmu_axi_channel, RD_SCALE_BIAS) \
26093 SEP FUNC(pmu_axi_channel, RD_MEM2MEM) SEP FUNC(pmu_axi_channel, WR_OFM) SEP FUNC(pmu_axi_channel, WR_MEM2MEM)
26094
26095#define EXPAND_PMU_EVENT(FUNC, SEP) \
26096 FUNC(pmu_event, NO_EVENT) \
26097 SEP FUNC(pmu_event, CYCLE) SEP FUNC(pmu_event, NPU_IDLE) SEP FUNC(pmu_event, CC_STALLED_ON_BLOCKDEP) SEP FUNC( \
26098 pmu_event, CC_STALLED_ON_SHRAM_RECONFIG) SEP FUNC(pmu_event, NPU_ACTIVE) SEP FUNC(pmu_event, MAC_ACTIVE) \
26099 SEP FUNC(pmu_event, MAC_ACTIVE_8BIT) SEP FUNC(pmu_event, MAC_ACTIVE_16BIT) SEP FUNC( \
26100 pmu_event, MAC_DPU_ACTIVE) SEP FUNC(pmu_event, MAC_STALLED_BY_WD_ACC) SEP FUNC(pmu_event, \
26101 MAC_STALLED_BY_WD) \
26102 SEP FUNC(pmu_event, MAC_STALLED_BY_ACC) SEP FUNC(pmu_event, MAC_STALLED_BY_IB) SEP FUNC( \
26103 pmu_event, \
26104 MAC_ACTIVE_32BIT) SEP FUNC(pmu_event, \
26105 MAC_STALLED_BY_INT_W) SEP FUNC(pmu_event, \
26106 MAC_STALLED_BY_INT_ACC) SEP FUNC(pmu_event, \
26107 AO_ACTIVE) \
26108 SEP FUNC(pmu_event, AO_ACTIVE_8BIT) SEP FUNC(pmu_event, AO_ACTIVE_16BIT) SEP FUNC( \
26109 pmu_event, AO_STALLED_BY_OFMP_OB) SEP FUNC(pmu_event, AO_STALLED_BY_OFMP) SEP \
26110 FUNC(pmu_event, AO_STALLED_BY_OB) SEP FUNC(pmu_event, AO_STALLED_BY_ACC_IB) SEP FUNC( \
26111 pmu_event, AO_STALLED_BY_ACC) SEP FUNC(pmu_event, AO_STALLED_BY_IB) SEP \
26112 FUNC(pmu_event, WD_ACTIVE) SEP FUNC(pmu_event, WD_STALLED) SEP FUNC(pmu_event, WD_STALLED_BY_WS) SEP FUNC( \
26113 pmu_event, WD_STALLED_BY_WD_BUF) SEP FUNC(pmu_event, \
26114 WD_PARSE_ACTIVE) SEP \
26115 FUNC(pmu_event, WD_PARSE_STALLED) SEP FUNC(pmu_event, WD_PARSE_STALLED_IN) SEP FUNC( \
26116 pmu_event, WD_PARSE_STALLED_OUT) SEP FUNC(pmu_event, \
26117 WD_TRANS_WS) SEP \
26118 FUNC(pmu_event, WD_TRANS_WB) SEP FUNC(pmu_event, WD_TRANS_DW0) SEP FUNC( \
26119 pmu_event, WD_TRANS_DW1) SEP FUNC(pmu_event, \
26120 AXI0_RD_TRANS_ACCEPTED) SEP \
26121 FUNC(pmu_event, AXI0_RD_TRANS_COMPLETED) SEP FUNC(pmu_event, AXI0_RD_DATA_BEAT_RECEIVED) SEP FUNC( \
26122 pmu_event, AXI0_RD_TRAN_REQ_STALLED) SEP FUNC(pmu_event, \
26123 AXI0_WR_TRANS_ACCEPTED) SEP \
26124 FUNC(pmu_event, AXI0_WR_TRANS_COMPLETED_M) SEP FUNC( \
26125 pmu_event, AXI0_WR_TRANS_COMPLETED_S) SEP \
26126 FUNC(pmu_event, AXI0_WR_DATA_BEAT_WRITTEN) SEP FUNC( \
26127 pmu_event, AXI0_WR_TRAN_REQ_STALLED) SEP \
26128 FUNC(pmu_event, AXI0_WR_DATA_BEAT_STALLED) SEP FUNC( \
26129 pmu_event, \
26130 AXI0_ENABLED_CYCLES) SEP FUNC(pmu_event, \
26131 AXI0_RD_STALL_LIMIT) SEP \
26132 FUNC(pmu_event, AXI0_WR_STALL_LIMIT) SEP FUNC( \
26133 pmu_event, \
26134 AXI_LATENCY_ANY) SEP FUNC(pmu_event, \
26135 AXI_LATENCY_32) SEP \
26136 FUNC(pmu_event, \
26137 AXI_LATENCY_64) SEP FUNC(pmu_event, \
26138 AXI_LATENCY_128) SEP \
26139 FUNC(pmu_event, AXI_LATENCY_256) SEP FUNC( \
26140 pmu_event, \
26141 AXI_LATENCY_512) SEP FUNC(pmu_event, \
26142 AXI_LATENCY_1024) SEP \
26143 FUNC(pmu_event, ECC_DMA) SEP FUNC( \
26144 pmu_event, \
26145 ECC_SB0) SEP FUNC(pmu_event, \
26146 AXI1_RD_TRANS_ACCEPTED) SEP \
26147 FUNC(pmu_event, AXI1_RD_TRANS_COMPLETED) SEP FUNC( \
26148 pmu_event, AXI1_RD_DATA_BEAT_RECEIVED) SEP \
26149 FUNC(pmu_event, AXI1_RD_TRAN_REQ_STALLED) SEP FUNC( \
26150 pmu_event, AXI1_WR_TRANS_ACCEPTED) SEP \
26151 FUNC(pmu_event, AXI1_WR_TRANS_COMPLETED_M) SEP FUNC( \
26152 pmu_event, \
26153 AXI1_WR_TRANS_COMPLETED_S) SEP \
26154 FUNC(pmu_event, \
26155 AXI1_WR_DATA_BEAT_WRITTEN) SEP \
26156 FUNC(pmu_event, \
26157 AXI1_WR_TRAN_REQ_STALLED) SEP \
26158 FUNC( \
26159 pmu_event, \
26160 AXI1_WR_DATA_BEAT_STALLED) SEP \
26161 FUNC( \
26162 pmu_event, \
26163 AXI1_ENABLED_CYCLES) SEP \
26164 FUNC( \
26165 pmu_event, \
26166 AXI1_RD_STALL_LIMIT) SEP \
26167 FUNC( \
26168 pmu_event, \
26169 AXI1_WR_STALL_LIMIT) \
26170 SEP FUNC( \
26171 pmu_event, \
Stefan Nannessone2e70242020-08-19 16:01:29 +020026172 ECC_SB1)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026173
26174#define EXPAND_POOLING_MODE(FUNC, SEP) \
26175 FUNC(pooling_mode, MAX) SEP FUNC(pooling_mode, AVERAGE) SEP FUNC(pooling_mode, REDUCE_SUM)
26176
26177#define EXPAND_PRIVILEGE_LEVEL(FUNC, SEP) FUNC(privilege_level, USER) SEP FUNC(privilege_level, PRIVILEGED)
26178
Jonny Svärd136810f2021-10-13 16:04:26 +020026179#define EXPAND_ROUND_MODE(FUNC, SEP) FUNC(round_mode, DBL) SEP FUNC(round_mode, TRUNCATE) SEP FUNC(round_mode, NATURAL)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026180
26181#define EXPAND_SECURITY_LEVEL(FUNC, SEP) FUNC(security_level, SECURE) SEP FUNC(security_level, NON_SECURE)
26182
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020026183#define EXPAND_STATE(FUNC, SEP) FUNC(state, STOPPED) SEP FUNC(state, RUNNING)
26184
Jonny Svärd136810f2021-10-13 16:04:26 +020026185#define EXPAND_WD_CORE_SLICE_STATE(FUNC, SEP) \
26186 FUNC(wd_core_slice_state, HEADER) SEP FUNC(wd_core_slice_state, PALETTE) SEP FUNC(wd_core_slice_state, WEIGHTS)
26187
26188#define EXPAND_WD_CTRL_STATE(FUNC, SEP) \
26189 FUNC(wd_ctrl_state, IDLE) \
26190 SEP FUNC(wd_ctrl_state, DRAIN) SEP FUNC(wd_ctrl_state, OFD_INIT) SEP FUNC(wd_ctrl_state, OFD_RUN)
26191
26192#define EXPAND_WEIGHT_ORDER(FUNC, SEP) FUNC(weight_order, DEPTH_FIRST) SEP FUNC(weight_order, PART_KERNEL_FIRST)
26193
26194#ifdef __cplusplus
26195}
26196#endif
26197#endif