Hallo,
ich möchte mich näher mit digitaler Signalverarbeitung beschäftigen, und
habe dafür mit einem FPGA herumgespielt. Aktuell hakt es bei mir an der
PC Anbindung, die ich momentan provisorisch mit einem
USB-Seriell-Wandler realisiert habe.
Grundsätzlich soll die Schnittstelle auf einem Linux PC funktionieren,
und einfach nur die Ein- und Ausgabedaten weiterleiten.
Rein theoretisch arbeiten die aktuellen Versuche von mir mit einer
Pipeline mit konstanter Laufzeit (Systemtakt ist so angepasst, dass die
Schaltzeiten überall passen). In der Pipeline wird jeweils ein Byte pro
Stufe verarbeitet. Der Takt liegt bei 100MHz, womit ich theoretisch bis
zu 100 MByte/s als Durchsatz haben könnte.
Nun muss ich das nicht komplett ausreizen, zumal ich auch noch
Algorithmen ausprobieren möchte, bei denen die Pipeline nicht konstant
durchläuft, der Durchsatz also nicht konstant ist.
Im Optimalfall hätte ich also eine Lösung, bei der ich jeweils 1 Byte
Ein- und Ausgabe habe und drei zusätzliche Pins: (1) Flag für "es werden
Daten gesendet", (2) Es gibt neue Daten im Empfangspuffer und (3) Es
gibt zu schickende Daten.
Da ich ein begrenztes Budget habe, würde ich ungern Lösungen mit teuren
IP Cores oder PCIE Eval Boards verwenden, bei denen zusätzlich noch die
Entwicklungssoftware teuer gekauft werden muss (bspw. Lattice Diamond,
die nur für die "kleineren" FPGAs kostenlos verfügbar ist).
Die 100MByte müssen nicht wirklich erreicht werden. Auch muss die Lösung
noch nicht der Weisheit letzter Schluss sein. Ich suche nur etwas, dass
grundsätzlich mit höheren Geschwindigkeiten arbeitet, um das Verhalten
mit großen Datenmengen zu testen.
Bisher sind mir Ethernet (bspw. auch eigenes Protokoll mit minimalem
Header) und USB eingefallen, wobei ich für USB 3.0 keine "fertigen"
Lösungen in Form von ICs gefunden habe, und die ganze Materie sehr
kompliziert zu sein scheint. Bei Ethernet habe ich ebenfalls nur
All-In-One ICs (MAC + PHY) für 10MBit gefunden.
Was könnt ihr mir empfehlen?
Vielen Dank im Voraus!