mikrocontroller.net

Forum: FPGA, VHDL & Co. Pipelines mit 200 MHz?


Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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....

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na hoffentlich ist das Problem für dich nicht overfused...

Beitrag "XC3S Board selber bauen, was ist zu beachten?"

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Salewski wäre nett wenn du mal sagen würdest was du mit dem Post 
erreichen möchtest.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ^^.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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....

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den kleinsten Virtex 5 habe ich hier gefunden

http://avnetexpress.avnet.com/store/em/EMControlle...

Dieser kostet 266$

Ein Virtex 4

http://avnetexpress.avnet.com/store/em/EMControlle...

kostet 220$

Weiß jemand wo es die FPGAs vielleicht noch billiger gibt?

Autor: Björn Cassens (bjoernc) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das würde mich auch interessieren, da ich diese auch nicht günstiger 
gesehen habe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.