我编写了一个测试Verilog文件,该文件从文件中读取了一些数据。该文件有一些标题行,以###
重复的行开头和包含8个浮点数的重复行,全部为文本格式,如下所示...
### kr = 0 ##
279.430 243.666 246.522 234.073 218.708 211.012 212.915 222.156
227.269 225.331 212.973 203.453 203.286 219.196 236.336 236.591
236.760 240.655 234.219 226.415 222.691 225.924 229.316 223.291
223.373 229.256 229.021 221.693 208.506 208.094 217.843 232.213
...
-0.000 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000
-0.000 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000 2.624
### kr = 1 ##
192.269 28.298 0.356 -0.000 -0.000 -0.000 -0.000 -0.000
-0.000 -0.000 -0.000 -0.000 -0.000 -0.000 9.506 -0.000
-0.000 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000
-0.000 2.147 2.839 1.402 0.004 16.810 37.424 47.157
...
读取文件的代码如下。(实际上,我必须阅读许多文件,但是下面是测试某些方面的简单代码。)我正在使用系统Verilog。
integer file;
integer c;
initial begin
fname = $sformatf("ext1/L02_Convolution_B0_FN%03d.txt",3);
$dislay("fname = %s", fname);
file = $fopen(fname, "r");
c = $fgetc(file);
while (c != `EOF)
begin
if (c == '#')
r = $fgets(line, `MAX_LINE_LENGTH, file);
else
begin
r = $ungetc(c, file);
r = $fscanf(file, "%f %f %f %f %f %f %f %f", v0, v1, v2, v3, v4, v5, v6, v7);
$display("%f %f %f %f %f %f %f %f \n",v0, v1, v2, v3, v4, v5, v6, v7);
c = $fgetc(file);
end
end
end
r = $fclose(file);
end
编译时,出现以下错误:
ncvlog -SV tb_conv.v
ncvlog: 12.20-s008: (c) Copyright 1995-2013 Cadence Design Systems, Inc.
if (c == '#')
|
ncvlog: *E,BADBSE (tb_conv.v,47|12): illegal base specification: (#) [2.5][2.5.1(IEEE)].
我猜编译器认为'c'是一个整数,应该有一个像0x或0o这样的基本指示符。但是,我想测试它是否是特殊字符“#”。我怎样才能做到这一点?
将变量声明c
为string
。由于您使用的是$fgetc(file);
哪个字符。字符串比较的常见语法是使用双引号,例如c== "#"
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句