我正在用 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 是访问类型,它会接受整数值吗?
最佳答案
罗素的答案 - 使用两个文件 - 就是答案。
没有找到第 15 行(搜索)的好方法,但对于 VHDL 的目的,读取和丢弃前 14 行是完全足够的。只需将其包装在名为“seek”的过程中并继续!
如果您已经在第 17 行,则无法向后寻找或倒退到开头。您可以做的是刷新输出文件(保存打开的行,将输入文件的其余部分复制到其中,关闭两个文件并重新打开它们。自然,这需要 VHDL-93 而不是 VHDL-87 语法进行文件操作)。只需将其包装在称为“倒带”的过程中,然后继续!
跟踪当前行号,现在您可以在任何地方寻找第 15 行。
它不漂亮,也不快,但它会工作得很好。这对于 VHDL 的目的来说已经足够了。
换句话说,如果必须,您可以在 VHDL 中编写文本编辑器(忽略交互式输入的问题,尽管阅读 stdin
应该可以)但是有更好的语言来完成这项工作。其中之一甚至看起来很像面向对象的 VHDL ......
关于file - 如何从 VHDL 中的文本文件中读取特定行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19184087/