2016-07-24 10 views
0

何かをテストしているうちに、ファイルからデータを読み取ってテストVerilogファイルを作成しました。このファイルには、「###」で始まるヘッダー行と、8つの浮動小数点数を含む繰り返し行がすべてテキスト形式で含まれています。以下のように..Verilogのファイルから特殊文字を読み取る方法は?

### 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 
... 

ファイルを読み込むコードは(実際に、私は多くのファイルを読み取ることがありますが、以下のいくつかの側面をテストする簡単なコードです。)以下のようなものです。

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 

(私はシステムのverilogを使用しています)私はそれをコンパイルするとき、私はこのエラーを取得:

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のような塩基指示薬を持つべきであると考えます私はそう思います。しかし、それが特殊文字 '#'であるかどうかをテストしたい。これどうやってするの?

+2

'c'を' string'と宣言し、 'c =="# "'の比較で二重引用符を使用しようとしましたか? – sharvil111

+2

ああ、それはそれを解決しました。ありがとう!私は 'string c'を試みたが、それを "#"に変更しなかった。 :)(あなたは答えとしてあなたのコメントを再投稿し、答えとしてマークすることができます)。 –

答えて

1

cstringと宣言してください。あなたが文字を取得する$fgetc(file);を使用しているので。文字列比較の一般的な構文は、二重引用符(c== "#"など)を使用しています。

関連する問題