mikrocontroller.net

Forum: FPGA, VHDL & Co. gibt es etwas wie #define/#ifdef in vhdl ?


Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Gibt es etwas wie #define/#ifdef in vhdl ?

Ich habe mir nämlich zwei Komponenten geschrieben die unterschiedliche
Kameras ansteuern.
Die ports sind bei beiden identisch.

Jetzt möchte ich etwas wie
#define CAM_TYPE CAM_MICRON

#if CAM_TYPE = CAM_MICRON
 cam : cam_micron PORT MAP( ...) ;
#else
 cam : cam_firma2 PORT MAP(...);
#endif

machen.
Also per "define" entscheiden welche vhdl komponente eingebunden
wird.
Der Code für die andere soll keinerlei beachtung finden.

(Ich arbeite mit Xilinx WebPack auf einem Spartan3)

Oder gibt es eine andere geschickte möglichkeit wie ich per
"configfile"
sachen sagen kann wie kamera = xy ?

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leider nein, auch wenn es viele gerne hätten. In VHDL musst Du mit
Konstanten arbeiten und dann ifdef/else das gewünschte
"herausarbeiten". Der Compiler zur Synthese schmeisst alles
überflüssige dann raus.

Viele Grüße
Olaf

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ifdef/else ist 'türlich quatsch: if/else meinte ich. Eine weitere
Möglichkeit wäre generate:
cam1: if CAM_TYPE = CAM_MICRON generate
  cam_i: cam_micron PORT MAP( ...) ;
end generate;

cam2: if CAM_TYPE = CAM_FIRMA2 generate
  cam_i: cam_firma2 PORT MAP(...);
end generate;

Viele Grüße
Olaf

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Das mit dem generate gefällt mir sehr gut :D
Vielen Dank!
Erspart mir jedes mal 20 zeilen auszukommentieren und einzukomentieren
g

Autor: m.mue (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine weitere Möglichkeit ist die "configuration". So kann man
verschiedene architectures zu einer entity programmieren und diese dann
auswählen.

configuration <Name der configuration> of <Name aufrufende entity> is
 for <Name aufrufende architecture>
  for all: <Name aufgerufene component>
   use entity work.<Name aufgerufene component>(<architecture der
component>);
  end for;
 end for;
end configuration <Name der configuration>;

Das ganze muss dann im aufrunfenden VHDL-File stehen, und zwar HINTER
der architecture. ich hoffe es ist nicht zu verwirrend beschrieben.

VG m.mue

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gibt es etwas wie #define/#ifdef in vhdl ?

Du kannst auch einen C-Präprozessor für so etwas benutzen.

Z.B. den GNU Cpp (mit -P aufrufen)

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.