www.mikrocontroller.net

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


Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: fpgaküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rainer (Gast)
Datum:

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

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michi (Gast)
Datum:

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

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.