Ist ein FPGA für ein solches Projekt geeignet?

Ich arbeite derzeit an Super OSD – einem On-Screen-Display-Projekt. http://code.google.com/p/super-osd hat alle Details.

Im Moment verwende ich eine dsPIC-MCU, um die Arbeit zu erledigen. Dies ist ein sehr leistungsstarker DSP (40 MIPS bei 80 MHz, Einzelzyklusoperationen mit drei Registern und eine MAC-Einheit) und, was wichtig ist, er wird in einem DIP-Paket geliefert (weil ich ein Steckbrett verwende, um ihn zu prototypisieren). Ich hole wirklich das letzte bisschen Leistung heraus, wenn ich das OSD betreibe - der Chip hat ungefähr 200 ns oder 10 Zyklen pro Pixel auf der Ausgangsstufe, also muss der Code in diesem Teil sehr optimiert werden (aus diesem Grund wird es immer in geschrieben Montage.)

Jetzt habe ich überlegt, dafür ein FPGA zu verwenden, da es aufgrund der parallelen Architektur eines solchen Chips möglich ist, ein einfaches Logikprogramm zu haben, das das OSD ausführt. Dinge wie das Zeichnen von Linien und algorithmischer Code würden von einer MCU gehandhabt, aber die eigentliche Ausgabe würde mit einem FPGA erfolgen. Und einige einfache Dinge wie das Setzen von Pixeln oder das Zeichnen horizontaler und vertikaler Linien würde ich gerne in das FPGA integrieren, um die Geschwindigkeit zu verbessern.

Ich habe ein paar Fragen:

  1. Wird es deutlich mehr kosten? Die billigsten FPGAs, die ich gefunden habe, waren jeweils ~ £ 5 und der dsPIC kostet jeweils £ 3. Es wird also mehr kosten, aber um wie viel?
  2. Der dsPIC passt in ein SO28-Gehäuse. Ich möchte nicht größer als SO28 oder TQFP44 werden. Die meisten FPGAs, die ich gesehen habe, kommen in BGA- oder TQFP>100-Gehäusen, die derzeit aufgrund der Schergröße und der Schwierigkeit, sie selbst zu löten, keine Option sind.
  3. Wie viel Strom verbraucht ein FPGA? Die dsPIC-Lösung verbraucht derzeit etwa 55 mA +/- 10 mA, was im Moment in Ordnung ist. Würde ein FPGA mehr oder weniger verbrauchen? Ist es variabel oder ziemlich statisch, wie das dsPIC?
  4. Ich benötige mindestens 12 KB Grafikspeicher, um die OSD-Grafiken zu speichern. Haben FPGAs diese Art von Speicher auf dem Chip oder ist dies nur bei externen Chips möglich?

Antworten (5)

Im Prinzip ist dies ein guter Kandidat für FPGA-basiertes Design. Zu deinen Anforderungen:

ad 1. Das FPGA wird höchstwahrscheinlich teurer sein, um wie viel das hängt von dem Gerät ab, das Sie wählen. Auf den ersten Blick wird der kleinste Spartan 3 von Xilinx (XC3S50AN) mehr als genug für diese Aufgabe sein (~10£ von Farnell). Ich denke, Sie können davon ausgehen, dass dies die obere Grenze für die Kosten ist (es hat 56 KB RAM im Inneren, also ist es mehr als Sie brauchen). Sie können billigere Geräte entweder von Xilinx oder ihren Konkurrenten Altera und Lattice finden.

ad 2. Das Package ist das schwierige Thema, ich habe auch kein FPGA mit kleinerem Footprint gesehen. Möglicherweise können Sie jedoch ein CPLD-Gerät verwenden (aus Gründen der Argumentation sind die CPLDs kleine FPGAs), die sich möglicherweise in einem kleineren Gehäuse befinden (PLCC oder QFN). Auf der positiven Seite werden sie billiger sein (sogar einzelne $), auf der negativen Seite wird höchstwahrscheinlich kein RAM drin sein. Mit CPLD benötigen Sie wahrscheinlich einen externen SRAM-Chip.

zu 3. Der Stromverbrauch von FPGAs und CPLDs hängt stark vom programmierten Design ab. Es besteht jedoch eine gute Chance, dass das FPGA- und insbesondere das CPLD-Design weniger verbrauchen als Ihre aktuelle Lösung.

ad 4. FPGA haben diese Art von Speicher im Inneren, CPLD ganz sicher nicht. Dies kann durch einen externen SRAM-Chip (oder zwei) gelöst werden. Zum Beispiel:

|SRAM1| <--> |CPLD| <--> |uC|
|SRAM2| <-->

In einer solchen Anordnung zeigt das CPLD, während der uC in SRAM 1 schreibt, Daten von SRAM 2 an. Das CPLD sollte in der Lage sein, beide Aufgaben gleichzeitig zu handhaben.

Natürlich können Sie dies auch auf andere Weise lösen:
1) Verwenden Sie einen schnelleren uController (z. B. ARM)
2) Verwenden Sie ein Gerät mit einer programmierbaren Struktur und uC (z. B. FPSLIC von Atmel, aber ich habe solche Geräte noch nie verwendet und kenne mich sehr gut aus wenig darüber)

Standard-Haftungsausschluss -> Da Designs offene Probleme mit vielen Einschränkungen und möglichen Lösungen sind, trifft das, was ich oben geschrieben habe, möglicherweise nicht auf Ihren Fall zu. Ich glaube jedoch, dass es sich lohnt, diese Option zu prüfen.

Sie könnten anstelle eines FPGAs ein CPLD verwenden, z. B. eines der Altera MAX II-Teile. Sie sind im Gegensatz zu FPGAs in QFP44-Gehäusen verfügbar. Sie sind eigentlich kleine FPGAs, aber Altera spielt diesen Aspekt herunter. CPLDs haben gegenüber den meisten FPGAs den Vorteil, dass sie über einen On-Chip-Konfigurationsspeicher verfügen, FPGAs erfordern im Allgemeinen einen externen Flash-Chip. Es gibt natürlich auch andere CPLDs, aber ich mag den MAX II.

Wie hoch der Stromverbrauch sein wird, lässt sich nicht sagen, da er von Taktraten und tatsächlich verwendeter Logik abhängt.

FPGAs haben normalerweise eine begrenzte Menge an On-Chip-Speicher, den Sie verwenden können, aber Sie benötigen einen externen Speicher mit einem CPLD.

Eine andere Option wäre ein XMOS -Chip, aber der kleinste (der XS1-L1) befindet sich in einem QFP64-Gehäuse. Es hat viel On-Chip-RAM - 64k.

1) Ja, das FPGA wird teurer. Nicht nur der Chip selbst ist teurer, sondern Sie benötigen auch einen Flash-Speicher zum Speichern der Programmierung. FPGA + Flash kostet wahrscheinlich dreimal so viel wie nur das dsPIC ... etwa 10 US-Dollar für ein kleines FPGA und 3 US-Dollar für ein kleines Flash.

2) Sie können existieren, aber mir ist kein FPGA bekannt, das nicht oberflächenmontiert ist. Die meisten davon sind wahrscheinlich QFP oder BGA.

3) Das FPGA wird wahrscheinlich etwa dreimal so viel Strom ziehen wie der dsPIC, aber das kann steigen oder fallen, je nachdem, welche Funktionen Sie verwenden. FPGAs haben viele Funktionen, die die Leistungsaufnahme erhöhen können. Rechnen Sie aber mit mindestens 150 mA.

4) FPGAs haben normalerweise Block-RAM in sich. Alle bis auf die kleinsten FPGAs sollten so viel Speicher haben.

Andere erwähnen CPLDs. Wenn Sie Ihr Design sorgfältig partitionieren, könnten Sie wahrscheinlich einige kleine, aber teure Operationen in das CPLD verschieben. Es wäre wie ein Mini-Coprozessor.

Die billigste Lösung mit der niedrigsten Lernkurve wäre der Wechsel zu einem Prozessor mit höherer Leistung, höchstwahrscheinlich ARM.

Die Programmierung eines FPGA/CPLD in VHDL/Verilog ist für viele Leute eine ziemlich steile Lernkurve, die von C kommt. Sie sind auch nicht allzu billige Teile.

Verwenden Sie einen anständig leistungsfähigen ARM, vielleicht einen LPC1769? (Cortex-M3) könnten Sie wahrscheinlich auch den PIC18 in Ihrem Design ersetzen.

Was das Problem mit den Durchgangslöchern betrifft, so lange Sie den SoC in einem QFP-Gehäuse mit freiliegenden Stiften erhalten können, greifen Sie einfach zu einigen dieser Adapter für die erforderliche Stiftbelegung für Ihr Prototyping.

Er verwendet einen dsPIC, keinen PIC18.
Er verwendet beide, sehen Sie sich die Schaltpläne in der von ihm verlinkten Dokumentation an. Der PIC18 führt die Tasten/Schnittstelle aus und kommuniziert mit dem dsPIC über I2C. Der dsPIC macht nur die Videoverarbeitung.

Meine Neigung wäre, etwas zu verwenden, um das Timing zwischen dem Prozessor und dem Display zu puffern. Hardware zu haben, die ein ganzes Videobild ohne Prozessoreingriff anzeigen kann, mag nett, aber vielleicht übertrieben sein. Ich würde vorschlagen, dass der beste Kompromiss zwischen Hardware- und Softwarekomplexität wahrscheinlich darin besteht, etwas mit zwei oder drei unabhängigen 1024-Bit-Schieberegistern (zwei Bits pro Pixel, um Schwarz, Weiß, Grau oder Transparent zu ermöglichen) und einem Mittel zu machen zwischen ihnen zu wechseln. Lassen Sie den PIC ein Schieberegister laden, und lassen Sie dann die Hardware beginnen, dieses herauszuschieben, während sie ein Flag setzt, damit der PIC das nächste laden kann. Mit zwei Schieberegistern hätte der PIC 64 us zwischen dem Zeitpunkt, an dem ihm mitgeteilt wird, dass ein Schieberegister verfügbar ist, und dem Zeitpunkt, an dem alle Daten verschoben werden müssen. Mit drei Schieberegistern,

Beachten Sie, dass während ein 1024-Bit-FIFO genauso gut wäre wie zwei 1024-Bit-Schieberegister und in einem CPLD ein FIFO nur eine Makrozelle pro Bit plus etwas Steuerlogik kostet, in den meisten anderen Logiktypen zwei Schieberegisterbits wird billiger sein als ein Bit FIFO.

Ein alternativer Ansatz wäre, ein CPLD mit einem SRAM zu verbinden und damit ein einfaches Video-Subsystem zu erstellen. Ästhetisch mag ich die On-the-Fly-Video-Generierung, und wenn jemand schöne, billige 1024-Bit-Schieberegister-Chips herstellen würde, wäre dies der Ansatz, den ich bevorzugen würde, aber die Verwendung eines externen SRAM ist möglicherweise billiger als die Verwendung eines FPGA mit genügend Ressourcen dafür Machen Sie mehrere 1024-Bit-Schieberegister. Für Ihre Ausgabeauflösung ist es erforderlich, Daten mit 12 Megapixeln/s oder 3 MBytes/s auszutakten. Es sollte möglich sein, Dinge so anzuordnen, dass Daten mit einer Rate von bis zu 10 Mbit/s ohne allzu große Schwierigkeiten durch Verschachteln von Speicherzyklen eingetaktet werden können; Der größte Trick wäre, Datenkorruption zu verhindern, wenn ein Synchronisationsimpuls nicht genau im erwarteten Moment kommt.