Jag försöker hitta PLL-parametrar från en given målfrekvens. Att gå åt andra hållet är lätt och snabbt när parametrarna är kända.
\(F_{OUT}=F_{IN} \cdot \frac{M}{D \cdot O}\)
Men jag kan inte komma på något snabbt sätt att få fram M,D,O för en given F_OUT.
Det jag gjort hittills är en brute-force-metod att förberäkna alla möjliga frekvenser i en lista och köra en binär sökning för närmsta värde. Själva sökningen är väldigt snabb men att skapa listan tar lång tid då det är ca 2 miljoner värden som måste sorteras, och det tar upp ganska mycket minne.
Går det att lösa matematiskt istället?
Beräkna PLL-parametrar
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Beräkna PLL-parametrar
Det är en FPGA. Pixelklocka för HDMI. Grovt räknat 100-200MHz.
Mitt första försök var att hårdkoda frekvenserna för vanliga upplösningar men det fungerar bara ibland. Sen upptäckte jag att olika skärmar vill ha olika timings för samma upplösning, så klockan måste vara justerbar.
Mitt första försök var att hårdkoda frekvenserna för vanliga upplösningar men det fungerar bara ibland. Sen upptäckte jag att olika skärmar vill ha olika timings för samma upplösning, så klockan måste vara justerbar.
Re: Beräkna PLL-parametrar
Jag tror det finns bra info om detta i en pdf från Texas men vet inte med säkerhet då jag bara skummat igenom den för något år sedan.
PLL Performance Simulation Design Texas.pdf
PLL Performance Simulation Design Texas.pdf
Re: Beräkna PLL-parametrar
Vad har du frihetsgrader på dina variabler, vad kan de vara för värden?
Å andra sidan, minne behöver du väl inte, du kan väl söka efter bästa värdet samtidigt som du generar listan?
Å andra sidan, minne behöver du väl inte, du kan väl söka efter bästa värdet samtidigt som du generar listan?
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Beräkna PLL-parametrar
f_in är konstant, 100MHz
m är 6-64, steg om 0,125
d är 1-10, heltal
o är 1-128, steg om 0,125
m/d måste vara i området 6-12
> du kan väl söka efter bästa värdet samtidigt som du generar listan?
Jo det kan man göra men det tar ganska lång tid att testa alla värden. Tanken är att man ska kunna byta upplösning under drift utan allt för långa avbrott.
Ett försök jag gjorde var att starta i mitten av frekvensområdet och ändra en variabel i taget för att se om man kommer närmare eller längre ifrån målet men jag fastnade ofta i lokala minimum istället för att hitta den riktiga frekvensen. Jag vet inte om det var jag som gjort något fel eller om jag var inne på fel spår.
Edit: Med lång tid menar jag att det tar ca 30 sekunder på målhårdvaran, en soft-cpu på fpgan, men det tar bara några ms på en intel i7.
m är 6-64, steg om 0,125
d är 1-10, heltal
o är 1-128, steg om 0,125
m/d måste vara i området 6-12
> du kan väl söka efter bästa värdet samtidigt som du generar listan?
Jo det kan man göra men det tar ganska lång tid att testa alla värden. Tanken är att man ska kunna byta upplösning under drift utan allt för långa avbrott.
Ett försök jag gjorde var att starta i mitten av frekvensområdet och ändra en variabel i taget för att se om man kommer närmare eller längre ifrån målet men jag fastnade ofta i lokala minimum istället för att hitta den riktiga frekvensen. Jag vet inte om det var jag som gjort något fel eller om jag var inne på fel spår.
Edit: Med lång tid menar jag att det tar ca 30 sekunder på målhårdvaran, en soft-cpu på fpgan, men det tar bara några ms på en intel i7.