Variable Vektorgröße

#5436013
Lesenswert?

Hallo alle zusammen,

ich möchte gerne eine varibale Vektorgröße in VHDL angeben, die ich an 
einer Stelle im Code abändern kann.

Ich habe also folgendes geschrieben:
1
generic(
2
    Teiler: Integer:=399;
3
    Counter_size: Integer := 8;
4
    ST: bit_vector := "1100101010110010"
5
);
6

7
signal Takt_2MHz_zaehler: std_logic_vector(Counter_size-1 downto 0):=conv_std_logic_vector(Teiler,Counter_size);
8

9
signal BiT_ST: std_logic_vector(15 downto 0):= "ST";

Zweite Frage ist dazu noch, warum geht der Lösungsansatz vom bit_vector 
ST nicht?


Ich finde im Netz nur etwas über Subtypen? Ich würde gerne mit 'length 
arbeiten aber irgendwie werde ich nicht darauß schlau. Muss, sollte man 
das anders lösen?

Beste Grüße
#5436093
Lesenswert?

Vicky M. schrieb:
> Zweite Frage ist dazu noch, warum geht der Lösungsansatz vom bit_vector
> ST nicht?

... und was ist die erste Frage? Du solltest dir angewöhnen, Fragen so 
zu stellen, dass die Frage klar erkennbar ist.


Vicky M. schrieb:
> signal Takt_2MHz_zaehler: std_logic_vector(Counter_size-1 downto
> 0):=conv_std_logic_vector(Teiler,Counter_size);

So wie ich es verstanden habe, möchtest Du wissen, ob "man" das mit 
generics so macht, wie Du es beschrieben hast.

Ja, macht man.

Allerdings deutet die Verwendung von conv_std_logic_vector darauf hin, 
dass Du die veralteten Synopsys-Libraries std_logic_unsigned und 
std_logic_arith verwendest. Das solltest Du dir abgewöhnen und 
stattdessen die "offizielle" numeric_std verwenden. Da sähe das dann so 
aus:
1
signal Takt_2MHz_zaehler : std_logic_vector(Counter_size - 1 downto 0) := std_logic_vector(to_unsigned(Teiler, Counter_size));

Das hier:

Vicky M. schrieb:
> signal BiT_ST: std_logic_vector(15 downto 0):= "ST";

geht nicht. Und das ist gut so. Du versuchst hier, einem 
std_logic_vector einen String zuzuweisen. VHDL ist eine streng 
typisierte Sprache und das funktioniert nur, wenn der String 
ausschliesslich die erlaubten Zeichen aus std_ulogic enthält (und das 
tut er bei dir nicht).

Du wolltest wahrscheinlich dem std_logic_vector das Bitmuster des 
bit_vector generics ST zuweisen. Das geht, aber erst nach einer 
Typumwandlung:
1
    signal BiT_ST: std_logic_vector(15 downto 0):= to_stdlogicvector(ST);

Allerdings stellt sich dann die berechtigte Frage, warum Du ST nicht 
gleich als std_logic_vector generic definiert hast?

Vicky M. schrieb:
> Ich würde gerne mit 'length
> arbeiten aber irgendwie werde ich nicht darauß schlau. Muss, sollte man
> das anders lösen?

Wo?

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