Notes on the programming of the ICD2053 programmable clock generator

From CM firmware:

data rate	prog bits			w/o stuff bits
						PPPPPPP D MMM QQQQQQQ IIII
160 kbps	010101110110000000111000	0101111 0 110 0000011 1000
208 kbps	0100100010100001000000		0100100 0 101 0000100 0000
320 kbps	010101110101000000111000	0101111 0 101 0000011 1000
416 kbps	0100100010000001000000		0100100 0 100 0000100 0000
784 kbps	01001110001100001100000		0101110 0 011 0000110 0000
1040 kbps	01101110001100001100000		0111110 0 011 0000110 0000
1568 kbps	01001110001000001100000		0101110 0 010 0000110 0000

Checking the above against the ICD2053 datasheet shows that all stated
requirements are satisfied for all rates and that all desired frequencies
are produced exactly.

Nokia rates of 192/384/768/1536 kbps added by brave Michael Sokolov:

Calculation: ignoring 1152 and 2320 kbps, all Nokia rates are related by powers
of 2 and hence we support them with the same VCO frequency, switching only the
final 2**N divider.

P=96, Q=8, fVCO=98.304 MHz, ICD2053 requirements met
P'=93=0x5D, Q'=6

data rate	desired freq	final div	M bits
192 kbps	 1.536 MHz	/64		6 (110)
384 kbps	 3.072 MHz	/32		5 (101)
768 kbps	 6.144 MHz	/16		4 (100)
1536 kbps	12.288 MHz	/8		3 (011)

data rate	program reg
		PPPPPPP D MMM QQQQQQQ IIII
192 kbps	1011101 0 110 0000110 1000
384 kbps	1011101 0 101 0000110 1000
768 kbps	1011101 0 100 0000110 1000
1536 kbps	1011101 0 011 0000110 1000

Note that I've set D=0 for no reason other than because CM has done so.
(The ICD2053B datasheet recommends setting it to 1.)

data rate	prog bits			hex
192 kbps	100 1110 1011 0000 0110 1000	0x4EB068
384 kbps	100 1110 1010 1000 0110 1000	0x4EA868
768 kbps	100 1110 1010 0000 0110 1000	0x4EA068
1536 kbps	100 1110 1001 1000 0110 1000	0x4E9868

Further additions just for fun:

392 kbps: derived trivially from CM's programming for 784 and 1568 kbps:

data rate	program reg
		PPPPPPP D MMM QQQQQQQ IIII
392 kbps	0101110 0 100 0000110 0000
784 kbps	0101110 0 011 0000110 0000
1568 kbps	0101110 0 010 0000110 0000

400 kbps (a common Nx64+16):

desired frequency: 3.200 MHz
possible VCO frequencies:
	 51.200 MHz (followed by /16)
	102.400 MHz (followed by /32)

P=50, Q=8, fVCO=51.200 MHz, ICD2053 requirements met
P'=47=0x2F, Q'=6

1152 kbps (let's support *all* Nokia rates):

desired frequency: 9.216 MHz
possible VCO frequencies:
	 73.728 MHz (followed by /8)
	147.456 MHz (followed by /16)

P=72, Q=8, fVCO=73.728 MHz, ICD2053 requirements met
P'=69=0x45, Q'=6

1168 kbps (HDSL classic):

desired frequency: 9.344 MHz
possible VCO frequencies:
	 74.752 MHz (followed by /8)
	149.504 MHz (followed by /16)

P=73, Q=8, fVCO=74.752 MHz, ICD2053 requirements met
P'=70=0x46, Q'=6

1552 kbps (a common Nx64+16):

desired frequency: 12.416 MHz
computed by BitCalc:
P=97, Q=8, fVCO=99.328 MHz, final divide by 8, ICD2053 requirements met
P'=94=0x5E, Q'=6

data rate	program reg
		PPPPPPP D MMM QQQQQQQ IIII
400 kbps	0101111 0 100 0000110 0000
1152 kbps	1000101 0 011 0000110 0000
1168 kbps	1000110 0 011 0000110 0000
1552 kbps	1011110 0 011 0000110 1000

data rate	prog bits			hex
392 kbps	010 0111 0010 0000 0110 0000	0x272060
400 kbps	010 1011 1010 0000 0110 0000	0x2BA060
1152 kbps	 10 0010 1001 1000 0110 0000	0x229860
1168 kbps	 10 0011 0001 1000 0110 0000	0x231860
1552 kbps	101 0111 0001 1000 0110 1000	0x571868

Heck, let's support ALL data rates ever used for SDSL!  We've already covered
everything except 144, 272, 288 and 528 kbps, so let's just add those and we
are done!

144 and 288 kbps are covered by the same VCO frequency as 1152 kbps:

data rate	program reg
		PPPPPPP D MMM QQQQQQQ IIII
144 kbps	1000101 0 110 0000110 0000
288 kbps	1000101 0 101 0000110 0000
1152 kbps	1000101 0 011 0000110 0000

Doing 272 and 528 kbps with BitCalc:

data rate	program reg
		PPPPPPP D MMM QQQQQQQ IIII
272 kbps	0110000 0 101 0000100 0000
528 kbps	0111111 0 100 0000110 0000

data rate	prog bits			hex
144 kbps	  10 0010 1011 0000 0110 0000	0x22B060
272 kbps	  01 1000 0010 1000 0100 0000	0x182840
288 kbps	  10 0010 1010 1000 0110 0000	0x22A860
528 kbps	0011 1011 1010 0000 0110 0000	0x3BA060
