首页 文章

如何从verilog中的文件中读取特殊字符?

提问于
浏览
0

在测试某些东西时,我写了一个测试verilog文件,从文件中读取一些数据 . 该文件有一些以'###'开头的 Headers 行和包含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我猜 . 但我想测试它是否是一个特殊字符'#' . 我怎样才能做到这一点?

1 回答

  • 1

    将变量 c 声明为 string . 因为你正在使用 $fgetc(file); 获得一个角色 . 字符串比较的常用语法是使用双引号,如 c== "#" .

相关问题