Forum: FPGA, VHDL & Co. Wie größeres FPGA Projekt aufbauen


von Michael (Gast)


Lesenswert?

Hallo,

ich habe hier ein größeres FPGA Projekt.

IIR Filter (SM mit 1x Multiplizierer Pipeline Spreicher ...)
FFT mit 32bit Daten
Inverse FFT
ADC Interface
Modulator
...

Samplerate ist 1 MSample auf 8 Kanälen, alles darf nur 1 bis 2 Samples 
Verzögerung haben deshalb FPGA und kein DSP.

Die Einzelblöcke traue ich mir zu. Doch wie schalte ich das alles am 
besten Zusammen?

Jeder einzelne Teil mit WB Interface + IRQ und dann ein Prozessor der 
die Daten verschiebt.

Massiv Parallele ein und Ausgänge FFT hat ja 32bit x 256 Kanäle

Wie löst man sowas?

Danke Michael

von Strubi (Gast)


Lesenswert?

Hi Michael,

für Datenschleudereien kann ich den Ansatz mit einem simplen soft-core 
plus DMA-Engine mit mehreren Kanälen empfehlen. Die CPU macht dabei 
meist nur Konfiguration, aber erleichtert das Debuggen deutlich.
Die grosse Frage ist immer, welche CPU. Das wiederum hängt u.U. vom 
FPGA-Hersteller ab. Gut gefahren bin ich bisher mit einer aufgebohrten 
ZPU.
Wenige Samples Latenz ist allerdings noch knackig, da würde ich keine 
CPU zwischenschalten.

Grüsse,

- Strubi

von Michael (Gast)


Lesenswert?

Hallo Strubi,

der FPGA Hersteller wäre Xilinx (Spartan6). Das mit dem DMA Controller 
klingt logisch. Habe mir soetwas auch schon überlegt. Woher bekomme ich 
aber den DMA Controller. Gibt es da Beispiele, IP? Der Controller ist ja 
schon etwas komplexer.

Kannst du mir einen empfehlen, oder ist der DMA Controller eine 
Eigenentwicklung?

Mfg

Michael

von Strubi (Gast)


Angehängte Dateien:

Lesenswert?

Hi Michael,

angehängt ein Schnipselchen. Einen simplen DMA-Controller schreibt man 
sich am besten selber, und guckt sich woanders ab, wie man es nicht 
machen sollte :-)
Nee, nun ernsthaft: Das Problem ist meist, dass man den DMA-Kram 
ziemlich auf seinen Bus bzw. sein Memory zuschneiden muss plus noch eine 
Menge an Arbiter-Logik dazukommt, sobald mehrere Kanäle gleichzeit 
arbeiten müssen. Bei einer brauchbaren Soft-CPUs sollte ansich sowas 
dabei sein, bisher habe ich aber auch noch nicht das passende "komplett 
fertig" gefunden.
Der Kollege Rene D., der hier ab und an auch mitliest und schreibt, hat 
eine CPU geschrieben, die im Gesamtsystem recht gut performt (schneller 
als die ZPU). Am SoC dazu wird noch gearbeitet.

Bevor ich's vergesse: Die Daten werden bei diesem einfachen DMA-Sklaven 
eine Ebene höher weitergereicht. Werden also nur Adressen unter 
Berücksichtigung der Busy-Pins generiert.
Auf dem Spartan6 kannst du über die "Hintertür", d.h. den zweiten 
Memory-Port auf den Speicher zugreifen und per 'done'-IRQ und 
Buffer-Pingpong Daten schaufeln. Aber du brockst Dir damit natürlich 
mehr als ein paar Samples Latenz ein. Drum nutze ich den DMA auch meist 
eher im Testdatengenerator, später wird's dann in eine separate Pipeline 
optimiert.

Grüsse,

- Strubi

von Strubi (Gast)


Lesenswert?

Ja, doch noch ganz vergessen: Hast Du den microblaze schon evaluiert? 
Ist halt big X-proprietär...
M.W. gibt es da aber fertiges DMA.

von Paebbels (Gast)


Lesenswert?

Hallo,

wozu möchtest du DMA bemühen? Wenn ich das richtig verstehe hast du 
mehrere Module die du zu einer Verarbeitungskette verschalten möchtest.

Ja es gibt auch das Wishbone-Stream Modell, aber Wishbone ist im 
Allgemeinen nicht gerade das schnellste Protokoll...

Wie wäre es mit dem LocalLink Interface von Xilinx? Im Gegensatz zum 
AXI-Stream Protokoll kann man LocalLink frei einsetzen. Im Grunde ist 
LocalLink nichts anderes als ein FIFO Interface und für die direkte 
Kopplung von Teilverarbeitungskomponenten als Verarbeitungkette gedacht 
(Streaming optimiert)

LocalLink:
- Quelle bereit (src_ready_n)
- Ziel bereit (dest_ready_n)
- Daten (src_data)
---------
optionale Signale
- Start eines Frames (src_sof_n)
- Ende eines Frames (src_eof_n)
- .....

FIFO Interface (mit got-Semantik):
write-port
- put (= not src_ready_n)
- data_in (=data)
- full (= dest_ready_n)
read-port
- got (= not dest_ready_n)
- data-out (= data)
- valid (= not src_ready_n)

Wem das low-aktive LocalInk nicht so zusagt, kann dieses auch in 
high-aktiv umschreiben :)

LocalLink findet man unter SP0006 bei Xilinx zum Download.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Strubi schrieb:
> angehängt ein Schnipselchen. Einen simplen DMA-Controller schreibt man
>
> sich am besten selber, und guckt sich woanders ab, wie man es nicht
>
> machen sollte :-)
Ja das ist doch schon was...
Wenn man das jetzt noch mit CodePatata Tool analysiert, und die 
ProzessVariablen, bzw. Prozess-LeitPV, Trigger-Pv, Init-PV ...
in Tabellen hast (z.B EXCEL )
Glossar: (PV Prozess-Variable), (ARMED - Not/ARMED, Reset-Init.. )
in ein Block-Schalt-Bild einzeichnet.

Somit hat man einen Lego-Baustein mit I/O und Parameter fertig.
Mit Doxygen schreibst du die eigene Doku. zu deinem Baustein.
Also machst du dir dein eigenes Reverse Ing. Handbuch fertig.
######################################################################
Somit habe ich mein Lattice MachXo Ref.Design SOC weiter aufgebohrt.
Hint: AMBA Bus lesen.
Viel Erfolg Gruss Holger.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Link:
Beitrag "Code Patata VHDL VERILOG EDITOR"
Hier sind die Bilder von CodePatata dazu.
Z.B Modul  Betr_Stunden_Zähler der dan als Modul/IO am WishBone-Bus
via Wrapper hängt.

Nur was ich mit der CodePatata Funktion Signal-Path machen kann hat mir 
leider keiner sagen können.

Somit kann man sich auch in fremde Projecte einarbeiten, und damit
die Modul-Daten-Bank Erfahrungen erweitern.
Handschriftliche farbig markierte Zeichnungen auf A3 format ergänzen das
ganze (Halt nach den JAPANISCHEN Strom-Laufpan mit Pictogram usw.)
Als Gedankenstütze ....nach dem 3 Wochen Urlaub findet sich man da 
wieder ein.

Gruss Holger.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Michael schrieb:
> Samplerate ist 1 MSample auf 8 Kanälen, alles darf nur 1 bis 2 Samples
>
> Verzögerung haben deshalb FPGA und kein DSP.
Wie hoch ist den deine Design Master Clock Oversampling rate.
Die ist doch relativ zu sehen, und nicht absolut 1 bis 2 bezogen ???

------------


Hallo da ist mir noch was eingefallen.
http://www.ohp.de/de/tipps_tricks.htm
#################################################################
Ich arbeite an einer DatenBank für Modul-Variablen, Bit-Spur[n-m]
.....für mein Wireing Harness Component Tester SEWS
Das ganze habe ich von einer Prozess-Leittechnik-Soft
übergeführt. InterProzess-Kommunikation & Kopplung.
Ich bin da mit Latice Diamond IDE am aufbohren.
Ich mache das in Verilog Perspektive.
(-->)'Prozess-Daten-Modell(-->)...

Verilog ist mit Prog-Sprace FORTH als STack zu verleichen.
-----------------------------------------------------------------
Google mal nach Ben Krassnow mit seinem Verilog Tutorial
auf You-Tube.
-----------------------------------------------------------------
Verwendung von Bussen im UCF-File. via Index.
Aehnlich wie in C mit Addr. &Struct als Parameter.
Über das Struct Konzept geht das besser in der Parameter-übergabe.
via Modul.
Also ist das übersichtlicher als einzel-Parameter zu machen.
Vergeiche das mit C Struct... modul_1(&pDCB)
                               pDCB->Baud_Rate
                 pDCB->Time_out
Die Busse sind 32Bit oder je nach # Parameter 16Bit breit.
-------------------------------------------------------------
Conditional Compiling in HDL ...
-------------------------------------------------------------
Du hast es hier mit einem nicht sequenziellem Prozess zu tun.
Das gute an den Modulen ist alles lauft somit "Kongruent".
Hirracical Modell  ( Tree -Leaf-Prinzip)
Gefädelter Code via Modul to Modul usw.
---#--#------------------------------------------------------

Querkopplung von Prozessanschlüssen.
Sie wollen die Eingaben eines Prozessanschlusses (A)
           über einen anderen Prozessanschluss   (B)
ausgeben und umgekehrt.
Benutzen Sie die Eingabe-PVs (Meldungen, Messwerte etc.) des 
Prozessanschluss A als Eingangs-
PVs für Ausgaben auf den Prozessanschluss B (Befehle, Sollwerte etc.).

Definieren Sie eine PV-Gruppe in der alle entsprechenden Eingabe-PVs 
enthalten sind.
Diese PVGruppe wird als Startkriterium (Trigger-PV) für ein HDL-Modul 
verwendet.
Wählen Sie bei der HDL-Script Definition die Einstellung "PV-Gruppe hat: 
Pos. und Neg. Flanke".
....
Denke dir einen Auto-Kabel-Baum, wo via UCF-FILE also Port-Namen I/O 
letzlich auch da
was rauskommt was oben eingegeben wurde, nun liegen die Module[][][][] 
gefadelt dazwischen.

Und mit Kabel-Baum-Plan geht das dan durch die Module via Input. und 
Output.
(Parameter-Übergabe)

Viel Erfolg & Gruss Holger.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Michael schrieb:
> IIR Filter (SM mit 1x Multiplizierer Pipeline Spreicher ...)
>
> FFT mit 32bit Daten
HINT:
Hallo da ist mir noch was eingefallen.
Was noch hilfreich ist, sind die Daten-Blätter
und Blockschaltbilder.

Evtl. suchen & Finden von HDL Source Code, in den Rigol-Modder-Foren.
von z.B Rigol DS4014 4-channel digital scope.

50 MHz Grenze falls nur ein Kanal aktiv ist.
Das Overclocking Daten-Modell  ist FPGA Typenspezifisch
bei der Bit-Rate begenzt.

Aquisition Rate ..ohne jitter usw.glitch.#_#'
64000 Aquisitions ...
112K sample Points

Viel Erfolg & Gruss Holger.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

@Michael

http://www.ovro.caltech.edu/~dwh/correlator/pdf/ESC-100Paper_Hawkins.pdf
################
 Hier Seite 124 sind die Filter mit modulus 128,64,16...
 Das ist wie ein Stufen-Getiebe mit modulus wieder als Synchron
 Takt..(128)(64)(16)...--#Daten-Übergabe
http://www.ovro.caltech.edu/~dwh/correlator/pdf/ESC-100Slides_Hawkins.pdf
------------------------------------------------------------------------ 
-

######################################################################## 
#
http://www.ovro.caltech.edu/~dwh/correlator/pdf/esc2011_fpga_dsp_code.zip

Gruss Holger.

von Strubi (Gast)


Lesenswert?

Hage? Rapante?

Zu später Stunde entlockt sich mir zu obigen Postings gerade nur: WTF?

(oder auf deutsch: Hä?)

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.