Forum: FPGA, VHDL & Co. Je nach Projekt verschiedene Zweige synthetisien


von Michi (Gast)


Lesenswert?

Ich habe ein VHDL-Modul geschrieben, das ich in verschiedenen Projekten 
einsetzen möchte. Je nach Projekt gibt es aber oft 2 oder 3 kleine 
Abweichungen innerhalb des Codes.

Ich habe versucht dies über eine Konstante einzustellen, die ich vom 
Toplevel an die instanzierten Module übergebe. Dabei kann ich gewisse 
Abfragen im Code mit einbinden oder nicht bzw. zwischen zwei 
verschiedenen Zweigen entscheiden, je nach dem welcher in diesem Projekt 
synthetisiert werden soll.

Innerhalb des VHDL-Moduls geht dies bei der Logik sehr gut. In einem 
Projekt werden in diesem Modul zwei Signale nicht unterstützt, d.h. es 
gibt sie überhaupt nicht. Nachfolgend eine kurze Darstellung was ich 
meine -> Beispielcode für so ein Modul.

ENTITY module_abc IS
  GENERIC (constant Projekt_Type : std_logic_vector(2 downto 0));
  PORT (
    rst_i  : in std_logic;
    clk  : in std_logic;
--    CLK18M  : in std_logic;
--    sig_x  : in std_logic;
    sig_a  : in std_logic_vector(7 downto 0);
    sig_b  : in std_logic_vector(7 downto 0);
    sig_c  : in std_logic_vector(7 downto 0);
    sig_erg  : out std_logic_vector(7 downto 0);
...


Nun würde ich gerne auf das Auskommentieren dieser beiden Signale 
verzichten und ähnlich wie in "C" ein #if (Projekt_Type ="010") 
einführen. Gibt es so etwas für bedingtes Synthetisieren auch in VHDL?

Falls ja wiegeht das?

Falls nein gibt es gute Vorschläge so etwas umzusetzen, damit das Modul 
wirklich unverändert in allen Projekten eingesetzt werden kann?

Freue mich auf Eure Rückmeldungen :-)

von fpgaküchle (Gast)


Lesenswert?

Mit reinen VHDL Mitteln geht dergleichen (IMHO) nicht. Allerdings hast 
du mit den Hinweis auf C schon den richtigen Riecher. Die # anweisungen 
gehören allerdings nicht zu C sondern zum C-Preprozessor. Du könntest 
also deinen VHDL Code mit Preprozessor direktiven anreichern, diesen 
Code durch den preprozessor (gcc sollte einen haben) jagen und den 
resultierenden "reinen" Code wie üblich in Simulation/synthese 
verwenden.
Dazu macht sich ein makefile basierender designflow recht gut.

von Michi (Gast)


Lesenswert?

Hallo fpgaküchle (Gast),
herzlichen Dank für Deine Rückmeldung, aber das scheint mir vom Handling 
her recht aufwändig und es passt nicht so richtig in den Ablauf mit 
hinein. Ist doch aber komisch, dass VHDL so etwas "scheinbar" nicht 
bietet...

von Rainer (Gast)


Lesenswert?

Ist vielleicht das "if...generate" eine Option?
Bei einer Entity Ports weglassen ist schwierig. Eventuell auf '0' oder 
'1' legen eher machbar.

von J. S. (engineer) Benutzerseite


Lesenswert?

Viel einfacher: Du must Dein Modul einfach als "Vereinigungsmenge" aller 
Signale aufsetzen und die Funktionen allesamt realisieren. In den 
Top-Moduln, in denen die abgespeckten Versionen benötigt werden, legst 
Du bei den Instaziierungen die Eingänge auf "0" und verdrahtest die 
Ausgänge mit "open", sodaß diese Signale nicht verdrahtet werden. Die 
Synthese packt dann alles weg. Wenn das nicht geht, weil die Top-Moduln 
nicht angetastet werden dürfen, musst Du 3 Zwsichenmodule schreiben, die 
dies o.g. tun, wobie sie nach "innen" allesamt gleich aussehen und an 
das allgemein formulierte Modul andocken und nach Aussen die 
Schnittstelle zeigen, die benötigt wird. So kannst Du diese drei 
"Adapter" alle konkret benennen und den Projekten auch ausdrücklich 
zuordnen und gleichzeitig sowohl Top-Module und das allgemeine Submodul 
unabhängig pflegen. Die letzte Vorgehensweise ist zwar scheinbar 
unständlich, erfüllt aber leichter die Randbedingungen eines dynamischen 
SoftwareConfigurationManagements.

von Michi (Gast)


Lesenswert?

Danke Jürgen für die ausführliche Hilfe mit gleich mehreren 
Lösungsmöglichkeiten, werde diese in den kommenden Tagen testen :-)

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.