Project

General

Profile

Download (1.42 KB) Statistics
| Branch: | Tag: | Revision:
1
#!/usr/bin/perl -w
2

    
3
use strict;
4

    
5
sub pll_fvco($$$$) {
6
	my ($fosc, $z, $x, $y) = @_;
7

    
8
	return $fosc * ($z + ($x/$y));
9
}
10

    
11
sub pll_flo($$) {
12
	my ($fvco, $r_num) = @_;
13

    
14
	return $fvco  / $r_num;
15
}
16

    
17
sub is_flo_valid($) {
18
	my $flo = shift;
19

    
20
	if ($flo < 64000000 || $flo > 1700000000) {
21
		return 0;
22
	}
23

    
24
	return 1;
25
}
26

    
27
sub min_vco_mult($) {
28
	my ($fosc) = @_;
29
	return (2600000000 / $fosc);
30
}
31

    
32
sub max_vco_mult($) {
33
	my ($fosc) = @_;
34
	return (3900000000 / $fosc);
35
}
36

    
37
sub test_setting($$$$$) {
38
	my ($fosc, $z, $x, $y, $r) = @_;
39
	my $flo;
40
	my $fvco = pll_fvco($fosc, $z, $x, $y);
41

    
42
	if ($fvco < 2600000000 || $fvco > 3900000000) {
43
		return;
44
	}
45

    
46
	$flo = pll_flo($fvco, $r);
47
	if (is_flo_valid($flo)) {
48
		printf("%010u Hz (Z=%u, X=%u, R=%u)\n", $flo, $z, $x, $r);
49
	}
50

    
51
	$r = $r * 2;
52
	$flo = pll_flo($fvco, $r);
53
	if (is_flo_valid($flo) && $flo < 300000000) { 
54
		printf("%010u Hz (Z=%u, X=%u, R=%u, TPM)\n", $flo, $z, $x, $r);
55
	}
56
}
57

    
58

    
59
sub hr() {
60
	printf("======================================================================\n");
61
}
62

    
63
my $fosc = 26000000;
64
my $y = 65535;
65
my @r_int_vals = (2,4,6,8,12,16,20,24);
66

    
67

    
68
my $min_vco_mult = min_vco_mult($fosc);
69
my $max_vco_mult = max_vco_mult($fosc);
70

    
71
printf("Fosc = %u, min_vco_mult=%u, max_vco_mult=%u\n", $fosc,
72
	$min_vco_mult, $max_vco_mult);
73

    
74
for (my $z = $min_vco_mult; $z <= $max_vco_mult; $z++) {
75
	for (my $x = 0; $x <= 0xffff; $x+= 1) {
76
		foreach  my $r (@r_int_vals) {
77
			test_setting($fosc, $z, $x, $y, $r);
78
		}
79
	}
80
}
81

    
82

    
(3-3/3)
Add picture from clipboard (Maximum size: 48.8 MB)