Hallo allerseits,
wenn man PLL-clocks im .sdc-File definieren will, hat man ja - zumindest
soweit ich das verstanden habe - zwei Möglichkeiten:
- ganz und gar automatisch:
- oder 'von Hand' für jeden Takt:
1 | create_generated_clock -name xxx -source yyy zzz
|
Wobei Ersteres den Vorteil hat, daß die Taktparameter immer automatisch
richtig sind (und dafür ebenso automatisch ellenlange, kryptische
Taktnamen produziert), während man bei Letzterem die Clocks so benamsen
kann, wie sie auch im Code heißen, aber selber aufpassen muß, daß die
Parameter stimmen.
Jetzt wollte ich ein Projekt (mit 15 PLL clocks) von Methode 1 auf
Methode 2 umstellen, weil ich mich ständig mit den kryptischen Taktnamen
vertan habe (die subtilerweise nicht nur ellenlang sind, sondern sich
auch noch nur in klitzekleinen Details unterscheiden).
Das funktioniert auch soweit für alle PLL-Takte, allerdings anscheinend
dann nicht, wenn eine PLL den Ausgang einer anderen PLL als Takteingang
verwendet (dann wird der Name des gerade definierten Takteingangs für
die zweite PLL aus irgendeinem Grund nicht gefunden):
1 | create_generated_clock -name clk_48 -source clk_main ...
|
2 | create_generated_clock -name clk_video -source clk_48 ... (<- Zeile 64)
|
1 | Ignored filter at xxx.sdc(64): clk_48 could not be matched with a port
|
2 | Ignored create_generated_clock at xxx.sdc(64): Argument -source is an empty collection
|
Lustigerweise listet ein anschließendes "Report Clocks" clk_48 auf, wie
wenn nichts gewesen wäre (das Ding ist also durchaus bekannt), aber
clk_video fehlt natürlich trotzdem.
Die Knotennamen der PLL-Ausgänge stimmen (hab' ich ungefähr 100 Mal
kontrolliert).
Weiß vielleicht jemand, woran das liegt, bzw. wie ich mein Ziel
"lesbarer" Taktnamen trotzdem erreichen kann?
P.S.: bevor jemand fragt, ob ich wirklich 15 Clocks brauche: ja, brauch'
ich.
PPS.: Quartus ist die letzte 13er-Version mit allen verfügbaren Patches.