Forum: FPGA, VHDL & Co. Schnittstelle FPGA Matlab


von Midnight (Gast)


Lesenswert?

Liebe Kollegen!

Ich möchte ein Signal (Bitstream) von Matlab an ein FPGA Board senden, 
dort die Bits umrechnen (z.B.: verschlüsseln) und dann wieder an den PC 
(Matlab) senden.

Wie mache ich das am einfachsten?
Welche Schnittstellen sollte ich verwenden? (RS232?)

DANKE für Eure Hilfe
Midnight

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wen Matlab RS232 kan warum nicht, das läßt sich auch im FPA ganz gut 
machen. du könntest z.B. die RS232 des PicoBlaze nutzen die kann man 
auch seperat einsetzen, ist getestet und hat nen 16 byte FIFO für senden 
und Empfangen, ggf. noch das Half-Full Signalals Hardware FLußkontrolle 
und fertig ist deine Kommunikationsschnittstelle.

von Nephilim (Gast)


Lesenswert?

hab selber schonmal testweise matlab über rs232 mitm fpga verbunden. 
klappte eigentlich recht gut, auch wenn die geschwindigkeiten nich sehr 
hoch sind. aber ist fürn anfang glaube die einfachste art der anbindung.

von Klaus F. (kfalser)


Lesenswert?

Wenn man die Zeit hat, etwas mit RS-232 an ein FPGA zu schicken, dann 
kann man höchstwahrscheinlich das Ganze auch auf dem PC rechnen, dann 
braucht es kein FPGA Board.

Hast Du dir überlegt, wie lange es braucht die Daten zu schicken=?
Wieviele Daten mußt Du schicken?

von Midnight (Gast)


Lesenswert?

Um ehrlich zu sein nein. Es werden aber nicht viele Daten sein.
Welche Schnittstelle würdest Du verwenden?

von Klaus F. (kfalser)


Lesenswert?

Das hängt jetzt wirklich von der benötigten Datenrate ab.
Je schneller, desto komplizierter.

von Iulius (Gast)


Lesenswert?

unterschätz mal die Datenrate nicht.

selbst ein relativ kleiner, langsamer FPGA kann Datenmengen von mehreren 
hundert MB pro Sekunde verarbeiten (je nachdem was man wie verarbeitet)

selbst wenn man nur EINEN 8bit wert pro takt verarbeitet und das mit 
lahmen 50mhz liegt man schon bei 50MByte/s und damit über 
seriell/parallel/usb.


Kommt nun natürlich auf den Anwendungsfall an(Datenmenge, Latenz, 
Synchronisation erforderlich, usw) und ob du die Hardware schon hast.

Für sinnvolle Projekte gibts entweder Ethernet, pci-e Karten oder auch 
FPGAs direkt für CPU Sockel(Stichwort Torrenza)


Alles darunter taugt mMn höchstens zum probieren.


Zumindest wenn es darum geht Daten zu übertragen die direkt in Hardware 
verarbeitet werden.

Wenn das nen Programm ist das in einen Softcore gefüttert wird, dann 
kann das natürlich anders aussehen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Man könnte die Daten natürlich vorher auch komprimieren...

von Mars (Gast)


Lesenswert?

Nim den FT2232D oder falls du mehr als 1 MB\s brauchst den FT2232H von 
FTDI. Dieser hat ein 8 Bit-FIFO Interface und lässt sich leicht mit 
einem FPGA verbinden.
Die Matlab-Anbindung sollte sich ebenfalls leicht realisieren lassen.

von Bastler (Gast)


Lesenswert?

Du könntest auch den Ft245 als Fifo <-> Rs232 verwenden und in Matlab 
als Com-Port ansprechen.
Der kostet weniger als die Hälfte des FT2232H. Auch wenn der 2232 
zweifellos der Bessere ist, die Geschwindigkeit von 25MB/sec wird Matlab 
höchstwahrscheinlich nicht ausschöpfen können, warum also den teuren 
Chip nehmen?

von Mars (Gast)


Lesenswert?

Warum sollte Matlab die Geschwindigkeit nicht ausschöpfen können? 25 
MB/s sind jetzt ja auch nicht so viel.
Der 2232 bringt neben dem FIFO-Modus auch noch den MPSSE-Modus mit. 
Damit lässt sich der FPGA leicht und schnell über JTAG programmieren.

von Gast (Gast)


Lesenswert?

Wenn das immernoch zu langsam ist kannst du auch ein FPGA mit 
PCI-Express kaufen (kostet halt "etwas" mehr) aber damit bekommst du 
dann sehr gut und auch eine extreme Datenrate drüber. Ist aber 
vermutlich nicht ganz so leicht zum ansteuern gibt aber sicherlich 
Libaries zum ansteuern.

von Bastler (Gast)


Lesenswert?

>25 MB/s sind jetzt ja auch nicht so viel.
25 MB /sec sind eine Menge Zeug, vorallem weil wir von Nutzdaten reden!
Was ich vergessen habe: Die Aussage bezieht sich auf die 
RS232-Emulation.
Der Buffer der Rs232 ist nicht groß, ich glaube der war kleiner als 
250KB.
Wenn dein Prog jetzt mit 25MB/sec Daten rüber schickt müsste dein 
Programm alle 10ms einen Zeitschlitz bekommen, um die Daten aus dem 
Buffer rauszuholen. Das klappt nicht auf einem 
Multitasking-Betriebssystem, dass nicht echtzeitfähig ist.
Hier ist die FTDI-DLL erste Wahl. Da kann man den Buffer auf 5MB setzen 
und dann ganz gemütlich die Daten rauskopieren.

von Iulius (Gast)


Lesenswert?

Für einen PC mag das viel sein, für ein FPGA kaum.


Die Frage ist doch : was will man auf dem FPGA berechnen was der PC 
nicht könnte ?

Und hier zeigt sich eben das es vor allem parallele Arbeiten betrifft 
die im Normalfall mit exorbitanten Datenmengen daherkommen.


Als Ausgangsdatenstrom der an den PC zurückgeht kann das bei einer 
brauchbaren Aggregation noch funktionieren, aber auf der Inputseite 
nicht.
(sonst könnte die cpu ja gleich die Funktion an sich berechnen)


Mir fällt zumindest nichts ein was auf die Art einen brauchbaren Speedup 
erhalten würde und unter 25mb durchsatz pro Sekunde liegt, außer es 
handelt sich wie gesagt um Programme die dann noch ausgeführt werden, 
aber reine Daten ?


25mb ist selbst auf dem lahmsten FPGA höchstens noch 1 byte pro takt.

Was will man damit bitte machen ?

Selbst wenn man jedes bit mit jedem anderen verknüpfen würde macht das 
<256 Bitoperationen Platzverbrauch.

Da braucht ja die Kommunikation mehr Platz auf dem Chip als die 
Berechnung ;)

von Bastler (Gast)


Lesenswert?

>Für einen PC mag das viel sein, für ein FPGA kaum.
Das hat auch niemand gesagt. Die Frage kam auf, als es um die Steuerung 
mit Matlab ging und das läuft nunmal auf dem PC.

>Die Frage ist doch : was will man auf dem FPGA berechnen was der PC
>nicht könnte?

Die Antwort ist einfach: Nichts. Jedenfalls sofern es nicht noch andere 
Anforderungen wie Rechenzeit, Einsatz in einer Steuerung, usw. gibt.

Aber es ist eine gute Möglichkeit zum debuggen. Bei meinen Projekten 
lasse ich mir so Rückmeldungen zu einem Terminalprogramm schicken.
Wenn eine FSM den Zustand wechselt sendet sie einen Code, aus dem ich 
den neuen Zustand ablesen kann. Wenn sie irgendwann hängt, weiß ich auf 
was sie wartet bzw. welcher Sensor im Moment streikt.
So kann man testen, was man schlecht simulieren kann: Das Zusammenspiel 
mit den externen Komponenten.
Denkbar ist es auch einen externen Chip statt mit echten Sensordaten mit 
Daten vom Terminalprogramm zu füttern, sich das Ergebnis zurücksenden zu 
lassen und zu vergleichen. Vieleicht will unser Fragensteller ja genau 
das machen.(?)

von Midnight (Gast)


Lesenswert?

Nein, NOCH nicht.

Vorerst soll lediglich die Kommunikation klappen. Wenn die Daten 
übertragen, umgerechnet und gesendet sind war es das VORERST.

Ich hab inzwischen im Netz VHDL codes für eine RS232 gefunden. Sobald 
mein Board geliefert wurde (Nexys 2) kann ich die ersten Tests machen.

Was wie und warum schneller ist, ist ein anderes Problem an dem ich 
später sicher noch tüfteln werde.

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.