Hallo,
ich habe hier 4 ADC mit 16 Bit und je 1MSample Datenrate. Die Daten
sollen durch einen FPGA verarbeitet werden. Filtern, Mischen, teilweise
FFT.
Ist des sinnvoll die Daten im FPGA seriell zwischen den einzelnen
Einheiten zu übertragen? Jeder Kanal nacheinander auf einem 16 Bit Bus
(AXI Stream) oder ist es im FPGA effektiver einen massiv parallelen Bus
mit 72 Bit zu nutzen.
FPGA (Spartan 6)
MfG
Klaus
Klaus schrieb:> ich habe hier 4 ADC mit 16 Bit und je 1MSample Datenrate. Die Daten> sollen durch einen FPGA verarbeitet werden. Filtern, Mischen, teilweise> FFT.> FPGA (Spartan 6)
PCB oder Kabel? Taktfrequenz auf dem Parallelbus? Länge?
Zu erwartende Problem sind Übersprechen und zeitlicher Signalversatz
zwischen den Einzelleitungen (skew). Bei einem Msample sollte das aber
beherrschbar sein. Bei der dimensionierung der Stütz-C an den FPGA-Pins
spielt die Anzahl gleichzeitig schaltender Ausgänge eine Rolle. Aber 1
MHz sollte kein Problem sein. Zum Vergleich: der alte PCI 1,0 von 1991
läuft mit 33MHz und 32 parallenen Daten/Adresse.
MfG,
mar IO schrieb:> Fpga Kuechle schrieb:>> PCB oder Kabel? Taktfrequenz auf dem Parallelbus? Länge?>> Im FPGA ein Kabel ziehen???
Nein, zwischen FPGA-(Board) und ADC-(board)
MfG,
Klaus schrieb:> Filtern, Mischen, teilweise> FFT.>> Ist des sinnvoll die Daten im FPGA seriell zwischen den einzelnen> Einheiten zu übertragen?
Wenn du deine 4 ADC-Daten sauber in deine 'Einheiten' nacheinander
fuettern kannst, dann brauchst du auch nur ca. 1/4 der Logik im FPGA.
Wenn du viel Platz hast kannst du natuerlich auch alles 4x einbauen und
brauchst keine Synchronisierung.
Probier's doch einfach aus, ist doch nur ein bisschen umverdrahten und
instantiieren im top-level...
Fpga Kuechle schrieb:> mar IO schrieb:>> Fpga Kuechle schrieb:>>> PCB oder Kabel? Taktfrequenz auf dem Parallelbus? Länge?>>>> Im FPGA ein Kabel ziehen???>> Nein, zwischen FPGA-(Board) und ADC-(board)>> MfG,
Habe ich etwas anders verstanden.
Klaus schrieb:> einen massiv parallelen Bus mit 72 Bit
Naja, wenn jede Graka schon den Speicher extern mit 128 Bit anbindet,
dann sind 72 Bit aka 4*16 Bit noch nicht massiv...
Und natürlich ist es in erster Näherung einfacher und schneller, wenn
einfach alles 4x da ist. Denn dann musst du nur 1x enwickeln und 3x
instantiieren.
Erst dann, wenn dir dann nach 3,5 Einheiten der Platz ausgeht, musst
du dir Gedanken um ein Zeitmultiplexverfahren machen...
Ich hatte mal ein Spartan3 Projekt mit 6 RAM-Bänken à 16bit Daten +
24Bit Adressen + Steuerleitungen. Alles parallel. Machte in Summe über
256 Leitungen und lief einwandfrei mit 66MHz.
Wichtig dabei war:
1. Zusammengehörende Signale (z.B. alle Bits eines Datenbus) in den
gleichen IOB packen, sonst wird das Laufzeitverhalten im FPGA
suboptimal.
2. Leiterbahnlängen gleich lang halten.
> 1. Zusammengehörende Signale (z.B. alle Bits eines Datenbus) in den> ,gleichen IOB packen
In einem IOB passt nur ein bit, gemeint ist wohl eher gleiche io_Bank.
Xilinx empfiehlt einen lauf ohne Location constraint, da sich der placer
dann die pins schon optimal raussucht. danach das PCB designen.
MfG
@ Bronco (Gast)
>1. Zusammengehörende Signale (z.B. alle Bits eines Datenbus) in den>gleichen IOB packen, sonst wird das Laufzeitverhalten im FPGA>suboptimal.
Da es sowieso getaktet ist kann man problemlos FlipFlips in den IOBs
nutzen, sowohl rein als auch raus, was das Timing total relaxt.
>2. Leiterbahnlängen gleich lang halten.
Naja, man kann alles übertreiben. Jaja, PCI schriebt das vor, +/-2,5mm
für die Taktleitung auf der Backplane. Aber bei dem Thema wird gern
übertrieben.
Zum Vergleich 10mm Leitung haben ca. 50ps Laufzeit. 66MHz sind 15 ns
Periodenauder, da ist der Faktor 300 dazwischen.
Falk Brunner schrieb:> Naja, man kann alles übertreiben. Jaja, PCI schriebt das vor, +/-2,5mm> für die Taktleitung auf der Backplane. Aber bei dem Thema wird gern> übertrieben.
Klassisches PCI ist ja im Vergleich zu aktuellen schnellen ADCs oder
DDR*-Ram langsam.
Und zum Anderen, lieber beim Layouten aus Vorsicht übertreiben als dann
mehrere Wochen vergeuden weil der Prototyp nicht oder nur manchmal
läuft, oder noch schlimmer in der Serie manche Produktionslose einfach
nicht gehen oder wesentlich häufiger Probleme haben.
@ Christoph Z. (christophz)
>Und zum Anderen, lieber beim Layouten aus Vorsicht übertreiben
NEIN!
Reseven sind schön und gut, Übertreibung nur selten. Hab ich live
erlebt, wie die Leute sich ohne Grund nur wegen ein paar Zahlen, die
SICHTBAR falsch und vollkommen übertrieben waren, in die Hosen gemacht
und ANDEREN Leuten haufenweise Arbeit gemacht haben! NEIN DANKE!
>als dann>mehrere Wochen vergeuden weil der Prototyp nicht oder nur manchmal>läuft, oder noch schlimmer in der Serie manche Produktionslose einfach>nicht gehen oder wesentlich häufiger Probleme haben.
Dafür gibt es eine Inbetriebnahme und Typprüfung, wo sowas gemessen und
bewertet wird!
Falk Brunner schrieb:> Reseven sind schön und gut, Übertreibung nur selten
Reserven bedeuted: Man weiss recht gut was man tut und baut sich noch
etwas Luft ein (==Angstfaktor). Uebertreibung bedeuted in aller Regel:
Ich spezifiziere einfach mal das Maximum; sollen sich andere damit
rumschlagen...
Falk hat recht. Reserven kann einen Board Respin bedeuten, aber dann
weisst du auch warum und wieso. Uebertreibung kann bedeuten: Es
funktioniert, aber ich weiss nicht warum
Falk Brunner schrieb:> Dafür gibt es eine Inbetriebnahme und Typprüfung, wo sowas gemessen und> bewertet wird!
Ach wär das schön, wenn das bei uns hier alle so ernst nehmen würden.
berndl schrieb:> Reserven bedeuted: Man weiss recht gut was man tut und baut sich noch> etwas Luft ein (==Angstfaktor). Uebertreibung bedeuted in aller Regel:> Ich spezifiziere einfach mal das Maximum; sollen sich andere damit> rumschlagen...
Würde ich glatt unterschreiben!
Mir ging es eher um die Art Leute, die meint alle anderen machen das
viel zu Kompliziert und dann selber ohne das nötige Wissen zu erarbeiten
dann einen Schnellschuss produzieren. Ausbaden dürfen das Nachher die
Leute von der Produktion und vom Support...
Christoph Z. schrieb:> berndl schrieb:>> Reserven bedeuted: Man weiss recht gut was man tut und baut sich noch>> etwas Luft ein (==Angstfaktor). Uebertreibung bedeuted in aller Regel:>> Ich spezifiziere einfach mal das Maximum; sollen sich andere damit>> rumschlagen...
Nunja hier (Spartan-6) hat man durch die IO-delay elemente einige
reserven im FPGA mit denen man PCB-Längenunterschiede ausgleichen kann.
Also Nix mit zwangsläufig nötigen PCB-Respin.
http://www.xilinx.com/support/documentation/user_guides/ug381.pdf S.70
So ist das halt mit den Angstfaktor: Vor lauter panik schätzt man seine
Freiheitsgrade geringer ein und eröffnet auf neuen Teilgebieten
Materialschlachten nur weil man sich dort ein wenig besser auskennt.
MfG,
Falk Brunner schrieb:> Da es sowieso getaktet ist kann man problemlos FlipFlips in den IOBs> nutzen, sowohl rein als auch raus, was das Timing total relaxt.
Oh ja, das sollte man tunlichst machen (heisst beim Spartan glaub ich
"Pack IOB").
Das war auch eine Lektion, die ich auf die ganz harte Tour lernen mußte
;)
KennIch schrieb:> Nunja hier (Spartan-6) hat man durch die IO-delay elemente einige> reserven im FPGA mit denen man PCB-Längenunterschiede ausgleichen kann.> Also Nix mit zwangsläufig nötigen PCB-Respin.
naja, es geht ja nicht nur um z.B. Laufzeiten externer Signale. Es geht
auch um so sachen wie z.B. Spannungsversorgung (Leistung und Sequence
beim einschalten), DeCaps, Pads fuer Signale von denen man nicht so
genau weiss ob man sie jetzt braucht. Evtl. einen Absatz in den gefuehlt
tausenden von Seiten Dokumentation uebersehen und dein Board tut halt
nicht. Und dann faengt der Aerger richtig an...
Und einfach funktionierende Eval-Board Schaltungen zu uebernehmen ist
halt sehr oft ueber's Ziel hinaus geschossen und damit teuer.