我是靠谱客的博主 包容机器猫,最近开发中收集的这篇文章主要介绍verilog中读写文件操作简述,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简述

在verilog设计验证中,我们经常需要从文件中读取验证数据,有些数据是文本文件,有些数据是二进制文件。但是verilog读写文件的操作和软件语言还是有不同的,下面就具体总结一下verilog中的读写文件的操作。

读写二进制文件

不管是读写二进制文件还是读写文件文件,都要把读取到的数据放入到硬件设计中某个寄存器或者存储器中,这是verilog和软件语言读写文件最大的不同。
其实verilog读写文件的过程和普通的软件语言大同小异,都分为下面几步:

  • 打开文件

  • 重定位文件(可选)

  • 文件读写操作

  • 关闭文件

下面是一个具体的读文件的实例:

initial
begin
always @( negedge rstn_i or posedge clk_i )
begin
if ( rstn_i == 1’b0 )
begin
data_i <= {DW{1’b0}};
file_id = fopen(../2test/2data/paramdatabend.bin,r);readnum=0;exchangenum=0;endelseif(eni==1b1)beginif(readnum!=PACKAGENUM)beginreadnum<=readnum+1;endelsebeginreadnum<=1;exchangenum<=exchangenum+1;endr= fread( data_i, file_id );
end
if( read_num == PACKAGE_NUM-1 )
begin
//en_i <= 1’b0;
// fclose(fileid);//fileid= fopen( “../2-test/2-data/param_data_bend.bin”,”r” );
r = fseek(fileid,exchangenumMATRIXLENFW/8,SEEKSET);r= fread( weight_compare, file_id );
#10;
if( weight_compare == weight )
display(weightdatacheck33[31mpassed33[0m.);else display( “weight data check 33[31mfailed33[0m.” );
end

在上面的程序中,我们是打开了一个二进制文件param_data_bend.bin,然后进行读取操作$fread(data_i, file_id ),注意这个fread的参数顺序和网上说的都不一样,就这一点耽误了我很长时间,第一个应该是变量,第二个是文件句柄。由于在上面的程序中,数据不是一次性读完,所以我们又有一个重定位的操作$fseek(file_id,exchange_num*MATRIX_LEN*FW/8,SEEK_SET),这里也是有一点必须要注意,就是fseek函数必须有返回值,狗则vcs一直编译不通过,对于这个我也是非常费解,为何还会有这样奇葩的规定。
上面就是关于verilog读取二进制数据的具体过程,读取文本文件会在以后总结。

最后

以上就是包容机器猫为你收集整理的verilog中读写文件操作简述的全部内容,希望文章能够帮你解决verilog中读写文件操作简述所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部