mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Vicky M. (vicky_m)
Datum:

Bewertung
0 lesenswert
nicht 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:

generic(
    Teiler: Integer:=399;
    Counter_size: Integer := 8;
    ST: bit_vector := "1100101010110010"
);

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

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
Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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:
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:
    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
Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Gustl B. (-gb-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
constant blafasel: integer :=5;

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

Autor: Weltbester FPGA-Pongo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gustl B. schrieb:
> constant

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

Wie wäre es mit einem "natural"?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.