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:
- 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?
- 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.
- 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?
- 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?
quelle
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.
quelle