mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian F. (feuerwerk)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
Critical Warning (332148): Timing requirements not met
Info (332146): Worst-case setup slack is -27.842
  Info (332119):     Slack       End Point TNS Clock 
  Info (332119): ========= =================== =====================
  Info (332119):   -27.842          -21772.647 plli|altpll_component|auto_generated|pll1|clk[0] 
  Info (332119):    45.398               0.000 altera_reserved_tck 
Info (332146): Worst-case hold slack is 0.335
  Info (332119):     Slack       End Point TNS Clock 
  Info (332119): ========= =================== =====================
  Info (332119):     0.335               0.000 altera_reserved_tck 
  Info (332119):     0.341               0.000 plli|altpll_component|auto_generated|pll1|clk[0] 
Info (332146): Worst-case recovery slack is 97.410
  Info (332119):     Slack       End Point TNS Clock 
  Info (332119): ========= =================== =====================
  Info (332119):    97.410               0.000 altera_reserved_tck 
Info (332146): Worst-case removal slack is 1.036
  Info (332119):     Slack       End Point TNS Clock 
  Info (332119): ========= =================== =====================
  Info (332119):     1.036               0.000 altera_reserved_tck 
Info (332146): Worst-case minimum pulse width slack is 12.171
  Info (332119):     Slack       End Point TNS Clock 
  Info (332119): ========= =================== =====================
  Info (332119):    12.171               0.000 plli|altpll_component|auto_generated|pll1|clk[0] 
  Info (332119):    41.561               0.000 CLK12M 
  Info (332119):    49.513               0.000 altera_reserved_tck 
Info (332114): Report Metastability: Found 1 synchronizer chains.
  Info (332114): The design MTBF is not calculated because there are no specified synchronizers in the design.
  Info (332114): Number of Synchronizer Chains Found: 1
  Info (332114): Shortest Synchronizer Chain: 5 Registers
  Info (332114): Fraction of Chains for which MTBFs Could Not be Calculated: 1.000
  Info (332114): Worst Case Available Settling Time: 344.972 ns
  Info (332114): 
Info: Analyzing Slow 1200mV 0C Model
Info (334003): Started post-fitting delay annotation
Info (334004): Delay annotation completed successfully
Info (332097): The following timing edges are non-unate.  The Timing Analyzer will assume pos-unate behavior for these edges in the clock network.
  Info (332098): Cell: altera_internal_jtag  from: tck  to: tckutap
Info (332123): Deriving Clock Uncertainty. Please refer to report_sdc in the Timing Analyzer to see clock uncertainties.


Gruß
Christian

von Klakx (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.