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?
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.
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
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.
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....
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.