Использование целых чисел из большого однострочного текстового файла для тестового стенда

У меня есть файл с большим количеством целых чисел, он выглядит так:

123 254 360 700 800 900 1000 354 778 897 663 554 888 776 654 655 231 900 777 666 667 776 887 991 555 888 778 666 111 2232 444 545 667 ...  

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

В конце файла этот тестовый стенд должен взять вывод, хранящийся в алгоритме, и записать результат в отдельный текстовый файл.

Предостережение здесь заключается в том, что это большой однострочный файл, разделенный пробелами. Я пробовал такие решения, как Чтение текстового файла в тестовой среде VHDL, но они не подходят для однострочного файла. .


person rooter    schedule 06.09.2018    source источник


Ответы (2)


Если вы не ограничены в памяти, вы можете просто прочитать всю строку сразу, а затем проанализировать ее одно целое число за раз до последнего целого числа. Пример:

use std.textio.all;

entity foo is
end entity foo;

architecture arc of foo is
begin
  process
    variable l: line;
    file f: text is "foo.txt";
    variable i: integer;
    variable good: boolean;
  begin
    readline(f, l); 
    loop
      read(l, i, good);
      exit when not good;
      report integer'image(i);
    end loop;
    wait;
  end process;
end architecture arc;

Если ваш файл больше, чем может позволить ваша доступная память, вам придется разбить readline на более мелкие фрагменты, но здесь std.textio не поможет, и вам придется использовать процедуры чтения более низкого уровня и пользовательский тип символов файла. Но лично я, вероятно, использовал бы некоторые утилиты оболочки, чтобы разделить сверхдлинную строку на более короткие. Программирование на VHDL забавно, но когда проблема, которую нужно решить, слишком далека от аппаратного обеспечения, удовольствие становится менее значительным.

person Renaud Pacalet    schedule 06.09.2018
comment
Доступ к строке чтения, отличной от NULL, представляет собой указатель на отображаемую в памяти часть открытого файла, ограниченную текущей позицией файла (начинается в начале) и концом строки (может быть любая комбинация эффекторов формата, кроме горизонтальной табуляции, реализация определена — textio может быть непереносимым) или конец файла. Любое ограничение размера строки основано на ограничениях на способность ОС хоста выделять непрерывную память и размер указателя хоста (textio основан на POSIX.1, а операции с файлами являются базовыми операциями, которые программно не делятся в VHDL). - person ; 06.09.2018

процедура read(l, int) читает следующее целое число из строки l, разделенное пробелом. Таким образом, вы можете сделать одну строку чтения (f, l) с несколькими вызовами read (l, int), пока строка не станет пустой.

person Tricky    schedule 07.09.2018