4 pll_out(real clock_in, int mul, int div)
6 return clock_in * mul / div;
10 pll_in(real pll_out, int mul, int div)
12 return pll_out * div / mul;
16 fcco_out(real clock_in, int mul, int div)
18 real out = pll_out(clock_in, mul, div);
23 valid_clock_in(real clock_in)
25 return 10 <= clock_in && clock_in < 25;
29 valid_fcco(real clock_in, int mul, int div)
31 real fcco = fcco_out (clock_in, mul, div);
32 return 156 <= fcco && fcco <= 320;
36 all_clocks(real clock_in) {
37 for (int mul = 1; mul <= 32; mul++) {
38 for (int div = 2; div <= 16; div *= 2) {
39 if (!valid_fcco(clock_in, mul, div))
40 printf ("clock_in %f mul %d div %d invalid fcco %f\n",
41 clock_in, mul, div, fcco_out(clock_in, mul, div));
43 printf ("clock_in %f mul %d div %d pll_out %f\n",
44 clock_in, mul, div, pll_out(clock_in, mul, div));
59 clock[...] clocks = {};
60 for (int mul = 1; mul <= 32; mul++) {
61 for (int div = 2; div <= 16; div *= 2) {
62 real clock_in = pll_in(pll_out, mul, div);
63 if (valid_clock_in(clock_in) && valid_fcco(clock_in, mul, div)) {
64 clocks[dim(clocks)] = (clock) {
81 dump_clocks(clock[] clocks)
83 printf ("Clocks for %f\n", clocks[0].pll_out);
84 Sort::qsort(&clocks, bool func(clock a, clock b) { return a.clock_in > b.clock_in; });
85 for (int i = 0; i < dim (clocks); i++) {
86 printf("\tclock_in %f mul %d div %d\n",
95 clock[] c40 = all_ins(40.0);
96 clock[] c48 = all_ins(48.0);
100 for (int i40 = 0; i40 < dim(c40); i40++) {
101 for (int i48 = 0; i48 < dim(c48); i48++) {
102 if (c40[i40].clock_in == c48[i48].clock_in)
103 printf ("clock_in %f mul_40 %d div_40 %d mul_48 %d div_48 %d\n",