Hallo, ich bin in Sachen FPAG noch ganz am Anfang und lerne gerade autodidaktisch mit nem Xilinx S3AN StarterKit und folgenden beiden Büchern: VHDL-Snythese Entwurf digitaler Schaltungen und System von Reichardt und Schwarz FPGA Prototyping by VHDL Examples von Pong P. Chu Dazu gleich die erste Frage: Sind das geeignete Lehrmittel zum Einstieg in die Materie? Was ich bisher gelesen habe scheint mir ganz gut verständlich und einige Beispiele konnte ich schon gut nach-bauen. Aber vielleicht gibt es ja noch weitere / bessere Literatur? Im Moment bin ich wie gesagt noch dabei alles von Null auf zu erlernen. Vorerfahrungen habe ich nur mit AVRs gemacht. Wenn ich mit dem Durcharbeiten der Literatur fertig bin habe ich folgendes Projekt ins Auge gefasst und würde gern von euch wissen ob das so realisierbar ist und wie ihr das angehen würdet. Ich erwarte keine fertigen Lösungen, der Lerneffekt ist mir äußerst wichtig! Zum Projekt: Ich habe eine LED-Matrix der Größe 32x16 in RGB. Diese habe ich seinerzeit mit einem (einzigen!) ATMEGA 328 in Betrieb genommen und (meiner Meinung nach) alles aus dem µC rausgeholt was geht. Ich mache damit Multiplexing auf 3x512 LEDs simultan und komme mit den 16MHz Systemtakt auf 216 Farben bei noch hinnehmbarer Wiederholrate. Mehr schafft der AVR einfach nicht. Das Projekt kann man sich hier anschauen: https://sites.google.com/site/arduinodiyprojects/projects/Modular-Plasma-Wall Ich dachte ich mir nun, dass es doch eine gute Herausforderung und ein wahnsinniger Lerneffekt wäre die bereits fertige Matrix mal mit nem FPGA anzusteuern um zu schauen ob es nicht möglich wäre 24bit (8 pro Farbe) Farbtiefe zu realisieren. Schön wäre es natürlich wenn die Farbtiefe in Wirklichkeit bei 12 oder 13 bit pro Farbe läge und ich über den FPGA ne exponentielle Anpassungen hinbekäme um dann auf 256 echte lineare Farbstufen zu kommen. Nun kommt erschwerend hinzu, dass meine Matrix NICHT im klassischen Sinne aufgebaut ist, d.h. ich habe nicht 16 Zeilen mit je 32 LEDs und muxe NICHT 1:16. Vielmehr funktioniert das Ganze so: Die Gesamtkonstruktion besteht aus insgesamt 8 Segmenten mit jeweils 8x8 LEDs. Hinter jedem Segment sitzt ein „Treiberboard“ mit 4 Schieberegistern (1xr; 1xg; 1xb; 1xZeilen). Die Segmente sind in zwei Reihen angeordnet eine obere und eine untere. In den beiden Reihen sind die Schieberegister einer Farbe sowie die Schieberegister für die Zeilen immer in Reihe geschaltet. Ich habe also insgesamt. 8 Datenleitungen die vom µC weggehen. Zur besseren Übersicht habe ich unter oben genanntem Link ein paar Schemata gezeichnet. Wenn ich das Ganze jetzt auf den FPGA portieren möchte werde ich mir natürlich die Tatsache zur Nutze machen, dass so ein Teil mit sehr vielen I/Os daherkommt. Also soll jedes Schieberegister eine extra Datenleitung bekommen. Der ganze Aufbau soll dann also so aussehen: Der FPGA bekommt über SPI Daten vom µC. 512 byte pro Farbe. Nun soll der FPGA die 512 byte in 8 Segmente teilen und für jedes Segment ein multiplexing machen und dann an das entsprechende Schieberegister ausgeben. Ich hoffe das ist einigermaßen anschaulich!? Ich stelle mir nun die Frage ob ich nicht ein Problem mit der Kapazität bekomme? Ich denke ich bekomme es irgendwie hin ein Schieberegister in VHDL zu schreiben welches 512byte aufnimmt. Das bräuchte ich dann aber 3 mal (r,g,b). Also müssten im FPGA rund 1.5kB „zwischengespeichert“ werden. Geht das überhaupt? Jetzt haben also die 3 virtuellen Schieberegister 3*512 byte aufgenommen. Und nun müssen diese auf 8*3=24 „MUX-Bausteine“ aufgeteilt werden die dann parallel laufen. Und zum Schluss hängt an jedem MUX-Baustein noch ne Logig die die Daten bit-weise raus schaufeln muss. Die Ansteuerung der Zeilen habe ich jetzt mal außen vor gelassen, die sollte das Kraut nicht fett machen :-) Bevor ich jetzt zu viel Gehirnschmalz da reinstecke wollte ich euch fragen ob das denn überhaupt irgendwie realisierbar ist und wie ihr das angehen würdet? Sorry für den vielen Text und schon einmal besten Dank für die Antworten! LG, Pepe
Pepe schrieb: > VHDL-Snythese Entwurf digitaler Schaltungen und System von > Reichardt und Schwarz > FPGA Prototyping by VHDL Examples von Pong P. Chu Ja, die beiden sind ganz gut; relativ anschaulich und auch praxistauglich, zumindest für kleine bis mittlere Projekte. Was besseres habe ich (leider) noch nicht gefunden, denn Verbesserungspotential sehe ich bei beiden Büchern. Pepe schrieb: > Bevor ich jetzt zu viel Gehirnschmalz da reinstecke wollte ich euch > fragen ob das denn überhaupt irgendwie realisierbar ist und wie ihr das > angehen würdet? Prinzipiell ist Deine Idee schon für einen FPGA geeignet. Wie Du schon erkannt hast, kannst Du Deine Module damit parallel ansteuern (nicht nacheinander wie beim AVR). Meine Herangehensweise wäre: divide et impera Immer eine kleine Funktionalität ausgiebig testen (Stichwort: Testbench) und zu größeren Modulen kombinieren. Achja, die 3x512 Byte passen auch schon in einen kleineren FPGA. Mit z.B. einem GODIL_XC3S500E [1] solltest Du ganz gut hinkommen. Duke [1] http://www.trenz-electronic.de/de/produkte/fpga-boards/oho-elektronik.html
Hallo Duke,
vielen Dank für die schnelle Antwort!
Da bin ich ja schon mal beruhigt wenn sich das prinzipiell machen lässt!
Ich habe die Hardware übrigens schon da in Form eines Xilninx Spartan
3AN Starter Kits bestückt mit einem XC3S700AN.
>Immer eine kleine Funktionalität ausgiebig testen (Stichwort: Testbench)
und zu größeren Modulen kombinieren.
Genau darin tue ich mich gerade schwer. Ich weiß immer nicht so recht
was als "klein" sinnvoll ist und was nicht! Bsp.: Ich brauche ja
definitiv drei Eingangsregister mit einer Breite von 512 byte. Nun
stelle ich mir die ganze Zeit die Frage ob man das besser als eine
entity macht oder ob man erst mal ein einfaches 8bit-SR schreibt und
dann zu nem großen zusammenstückelt. Ähnlich wird es mir sicher bei den
MUX-Einheiten ergehen. :-/
Ein generelle Frage hätte ich noch: In den Büchern sind zu jeder
Problemstellung und zu jedem Beispiel immer so praktische Flussdiagramme
bzw. später FSM-Diagramme gedruckt. Gibt es dafür spezielle Programme?
Ich möchte mir für meine Aufgabenstellung auch so etwas zeichnen würde
da aber ungern mit PowerPoint oder Paint anfangen!?
Besten Dank,
Pepe
Pepe schrieb: > Spartan > 3AN Starter Kits bestückt mit einem XC3S700AN. Das dürfte völlig ausreichend sein. > erst mal ein einfaches 8bit-SR schreibt und > dann zu nem großen zusammenstückelt Ja, erstmal 8-Bit. Aber nicht zusammenstückeln, sondern die Bitbreite verallgemeinern und dann per generic aufblasen. > Gibt es dafür spezielle Programme? Keine Ahnung. Ich hab für ein paar Geschichten Graphviz [1] verwendet. Das läßt sich auch wunderbar per Skript generieren. Duke [1] http://de.wikipedia.org/wiki/Graphviz
Super! Das war genau das was ich gesucht habe! Noch einmal zu dem Eingangsregister: Du sagst ein allgemeines SR bei dem ich die Breite als generic deklariere. Nun wäre das in meinem Fall 512x8 und ich müßte im Folgenden die Werte für die PWMs aus den einzelnen Bits zusammenbasteln. Wäre es da nicht besser ein einfaches 8bit SR zu nehmen und nach Empfang der 8 Bits das Ganze in eine Art Fifo zu übergeben? In dem werden dann 512 signed Werte abgelegt und er wird dann von den MUX-Einheiten ausgelesen? LG Pepe
Ich überlege grad: muss es denn überhaupt ein FIFO sein? Ein normaler Speicher tut's eigentlich auch!? Pepe
Pepe schrieb: > Ich überlege grad: muss es denn überhaupt ein FIFO sein? Ein normaler > Speicher tut's eigentlich auch!? Ja, am besten als Dualport Memory ausgelegt. Auf einer Seite der Displayrozess um die LEDs anzusteuern, und von der anderen Seite kann er mit neuen Werten beschrieben werden.
Hallo Falk, Deinen Beitrag zur 9x9-Matrix hatte ich mir schon im Vorfeld ausgiebig durchgelesen und auch den Code runtergeladen. Sehr tolles Projekt, Respekt! Um genau zu sein war Dein Projekt sogar der Anstoß für mich den Versuch mit dem FPGA zu starten! Nun ist Dein Projekt schon etwas anders, da Du ja die LEDs (Zeilen und Spalten) direkt ansteuerst und nicht wie ich über SRs. Aber es ist dennoch eine super Grundlage. Den Teil wo Du die DMX Daten einließt werde ich sicher in Teilen übernehmen können um die Kommunikation mit dem µC zu realisieren. Sicher werden mir dabei noch einige Fragen einfallen mit denen ich Dich /Euch zu gegebener Zeit noch nerven werde :-) Besten Dank und LG Pepe
Ich habe mir mal Gedanken gemacht wie ich das Ganze so gut wie möglich "gekapselt" aufbauen könnte. Herausgekommen ist das Bild im Anhang. Könnte mir jemand sagen ob das so funktionieren könnte? Wenn ja würde ich mich Stück für Stück daranmachen die einzelnen Entities zu entwerfen und zu testen! Besten Dank, Pepe
Das Schema ist im Übrigen nur für eine Farbe und ohne Zeilenansteuerung gemacht!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.