mikrocontroller.net

Forum: FPGA, VHDL & Co. variables Array und Testbench


Autor: Matthias Krüßelin (kruessi80)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe mal wieder eine knifflige Frage mit umfangreichem Beispiel:
Es geht darum, für eine Testbench eine Datei auszulesen
und die Inhalte in ein variables Array zu übertragen, welche ich später
benötige um die Inhalte Stück für Stück abzuarbeiten.
Hierbei ist im Vorfeld nicht bekannt, wieviele Datensätze
in der Datei gespeichert sind. Wie könnte man sowas realisieren?

Bei folgendem Beispiel scheitere ich daran, dass in
der Testbench eine Größe für das Array angeben werden muss,
welche ich in dem Moment nicht kenne. (siehe unten).

Für Vorschläge wäre ich dankbar.
-- ------------------------------------------------------------------
-- file: frame_util_pkg.vhd
-- ------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

package frame_util_pkg is

   -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
   -- Tx Data, Data_valid and underrun record
   type frame_typ is record
      bad_frame    : boolean;           -- does this frame contain an error?
      framelength  : natural;           -- length of data to send.
      gap          : natural;           -- gap before data will be send.
   end record;
   type frame_typ_ary is array (natural range <>) of frame_typ;
   
end package frame_util_pkg;

-- ------------------------------------------------------------------
-- file: FILE_READ_FRAME_V2_0.vhd
-- ------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use std.textio.all;

library tools;
use tools.frame_util_pkg.all;

entity FILE_READ_FRAME_V2_0 is
   generic (
      read_file         : string;
      );

   port(
      clk          : in  std_logic;
      clken        : in  std_logic;
      rst_n        : in  std_logic;
      frame_data_o : out frame_typ_ary --[frame_util_pkg]
      );
end FILE_READ_FRAME_V2_0;


architecture read_from_file of FILE_READ_FRAME_V2_0 is
   
   file stimulus : text open read_mode is read_file;

begin

   receive_data : process
      variable readLine_v     : line;
      variable myTyp_v        : frame_typ;
   begin

      while not endfile(stimulus) loop
         -- read data and control information from a file
         frame_data_o(INDEX) <= myTyp_v; --INDEX depending on content.
      end loop;

   end process;
end architecture;


-- ------------------------------------------------------------------
-- file: tb_read_frames.vhd
-- ------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

library tools;
use tools.frame_util_pkg.all;

entity TB_READ_FRAMES is
end TB_READ_FRAMES;

architecture test of TB_READ_FRAMES is

   constant C_RX_FRAMES        : natural := 10;
   constant C_TX_FRAMES        : natural := 10;
   ------------------------------------------------------------------------------
   -- component instantiation
   ------------------------------------------------------------------------------
   component FILE_READ_FRAME_V2_0
   generic (
      read_file         : string;
      );

   port(
      clk          : in  std_logic;
      clken        : in  std_logic;
      rst_n        : in  std_logic;
      frame_data_o : out frame_typ_ary --[frame_util_pkg]
      );
   end component;

   signal rst_n          : std_logic;
   signal clk            : std_logic := '0';
   signal data_rx_frames : frame_typ_ary(INDEX downto 0); -- <<--- HIER KRACHTS!

begin
   
   rst_n <= '0', '1' after 10 ns;
   clk <= not clk  after 10 ns;



   ------------------------------------------------------------------------------
   -- component declaration
   ------------------------------------------------------------------------------
   ALL_FRAMES : component FILE_READ_FRAME_V2_0
      generic map(
         read_file => "test.txt"
         )
      port map(
         clk            => clk,
         clken          => '0',
         rst_n          => rst_n,
         frame_data_o   => data_rx_frames
         );


end test;

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.