Ist ein FPGA für ein solches Projekt realisierbar?


12

Ich arbeite derzeit an Super OSD - einem Projekt für Bildschirmanzeigen. http://code.google.com/p/super-osd enthält alle Details.

Im Moment benutze ich eine dsPIC MCU, um die Arbeit zu erledigen. Dies ist ein sehr leistungsfähiger DSP (40 MIPS bei 80 MHz, Single-Cycle-Operationen mit drei Registern und eine MAC-Einheit). Er ist vor allem in einem DIP-Paket enthalten (da ich ein Steckbrett verwende, um ihn zu prototypen). Wenn ich das OSD wirklich zum Laufen bringe, hat der Chip ungefähr 200 ns oder 10 Zyklen pro Pixel auf der Ausgangsstufe, so dass der Code in diesem Teil sehr optimiert werden muss (aus diesem Grund wird er immer eingeschrieben) Versammlung.)

Jetzt habe ich darüber nachgedacht, ein FPGA dafür zu verwenden, da es aufgrund der parallelen Architektur eines solchen Chips möglich ist, ein einfaches Logikprogramm zum Ausführen des OSD zu haben. 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 Einstellen von Pixeln oder das Zeichnen horizontaler und vertikaler Linien, die ich in das FPGA integrieren möchte, 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 beträgt £ 3. Es wird also mehr kosten, aber um wie viel?
  2. Das dsPIC passt in ein SO28-Paket. Ich möchte nicht größer als SO28 oder TQFP44 werden. Die meisten FPGAs, die ich gesehen habe, sind in BGA- oder TQFP> 100-Gehäusen erhältlich, die im Moment 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 ca. 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. Verfügen FPGAs über einen solchen Speicher auf dem Chip oder ist dieser nur mit externen Chips verfügbar?

Antworten:


7

Grundsätzlich ist dies ein guter Kandidat für FPGA-basiertes Design. Bezüglich Ihrer Anforderungen:

ad 1. Das FPGA wird höchstwahrscheinlich teurer sein, je nachdem, welches Gerät Sie auswählen. Auf den ersten Blick reicht der kleinste Spartan 3 von Xilinx (XC3S50AN) für diese Aufgabe mehr als aus (~ 10 £ von Farnell). Ich denke, Sie können davon ausgehen, dass dies die Obergrenze für die Kosten ist (es hat 56kB RAM im Inneren, es ist also mehr als Sie brauchen). Möglicherweise finden Sie billigere Geräte entweder bei Xilinx oder bei den Mitbewerbern Altera und Lattice.

ad 2. Das Paket ist das schwierige Thema, ich habe auch kein FPGA mit geringerem Platzbedarf gesehen. Möglicherweise können Sie jedoch ein CPLD-Gerät verwenden (aus Gründen der Argumentation handelt es sich bei den CPLDs um kleine FPGAs), das möglicherweise in einem kleineren Paket (PLCC oder QFN) enthalten ist. Auf der positiven Seite werden sie billiger sein (sogar einzelne $), auf der negativen Seite wird höchstwahrscheinlich kein RAM drin sein. Bei CPLD bräuchten Sie wahrscheinlich einen externen SRAM-Chip.

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

ad 4. FPGA haben diese Art von Speicher, CPLD mit Sicherheit nicht. Dies kann durch einen externen SRAM-Chip (oder zwei) gelöst werden. Beispielsweise:

| SRAM 1 | <-> | CPLD | <-> | uC |
| SRAM 2 | <->

In einer solchen Anordnung zeigt die CPLD, während die uC in den SRAM 1 schreibt, Daten vom SRAM 2 an. Die CPLD sollte in der Lage sein, beide Aufgaben gleichzeitig zu bearbeiten.

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 programmierbarer Struktur und uC (z. B. FPSLIC von Atmel) wenig darüber)

Standard-Haftungsausschluss -> da Designs offene Probleme sind, mit vielen Einschränkungen und möglichen Lösungen, was auch immer ich oben geschrieben habe, kann es sein, dass dies für Ihren Fall nicht zutrifft. Ich glaube jedoch, dass es sich lohnt, diese Option zu prüfen.


4

Sie können eine CPLD anstelle eines FPGAs verwenden, z. B. eines der Altera MAX II-Teile. Sie sind im Gegensatz zu FPGAs in QFP44-Paketen erhältlich. Eigentlich handelt es sich um 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 benötigen im Allgemeinen einen externen Flash-Chip. Es gibt natürlich auch andere CPLDs, aber ich mag den MAX II.

Es ist unmöglich zu sagen, wie hoch der Stromverbrauch sein wird, da er von der Taktrate und der tatsächlich verwendeten Logik abhängt.

FPGAs verfügen normalerweise über eine begrenzte Menge an On-Chip-Speicher, die Sie verwenden können. Sie benötigen jedoch externen Speicher mit einer 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.


2

1) Ja, das FPGA wird teurer. Der Chip selbst ist nicht nur teurer, Sie benötigen auch einen Flash-Speicher, um die Programmierung zu speichern. FPGA + Flash kostet wahrscheinlich das Dreifache nur des dsPIC ... ungefähr 10 US-Dollar für ein kleines FPGA und 3 US-Dollar für ein kleines Flash.

2) Möglicherweise sind sie vorhanden, mir ist jedoch kein FPGA bekannt, das nicht oberflächenmontiert ist. Die meisten von ihnen sind wahrscheinlich QFP oder BGA.

3) Der FPGA wird wahrscheinlich etwa das 3-fache des Stroms verbrauchen, den der dsPIC verbraucht. Dies kann jedoch je nach den von Ihnen verwendeten Funktionen nach oben oder unten gehen. FPGAs haben viele Funktionen, die den Stromverbrauch erhöhen können. Erwarten Sie jedoch mindestens 150 mA.

4) In FPGAs befindet sich normalerweise Block-RAM. Mit Ausnahme der kleinsten FPGAs sollten alle über so viel Speicher verfügen.

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


2

Die billigste Lösung mit der geringsten Lernkurve wäre die Umstellung auf einen leistungsstärkeren Prozessor, wahrscheinlich ARM.

Das Programmieren eines FPGA / CPLD in VHDL / Verilog ist für viele Menschen eine ziemlich steile Lernkurve, die von C ausgeht. Sie sind auch nicht zu billig Teile.

Mit einem anständig fähigen ARM vielleicht einen LPC1769? (cortex-M3) Sie könnten wahrscheinlich auch den PIC18 in Ihrem Design ersetzen.

Wenn Sie den SoC in einem freiliegenden Pin-QFP-Gehäuse erhalten möchten, müssen Sie nur einige dieser Adapter für den für Ihr Prototyping erforderlichen Pin herausgreifen.


Er benutzt ein dsPIC, kein PIC18.
Leon Heller

2
Wenn er beide verwendet, sehen Sie sich die Schaltpläne in der Dokumentation an, die er verlinkt hat. Der PIC18 führt die Tasten / das Interface aus und kommuniziert über I2C mit dem dsPIC. Der dsPIC führt nur die Videoverarbeitung durch.
Mark

1

Meine Neigung wäre, etwas zu verwenden, um das Timing zwischen Prozessor und Display zu puffern. Hardware, die ohne Prozessorintervention einen ganzen Videorahmen darstellen kann, ist vielleicht nett, aber vielleicht übertrieben. 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 die Hardware dieses herausschieben, während sie ein Flag setzt, damit der PIC das nächste laden kann. Bei zwei Schieberegistern hätte der PIC zwischen der Meldung, dass ein Schieberegister verfügbar ist, und der Zeit, zu der alle Daten verschoben werden müssen, 64 us. Mit drei Schieberegistern

Es ist zu beachten, dass ein 1024-Bit-FIFO genauso gut ist wie zwei 1024-Bit-Schieberegister, und in einer CPLD kostet ein FIFO nur eine Makrozelle pro Bit plus eine Steuerlogik, in den meisten anderen Arten von Logik zwei Bits des Schieberegisters wird billiger als ein Bit von FIFO.

Ein alternativer Ansatz wäre, eine CPLD mit einem SRAM zu verbinden und damit ein einfaches Video-Subsystem zu erstellen. In ästhetischer Hinsicht mag ich die schnelle Video-Generation, und wenn jemand nette billige 1024-Bit-Schieberegister-Chips hergestellt hat, würde ich diesen Ansatz bevorzugen, aber die Verwendung eines externen SRAM ist möglicherweise billiger als die Verwendung eines FPGAs mit ausreichenden Ressourcen Erstellen Sie mehrere 1024-Bit-Schieberegister. Für Ihre Ausgabeauflösung ist es erforderlich, Daten mit einer Geschwindigkeit von 12M Pixel / Sekunde oder 3MByte / Sekunde auszutakten. Es sollte möglich sein, Dinge so zu arrangieren, dass Daten mit einer Geschwindigkeit von bis zu 10 MBit / s ohne allzu große Schwierigkeiten durch Verschachtelung von Speicherzyklen eingetaktet werden können. Der größte Trick wäre, Datenkorruption zu verhindern, wenn ein Synchronisationsimpuls nicht genau zum erwarteten Zeitpunkt kommt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.