VHDL Чтение текста из файлов, сохранение и сравнение их для создания тестового стенда - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть текстовый файл, представляющий значения АЦП в целочисленном формате из схемы, которая выглядит следующим образом:

0000
0001
0005
3864
2290
1234
.
.
.
0002
0004
0006
4532
3457
.
.
.

первые 3 целых числа всегда представляют заголовок, а последующие 256 целочисленных значений состоят из одного блока,Я написал VHDL-код (алгоритм) для анализа этого файла, который хранит несколько характеристик этого файла.Я также написал тестовый стенд, который читает файл и отправляет каждое значение в одной строке в код анализатора.В настоящее время значения отправляются одно за другим в компонент анализатора, как описано в моем коде тестового стенда здесь.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_textio.all;
use std.textio.all;



entity HFA_tb is
end HFA_tb;

architecture behave of HFA_tb is

--clock 100 MHz change to any value suitable
constant c_CLOCK_PERIOD : time:= 100 ns;
signal r_CLOCK      : std_logic  := '0';
--**signal r_ENABLE     : std_logic  := '0';
signal r_adcpulse   : integer; 
signal r_hitstart   : integer;   ---output of single threshold
signal r_hitend     : integer;
signal r_hitpeak    : integer;
signal r_peaktime   : integer;
signal r_hitsum     : integer;
signal r_opready    : std_logic := '0';





--more signal

--describe HFA component here (Unit Under Test)

component HFA is
 port (
   adcpulse_i     : in integer;
   clk          : in std_logic;
   hitstart_o   : out integer;   ---output of single threshold
   hitend_o     : out integer;
   hitpeak_o    : out integer;
   peaktime_o   : out integer;
   hitsum_o     : out integer;
   opready_o    : out std_logic

   );
 end component HFA;

begin

  --Instatiate the unit under test
  UUT : HFA
  port map (
    clk         => r_CLOCK,
    adcpulse_i    => r_adcpulse,
    hitstart_o  => r_hitstart,
    hitend_o    => r_hitend,
    hitpeak_o   => r_hitpeak,
    peaktime_o  => r_peaktime,
    hitsum_o    => r_hitsum,
    opready_o   => r_opready
  );

 p_CLK_GEN : process is
  begin
   wait for c_CLOCK_PERIOD/2;
   r_CLOCK <= not r_CLOCK;
 end process p_CLK_GEN;


  --main testing logic for reading from text file; feed in the loop and     check output

  process
   file in_buffer       :   text;
   file out_buffer      :   text;
   variable v_ILINE     :   line;
   variable v_OLINE     :   line;
   variable v_adcValue  :   integer;

  begin

    file_open(in_buffer,"test.txt",read_mode);

    file_open(out_buffer,"results.txt",write_mode);


    while not endfile(in_buffer) loop
      readline(in_buffer, v_ILINE);
      read(v_ILINE, v_adcValue);

      r_adcpulse <= v_adcValue;

      wait for c_CLOCK_PERIOD;

  end loop;

   if endfile(in_buffer) then

     write(v_OLINE, string'("hit_start_time"));
     writeline(out_buffer, v_OLINE);

     write(v_OLINE, r_hitstart);
     writeline(out_buffer, v_OLINE);

   end if;

  wait for c_CLOCK_PERIOD;

    file_close(in_buffer);

    file_close(out_buffer);

   wait;

  end process;  


 end behave; 

Как вы можете видеть из моего примера, текущий тестовый стенд способен читать только одну строку за раз иотправив его на анализатор.То, что я хочу сделать, это удалить заголовок (первые 3 целых числа), сохранить его и снова присоединить к текстовому файлу, когда он завершит обработку одного блока из 256 целых чисел?любые подсказки будут очень полезны в этом направлении.Мой подход основан на компараторах слов данных, описание слов данных

...