Gast
#3762637
Hallo. Ich entwickle mit Altera QuartusII und in meinem FPGA-Design kommen folgende Takte vor: Externer Takt mit 40MHz. Dieser wird mittels PLL in einem 100MHz-Takt, der den Systemtakt darstellt, gewandelt. Mehrere Module (mit den FPGAs drauf) sind mittels DaisyChain-Verschaltung über eine serielle Schnittstelle verbunden. Genauer gesagt: Die Datenleitungen werden gedaisychained, der Takt der Schnittstelle erreicht alle Module einzeln. Um Jitter durch die zueinander asynchron laufenden Module gering zu halten, musste ich den Takt der Schnittstelle (ich nenne es jetzt SCLK) als Clockdomain für den Kommunikationsteil verwenden damit die Module gleichzeitig die Daten weiterschieben. Ich habe das vor längerer Zeit schon mal constrained, sodass es keine Timing-Verletzung gab. Jetzt habe ich einige Module in einen eigenen Wrapper gesteckt, um nur diesen testen zu können. In diesen Modulen wird nur der Systemtakt verwendet. Das Kommunikationsmodul mit dem Clock-Domain-Crossing blieb unangetastet. Ich staunte, als ich plötzlich 1.) mehr LE brauchte und 2.) das Timing nicht mehr passte. Während der Synthese braucht er gleich viele Ressourcen, aber letztlich ändert sich das, da versucht wird das Timing zu schaffen, da es jetzt nicht mehr passt. Ich dachte, dann dass es daran liegt, dass sich intern die Namen geändert haben und wollte das sdc-File neu machen bzw überarbeiten. Irgendwie bin ich gerade nicht imstande, dass zu tun:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Wenn ich mir mit dem TimeQuestAnalyzer die Clocks reporten lasse, dann
werden alle 3 Clocks aufgelistet. Als Warnung kommt aber beim Ausführen:
Warning: At least one of the filters had some problems and could not be
matched.
Warning: ispiClk could not be matched with a clock.
Warning: At least one of the filters had some problems and could not be
matched.
Warning: InClk_40MHz could not be matched with a clock.
Warning: Ignored assignment: set_clock_groups -exclusive -group
[get_clocks { ispiClk }] -group [get_clocks { InClk_40MHz }]
Warning: Argument -group with value [get_clocks { ispiClk }] contains
zero elements
Warning: Argument -group with value [get_clocks { InClk_40MHz }]
contains zero elements
Auch wenn ich über die GUI mir die Constrains zusammenklicke, kommt das
heraus. Ich habe mir einige Unterlagen dazu schon zu Gemüte geführt,
allerdings nutzen mir auch die Examples nicht.
Ich werde mir mal einen Online-Kurs ansehen/wiederholen...
Mich hat das schon öfters verwundert mit den ganzen cells, pins, ports,
usw. und wann man was verwenden darf/soll/muss.
Kann mir jemand mit mehr sdc-Erfahrung einen Tipp geben, wie ich das
hinbekommen kann oder welche Unterlagen ich bemühen konnte?
Verwende ich derive_pll_clocks korrekt? Sprich kann ich nach dem
Kommando das machen: set sysClk { PLL_inst|altpll_component|pll|clk[0] }
?
LG, Matthias