打印

VHDL语言文件中IO

[复制链接]
1326|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wmsk|  楼主 | 2012-10-8 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在编写testbench时,我们会用到一些VHDL语言,这些语言是我们不常用的,甚至以前没有见过的,但是在testbench中他们却是被经常用到,而且对我们的仿真编写非常有用。今天我们就来简单讲一下常用的几个VHDL句法。
一、文件I/O
上节讲了,在testbench常将数据写入文件,或者从文件读入数据等,这都需要用到VHDL语言中与文件打交道的语言,即是常说的file I/O. 这里强调两点:文件I/O语言是不能被综合的,文件I/O与FPGA的I/Opin是两回事。
根据存在文件中数据的不同,文件有多种类型,存入的数据可以是integer ,string,std_logic_vector 等等,但是定义时有区别,后面会说到。
对文件的操作有,定义文件,打开文件,从文件中读取数据,写入数据到文件等。
一、定义文件。
文件有两个大的类型,integer:文件中的数据是以二进制存取的,不能被人识别,只有integer型的数据能够存入这类文件。string:文件是以可以读取的ASCII码,可以被人识别,integer ,bit_vector(x downto x),string(x downto 1),std_logic_vector(x downto 0) ,bit等都可以被存入此类文件。
定义语法 file filein:text; type integerfile is file of integer file filein:integerfile;
二、打开文件。
86版的
VHDL在定义文件时即将文件隐式的打开了,这里我们讲93版的文件打开语句。
在上一步定义了文件句柄后就可以在程序中打开指定文件,同时指定打开模式。
file_open(fstatus,file file_handle:file_type, filename:string,openmode)
fstatus指示当前文件状态,但是在使用前首先得定义一名variable fstatus:FILE_OPEN_STATUS;,一般有OPEN_OK,STATUS_ERROR,NAME_ERROR,MODE_ERROR四种状态。
file_handle即是上一步定义的文件类型的句柄filein.
filename是以双隐号括起的文件名,如"datain.txt";
openmode是指打开该文件的模式,文件打开有read_mode,write_mode,append_mode三种。

相关帖子

沙发
wmsk|  楼主 | 2012-10-8 22:03 | 只看该作者
三、读写文件。
在上一步以什么模式打开,该步就可以对文件进行操作了,当上一步打开文件后,就可以用read(file_handle,value:type) write(file_handle,value:type)向文件读写数据了,但是这里特别注意,如果直接使用这两个语句,你只能向文件中写入指定类型的数据,如integer类型的只能写入integer型数据,text型只能写入string的数据,而不是像第二步说的那么多类型,要想写入其他类型必须遵守以下操作步骤!
(1)定义line型变量 variable buf:line,(2)将需要写入的数据写入line变量 write(buf,value)(这里的value就可以多种值),(3)从line变量把数据写入文件 writeline(file_handle,buf)。一定要按前后顺序来操作。
四、文件关闭。
  在文件读写完毕后记得关闭文件file_close(file_handle),当然在文件操作中还有一个函数在反映是否读取到文件末尾ENDFILE(file_handle) 如果到达文件末尾将返回真(ture)否则返回假(false);
笔记:这里还要补充两种特殊的文件,input,output,也可以是“STD_INPUT","STD_OUTPUT"其实他们都是代表modelsim中的控制台,input和”STD_INPUT"就是从控制台输入数据,output "STD_OUTPUT"就是输出数据到控制台。后面两种格式要做为文件打开,前面一种可以直接作为文件句柄操作。如 file_open(fstatus,file_out,"STD_OUTPUT",write_mode); readline(output,buf);

同时有两个比较有用的写入语句 write(file_out,string''("hello")) write(file_out,bit_vector''(110"));

我们做了一个最完全的例子,将以上所有的操作包括进去,写了一个testbench,附录到下一节,同时将输出信息与被操作文件信息附录到图片,欢迎在下一节中获取源代码。

声明:以上操作均是基于VHDL1993版本!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

411

帖子

1

粉丝