使用大型单行文本文件中的整数进行测试

Using integers from a large single line text file for testbench

我有一个包含大量整数的文件,它看起来像:

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代码(算法)来分析这个文件,它存储了这个文件的几个特征。我想为这个算法编写一个测试台,它一次取一个值(整数)作为输入提供给我的算法并移动到下一个值。

在文件的末尾,这个测试平台应该将存储在算法中的输出结果写入一个单独的文本文件。

这里需要注意的是,它是一个由空格分隔的大型单行文件。我尝试了 之类的解决方案,但它们不适合单行文件。

如果你没有内存限制,你可以一次读取整行,然后一次解析一个整数,直到最后一个整数。示例:

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 无济于事,您将不得不使用较低的级别读取程序和自定义文件类型的字符。但是,就个人而言,我可能会使用一些 shell 实用程序来将超长行拆分为较短的行。用 VHDL 编程很有趣,但是当要解决的问题与硬件相距太远时,乐趣就变得不那么重要了。

read(l, int) 过程从 l 行读取下一个整数,以空格分隔。因此,您可以执行单个 readline(f, l) 并多次调用 read(l,int) 直到该行为空。