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 :-)
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.
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...
Ist vielleicht das "if...generate" eine Option? Bei einer Entity Ports weglassen ist schwierig. Eventuell auf '0' oder '1' legen eher machbar.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.