Forum: FPGA, VHDL & Co. Text via VGA ausgeben


von Markus R. (markus-red_corner04)


Lesenswert?

Hallo.
Habe ne kurze Frage. Ich habe bereits eine VGA Ansteuerung die mir 
Bilder ausgeben kann. Jetzt will ich auch ganz normalen Text ausgeben 
und da bin ich noch auf der Suche nach ner passenden Lösung.  Was gibts 
es da für Realisierungsmöglichkeiten?

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Mit FPGA? in VHDL ? Bitte etwas genauer. VGA ist auch etwas ungenau, 
640*480 und 16 Farben, Pixelclock/ Bildfrequenz?
Ich habe zum Beispiel vor kurzem als erstes FPGA-Projekt auf einem 
SpartanII  1024*768 in 15Bit, (je 5 RGB) mit 65 MHz Pixelclock 
programmiert, mit Webpack 8.1 und grafischer Eingabe.

von frank (Gast)


Lesenswert?

Du musst folgendes machen (oder Dir solchen quellcode im netz suchen)
- einen RAM anlegen in dem Zeichen abgelegt werden
- eine Look-up-Tabelle, die für jeden Buchstabe das "grafische Aussehen" 
gespeichert hat

-jetzt kannst Du Daten in den RAM schreiben, die angezeigt werden 
sollen.
-nun fortlaufend die daten aus dem RAM auslesen und mittels 
Look-up-Tabelle die Zeichen ausgeben.

Das ist alles andere als schnell und leicht gestrickt. Such mal im Netz 
danach. Es gibt einige (freie) Lösungen dafür.
frank

von Markus R. (markus-red_corner04)


Lesenswert?

Natürlich mit hilfe eines FPGA's. Habe bisher eine VGA Ansteuerung 
640x480 mit 16 Farben. Mein Problem ist ja auch nicht mehr die genaue 
Implementierung sondern, wie ich es am einfachsten schaffe Buchstaben zu 
erzeugen, d.h. aus    Buchstaben mir eben die benötigen Pixelwerte am 
einfachsten zu generieren.

von Markus R. (markus-red_corner04)


Lesenswert?

Danke Frank. So ungefähr habe ich mir das auch schon gedacht. Mein 
Gedanke war eben, vielleicht kennt irgendwer noch ne elegantere Lösung.
Ne passende Internetadresse kannst mir nicht gleich liefern....

von fpgaküchle (Gast)


Lesenswert?

Hm, du suchst also einen zeichengenerator oder besser gesagt eine ROM 
Tabelle mit Pixel für einen zeichensatz?

Ich hab mich dafür aus den Unix C Quellen bedient, genau bei banner.c.
Quellcode hier:
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/banner/banner.c

Die tabelle dort (Obacht sind octalwerte) habe ich mit ein bißchen 
Suchen und ersetzten in einen bitvector ungeformt und damit einen BRAM 
per generic initialisiert:

<VHDL>
CONSTANT C_CHARSET : bit_vector( 0 TO (8*8*48)-1)  :=
  i2bv(34)&   i2bv(42)&  i2bv(101)& i2bv(101)& i2bv(101)& i2bv(42)& 
i2bv(34)&  i2bv(0)&  -- 0 */
  i2bv(10)&   i2bv(30)&  i2bv(50)&  i2bv(10)&  i2bv(10)&  i2bv(10)& 
i2bv(76)&  i2bv(0)&  -- 1 */
  i2bv(76)&   i2bv(101)& i2bv(1)&   i2bv(76)&  i2bv(100)& i2bv(100)& 
i2bv(177)& i2bv(0)&  -- 2 */
</VHDL>
wobei:
<VHDL>
FUNCTION i2bv (CONSTANT OP : integer) RETURN bit_vector IS
    VARIABLE tmp1,tmp2 : integer;
  BEGIN
    --convert octal to integer
    tmp1 := (op / 100) * 64;
    tmp2 := op - ((op / 100) * 100);
    tmp1 := tmp1 + ((tmp2 / 10) * 8);
    tmp2 := tmp2 - ((tmp2 / 10) * 10);
    tmp1 := tmp1 + tmp2;

    RETURN to_bitvector((std_logic_vector(to_unsigned(tmp1, 8))));
  END FUNCTION i2bv;

</VHDL>


Als fingerübung kann man das ganze eleganter schreiben. den Komplettcode
gibts nicht (Lohnarbeit).

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Soll der Text als Pixel-Zeichen innerhalb eines sowieso bestehenden 
Grafikspeichers stehen, oder liegt er in einem Textspeicherbereich als 
ASCII vor? FPGAs haben nicht so reichlich RAM, da wäre letzteres 
vermutlich sparsamer.

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.