如何在SystemVerilog中阅读CSV文件时跳过第一行?

w1jd8yoj  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(49)

我尝试在SystemVerilog中读取CSV文件并解析它们,并将值分配给关联数组。我想在阅读CSV文件时跳过第一行。我使用以下任务将文件读入SystemVerilog:

while (!$feof(file)) begin
    $fscanf(file, "%s\n", line);

    for (i = 0; i < line.len(); i++) begin
        if (line[i] == ",") begin
        break;
        end
    end

    if (i != line.len()) begin
        register_name = line.substr(0, i-1);
        exp_value = line.substr(i + 1, line.len() - 1);
    end else begin
        $display("Error: The line format is not readable. Line: %s. Please check it", line);
    end

    if (exp_value.len() > 0) begin
        $sscanf(exp_value, "%h", value);
    end else begin
        $display("Error: Value is not able to be read. Line: %s, Value: %h. Please check it", line, exp_value);
    end

    Temp_Arr.name = register_name;
    Temp_Arr.value = value;

    RegData[register_name] = Temp_Arr;
        
end

字符串
我还尝试在while循环之前使用$fscanf行,希望它能跳过第一行,但它不起作用。
输入文件的内容如下所示:

Register Name,Expected Value
Reg_1,0abd4
Reg_2,4eec3
...


我想在解析文件时跳过标题行。请建议如何解决此问题。

ifmq2ha2

ifmq2ha21#

因为你不需要像对下面的行那样格式化标题行,所以在while循环之前使用$fgets而不是$fscanf

$fgets(line, file);
while (!$feof(file)) begin

字符串
参考IEEE标准1800-2017,21.3.4.2 * 一次阅读一行 * 部分:
可以使用$fgets从文件中读取一行。
关于您的问题:
我还尝试在while循环之前使用$fscanf行,希望它能跳过第一行
它不起作用,因为格式字符串("%s\n")与标题行不匹配。

相关问题