Hallo, ich wollte mich mal kurz vergewissern, ob mein Ansatz total
daneben gegriffen ist, oder ob ihr der gleichen Meinung seid wie ich ;).
Also folgende Problemstellung:
Es geht um ein Gemeinschaftsprojekt, in dem wir ein 4 Kanal Oszilloskop
bauen möchten. Wir sind derzeit in der Anforderungsspezifikation. Jedoch
hat sich bisher heraus kristallisiert, dass wir jeden einzelnen Kanal
mit 200 MSPS betreiben möchten. Aufgrund dessen habe ich mir ein paar
Gedanken zur Signal Verarbeitung gemacht und ich bin zu dem Schluss
gekommen das man nicht an einem FPGA vorbei kommt. Dabei ist mir für das
Design eine kleine Idee gekommen, jedoch bin ich mir aber nicht sicher,
ob dies so zu realisieren wäre, oder ob man sich damit später mehr
Probleme als erleichterungen einhandelt.
Da ja 200 Mio. Samples pro Sekunde in das FPGA hinein "fließ" also 200 *
10 Bit wäre ich bei einer Datenrate von:
pro Kanal.
So nun wollten wir es evtl. so realisieren, dass wir in einem FPGA halt
alle Kanäle einbinden zur Pufferung (ja ist ein wenig klein) inkl.
Koordniation der Abläufe (das FPGA würde sonst keine weiteren Aufgaben
übernehmen, da hier alle IO's belegt sind). Meine Idee zur Implemenation
war folgende, da die Daten ja eh mit einer Frequenz von 200 MHz pro
Kanal rein kommen jeweils um PI/2 ke Kanal Phasenverschoben sind, dachte
ich das ich diese Phasenverschiebung zu nutze machen kann. Dabei möchte
ich den Datenstrom EINES Kanales in Zwei aufteilen, so das Zwei
identische Pipelines existieren, die jedoch "nur" alle 10 ns einen neuen
Wert bekommen, nach dem einige Berechnungen vollzogen wurden wollte ich
diese wieder durch einen Demultiplexer zusammen fassen und in ein
Dualported Ram puffern.
Meine Fragen zu diesem Vorgehen:
(a)Meint ihr, das pro Datenstrom eine doppelte Pipeline sinn macht, um
dann die Daten "einfacher" zu verarbeiten oder meint ihr das ich mir
damit wohlmöglich noch mehr Probleme einhandel?
(b)Würdet ihr die Phasenverschiebung von 90° auf einen globalen Takt
Synchronisieren oder würdet ihr die Pipelines immer um 90°
Phasenverschoben arbeiten lassen?
(c)Laut Synthese würde der Multiplexer, 500 MHz mit machen, das
erscheint mir recht hoch, könnt ihr mir evtl. sagen , wie verlässlich
die Aussagen aus der Synthese sind? (es soll ein Spartan 3 mit dem
Speedgrade -4 verwendet werden die Gatteräquivalenz beträgt 400k).
(d)Würdet ihr für jedes Kanalpaar evtl. sogar einen eigenen FPGA
spendieren?
Die Vorteile wären dann hier mehr IO's und mehr Platz für die
Pufferung.
so ich hoffe das ich das Problem einigermaßen vernünftig herausgestellt
habe.
Vielen Dank im vorraus.
Also prinzipiell ist ein 200MHz Datenstrom, der von einem ADC kommt und
in einen BlockRAM geht, ohne viel Kombinatorik zwischen den einzelnen
Registern kein großartiges Problem für einen Spartan 3. Die maximale
Registerfrequenz liegt irgendwo bei 311 bis 333MHz, je nach Typ. Bei
einem voll-synchronen Design musst du da nicht soo viel tricksen.
Wenn du allerdings noch Filter usw. rechnen willst, solltest du das
vorher abchecken. Am besten einen Spartan nehmen, der die DSP-Blöcke
drin hat...denn eine Multiplikation ist sonst ein ganz schöner Batzen
Kombinatorik, das wird haarig bei 200Mhz....
Ja genau deswegen wollte ich ja die Ströme aufteilen somit wäre das dann
nur noch die halbe Frequenz, was ich im ersten Schritt definitiv machen
möchte bevor dies in Blockram geht wäre die Daten in ein 2er Komplement
Umzuwandeln und die ersten Eingangsfilter auf den Bitstrom anzuwenden.
Außerdem muss aus diesem Bitstrom ermittelt werden ob die eine steigende
oder fallende Flanke ist und so weiter. Dies möchte ich jedoch gern vor
der Pufferung durchführen.
>Stefan Salewski wäre nett wenn du mal sagen würdest was du mit dem Post>erreichen möchtest.
Nun sei nicht gleich eingeschnappt -- als ich Deinen Namen sah in
Verbindung mit FPGA musste ich natürlich sofort an Deine Wortschöpfung
"overfused" denken.
Aber mal im Ernst, 200 MHz mit vier Kanälen, das ist schon sportlich.
Ich beobachte dieses Thema schon seit vielen Jahren, bisher hat da
keiner viel erreicht. Was nicht heißen soll, dass es nicht möglich ist,
wenn Du ein gutes Team hast.
Meine Schaltpläne und Platine kennst Du ja wahrscheinlich, aber das sind
ja nur läppische 100 MHz und 2 Kanäle. Und übrigens, ich wurde von
unserem Wächter über die Bildformate auch schon als Beckenrandschwimmer
bezeichnet, und das nicht ganz zu unrecht.
klar ist das nicht wenig - schon alleine mBytes/s sagt schon viel aus ;)
- und mir ist auch klar das dies zu realisieren schon einige schlaflose
Nächte bereiten wird. Deswegen möchte ich halt gern auch auf
Erfahrungswerte zurückgreifen von anderen Usern, die evtl. das gleiche
Problem hatten/haben.
Und keine Angst eingeschnappt bin ich nicht. Wenn ich mir den Beitrag
anschaue naja - da stimme ich dir zu da würde ich an deiner Stelle auch
sagen - hey lieber finger davon lassen das könnte zu heiß werden.
Und vom team her - naja wir sind noch auf der Suche nach Leuten die sich
uns anschließen möchten. Aber wie gesagt wir sind erst ich würde sagen
in der Anforderungsspezifikation und projekt findungsphase - also noch
gaaanz am Anfang des Wasserfall Modells ^^.
Ich weiß das der Kostendruck sicherlich sehr hoch ist, jedoch sollte man
auch nicht übers Ziel hinausschießen. Ich denke das 200MHz deutlich zu
schnell ist für einen Spartan 3. Ich würde auf den kleinsten Virtex 5
zurückgreifen (langsamstes Speedgrade). Ich bin der Meinung der kostet
unter 200€. Zudem würde ich vielleicht lieber einen 400MHz Wandler 12Bit
oder 14Bit von Ti nehmen (ich denke mal 12Bit ist ausreichend).
Anschließend über einen Multiplexer die immer zwischen den beiden
Kanälen hin und herschalten (Somit hast Du auch 2 Kanäle mit 200MHz).
Du benötigst dann 2 AD-Wandler.
Man darf halt nicht vergessen das die AD-Wandler eine Streuung besitzen
und somit digitalisiert man mit 4 einzelnen AD-Wandlern das gleiche
Signal unterscheidlich. Das kann man vermeiden wenn man weniger
AD-Wandler nimmt.
Hallo Johann, ich glaub da hast du etwas falsch verstanden. die
AD-Wandler haben ja von sich aus eine Samplerate von 200 MSPS. Der
Multiplexer sollte eigentlich die Datenrate halbieren innerhalb des FPGA
dh. die Abarbeitungszeit innerhalb des FPGA's verdoppelt sich. Sprich
die Daten kommen mit 200 MHz in das FPGA durch den Demux wollte ich dann
erreichen das ich halt die frequenz "herunter" teile in dem ich den
Datenstrom auf 2 Pipelines aufteile also die Pipeline 2 mal instanziere
pro Kanal. Dabei ist es so angedacht, das jeweils ein AD-Wandler pro
Kanal aktiv ist dh. bei dem 4 Kanal Oszilloskop, ist pro Kanal nur 1
AD-Wandler aktiv. Jetzt wird man sich fragen warum die Phasendrehung von
jeweils 90° pro Kanal, dies möchten wir deshalb machen damit falls es
Strompeaks (was denke ich sogar recht wahrscheinlich ist) geben sollte
durch die AD-Wandler, dann möchten wir das nicht ein großer Peak
dazwischen funkt sondern lieber 4 kleinere gleichmäßig verteilt ;). (@
Johann oder habe ich dich jetzt Missverstanden?)
Die Frage ist halt sollte man den Datenstrom lieber aufteilen damit die
halbe Datenrate auf jeweils einer Pipeline, oder ist es evtl. gar
möglich nur mit nur einer Pipeline das ganze zu realisieren, bzw. was
wäre zu bevorzugen also sprich was wäre einfacher zu realisieren?
Insgesamt sehe ich bei den beiden Varianten zumindest ein Problem:
- bei Zwei Pipelines muss ich höllisch aufpassen das die beiden
"Datenpakete" wieder in der richtigen Reihenfolge einsortiert werden.
- bei einer Pipeline, wäre wohl das größere Problem mit der
Geschwindigkeit, FSM usw. müssten recht penibel geplant werden damit man
diese Taktrate überhaupt schafft.
Also ich habe mal kurz eine kleine Grafik Dazu fertig gemacht - dieses
Blockschaltbild ist aber stark vereinfacht sollte aber denke ich gut
zeigen, was ich vorhabe oder was mir halt vorschwebt. Wie man gut sieht,
sind zwei Takte vorhanden jeweils um 180° Phasenverschoben. Beide haben
die gleiche Frequenz von 100 MHz, durch die Phasendrehung würde ich
erreichen das ich die Samples aufnehmen kann, (bei beiden gilt: positive
Flanke = aktive Flanke), das Bedeutet beide Horchen einfach auf dem Bus
vom AD-Wandler. Damit würde ich eine Aufteilung des Datenstromes
erreichen - soweit die Theorie, die Synchronisation hingegen - da muss
ich mir ncoh sehr starke Gedanken drüber machen denn so einfach wie in
der Theorie wirds wohl nicht klappen vor allem weil das Datensignal
nicht synchron ist, was mir wiederum nicht so recht gefällt.
mfG
Naja, an sich möglich, aber wie rechnest du ein Filter, wenn du nur
jeden 2. der vorhergehenden Werte im Speicher hast? Da wirds schon
schwierig dann. Nimm lieber einen ordentlichen FPGA, der Spartan 3 kann
zwar prinzipiell sowas, aber bei 200MHz aufwendige Rechnungen sind nicht
ganz trivial, vor allem für Anfänger. Bei den Xilinx Beispielprojekten,
wo z.B. externer DDR-SDRAM angesprochen wird, werden sogar die internen
Slices über Constraints festgenagelt, so haarig scheint das da zu
sein....
Christian stimmt da hast du recht - daran habe ich bisher nicht dran
gedacht - also muss ich wohl oder übel "nur" auf einer Pipeline
arbeiten. naja dann schau ich ma was so ein Virtex kostet.... Aber schon
mal danke für die Tipps.