во время тестирования чего-то я написал тестовый файл 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, я думаю. Но я хочу проверить, является ли это особым символом «#». Как я могу это сделать?
Вы пытались объявить 'c' как' string' и использовать двойные кавычки в сравнении 'c ==" # "'. – sharvil111
ой, это решило. Благодаря! Я попробовал «string c», но не изменил его на «#». :) (вы можете захотеть повторно опубликовать свой комментарий в качестве ответа, тогда я могу отметить его как ответ). –