Forum: FPGA, VHDL & Co. Lattice IceCube2 PLL-Usage


von AD (Gast)


Lesenswert?

Hallo FPGA-Gemeinde,

Ich sitze gerade an einem Projekt mit dem iCEStick Evaluation Kit von 
Lattice und habe einige Probleme mit der Benutzung der PLL.

Habe mir für den Anfang ein einfaches UART-Modul geschrieben, dass auch 
sehr gut funktioniert, solange ich direkt die 12 MHz vom Quarz nehme.

Da ich aber höhere Frequenzen benötige, brauche ich die PLL.

IceCube2 stellt hierzu einen PLL-Generator bereit. Nach Instantiieren 
der PLL in meinem Top-Level und das hinzufügen von folgendem 
timing-constraint:

create_clock  -period 83.33 -name {my_clk} [get_ports {clk_in}]

(Damit sag ich dem Programm eigentlich, dass es an dem Pin clk_in die 12 
MHz-Clock zu erwarten hat, oder liege ich da falsch?)

und den ganzen weiteren Schritten(Synthese,P&R,..) bekomme ich im Report 
folgenden Clock Summary:

                    1::Clock Frequency Summary
 =====================================================================
Number of clocks: 3
Clock: I9.uart_pll_inst/PLLOUTGLOBAL  | N/A      | Target: 100.50 MHz  |
Clock: my_clk                         | N/A      | Target: 12.00 MHz   |
Clock: uart_pll|PLLOUTCORE_inferred_clock  | Frequency: 142.73 MHz  | 
Target: 108.34 MHz  |

Ich habe also eine Clock, nur leider ist die zu schnell und was ich vor 
allem nicht verstehe ist, dass der MHz-Wert variabel ist. Verändere ich 
ein paar Konstanten im Code,ändert sich auch der Wert.

Liegts also am Code/Design? Hat schonmal wer mit IceCube2 gearbeitet und 
kann mir eventuell weiterhelfen? (für den Ice40 gibts leider keine 
Diamond-Unterstützung). Gibts irgendwelche Richtlinien/Tipps um das 
ganze sauber zu designen?

Ich bin noch nicht recht erfahren auf dem ganzen Gebiet und bin für jede 
Hilfe dankbar, auch was Timing-Constraints etc. angeht.

Vielen Dank schonmal für jegliche Hilfe,

MfG,
AD

von Holger (Gast)


Lesenswert?


von Christoph Z. (christophz)


Lesenswert?

AD schrieb:
> create_clock  -period 83.33 -name {my_clk} [get_ports {clk_in}]
>
> (Damit sag ich dem Programm eigentlich, dass es an dem Pin clk_in die 12
> MHz-Clock zu erwarten hat, oder liege ich da falsch?)

Habe im ersten Moment eine Einheit hinter der Zahl vermisst, scheint 
aber so zu passen, da in deinem Clock Summary korrekt steht:

Clock: my_clk                         | N/A      | Target: 12.00 MHz   |


AD schrieb:
> Clock: uart_pll|PLLOUTCORE_inferred_clock  | Frequency: 142.73 MHz  |
> Target: 108.34 MHz  |

Beim Problem, dass der 108.34 MHz Zieltakt nicht dem entspricht, was du 
möchtest, kann ich dir leider nicht helfen.

Dass sich der Frequenzwert bei der Angabe "Frequency" ändert ist normal: 
Dieser gibt nähmllich an, wie schnell dein fertiges Design getaktet 
werden könnte. (Also sind es schlechte Nachrichten wenn "Frequency" 
kleiner als "Target" ist...)

von Holger (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist die Gleichung dazu.

Gruss Holger.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.