我有一个包含大量整数的文件,它看起来像:
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代码(算法)来分析该文件,该文件存储了该文件的几个特征。我想为此算法编写一个测试台,一次将一个值(整数)作为输入提供给我的算法,然后移至下一个值。
在文件末尾,该测试平台应采用存储在算法中的输出,并将结果写入单独的文本文件中。
这里的警告是它是一个大的单行文件,用空格分隔。我尝试了Read textfile in VHDL testbench之类的解决方案,但不适用于单行文件。
答案 0 :(得分:1)
如果您不受内存限制,则可以一次读取整行,然后一次解析一个整数,直到最后一个整数。示例:
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编程很有趣,但是当要解决的问题离硬件太远时,乐趣就变得不那么重要了。
答案 1 :(得分:0)
read(l,int)过程从行l读取下一个整数,由空格分隔。因此,您可以通过多次调用read(l,int)来执行单个readline(f,l),直到该行为空。