Forum: FPGA, VHDL & Co. Viele Schieberegister + viele Counter => FPGA?


von Michael B. (mibom)


Lesenswert?

Hallo,

ich habe ein Riesenproblem mit einer Schaltung, die ich mir ausgedacht
habe und gerne irgendwie, evtl mit FPGA, realisieren möchte. Vom
Prinzip her ist die Schaltung absolut trivial aber beim Aufbau mit TTL
etc. würde ich auf einige tausend (das ist nicht übertrieben!) ICs
kommen - von den Kosten mal abgesehen praktisch nicht machbar.

Kurze Schaltungsbeschreibung:

Es handelt sich um eine Videoanwendung. Von einem DVI-Receiver IC
werden zur Verfügung gestellt: der Pixeltakt (ca. 100MHz), 24 bit
Pixelinformation (3 * je 8 bit R, G, B), HSync. Zusätzlich existiert
noch ein aus HSync generierter Countertakt.

Mit diesen Signalen soll eine RGB LED-Zeile so angesteuert werden, dass
jeweils eine Videozeile für das menschliche Auge korrekt dargestellt
wird. Sinnvollerweise wird die LED nicht in Abhängigkeit des
Helligkeitswertes gedimmt sondern unter Berücksichtigung der Trägheit
des menschlichen Auges entsprechend getaktet so dass die Helligkeit
korrekt wahrgenommen wird. Nachdem die Zeilenfrequenz sowieso weit über
dem liegt was der Mensch wahrnehmen kann ist es ausreichend, die LED pro
dargestellter Zeile mit einem dem Helligkeitswert entsprechenden
Tastverhältnis einmal ein- und auszuschalten.

In konventioneller Technik würde das wohl so aussehen, dass getriggert
durch den Pixeltakt in 24 parallele Schieberegister der Farbwert
eingelesen wird. Ist die Zeile beendet bzw die Schieberegister komplett
gefüllt werden durch HSync getriggert die (jeweils 8 bitigen) R, G und B
Werte des einzelnen Pixels in jeweils einen 8bit-Counter geladen der mit
dem Countertakt heruntergezählt wird. Ein 0-Komparator wertet jeden
Counter aus. Solange Counter >0 wird die LED angesteuert.

Soweit die Darstellung des Schaltungsprinzips. Mir ist klar, dass man
soetwas mit vernünftigem Aufwand nur mit programmierbarer Logik
realisieren kann, ebenso ist mir klar dass bei z.B. 640 darzustellenden
Pixeln je drei LED pro Zeile ein FPGA nicht ausreicht und das Ganze
modular und kaskadierbar ausgeführt werden muss.

Mein Problem ist nun, dass ich (zu meiner Schande) vor ca. 15 Jahren
aus der Digitaltechnik ausgestiegen bin und ich bis auf das
Grundprinzip keine Ahnung von FPGAs und deren Programmierung habe.

1. Frage: Lässt sich oben beschriebenes Problem mit FPGAs sinnvoll
lösen? Man beachte den Pixeltakt von 100MHz.

2. Frage: Ich kann falls FPGAs das Mittel der Wahl sind absolut nicht
abschätzen welche der vielen Serien und Typen (Anzahl der Gatter,
Cells, etc.) für die Anwendung am geeignetsten sind. Keine Ahnung wie
die Komplexität der Schaltung zu bewerten ist. Kann mir bitte jemand
einen Hinweis dazu geben? Ich möchte mich wegen der Kosten nach
Möglichkeit gleich mit einem anwendungsgeeigneten FPGA-Typ in die
Materie einarbeiten. Vor Vorteil sind natürlich auch ein
kostengünstiges Entwicklungskit bzw Software.

Eine ungewöhnliche Anwendung, viele dumme Fragen. Ich bin für jeden
Hinweis dankbar.

Ciao
MiBom

von Thomas (Gast)


Lesenswert?

Es wird sicherlich ein FPGA geben, daß das kann ohne Probleme.
Abschätzen aus der entsprechenden "Schaltungsidee" und dann pro
Flip-Flop mal ein Logikelement einrechnen. Das passt mal in etwa. Zum
Testen such dir eine FPGA Software, die im Netz verfügbar ist (Webpack
von Xilinx o.ä.) und relalisiere das damit. Dann kannst du das ganze
Testen und nen Baustein auswählen ohne auch nur einen Pin verlötet zu
haben.
Und wissen, was du tust, musst du über kurz oder lang ja eh...
Ganz trivial ist das sicherlich nicht, aber es kann ja auch Spaß
machen...:o)))

Gruß Thomas

von Michael Werner (Gast)


Lesenswert?

Hallo.
was sind das für DVI-Bausteine?

von Michael B. (mibom)


Lesenswert?

DVI Receiver ist ein SIL 163B oder ein Typ mit vergleichbarer
Funktionalität. Da gibt es jede Menge.

Ciao
Mike

von Lothar Miller (Gast)


Lesenswert?

Tja, das geht in Richtung Grundlagen:

Offensichtlich geht es hier um ordinäre VGA-Signale (640x480??).
Hier haben wir einen Pixeltakt von ziemlich genau 25MHz (100MHz??)

Wenn also der LVDS-Receiver SIL163B die Daten nach parallel gewandelt
hat, haben wir 3x8 Bit + Sync-Signale. Da macht es Sinn, diese Daten
erst mal in ein RAM abzulegen.

Wenn die dann mal da im RAM sind (vieleicht mit 2 Speicherseiten, in
eine wird geschrieben, die andere wird angezeigt), werden sie zum
geeigneten Zeitpunkt wieder ausgelesen und auf der LED ausgegeben.

Dieses Panel wird übrigens schon durch die Abmessungen recht
beeindruckend werden: beim Einsatz von kleinen SMD-LEDs mit 2mm Breite
wird das Ding dann immerhin schon knapp 4 Meter breit.
Richtig: sowas muß modular sein.
Da brauchts zur Ausgabe der Daten an die LEDs dann schon ein Bussystem.


Summa summarum sind das dann 640 x 480 x 3Farben = fast 1 Million LEDs.


Aber Achtung: auch FPGAs (und die passenden
Konfigurationsspeicher)kosten Geld.

Viel Erfolg wünscht
Lothar

von PeterL (Gast)


Lesenswert?

evtl auch zu bedenken
1 Led angenommen mit 0,004W x 1000000Leds = 4kWatt !

Peter

von Michael B. (mibom)


Lesenswert?

Halt! :-) Jetzt geht die Diskussion in die falsche Richtung.

Es geht hier nicht um die Ansteuerung einer Matrix, sondern lediglich
um EINE EINZELNE ZEILE. Auf dieser Zeile soll NACHEINANDER jede Zeile
des Videobildes dargestellt werden, genau so wie es die Videodaten
vorgeben.

Zu den angepeilten 100MHz für das Schaltungsdesign. Bei 640 Pixeln ist
der Pixeltakt natürlich geringer, die Bauteile sollen kaskadierbar und
auch für längere Zeilen bis 1280 Pixeln ausgelegt sein.

Ciao
Mike

von Michael B. (mibom)


Lesenswert?

Zur Erinnerung nochmal meine Fragen, nicht dass das in der Diskussion
untergeht :-)

1. Sind FPGAs grundsätzlich für so eine Schaltung geeignet oder sollte
man andere Bauteile verwenden?

2. Ist das mit den 100MHz ein Problem?

3. Kann mir jemand einen geeigneten Typ empfehlen?

Ciao
Mike

von Sven Johannes (Gast)


Lesenswert?

Moin...

Verdammich... sowas habe ich doch schon mal gesehen/gelesen/gehört. Nur
wo? Naja Egal.

Das Problem das ich da sehe ist nicht der Pixeltakt. Die 100MHz
schlucken die modernen FPGA schon. Nur wie schnell möchstest du die
Ausgabe den abhandeln? Wenn du die Register zwischen zwei Zeilen wieder
leer haben willst, wird das etwas hurtig oder das Timing läßt diese
Pause zu. Evtl. die Struktur doppeln: eine Registerbank wird
beschrieben, die andere taktet ihre PWM raus.

Bei der Auflösung die ein Chip abarbeiten kann ist wohl nur die Anzahl

der Pins entscheidend, interne FF sollten genügend da sein.

--
 Sven Johannes

von Michael B. (mibom)


Lesenswert?

@Sven:

Wüsste nicht warum ich das Schieberegister leeren müsste. Die alten
Daten werden bei der nächsten Zeile mit den neuen Daten
herausgeschoben. Glaube nicht, dass ich hier einen Denkfehler habe.

Ciao
Mike

von Michael B. (mibom)


Lesenswert?

@Sven:

Sorry, hätte vor der Antwort besser nachdenken sollen. :-)

Ich bin bisher davon ausgegangen, dass ich die Pixeldaten in EIN 640
bit langes und 24bit breites Schieberegister lade. Nachdem dort die
komplette Zeile geladen ist werden in der HSync Pause aus den 24bit
eines jeden Pixels die 8bit Daten der Subpixel in einen 0-Counter
geladen, der Counter auf 0 heruntergezählt und permanent auf einem
eigenen Pin für jeden Counter ausgegeben ob Counter > 0.

Dein alternativer Vorschlag ist, das Laden des Schieberegisterinhalts
in eigene Counter dadurch wegzurationalisieren dass es ZWEI 640bit
lange und 24bit breite Schieberegister gibt die abwechselnd mit den
Informationen aufeinanderfolgende Zeilen geladen werden. In der
Ladezeit des jeweils anderen nennen wir es mal Zeilenregisters wird der
Inhalt eines jeden 24bit nennen wir es mal Pixelregisters in 8
Unterregister zerlegt und an Ort und Stelle heruntergezählt.

Gute Idee, ich muss mal drüber nachdenken wo die Vor- und Nachteile der
beiden Alternativen liegen. Danke!

Ciao
Mike

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.