1
2use crate::metadata::ir::*;
3pub(crate) static REGISTERS: IR = IR {
4 blocks: &[
5 Block {
6 name: "Cordic",
7 extends: None,
8 description: Some(
9 "CORDIC co-processor.",
10 ),
11 items: &[
12 BlockItem {
13 name: "csr",
14 description: Some(
15 "Control and status register.",
16 ),
17 array: None,
18 byte_offset: 0x0,
19 inner: BlockItemInner::Register(
20 Register {
21 access: Access::ReadWrite,
22 bit_size: 32,
23 fieldset: Some(
24 "Csr",
25 ),
26 },
27 ),
28 },
29 BlockItem {
30 name: "wdata",
31 description: Some(
32 "Argument register.",
33 ),
34 array: None,
35 byte_offset: 0x4,
36 inner: BlockItemInner::Register(
37 Register {
38 access: Access::ReadWrite,
39 bit_size: 32,
40 fieldset: None,
41 },
42 ),
43 },
44 BlockItem {
45 name: "rdata",
46 description: Some(
47 "Result register.",
48 ),
49 array: None,
50 byte_offset: 0x8,
51 inner: BlockItemInner::Register(
52 Register {
53 access: Access::ReadWrite,
54 bit_size: 32,
55 fieldset: None,
56 },
57 ),
58 },
59 ],
60 },
61 ],
62 fieldsets: &[
63 FieldSet {
64 name: "Csr",
65 extends: None,
66 description: Some(
67 "Control and status register.",
68 ),
69 bit_size: 32,
70 fields: &[
71 Field {
72 name: "func",
73 description: Some(
74 "Function.",
75 ),
76 bit_offset: BitOffset::Regular(
77 RegularBitOffset {
78 offset: 0,
79 },
80 ),
81 bit_size: 4,
82 array: None,
83 enumm: Some(
84 "Func",
85 ),
86 },
87 Field {
88 name: "precision",
89 description: Some(
90 "Precision required (number of iterations/cycles), where PRECISION = (number of iterations/4).",
91 ),
92 bit_offset: BitOffset::Regular(
93 RegularBitOffset {
94 offset: 4,
95 },
96 ),
97 bit_size: 4,
98 array: None,
99 enumm: Some(
100 "Precision",
101 ),
102 },
103 Field {
104 name: "scale",
105 description: Some(
106 "Scaling factor.\nInput value has been multiplied by 2^(-n) before for argument.\nOutput value will need to be multiplied by 2^n later for results.",
107 ),
108 bit_offset: BitOffset::Regular(
109 RegularBitOffset {
110 offset: 8,
111 },
112 ),
113 bit_size: 3,
114 array: None,
115 enumm: Some(
116 "Scale",
117 ),
118 },
119 Field {
120 name: "ien",
121 description: Some(
122 "Enable interrupt.",
123 ),
124 bit_offset: BitOffset::Regular(
125 RegularBitOffset {
126 offset: 16,
127 },
128 ),
129 bit_size: 1,
130 array: None,
131 enumm: None,
132 },
133 Field {
134 name: "dmaren",
135 description: Some(
136 "Enable DMA wread channel.",
137 ),
138 bit_offset: BitOffset::Regular(
139 RegularBitOffset {
140 offset: 17,
141 },
142 ),
143 bit_size: 1,
144 array: None,
145 enumm: None,
146 },
147 Field {
148 name: "dmawen",
149 description: Some(
150 "Enable DMA write channel.",
151 ),
152 bit_offset: BitOffset::Regular(
153 RegularBitOffset {
154 offset: 18,
155 },
156 ),
157 bit_size: 1,
158 array: None,
159 enumm: None,
160 },
161 Field {
162 name: "nres",
163 description: Some(
164 "Number of results in the RDATA register.",
165 ),
166 bit_offset: BitOffset::Regular(
167 RegularBitOffset {
168 offset: 19,
169 },
170 ),
171 bit_size: 1,
172 array: None,
173 enumm: Some(
174 "Num",
175 ),
176 },
177 Field {
178 name: "nargs",
179 description: Some(
180 "Number of arguments expected by the WDATA register.",
181 ),
182 bit_offset: BitOffset::Regular(
183 RegularBitOffset {
184 offset: 20,
185 },
186 ),
187 bit_size: 1,
188 array: None,
189 enumm: Some(
190 "Num",
191 ),
192 },
193 Field {
194 name: "ressize",
195 description: Some(
196 "Width of output data.",
197 ),
198 bit_offset: BitOffset::Regular(
199 RegularBitOffset {
200 offset: 21,
201 },
202 ),
203 bit_size: 1,
204 array: None,
205 enumm: Some(
206 "Size",
207 ),
208 },
209 Field {
210 name: "argsize",
211 description: Some(
212 "Width of input data.",
213 ),
214 bit_offset: BitOffset::Regular(
215 RegularBitOffset {
216 offset: 22,
217 },
218 ),
219 bit_size: 1,
220 array: None,
221 enumm: Some(
222 "Size",
223 ),
224 },
225 Field {
226 name: "rrdy",
227 description: Some(
228 "Result ready flag.",
229 ),
230 bit_offset: BitOffset::Regular(
231 RegularBitOffset {
232 offset: 31,
233 },
234 ),
235 bit_size: 1,
236 array: None,
237 enumm: None,
238 },
239 ],
240 },
241 ],
242 enums: &[
243 Enum {
244 name: "Func",
245 description: None,
246 bit_size: 4,
247 variants: &[
248 EnumVariant {
249 name: "COSINE",
250 description: Some(
251 "Cosine function.",
252 ),
253 value: 0,
254 },
255 EnumVariant {
256 name: "SINE",
257 description: Some(
258 "Sine function.",
259 ),
260 value: 1,
261 },
262 EnumVariant {
263 name: "PHASE",
264 description: Some(
265 "Phase function.",
266 ),
267 value: 2,
268 },
269 EnumVariant {
270 name: "MODULUS",
271 description: Some(
272 "Modulus function.",
273 ),
274 value: 3,
275 },
276 EnumVariant {
277 name: "ARCTANGENT",
278 description: Some(
279 "Arctangent function.",
280 ),
281 value: 4,
282 },
283 EnumVariant {
284 name: "HYPERBOLIC_COSINE",
285 description: Some(
286 "Hyperbolic Cosine function.",
287 ),
288 value: 5,
289 },
290 EnumVariant {
291 name: "HYPERBOLIC_SINE",
292 description: Some(
293 "Hyperbolic Sine function.",
294 ),
295 value: 6,
296 },
297 EnumVariant {
298 name: "ARCTANH",
299 description: Some(
300 "Arctanh function.",
301 ),
302 value: 7,
303 },
304 EnumVariant {
305 name: "NATURAL_LOGARITHM",
306 description: Some(
307 "Natural Logarithm function.",
308 ),
309 value: 8,
310 },
311 EnumVariant {
312 name: "SQUARE_ROOT",
313 description: Some(
314 "Square Root function.",
315 ),
316 value: 9,
317 },
318 ],
319 },
320 Enum {
321 name: "Num",
322 description: None,
323 bit_size: 1,
324 variants: &[
325 EnumVariant {
326 name: "NUM1",
327 description: Some(
328 "1 input/output",
329 ),
330 value: 0,
331 },
332 EnumVariant {
333 name: "NUM2",
334 description: Some(
335 "2 input/output",
336 ),
337 value: 1,
338 },
339 ],
340 },
341 Enum {
342 name: "Precision",
343 description: None,
344 bit_size: 4,
345 variants: &[
346 EnumVariant {
347 name: "ITERS4",
348 description: Some(
349 "4 iterations.",
350 ),
351 value: 1,
352 },
353 EnumVariant {
354 name: "ITERS8",
355 description: Some(
356 "8 iterations.",
357 ),
358 value: 2,
359 },
360 EnumVariant {
361 name: "ITERS12",
362 description: Some(
363 "12 iterations.",
364 ),
365 value: 3,
366 },
367 EnumVariant {
368 name: "ITERS16",
369 description: Some(
370 "16 iterations.",
371 ),
372 value: 4,
373 },
374 EnumVariant {
375 name: "ITERS20",
376 description: Some(
377 "20 iterations.",
378 ),
379 value: 5,
380 },
381 EnumVariant {
382 name: "ITERS24",
383 description: Some(
384 "24 iterations.",
385 ),
386 value: 6,
387 },
388 EnumVariant {
389 name: "ITERS28",
390 description: Some(
391 "28 iterations.",
392 ),
393 value: 7,
394 },
395 EnumVariant {
396 name: "ITERS32",
397 description: Some(
398 "32 iterations.",
399 ),
400 value: 8,
401 },
402 EnumVariant {
403 name: "ITERS36",
404 description: Some(
405 "36 iterations.",
406 ),
407 value: 9,
408 },
409 EnumVariant {
410 name: "ITERS40",
411 description: Some(
412 "40 iterations.",
413 ),
414 value: 10,
415 },
416 EnumVariant {
417 name: "ITERS44",
418 description: Some(
419 "44 iterations.",
420 ),
421 value: 11,
422 },
423 EnumVariant {
424 name: "ITERS48",
425 description: Some(
426 "48 iterations.",
427 ),
428 value: 12,
429 },
430 EnumVariant {
431 name: "ITERS52",
432 description: Some(
433 "52 iterations.",
434 ),
435 value: 13,
436 },
437 EnumVariant {
438 name: "ITERS56",
439 description: Some(
440 "56 iterations.",
441 ),
442 value: 14,
443 },
444 EnumVariant {
445 name: "ITERS60",
446 description: Some(
447 "60 iterations.",
448 ),
449 value: 15,
450 },
451 ],
452 },
453 Enum {
454 name: "Scale",
455 description: None,
456 bit_size: 3,
457 variants: &[
458 EnumVariant {
459 name: "A1_R1",
460 description: Some(
461 "Argument multiplied by 1, result multiplied by 1",
462 ),
463 value: 0,
464 },
465 EnumVariant {
466 name: "A1O2_R2",
467 description: Some(
468 "Argument multiplied by 1/2, result multiplied by 2",
469 ),
470 value: 1,
471 },
472 EnumVariant {
473 name: "A1O4_R4",
474 description: Some(
475 "Argument multiplied by 1/4, result multiplied by 4",
476 ),
477 value: 2,
478 },
479 EnumVariant {
480 name: "A1O8_R8",
481 description: Some(
482 "Argument multiplied by 1/8, result multiplied by 8",
483 ),
484 value: 3,
485 },
486 EnumVariant {
487 name: "A1O16_R16",
488 description: Some(
489 "Argument multiplied by 1/16, result multiplied by 16",
490 ),
491 value: 4,
492 },
493 EnumVariant {
494 name: "A1O32_R32",
495 description: Some(
496 "Argument multiplied by 1/32, result multiplied by 32",
497 ),
498 value: 5,
499 },
500 EnumVariant {
501 name: "A1O64_R64",
502 description: Some(
503 "Argument multiplied by 1/64, result multiplied by 64",
504 ),
505 value: 6,
506 },
507 EnumVariant {
508 name: "A1O128_R128",
509 description: Some(
510 "Argument multiplied by 1/128, result multiplied by 128",
511 ),
512 value: 7,
513 },
514 ],
515 },
516 Enum {
517 name: "Size",
518 description: None,
519 bit_size: 1,
520 variants: &[
521 EnumVariant {
522 name: "BITS32",
523 description: Some(
524 "Use 32 bit input/output values.",
525 ),
526 value: 0,
527 },
528 EnumVariant {
529 name: "BITS16",
530 description: Some(
531 "Use 16 bit input/output values.",
532 ),
533 value: 1,
534 },
535 ],
536 },
537 ],
538};
539