我尝试在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
...
型
我想在解析文件时跳过标题行。请建议如何解决此问题。
1条答案
按热度按时间ifmq2ha21#
因为你不需要像对下面的行那样格式化标题行,所以在
while
循环之前使用$fgets
而不是$fscanf
:字符串
参考IEEE标准1800-2017,21.3.4.2 * 一次阅读一行 * 部分:
可以使用
$fgets
从文件中读取一行。关于您的问题:
我还尝试在
while
循环之前使用$fscanf
行,希望它能跳过第一行它不起作用,因为格式字符串(
"%s\n"
)与标题行不匹配。