Forum: FPGA, VHDL & Co. Variable Vektorgröße


von Vicky M. (vicky_m)


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

: Bearbeitet durch User
von Markus F. (mfro)


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?

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


Lesenswert?

Vicky M. schrieb:
> Muss, sollte man das anders lösen?
Was denn? Ich habe das Problem irgendwie nicht verstanden...

> Ich habe also folgendes geschrieben:
Und was ist das Problem damit?

> warum geht der Lösungsansatz vom bit_vector ST nicht?
Welcher denn?

von Gustl B. (-gb-)


Lesenswert?

constant blafasel: integer :=5;

signal blubba: std_logic_vector(blafasel downto 0):=(others => '0');

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Gustl B. schrieb:
> constant

Konstant? Gefragt war doch:
Beitrag "Variable Vektorgröße"

Wie wäre es mit einem "natural"?

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.