Text via VGA ausgeben

OP #436316
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?
Gast #436328
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.
Gast #436375
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
Gast #436497
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).
Gast #436512
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren