如何在VHDL中从文本文件的特定行读取数据

3

我正在使用VHDL编写一个读写数据的程序。我的程序需要从一条线路上读取数据,对其进行处理,然后将新值保存在原来的位置上。我的代码大致如下:

WRITE_FILE: process (CLK)
variable VEC_LINE : line;
file VEC_FILE : text is out "results";
 begin

if CLK='0' then
write (VEC_LINE, OUT_DATA);
writeline (VEC_FILE, VEC_LINE);
end if;
end process WRITE_FILE;

如果我想读取第15行,我该如何指定?然后我想清除第15行并在那里写入新数据。 LINE是访问类型,它会接受整数值吗?

2个回答

3
罗素的答案-使用两个文件-就是答案。
没有很好的方法来查找第15行(搜索),但是对于VHDL的目的,读取和丢弃前14行就足够了。只需将其包装在一个名为“seek”的过程中,然后继续进行!
如果您已经在第17行,则无法向后搜索或倒回到开头。您可以执行清除输出文件的操作(保存打开的行,将其余的输入文件复制到其中,关闭两个文件并重新打开它们)。当然,这需要VHDL-93而不是VHDL-87语法进行文件操作。只需将其包装在一个名为“rewind”的过程中,然后继续进行即可!
跟踪当前行号,现在您可以在任何位置寻找第15行。
这不美观也不快,但完全可以正常工作。而且这对于VHDL的用途来说足够好了。
换句话说,如果必须使用VHDL编写文本编辑器(尽管忽略交互式输入的问题,但读取stdin应该可以工作),但有更好的语言适合这项工作。其中一种看起来非常像面向对象的VHDL...

2

使用两个文件,一个是输入文件,另一个是输出文件。

file_open(vectors, "stimulus/input_vectors.txt", read_mode);
file_open(results, "stimulus/output_results.txt", write_mode);

while not endfile(vectors) loop
   readline(vectors, iline);
   read(iline, a_in);
   etc for all your input data...

   write(oline, <output data>
end loop;

file_close(vectors);
file_close(results);

但是如何读取第15行或指定使用的行?如何将所需的行号传递给程序?我们不能使用VHDL编辑文件吗? - MSD
有几种方法可以向正在运行的VHDL“程序”获取信息,包括读取STD_INPUT、读取命令文件,一些VHDL工具允许在命令行上设置泛型参数,还有FOREIGN函数可供使用。但是,VHDL并不适合用于通用编程。 - user1155120

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接