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