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


von Sssssss (Gast)


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 ?

von ope (Gast)


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

von ope (Gast)


Lesenswert?

ifdef/else ist 'türlich quatsch: if/else meinte ich. Eine weitere
Möglichkeit wäre generate:
1
cam1: if CAM_TYPE = CAM_MICRON generate
2
  cam_i: cam_micron PORT MAP( ...) ;
3
end generate;
4
5
cam2: if CAM_TYPE = CAM_FIRMA2 generate
6
  cam_i: cam_firma2 PORT MAP(...);
7
end generate;

Viele Grüße
Olaf

von Sssssss (Gast)


Lesenswert?

Hi!

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

von m.mue (Gast)


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

von Jörn (Gast)


Lesenswert?


von Xenu (Gast)


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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.