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