www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Konstanten global definieren


Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

in meinem FPGA PRojekt arbeite ich mit verschiedenen Adresszugriffen und 
vergleichen und möchte hierfür bei Zuweisungen und Vergleichen (z.B. if) 
nicht immer die BIT Kombination angeben, sondern lieber mit konstanten 
Werten arbeiten. Damit ich diese in den verschiedenen Komponenten meines 
Projektes nicht jedesmal neu definieren muß, würd ich gern eine Art 
Header Datei einbinden. Bei der suche bin ich über die Möglichkeit 
gestolpert, ein PAckage zu erstellen. Hier hab ich mal ein Package 
eingestellt, wie ich es mir vorstelle:
library ieee;

use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

package Memory_Map is

   constant address0  : std_logic := "000000000";
   constant address1  : std_logic := "000000001";
   constant address2  : std_logic := "000010000";


end Memory_Map;

package body Memory_Mapis

end package body Memory_Map;

in den einzelnen Komponenten binde ich dieses Package dann mit
library work;
use work.glob_pkg.all;

nun meine Fragen dazu:
Ist das ein üblicher weg, sich Konstanten zu definieren?
wie speicher ich die Packagedatei ab, bzw welche Dateiendung bekommt 
sie? Ich hab einfach mal versucht, sie als .vhd zu speichern, was auch 
funktioniert hat. Oder gibt es für Packages 'ne eigene Endung?
Gibt es irgendwelche Probleme, auf die ich mit dieser Vorgehensweise 
stoßen kann?

Viele Grüße,
Martin

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist das ein üblicher weg, sich Konstanten zu definieren?

Wenn die Konstanten von mehreren Modulen verwendet werden soll, dann ja.

> wie speicher ich die Packagedatei ab, bzw welche Dateiendung bekommt
>sie? Ich hab einfach mal versucht, sie als .vhd zu speichern, was auch
>funktioniert hat. Oder gibt es für Packages 'ne eigene Endung?

Ein Package ist eine ganz normale VHDL-Datei und wird mit .vhd 
gespeichert.


Ansonsten: benutze nicht die std_logic_arith. Diese ist kein Standard 
und sollte nicht für neue Designs verwendet werden.

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für die schnelle Antwort! Da bin ich ja nicht ganz auf dem 
falschen Weg gewesen.

Die std_logic_arith nutz ich eigentlich auch nicht, das ist nur ein copy 
Paste fehler aus dem Beitrag, indem ich infos zu Packages gefunden habe 
(ist wohl schon etwas älter)

Eingebunden sind bei mir standardmäßig ieee.std_logic_1164.all und 
ieee.std_logic_unsigned.all

Autor: Eman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ansonsten: benutze nicht die std_logic_arith. Diese ist kein Standard
>und sollte nicht für neue Designs verwendet werden.

Hm, die ist bei mir immer standardmäßig drin, wie ich gerade sehe, und 
es lief immer alles.

Warum sollte sie nicht verwendet werden?
Welche sollte stattdessen verwendet werden?
Für welche Operationen/Befehle ist arith denn zuständig?

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
std_logic_arith und std_logic_(un)signed sind proprietär und gehören 
nicht zum IEEE Standard 1164. Statt dessen sollte man das Package 
numeric_std verwenden.
Doch leider findet man die std_logic_arith und die std_logic_(un)signed 
noch viel zu häufig.

Vergleiche auch den Artikel Rechnen in VHDL.

Autor: Eman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Artikel steht leider nichts zu arith. Wo "tut es weh", wenn man arith 
verwendet? Standard oder nicht ist ja dem FPGA scheinbar egal?! ;)

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dem FPGA ja, dem Synthesetool aber nicht immer. Generell sollte man bei 
neueren Designs nur noch die IEEE Standard Packages verwenden. Die 
SynopsysLibs waren nur dazu da, die Zeit bis zum erscheinen der IEEELibs 
zu überbrücken.

Autor: Eman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum setzt die Xilinx ISE sie dann _standard_mäßig ein? ;)

Autor: einanderergast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil Änderungen im EDA Bereich noch nie sonderlich schnell Einzug 
gehalten haben. In der Mentor Toolchain ist es glaube ich sogar schon 
abgeändert. Xilinx wird es irgendwann auch einführen. In der neueren 
Literatur werden die Synopsis Pakete auch schon nichtmehr verwendet

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@martin:

Um Dein Beispiel  nochmal aufzugreifen, ich würde es so machen:
library ieee;

use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

package Memory_Map is

   constant width : positive := 9;
   
   type address_t is std_logic_vector(width-1 downto 0);

   constant address0 : address_t := std_logic_vector(to_unsigned(0, width));
   constant address1 : address_t := std_logic_vector(to_unsigned(1, width));
   constant address2 : address_t := std_logic_vector(to_unsigned(16, width));


end Memory_Map;

package body Memory_Mapis

end package body Memory_Map;


Da lässt sich dann schnell Mal die Breite erweitern. Ich gebe allerdings 
zu, daß man ein unansehnliches Monster hinschreiben muss.

Rick

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dem FPGA ja, dem Synthesetool aber nicht immer.

Hast du ein konkretes Beispiel? Ich höre immer wieder dass sich das 
Synthesetool daran aufhängen kann, aber noch nie hat einer mal ein 
Beispiel gebracht. Gibt es speziell beim XST irgendwelche bekannten 
Probleme?

Autor: Start-ING (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rick Dangerus,

Vielen Dank für Deinen hinweis, aber in meinem Falle ist die Anzahl der 
Adressleitungen definitiv als Konstant anzunehmen, bedingt durch die 
Verdratung zur CPU.
Aber trotzdem ein schöner Impuls, den ich als relativer VHDL Laie gern 
für andere Verwendungen aufgenommen habe.

Viele Grüße,
MArtin

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.