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
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.
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
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.
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
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
@ 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
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
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 ????
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
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);
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.