Variable Vektorgröße

OP #5436013
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
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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.