Hi Leute, mein aktuelles Problem liegt in einer bedingten Instanziierung eines Components. Es soll zunächst geprüft werden ob eine bestimmte Datei im Arbeitsverzeichnis verfügbar ist und nur dann eine Instanz gebildet werden.. hat einer ne Idee? Ist Verifikationskram, also keine Synthesefähigkeit vorausgesetzt! Quasi sowas: check_0: if "<Datei vorhanden>" generate inst_0 : entity work.component_name (architecture_name) generic map ( ); end generate; Danke für eure Hilfe :)
gnihihihi schrieb: > bestimmte > Datei im Arbeitsverzeichnis verfügbar ist Du könntest versuchen, die Datei zu öffnen. Dabei gibt es verschiedene Fehlercodes (aus [1]):
1 | type FILE_OPEN_STATUS is (OPEN_OK, STATUS_ERROR, NAME_ERROR, MODE_ERROR); |
Die prüfst Du einfach. Dann noch eine hübsche Funktion drumrumgestickt und fertig ist die Laube... Duke [1] http://www.cs.umbc.edu/portal/help/VHDL/standard.vhdl
ich arbeite mit vhdl-ams.. da ist die file_open prozedur mit den status typen (name_error, status_error) nicht vorhanden.. gibts noch alternative ideen? :(
Kannst Du evtl. eine externe EXE vor der Synthese aufrufen? Dann könntest Du dir ein kleines C Programm schreiben, dass eine Konstante in einem VHDL Package auf true setzt, falls die Datei vorhanden ist. Dann das Package in deine VHDL einbinden und dort die Konstante abfragen. Grüße, Anguel
schon gut, habs gelöst.. streicht meinen letzten post, wer lesen kann ist ganz klar im vorteil. danke duke :)
so falls die lösung wen interessiert.. zunächst ne impure function (wieder was gelernt, hab "impure" nie gesehen vorher :)) mit rückgabewert definieren.. diese vor der instanziierung ausführen und nur bei geeigneten rückgabewert den generate ausführen.. instanz wird ergo nur gebildet wenn die passende datei im verzeichnis vorhanden ist. :) architecture bla impure function check_file (path_g: IN string) return std_logic is file volt_limits: text; variable open_status : file_open_status; begin file_open(open_status, volt_limits, path_g, READ_MODE); if open_status = open_ok then return '1'; else return '0'; end if; end function check_file; begin peak_00: if check_file("limits/vrefyyy.txt") = '1' generate begin peak_0 : entity work.peak_spy (min_max) generic map ( path_g => string'("limits/vrefyyy.txt"), name => string'("vrefyyy")) port map (); end generate; peak_01 : if check_file("limits/vrefxxx.txt") = '1' generate begin peak_1 : entity work.peak_spy (min_max) generic map ( path_g => string'("limits/vrefxxx.txt"), name => string'("vrefxxx")) port map (); end architecture;
gnihihihi schrieb: > so falls die lösung wen interessiert.. Danke für die Rückmeldung. So hatte ich mir das vorgestellt! Duke
gnihihihi schrieb: > so falls die lösung wen interessiert.. Prima. Schön, dass es funktioniert. Andererseits wäre es vielleicht etwas übersichtlicher, die Instanzen immer zu erzeugen und ggf inaktiv zu lassen, falls die Datei sich nicht zum Lesen öffnen lässt. Es ist ja nicht so, dass eine inaktive Instanz unglaublich viele Resourcen verschlingen würde. Gruß Marcus
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.