简述
在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 =
end
if( read_num == PACKAGE_NUM-1 )
begin
//en_i <= 1’b0;
//
r =
#10;
if( weight_compare == weight )
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读取二进制数据的具体过程,读取文本文件会在以后总结。