Forum: FPGA, VHDL & Co. Festplatte an FPGA dranhängen


von Oli (Gast)


Lesenswert?

Hallo

ich möchte einen Langzeitdatenspeicher bauen, mit dem ich Controll-Daten 
aus dem FPGA holen und festhalten kann. Dazu möchte ich eine IDE- 
Festplatte, USB-Platte oder SATA-Festplatte möglichst direkt an das FPGA 
dranhängen.

Die Frage ist, wie man das am Besten macht!

Gibt es dafür gfs IDE-Interfaces zum kaufen oder eine andere Hardware, 
die man einfach programmieren kann? Ich brauche natürlich auch den Core, 
der das Protokoll macht. Am Einfachsten wäre ein binärerer Datenstrom 
oder auch ASCI, den ich rausstreamen kann (so schnell, wie halt machbar) 
und den ich dann mit einem C Programm wieder einlesen und umwandeln 
kann.

Die Bandbreite würde man sicher mit genügend Fifos und parallelen 
Platten hinbekommen. Ich brauche so ungefähr 20MByte/s im Endstadium und 
insgesamt eine Kapazität von 20 GB, weshalb es weder mit JTAG und 
ChipsScope noch Ethernet oder Flashdrives geht.

Was würdet ihr mir empfehlen?

von Peter II (Gast)


Lesenswert?

Oli schrieb:
> Die Bandbreite würde man sicher mit genügend Fifos und parallelen
> Platten hinbekommen. Ich brauche so ungefähr 20MByte/s im Endstadium und
> insgesamt eine Kapazität von 20 GB, weshalb es weder mit JTAG und
> ChipsScope noch Ethernet oder Flashdrives geht.
wir haben doch das Jahr 2011 oder?

20Mbyte/s konnten festplatten schon vor 5Jahren ohne Probleme. 20GB 
Platten sollte auch nicht  das Problem darstellen.

Ethernet mit Gigabit ist auch nicht wirklich neu und schafft das auch 
locker.

mit USB2.0 sollten auch 30Mbyte/s mit jeden bessere Stick machbar sein.

> Am Einfachsten wäre ein binärerer Datenstrom
> oder auch ASCI, den ich rausstreamen kann
wo ist da für dich der Unterschied?


Vermutlich lassen sich die Daten sogar Komprimieren, damit könntest du 
auch 100Mbit Ethernet verwenden.

von Oli (Gast)


Lesenswert?

>> Am Einfachsten wäre ein binärerer Datenstrom
>> oder auch ASCI, den ich rausstreamen kann
>wo ist da für dich der Unterschied?
ASCI sind explizite Daten und damit direkt lesbar. Macht ca 3-4mal an 
Bedarf, was ich so abgeschätzt habe.


>mit USB2.0 sollten auch 30Mbyte/s mit jeden bessere Stick machbar sein.
Wäre nicht schlecht. Mit dem Durchsatz komme ich auf 820 MB/min für alle 
Kanäle, brauche aber leider bis zu 200 GB für eine Aufzeichnung. Das ist 
als Flash etwas teuer und auch unnötig.

Was natürlich gut wäre: Eine USB Platte ausreichender Grösse. Aber wie 
kriege ich die am schnellsten ans FPGA? Es darf auch ruhig etwas kosten, 
wenn es im Rahmen bleibt.

von Uwe (Gast)


Lesenswert?

Kommt auf das FPGA drauf an ob SATA oder NAS geht. am einfachsten wäre 
SD Karte, aber warscheinlich zu teuer. IDE Platte würde ich sagen falls 
dein FPGA kein SERDES kann.

von Oli (Gast)


Lesenswert?

Bin gerade am suchen, was an an boards gibt, die IDE oder SATA haben. 
Das Problem ist, dass ich eben auch einen COre brauche. Mal schauen, was 
OC hat.

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Oli schrieb:
> ich möchte einen Langzeitdatenspeicher bauen, mit dem ich Controll-Daten
> aus dem FPGA holen und festhalten kann. Dazu möchte ich eine IDE-
> Festplatte, USB-Platte oder SATA-Festplatte möglichst direkt an das FPGA
> dranhängen.
>
> Die Frage ist, wie man das am Besten macht!

Ein wesentlicher Faktor ist, ob du ein standardisiertes Filesystem (FAT, 
Ext2/3/4 oder NTFS) auf der HD haben willst. Eine HD raw zu beschreiben 
ist aus einem FPGA kein Problem. Ein standardisiertes Filesystem in 
Logik zu vergraben ist schon aufwendig.

Tom

von Oli (Gast)


Lesenswert?

Ja, das denke ich mir auch. Bin gerade auf der Suche, ob es da nicht 
EVAL-Boards zu gibt, die das gfs mit Microblaze machen. Das müsste dann 
in C einigermassen erträglich sein / bereits existieren.(?)

von Christian R. (supachris)


Lesenswert?

Auf den Xilinx Boards gibts öfters mal SATA, oder für die neuen Boards 
mit dem FMC Anschluss auch als Zusatzkarte erhältlich. Prinzipiell 
können alle Xilinx FPGAs, die einen RocketIO Transceiver haben, SATA, 
zumindest SATA-I. Im CoreGenerator für den GTP/GTX kann man SATA 
einstellen. Aber einen IP Core brauchst du dann natürlich noch, ich weiß 
nicht, ob beim EDK einer dabei ist eventuell. Ansonsten selber machen. 
Wenn nicht noch ein File-System drauf muss, ist das ja nicht ausufernd 
schwer. Ansonsten einen MicroBlaze benutzen und darauf die FAT Sachen 
machen. USB 2.0 Host Controller wäre da schon wesentlich aufwendiger als 
ein SATA Host.

von dnalorac (Gast)


Lesenswert?

Mein Vorschlag wäre ein PC als Gegenüber mit einer dedizierten 
GBit-Ethernetverbindung. Die Daten würde ich als UDP-Pakete senden. Da 
dabei alle Pakete den gleichen Aufbau haben, kannst Du den fest kodieren 
(auch IP- und MAC-Adressen) und nur die Daten, Zähler und CRCs an der 
richtigen Stelle einfügen. Das kriegt man auch ohne gekaufte IP ganz gut 
hin. Die Daten würde ich binär übertragen, eine Umwandlung in ASCII kann 
später der PC offline machen.

Wenn der PC während der Datennahme nichts anderes tut, sollte er die 
Daten auch locker wegschreiben können. Nimm Linux, dann kannst Du besser 
beeinflussen, was sonst noch auf dem Rechner läuft. Deine Datenpakete 
solltest Du so gestalten, dass Du Ausfälle erkennen kannst. Bei 20 GB 
Datenvolumen kannst Du notfalls auch so viel RAM in den PC stecken. Bei 
200 GB ist das natürlich keine Option mehr.

Ein NAT ist keine gute Idee, da das ein viel zu kompliziertes Protokoll 
(z. B. SMB) spricht. Das willst Du in einem FPGA nicht wirklich 
nachprogrammieren.

Die PC-Lösung hat auch den Vorteil, dass die Daten gleich in einem zur 
einfachen Weiterverarbeitung geeigneten Format weggeschrieben werden. 
Wenn die Platte direkt am FPGA hängt, kannst Du nur einfach einen Block 
nach dem anderen vollschreiben. Bei der anschließenden Auswertung muss 
der PC dann direkt diese Blöcke am Betriebssystem vorbei lesen. Das ist 
je nach System nur mit speziellen Treibern möglich.

von Peter II (Gast)


Lesenswert?

dnalorac schrieb:
> Nimm Linux, dann kannst Du besser
> beeinflussen, was sonst noch auf dem Rechner läuft.
naja dafür Recht auch ein windows - hier kann linux nichts was windows 
auch kann.

> Ein NAT ist keine gute Idee, da das ein viel zu kompliziertes Protokoll
> (z. B. SMB) spricht. Das willst Du in einem FPGA nicht wirklich
> nachprogrammieren.
NAT? meinst du eine NAS also Netwerkfestplatte?

> Bei der anschließenden Auswertung muss
> der PC dann direkt diese Blöcke am Betriebssystem vorbei lesen. Das ist
> je nach System nur mit speziellen Treibern möglich.
welchens System braucht da speziellen Treibern? Bei windows und Linux 
geht es mit den Passenden Rechte und ohne speziellen Treiber.

von dnalorac (Gast)


Lesenswert?

Peter II schrieb:
> dnalorac schrieb:
>> Nimm Linux, dann kannst Du besser
>> beeinflussen, was sonst noch auf dem Rechner läuft.
> naja dafür Recht auch ein windows - hier kann linux nichts was windows
> auch kann.

Klar geht alles auch irgendwie mit Windows, aber zumindest aus meiner 
Sicht viel komplizierter. Ist aber eine Geschmacksfrage.

>
>> Ein NAT ist keine gute Idee, da das ein viel zu kompliziertes Protokoll
>> (z. B. SMB) spricht. Das willst Du in einem FPGA nicht wirklich
>> nachprogrammieren.
> NAT? meinst du eine NAS also Netwerkfestplatte?

Ja, natürlich. Tippfehler.

>
>> Bei der anschließenden Auswertung muss
>> der PC dann direkt diese Blöcke am Betriebssystem vorbei lesen. Das ist
>> je nach System nur mit speziellen Treibern möglich.
> welchens System braucht da speziellen Treibern? Bei windows und Linux
> geht es mit den Passenden Rechte und ohne speziellen Treiber.

Bei Windows war ich mir da nicht so sicher. Wie bekommt man denn da die 
Rechte?

von Christian R. (supachris)


Lesenswert?

Dann würde ja auch USB 2.0 reichen, die 20MB/s schafft man mit 
ordentlicher Pufferung locker. Notfalls PCIe nehmen (fertigen Chip). Es 
klang aber eher nach einem Stand-alone System...

von Peter II (Gast)


Lesenswert?

dnalorac schrieb:
> Bei Windows war ich mir da nicht so sicher. Wie bekommt man denn da die
> Rechte?
Anwendung als Admin starten? Eventuell ist es möglich auch anderen 
nutzer das Recht inzurichten aber da müsste ich auch erst suchen ob das 
geht.

von Kest (Gast)


Lesenswert?

Eine IDE Festplatte ans FPGA zu "pflanschen" ist "peace of cake". Bei 
Altera gibt es da sogar freie Cores, bei Xilinx (Stichwort XESS) gibt's 
die auch. Zu der Geschwindigkeit kann ich ncihts sagen, aber wird schon 
schnell genug sein, wenn man es nicht ganz verkehrt macht.
An SATA würde ich mich nur mit SATA-to-Local Bus ASICs rantrauen, alles 
andere ist sehr komplex.

Kest

von Oli (Gast)


Lesenswert?

>Eine IDE Festplatte ans FPGA zu "pflanschen" ist "peace of cake".
Aber einen PHY brauche ich dafür schon, denke ich, oder?
Ich denke nicht, dass ich da ohne Pegelwandlung direkt aus einem 
Expansionboard raus kann.

UDP wäre natürlich auch eine Möglichkeit. Ich habe inzwischen das hier 
gefunden: http://opencores.org/project,pc_fpga_com
"PC-FPGA Communication Platform"

Andererseits haben sie auch einen UBS2.0 Core. Ein filesystem wäre schon 
gut, habe ich aber noch nie gemacht.

von Oli (Gast)


Lesenswert?

Und nochmal eine andere Idee:

>USB 2.0 Host Controller wäre da schon wesentlich aufwendiger als
>ein SATA Host.
Wäre mir natürlich sehr symühatisch. Ich habe gerade bei Reichelt die 
SS-Drives gesehen:

OCZSSD2-2VTXE120, 120 GB, 275 MB/sec Schreiben. 177,-  Das wäre ok.

Ich brauche also einen SATA-core und ein Protokoll zum Anlegen von 
Dateien im Windowsformat.

Wäre hätte da auch Bedarf und würde sich an einem Projekt beteiligen?

von Christian R. (supachris)


Lesenswert?

Oli schrieb:
> Ich brauche also einen SATA-core und ein Protokoll zum Anlegen von
> Dateien im Windowsformat.

Dann wirds in reiner Logik schon schwierig. Da brauchst du am besten 
einen MicroBlaze Prozessor samt passendem RAM usw. dann kannst du 
beliebige FAT Implementierungen implementieren. Die Daten dann zu SATA 
ist auch nicht so schwer, da gibts sicher auch Beispiele, denn das ML505 
Board beispielsweise hat SATA dran.

von Duke Scarring (Gast)


Lesenswert?

Oli schrieb:
> OCZSSD2-2VTXE120, 120 GB, 275 MB/sec Schreiben. 177,-  Das wäre ok.
Vorsicht bei den angegebenen Schreibraten! Das sind Maximalwerte.
Ich habe bisher noch keinen Hersteller gefunden, der eine garantierte 
minimale Schreibrate in seinem Datenblatt aufgeführt hat...

Duke

von Kest (Gast)


Lesenswert?

Für eine IDE Festplatte brauchst Du keinen Phy.

Ich würde schätzen, dass sogar wenn Du einen SATA Core hättest, alles 
zum Laufen zu bringen 3 Mannmonate dauert. Es ist also nicht so trivial, 
wie IDE.

Kest

von Oli (Gast)


Lesenswert?

Hm, eigentlich brauche ich Lösung mit 3 Manntagen :-(

Es muss doch irgendwelche passenden Sachen am Markt geben, denke ich ...

von Kest (Gast)


Lesenswert?

Das mit 3 Manntagen kriegst Du nicht mehr hin ;-) Dann müsstest Du ja am 
Mo fertig werden :-)

Wenn Du bereit bist, viel Geld zu bezahlen, dann wirst Du sicherlich was 
finden.

Statt IDE Festplatte könnte man CF-Karte nehmen, auf die 20 MB/s kommst 
Du sicherlich, wenn Du 2-4 davon parallel nimmst. Die CF Karte kannst Du 
direkt ans FPGA anschließen.

Grüße,
Kest

von Christian R. (supachris)


Lesenswert?

Haha, 3 Manntage. Die brauchst du schon für das Aufsetzen des EDK/XPS 
Projektes für dein Board (wenn überhaupt vorhanden) und bis zum ersten 
"Hello World" über die Konsole.
Klar, für PATA brauchst du keinen PHY, aber einen Pegelwandler, PATA 
läuft meines Wissens mit 5V, sowas hat kaum ein aktuelles FPGA noch. Ist 
aber wenigs zukunftsfähig, die PATA Platten werden immer weniger und 
teurer.

von Johann (Gast)


Lesenswert?

Also ich würde das wie folgt machen:

Nehme den FTDI-Chip FT2232H das gibt es sehr kleine Boards überall für 
sehr wenig Geld (29€) zu kaufen

http://de.farnell.com/ftdi/ft2232hq-mini-module/modul-usb-2-port-ft2232h-basiert/dp/1697465

Mit diesem Chip kann man Daten in Richtung PC mit bis zu 40MByte pro 
Sekunde übertragen. Ich benutze immer Labview um dann ein kleines 
Empfangsprogramm zu schreiben. Demnach kommen die Daten von Deinem 
Messsystem über USB 2.0 und in Richtung PC. Dort schreibt Dein Programm 
die Daten dann auf die Festplatte oder einen USB-Stick.

Der FTDI-Chip übernimmt das ganze USB-Protokoll. Du must Die Daten beim 
FTDI-Chip wie in einen FIFO schreiben und ein Flag setzen wenn ein Byte 
übertragen wurde. Den Rest macht dann der FTDI-Chip. Dadurch muss man 
sich nicht mit einem IP-Core rumägern und verbringt keine Zeit mit dem 
Suchen. Der Chip funktioniert inzwischen sehr gut. Ich habe Ihn selber 
auf eingien Boards verbaut.

von Johann (Gast)


Lesenswert?

PS. Ich würde es auch in weniger als 3 Manntage lösen können :-) Jedoch 
habe ich in diesen Bereich auch schon einige Jahre Erfahrungen

von Oli (Gast)


Lesenswert?

Hm, ich hatte mich jetzt schon mit einer non-PC_Lösung angefreundet.

Naja, ich werde mal am WE darüber grübeln, was ich mache.

von Christian R. (supachris)


Lesenswert?

Mit Host-PC zerfällt die Aufgabe natürlich in wenige Zeilen VHDL, den 
FT2(2)32H anzusprechen ist ein Kinderspiel. Den Cypress FX2 kann man 
genauso nehmen, etwas aufwendiger in der Programmierung der Firmware, 
aber dafür universeller.

von Ralf K. (Gast)


Lesenswert?

Die Frage ist, wie bequem man es beim Auslesen haben will. Entweder man 
steckt den C Code auf einen Core im FPGA oder macht es mit einem 
Konverter im PC offline. Letzteres scheint mir einfacher.

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.