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
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.
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.
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?
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.
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.
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?
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.
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.
>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.
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 ;)
>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.(?)
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.