Ich beschäftige mich gerade mit der Timing Analyse von einem FPGA
Design. Momentan sind laut den Synthese Ergebnissen 33MHz als maximale
Taktfrequenz möglich und die angestrebte Frequenz ist 42MHz. Dabei
scheint es so zu sein, dass viele der krischen Pfade irgendwas mit
meinem synchronen Reset zu tun haben.
In der Netzliste kann ich sehen, dass das Reset Signal teilweise über
einen haufen LUTs läuft bis es dann auf dem Daten Eingang eines Flip
Flops endet. Ich frage mich nun warum nicht der synchrone Reset Eingang
des FF benutzt wird, denn das sollte vom Timing ja schneller sein als
irgendwelche Logik davor. Bei einigen FFs wird allerdings wie erwartet
der Reset Eingang benutzt, allerdings völlig ohne System. Selbst beim
gleichen std_logic_vector sind beiden Varianten vertreten. Wieso wird
nicht immer der Reset Eingang benutzt?
Ich habe auch mal mit verschiedenen VHDL schreibweisen rumprobiert.
Anfangs sah mein Reset wie folgt aus:
1
processbegin
2
waituntilrising_edge(clk);
3
ifrst='1'then
4
-- perform reset
5
else
6
-- normal operation
7
endif;
8
endprocess;
Testweise habe ich dann auch noch folgendes ausprobiert:
1
processbegin
2
waituntilrising_edge(clk);
3
-- normal operation
4
ifrst='1'then
5
-- perform reset
6
endif;
7
endprocess;
Meiner Meinung nach sollten beide Varianten identisch sein, wenn im
Reset alle Signale zurück gesetzt werden. Im getesten Code war dies der
Fall, und aus irgendwelchen Gründen hat die zweite Variante 2 Slices
weniger gebraucht und ein etwas niedrigere maximale Taktfrequenz.
Dazu finde ich auch die Einstellungen zur Optimierung des Systhese Tools
sehr merkwürdig. Wenn ich auf Area optimiere kommt als maximale Frequenz
35MHz raus, statt 32MHz wie wenn ich auf Timing optimiere.
Verwendeter FPGA ist der Lattice MachXO2 mit LSE als Synthese Tool.
Sebastian V. schrieb:> Ich habe auch mal mit verschiedenen VHDL schreibweisen rumprobiert.> Anfangs sah mein Reset wie folgt aus: ...> Testweise habe ich dann auch noch folgendes ausprobiert: ...> Meiner Meinung nach sollten beide Varianten identisch sein
Sieh dort die letzten paar Zeilen:
http://www.lothar-miller.de/s9y/archives/52-Kompakte-Flankenerkennung.html> Wenn ich auf Area optimiere kommt als maximale Frequenz 35MHz raus,> statt 32MHz wie wenn ich auf Timing optimiere.
Warum so langsam? Umständliche Beschreibung? Viel Logik, wo eine
Pipeline angesagt wäre?
Sebastian V. schrieb:> Dazu finde ich auch die Einstellungen zur Optimierung des Systhese Tools> sehr merkwürdig.
Was macht das alternative Synopsys-Tool?
> Ich frage mich nun warum nicht der synchrone Reset Eingang des FF> benutzt wird, denn das sollte vom Timing ja schneller sein als> irgendwelche Logik davor.
Das ist letztlich egal, denn wenn dein ganzes Design durch das
Umverdrahten nicht schneller wird, bringt es auch nichts, den Reset
schneller zumachen. Denn der hat beim synchronem Design ja die selbe
Taktfrequenz wie das restliche Design...
Lothar M. schrieb:> Sieh dort die letzten paar Zeilen:> http://www.lothar-miller.de/s9y/archives/52-Kompakte-Flankenerkennung.html
Na toll. Ist ja super sinnlos was das Sythesetool dort macht.
Lothar M. schrieb:> Warum so langsam? Umständliche Beschreibung? Viel Logik, wo eine> Pipeline angesagt wäre?
Gute Frage. Das versuche ich ja gerade heraus zu finden. Mit LSE als
Synthesetool haben die langsamsten Pfade 6 Logik Level. Das scheint mir
jetzt nicht besonders viel, wobei ich hier auch die Low Power Variante
von den MachXO2 habe und dann auch noch den langsamsten Speed Grade.
Lothar M. schrieb:> Was macht das alternative Synopsys-Tool?
Dabei kommen deutlich bessere Werte raus. Hier mal die Werte von
Synplify Pro:
1
Performance Summary
2
*******************
3
4
5
Worst slack in design: 10.827
6
7
@N: MT286 |System clock period 0.000 stretches to negative invalid value -- ignoring stretching.
Wenn ich mir die langsamsten Pfade bei Synplify Pro anschaue, dann haben
die teilweise 10 Logik Level. Irgendwie müssen die beiden Tools deutlich
unterschiedliche Werte zum Berechnen des Timings benutzen. Ich glaub ich
muss das Timing mal nach dem Place & Route anschauen und nicht nur nach
der Synthese. Dann komme ich hoffentlich dahinter welches der Synthese
Tools richtig rechnet, oder ob überhaupt eins einigermaßen sinnvolle
Werte liefert.
Sebastian V. schrieb:> Ich glaub ich> muss das Timing mal nach dem Place & Route anschauen und nicht nur nach> der Synthese. Dann komme ich hoffentlich dahinter welches der Synthese> Tools richtig rechnet, oder ob überhaupt eins einigermaßen sinnvolle> Werte liefert.
Ja musst du, synthese timings sind bestenfalls best case und nicht
zwingend realistisch. Hinzukommt das die die Tools nur solange
optimieren bis die im period constraint o.ä. Laufzeit erreicht ist, aber
nicht besser. Für die maximale Frequenz musst du das period constraint
härter setzen.
> Meiner Meinung nach sollten beide Varianten identisch sein,
Nicht unbedingt, rst ist in der regel höher prior, das muss mit if ..
else eplizit modelliert werden.
Wobei deine persönliche meinung dem Synthesetool egal ist, das verlangt
für die verschiedenen Implementierungen die exakte Verwendung der
jeweiligen templates. Für die Resets an FF beschriebt
https://www.xilinx.com/support/documentation/white_papers/wp275.pdf m.E.
recht gut warum scheinbar funktional identische VHDL-Konstrukte
unterschiedlich viel resourcen benötigen.
C. A. Rotwang schrieb:> Ja musst du, synthese timings sind bestenfalls best case und nicht> zwingend realistisch.
Habe ich mal gemacht. Dabei kamen die etwas verwunderlichen Werte von
45MHz bei LSE und 43MHz bei Synplify raus. Besonders merkwürdig finde
ich dabei das der Wert von LSE nach dem Place and Route besser geworden
ist als nach der Synthese. Die Werte nach der Synthese hab ich jetzt so
verstanden, dass das die maximale Frequenz angibt die bei optimalem
Routing vielleicht erreicht werden kann. Scheinbar sind die Werte aber
völlig nutzlos...
C. A. Rotwang schrieb:> Für die Resets an FF beschriebt> https://www.xilinx.com/support/documentation/white_papers/wp275.pdf m.E.> recht gut warum scheinbar funktional identische VHDL-Konstrukte> unterschiedlich viel resourcen benötigen.
Werde ich mir mal anschauen.
Sebastian V. schrieb:> Die Werte nach der Synthese hab ich jetzt so> verstanden, dass das die maximale Frequenz angibt die bei optimalem> Routing vielleicht erreicht werden kann. Scheinbar sind die Werte aber> völlig nutzlos...
Also ich bin gut damit gefahren syntheseangaben zu timing zu ignorieren,
die Angabe zum chiplevel (anzahl der LUT's zwischen FF) kann aber
hilfreich sein.
Analysewürdig sind m.E. die End-Ergebnisse vom P&R und nicht die
Zwischenergebnisse vom Synthese(Dritt-)tool.
Ich hab mir oft mit dem FPGA-Editor die Drahtknäule angeschaut die
entstanden sind.Manchmal liegt es auch am Clocktree, da werden BUFGMUX
blöd platziert so dass der clock skew die ganze performance schluckt.
Oder, oder, oder,
Das ist ja wohl auch logisch, wenn man weiss, dass P&R erst richtig
platziert und vorher gar kein Wissen über Timing exisitiert. Die
Synthese kann nur ungefähr raten was so durchscnittlich rauskommen kann.
Wie schaut es denn aus, wenn man den asynchronen Reset verwendet? Wird
das dann schneller?
Gibt es einen Grund, das nicht zu tun?
Soweit Ich weiss, ist der asynch_reset Eingang beim FPGA extra und
belastet nicht die Resourcen.
Sebastian V. schrieb:> Verwendeter FPGA ist der Lattice MachXO2 mit LSE als Synthese Tool.
Aber auch da gibt es für die Flipflops einen synchronen oder einen
asynchronen Modus. Insofern trifft das WP von Xilinx auch hier zu.
Warum baust du es nicht einfach ein und misst nach?
Ich sehe keinen Grund in FPGAs einen aysnchronen Reset einzubauen.
Xilinx ist nur konsequent, das komplett rauszuschmeissen.
Bitwurschtler schrieb:> WS schrieb:>> Soweit Ich weiss, ist der asynch_reset Eingang beim FPGA extra und>> belastet nicht die Resourcen.>> Dann weisst Du falsch ->> https://www.xilinx.com/support/documentation/white_papers/wp275.pdf S. 5
Richtig, bei den meisten FPGAs wird das nicht vorgesehen, weil es kaum
einen Vorteil bringt. Da FPGAs erst mal laden, muss man sich ohnehin
Gedanken über das Verhalten während der Ladephase machen, wenn der FPGA
"noch nicht in der Schaltung ist", weil das Sekunden sein können. Da
machen ein paar Takte bis zu einer eingeschwungenen PLL und voller
Kontrolle der Ausgänge nichts aus.
Bei einem ASIC ist das anders: Der ist praktisch mit dem Einschalten
aktiv und würde einige Takte benötigen, bis alle synchronen Register
durch Propagieren der Information gesetzt werden. Also braucht ein ASIC
a) einen reset und hat b) einen Vorteil von einem asynchronen Reset.
Viele verzichten aber auch bei ASICs inzwischen auf aresets, weil die
PLLs heute derart flot sind, dass sie binnen z.B. 10 Takten sicher da
sind.