Forum: FPGA, VHDL & Co. while not endfile


von Kasper (Gast)


Lesenswert?

Hallo -

lese eine stimuli datei mit

while not endfile(...)

ein.

Die Datei soll dann nochmals vollständig eingelesen werden.
Allerderdings weiss ich nicht, wie ich die loop variable wieder auf 0 
setzen muss, denn sie wird ja ledglich so aufgerufen:

    while not endfile(testfile) loop
      readline(testfile_2, testfile_l);
      read(testfile_l, testfile_s);
      ADDR <= to_std_logic_vector(testfile_s(32 downto 19));
      DI   <= to_std_logic_vector(testfile_s(18 downto 3));
      RN <= to_std_logic(testfile_s(2));
      STB  <= to_std_logic(testfile_s(1));
      wait until rising_edge(SYSCLK);
    end loop;

Wäre über Hilfe dankbar,
Kasper

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

du mußt testfile einmal schließen und nochmal neu öffnen.

von Kasper (Gast)


Lesenswert?

Hallo Läubi -

Danke für die Antwort!
Und wie mache ich das?

Das file wird ja vor dem stimuli process geöffnet..

Kasper

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ist das oben der vollständige Code?

von Kasper (Gast)


Lesenswert?

nein..

hier ein auszug

entity top_p_tb is
  generic (
    log_file      : string := "res.log";
    test_file_1    : string := "ramfile_1.txt";
    );
end top_p_tb;
architecture behavior of top_p_tb is
  file logfile_top_p : text open write_mode is log_file;
  file testfile_1     : text open read_mode is ram_file_1;
  -- Component Declaration for the Unit Under Test (UUT)
  component top_p
    port(

..
..
..
..

  -- Stimulus process
  stim_proc : process
    variable ramfile_l      : line;
    variable ramfile_s      : string(32 downto 1);

  begin
  --------------------------------------------------------------------
    -- RESET
  --------------------------------------------------------------------
    wait for 100 ns;
    RESETN <= '0';
    wait until rising_edge(SYSCLK);
    RESETN <= '1';
    wait until rising_edge(SYSCLK);
    wait for 100 ns;
    wait until rising_edge(SYSCLK);

    while not endfile(testfile) loop
      readline(testfile_2, testfile_l);
      read(testfile_l, testfile_s);
      ADDR <= to_std_logic_vector(testfile_s(32 downto 19));
      DI   <= to_std_logic_vector(testfile_s(18 downto 3));
      RN <= to_std_logic(testfile_s(2));
      STB  <= to_std_logic(testfile_s(1));
      wait until rising_edge(SYSCLK);
    end loop;

    ..
    ..


    while not endfile(testfile) loop
      readline(testfile_2, testfile_l);
      read(testfile_l, testfile_s);
      ADDR <= to_std_logic_vector(testfile_s(32 downto 19));
      DI   <= to_std_logic_vector(testfile_s(18 downto 3));
      RN <= to_std_logic(testfile_s(2));
      STB  <= to_std_logic(testfile_s(1));
      wait until rising_edge(SYSCLK);
    end loop;
end process compare_datain;
end;

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Da haben wir es doch:
1
file logfile_top_p : text open write_mode is log_file;
2
file testfile_1     : text open read_mode is ram_file_1;
Da öffnest du die Dateien, ggf. mußt mal sehen wie man ne Datei 
schliesst dann solltest du sie neu öffnen können.

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.