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

Gast #297483
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 ?
Gast #297484
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
Gast #297485
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
Gast #297487
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren