Forum: FPGA, VHDL & Co. VHDL Text auf LCD schreiben per Buchstaben in VHDL


von Thomas (Gast)


Lesenswert?

Hallo, ist es irgendwie möglich Text auf ein STD_LOGIC_VECTOR zu 
schreiben, also so ca:

...
type line_ram is array(159 downto 0) of std_logic_vector(7 downto 0);
...

line_ram<="Hello World...";
...

man müsste vorher irgendwie definieren, dass z.B.
A=x"41";
B=x"42"; ...

geht sowas irgendwie...
weil immer alles per Zahlen zu schreiben ist sehr unübersichtlich...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> line_ram<="Hello World...";
Nein, sooooo einfach geht das nicht.

Da müssen einige Umwandlungen mitspielen:
Erst muß ein einzelnes Zeichen aus dem String herausgeholt werden, dann 
muss die Postition dieses Zeichens innerhalb des Datentypen "Character" 
bestimmt werden, und dann muß diese Zahl noch über einen unsigned Vektor 
in einen std_logic_vector umgewandelt werden. Das passiert z.B. im 
Beitrag "Re: String als Konstante definieren"

Du könntest das z.B. in einem eigenen Package in eine Funktion packen 
und damit die Umwandlung vornehmen...


BTW:
> man müsste vorher irgendwie definieren, dass z.B.
> A=x"41";
> B=x"42";
Sieh dir mal an, wie ein String definiert ist, und wie ein Character 
definiert ist, dann wird dir klar, dass diese Arbeit schon getan ist...

von Duke Scarring (Gast)


Lesenswert?

Ja. Ich nutze das um die Versionsnummer in einem kleinen ROM zu 
speichern:
1
    constant version : string( 1 to 5) := "undef"
2
3
4
    -- convert ascii from given string to slv
5
    function to_slv( s : string; pos : natural) return std_logic_vector is
6
        variable result : std_logic_vector(7 downto 0);
7
    begin
8
        result := (others => '0');
9
        if pos < s'length then
10
            result := std_logic_vector( to_unsigned( character'pos( s( pos + 1)), 8));
11
        end if;
12
        return result;
13
    end function to_slv;
14
15
16
    type version_memory_t is array(0 to 7) of std_logic_vector(7 downto 0);
17
    constant version_memory_c : version_memory_t := (
18
        0 => to_slv( 0),
19
        1 => to_slv( 1),
20
        2 => to_slv( 2),
21
        3 => to_slv( 3),
22
        4 => to_slv( 4),
23
        5 => to_slv( 5),
24
        6 => to_slv( 6),
25
        7 => to_slv( 7));

Duke

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.