2013-10-04 111 views
2

我正在做一个VHDL程序来读取和写入数据。我的程序必须从一行读取数据,处理它,然后将新值保存在旧位置。我的代码有点像:如何从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是访问类型,它会接受整数值吗?

回答

1

使用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); 
+0

但是如何读取第15个或使用指定的行?如何将所需的行号传递给程序??我们不能使用VHDL编辑文件?? – MSD

+0

有几种方法可以将信息获取到正在运行的vhdl'程序',读取STD_INPUT,读取命令文件,某些VHDL工具允许在命令行上设置泛型,然后总是有FOREIGN函数。 VHDL不适合通用编程。 – user1155120

2

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

找到第15行(seek)没有好的方法,但对于VHDL的目的,读取和丢弃前14行是完全合适的。只需将它包装在一个名为“seek”的过程中,然后继续!

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

跟踪当前的行号,现在你可以寻找第15行,无论你身在何处。

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

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

相关问题