VHDL-文件读写

VHDL-文件读写

在使用FPGA进行数字信号的时候经常要用到matlab对FPGA设计运行的结果进行验证,因此就需要在仿真的时候把modelsim运行的结果写入文件,事后可以用matlab分析验证。
VHDL对文件操作包括创建文件,写入,读取。其实在仿真的时候还可以结合modelsim的控制台,更方便的完成仿真。
参考博文,在此感谢:
1、VHDL中的文件I/O
2、VHDL中的文件I/O
VHDL有4中数据对象:
常量:constant
变量:variable
信号:signal
文件:file
其中文件(file)是不能被综合的,且只能声明在进程内,其余三种可以被综合。
变量能被综合,但变量不对应实际的物理线路,它通过对FPGA内部的存储空间的访问实现其功能,因此只能声明在进程内。
常量可以声明在进程内也可以声明在进程外,因为它可以对应实际的物理线路也可以通过FPGA内部的存储器实现。
信号对应实际的物理线路,只能声明在进程外。如果声明在进程内,仿真都过不去,modelsim会提示该信号不能声明在此区域。如下:
process(rst_n_i, clk_i)
file file1:text;
variable file_status:file_open_status;
variable buf:LINE;
– variable cnt_from_file_r:std_logic_vector(7 downto 0):=(others=>’0’);
variable cnt_from_file_r:natural:=0;
variable file_name:string(1 to 11):=”nihaonihaon”;
constant rst_cnt_stop:natural:=5;
signal rst_cnt_stop2:natural:=5;
begin

编译时modelsim提示的错误如下:
Signal declaration ‘rst_cnt_stop2’ not allowed in this region.

1.
1、文件类型有两种,一种是integer,文中的数据是以二进制存取的,不易查看(也可以通过ultraedit来查看)
另一种就是文本类型(text),数据以ASCii码存储,文本类型的数据容易查看。
定义文件:
file romData:text; //定义一个文件

2、文件打开有4中状态:
open_ok:打开成功
status_error:打开失败
name_error:名字错误
mode_error:打开模式失败
用file_open_status类型的数据来表示文件状态,声明方式如下:
variable file_status:file_open_status

3、line类型,是以行的形式写入或读取数据的,还能借助于line来实现把integer,natural,bit_vector等类型的数据写入text类型的文件,下面有介绍。
声明形式:variable buf:line;

文件操作:
打开文件:file_open
写入文件:write,writeline
读取文件:read,readline
关闭文件:file_close
file_open(file_open_status,file_fid,file_name,mode);
file_open_status:文件打开的状态
file_fid:文件句柄(file声明)
file_name:文件名字(string类型,如:”data.txt”)
mode:打开的类型,write_mode和read_mode

write和writeline的区别:
write只能写对应于文件类型的数据,如text类型只能写string,integer类型只能写integer类型数据
如果要写入integer,natural,std_logic,std_logic_vector类型的数据到text类型文件,就只能使用line来操作,
首先write(buf,std_logic_vector),把要写入的std_logic_vector类型数据写入line类型的buf,
然后通过writeline(file,buf)来写入数据.
read和readline的区别与write和writeline一样。

file_close(file_fid);</

  • 6
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值