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 是访问类型,它会接受整数值吗?

4

2 回答 2

3

罗素的答案——使用两个文件——就是答案。

没有找到第 15 行(查找)的好方法,但出于 VHDL 的目的,读取和丢弃前 14 行就足够了。只需将其包装在名为“seek”的过程中并继续!

如果您已经在第 17 行,则不能向后搜索或倒回到开头。您可以做的是刷新输出文件(保存打开的行,将输入文件的其余部分复制到其中,关闭两个文件并重新打开它们。自然,这需要 VHDL-93 而不是 VHDL-87 文件操作语法)。只需将其包装在一个称为“倒带”的过程中,然后继续!

跟踪当前行号,现在无论您身在何处,都可以查找到第 15 行。

它不漂亮,也不快,但它会工作得很好。这对于 VHDL 的目的来说已经足够了。

换句话说,如果必须的话,你可以用 VHDL 编写文本编辑器,(忽略交互式输入的问题,虽然阅读应该可以)但是有更好的语言来完成这项工作。其中一个甚至看起来很像面向对象的 VHDL ......stdin

于 2013-10-05T12:25:06.140 回答
2

使用 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);
于 2013-10-04T14:58:42.887 回答