Fork me on GitHub
## Freescale K64 PLL Calculator

### What Is It?

### How does it work?

This is a calculator for the PLL configuration values for VDIV, and PDIV for the Freescale K64 processor. You put in your input frequency and Desired output frequency and it returns the value of PDIV and VDIV. These values are the numbers which are used in the equation: $$f_{out} = VDIV * \frac{f_{in}}{PDIV}$$ where: $$ 2MHz \leq \frac{f_{in}}{PDIV} \leq 4 MHz $$ There are also constraints on VDIV and PDIV in terms of min and max ranges. To get the actual register values of PDIV and VDIV you can look up the values in the datasheet on pages 589 and 590.

A simple calculator could have been used, but instead I decided to learn a little about using z3 which is a high performance theorem prover. I make calls into z3 from python and provide an api
for accessing these. The api entry point is at `/solve`

To get the solution you can do the following:

/solve?fin=20e6&fout=80e6Which will return:

{ "payload": { "d": "8", "f_in": "20000000", "f_out": "80000000", "m": "32" }, "status": "success" }If the model can not converge and cannot find a solution given the constraints you will get the following result:

{ "payload": { "error": "model is not available" }, "status": "error" }For more information please see the writeup