aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/ic_reg_maps/gen_lmx2592_regs.py
blob: 8689c487d2d3c36ed72e7367509b2d94f74b1f49 (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
#!/usr/bin/env python
#
# Copyright 2017 Ettus Research, A National Instruments Company
#
# SPDX-License-Identifier: GPL-3.0
#

########################################################################
# Template for raw text data describing registers
# name addr[bit range inclusive] default optional enums
########################################################################
REGS_TMPL="""\
########################################################################
## address 0
########################################################################
powerdown               0[0]        0
reset                   0[1]        0
muxout_sel              0[2]        1       readback, lock_detect
fcal_enable             0[3]        1
acal_enable             0[4]        1
fcal_lpfd_adj           0[5:6]      0       unused, 20mhz, 10mhz, 5mhz
fcal_hpfd_adf           0[7:8]      0       unused, 100mhz, 150mhz, 200mhz
reg0_reserved0          0[9:12]     0x1
ld_enable               0[13]       1
reg0_reserved1          0[14:15]    0x0
########################################################################
## address 1
########################################################################
cal_clk_div             1[0:2]      3
reg1_reserved0          1[3:15]     0x101
########################################################################
## address 2
########################################################################
reg2_reserved0          2[0:15]     0x500
########################################################################
## address 4
########################################################################
reg4_reserved0          4[0:7]      0x43
acal_cmp_delay          4[8:15]     25
########################################################################
## address 7
########################################################################
reg7_reserved0          7[0:15]     0x28b2
########################################################################
## address 8
########################################################################
reg8_reserved0          8[0:9]      0x84
vco_capctrl_ovr         8[10]       0
reg8_reserved1          8[11:12]    0x2
vco_idac_ovr            8[13]       0
reg8_reserved2          8[14:15]    0x0
########################################################################
## address 9
########################################################################
reg9_reserved0          9[0:8]      0x102
ref_enable              9[9]        1
reg9_reserved1          9[10]       0x0
osc_doubler             9[11]       0
reg9_reserved2          9[12:15]    0x0
########################################################################
## address 10
########################################################################
reg10_reserved0         10[0:6]     0x58
mult                    10[7:11]    1
reg10_reserved1         10[12:15]   0x1
########################################################################
## address 11
########################################################################
reg11_reserved0         11[0:3]     0x8
pll_r                   11[4:11]    1
reg11_reserved1         11[12:15]   0x0
########################################################################
## address 12
########################################################################
pll_r_pre               12[0:11]    1
reg12_reserved0         12[12:15]   0x7
########################################################################
## address 13
########################################################################
reg13_reserved0         13[0:7]     0x0
pdf_ctl                 13[8:9]     0       dual_pdf=0, single_pfd=3
reg13_reserved1         13[10:13]   0x0
cp_enable               13[14]      1
reg13_reserved2         13[15]      0x0
########################################################################
## address 14
########################################################################
cp_icoarse              14[0:1]     1       multiply_by_1, multiply_by_2, multiply_by_1_5, multiply_by_2_5
cp_iup                  14[2:6]     3
cp_idn                  14[7:11]    3
reg14_reserved0         14[12:15]   0x0
########################################################################
## address 19
########################################################################
reg19_reserved0         19[0:2]     0x5
vco_idac                19[3:11]    300
reg19_reserved1         19[12:15]   0x0
########################################################################
## address 20
########################################################################
acal_vco_idac_strt      20[0:8]     300
reg20_reserved0         20[9:15]    0x0
########################################################################
## address 22
########################################################################
vco_capctrl             22[0:7]     0
reg22_reserved0         22[8:15]    0x23
########################################################################
## address 23
########################################################################
reg23_reserved0         23[0:9]     0x42
vco_sel_force           23[10]      0
vco_sel                 23[11:13]   1
fcal_vco_sel_strt       23[14]      0
reg23_reserved1         23[15]      0x1
########################################################################
## address 24
########################################################################
reg24_reserved0         24[0:15]    0x509
########################################################################
## address 25
########################################################################
reg25_reserved0         25[0:15]    0x0
########################################################################
## address 28
########################################################################
reg28_reserved0         28[0:15]    0x2924
########################################################################
## address 29
########################################################################
reg29_reserved0         29[0:15]    0x84
########################################################################
## address 30
########################################################################
vco_doubler_en          30[0]       0
reg30_reserved0         30[1:9]     0x1a
mash_ditherer           30[10]      0
reg30_reserved1         30[11:15]   0x0
########################################################################
## address 31
########################################################################
reg31_reserved0         31[0:6]     0x1
chdiv_dist_pd           31[7]       0
reg31_reserved1         31[8]       0x0
vco_dista_pd            31[9]       0
vco_distb_pd            31[10]      1
reg31_reserved2         31[11:15]   0x0
########################################################################
## address 32
########################################################################
reg32_reserved0         32[0:15]    0x210a
########################################################################
## address 33
########################################################################
reg33_reserved0         33[0:15]    0x2a0a
########################################################################
## address 34
########################################################################
reg34_reserved0         34[0:4]     0xa
chdiv_en                34[5]       1
reg34_reserved1         34[6:15]    0x30f
########################################################################
## address 35
########################################################################
reg35_reserved0         35[0]       0x1
chdiv_seg1_en           35[1]       0
chdiv_seg1              35[2]       1       divide_by_2, divide_by_3
reg35_reserved1         35[3:6]     0x3
chdiv_seg2_en           35[7]       0
chdiv_seg3_en           35[8]       0
chdiv_seg2              35[9:12]    1       powerdown=0, divide_by_2=1, divide_by_4=2, divide_by_6=4, divide_by_8=8
reg35_reserved2         35[13:15]   0x0
########################################################################
## address 36
########################################################################
chdiv_seg3              36[0:3]     1       powerdown=0, divide_by_2=1, divide_by_4=2, divide_by_6=4, divide_by_8=8
chdiv_seg_sel           36[4:6]     1       powerdown=0, div_seg_1=1, div_seg_1_and_2=2, div_seg_1_2_and_3=4
reg36_reserved0         36[7:9]     0x0
chdiv_dista_en          36[10]      1
chdiv_distb_en          36[11]      0
reg36_reserved1         36[12:15]   0x0
########################################################################
## address 37
########################################################################
reg37_reserved0         37[0:11]    0x0
pll_n_pre               37[12]      0       divide_by_2, divide_by_4
reg37_reserved1         37[13:15]   0x2
########################################################################
## address 38
########################################################################
reg38_reserved0         38[0]       0x0
pll_n                   38[1:12]    27
reg38_reserved1         38[13:15]   0x0
########################################################################
## address 39
########################################################################
reg39_reserved0         39[0:7]     0x4
pfd_dly                 39[8:13]    2      4_clk_delay=1, 6_clk_delay=2,  8_clk_delay=4, 12_clk_delay=8, 16_clk_delay=16
reg39_reserved1         39[14:15]   0x2
########################################################################
## address 40
########################################################################
pll_den_msb             40[0:15]    1000
########################################################################
## address 41
########################################################################
pll_den_lsb             41[0:15]    1000
########################################################################
## address 42
########################################################################
mash_seed_msb           42[0:15]    0
########################################################################
## address 43
########################################################################
mash_seed_lsb           43[0:15]    0
########################################################################
## address 44
########################################################################
pll_num_msb             44[0:15]    0
########################################################################
## address 45
########################################################################
pll_num_lsb             45[0:15]    0
########################################################################
## address 46
########################################################################
mash_order              46[0:2]     3       int_mode, first, second, third, fourth
reg46_reserved0         46[3:5]     0x4
outa_pd                 46[6]       0
outb_pd                 46[7]       1
outa_power              46[8:13]    15
reg46_reserved1         46[14:15]   0x0
########################################################################
## address 47
########################################################################
outb_power              47[0:5]     0
reg47_reserved0         47[6:10]    0x3
outa_mux                47[11:12]   0       divider=0, vco=1
reg47_reserved1         47[13:15]   0x0
########################################################################
## address 48
########################################################################
outb_mux                48[0:1]     0       divider=0, vco=1
reg48_reserved0         48[2:15]    0xff
########################################################################
## address 59
########################################################################
reg59_reserved0         59[0:4]     0x0
muxout_hdrv             59[5]       0
reg59_reserved1         59[6:15]    0x0
########################################################################
## address 61
########################################################################
ld_type                 61[0]       1       cal_status, vtune_detect
reg61_reserved0         61[1:15]    0x0
########################################################################
## address 62
########################################################################
reg62_reserved0         62[0:15]    0x0
########################################################################
## address 64
########################################################################
fjump_size              64[0:3]     15
reg64_reserved0         64[4]       0x1
ajump_size              64[5:7]     3
fcal_fast               64[8]       0
acal_fast               64[9]       0
reg64_reserved1         64[10:15]   0x0
"""

########################################################################
# Template for methods in the body of the struct
########################################################################
BODY_TMPL="""\
enum addr_t{
    ADDR_R0 = 0,
    ADDR_R1 = 1,
    ADDR_R2 = 2,
    ADDR_R4 = 4,
    ADDR_R7 = 7,
    ADDR_R8 = 8,
    ADDR_R9 = 9,
    ADDR_R10 = 10,
    ADDR_R11 = 11,
    ADDR_R12 = 12,
    ADDR_R13 = 13,
    ADDR_R14 = 14,
    ADDR_R19 = 19,
    ADDR_R20 = 20,
    ADDR_R22 = 22,
    ADDR_R23 = 23,
    ADDR_R24 = 24,
    ADDR_R25 = 25,
    ADDR_R28 = 28,
    ADDR_R29 = 29,
    ADDR_R30 = 30,
    ADDR_R31 = 31,
    ADDR_R32 = 32,
    ADDR_R33 = 33,
    ADDR_R34 = 34,
    ADDR_R35 = 35,
    ADDR_R36 = 36,
    ADDR_R37 = 37,
    ADDR_R38 = 38,
    ADDR_R39 = 39,
    ADDR_R40 = 40,
    ADDR_R41 = 41,
    ADDR_R42 = 42,
    ADDR_R43 = 43,
    ADDR_R44 = 44,
    ADDR_R45 = 45,
    ADDR_R46 = 46,
    ADDR_R47 = 47,
    ADDR_R48 = 48,
    ADDR_R59 = 59,
    ADDR_R61 = 61,
    ADDR_R62 = 62,
    ADDR_R64 = 64
};

uint16_t get_reg(uint8_t addr){
    uint16_t reg = 0;
    switch(addr){
    % for addr in [0,1,2,4,7,8,9,10,11,12,13,14,19,20,22,23,24,25,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,59,61,62,64]:
    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<size_t> get_all_addrs()
{
    std::set<size_t> addrs;
    % for reg in regs:
    // Hopefully, compilers will optimize out this mess...
    addrs.insert(${reg.get_addr()});
    % endfor
    return addrs;
}
"""

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