File io 如何在verilog中读取文件中的特殊字符?

File io 如何在verilog中读取文件中的特殊字符?,file-io,verilog,system-verilog,File Io,Verilog,System Verilog,我编写了一个测试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

我编写了一个测试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(文件)获取一个字符。字符串比较的常用语法是使用双引号,如
c==“#”