Fractional Dividers in a PLD

From the Time Nuts mailing list:

A 10 MHz clock into a PIC gives a 400 ns/instruction time.

To produce 32.768 kHz you flip an output pin put every 38
instructions, except that 9632 times per second you make it 39
instructions instead.

To figure out those sorts of ratios for static frequency dividers, Allan Herriman has written a nifty fractional divider script that generates VHDL/Verilog code for CPLD/FPGA applications:

http://fractional-divider.tripod.com/

It will generate dual modulus or phase accumulator based dividers, with various implementation options.

To generate a 10 Mhz to 32.768 Khz with a frequency error tolerance of 1e-12 :

fracn09.pl -t 1e-12 10e6 32768

Which generates a file “fracn.vhd”:

--
-- Frequency Results (use_phase_accumulator = FALSE) :
--  Achieved Output Frequency: 32768 Hz.
--  Achieved Relative Frequency Error: 0 (0 ppm)
--  Achieved Frequency Error: 0 Hz.
--
constant n              : positive := 305;  -- prescaler divides by n or n + 1
constant a              : positive := 211;  -- this many counts of 305
constant b              : natural  := 45;   -- this many counts of 306
--
-- Design Parameters (use_phase_accumulator = FALSE) :
--  Approx 20 flip flops (9 in prescaler, 9 in controller and 2 retimes).
--  The recursive controller uses approx 17 flip flops.
--  The Dual-Modulus Prescaler uses ratios /305,/306
--  The Output consists of 211 cycles of 305 input clocks,
--  and 45 cycles of 306 input clocks.
--  There are 256 output clocks for every 78125 input clocks.
--

Brian