VHDL Text auf LCD schreiben per Buchstaben in VHDL

Gast #2614123
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...
Moderator (Firma: Titel) Persönliche Seite #2614160
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...
Gast #2614191
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

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