Forum: FPGA, VHDL & Co. sdc-File: Clocks werden erkannt, dann aber doch nicht.


von Matthias (Gast)


Lesenswert?

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
# base clocks
2
create_clock -name { InClk_40MHz } -period 25.000 -waveform { 0.000 12.500 } [get_ports { InClk_40MHz }]
3
create_clock -name { ispiClk } -period 62.500 -waveform { 0.000 31.25 } [get_ports { ispiClk }] -add
4
5
derive_pll_clocks
6
derive_clock_uncertainty
7
8
# use the derived pll clock and name it "sysClk"
9
set sysClk { PLL_inst|altpll_component|pll|clk[0] }
10
11
# pfade trennen
12
set_clock_groups -exclusive -group { ispiClk } -group { InClk_40MHz }
13
set_clock_groups -exclusive -group { ispiClk } -group { PLL_inst|altpll_component|pll|clk[0] }

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

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.