У меня есть текстовый файл, представляющий значения АЦП в целочисленном формате из схемы, которая выглядит следующим образом:
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 целых чисел?любые подсказки будут очень полезны в этом направлении.Мой подход основан на компараторах слов данных, описание слов данных