www.mikrocontroller.net

Forum: FPGA, VHDL & Co. GENERIC: lieber natural oder std_logic_vector(log2(range)-1 downto 0)


Autor: Dave Webb (davewebb8211)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich schreibe gerade einige Module, die ich generisch halten und mit 
GENERIC parametrisieren möchte.
Mein Frage bezieht sich darauf, ob ich Signale mit veränderlichem 
Wertebereich lieber als
* Natural oder als
* std_logic_vector machen soll und sich um die Länge des Vektors von 
Hand mit log2 o.Ä. selbst kümmern soll.

Bei Natural kann man den Wertebereich ja genau angeben. Aber irgendwann 
ergibt es sich dann doch, dass ich es in ein std_logic_vector umwandeln 
muss, weil ich z.B. ein RAM ansteuern muss (und die 
herstellerspezifischen Komponenten nunmal std_logic_vector erwarten).

Ist es also sinnvoll
* ein Signal als natural zu implementieren und eine Umwandlung auf ein 
std_logic_vector(log2(range)-1 downto 0) ganz spät zu machen, oder 
direkt von Anfang an
* einen std_logic_vector(width-1 downto 0) zu nehmen und jeweils width 
per generic map weiter zu geben.

Auch wenn es keinen Königsweg gibt würde ich mich über eine 
Stilempfehlung freuen.

Danke und schöene Grüße

Dave

--

Also: hier mal als Beispiel:
entity e is
  generic (
    chars_max  : natural
  )
  port (
    char : IN natural range 0 to chars_max
  )
end e;

dann im ARCHITECTURE aber etwas umgewandle im Stil von
variable char_i : integer;
char_i <= char;
address_i <= std_logic_vector(to_unsigned(char_i, address_i'length));

ODER
entity e is
  generic  (
    chars_width : natural  
  )
  port (
    char : IN STD_LOGIC_VECTOR (chars_width-1 DOWNTO 0)
  );
end e;

E_INST: e
  generic map (
    chars_max   => ld2(chars_max-1)
  )
  port map (
    char     => char
  );


Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hängt u.a. von Deinem Umfeld und Deiner "Fachrichtung" ab. 
Hardwerker werden die Bitbreite bevorzugen und Softwerker den 
Wertebereich. Wenn Du mit anderen zusammenarbeitest oder fremde IP 
verwenden willst, bist Du mit std_logic_vector auf der sicheren Seite.

Ich verwende gerne unsigned/signed aus numeric_std. Damit braucht man 
nur einen cast zu std_logic_vector oder zu integer/natural und man kann 
damit rechen.
Der Nachteil: es gibt Probleme, wenn Ports zusammengeschaltet werden 
sollen und die andere IP unsigned aus ieee.std_logic_unsigned (sollte 
besser synopsys_logic_unsigned heißen) verwendet.

Rick

Autor: Dave Webb (davewebb8211)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Rick fuer Deine Meinung.
Gut zu hoeren, dass es keine all zu grossen Fallstricke zu geben 
scheint.

Ich werde mal innerhalb meiner Module bei natural bleiben, da die 
Beschreibung damit `strenger' und genauer definiert wird. Das gefaellt 
mir besser, auch wenn's akademischer ist.
Schnittstellen nach aussen werde ich dann evtl. std_logic_vector machen, 
damit andere den Kram leichter zusammentackern koennen.

Danke und schoene Gruesse

Dave

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.