Forum: FPGA, VHDL & Co. Clock Timing-Probleme in Quartus-Projekt


von Christian F. (feuerwerk)


Angehängte Dateien:

Lesenswert?

Hi zusammen

Ich spiele im ein bisschen mit VHDL und Risc-V herum und möchte nun mein 
Design auf einem Max1000 testen. Wenn ich die PLL jedoch auf 40 MHz für 
den Takt meiner CPU einstelle (40 MHz ist das Ziel was ich gerne 
erreichen möchte, aber auch kein Weltuntergang wenn ich es nicht 
schaffe), bekomme ich jedoch von Quartus (Version 18.1.1) immer eine 
kritische Warnung "Timing requirements not met". Im Compilation Report 
bekomme ich unter Timing Analyzer // Slow Model / Setup Summary den rot 
markierten Hinweis, dass meine Clock 
(plli|altpll_component|auto_generated|pll1|clk[0]) einen Slack von 
-27.842 hat. Leider kann mich die Quartus-Dokumentation zu dem Fehler 
nicht wirklich erhellen und Tante Google weiß scheinbar auch nicht viel 
darüber. Ich vermute mal, dass mein Design schlicht zu langsam ist, 
jedoch hab ich in früheren Projekten dann immer einen "Worst path" 
bekommen, der mich in die richtige Richtung stößt wo ich optimieren 
muss, hier bekomme ich aber nur den Fehler, dass was mit der Clock nicht 
passt. Kann mir jemand weiter helfen?

Hier ein Auszug aus der Ausgabe:
1
Critical Warning (332148): Timing requirements not met
2
Info (332146): Worst-case setup slack is -27.842
3
  Info (332119):     Slack       End Point TNS Clock 
4
  Info (332119): ========= =================== =====================
5
  Info (332119):   -27.842          -21772.647 plli|altpll_component|auto_generated|pll1|clk[0] 
6
  Info (332119):    45.398               0.000 altera_reserved_tck 
7
Info (332146): Worst-case hold slack is 0.335
8
  Info (332119):     Slack       End Point TNS Clock 
9
  Info (332119): ========= =================== =====================
10
  Info (332119):     0.335               0.000 altera_reserved_tck 
11
  Info (332119):     0.341               0.000 plli|altpll_component|auto_generated|pll1|clk[0] 
12
Info (332146): Worst-case recovery slack is 97.410
13
  Info (332119):     Slack       End Point TNS Clock 
14
  Info (332119): ========= =================== =====================
15
  Info (332119):    97.410               0.000 altera_reserved_tck 
16
Info (332146): Worst-case removal slack is 1.036
17
  Info (332119):     Slack       End Point TNS Clock 
18
  Info (332119): ========= =================== =====================
19
  Info (332119):     1.036               0.000 altera_reserved_tck 
20
Info (332146): Worst-case minimum pulse width slack is 12.171
21
  Info (332119):     Slack       End Point TNS Clock 
22
  Info (332119): ========= =================== =====================
23
  Info (332119):    12.171               0.000 plli|altpll_component|auto_generated|pll1|clk[0] 
24
  Info (332119):    41.561               0.000 CLK12M 
25
  Info (332119):    49.513               0.000 altera_reserved_tck 
26
Info (332114): Report Metastability: Found 1 synchronizer chains.
27
  Info (332114): The design MTBF is not calculated because there are no specified synchronizers in the design.
28
  Info (332114): Number of Synchronizer Chains Found: 1
29
  Info (332114): Shortest Synchronizer Chain: 5 Registers
30
  Info (332114): Fraction of Chains for which MTBFs Could Not be Calculated: 1.000
31
  Info (332114): Worst Case Available Settling Time: 344.972 ns
32
  Info (332114): 
33
Info: Analyzing Slow 1200mV 0C Model
34
Info (334003): Started post-fitting delay annotation
35
Info (334004): Delay annotation completed successfully
36
Info (332097): The following timing edges are non-unate.  The Timing Analyzer will assume pos-unate behavior for these edges in the clock network.
37
  Info (332098): Cell: altera_internal_jtag  from: tck  to: tckutap
38
Info (332123): Deriving Clock Uncertainty. Please refer to report_sdc in the Timing Analyzer to see clock uncertainties.


Gruß
Christian

von Klakx (Gast)


Lesenswert?

Was ist CLK12M und wie steht er zu deinem System clock?
Timing Verletzung entstehen oft wenn man die Übergänge zwischen zwei 
verschiedenen clocks nicht constrainiert. Sieht hier sehr danach aus

von Markus F. (mfro)


Lesenswert?

Klakx schrieb:
> Was ist CLK12M und wie steht er zu deinem System clock?
> Timing Verletzung entstehen oft wenn man die Übergänge zwischen zwei
> verschiedenen clocks nicht constrainiert. Sieht hier sehr danach aus

Das ist hier tatsächlich nicht der Fall. Das Design ist voll synchron 
und nutzt nur eine einzige PLL-clock (der 12 MHz-Takt versorgt nur die 
PLL).

Der Weg vom Prozessor zum Timer enthält halt nun mal mehr als 60 
Kombinatorik-Ebenen und das packt das Ding nicht mit 40 MHz.

Ohne Änderung (s. "Fmax Summary") wird das Design nicht zuverlässig über 
18 MHz hinauskommen.

von Christian F. (feuerwerk)


Lesenswert?

Hi

@Markus F.
Ok, hab mir schon gedacht, dass der Pfad zum Speicher übel ist, da werd 
ich wohl noch einen Takt zwischen rein machen müssen. Das mit "Fmax 
Summary" kannte ich noch nicht, sehr praktisch. Wenn ich fragen darf, 
wie hast du diese 60 Kombinatorik-Ebenen ermittelt bzw. wie bist du dran 
gegangen um meinen Fehler zu finden? Mir fehlt da derzeit noch etwas das 
Gespür wie ich mehr über die Leistungsfähigkeit meines Designs erfahren 
kann bzw. Hinweise wo ich hin schauen muss bzw. wo die größten Probleme 
stecken?


Vielen Dank schon mal
Christian

von Markus F. (mfro)


Lesenswert?

Christian F. schrieb:
> Ok, hab mir schon gedacht, dass der Pfad zum Speicher übel ist, da werd
> ich wohl noch einen Takt zwischen rein machen müssen. Das mit "Fmax
> Summary" kannte ich noch nicht, sehr praktisch. Wenn ich fragen darf,
> wie hast du diese 60 Kombinatorik-Ebenen ermittelt bzw. wie bist du dran
> gegangen um meinen Fehler zu finden?

Im Synthese-Report -> Setup Summary -> Rechte Maustaste -> Report Timing 
(in Timeing Analyzer UI)
Da bekommst Du die einzelnen Signale fein geordnet nach schlechtestem 
Slack.
Unter Statistics -> Count wird gleich die Anzahl der Logic Level des 
oben angeklickten Pfades angezeigt.

von Christian F. (feuerwerk)


Lesenswert?

Hi

@Markus F.
Ich bin wohl blind. Ich bin im Timing Analyzer. Synthese Report habe ich 
nicht. Ich kann nur Reports // Slack // Report Setup Summary machen, da 
bekomme ich aber keine ausführliche Auflistung der Signale. Dann hab ich 
hier noch Reports // Custom // Report Timing gefunden, hier öffnet sich 
ein Dialog
wo ich "From Clock" & "To Clock" angeben kann, sowie eine ganze Reihe 
weiterer Einstellungsmöglichkeiten, hier werde ich unter anderem mit 
einer langen Liste von "Data Path"-Einträgen erschlagen. Bin ich da 
richtig?

Gruß
Christian

von Markus F. (mfro)


Lesenswert?

Christian F. schrieb:
> Ich bin im Timing Analyzer. Synthese Report habe ich
> nicht.

Der Synthese-Report ist in Quartus Prime, nicht im Timing Analyzer:

Window -> Compilation Report (oder einfach Strg+R)

In dem Fenster unter "Table of Contents" -> Timing Analyzer
Dort "Slow 1200mV 5C Model" aufklappen ->"Setup Summary" ist rot -> 
aufklappen
Rechts erscheint deine Clock 0 mit Setup-Timingverletzungen
Rechte Maustaste auf diese Zeile -> "Report Timing... (In Timing 
Analyzer UI)" auswählen
Timing Analyzer geht auf mit dem "Report Timing"-Dialog. Auswahl 
bestätigen.

Jetzt bekommst Du eine Liste von Timing-Verletzungen. Oben eine 
Auswählen, unten auf den Reiter "Data Path". Hier kannst Du dir die 
einzelnen "Stationen" deines Signals mit Setup-Verletzungen anschauen.
Unter "Statistics" erscheint "Number of Logic Levels": 59

von Christian F. (feuerwerk)


Lesenswert?

Hi Markus F.

Wow, da wird man erschlagen, aber ja, das sieht sehr interessant aus, 
damit muss ich mich auseinandersetzen, vielen Dank für die Hilfe :-)

Gruß
Christian

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.