无论如何使用std textio在vhdl中多次读取文件?

时间:2015-08-28 08:52:36

标签: vhdl

我试图理解如果我打开一个文件,读取文件,测试文件结束,关闭文件然后重新打开该文件然后再次开始阅读它将如何从vhdl中读取文件是如何工作的文件的开头?

非常感谢

2 个答案:

答案 0 :(得分:1)

请查看VHDL语言的权限以获得答案。

IEEE Std 1076-2008

  

5.5文件类型
  5.5.1概述

     

文件类型定义定义文件类型。文件类型用于定义表示主机系统环境中的文件的对象。文件对象的值是主机系统文件中包含的值序列。

     

5.5.2文件操作

     

FILE_OPEN过程打开由External_Name参数指定的外部文件,并将其与文件对象F关联。如果对FILE_OPEN的调用成功(请参阅下文),则说文件对象是打开的,文件对象具有访问模式取决于提供给Open_Kind参数的值(见16.3)。

     
    

- 如果提供给Open_Kind参数的值是READ_MODE,则文件对象的访问模式是只读的。此外,初始化文件对象,以便后续READ将返回外部文件中的第一个值。将按文件对象在外部文件中显示的顺序读取值。

  
     

...
  如果文件对象F与外部文件关联,则过程FILE_CLOSE终止对与F关联的外部文件的访问,并关闭外部文件。如果F未与外部文件关联,则FILE_CLOSE无效。在任何一种情况下,在调用将文件对象与形式参数F相关联的FILE_CLOSE后,文件对象不再打开。
   ...
  Procedure READ从文件中检索下一个值;如果文件对象的访问模式是只写的,或者文件对象未打开,则会出错。过程WRITE将值附加到文件。过程FLUSH请求实现完成对文件的所有先前调用WRITE过程的影响。对于WRITE和FLUSH过程,如果文件对象的访问模式是只读的或文件未打开,则会出错。如果对访问模式为只读的打开文件对象的后续READ操作可以从文件中检索另一个值,则函数ENDFILE返回FALSE;否则,它返回TRUE。对于访问模式为只写的打开文件对象,函数ENDFILE始终返回TRUE。如果在未打开的文件对象上调用ENDFILE,则会出错。

进一步阅读将显示文件访问是独占的,如果没有FILE_CLOSE,则无法执行另一个FILE_OPEN。你可以通过在没有前面的FILE_CLOSE的情况下找到后续的FILE_OPEN来证明这一点,它将返回一个STATUS_ERROR。

所以FILE_OPEN从头开始访问。重置到文件开头的唯一方法是FILE_CLOSE,然后是FILE_OPEN。

答案 1 :(得分:0)

只是为了完整性 - 这取决于您是否使用VHDL-87(现在不太可能)或93+。没有seek / rewind / etc操作,但是在打开文件时会重置文件指针。如果您想要seek,或多次读取文件,则需要每次关闭/打开。对于VHDL-87,在详细说明文件声明时(在正常详细说明期间,如果在体系结构或进程中声明文件,或者在过程中声明执行过程时),将打开文件。因此,在' 87中,您多次调用您的程序多次读取该文件。

' 93介绍了file_open / file_close。如果你想进行大量的文件处理,你应该通过模拟器的VHPI在C / C ++中完成。