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
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
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
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
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.
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.
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.
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.
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.