aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/ic_reg_maps/gen_lmx2572_regs.py
blob: 0995f57e2ef6c6d336d2e20f0c38732591ca4e87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
#!/usr/bin/env python
#
# Copyright 2019 Ettus Research, a National Instruments Brand
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
"""
Register map for LMX2572
"""

########################################################################
# Template for raw text data describing registers
# name addr[bit range inclusive] default optional enums
########################################################################

REGS_TMPL = """\
########################################################################
## address 0
########################################################################
powerdown               0[0]        0       normal_operation, power_down
reset                   0[1]        0       normal_operation, reset
muxout_ld_sel           0[2]        1       register_readback, lock_detect
fcal_en                 0[3]        1       invalid, enable
reg0_reserved0          0[4]        1
fcal_lpfd_adj           0[5:6]      0
fcal_hpfd_adj           0[7:8]      0
out_mute                0[9]        1       disabled, muted
reg0_reserved1          0[10]       0
add_hold                0[11]       0
reg0_reserved2          0[12:13]    0x2
vco_phase_sync_en       0[14]       0       normal_operation, phase_sync_mode
ramp_en                 0[15]       0       normal_operation, frequency_ramping
########################################################################
## address 1
########################################################################
cal_clk_div             1[0:2]      0
reg1_reserved0          1[3:15]     0x101
########################################################################
## address 2
########################################################################
reg2_reserved0          2[0:15]     0x500
########################################################################
## address 3
########################################################################
reg3_reserved0          3[0:15]     0x782
########################################################################
## address 4
########################################################################
reg4_reserved0          4[0:15]     0xA43
########################################################################
## address 5
########################################################################
reg5_reserved0          5[0:10]     0xC8
ipbuf_term              5[11]       0       normal_operation, internally_terminated
ipbuf_type              5[12]       1       differential, single_ended
reg5_reserved1          5[13:15]    1
########################################################################
## address 6
########################################################################
reg6_reserved0          6[0:10]     0x2
ldo_dly                 6[11:15]    0x19
########################################################################
## address 7
########################################################################
reg7_reserved0          7[0:13]     0xB2
out_force               7[14]       0       use_out_mute, no_mute
reg7_reserved1          7[15]       0
########################################################################
## address 8
########################################################################
reg8_reserved0          8[0:10]     0
vco_capctrl_force       8[11]       0       normal_operation, use_vco_capctrl
reg8_reserved1          8[12:13]    0x2
vco_daciset_force       8[14]       0       normal_operation, use_vco_daciset
reg8_reserved2          8[15]       0
########################################################################
## address 9
########################################################################
reg9_reserved0          9[0:11]     0x4
osc_2x                  9[12]       0       disabled, enabled
reg9_reserved1          9[13]       0
mult_hi                 9[14]       0       less_than_equal_to_100M, greater_than_100M
reg9_reserved2          9[15]       0
########################################################################
## address 10
########################################################################
reg10_reserved0         10[0:6]     0x78
mult                    10[7:11]    1
reg10_reserved1         10[12:15]   1
########################################################################
## address 11
########################################################################
reg11_reserved0         11[0:3]     0x8
pll_r                   11[4:11]    1
reg11_reserved1         11[12:15]   0xB
########################################################################
## address 12
########################################################################
pll_r_pre               12[0:11]    1
reg12_reserved0         12[12:15]   0x5
########################################################################
## address 13
########################################################################
reg13_reserved0          13[0:15]   0x4000
########################################################################
## address 14
########################################################################
reg14_reserved0         14[0:2]     0x0
cpg                     14[3:6]     0x8
reg14_reserved1         14[7:15]    0x30
########################################################################
## address 15
########################################################################
reg15_reserved0          15[0:15]   0x60E
########################################################################
## address 16
########################################################################
vco_daciset             16[0:8]     0x80
reg16_reserved0         16[9:15]    0
########################################################################
## address 17
########################################################################
vco_daciset_strt        17[0:8]     0x96
reg17_reserved0         17[9:15]    0
########################################################################
## address 18
########################################################################
reg18_reserved0          18[0:15]   0x64
########################################################################
## address 19
########################################################################
vco_capctrl             19[0:7]     0xB7
reg19_reserved0         19[8:15]    0x27
########################################################################
## address 20
########################################################################
reg20_reserved0         20[0:9]     0x48
vco_sel_force           20[10]      0       disabled, enabled
vco_sel                 20[11:13]   0x6
reg20_reserved1         20[14:15]   1
########################################################################
## address 21
########################################################################
reg21_reserved0         21[0:15]    0x409
########################################################################
## address 22
########################################################################
reg22_reserved0         22[0:15]    1
########################################################################
## address 23
########################################################################
reg23_reserved0         23[0:15]    0x7C
########################################################################
## address 24
########################################################################
reg24_reserved0         24[0:15]    0x71A
########################################################################
## address 25
########################################################################
reg25_reserved0         25[0:15]    0x624
########################################################################
## address 26
########################################################################
reg26_reserved0         26[0:15]    0x808
########################################################################
## address 27
########################################################################
reg27_reserved0         27[0:15]    0x2
########################################################################
## address 28
########################################################################
reg28_reserved0         28[0:15]    0x488
########################################################################
## address 29
########################################################################
reg29_reserved0         29[0:15]    0x18C6
########################################################################
## address 30
########################################################################
reg30_reserved0         30[0:15]    0x18C6
########################################################################
## address 31
########################################################################
reg31_reserved0         31[0:15]    0xC3E6
########################################################################
## address 32
########################################################################
reg32_reserved0         32[0:15]    0x5BF
########################################################################
## address 33
########################################################################
reg33_reserved0         33[0:15]    0x1E01
########################################################################
## address 34
########################################################################
pll_n_upper_3_bits      34[0:2]     0
reg34_reserved0         34[3:15]    0x2
########################################################################
## address 35
########################################################################
reg35_reserved0         35[0:15]    0x4
########################################################################
## address 36
########################################################################
pll_n_lower_16_bits     36[0:15]    0x28
########################################################################
## address 37
########################################################################
reg37_reserved0         37[0:7]     0x5
pfd_dly_sel             37[8:13]    0x2
reg37_reserved1         37[14]      0
mash_seed_en            37[15]      0       disabled, enabled
########################################################################
## address 38
########################################################################
pll_den_upper           38[0:15]    0xFFFF
########################################################################
## address 39
########################################################################
pll_den_lower           39[0:15]    0xFFFF
########################################################################
## address 40
########################################################################
mash_seed_upper         40[0:15]    0
########################################################################
## address 41
########################################################################
mash_seed_lower         41[0:15]    0
########################################################################
## address 42
########################################################################
pll_num_upper           42[0:15]    0
########################################################################
## address 43
########################################################################
pll_num_lower           43[0:15]    0
########################################################################
## address 44
########################################################################
mash_order              44[0:2]     0x2     interger_mode, first_order, second_order, third_order, fourth_order
reg44_reserved0         44[3:4]     0
mash_reset_n            44[5]       1       reset, normal_operation
outa_pd                 44[6]       0       normal_operation, power_down
outb_pd                 44[7]       1       normal_operation, power_down
outa_pwr                44[8:13]    0x22
reg44_reserved1         44[14:15]   0
########################################################################
## address 45
########################################################################
outb_pwr                45[0:5]     0x22
register45_reserved0    45[6:10]    0x18
outa_mux                45[11:12]   0       channel_divider, vco, not_used, high_impedance
register45_reserved1    45[13:15]   0x6
########################################################################
## address 46
########################################################################
outb_mux                46[0:1]     0       channel_divider, vco, sysref, high_impedance
register46_reserved0    46[2:15]    0x1FC
########################################################################
## address 47
########################################################################
reg47_reserved0         47[0:15]    0x300
########################################################################
## address 48
########################################################################
reg48_reserved0         48[0:15]    0x3E0
########################################################################
## address 49
########################################################################
reg49_reserved0         49[0:15]    0x4180
########################################################################
## address 50
########################################################################
reg50_reserved0         50[0:15]    0x80
########################################################################
## address 51
########################################################################
reg51_reserved0         51[0:15]    0x80
########################################################################
## address 52
########################################################################
reg52_reserved0         52[0:15]    0x420
########################################################################
## address 53
########################################################################
reg53_reserved0         53[0:15]    0
########################################################################
## address 54
########################################################################
reg54_reserved0         54[0:15]    0
########################################################################
## address 55
########################################################################
reg55_reserved0         55[0:15]    0
########################################################################
## address 56
########################################################################
reg56_reserved0         56[0:15]    0
########################################################################
## address 57
########################################################################
reg57_reserved0         57[0:15]    0
########################################################################
## address 58
########################################################################
reg58_reserved0         58[0:8]     1
inpin_fmt               58[9:11]    0       SYNC_EQUALS_SYSREFREQ_EQUALS_CMOS, SYNC_EQUALS_LVDS_SYSREFREQ_EQUAL_CMOS, SYNC_EQUALS_CMOS_SYSREFREQ_EQUAL_LVDS, SYNC_EQUALS_SYSREFREQ_EQUALS_LVDS, SYNC_EQUALS_SYSREFREQ_EQUALS_CMOS2, SYNC_EQUALS_LVDSFILTERED_SYSREFREQ_EQUALS_CMOS, SYNC_EQUALS_CMOS_SYSREFREQ_EQUALS_LVDSFILTERED, SYNC_EQUALS_SYSREFREQ_EQUALS_LVDSFILTERED
inpin_lvl               58[12:13]   0       vin_divide_by_4, vin, vin_divide_by_2, invalid
inpin_hyst              58[14]      0       disabled, enabled
inpin_ignore            58[15]      1
########################################################################
## address 59
########################################################################
ld_type                 59[0]       1       vcocal, vtune_and_vcocal
reg59_reserved0         59[1:15]    0
########################################################################
## address 60
########################################################################
ld_dly                  60[0:15]    0x3E8
########################################################################
## address 61
########################################################################
reg61_reserved0         61[0:15]    0xA8
########################################################################
## address 62
########################################################################
reg62_reserved0         62[0:9]     0xAF
dblbuf_en_0             62[10]      0       disabled, enabled
dblbuf_en_1             62[11]      0       disabled, enabled
dblbuf_en_2             62[12]      0       disabled, enabled
dblbuf_en_3             62[13]      0       disabled, enabled
dblbuf_en_4             62[14]      0       disabled, enabled
dblbuf_en_5             62[15]      0       disabled, enabled
########################################################################
## address 63
########################################################################
reg63_reserved0         63[0:15]    0
########################################################################
## address 64
########################################################################
reg64_reserved0         64[0:15]    0x1388
########################################################################
## address 65
########################################################################
reg65_reserved0         65[0:15]    0
########################################################################
## address 66
########################################################################
reg66_reserved0         6[0:15]    0x1F4
########################################################################
## address 67
########################################################################
reg67_reserved0         67[0:15]    0
########################################################################
## address 68
########################################################################
reg68_reserved0         68[0:15]    0x3E8
########################################################################
## address 69
########################################################################
mash_rst_count_upper    69[0:15]    0
########################################################################
## address 70
########################################################################
mash_rst_count_lower    70[0:15]    0xC350
########################################################################
## address 71
########################################################################
reg71_reserved0         71[0:1]     1
sysref_repeat           71[2]       0       master_mode, repeater_mode
sysref_en               71[3]       0       disabled, enabled
sysref_pulse            71[4]       0       disabled, enabled
sysref_div_pre          71[5:7]     0x4     divide_by_2=2, divide_by_4=4
reg71_reserved1         71[8:15]    0
########################################################################
## address 72
########################################################################
sysref_div              72[0:10]    1
reg72_reserved0         72[11:15]   0
########################################################################
## address 73
########################################################################
jesd_dac1_ctrl          73[0:5]     0x3F
jesd_dac2_ctrl          73[6:11]    0
reg73_reserved0         73[12:15]   0
########################################################################
## address 74
########################################################################
jesd_dac3_ctrl          74[0:5]     0
jesd_dac4_ctrl          74[6:11]    0
sysref_pulse_cnt        74[12:15]   0
########################################################################
## address 75
########################################################################
reg75_reserved0         75[0:5]     0
chdiv                   75[6:10]    0   divide_by_2=0, divide_by_4=1, divide_by_8=3,  divide_by_16=5, divide_by_32=7, divide_by_64=9, divide_by_128=12, divide_by_256=14
reg75_reserved1         75[11:15]   1
########################################################################
## address 76
########################################################################
reg76_reserved0         76[0:15]    0xC
########################################################################
## address 77
########################################################################
reg77_reserved0         77[0:15]    0
########################################################################
## address 78
########################################################################
reg78_reserved0         78[0]       0
vco_capctrl_strt        78[1:8]     0x32
quick_recal_en          78[9]       0
reg78_reserved1         78[10]      0
ramp_thresh_33rd        78[11]      0
reg78_reserved2         78[12:15]   0
########################################################################
## address 79
########################################################################
ramp_thresh_upper       79[0:15]    0
########################################################################
## address 80
########################################################################
ramp_thresh_lower       80[0:15]    0
########################################################################
## address 81
########################################################################
ramp_limit_high_33rd    81[0]       0
reg81_reserved0         81[1:15]    0
########################################################################
## address 82
########################################################################
ramp_limit_high_upper   82[0:15]    0
########################################################################
## address 83
########################################################################
ramp_limit_high_lower   83[0:15]    0
########################################################################
## address 84
########################################################################
ramp_limit_low_33rd     84[0]       0
reg84_reserved0         84[1:15]    0
########################################################################
## address 85
########################################################################
ramp_limit_low_upper    85[0:15]    0
########################################################################
## address 86
########################################################################
ramp_limit_low_lower    86[0:15]    0
########################################################################
## address 87
########################################################################
reg87_reserved0         87[0:15]    0
########################################################################
## address 88
########################################################################
reg88_reserved0         88[0:15]    0
########################################################################
## address 89
########################################################################
reg89_reserved0         89[0:15]    0
########################################################################
## address 90
########################################################################
reg90_reserved0         90[0:15]    0
########################################################################
## address 91
########################################################################
reg91_reserved0         91[0:15]    0
########################################################################
## address 92
########################################################################
reg92_reserved0         92[0:15]    0
########################################################################
## address 93
########################################################################
reg93_reserved0         93[0:15]    0
########################################################################
## address 94
########################################################################
reg94_reserved0         94[0:15]    0
########################################################################
## address 95
########################################################################
reg95_reserved0         95[0:15]    0
########################################################################
## address 96
########################################################################
reg96_reserved0         96[0:1]     0
ramp_burst_count        96[2:14]    0
ramp_burst_en           96[15]      0       disabled, enabled
########################################################################
## address 97
########################################################################
ramp_burst_trig         97[0:1]     0       ramp_transistion=0, trigger_a=1, trigger_b=2
reg97_reserved0         97[2]       0
ramp_triga              97[3:6]     0       disabled=0, rampclk_rising_edge=1, rampdir_rising_edge=2, always_triggered=4, rampclk_falling_edge=9, rampdir_falling_edge=10
ramp_trgb               97[7:10]    0       disabled=0, rampclk_rising_edge=1, rampdir_rising_edge=2, always_triggered=4, rampclk_falling_edge=9, rampdir_falling_edge=10
reg97_reserved1         97[11:14]   0
ramp0_rst               97[15]      0       disabled, reset
########################################################################
## address 98
########################################################################
ramp0_dly               98[0]       0
reg98_reserved0         98[1]       0
ramp0_inc_upper_14      98[15:2]    0
########################################################################
## address 99
########################################################################
ramp0_inc_lower         99[0:15]    0
########################################################################
## address 100
########################################################################
ramp0_len               100[0:15]   0
########################################################################
## address 101
########################################################################
ramp0_next_trig         101[0:1]    0       timeout_counter, trigger_a, trigger_b
reg101_reserved0        101[2:3]    0
ramp0_next              101[4]      0       ramp0, ramp1
ramp1_rst               101[5]      0       disabled, reset
ramp1_dly               101[6]      0
reg101_reserved1        101[7:15]   0
########################################################################
## address 102
########################################################################
ramp1_inc_upper_14      102[13:0]   0
reg102_reserved0        102[14:15]  0
########################################################################
## address 103
########################################################################
ramp1_inc_lower         103[0:15]   0
########################################################################
## address 104
########################################################################
ramp1_len               104[0:15]   0
########################################################################
## address 105
########################################################################
ramp1_next_trig         105[0:1]    0       timeout_counter, trigger_a, trigger_b
reg105_reserved0        105[2:3]    0
ramp1_next              105[4]      0       ramp0, ramp1
ramp_manual             105[5]      0       automatic_ramping, manual_ramping
ramp_dly_cnt            105[6:15]   0x111
########################################################################
## address 106
########################################################################
ramp_scale_count        106[0:2]    0x7
reg106_reserved0        106[3]      0
ramp_trig_cal           106[4]      0       disabled, enabled
reg106_reserved1        106[5:15]   0
########################################################################
## address 114
########################################################################
fsk_mode_sel            114[0:1]    0       unused=0,fsk_spi=2, fsk_spi_fast=3
fsk_spi_dev_sel         114[2:4]    0
fsk_spi_level           114[5:6]    0       disabled, 2fsk, 4fsk, 8fsk
reg114_reserved0        114[7:9]    0
fsk_en                  114[10]     0       disabled, enabled
reg114_reserved1        114[11:15]  0xF
########################################################################
## address 115
########################################################################
reg115_reserved0        115[0:2]    0
fsk_dev_scale           115[3:7]    0
reg115_reserved1        115[8:15]   0
########################################################################
## address 116
########################################################################
fsk_dev0                116[0:15]   0
########################################################################
## address 117
########################################################################
fsk_dev1                117[0:15]   0
########################################################################
## address 118
########################################################################
fsk_dev2                118[0:15]   0
########################################################################
## address 119
########################################################################
fsk_dev3                119[0:15]   0
########################################################################
## address 120
########################################################################
fsk_dev4                120[0:15]   0
########################################################################
## address 121
########################################################################
fsk_dev5                121[0:15]   0
########################################################################
## address 122
########################################################################
fsk_dev6                122[0:15]   0
########################################################################
## address 123
########################################################################
fsk_dev7                123[0:15]   0
########################################################################
## address 124
########################################################################
fsk_spi_dev             124[0:15]   0
########################################################################
## address 125
########################################################################
reg125                  125[0:16]   0x2288
"""
########################################################################
# Template for methods in the body of the struct
########################################################################

BODY_TMPL = """\
uint16_t get_reg(int addr){
    uint16_t reg = 0;
    switch(addr){
    % for addr in sorted(set(map(lambda r: r.get_addr(), regs))):
    case ${addr}:
        % for reg in filter(lambda r: r.get_addr() == addr, regs):
        reg |= (uint16_t(${reg.get_name()}) & ${reg.get_mask()}) << ${reg.get_shift()};
        % endfor
        break;
    % endfor
    }
    return reg;
}

std::set<uint8_t> get_ro_regs()
{
    return {107, 108, 109, 110, 111, 112, 113};
}

int get_num_regs()
{
    return 126;
}
"""

PY_BODY_TMPL = """\
def get_reg(self, addr):
    reg = 0
    % for addr in sorted(set(map(lambda r: r.get_addr(), regs))):
    <% if_state = 'if' if loop.index == 0 else 'elif' %>
    ${if_state} addr == ${addr}:
        % for reg in filter(lambda r: r.get_addr() == addr, regs):
        % if reg.get_enums():
        reg |= (self.${reg.get_name()}.value & ${reg.get_mask()}) << ${reg.get_shift()}
        % else:
        reg |= (self.${reg.get_name()} & ${reg.get_mask()}) << ${reg.get_shift()}
        % endif
        % endfor
    % endfor
    return reg

"""

if __name__ == '__main__':
    import common
    common.generate(
        name='lmx2572_regs',
        regs_tmpl=REGS_TMPL,
        body_tmpl=BODY_TMPL,
        py_body_tmpl=PY_BODY_TMPL,
        file=__file__,
    )