Forum: FPGA, VHDL & Co. Synchroner Reset vom Flip Flop wird nicht verwendet


von Sebastian V. (sebi_s)


Lesenswert?

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
process begin
2
    wait until rising_edge(clk);
3
    if rst = '1' then
4
        -- perform reset
5
    else
6
        -- normal operation
7
    end if;
8
end process;
Testweise habe ich dann auch noch folgendes ausprobiert:
1
process begin
2
    wait until rising_edge(clk);
3
    -- normal operation
4
    if rst = '1' then
5
        -- perform reset
6
    end if;
7
end process;
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.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Sebastian V. (sebi_s)


Lesenswert?

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.
8
                             Requested     Estimated     Requested     Estimated                Clock        Clock              
9
Starting Clock               Frequency     Frequency     Period        Period        Slack      Type         Group              
10
--------------------------------------------------------------------------------------------------------------------------------
11
gbc_main|spi_clk             42.0 MHz      239.2 MHz     23.810        4.181         10.827     inferred     Inferred_clkgroup_0
12
pll|CLKOS_inferred_clock     42.0 MHz      129.9 MHz     23.810        7.697         16.113     inferred     Inferred_clkgroup_1
13
System                       42.0 MHz      168.5 MHz     23.810        5.934         17.875     system       system_clkgroup    
14
================================================================================================================================

Und von LSE:
1
Timing Report Summary
2
--------------
3
--------------------------------------------------------------------------------
4
Constraint                              |   Constraint|       Actual|Levels
5
--------------------------------------------------------------------------------
6
                                        |             |             |
7
create_clock -period 23.809524 -name    |             |             |
8
clk501 [get_nets spi_clk_c]             |   42.000 MHz|   70.942 MHz|     3  
9
                                        |             |             |
10
create_clock -period 23.799999          |             |             |
11
-waveform { 0.000000 11.900000 } -name  |             |             |
12
clk [ get_nets { clk } ]                |   42.016 MHz|   33.321 MHz|     6 *
13
                                        |             |             |
14
--------------------------------------------------------------------------------
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.

von C. A. Rotwang (Gast)


Lesenswert?

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.

von Sebastian V. (sebi_s)


Lesenswert?

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.

von C. A. Rotwang (Gast)


Lesenswert?

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,

von Edi M. (Gast)


Lesenswert?

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.

von WS (Gast)


Lesenswert?

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.

von Bitwurschtler (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von WS (Gast)


Lesenswert?

Hier wird Altera verwendet, die haben doch einen Eingang für areset?

von Edi M. (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

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.