1 | |
2 | use crate::metadata::ir::*; |
3 | pub(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 | |