www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Schachbrettmuster mit VHDL


Autor: Roland Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an alle VHDL-Experten:

ich bin auf der Suche nach einem VHDL-Algorithmus, mit dem ich ein
Schachbrettmuster auf einem Display ausgeben kann.

Im Prinzip soll das so aussehen, dass ich einen x-Position-Zähler und
einen y-Position-Zähler habe mit deren Hilfe ich das Schachbrettmuster
erzeugen möchte.

Kann mir jmd. dabei helfen.

Achso es geht wirklich nur um den Schachbrett-Algorithmus mittel der
x/y-Zähler, das Timing für das Display ist OK.

Grüße aus der Pfalz

 Roland Müller

Autor: Roland Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, es ist ja nicht so, dass ich es nicht probiert hätte. Nein, ich
bin fast verzweifelt. Es klingt irgendwie einfach, aber ich bekomme es
einfach nicht hin.

meine Probleme waren u.a., dass das Xilinx ISE Divisionen durch eine
ungerade Zahl nicht zulässt (OK, digital usw. kann ich ja vielleicht
noch verstehen) und das nur ein bestimmte Anzahl an loops zugelassen
werden, ohne zu meckern. Ich weiss auch nicht....HILFE !!!!!

Ich hoffe Ihr habt ein paar brauchbare Ansätze oder sogar besser noch
ein paar gute Lösungsvorschläge....

Also dann.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich konnte auch nichts im ISE finden. Evtl musst du einen
Multiplizierer instantiieren und ihn nutzen. Einen Dividierer habe ich
nicht kostenlos gefunden. Falls du einen Spartan3 nutzt:
http://www.xilinx.com/bvdocs/appnotes/xapp467.pdf

Es würde sicher helfen, wenn du dein Projekt anhängst...

Grüße
Christian

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Problem scheint die Skalierung zu sein, oder ?
Wie wäre es mit einer guten alten binären Division?
Steht in jedem Digitalbuch beschrieben.

Ich würde auf eine Ganzahl dividieren und von dort aus Zähler
hochlaufen lassen. Das ergibt zwar einen Bruch am Rand, bringt jedoch
äuquidistante Linien. X und Y sind dann Vielfach des Zählers. Für die
Darstellung einfach das LSB von X und Y über EXOR verknüpfen.

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jungs, schom mal Danke für Eure Beiträge, aber hängt euch bitte
nicht zu sehr an meinem Divisionproblem auf (war nur so eien Idee von
mir)

Hat einer von Euch ein konkretes Beispiel für eine solche Realisierung
?

Danke

Roland

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du schon einen horizontal und einen vertikal Zähler hast, und der
ist ja normalerweise Binär, dann nimm doch einfach z.B. Bit7 direkt für
die Farbe her ... 128 Punkte weiß, 128 Punkte schwarz und so weiter ...
In der Vertikelen kannst du auch Bit7 verwenden und die Farbe vom
horizontalen Schachbrettmuster dann XORen - so müsstest du ein schönes
Schachbrettmuster kriegen.

Mfg
Thomas Pototschnig

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Thomas....

ich habe diesen Ansatz mit dem XOR schon einmal gehört. Allerdings steh
ich etwas auf dem Schlauch und versteh das nicht ganz.
OK, wie das erste Quadrat zu stande kommt versteh ich schon noch. Aber
bei den nächsten ist mir der Algorithmus nicht ganz klar, wenn ich
lediglich Bit7 xor verknüpfe...

Vielleicht kann mir einer kurz auf die Sprünge helfen...Danke

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ... ich nenne jetzt einfach mal den horizontalctr hctr und den
vertikalctr vctr. Die Ausgangsfarbe nenne ich col. Dann müsste das hier
reichen:

col <= hctr(7) XOR vctr(7);

Das ist alles.
und zwar nehm einfach mal an, du bist in Zeile 0, und somit vctr(7) =
'0'. Dann kriegst du mit hctr(7) ein Signal das alle 128 Pixel von 0
nach 1 wechselt und umgekehrt. Soweit noch klar?
Jetzt kommst du in Zeile 128 und vctr(7) wird gesetzt. Das Bit wird
dann mit hctr(7) XOR verknüpft. Das hier ist die Wahrheitstabelle:
a --- b = q
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

wenn du genau schaust, fällt dir bestimmt gleich auf, dass bei der
Zeile 3 und 4 das Ergebnis des XOR genau andersrum ist wie in Zeile 1
und 2, sobald a gesetzt ist. Das ist der Trick dabei.
Dadurch ergibt sich dann ab Zeile 128-255 das invertierte Muster von
Zeile 0-127.

Ich hoffe das war verständlich.

Mfg
Thomas Pototschnig

Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, das habe ich verstanden. Danke.

Allerdings habe ich jetzt noch folgendes Problem. Meine beiden Zähler
sind vom Typ integer. Wenn ich jetzt die Operation
col <= hctr(7) XOR vctr(7) durchführen will, meckert ISE "Wrong index
type". Noch eine Idee ????

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da gibt's ein Haufen Umwandlungsfunktionen ...

Aber mit denen hab ich auch immer so meine Probleme ... die Frage
sollte jemand beantworten, der genau weiß wie es geht :-)

Mfg
Thomas Pototschnig

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
constant HOR_WIDTH : positive := 8; -- Counter Bitbreite
constant VER_WIDTH : positive := 8; -- Counter Bitbreite

signal hctr : integer range 0 to 2**HOR_WIDTH-1;
signal vctr : integer range 0 to 2**VER_WIDTH-1;

...

col <= conv_std_logic_vector(hctr, HOR_WIDTH)(7) xor
       conv_std_logic_vector(vctr, VER_WIDTH)(7);

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.