Hallo Experten,
ich möchte Messdaten mit 100MBit/s in einen PC über 20 Meter
transferieren. Das Messgerät basiert (soweit ich weiß) auf einem Actel
A3P1000, der LVDS-Ausgänge besitzt. Ich möchte den Entwicklungsaufwand
auf der FPGA-Seite gering halten.
Auf PC-Seite würde ich gerne eine PCI/PCI-X/PCIe-Karte kaufen, die das
Übertragungsprotokoll von sich aus beherrscht, ich also nicht jedes Bit
einzeln abfragen, parallelisieren, dekodieren und Fehler-checken muss.
Linux-Treiber oder eine offene Dokumentation müssen vorhanden sein.
Was für ein Interface/Protokoll schlagt ihr vor?
100MBit/s-Ethernet (OSI layer1 und layer2) sind im FPGA sicher nur sehr
aufwändig zu implementieren, oder? Der PC bräuchte dann nur eine
zusätzliche Netzwerkkarte.
Danke fürs lesen
Michael
Dachte ich auch zuerst, nur muss man dann noch etwas nachhelfen, um auf
die 20m zu kommen. USB Line Extender oder mehrere solche aktive
Verlängerungen hintereinander....
Danke für Eure Antworten.
Ich muss den Cypress-USB-Thread jetzt erstmal versuchen zu verstehen.
z.B. ist immer nur von Windows DLLs die Rede - ich brauche es für Linux
Außerdem ist mir noch nicht klar, ob diese Cypress-USB-Platine nun einen
Host (Master) oder einen Slave darstellt. Eine PC-USB-Karte kann ja
(IMHO) nur als Host arbeiten - das FPGA-USB-Interface müsste also ein
Slave sein.
Wegen der 20m habe ich bei USB auch etwas Bedenken, auch weil USB ja
große Latenzen nachgesagt werden, was Signalrepeater eher verschlechtern
werden.
Gruß
Michael
Der Cypress Chip ist ein Device. Für Linux geht das prima mit der LibUSB
anzusprechen, machen wir hier auch. Die Latenzzeiten haben erst mal nix
mit der Kabellänge zu tun und sind Host-Controller und Treiber-abhängig.
Ordentliche Intel-Controller arbeiten im µs-Bereich. Die 20m schaffst du
nur, wenn du mehrere Hubs hintereinander einsetzt, oder eben solche
Line-Extender nimmst. Die Übertragungsrate und/oder Latenzzeit
verschlechtert sich dadurch nicht. Ist auf jeden Fall einfacher zu
implementieren als Ethernet. Dafür halt für lange Strecken nur mit
Zusatz-Hardware geeignet. Bei Hy-Line gibts übrigens die Extreme USB
Sachen, da kannst du per Glasfaser auch einige km weit USB machen.
@ Michael Born (mibo)
>100MBit/s-Ethernet (OSI layer1 und layer2) sind im FPGA sicher nur sehr>aufwändig zu implementieren, oder?
Nöö, das ist eher einfach. Und vor allem, es ist ein SEHR verbreiter
Standard, vor allem auf der PC-Seite. Irgendwelche selbstgebastelten
PCI-Karten sind heute fast ausgestorben, von gaaaaanz wenigen
Spezialanwendungen mal abgesehen.
MFG
Falk
Falk Brunner wrote:
> @ Michael Born (mibo)>>>100MBit/s-Ethernet (OSI layer1 und layer2) sind im FPGA sicher nur sehr>>aufwändig zu implementieren, oder?>> Nöö, das ist eher einfach. Und vor allem, es ist ein SEHR verbreiter> Standard, vor allem auf der PC-Seite. Irgendwelche selbstgebastelten> PCI-Karten sind heute fast ausgestorben, von gaaaaanz wenigen> Spezialanwendungen mal abgesehen.>> MFG> Falk
Also für USB habe ich dieses Modul mit Cypress-Chip gefunden, dass
anscheinend sehr einfach (nur Datenleitungen anschließen) dem FPGA eine
USB-Schnittstelle verpassen würde.
http://www.braintechnology.de/braintechnology/usb_fastinterface27.html
Den zugehörigen SourceCode, den es angeblich bei Cypress gibt, habe ich
auf die Schnelle nicht gefunden.
Gibt es ein solches "anschließen und fertig"-Modul auch für Ethernet
Layer1+2 zu kaufen? Auf PC-Seite kann ich z.B. mit Ethereal/Wireshark
Layer2 Pakete anschauen - ein Auslesen dieser Daten sollte also hier
recht einfach sein. Da nur Gerät und PC an dem Ethernet-Kabel hängen
würden, wären höhere Layer schon zuviel des Guten.
Beim lesen z.B. bei Wikipedia ist mir der Begriff SerDes
begegnet.http://en.wikipedia.org/wiki/SerDes
Das führt zu folgender Idee:
8 Pins (Bits) vom FPGA meines Gerätes werden an ein "Ser"-Modul
geschlossen, dass einen differenziellen, seriellen Datenstrom erzeugt,
der über 20m Kabel übertragen werden kann.
Am anderen Ende ist ein "Des"-Modul, dass wieder parallele Daten daraus
macht und diese an eine digital-I/O-PCI-Karte des PCs gibt.
Kriegt man solche SerDes-Module zu kaufen? Per Google habe ich erstmal
nur Chipsätze gefunden, die quasi Kanonen für die Spatzen wären.
http://www.latticesemi.com/solutions/technologysolutions/highspeedserialio.cfm
Nochmal Danke für die bisherigen Vorschläge.
Ich versuche mir gerade einen Überblick über die verschiedenen
Möglichkeiten zu verschaffen - wie ihr an meinen Fragen merkt, ist das
Thema für mich Neuland.
Schönen Abend!
Michael
@ Michael Born (mibo)
>Gibt es ein solches "anschließen und fertig"-Modul auch für Ethernet>Layer1+2 zu kaufen?
Nennt sich MAC+Phy, manchmal sogar in einem Gehäuse. Z.B. DM9000. Einige
FPGAs haben einen MAC schon als Hard-Core auf dem IC, aber auch ein
Soft-MAC ist relativ einfach machbar, wenn man nicht jedes Normfeature
braucht. Daten reinhauen, Raustakten, dabei CRC berechnen und am Ende
CRC anhängen.
>8 Pins (Bits) vom FPGA meines Gerätes werden an ein "Ser"-Modul>geschlossen, dass einen differenziellen, seriellen Datenstrom erzeugt,>der über 20m Kabel übertragen werden kann.
Naja, 100 MBit/s sind für ein heutiges FPGA eher Kinderkram, da braucht
man keinen extra SerDes. BEstenfalls einen PHY, der robustes Treiber
(ESD) zur Verfügung stellt.
>Kriegt man solche SerDes-Module zu kaufen?
Ja, ist aber nicht sinnnvoll, weil keine Standard. Ein einfacher
LVDS-Transmittter reicht für 100 Mbit/s. Allerdings ist die
Datenrückgewinnung am Empfänger schon nicht ganz trivial. Dann doch
besser einen fertigen SerDes nehmen, z.b.
http://www.national.com/analog/interface/serdes
Mit den Chanel Links hatte ich mal zu tun, sind eigentlich für
Bildübertragung. Dort bekommt man schon einige Gbit/s durch, braucht
aber spezielle Kabel und Stecker, nix mit CAT5 und RJ45.
MFg
Falk
Danke für die umfangreiche Antwort.
PHY+MAC waren in der Tat sehr gute Stichworte. Ich schaue mir nun das
bei dacomwest.de gelistete 10/100MBit/s-Modul WIZ830MJ näher an.
Komischerweise sind 100MBit/s-Module sehr selten (ausgiebige
google-Suche) und mit 1GBit/s habe ich nur ein Modul gefunden. Wenn der
Aufwand für den Anschluß des Moduls an den FPGA gleich ist, könnte ich
ja auch 1GBit/s nehmen - vielleicht braucht mans später mal...
Das 10/100MBit/s-Modul:
http://www.wiznet.co.kr/en/pro02.php?&ss[2]=2&page=1&num=77
Das 1GBit/s-Modul:
http://www.morethanip.com/boards_10_100_1000_dp83865.htm
Jetzt muss ich die Doku wälzen und verstehen, wie ich so ein Modul am
Actel developer board zum Testen anschließe.
Gruß
Michael
Michael Born wrote:
> Das 1GBit/s-Modul:> http://www.morethanip.com/boards_10_100_1000_dp83865.htm>> Jetzt muss ich die Doku wälzen und verstehen, wie ich so ein Modul am> Actel developer board zum Testen anschließe.
Naja, der PHY ist ja PillePalle, da gibts massenhaft Chips. Aber da
gehört ja mindestens noch der MAC dazu. Den könnte man von OpenCores
nehmen. Da kann man zumindest ohne CPU schon mal UDP machen. Aber ob das
sonderlich schön und sinnvoll ist, ist fraglich. Wir arbeiten momentan
mit einem Virtex 4 mit eingebautem GbE-MAC und dem PowerPC Prozessor da
drin, um mit möglichst viel Auslastung der 1Gbit-Stecke Daten per UDP an
den PC zu transferieren. Klappt auch soweit ganz gut, aber das FPGA ist
mit PPC, MAC, DMA-Controller und bissl eigener Logik auch schon voll
wieder (FX12).
Ui, Du hast Recht. Das ist ja nur der PHY - hatte ich übersehen.
Dann läufts wohl auf das WIZ830-Modul hinaus.
Warum gibts so ein PHY+MAC für 1GBit/s nicht als fertiges Modul zu
kaufen? Weil die Anforderungen alle zu unterschiedlich sind?
@supachris:
Warum benutzt ihr UDP? Ist MACRAW (wie es z.B. bei dem WIZ-Modul heißt)
nicht schneller und einfacher, da es auf dem niedrigen Layer2 liegt?
Ganz einfach: Damit es kompatibel zu allen PCs ist, keine extra Treiber
o.ä. am PC nötig sind, und routingfähig muss es auch sein. Wir wollen
keine Sonderlösungen, sondern robuste Standard-Lösungen.
Die Module wird´s so nicht geben, weil wie gesagt die Anforderungen
extrem unterschiedlich sein können. Das ist ja nicht wie bei USB einfach
anstecken und geht, sondern da ist ja einiges an Protokoll und
Konfiguration nötig....
Nach einigen Diskussionen hat sich die Problemstellung bei mir nochmal
etwas geändert. Vielleicht könnt Ihr mir dazu auch noch einen Tip geben.
Den FPGA zu programmieren, damit er das WIZ830MJ Ethernet-Modul
initialisiert und ihm seine Daten sendet ist wohl zu aufwändig (und
evtl. sind in dem Gerät auch nicht mehr genügend Zellen frei).
Viel einfacher wäre es, das Ethernet-Modul über einen Microcontroller in
Software anzusprechen. Der MC würde also über einen parallelen Bus Daten
vom FPGA bekommen und diese an das Ethernet-Modul schicken.
Das führt mich zu zwei Fragen.
1. Welchen MC würdet ihr empfehlen? (Er sollte die 100MBit/s schaffen)
2. Das Ethernet-Modul hat ja selber schon einen Controller drauf, den
man aber nicht programmieren kann. Wäre es vielleicht einfacher, direkt
einen Microcontroller zu nehmen, der schon eine Ethernet-Schnittstelle
hat, und bei dem noch die Kommunikation mit dem FPGA in Software zu
realisieren? (MC-Vorschläge sind sehr gerne willkommen)
Schönen Abend!
Michael
@ Michael Born (mibo)
>Den FPGA zu programmieren, damit er das WIZ830MJ Ethernet-Modul>initialisiert und ihm seine Daten sendet ist wohl zu aufwändig
Glaub ich nicht.
> (und>evtl. sind in dem Gerät auch nicht mehr genügend Zellen frei).>Viel einfacher wäre es, das Ethernet-Modul über einen Microcontroller in>Software anzusprechen. Der MC würde also über einen parallelen Bus Daten>vom FPGA bekommen und diese an das Ethernet-Modul schicken.
Viel zu umständlich.
>Das führt mich zu zwei Fragen.>1. Welchen MC würdet ihr empfehlen? (Er sollte die 100MBit/s schaffen)
Das packen nur mittelgrosse 32 Bit Prozessoren, ARM, PowerQUICK & Co.
>2. Das Ethernet-Modul hat ja selber schon einen Controller drauf, den>man aber nicht programmieren kann. Wäre es vielleicht einfacher, direkt>einen Microcontroller zu nehmen, der schon eine Ethernet-Schnittstelle>hat, und bei dem noch die Kommunikation mit dem FPGA in Software zu>realisieren? (MC-Vorschläge sind sehr gerne willkommen)
Kann man machen, ist aber im Prinzip das Gleiche.
Pack die Initialisierung in den FPGA und sprich direkt mit dem
Ethernettranceiver. Das ist einfacher als man denkt. Ne kleine State
Machine liest am Anfang ein paar Dutzend Konfigurtionsworte aus einem
BRAM und schreibt sie in den Ethernet-IC. Fertig. Danach schreibt sie
die Daten in den IC.
Wenn die paar Logikzellen nicht mehr da sind ist das FPGA eh zu voll
und man braucht einen grösseren.
MFG
Falk
Schönen Abend!
Michael
Danke für die Antwort.
Allerdings wurde nun doch der Beschluss gefasst, dass ein
Mikrocontroller zwischen dem FPGA-Gerät und dem PC vermitteln soll.
Ich werde mich nun also auf die Suche nach einem ARM-Entwicklerboard mit
100MBit/s Ethernetanschluss machen.
Gruß
Michael
PS: Über Tips zum Mikrocontroller freue ich mich natürlich auch. Dazu
habe ich einen neuen Thread aufgemacht.
Beitrag "ARM-Entwicklerboard mit Ethernet gesucht und allgem. Fragen"