Forum: FPGA, VHDL & Co. Timing Errors FIFO Xilinx ISE


von User (Gast)


Lesenswert?

Hallo,

ich habe mal eine Frage zu einem FIFO, den ich mit COREGEN von Xilinx 
generiert habe.

Als Input habe ich ein 16 Bit Bus mit einer Clock von 100MHz.
Der Output ist ein 64 Bit großer Datenbus und wird ausgelesen mit der 
Taktdomain 280MHz.

Nun ergeben sich bekannter Weise Timing errors aufgrund des Cross 
Clocking Domains im FIFO:
1
Timing constraint: TS_CLK = PERIOD TIMEGRP "CLK" 10 ns HIGH 50%; 
2
 For more information, see Period Analysis in the Timing Closure User Guide (UG612). 
3
  1077 paths analyzed, 658 endpoints analyzed, 12 failing endpoints 
4
  12 timing errors detected. (12 setup errors, 0 hold errors, 0 component switching limit errors) 
5
  Minimum period is  67.538ns. 
6
 -------------------------------------------------------------------------------- 
7
  
8
 Paths for end point u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[1].wr_stg_inst/Q_reg_4 (SLICE_X46Y53.AX), 1 path 
9
 -------------------------------------------------------------------------------- 
10
 Slack (setup path):     -4.114ns (requirement - (data path - clock path skew + uncertainty)) 
11
   Source:               u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_gc_4 (FF) 
12
   Destination:          u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[1].wr_stg_inst/Q_reg_4 (FF) 
13
   Requirement:          0.715ns 
14
   Data Path Delay:      0.780ns (Levels of Logic = 0)(Component delays alone exceeds constraint) 
15
   Clock Path Skew:      -3.289ns (3.009 - 6.298) 
16
   Source Clock:         i_CLKx7_ELLISA rising at 39.285ns 
17
   Destination Clock:    i_SYSCLK rising at 40.000ns 
18
   Clock Uncertainty:    0.760ns 
19
  
20
   Clock Uncertainty:          0.760ns  ((TSJ^2 + DJ^2)^1/2) / 2 + PE 
21
     Total System Jitter (TSJ):  0.070ns 
22
     Discrete Jitter (DJ):       0.260ns 
23
     Phase Error (PE):           0.624ns 
24
  
25
   Maximum Data Path: u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_gc_4 to u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[1].wr_stg_inst/Q_reg_4 
26
     Location             Delay type         Delay(ns)  Physical Resource 
27
                                                        Logical Resource(s) 
28
     -------------------------------------------------  ------------------- 
29
     SLICE_X47Y53.AQ      Tcko                  0.450   u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_gc<7> 
30
                                                        u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_gc_4 
31
     SLICE_X46Y53.AX      net (fanout=1)        0.338   u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_gc<4> 
32
     SLICE_X46Y53.CLK     Tdick                -0.008   u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[1].wr_stg_inst/Q_reg<7> 
33
                                                        u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[1].wr_stg_inst/Q_reg_4 
34
     -------------------------------------------------  --------------------------- 
35
     Total                                      0.780ns (0.442ns logic, 0.338ns route) 
36
                                                        (56.7% logic, 43.3% route)

Diese Timing errors bekomme ich bekannterweise durch folgende 
Constraints weg:
1
NET "*u_CL_ELLISA_FIFO_CONTROL*rd_pntr_gc*" TIG;
2
NET "*u_CL_ELLISA_FIFO_CONTROL*wr_pntr_gc*" TIG;

Bis hierhin alles gut. Bekomme aber noch weitere Timing Errors:
1
Timing constraint: TS_u_CLOCK_MANAGEMENT_u_ELLISA_PLL_CLKOUT0_BUF = PERIOD TIMEGRP         "u_CLOCK_MANAGEMENT_u_ELLISA_PLL_CLKOUT0_BUF" TS_CLK / 2.8 HIGH 50%; 
2
 For more information, see Period Analysis in the Timing Closure User Guide (UG612). 
3
  3621 paths analyzed, 1337 endpoints analyzed, 5 failing endpoints 
4
  5 timing errors detected. (5 setup errors, 0 hold errors, 0 component switching limit errors) 
5
  Minimum period is   3.888ns. 
6
 -------------------------------------------------------------------------------- 
7
  
8
 Paths for end point u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/dout_i_47 (SLICE_X20Y42.D3), 1 path 
9
 -------------------------------------------------------------------------------- 
10
 Slack (setup path):     -0.317ns (requirement - (data path - clock path skew + uncertainty)) 
11
   Source:               u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/gbm.gbmg.gbmga.ngecc.bmg/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[4].ram.r/v5_noinit.ram/SDP.SINGLE_PRIM36.TDP (RAM) 
12
   Destination:          u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/dout_i_47 (FF) 
13
   Requirement:          3.571ns 
14
   Data Path Delay:      3.419ns (Levels of Logic = 1) 
15
   Clock Path Skew:      -0.334ns (1.364 - 1.698) 
16
   Source Clock:         i_CLKx7_ELLISA rising at 0.000ns 
17
   Destination Clock:    i_CLKx7_ELLISA rising at 3.571ns 
18
   Clock Uncertainty:    0.135ns 
19
  
20
   Clock Uncertainty:          0.135ns  ((TSJ^2 + DJ^2)^1/2) / 2 + PE 
21
     Total System Jitter (TSJ):  0.070ns 
22
     Discrete Jitter (DJ):       0.260ns 
23
     Phase Error (PE):           0.000ns 
24
  
25
   Maximum Data Path: u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/gbm.gbmg.gbmga.ngecc.bmg/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[4].ram.r/v5_noinit.ram/SDP.SINGLE_PRIM36.TDP to u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/dout_i_47 
26
     Location             Delay type         Delay(ns)  Physical Resource 
27
                                                        Logical Resource(s) 
28
     -------------------------------------------------  ------------------- 
29
     RAMB36_X1Y7.DOPBDOPL1Trcko_DOPB_NC         2.180   u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/gbm.gbmg.gbmga.ngecc.bmg/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[4].ram.r/v5_noinit.ram/SDP.SINGLE_PRIM36.TDP 
30
                                                        u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/gbm.gbmg.gbmga.ngecc.bmg/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[4].ram.r/v5_noinit.ram/SDP.SINGLE_PRIM36.TDP 
31
     SLICE_X20Y42.D3      net (fanout=1)        1.229   u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/gbm.gbmg.gbmga.ngecc.bmg/gnativebmg.native_blk_mem_gen/valid.cstr/ram_doutb3<26> 
32
     SLICE_X20Y42.CLK     Tas                   0.010   i_CL_ELLISA_FIFO_DOUT<31> 
33
                                                        u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/gbm.gbmg.gbmga.ngecc.bmg/gnativebmg.native_blk_mem_gen/valid.cstr/has_mux_b.B/dout_mux<47>1 
34
                                                        u_CL_ELLISA_FIFO_CONTROL/u_CL_ELLISA_FIFO_exdes/exdes_inst/U0/xst_fifo_generator/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.mem/dout_i_47 
35
     -------------------------------------------------  --------------------------- 
36
     Total                                      3.419ns (2.190ns logic, 1.229ns route) 
37
                                                        (64.1% logic, 35.9% route) 
38
  
39
 --------------------------------------------------------------------------------

Diese bekomme ich durch folgende Constraints ebenfalls weg:
1
NET "*u_CL_ELLISA_FIFO_CONTROL*gbm.*" TIG;

Aber was bedeuten diese Fehler, das will ich verstehen. Darf ich diese 
einfach ignorieren???

von Duke Scarring (Gast)


Lesenswert?

User schrieb:
> Als Input habe ich ein 16 Bit Bus mit einer Clock von 100MHz.
Die Datenrate beträgt also 1.6 GBit/s.

> Der Output ist ein 64 Bit großer Datenbus und wird ausgelesen mit der
> Taktdomain 280MHz.
Hier ergibt sich 17.9 GBit/s als Datenrate, also reichlich das 
zehnfache.

Überträgst Du nur einzelen Datenworte oder ganze Blöcke?

Für einzelne Datenworte könntest Du in der 100 MHz Domäne eine 
Signalleitung toggeln, wenn ein neues Datum eintrifft. Diese Leitung 
wird in der 260 MHz Domäne einsynchronisiert und ausgewertet.

Duke

von User (Gast)


Lesenswert?

Duke Scarring schrieb:
> User schrieb:
>> Als Input habe ich ein 16 Bit Bus mit einer Clock von 100MHz.
> Die Datenrate beträgt also 1.6 GBit/s.
>
>> Der Output ist ein 64 Bit großer Datenbus und wird ausgelesen mit der
>> Taktdomain 280MHz.
> Hier ergibt sich 17.9 GBit/s als Datenrate, also reichlich das
> zehnfache.

Die Bruttodatenraten sind schon richtig.
Aber netto lese ich x-fach langsamer aus.

Wenn ich den Timing Fehler in Planahead untersuche ist das der Ausgang 
vom RAM (FIFO) zum FF (das mal 64Bit). Da ich diese zwischengepufferten 
Daten in den FF erst nach x Takten vom 280MHz abhole will ich das Timing 
hier ignorieren. Oder?!

Duke Scarring schrieb:
> Überträgst Du nur einzelen Datenworte oder ganze Blöcke?

Das FIFO soll später als Pipelining für die Crossing Clock Domain vom 
100 auf 280MHz dienen. Die Datenblöcke werden in ein DDR2 Ram vorher 
abgelegt und auf Befehl über den hier genannten FIFO zur 280MHz Domain 
übertragen/umgesetzt. Letztendlich wird in der 280MHz Domain ein Camera 
Link Interface realisiert.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

User schrieb:
> Aber was bedeuten diese Fehler, das will ich verstehen. Darf ich diese
> einfach ignorieren???

Sehr gute Einstellung, auf keinen Fall ignorieren!

Der zweite Teil zeigt ein Timing Problem auf einem intra-Clock Pfad 
(Source und Destination Clock sind dieselben). Sprich dein P&R bekommst 
kein Routing hin, bei dem die Timings eingehalten werden.

Ich wuerde folgende Strategie empfehlen:

1.) Nutze den SmartXplorer und lass mal ein paar Runs mit 
unterschiedlichen Placer Cost Tables durchlaufen. Jeder Run erzeugt ein 
neues Mappping und vielleicht findet P&R dann ein besseres Routing.

2.) Wenn 1.) nicht hilft, kannst du (falls noch nicht geschehen) dein 
Fifo umkonfigurieren und es mit Output Register verwenden. Damit erhoeht 
sich zwar deine Output Latenz um ein Clock Cycle, jedoch schafft der P&R 
damit deutlich einfacher das Timing. Das wuerde auch ziemlich dem 
entsprechen was dein zweiter Report berichtet, da er das Routing 
zwischen dem BRAM Element und dem naechsten FF nicht einhalten kann.

Vielleicht koenntets du noch angeben um welchen FPGA Typ es geht. Dann 
kann man ein bisschen besser einordnen ob die 280 MHz machbar sind.

: Bearbeitet durch User
von User (Gast)


Angehängte Dateien:

Lesenswert?

Tobias B. schrieb:
> 1.) Nutze den SmartXplorer und lass mal ein paar Runs mit
> unterschiedlichen Placer Cost Tables durchlaufen. Jeder Run erzeugt ein
> neues Mappping und vielleicht findet P&R dann ein besseres Routing.

Wo finde und wie verwende ich bitte den SmartXplorer? Hab das nie 
benutzt.

Tobias B. schrieb:
> 2.) Wenn 1.) nicht hilft, kannst du (falls noch nicht geschehen) dein
> Fifo umkonfigurieren und es mit Output Register verwenden. Damit erhoeht
> sich zwar deine Output Latenz um ein Clock Cycle, jedoch schafft der P&R
> damit deutlich einfacher das Timing.

Ich benutze das FiFo mit der Option First-Word-Fall-Through, heißt am 
Außgang des FiFos liegen schomal die Daten bereit.

Tobias B. schrieb:
> Das wuerde auch ziemlich dem
> entsprechen was dein zweiter Report berichtet, da er das Routing
> zwischen dem BRAM Element und dem naechsten FF nicht einhalten kann.

Im Bild 1 und 2 sieht man Ausschnitte aus dem Floorplaner (Timing 
Analyze) zum Path mit einem Timing Error.
Letztendlich ist es ein Timing Fehler vom RAM (FIFO) zum ersten FF 
innerhalb der FIFO Instanz. Dieses Signal wird dann durchgeschliffen und 
gelangt in einer anderen Instanz in ein LUT6 (siehe Bild 3).
Der Timing Fehler passiert quasi am FDRE (*/dout_i_2), aber durch meine 
Hardwarebeschreibung in u_CL_ELLISA lese ich das Signal x Takte (durch 
ein Clock Enable Signal) später in FD (i_PIXELDATA_2) ein.
Daher spielt hier ein Timing Fehler keine Rolle, da das Signal genug 
Zeit hatte die Setup Time am LUT einzuhalten, sodass die Timing Errors 
ignoriert werden können. Richtig?
Hoffe das ich es verständlich erklärt habe :-)

Tobias B. schrieb:
> Vielleicht koenntets du noch angeben um welchen FPGA Typ es geht. Dann
> kann man ein bisschen besser einordnen ob die 280 MHz machbar sind.

Es ist ein Virtex 5, soweit ich gesehen habe gehen die BRAMs und FF bis 
450MHz bei Speed Grade -1. Noch am Rande, habe die 280MHz auf 350MHz 
(ich böser) erhöht weil ich sowohl eine IP-Core für 280MHz und 350MHz 
Camera Link Schnittstelle brauche. Teste quasi beide durch.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

User schrieb:
> Tobias B. schrieb:
>> 1.) Nutze den SmartXplorer und lass mal ein paar Runs mit
>> unterschiedlichen Placer Cost Tables durchlaufen. Jeder Run erzeugt ein
>> neues Mappping und vielleicht findet P&R dann ein besseres Routing.
>
> Wo finde und wie verwende ich bitte den SmartXplorer? Hab das nie
> benutzt.

Die Anleitung ist ein bisschen alt (ISE 11) sollte aber im Grunde 
taugen:

https://www.xilinx.com/support/documentation/sw_manuals/xilinx11/ise_c_using_smart_xplorer.htm

ISt wirklich narrensicher zu bedienen, einfach mal ein bisschen 
rumspielen.

User schrieb:
> Tobias B. schrieb:
>> 2.) Wenn 1.) nicht hilft, kannst du (falls noch nicht geschehen) dein
>> Fifo umkonfigurieren und es mit Output Register verwenden. Damit erhoeht
>> sich zwar deine Output Latenz um ein Clock Cycle, jedoch schafft der P&R
>> damit deutlich einfacher das Timing.
>
> Ich benutze das FiFo mit der Option First-Word-Fall-Through, heißt am
> Außgang des FiFos liegen schomal die Daten bereit.

Ok, das koennte das Problem erklaeren. Du kannst ja mal spasseshalber 
FWFT deaktivieren und einen neuen Run starten. Duerfte das Timing wohl 
positiv beeinflussen.

User schrieb:
> Tobias B. schrieb:
>> Das wuerde auch ziemlich dem
>> entsprechen was dein zweiter Report berichtet, da er das Routing
>> zwischen dem BRAM Element und dem naechsten FF nicht einhalten kann.
>
> Im Bild 1 und 2 sieht man Ausschnitte aus dem Floorplaner (Timing
> Analyze) zum Path mit einem Timing Error.
> Letztendlich ist es ein Timing Fehler vom RAM (FIFO) zum ersten FF
> innerhalb der FIFO Instanz. Dieses Signal wird dann durchgeschliffen und
> gelangt in einer anderen Instanz in ein LUT6 (siehe Bild 3).
> Der Timing Fehler passiert quasi am FDRE (*/dout_i_2), aber durch meine
> Hardwarebeschreibung in u_CL_ELLISA lese ich das Signal x Takte (durch
> ein Clock Enable Signal) später in FD (i_PIXELDATA_2) ein.
> Daher spielt hier ein Timing Fehler keine Rolle, da das Signal genug
> Zeit hatte die Setup Time am LUT einzuhalten, sodass die Timing Errors
> ignoriert werden können. Richtig?
> Hoffe das ich es verständlich erklärt habe :-)

Das ist korrekt analysiert. Lies dir mal in UG190 das Kapitel "Block 
RAM" durch:

https://www.xilinx.com/support/documentation/user_guides/ug190.pdf

Ich darf zitieren:

"The output data path has an optional internal pipeline register. Using 
the register mode is strongly recommended. This allows a higher clock 
rate, however, it adds a clock cycle latency of one."

Sprich das Pipelining geht schon innerhalb der BRAM Instanz los. Falls 
deine nachfolgende Logik das ab kann, bzw. du das entsprechend umgebaut 
bekommst, wuerde ich das auf jedenfall empfehlen. Immerhin ist dein Bus 
64 bit breit und wird mit 280+ MHz getaktet. Das ist kein 
Zuckerschlecken.

Wenn das wirklich keine Rolle spielen soll (dazu muesste man mal den 
Code noch sehen, dann kann ich mir besser vorstellen was passiert), dann 
ist das Stichwort: Multi-Cycle-Path genau das was du suchst.

von User (Gast)


Angehängte Dateien:

Lesenswert?

Tobias B. schrieb:
> Die Anleitung ist ein bisschen alt (ISE 11) sollte aber im Grunde
> taugen:
>
> 
https://www.xilinx.com/support/documentation/sw_manuals/xilinx11/ise_c_using_smart_xplorer.htm
>
> ISt wirklich narrensicher zu bedienen, einfach mal ein bisschen
> rumspielen.

Danke, super tool, habs gleich mal ausprobiert.

Tobias B. schrieb:
> Sprich das Pipelining geht schon innerhalb der BRAM Instanz los. Falls
> deine nachfolgende Logik das ab kann, bzw. du das entsprechend umgebaut
> bekommst, wuerde ich das auf jedenfall empfehlen. Immerhin ist dein Bus
> 64 bit breit und wird mit 280+ MHz getaktet. Das ist kein
> Zuckerschlecken.

Ich habe mal fürs Pipelining die Option "Use Embedded Registers in BRAM 
or FIFO (when possible)" aktiviert (mit FWFT Methode Latency = 0!) beim 
Fifo Generator in Coregen, der hat das FF in der FIFO instanz weg 
genommen (siehe Bild 2 in vorherigem post) und hat den FF in meiner 
Instanz direkt mit dem FIFO Output verbunden bzw. das LUT (inkl. Clock 
Enable Signal) ist noch vorm FF gesetzt (siehe Bild 4). Die Timing 
Errors sind selbst bei 350MHz Taktdomain weg!

Tobias B. schrieb:
> Wenn das wirklich keine Rolle spielen soll (dazu muesste man mal den
> Code noch sehen, dann kann ich mir besser vorstellen was passiert), dann
> ist das Stichwort: Multi-Cycle-Path genau das was du suchst.

An Multi-Cycle habe ich auch schon gedacht, hab das an anderen Stellen 
schon drin, was die Timing Analyse entspannt.
Ist es aber sinnvoll an einem FIFO output ein Multi-Cycle Contraints 
anzulegen?

Wenn ich jetzt an meine i_PIXELDATA_* (siehe Bild 4)  ein multicycle 
setzen will um das Timing weiter zu entspannen, obwohl keine timing 
errors mehr da sind, würde das hier reichen:
1
INST "u_CL_ELLISA/i_PIXELDATA_**" TNM = i_PIXELDATA;
2
TIMESPEC TS_i_PIXELDATA_TO_i_PIXELDATA = FROM "i_PIXELDATA" TO i_PIXELDATA" 
3
 TS_u_CLOCK_MANAGEMENT_u_MICROBOLOMETER1_PLL_CLKOUT0_BUF * 7;

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

User schrieb:
> Danke, super tool, habs gleich mal ausprobiert.

Gerne, der SmartXplorer ist vor allem bei grossen Designs unverzichtbar, 
bei dem der FPGA so voll wird, dass es fuers P&R schwer wird geeignete 
Routings zu finden. Muss man dann teilweise ueber Nacht oder sogar ein 
paar Tage laufen lssen, lohnt sich dann aber (vor allem bei einem 
Mehrkern Rechner). Wichtig ist nur, dass man genuegend RAM hat. :-)

User schrieb:
> Ich habe mal fürs Pipelining die Option "Use Embedded Registers in BRAM
> or FIFO (when possible)" aktiviert (mit FWFT Methode Latency = 0!) beim
> Fifo Generator in Coregen, der hat das FF in der FIFO instanz weg
> genommen (siehe Bild 2 in vorherigem post) und hat den FF in meiner
> Instanz direkt mit dem FIFO Output verbunden bzw. das LUT (inkl. Clock
> Enable Signal) ist noch vorm FF gesetzt (siehe Bild 4). Die Timing
> Errors sind selbst bei 350MHz Taktdomain weg!

Genau das war das erhoffte Ergebnis. Statt dem relativ weitem Routing 
weg vom BRAM Ausgang zu den ersten CLB FFs, werden nun FFs im BRAM 
verwendet direkt nach dem RAM Latch. Das ist Timing-technisch einfach 
optimaler, man muss halt mit dem zusaetzlichen Cycle Latenz 
zurechtkommen. Aber offensichtlich macht der FIFO Generator das alles 
fuer dich. Ich nehme hauptsaechlich direkt die FIFO Macros daher fehlt 
es mir an Erfahrung mit dem FIFO Generator.

User schrieb:
> An Multi-Cycle habe ich auch schon gedacht, hab das an anderen Stellen
> schon drin, was die Timing Analyse entspannt.
> Ist es aber sinnvoll an einem FIFO output ein Multi-Cycle Contraints
> anzulegen?

Generell wuerde ich nein sagen, im Gegenteil, das kann/wird im 
Allgemeinen in die Hose gehen. Stell dir vor du laesst den Read Enable 
fuer 2 Cycles hintereinander high, weil du eben 2 Datenwoerter aus dem 
FIFO anfordern willst. Dann darf fuer das erste Wort auf keinen Fall 
eine Multicycle Bedingung gelten um erfolgreich im ersten FF zu landen.

Als Faustregel kannst du nehmen: Signale die quasi-statisch sind, koenen 
gefahrlos mit einem Multicycle belegt werden. Quasi-statisch bedeutet in 
dem Kontext, dass sie sich nur selten aendern. Je seltener, desto 
statischer, desto laenger der Multicycle und eifnacher das Timing. FIFO 
Outputs gehoeren in der Regel nicht dazu, da sich die Signale mit jedem 
Takt aendern koennen und damit maximale Dynamik aufweist.

von User (Gast)


Lesenswert?

Ich danke dir sehr.

Du hast mir echt weitergeholfen

Vielen Dank auch an alle die sich Zeit genommen haben.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

User schrieb:
> Ich danke dir sehr.
>
> Du hast mir echt weitergeholfen
>
> Vielen Dank auch an alle die sich Zeit genommen haben.

Gern geschehen. Hoffentlich bleibt das auch in Zukunft so, trotz der 
heutigen EU Paralamentsabstimmung. :-(

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.