Forum: FPGA, VHDL & Co. Existenz einer Datei prüfen, dann "generate"


von gnihihihi (Gast)


Lesenswert?

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 :)

von Duke Scarring (Gast)


Lesenswert?

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

von gnihihihi (Gast)


Lesenswert?

danke, ich tüftel mal! :)

von gnihihihi (Gast)


Lesenswert?

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? :(

von Anguel S. (anguel)


Lesenswert?

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

von gnihihihi (Gast)


Lesenswert?

schon gut, habs gelöst.. streicht meinen letzten post, wer lesen kann 
ist ganz klar im vorteil.

danke duke :)

von gnihihihi (Gast)


Lesenswert?

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;

von Duke Scarring (Gast)


Lesenswert?

gnihihihi schrieb:
> so falls die lösung wen interessiert..
Danke für die Rückmeldung. So hatte ich mir das vorgestellt!

Duke

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.