2016-07-24 2 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 
... 

код чтения файла как ниже (На самом деле, я должен прочитать много файлов, но ниже простой код, чтобы проверить некоторые аспекты.). (я использую систему 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)]. 

компилятор считает, что «с» представляет собой целое число, и должны иметь базовый показатель, как 0x или 0o, я думаю. Но я хочу проверить, является ли это особым символом «#». Как я могу это сделать?

+2

Вы пытались объявить 'c' как' string' и использовать двойные кавычки в сравнении 'c ==" # "'. – sharvil111

+2

ой, это решило. Благодаря! Я попробовал «string c», но не изменил его на «#». :) (вы можете захотеть повторно опубликовать свой комментарий в качестве ответа, тогда я могу отметить его как ответ). –

ответ

1

Объявление переменной c как string. Поскольку вы используете $fgetc(file);, который получает символ. Общий синтаксис для сравнения строк - это двойные кавычки, такие как c== "#".

Смежные вопросы